From 2a70ec50307fa40ce9955d9b166234188ecd752a Mon Sep 17 00:00:00 2001 From: BlackVortexAI Date: Tue, 25 Aug 2026 07:56:32 +0200 Subject: [PATCH] Refine Control Center and legacy debug UX --- __init__.py | 5 - js/bv_nodepack.core.js | 54 +++++----- py/util/debug_bridge/__init__.py | 3 - py/util/debug_bridge/routes.py | 65 ------------ py/util/debug_bridge/service.py | 83 ---------------- tests/control_center_layout.test.mjs | 48 +++++++++ tests/test_debug_bridge.py | 38 ------- ui/src/components/BVPortal.tsx | 9 +- .../components/control/BVControlComponent.tsx | 11 ++- .../control/BVControlRowComponent.tsx | 8 +- .../components/control/bv_control_center.ts | 12 +++ ui/src/index.css | 31 ++++-- ui/src/index.tsx | 98 +++++-------------- ui/src/regional/legacyPorts.ts | 2 + ui/src/ui/components/forms.tsx | 2 +- 15 files changed, 155 insertions(+), 314 deletions(-) delete mode 100644 py/util/debug_bridge/__init__.py delete mode 100644 py/util/debug_bridge/routes.py delete mode 100644 py/util/debug_bridge/service.py create mode 100644 tests/control_center_layout.test.mjs delete mode 100644 tests/test_debug_bridge.py diff --git a/__init__.py b/__init__.py index ee63246..0103093 100644 --- a/__init__.py +++ b/__init__.py @@ -11,11 +11,6 @@ try: except Exception as error: print(f"BV Node Pack: completion API unavailable: {error}") -try: - from .py.util.debug_bridge import routes as _debug_bridge_routes # noqa: F401 -except Exception as error: - print(f"BV Node Pack: debug bridge API unavailable: {error}") - try: from .py.util import remote_llm_routes as _remote_llm_routes # noqa: F401 except Exception as error: diff --git a/js/bv_nodepack.core.js b/js/bv_nodepack.core.js index 57d6095..a57926b 100644 --- a/js/bv_nodepack.core.js +++ b/js/bv_nodepack.core.js @@ -1,4 +1,4 @@ -var U_=Object.defineProperty;var V_=(e,t,r)=>t in e?U_(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var D=(e,t,r)=>V_(e,typeof t!="symbol"?t+"":t,r);import{app as W_}from"../../scripts/app.js";import{api as $_}from"../../scripts/api.js";var vr=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function H_(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var fb={exports:{}},Zs={},pb={exports:{}},xe={};/** +var I_=Object.defineProperty;var j_=(e,t,r)=>t in e?I_(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var D=(e,t,r)=>j_(e,typeof t!="symbol"?t+"":t,r);import{app as P_}from"../../scripts/app.js";import{api as B_}from"../../scripts/api.js";var br=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function z_(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var fb={exports:{}},Ks={},pb={exports:{}},ye={};/** * @license React * react.production.min.js * @@ -6,7 +6,7 @@ var U_=Object.defineProperty;var V_=(e,t,r)=>t in e?U_(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 qa=Symbol.for("react.element"),Y_=Symbol.for("react.portal"),X_=Symbol.for("react.fragment"),G_=Symbol.for("react.strict_mode"),q_=Symbol.for("react.profiler"),K_=Symbol.for("react.provider"),J_=Symbol.for("react.context"),Z_=Symbol.for("react.forward_ref"),Q_=Symbol.for("react.suspense"),ew=Symbol.for("react.memo"),tw=Symbol.for("react.lazy"),Xp=Symbol.iterator;function rw(e){return e===null||typeof e!="object"?null:(e=Xp&&e[Xp]||e["@@iterator"],typeof e=="function"?e:null)}var gb={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},hb=Object.assign,bb={};function _i(e,t,r){this.props=e,this.context=t,this.refs=bb,this.updater=r||gb}_i.prototype.isReactComponent={};_i.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")};_i.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function vb(){}vb.prototype=_i.prototype;function af(e,t,r){this.props=e,this.context=t,this.refs=bb,this.updater=r||gb}var lf=af.prototype=new vb;lf.constructor=af;hb(lf,_i.prototype);lf.isPureReactComponent=!0;var Gp=Array.isArray,mb=Object.prototype.hasOwnProperty,sf={current:null},yb={key:!0,ref:!0,__self:!0,__source:!0};function xb(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)mb.call(t,o)&&!yb.hasOwnProperty(o)&&(n[o]=t[o]);var l=arguments.length-2;if(l===1)n.children=r;else if(1t in e?U_(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 lw=v,sw=Symbol.for("react.element"),cw=Symbol.for("react.fragment"),uw=Object.prototype.hasOwnProperty,dw=lw.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,fw={key:!0,ref:!0,__self:!0,__source:!0};function wb(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)uw.call(t,o)&&!fw.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:sw,type:e,key:i,ref:a,props:n,_owner:dw.current}}Zs.Fragment=cw;Zs.jsx=wb;Zs.jsxs=wb;fb.exports=Zs;var s=fb.exports,va={},kb={exports:{}},or={},Eb={exports:{}},Tb={};/** + */var tw=v,rw=Symbol.for("react.element"),ow=Symbol.for("react.fragment"),nw=Object.prototype.hasOwnProperty,iw=tw.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,aw={key:!0,ref:!0,__self:!0,__source:!0};function wb(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)nw.call(t,o)&&!aw.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:rw,type:e,key:i,ref:a,props:n,_owner:iw.current}}Ks.Fragment=ow;Ks.jsx=wb;Ks.jsxs=wb;fb.exports=Ks;var s=fb.exports,va={},kb={exports:{}},rr={},Eb={exports:{}},Tb={};/** * @license React * scheduler.production.min.js * @@ -22,7 +22,7 @@ var U_=Object.defineProperty;var V_=(e,t,r)=>t in e?U_(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(A,F){var z=A.length;A.push(F);e:for(;0>>1,Y=A[Z];if(0>>1;Zn(H,z))een(ie,H)?(A[Z]=ie,A[ee]=z,Z=ee):(A[Z]=H,A[Q]=z,Z=Q);else if(een(ie,z))A[Z]=ie,A[ee]=z,Z=ee;else break e}}return F}function n(A,F){var z=A.sortIndex-F.sortIndex;return z!==0?z:A.id-F.id}if(typeof performance=="object"&&typeof performance.now=="function"){var i=performance;e.unstable_now=function(){return i.now()}}else{var a=Date,l=a.now();e.unstable_now=function(){return a.now()-l}}var c=[],u=[],d=1,f=null,p=3,g=!1,m=!1,_=!1,k=typeof setTimeout=="function"?setTimeout:null,b=typeof clearTimeout=="function"?clearTimeout:null,h=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function y(A){for(var F=r(u);F!==null;){if(F.callback===null)o(u);else if(F.startTime<=A)o(u),F.sortIndex=F.expirationTime,t(c,F);else break;F=r(u)}}function w(A){if(_=!1,y(A),!m)if(r(c)!==null)m=!0,S(x);else{var F=r(u);F!==null&&N(w,F.startTime-A)}}function x(A,F){m=!1,_&&(_=!1,b(U),U=-1),g=!0;var z=p;try{for(y(F),f=r(c);f!==null&&(!(f.expirationTime>F)||A&&!M());){var Z=f.callback;if(typeof Z=="function"){f.callback=null,p=f.priorityLevel;var Y=Z(f.expirationTime<=F);F=e.unstable_now(),typeof Y=="function"?f.callback=Y:f===r(c)&&o(c),y(F)}else o(c);f=r(c)}if(f!==null)var q=!0;else{var Q=r(u);Q!==null&&N(w,Q.startTime-F),q=!1}return q}finally{f=null,p=z,g=!1}}var T=!1,L=null,U=-1,P=5,j=-1;function M(){return!(e.unstable_now()-jA||125Z?(A.sortIndex=z,t(u,A),r(c)===null&&A===r(u)&&(_?(b(U),U=-1):_=!0,N(w,z-Z))):(A.sortIndex=Y,t(c,A),m||g||(m=!0,S(x))),A},e.unstable_shouldYield=M,e.unstable_wrapCallback=function(A){var F=p;return function(){var z=p;p=F;try{return A.apply(this,arguments)}finally{p=z}}}})(Tb);Eb.exports=Tb;var pw=Eb.exports;/** + */(function(e){function t(A,F){var z=A.length;A.push(F);e:for(;0>>1,Y=A[Z];if(0>>1;Zn(H,z))een(ne,H)?(A[Z]=ne,A[ee]=z,Z=ee):(A[Z]=H,A[Q]=z,Z=Q);else if(een(ne,z))A[Z]=ne,A[ee]=z,Z=ee;else break e}}return F}function n(A,F){var z=A.sortIndex-F.sortIndex;return z!==0?z:A.id-F.id}if(typeof performance=="object"&&typeof performance.now=="function"){var i=performance;e.unstable_now=function(){return i.now()}}else{var a=Date,l=a.now();e.unstable_now=function(){return a.now()-l}}var c=[],u=[],d=1,f=null,p=3,g=!1,m=!1,_=!1,k=typeof setTimeout=="function"?setTimeout:null,b=typeof clearTimeout=="function"?clearTimeout:null,h=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function x(A){for(var F=r(u);F!==null;){if(F.callback===null)o(u);else if(F.startTime<=A)o(u),F.sortIndex=F.expirationTime,t(c,F);else break;F=r(u)}}function w(A){if(_=!1,x(A),!m)if(r(c)!==null)m=!0,S(y);else{var F=r(u);F!==null&&N(w,F.startTime-A)}}function y(A,F){m=!1,_&&(_=!1,b(U),U=-1),g=!0;var z=p;try{for(x(F),f=r(c);f!==null&&(!(f.expirationTime>F)||A&&!M());){var Z=f.callback;if(typeof Z=="function"){f.callback=null,p=f.priorityLevel;var Y=Z(f.expirationTime<=F);F=e.unstable_now(),typeof Y=="function"?f.callback=Y:f===r(c)&&o(c),x(F)}else o(c);f=r(c)}if(f!==null)var q=!0;else{var Q=r(u);Q!==null&&N(w,Q.startTime-F),q=!1}return q}finally{f=null,p=z,g=!1}}var T=!1,L=null,U=-1,P=5,j=-1;function M(){return!(e.unstable_now()-jA||125Z?(A.sortIndex=z,t(u,A),r(c)===null&&A===r(u)&&(_?(b(U),U=-1):_=!0,N(w,z-Z))):(A.sortIndex=Y,t(c,A),m||g||(m=!0,S(y))),A},e.unstable_shouldYield=M,e.unstable_wrapCallback=function(A){var F=p;return function(){var z=p;p=F;try{return A.apply(this,arguments)}finally{p=z}}}})(Tb);Eb.exports=Tb;var lw=Eb.exports;/** * @license React * react-dom.production.min.js * @@ -30,18 +30,18 @@ var U_=Object.defineProperty;var V_=(e,t,r)=>t in e?U_(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 gw=v,er=pw;function K(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=1;r"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Ou=Object.prototype.hasOwnProperty,hw=/^[: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]*$/,Kp={},Jp={};function bw(e){return Ou.call(Jp,e)?!0:Ou.call(Kp,e)?!1:hw.test(e)?Jp[e]=!0:(Kp[e]=!0,!1)}function vw(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 mw(e,t,r,o){if(t===null||typeof t>"u"||vw(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 Pt(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 yt={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){yt[e]=new Pt(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];yt[t]=new Pt(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){yt[e]=new Pt(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){yt[e]=new Pt(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){yt[e]=new Pt(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){yt[e]=new Pt(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){yt[e]=new Pt(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){yt[e]=new Pt(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){yt[e]=new Pt(e,5,!1,e.toLowerCase(),null,!1,!1)});var uf=/[\-:]([a-z])/g;function df(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(uf,df);yt[t]=new Pt(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(uf,df);yt[t]=new Pt(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(uf,df);yt[t]=new Pt(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){yt[e]=new Pt(e,1,!1,e.toLowerCase(),null,!1,!1)});yt.xlinkHref=new Pt("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){yt[e]=new Pt(e,1,!1,e.toLowerCase(),null,!0,!0)});function ff(e,t,r,o){var n=yt.hasOwnProperty(t)?yt[t]:null;(n!==null?n.type!==0:o||!(2"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Lu=Object.prototype.hasOwnProperty,cw=/^[: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]*$/,Kp={},Jp={};function uw(e){return Lu.call(Jp,e)?!0:Lu.call(Kp,e)?!1:cw.test(e)?Jp[e]=!0:(Kp[e]=!0,!1)}function dw(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 fw(e,t,r,o){if(t===null||typeof t>"u"||dw(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 Pt(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 Pt(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 Pt(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){xt[e]=new Pt(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){xt[e]=new Pt(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 Pt(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){xt[e]=new Pt(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){xt[e]=new Pt(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){xt[e]=new Pt(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){xt[e]=new Pt(e,5,!1,e.toLowerCase(),null,!1,!1)});var uf=/[\-:]([a-z])/g;function df(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(uf,df);xt[t]=new Pt(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(uf,df);xt[t]=new Pt(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(uf,df);xt[t]=new Pt(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){xt[e]=new Pt(e,1,!1,e.toLowerCase(),null,!1,!1)});xt.xlinkHref=new Pt("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){xt[e]=new Pt(e,1,!1,e.toLowerCase(),null,!0,!0)});function ff(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{Vc=!1,Error.prepareStackTrace=r}return(e=e?e.displayName||e.name:"")?Hi(e):""}function yw(e){switch(e.tag){case 5:return Hi(e.type);case 16:return Hi("Lazy");case 13:return Hi("Suspense");case 19:return Hi("SuspenseList");case 0:case 2:case 15:return e=Wc(e.type,!1),e;case 11:return e=Wc(e.type.render,!1),e;case 1:return e=Wc(e.type,!0),e;default:return""}}function Iu(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 Pn:return"Fragment";case jn:return"Portal";case Mu:return"Profiler";case pf:return"StrictMode";case Au:return"Suspense";case Du:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Lb:return(e.displayName||"Context")+".Consumer";case Sb:return(e._context.displayName||"Context")+".Provider";case gf:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case hf:return t=e.displayName||null,t!==null?t:Iu(e.type)||"Memo";case mo:t=e._payload,e=e._init;try{return Iu(e(t))}catch{}}return null}function xw(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 Iu(t);case 8:return t===pf?"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 zo(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Nb(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function _w(e){var t=Nb(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 gl(e){e._valueTracker||(e._valueTracker=_w(e))}function Ob(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var r=t.getValue(),o="";return e&&(o=Nb(e)?e.checked?"true":"false":e.value),e=o,e!==r?(t.setValue(e),!0):!1}function ls(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 ju(e,t){var r=t.checked;return Ge({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:r??e._wrapperState.initialChecked})}function Qp(e,t){var r=t.defaultValue==null?"":t.defaultValue,o=t.checked!=null?t.checked:t.defaultChecked;r=zo(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 Mb(e,t){t=t.checked,t!=null&&ff(e,"checked",t,!1)}function Pu(e,t){Mb(e,t);var r=zo(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")?Bu(e,t.type,r):t.hasOwnProperty("defaultValue")&&Bu(e,t.type,zo(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function eg(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 Bu(e,t,r){(t!=="number"||ls(e.ownerDocument)!==e)&&(r==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+r&&(e.defaultValue=""+r))}var Yi=Array.isArray;function qn(e,t,r,o){if(e=e.options,t){t={};for(var n=0;n"+t.valueOf().toString()+"",t=hl.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function ya(e,t){if(t){var r=e.firstChild;if(r&&r===e.lastChild&&r.nodeType===3){r.nodeValue=t;return}}e.textContent=t}var Zi={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},ww=["Webkit","ms","Moz","O"];Object.keys(Zi).forEach(function(e){ww.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Zi[t]=Zi[e]})});function jb(e,t,r){return t==null||typeof t=="boolean"||t===""?"":r||typeof t!="number"||t===0||Zi.hasOwnProperty(e)&&Zi[e]?(""+t).trim():t+"px"}function Pb(e,t){e=e.style;for(var r in t)if(t.hasOwnProperty(r)){var o=r.indexOf("--")===0,n=jb(r,t[r],o);r==="float"&&(r="cssFloat"),o?e.setProperty(r,n):e[r]=n}}var kw=Ge({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 Uu(e,t){if(t){if(kw[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(K(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(K(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(K(61))}if(t.style!=null&&typeof t.style!="object")throw Error(K(62))}}function Vu(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 Wu=null;function bf(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var $u=null,Kn=null,Jn=null;function og(e){if(e=Za(e)){if(typeof $u!="function")throw Error(K(280));var t=e.stateNode;t&&(t=oc(t),$u(e.stateNode,e.type,t))}}function Bb(e){Kn?Jn?Jn.push(e):Jn=[e]:Kn=e}function zb(){if(Kn){var e=Kn,t=Jn;if(Jn=Kn=null,og(e),t)for(e=0;e>>=0,e===0?32:31-(Dw(e)/Iw|0)|0}var bl=64,vl=4194304;function Xi(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 ds(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=Xi(l):(i&=a,i!==0&&(o=Xi(i)))}else a=r&~n,a!==0?o=Xi(a):i!==0&&(o=Xi(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 Ka(e,t,r){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Sr(t),e[t]=r}function zw(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=ea),fg=" ",pg=!1;function iv(e,t){switch(e){case"keyup":return p0.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function av(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Bn=!1;function h0(e,t){switch(e){case"compositionend":return av(t);case"keypress":return t.which!==32?null:(pg=!0,fg);case"textInput":return e=t.data,e===fg&&pg?null:e;default:return null}}function b0(e,t){if(Bn)return e==="compositionend"||!Ef&&iv(e,t)?(e=ov(),Vl=_f=Eo=null,Bn=!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=vg(r)}}function uv(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?uv(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function dv(){for(var e=window,t=ls();t instanceof e.HTMLIFrameElement;){try{var r=typeof t.contentWindow.location.href=="string"}catch{r=!1}if(r)e=t.contentWindow;else break;t=ls(e.document)}return t}function Tf(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 T0(e){var t=dv(),r=e.focusedElem,o=e.selectionRange;if(t!==r&&r&&r.ownerDocument&&uv(r.ownerDocument.documentElement,r)){if(o!==null&&Tf(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=mg(r,i);var a=mg(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,zn=null,Ku=null,ra=null,Ju=!1;function yg(e,t,r){var o=r.window===r?r.document:r.nodeType===9?r:r.ownerDocument;Ju||zn==null||zn!==ls(o)||(o=zn,"selectionStart"in o&&Tf(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}),ra&&Ta(ra,o)||(ra=o,o=gs(Ku,"onSelect"),0Vn||(e.current=od[Vn],od[Vn]=null,Vn--)}function Pe(e,t){Vn++,od[Vn]=e.current,e.current=t}var Fo={},Ot=Wo(Fo),Wt=Wo(!1),hn=Fo;function ai(e,t){var r=e.type.contextTypes;if(!r)return Fo;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 $t(e){return e=e.childContextTypes,e!=null}function bs(){Fe(Wt),Fe(Ot)}function Rg(e,t,r){if(Ot.current!==Fo)throw Error(K(168));Pe(Ot,t),Pe(Wt,r)}function xv(e,t,r){var o=e.stateNode;if(t=t.childContextTypes,typeof o.getChildContext!="function")return r;o=o.getChildContext();for(var n in o)if(!(n in t))throw Error(K(108,xw(e)||"Unknown",n));return Ge({},r,o)}function vs(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Fo,hn=Ot.current,Pe(Ot,e),Pe(Wt,Wt.current),!0}function Sg(e,t,r){var o=e.stateNode;if(!o)throw Error(K(169));r?(e=xv(e,t,hn),o.__reactInternalMemoizedMergedChildContext=e,Fe(Wt),Fe(Ot),Pe(Ot,e)):Fe(Wt),Pe(Wt,r)}var Kr=null,nc=!1,ou=!1;function _v(e){Kr===null?Kr=[e]:Kr.push(e)}function P0(e){nc=!0,_v(e)}function $o(){if(!ou&&Kr!==null){ou=!0;var e=0,t=Ae;try{var r=Kr;for(Ae=1;e>=a,n-=a,Qr=1<<32-Sr(t)+n|r<U?(P=L,L=null):P=L.sibling;var j=p(b,L,y[U],w);if(j===null){L===null&&(L=P);break}e&&L&&j.alternate===null&&t(b,L),h=i(j,h,U),T===null?x=j:T.sibling=j,T=j,L=P}if(U===y.length)return r(b,L),We&&Qo(b,U),x;if(L===null){for(;UU?(P=L,L=null):P=L.sibling;var M=p(b,L,j.value,w);if(M===null){L===null&&(L=P);break}e&&L&&M.alternate===null&&t(b,L),h=i(M,h,U),T===null?x=M:T.sibling=M,T=M,L=P}if(j.done)return r(b,L),We&&Qo(b,U),x;if(L===null){for(;!j.done;U++,j=y.next())j=f(b,j.value,w),j!==null&&(h=i(j,h,U),T===null?x=j:T.sibling=j,T=j);return We&&Qo(b,U),x}for(L=o(b,L);!j.done;U++,j=y.next())j=g(L,b,U,j.value,w),j!==null&&(e&&j.alternate!==null&&L.delete(j.key===null?U:j.key),h=i(j,h,U),T===null?x=j:T.sibling=j,T=j);return e&&L.forEach(function(O){return t(b,O)}),We&&Qo(b,U),x}function k(b,h,y,w){if(typeof y=="object"&&y!==null&&y.type===Pn&&y.key===null&&(y=y.props.children),typeof y=="object"&&y!==null){switch(y.$$typeof){case pl:e:{for(var x=y.key,T=h;T!==null;){if(T.key===x){if(x=y.type,x===Pn){if(T.tag===7){r(b,T.sibling),h=n(T,y.props.children),h.return=b,b=h;break e}}else if(T.elementType===x||typeof x=="object"&&x!==null&&x.$$typeof===mo&&Ng(x)===T.type){r(b,T.sibling),h=n(T,y.props),h.ref=Pi(b,T,y),h.return=b,b=h;break e}r(b,T);break}else t(b,T);T=T.sibling}y.type===Pn?(h=un(y.props.children,b.mode,w,y.key),h.return=b,b=h):(w=Kl(y.type,y.key,y.props,null,b.mode,w),w.ref=Pi(b,h,y),w.return=b,b=w)}return a(b);case jn:e:{for(T=y.key;h!==null;){if(h.key===T)if(h.tag===4&&h.stateNode.containerInfo===y.containerInfo&&h.stateNode.implementation===y.implementation){r(b,h.sibling),h=n(h,y.children||[]),h.return=b,b=h;break e}else{r(b,h);break}else t(b,h);h=h.sibling}h=du(y,b.mode,w),h.return=b,b=h}return a(b);case mo:return T=y._init,k(b,h,T(y._payload),w)}if(Yi(y))return m(b,h,y,w);if(Mi(y))return _(b,h,y,w);El(b,y)}return typeof y=="string"&&y!==""||typeof y=="number"?(y=""+y,h!==null&&h.tag===6?(r(b,h.sibling),h=n(h,y),h.return=b,b=h):(r(b,h),h=uu(y,b.mode,w),h.return=b,b=h),a(b)):r(b,h)}return k}var si=Tv(!0),Rv=Tv(!1),xs=Wo(null),_s=null,Hn=null,Cf=null;function Nf(){Cf=Hn=_s=null}function Of(e){var t=xs.current;Fe(xs),e._currentValue=t}function ad(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 Qn(e,t){_s=e,Cf=Hn=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Vt=!0),e.firstContext=null)}function mr(e){var t=e._currentValue;if(Cf!==e)if(e={context:e,memoizedValue:t,next:null},Hn===null){if(_s===null)throw Error(K(308));Hn=e,_s.dependencies={lanes:0,firstContext:e}}else Hn=Hn.next=e;return t}var on=null;function Mf(e){on===null?on=[e]:on.push(e)}function Sv(e,t,r,o){var n=t.interleaved;return n===null?(r.next=r,Mf(t)):(r.next=n.next,n.next=r),t.interleaved=r,so(e,o)}function so(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 yo=!1;function Af(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Lv(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 oo(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Ao(e,t,r){var o=e.updateQueue;if(o===null)return null;if(o=o.shared,ke&2){var n=o.pending;return n===null?t.next=t:(t.next=n.next,n.next=t),o.pending=t,so(e,r)}return n=o.interleaved,n===null?(t.next=t,Mf(o)):(t.next=n.next,n.next=t),o.interleaved=t,so(e,r)}function $l(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,mf(e,r)}}function Og(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 ws(e,t,r,o){var n=e.updateQueue;yo=!1;var i=n.firstBaseUpdate,a=n.lastBaseUpdate,l=n.shared.pending;if(l!==null){n.shared.pending=null;var c=l,u=c.next;c.next=null,a===null?i=u:a.next=u,a=c;var d=e.alternate;d!==null&&(d=d.updateQueue,l=d.lastBaseUpdate,l!==a&&(l===null?d.firstBaseUpdate=u:l.next=u,d.lastBaseUpdate=c))}if(i!==null){var f=n.baseState;a=0,d=u=c=null,l=i;do{var p=l.lane,g=l.eventTime;if((o&p)===p){d!==null&&(d=d.next={eventTime:g,lane:0,tag:l.tag,payload:l.payload,callback:l.callback,next:null});e:{var m=e,_=l;switch(p=t,g=r,_.tag){case 1:if(m=_.payload,typeof m=="function"){f=m.call(g,f,p);break e}f=m;break e;case 3:m.flags=m.flags&-65537|128;case 0:if(m=_.payload,p=typeof m=="function"?m.call(g,f,p):m,p==null)break e;f=Ge({},f,p);break e;case 2:yo=!0}}l.callback!==null&&l.lane!==0&&(e.flags|=64,p=n.effects,p===null?n.effects=[l]:p.push(l))}else g={eventTime:g,lane:p,tag:l.tag,payload:l.payload,callback:l.callback,next:null},d===null?(u=d=g,c=f):d=d.next=g,a|=p;if(l=l.next,l===null){if(l=n.shared.pending,l===null)break;p=l,l=p.next,p.next=null,n.lastBaseUpdate=p,n.shared.pending=null}}while(!0);if(d===null&&(c=f),n.baseState=c,n.firstBaseUpdate=u,n.lastBaseUpdate=d,t=n.shared.interleaved,t!==null){n=t;do a|=n.lane,n=n.next;while(n!==t)}else i===null&&(n.shared.lanes=0);mn|=a,e.lanes=a,e.memoizedState=f}}function Mg(e,t,r){if(e=t.effects,t.effects=null,e!==null)for(t=0;tr?r:4,e(!0);var o=iu.transition;iu.transition={};try{e(!1),t()}finally{Ae=r,iu.transition=o}}function Hv(){return yr().memoizedState}function U0(e,t,r){var o=Io(e);if(r={lane:o,action:r,hasEagerState:!1,eagerState:null,next:null},Yv(e))Xv(t,r);else if(r=Sv(e,t,r,o),r!==null){var n=It();Lr(r,e,o,n),Gv(r,t,o)}}function V0(e,t,r){var o=Io(e),n={lane:o,action:r,hasEagerState:!1,eagerState:null,next:null};if(Yv(e))Xv(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,Cr(l,a)){var c=t.interleaved;c===null?(n.next=n,Mf(t)):(n.next=c.next,c.next=n),t.interleaved=n;return}}catch{}finally{}r=Sv(e,t,n,o),r!==null&&(n=It(),Lr(r,e,o,n),Gv(r,t,o))}}function Yv(e){var t=e.alternate;return e===Xe||t!==null&&t===Xe}function Xv(e,t){oa=Es=!0;var r=e.pending;r===null?t.next=t:(t.next=r.next,r.next=t),e.pending=t}function Gv(e,t,r){if(r&4194240){var o=t.lanes;o&=e.pendingLanes,r|=o,t.lanes=r,mf(e,r)}}var Ts={readContext:mr,useCallback:_t,useContext:_t,useEffect:_t,useImperativeHandle:_t,useInsertionEffect:_t,useLayoutEffect:_t,useMemo:_t,useReducer:_t,useRef:_t,useState:_t,useDebugValue:_t,useDeferredValue:_t,useTransition:_t,useMutableSource:_t,useSyncExternalStore:_t,useId:_t,unstable_isNewReconciler:!1},W0={readContext:mr,useCallback:function(e,t){return Ir().memoizedState=[e,t===void 0?null:t],e},useContext:mr,useEffect:Dg,useImperativeHandle:function(e,t,r){return r=r!=null?r.concat([e]):null,Yl(4194308,4,Fv.bind(null,t,e),r)},useLayoutEffect:function(e,t){return Yl(4194308,4,e,t)},useInsertionEffect:function(e,t){return Yl(4,2,e,t)},useMemo:function(e,t){var r=Ir();return t=t===void 0?null:t,e=e(),r.memoizedState=[e,t],e},useReducer:function(e,t,r){var o=Ir();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=U0.bind(null,Xe,e),[o.memoizedState,e]},useRef:function(e){var t=Ir();return e={current:e},t.memoizedState=e},useState:Ag,useDebugValue:Uf,useDeferredValue:function(e){return Ir().memoizedState=e},useTransition:function(){var e=Ag(!1),t=e[0];return e=F0.bind(null,e[1]),Ir().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,r){var o=Xe,n=Ir();if(We){if(r===void 0)throw Error(K(407));r=r()}else{if(r=t(),ht===null)throw Error(K(349));vn&30||Mv(o,t,r)}n.memoizedState=r;var i={value:r,getSnapshot:t};return n.queue=i,Dg(Dv.bind(null,o,i,e),[e]),o.flags|=2048,Aa(9,Av.bind(null,o,i,r,t),void 0,null),r},useId:function(){var e=Ir(),t=ht.identifierPrefix;if(We){var r=eo,o=Qr;r=(o&~(1<<32-Sr(o)-1)).toString(32)+r,t=":"+t+"R"+r,r=Oa++,0")&&(c=c.replace("",e.displayName)),c}while(1<=a&&0<=l);break}}}finally{zc=!1,Error.prepareStackTrace=r}return(e=e?e.displayName||e.name:"")?$i(e):""}function pw(e){switch(e.tag){case 5:return $i(e.type);case 16:return $i("Lazy");case 13:return $i("Suspense");case 19:return $i("SuspenseList");case 0:case 2:case 15:return e=Fc(e.type,!1),e;case 11:return e=Fc(e.type.render,!1),e;case 1:return e=Fc(e.type,!0),e;default:return""}}function Mu(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 In:return"Fragment";case Dn:return"Portal";case Cu:return"Profiler";case pf:return"StrictMode";case Nu:return"Suspense";case Ou:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Lb:return(e.displayName||"Context")+".Consumer";case Sb:return(e._context.displayName||"Context")+".Provider";case gf:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case hf:return t=e.displayName||null,t!==null?t:Mu(e.type)||"Memo";case vo:t=e._payload,e=e._init;try{return Mu(e(t))}catch{}}return null}function gw(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 Mu(t);case 8:return t===pf?"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 Bo(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Nb(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function hw(e){var t=Nb(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 gl(e){e._valueTracker||(e._valueTracker=hw(e))}function Ob(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var r=t.getValue(),o="";return e&&(o=Nb(e)?e.checked?"true":"false":e.value),e=o,e!==r?(t.setValue(e),!0):!1}function as(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 Au(e,t){var r=t.checked;return Ge({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:r??e._wrapperState.initialChecked})}function Qp(e,t){var r=t.defaultValue==null?"":t.defaultValue,o=t.checked!=null?t.checked:t.defaultChecked;r=Bo(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 Mb(e,t){t=t.checked,t!=null&&ff(e,"checked",t,!1)}function Du(e,t){Mb(e,t);var r=Bo(t.value),o=t.type;if(r!=null)o==="number"?(r===0&&e.value===""||e.value!=r)&&(e.value=""+r):e.value!==""+r&&(e.value=""+r);else if(o==="submit"||o==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Iu(e,t.type,r):t.hasOwnProperty("defaultValue")&&Iu(e,t.type,Bo(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function eg(e,t,r){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var o=t.type;if(!(o!=="submit"&&o!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,r||t===e.value||(e.value=t),e.defaultValue=t}r=e.name,r!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,r!==""&&(e.name=r)}function Iu(e,t,r){(t!=="number"||as(e.ownerDocument)!==e)&&(r==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+r&&(e.defaultValue=""+r))}var Hi=Array.isArray;function Xn(e,t,r,o){if(e=e.options,t){t={};for(var n=0;n"+t.valueOf().toString()+"",t=hl.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function xa(e,t){if(t){var r=e.firstChild;if(r&&r===e.lastChild&&r.nodeType===3){r.nodeValue=t;return}}e.textContent=t}var Ji={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},bw=["Webkit","ms","Moz","O"];Object.keys(Ji).forEach(function(e){bw.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Ji[t]=Ji[e]})});function jb(e,t,r){return t==null||typeof t=="boolean"||t===""?"":r||typeof t!="number"||t===0||Ji.hasOwnProperty(e)&&Ji[e]?(""+t).trim():t+"px"}function Pb(e,t){e=e.style;for(var r in t)if(t.hasOwnProperty(r)){var o=r.indexOf("--")===0,n=jb(r,t[r],o);r==="float"&&(r="cssFloat"),o?e.setProperty(r,n):e[r]=n}}var vw=Ge({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 Bu(e,t){if(t){if(vw[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(K(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(K(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(K(61))}if(t.style!=null&&typeof t.style!="object")throw Error(K(62))}}function zu(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 Fu=null;function bf(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Uu=null,Gn=null,qn=null;function og(e){if(e=Za(e)){if(typeof Uu!="function")throw Error(K(280));var t=e.stateNode;t&&(t=tc(t),Uu(e.stateNode,e.type,t))}}function Bb(e){Gn?qn?qn.push(e):qn=[e]:Gn=e}function zb(){if(Gn){var e=Gn,t=qn;if(qn=Gn=null,og(e),t)for(e=0;e>>=0,e===0?32:31-(Lw(e)/Cw|0)|0}var bl=64,vl=4194304;function Yi(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 us(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=Yi(l):(i&=a,i!==0&&(o=Yi(i)))}else a=r&~n,a!==0?o=Yi(a):i!==0&&(o=Yi(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 Ka(e,t,r){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Rr(t),e[t]=r}function Aw(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=Qi),fg=" ",pg=!1;function iv(e,t){switch(e){case"keyup":return l0.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function av(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var jn=!1;function c0(e,t){switch(e){case"compositionend":return av(t);case"keypress":return t.which!==32?null:(pg=!0,fg);case"textInput":return e=t.data,e===fg&&pg?null:e;default:return null}}function u0(e,t){if(jn)return e==="compositionend"||!Ef&&iv(e,t)?(e=ov(),Ul=_f=ko=null,jn=!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=vg(r)}}function uv(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?uv(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function dv(){for(var e=window,t=as();t instanceof e.HTMLIFrameElement;){try{var r=typeof t.contentWindow.location.href=="string"}catch{r=!1}if(r)e=t.contentWindow;else break;t=as(e.document)}return t}function Tf(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 x0(e){var t=dv(),r=e.focusedElem,o=e.selectionRange;if(t!==r&&r&&r.ownerDocument&&uv(r.ownerDocument.documentElement,r)){if(o!==null&&Tf(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=mg(r,i);var a=mg(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,Pn=null,Xu=null,ta=null,Gu=!1;function xg(e,t,r){var o=r.window===r?r.document:r.nodeType===9?r:r.ownerDocument;Gu||Pn==null||Pn!==as(o)||(o=Pn,"selectionStart"in o&&Tf(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}),ta&&Ta(ta,o)||(ta=o,o=ps(Xu,"onSelect"),0Fn||(e.current=ed[Fn],ed[Fn]=null,Fn--)}function Pe(e,t){Fn++,ed[Fn]=e.current,e.current=t}var zo={},Ot=Vo(zo),Wt=Vo(!1),gn=zo;function oi(e,t){var r=e.type.contextTypes;if(!r)return zo;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 $t(e){return e=e.childContextTypes,e!=null}function hs(){Fe(Wt),Fe(Ot)}function Rg(e,t,r){if(Ot.current!==zo)throw Error(K(168));Pe(Ot,t),Pe(Wt,r)}function yv(e,t,r){var o=e.stateNode;if(t=t.childContextTypes,typeof o.getChildContext!="function")return r;o=o.getChildContext();for(var n in o)if(!(n in t))throw Error(K(108,gw(e)||"Unknown",n));return Ge({},r,o)}function bs(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||zo,gn=Ot.current,Pe(Ot,e),Pe(Wt,Wt.current),!0}function Sg(e,t,r){var o=e.stateNode;if(!o)throw Error(K(169));r?(e=yv(e,t,gn),o.__reactInternalMemoizedMergedChildContext=e,Fe(Wt),Fe(Ot),Pe(Ot,e)):Fe(Wt),Pe(Wt,r)}var Kr=null,rc=!1,eu=!1;function _v(e){Kr===null?Kr=[e]:Kr.push(e)}function O0(e){rc=!0,_v(e)}function Wo(){if(!eu&&Kr!==null){eu=!0;var e=0,t=Ae;try{var r=Kr;for(Ae=1;e>=a,n-=a,Qr=1<<32-Rr(t)+n|r<U?(P=L,L=null):P=L.sibling;var j=p(b,L,x[U],w);if(j===null){L===null&&(L=P);break}e&&L&&j.alternate===null&&t(b,L),h=i(j,h,U),T===null?y=j:T.sibling=j,T=j,L=P}if(U===x.length)return r(b,L),We&&Zo(b,U),y;if(L===null){for(;UU?(P=L,L=null):P=L.sibling;var M=p(b,L,j.value,w);if(M===null){L===null&&(L=P);break}e&&L&&M.alternate===null&&t(b,L),h=i(M,h,U),T===null?y=M:T.sibling=M,T=M,L=P}if(j.done)return r(b,L),We&&Zo(b,U),y;if(L===null){for(;!j.done;U++,j=x.next())j=f(b,j.value,w),j!==null&&(h=i(j,h,U),T===null?y=j:T.sibling=j,T=j);return We&&Zo(b,U),y}for(L=o(b,L);!j.done;U++,j=x.next())j=g(L,b,U,j.value,w),j!==null&&(e&&j.alternate!==null&&L.delete(j.key===null?U:j.key),h=i(j,h,U),T===null?y=j:T.sibling=j,T=j);return e&&L.forEach(function(O){return t(b,O)}),We&&Zo(b,U),y}function k(b,h,x,w){if(typeof x=="object"&&x!==null&&x.type===In&&x.key===null&&(x=x.props.children),typeof x=="object"&&x!==null){switch(x.$$typeof){case pl:e:{for(var y=x.key,T=h;T!==null;){if(T.key===y){if(y=x.type,y===In){if(T.tag===7){r(b,T.sibling),h=n(T,x.props.children),h.return=b,b=h;break e}}else if(T.elementType===y||typeof y=="object"&&y!==null&&y.$$typeof===vo&&Ng(y)===T.type){r(b,T.sibling),h=n(T,x.props),h.ref=ji(b,T,x),h.return=b,b=h;break e}r(b,T);break}else t(b,T);T=T.sibling}x.type===In?(h=cn(x.props.children,b.mode,w,x.key),h.return=b,b=h):(w=ql(x.type,x.key,x.props,null,b.mode,w),w.ref=ji(b,h,x),w.return=b,b=w)}return a(b);case Dn:e:{for(T=x.key;h!==null;){if(h.key===T)if(h.tag===4&&h.stateNode.containerInfo===x.containerInfo&&h.stateNode.implementation===x.implementation){r(b,h.sibling),h=n(h,x.children||[]),h.return=b,b=h;break e}else{r(b,h);break}else t(b,h);h=h.sibling}h=su(x,b.mode,w),h.return=b,b=h}return a(b);case vo:return T=x._init,k(b,h,T(x._payload),w)}if(Hi(x))return m(b,h,x,w);if(Oi(x))return _(b,h,x,w);El(b,x)}return typeof x=="string"&&x!==""||typeof x=="number"?(x=""+x,h!==null&&h.tag===6?(r(b,h.sibling),h=n(h,x),h.return=b,b=h):(r(b,h),h=lu(x,b.mode,w),h.return=b,b=h),a(b)):r(b,h)}return k}var ii=Tv(!0),Rv=Tv(!1),xs=Vo(null),ys=null,Wn=null,Cf=null;function Nf(){Cf=Wn=ys=null}function Of(e){var t=xs.current;Fe(xs),e._currentValue=t}function od(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 Jn(e,t){ys=e,Cf=Wn=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Vt=!0),e.firstContext=null)}function vr(e){var t=e._currentValue;if(Cf!==e)if(e={context:e,memoizedValue:t,next:null},Wn===null){if(ys===null)throw Error(K(308));Wn=e,ys.dependencies={lanes:0,firstContext:e}}else Wn=Wn.next=e;return t}var rn=null;function Mf(e){rn===null?rn=[e]:rn.push(e)}function Sv(e,t,r,o){var n=t.interleaved;return n===null?(r.next=r,Mf(t)):(r.next=n.next,n.next=r),t.interleaved=r,lo(e,o)}function lo(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 mo=!1;function Af(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Lv(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 oo(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Mo(e,t,r){var o=e.updateQueue;if(o===null)return null;if(o=o.shared,ke&2){var n=o.pending;return n===null?t.next=t:(t.next=n.next,n.next=t),o.pending=t,lo(e,r)}return n=o.interleaved,n===null?(t.next=t,Mf(o)):(t.next=n.next,n.next=t),o.interleaved=t,lo(e,r)}function Wl(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,mf(e,r)}}function Og(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 _s(e,t,r,o){var n=e.updateQueue;mo=!1;var i=n.firstBaseUpdate,a=n.lastBaseUpdate,l=n.shared.pending;if(l!==null){n.shared.pending=null;var c=l,u=c.next;c.next=null,a===null?i=u:a.next=u,a=c;var d=e.alternate;d!==null&&(d=d.updateQueue,l=d.lastBaseUpdate,l!==a&&(l===null?d.firstBaseUpdate=u:l.next=u,d.lastBaseUpdate=c))}if(i!==null){var f=n.baseState;a=0,d=u=c=null,l=i;do{var p=l.lane,g=l.eventTime;if((o&p)===p){d!==null&&(d=d.next={eventTime:g,lane:0,tag:l.tag,payload:l.payload,callback:l.callback,next:null});e:{var m=e,_=l;switch(p=t,g=r,_.tag){case 1:if(m=_.payload,typeof m=="function"){f=m.call(g,f,p);break e}f=m;break e;case 3:m.flags=m.flags&-65537|128;case 0:if(m=_.payload,p=typeof m=="function"?m.call(g,f,p):m,p==null)break e;f=Ge({},f,p);break e;case 2:mo=!0}}l.callback!==null&&l.lane!==0&&(e.flags|=64,p=n.effects,p===null?n.effects=[l]:p.push(l))}else g={eventTime:g,lane:p,tag:l.tag,payload:l.payload,callback:l.callback,next:null},d===null?(u=d=g,c=f):d=d.next=g,a|=p;if(l=l.next,l===null){if(l=n.shared.pending,l===null)break;p=l,l=p.next,p.next=null,n.lastBaseUpdate=p,n.shared.pending=null}}while(!0);if(d===null&&(c=f),n.baseState=c,n.firstBaseUpdate=u,n.lastBaseUpdate=d,t=n.shared.interleaved,t!==null){n=t;do a|=n.lane,n=n.next;while(n!==t)}else i===null&&(n.shared.lanes=0);vn|=a,e.lanes=a,e.memoizedState=f}}function Mg(e,t,r){if(e=t.effects,t.effects=null,e!==null)for(t=0;tr?r:4,e(!0);var o=ru.transition;ru.transition={};try{e(!1),t()}finally{Ae=r,ru.transition=o}}function Hv(){return mr().memoizedState}function I0(e,t,r){var o=Do(e);if(r={lane:o,action:r,hasEagerState:!1,eagerState:null,next:null},Yv(e))Xv(t,r);else if(r=Sv(e,t,r,o),r!==null){var n=It();Sr(r,e,o,n),Gv(r,t,o)}}function j0(e,t,r){var o=Do(e),n={lane:o,action:r,hasEagerState:!1,eagerState:null,next:null};if(Yv(e))Xv(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,Lr(l,a)){var c=t.interleaved;c===null?(n.next=n,Mf(t)):(n.next=c.next,c.next=n),t.interleaved=n;return}}catch{}finally{}r=Sv(e,t,n,o),r!==null&&(n=It(),Sr(r,e,o,n),Gv(r,t,o))}}function Yv(e){var t=e.alternate;return e===Xe||t!==null&&t===Xe}function Xv(e,t){ra=ks=!0;var r=e.pending;r===null?t.next=t:(t.next=r.next,r.next=t),e.pending=t}function Gv(e,t,r){if(r&4194240){var o=t.lanes;o&=e.pendingLanes,r|=o,t.lanes=r,mf(e,r)}}var Es={readContext:vr,useCallback:_t,useContext:_t,useEffect:_t,useImperativeHandle:_t,useInsertionEffect:_t,useLayoutEffect:_t,useMemo:_t,useReducer:_t,useRef:_t,useState:_t,useDebugValue:_t,useDeferredValue:_t,useTransition:_t,useMutableSource:_t,useSyncExternalStore:_t,useId:_t,unstable_isNewReconciler:!1},P0={readContext:vr,useCallback:function(e,t){return Dr().memoizedState=[e,t===void 0?null:t],e},useContext:vr,useEffect:Dg,useImperativeHandle:function(e,t,r){return r=r!=null?r.concat([e]):null,Hl(4194308,4,Fv.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=Dr();return t=t===void 0?null:t,e=e(),r.memoizedState=[e,t],e},useReducer:function(e,t,r){var o=Dr();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=I0.bind(null,Xe,e),[o.memoizedState,e]},useRef:function(e){var t=Dr();return e={current:e},t.memoizedState=e},useState:Ag,useDebugValue:Uf,useDeferredValue:function(e){return Dr().memoizedState=e},useTransition:function(){var e=Ag(!1),t=e[0];return e=D0.bind(null,e[1]),Dr().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,r){var o=Xe,n=Dr();if(We){if(r===void 0)throw Error(K(407));r=r()}else{if(r=t(),ht===null)throw Error(K(349));bn&30||Mv(o,t,r)}n.memoizedState=r;var i={value:r,getSnapshot:t};return n.queue=i,Dg(Dv.bind(null,o,i,e),[e]),o.flags|=2048,Aa(9,Av.bind(null,o,i,r,t),void 0,null),r},useId:function(){var e=Dr(),t=ht.identifierPrefix;if(We){var r=eo,o=Qr;r=(o&~(1<<32-Rr(o)-1)).toString(32)+r,t=":"+t+"R"+r,r=Oa++,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[Br]=t,e[La]=o,nm(e,t,!1,!1),t.stateNode=e;e:{switch(a=Vu(r,o),r){case"dialog":ze("cancel",e),ze("close",e),n=o;break;case"iframe":case"object":case"embed":ze("load",e),n=o;break;case"video":case"audio":for(n=0;ndi&&(t.flags|=128,o=!0,Bi(i,!1),t.lanes=4194304)}else{if(!o)if(e=ks(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&&!We)return wt(t),null}else 2*Ze()-i.renderingStartTime>di&&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=Ze(),t.sibling=null,r=Ye.current,Pe(Ye,o?r&1|2:r&1),t):(wt(t),null);case 22:case 23:return Xf(),o=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==o&&(t.flags|=8192),o&&t.mode&1?Gt&1073741824&&(wt(t),t.subtreeFlags&6&&(t.flags|=8192)):wt(t),null;case 24:return null;case 25:return null}throw Error(K(156,t.tag))}function J0(e,t){switch(Sf(t),t.tag){case 1:return $t(t.type)&&bs(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ci(),Fe(Wt),Fe(Ot),jf(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return If(t),null;case 13:if(Fe(Ye),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(K(340));li()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Fe(Ye),null;case 4:return ci(),null;case 10:return Of(t.type._context),null;case 22:case 23:return Xf(),null;case 24:return null;default:return null}}var Rl=!1,St=!1,Z0=typeof WeakSet=="function"?WeakSet:Set,ae=null;function Yn(e,t){var r=e.ref;if(r!==null)if(typeof r=="function")try{r(null)}catch(o){Ke(e,t,o)}else r.current=null}function hd(e,t,r){try{r()}catch(o){Ke(e,t,o)}}var Hg=!1;function Q0(e,t){if(Zu=fs,e=dv(),Tf(e)){if("selectionStart"in e)var r={start:e.selectionStart,end:e.selectionEnd};else e:{r=(r=e.ownerDocument)&&r.defaultView||window;var o=r.getSelection&&r.getSelection();if(o&&o.rangeCount!==0){r=o.anchorNode;var n=o.anchorOffset,i=o.focusNode;o=o.focusOffset;try{r.nodeType,i.nodeType}catch{r=null;break e}var a=0,l=-1,c=-1,u=0,d=0,f=e,p=null;t:for(;;){for(var g;f!==r||n!==0&&f.nodeType!==3||(l=a+n),f!==i||o!==0&&f.nodeType!==3||(c=a+o),f.nodeType===3&&(a+=f.nodeValue.length),(g=f.firstChild)!==null;)p=f,f=g;for(;;){if(f===e)break t;if(p===r&&++u===n&&(l=a),p===i&&++d===o&&(c=a),(g=f.nextSibling)!==null)break;f=p,p=f.parentNode}f=g}r=l===-1||c===-1?null:{start:l,end:c}}else r=null}r=r||{start:0,end:0}}else r=null;for(Qu={focusedElem:e,selectionRange:r},fs=!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 m=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(m!==null){var _=m.memoizedProps,k=m.memoizedState,b=t.stateNode,h=b.getSnapshotBeforeUpdate(t.elementType===t.type?_:kr(t.type,_),k);b.__reactInternalSnapshotBeforeUpdate=h}break;case 3:var y=t.stateNode.containerInfo;y.nodeType===1?y.textContent="":y.nodeType===9&&y.documentElement&&y.removeChild(y.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(K(163))}}catch(w){Ke(t,t.return,w)}if(e=t.sibling,e!==null){e.return=t.return,ae=e;break}ae=t.return}return m=Hg,Hg=!1,m}function na(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&&hd(t,r,i)}n=n.next}while(n!==o)}}function lc(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 bd(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 lm(e){var t=e.alternate;t!==null&&(e.alternate=null,lm(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Br],delete t[La],delete t[rd],delete t[I0],delete t[j0])),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 sm(e){return e.tag===5||e.tag===3||e.tag===4}function Yg(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||sm(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 vd(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=hs));else if(o!==4&&(e=e.child,e!==null))for(vd(e,t,r),e=e.sibling;e!==null;)vd(e,t,r),e=e.sibling}function md(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(md(e,t,r),e=e.sibling;e!==null;)md(e,t,r),e=e.sibling}var bt=null,Er=!1;function bo(e,t,r){for(r=r.child;r!==null;)cm(e,t,r),r=r.sibling}function cm(e,t,r){if(Wr&&typeof Wr.onCommitFiberUnmount=="function")try{Wr.onCommitFiberUnmount(Qs,r)}catch{}switch(r.tag){case 5:St||Yn(r,t);case 6:var o=bt,n=Er;bt=null,bo(e,t,r),bt=o,Er=n,bt!==null&&(Er?(e=bt,r=r.stateNode,e.nodeType===8?e.parentNode.removeChild(r):e.removeChild(r)):bt.removeChild(r.stateNode));break;case 18:bt!==null&&(Er?(e=bt,r=r.stateNode,e.nodeType===8?ru(e.parentNode,r):e.nodeType===1&&ru(e,r),ka(e)):ru(bt,r.stateNode));break;case 4:o=bt,n=Er,bt=r.stateNode.containerInfo,Er=!0,bo(e,t,r),bt=o,Er=n;break;case 0:case 11:case 14:case 15:if(!St&&(o=r.updateQueue,o!==null&&(o=o.lastEffect,o!==null))){n=o=o.next;do{var i=n,a=i.destroy;i=i.tag,a!==void 0&&(i&2||i&4)&&hd(r,t,a),n=n.next}while(n!==o)}bo(e,t,r);break;case 1:if(!St&&(Yn(r,t),o=r.stateNode,typeof o.componentWillUnmount=="function"))try{o.props=r.memoizedProps,o.state=r.memoizedState,o.componentWillUnmount()}catch(l){Ke(r,t,l)}bo(e,t,r);break;case 21:bo(e,t,r);break;case 22:r.mode&1?(St=(o=St)||r.memoizedState!==null,bo(e,t,r),St=o):bo(e,t,r);break;default:bo(e,t,r)}}function Xg(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var r=e.stateNode;r===null&&(r=e.stateNode=new Z0),t.forEach(function(o){var n=s1.bind(null,e,o);r.has(o)||(r.add(o),o.then(n,n))})}}function wr(e,t){var r=t.deletions;if(r!==null)for(var o=0;on&&(n=a),o&=~i}if(o=n,o=Ze()-o,o=(120>o?120:480>o?480:1080>o?1080:1920>o?1920:3e3>o?3e3:4320>o?4320:1960*t1(o/1960))-o,10e?16:e,To===null)var o=!1;else{if(e=To,To=null,Ls=0,ke&6)throw Error(K(331));var n=ke;for(ke|=4,ae=e.current;ae!==null;){var i=ae,a=i.child;if(ae.flags&16){var l=i.deletions;if(l!==null){for(var c=0;cZe()-Hf?cn(e,0):$f|=r),Ht(e,t)}function vm(e,t){t===0&&(e.mode&1?(t=vl,vl<<=1,!(vl&130023424)&&(vl=4194304)):t=1);var r=It();e=so(e,t),e!==null&&(Ka(e,t,r),Ht(e,r))}function l1(e){var t=e.memoizedState,r=0;t!==null&&(r=t.retryLane),vm(e,r)}function s1(e,t){var r=0;switch(e.tag){case 13:var o=e.stateNode,n=e.memoizedState;n!==null&&(r=n.retryLane);break;case 19:o=e.stateNode;break;default:throw Error(K(314))}o!==null&&o.delete(t),vm(e,r)}var mm;mm=function(e,t,r){if(e!==null)if(e.memoizedProps!==t.pendingProps||Wt.current)Vt=!0;else{if(!(e.lanes&r)&&!(t.flags&128))return Vt=!1,q0(e,t,r);Vt=!!(e.flags&131072)}else Vt=!1,We&&t.flags&1048576&&wv(t,ys,t.index);switch(t.lanes=0,t.tag){case 2:var o=t.type;Xl(e,t),e=t.pendingProps;var n=ai(t,Ot.current);Qn(t,r),n=Bf(null,t,o,e,n,r);var i=zf();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,$t(o)?(i=!0,vs(t)):i=!1,t.memoizedState=n.state!==null&&n.state!==void 0?n.state:null,Af(t),n.updater=ac,t.stateNode=n,n._reactInternals=t,sd(t,o,e,r),t=dd(null,t,o,!0,i,r)):(t.tag=0,We&&i&&Rf(t),At(null,t,n,r),t=t.child),t;case 16:o=t.elementType;e:{switch(Xl(e,t),e=t.pendingProps,n=o._init,o=n(o._payload),t.type=o,n=t.tag=u1(o),e=kr(o,e),n){case 0:t=ud(null,t,o,e,r);break e;case 1:t=Vg(null,t,o,e,r);break e;case 11:t=Fg(null,t,o,e,r);break e;case 14:t=Ug(null,t,o,kr(o.type,e),r);break e}throw Error(K(306,o,""))}return t;case 0:return o=t.type,n=t.pendingProps,n=t.elementType===o?n:kr(o,n),ud(e,t,o,n,r);case 1:return o=t.type,n=t.pendingProps,n=t.elementType===o?n:kr(o,n),Vg(e,t,o,n,r);case 3:e:{if(tm(t),e===null)throw Error(K(387));o=t.pendingProps,i=t.memoizedState,n=i.element,Lv(e,t),ws(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=ui(Error(K(423)),t),t=Wg(e,t,o,r,n);break e}else if(o!==n){n=ui(Error(K(424)),t),t=Wg(e,t,o,r,n);break e}else for(Zt=Mo(t.stateNode.containerInfo.firstChild),Qt=t,We=!0,Tr=null,r=Rv(t,null,o,r),t.child=r;r;)r.flags=r.flags&-3|4096,r=r.sibling;else{if(li(),o===n){t=co(e,t,r);break e}At(e,t,o,r)}t=t.child}return t;case 5:return Cv(t),e===null&&id(t),o=t.type,n=t.pendingProps,i=e!==null?e.memoizedProps:null,a=n.children,ed(o,n)?a=null:i!==null&&ed(o,i)&&(t.flags|=32),em(e,t),At(e,t,a,r),t.child;case 6:return e===null&&id(t),null;case 13:return rm(e,t,r);case 4:return Df(t,t.stateNode.containerInfo),o=t.pendingProps,e===null?t.child=si(t,null,o,r):At(e,t,o,r),t.child;case 11:return o=t.type,n=t.pendingProps,n=t.elementType===o?n:kr(o,n),Fg(e,t,o,n,r);case 7:return At(e,t,t.pendingProps,r),t.child;case 8:return At(e,t,t.pendingProps.children,r),t.child;case 12:return At(e,t,t.pendingProps.children,r),t.child;case 10:e:{if(o=t.type._context,n=t.pendingProps,i=t.memoizedProps,a=n.value,Pe(xs,o._currentValue),o._currentValue=a,i!==null)if(Cr(i.value,a)){if(i.children===n.children&&!Wt.current){t=co(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=oo(-1,r&-r),c.tag=2;var u=i.updateQueue;if(u!==null){u=u.shared;var d=u.pending;d===null?c.next=c:(c.next=d.next,d.next=c),u.pending=c}}i.lanes|=r,c=i.alternate,c!==null&&(c.lanes|=r),ad(i.return,r,t),l.lanes|=r;break}c=c.next}}else if(i.tag===10)a=i.type===t.type?null:i.child;else if(i.tag===18){if(a=i.return,a===null)throw Error(K(341));a.lanes|=r,l=a.alternate,l!==null&&(l.lanes|=r),ad(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}At(e,t,n.children,r),t=t.child}return t;case 9:return n=t.type,o=t.pendingProps.children,Qn(t,r),n=mr(n),o=o(n),t.flags|=1,At(e,t,o,r),t.child;case 14:return o=t.type,n=kr(o,t.pendingProps),n=kr(o.type,n),Ug(e,t,o,n,r);case 15:return Zv(e,t,t.type,t.pendingProps,r);case 17:return o=t.type,n=t.pendingProps,n=t.elementType===o?n:kr(o,n),Xl(e,t),t.tag=1,$t(o)?(e=!0,vs(t)):e=!1,Qn(t,r),qv(t,o,n),sd(t,o,n,r),dd(null,t,o,!0,e,r);case 19:return om(e,t,r);case 22:return Qv(e,t,r)}throw Error(K(156,t.tag))};function ym(e,t){return Yb(e,t)}function c1(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 gr(e,t,r,o){return new c1(e,t,r,o)}function qf(e){return e=e.prototype,!(!e||!e.isReactComponent)}function u1(e){if(typeof e=="function")return qf(e)?1:0;if(e!=null){if(e=e.$$typeof,e===gf)return 11;if(e===hf)return 14}return 2}function jo(e,t){var r=e.alternate;return r===null?(r=gr(e.tag,t,e.key,e.mode),r.elementType=e.elementType,r.type=e.type,r.stateNode=e.stateNode,r.alternate=e,e.alternate=r):(r.pendingProps=t,r.type=e.type,r.flags=0,r.subtreeFlags=0,r.deletions=null),r.flags=e.flags&14680064,r.childLanes=e.childLanes,r.lanes=e.lanes,r.child=e.child,r.memoizedProps=e.memoizedProps,r.memoizedState=e.memoizedState,r.updateQueue=e.updateQueue,t=e.dependencies,r.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},r.sibling=e.sibling,r.index=e.index,r.ref=e.ref,r}function Kl(e,t,r,o,n,i){var a=2;if(o=e,typeof e=="function")qf(e)&&(a=1);else if(typeof e=="string")a=5;else e:switch(e){case Pn:return un(r.children,n,i,t);case pf:a=8,n|=8;break;case Mu:return e=gr(12,r,t,n|2),e.elementType=Mu,e.lanes=i,e;case Au:return e=gr(13,r,t,n),e.elementType=Au,e.lanes=i,e;case Du:return e=gr(19,r,t,n),e.elementType=Du,e.lanes=i,e;case Cb:return cc(r,n,i,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Sb:a=10;break e;case Lb:a=9;break e;case gf:a=11;break e;case hf:a=14;break e;case mo:a=16,o=null;break e}throw Error(K(130,e==null?e:typeof e,""))}return t=gr(a,r,t,n),t.elementType=e,t.type=o,t.lanes=i,t}function un(e,t,r,o){return e=gr(7,e,o,t),e.lanes=r,e}function cc(e,t,r,o){return e=gr(22,e,o,t),e.elementType=Cb,e.lanes=r,e.stateNode={isHidden:!1},e}function uu(e,t,r){return e=gr(6,e,null,t),e.lanes=r,e}function du(e,t,r){return t=gr(4,e.children!==null?e.children:[],e.key,t),t.lanes=r,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function d1(e,t,r,o,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Hc(0),this.expirationTimes=Hc(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Hc(0),this.identifierPrefix=o,this.onRecoverableError=n,this.mutableSourceEagerHydrationData=null}function Kf(e,t,r,o,n,i,a,l,c){return e=new d1(e,t,r,l,c),t===1?(t=1,i===!0&&(t|=8)):t=0,i=gr(3,null,null,t),e.current=i,i.stateNode=e,i.memoizedState={element:o,isDehydrated:r,cache:null,transitions:null,pendingSuspenseBoundaries:null},Af(i),e}function f1(e,t,r){var o=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(km)}catch(e){console.error(e)}}km(),kb.exports=or;var br=kb.exports,Ei,th=br;Ei=va.createRoot=th.createRoot,va.hydrateRoot=th.hydrateRoot;const Em=Object.freeze({theme:"cool-graphite",appearance:"auto"});let fu=Em;function v1(e=Em){fu=Object.freeze({...e});const t=document.documentElement;t.dataset.bvTheme=fu.theme,t.dataset.bvAppearance=fu.appearance}function ct(){return W_}function to(){return $_}function Tm(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 Rm(e){return e._nodes??e.nodes??[]}function m1(e){return e._groups??e.groups??[]}function y1(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 Sm(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 Rm(n)){const c=y1(l);c&&o.push({graph:c,path:i.concat([{node:l,graph:n,depth:i.length+1}])})}}}}function x1(){return globalThis.crypto?.randomUUID?.()??`bv-group-${Date.now()}-${Math.random().toString(16).slice(2)}`}function _1(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=x1();while(t.has(o));r.flags.bvGroupId=o}return t.add(o),o}function Os(e){const t=Tm(e);if(!t)return[];const r=[],o=new Set;return Sm(t,(n,i)=>{for(const a of m1(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:_1(a,o),pathLabel:c})}}),r}function w1(e,t){const r=Tm(e);if(!r)return[];const o=[];return Sm(r,(n,i)=>{for(const a of Rm(n))Lm(a,t)&&o.push({node:a,graph:n,path:i})}),o}function Lm(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 fi="bv-control-config-changed";function k1(){return{version:2,forceActive:!1,controls:[]}}function ep(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(fi,{detail:e})))}function xn(){const e=ct()?.rootGraph?.extra?.bv_settings?.controlConfig;return e?.version===2?e:k1()}function E1(e,t=()=>!1){const r=e.group.nodes??e.group._nodes;if(Array.isArray(r)){const l=r.filter(c=>c&&typeof c=="object"&&!t(c));if(l.length>0)return l}const[o,n]=e.group.pos||[0,0],[i,a]=e.group.size||[0,0];return(e.graph._nodes??e.graph.nodes??[]).filter(l=>{if(t(l))return!1;const[c,u]=l.pos||[0,0],[d,f]=l.size||[0,0];return c+d/2>=o&&c+d/2<=o+i&&u+f/2>=n&&u+f/2<=n+a})}const rh={activate:3,mute:2,bypass:1},oh=e=>e.charAt(0).toUpperCase()+e.slice(1);function Cm(e){const t=new Map;for(const o of e.controls??[])if(o.enabled)for(const n of o.assignments??[]){if(n.unresolved)continue;const i=t.get(n.groupId)??[];i.push({controlId:o.id,controlName:o.name,action:n.action,groupId:n.groupId,groupPath:n.groupPath||n.groupTitle||n.groupId}),t.set(n.groupId,i)}const r=[];for(const o of t.values()){if(new Set(o.map(i=>i.action)).size<2)continue;const n=o.reduce((i,a)=>rh[a.action]>rh[i]?a.action:i,o[0].action);r.push({groupId:o[0].groupId,groupPath:o[0].groupPath,winnerAction:n,entries:o})}return r}function T1(e){if(!e.length)return"✓ No active conflicts";if(e.length>1)return`⚠ ${e.length} active control conflicts`;const t=e[0],r=[...new Set(t.entries.filter(o=>o.action!==t.winnerAction).map(o=>o.action))].join(", ");return`⚠ ${t.groupPath}: ${oh(t.winnerAction)} overrides ${r.split(", ").map(oh).join(", ")}`}function Nm({children:e}){const t=v.useRef();if(!t.current){const r=document.createElement("div");r.className="bv-ui bv-ui-portal",t.current=r}return v.useEffect(()=>(document.body.append(t.current),()=>t.current?.remove()),[]),br.createPortal(e,t.current)}function Ho({open:e,anchor:t,children:r,onClose:o,className:n="",matchWidth:i=!1}){const a=v.useRef(null),[l,c]=v.useState({left:0,top:0,visibility:"hidden"});return v.useLayoutEffect(()=>{if(!e)return;const u=()=>{const p=t.current?.getBoundingClientRect(),g=a.current?.getBoundingClientRect();if(!p||!g)return;const m=8,_=6,k=i?Math.min(Math.max(p.width,240),window.innerWidth-m*2):void 0,b=k??g.width,h=Math.max(m,Math.min(p.left,window.innerWidth-b-m)),y=p.bottom+_,w=y+g.height<=window.innerHeight-m?y:Math.max(m,p.top-g.height-_);c({left:h,top:w,width:k,visibility:"visible"})};u();const d=requestAnimationFrame(u),f=new ResizeObserver(u);return t.current&&f.observe(t.current),a.current&&f.observe(a.current),window.addEventListener("resize",u),window.addEventListener("scroll",u,!0),()=>{cancelAnimationFrame(d),f.disconnect(),window.removeEventListener("resize",u),window.removeEventListener("scroll",u,!0)}},[t,i,e]),v.useEffect(()=>{if(!e)return;const u=f=>{const p=f.target;!t.current?.contains(p)&&!a.current?.contains(p)&&o?.()},d=f=>{f.key==="Escape"&&o?.()};return document.addEventListener("pointerdown",u),document.addEventListener("keydown",d),()=>{document.removeEventListener("pointerdown",u),document.removeEventListener("keydown",d)}},[t,o,e]),e?s.jsx(Nm,{children:s.jsx("div",{ref:a,className:`bv-anchored-popover ${n}`.trim(),style:l,children:r})}):null}function tp({density:e="compact",className:t="",children:r}){return s.jsx("div",{className:`bv-density-${e} ${t}`.trim(),children:r})}function ne({intent:e="secondary",icon:t,iconOnly:r=!1,loading:o=!1,density:n,className:i="",children:a,disabled:l,...c}){return s.jsxs("button",{...c,disabled:l||o,className:`bv-button ${e} ${n?`bv-density-${n}`:""} ${r?"icon-only":""} ${i}`.trim(),children:[o?s.jsx("span",{className:"bv-spinner"}):r?t??a:t,!r&&a]})}function R1({actions:e,onClose:t}){return s.jsx("div",{className:"bv-menu-content",role:"menu",children:e.map(r=>s.jsxs(Re.Fragment,{children:[r.separatorBefore&&s.jsx("hr",{}),s.jsxs("button",{type:"button",role:"menuitem",disabled:r.disabled,className:r.danger?"danger":"",onClick:()=>{r.onSelect(),t?.()},children:[r.icon,s.jsx("span",{children:r.label}),r.shortcut&&s.jsx("kbd",{children:r.shortcut})]})]},r.id))})}function rp({label:e,actions:t,intent:r="secondary",icon:o,density:n}){const[i,a]=v.useState(!1),l=v.useRef(null);return s.jsxs("div",{className:"bv-menu-button",ref:l,children:[s.jsxs(ne,{intent:r,icon:o,density:n,"aria-haspopup":"menu","aria-expanded":i,onClick:()=>a(!i),children:[e,s.jsx("span",{className:"bv-chevron"})]}),s.jsx(Ho,{open:i,anchor:l,onClose:()=>a(!1),className:"bv-menu",children:s.jsx(R1,{actions:t,onClose:()=>a(!1)})})]})}function S1({items:e,orientation:t="horizontal",label:r="Tools",overflow:o=[],density:n}){return s.jsxs("div",{className:`bv-toolbar ${t}`,role:"toolbar","aria-orientation":t,"aria-label":r,children:[e.map((i,a)=>s.jsxs(Re.Fragment,{children:[a>0&&i.group!==e[a-1].group&&s.jsx("span",{className:"bv-toolbar-divider"}),s.jsx(ne,{intent:"ghost",density:n,icon:i.icon,iconOnly:t==="vertical","aria-label":i.label,"aria-pressed":i.active,disabled:i.disabled,className:i.active?"active":"",onClick:i.onSelect,children:i.label})]},i.id)),o.length>0&&s.jsx(rp,{label:"More",actions:o,intent:"ghost",density:n})]})}function nh({items:e,compact:t=!1}){return s.jsx("dl",{className:`bv-definition-list ${t?"compact":""}`,children:e.map((r,o)=>s.jsxs("div",{className:"bv-definition-row",children:[s.jsx("dt",{children:r.term}),s.jsx("dd",{children:r.description})]},o))})}function gc({label:e,summary:t,icon:r,children:o,popover:n,className:i=""}){const[a,l]=v.useState(!1),c=v.useRef(null);return s.jsxs("div",{ref:c,className:`bv-adaptive-field ${i}`.trim(),children:[s.jsx("div",{className:"bv-adaptive-inline",children:o}),s.jsxs(ne,{type:"button",intent:"secondary",className:"bv-adaptive-trigger",icon:r,"aria-haspopup":"dialog","aria-expanded":a,onClick:()=>l(!0),children:[s.jsx("span",{className:"bv-adaptive-summary",children:t}),s.jsx("span",{"aria-hidden":"true",children:"↗"})]}),s.jsxs(Ho,{open:a,anchor:c,onClose:()=>l(!1),className:"bv-adaptive-popover",children:[s.jsxs("header",{children:[s.jsx("strong",{children:e}),s.jsx(ne,{type:"button",intent:"ghost",icon:"×",iconOnly:!0,"aria-label":`Close ${e} editor`,onClick:()=>l(!1)})]}),s.jsx("div",{children:n})]})]})}function el({open:e,title:t,description:r,children:o,footer:n,onClose:i,modal:a=!0,size:l="medium"}){return e?s.jsx(Nm,{children:s.jsx("div",{className:`bv-dialog-layer ${a?"modal":"modeless"}`,role:a?"presentation":void 0,onPointerDown:c=>{a&&c.target===c.currentTarget&&i()},children:s.jsxs("section",{className:`bv-dialog ${l}`,role:"dialog","aria-modal":a,"aria-label":t,children:[s.jsxs("header",{children:[s.jsxs("div",{children:[s.jsx("h2",{children:t}),r&&s.jsx("p",{children:r})]}),s.jsx(ne,{intent:"ghost",icon:"×",iconOnly:!0,"aria-label":"Close",onClick:i})]}),s.jsx("div",{className:"bv-dialog-body",children:o}),n&&s.jsx("footer",{children:n})]})})}):null}function op({open:e,editorName:t,onSave:r,onDiscard:o,onKeep:n}){return s.jsx(el,{open:e,title:"Unsaved changes",description:`${t} contains execution changes that have not been saved.`,onClose:n,size:"small",footer:s.jsxs(s.Fragment,{children:[s.jsx(ne,{intent:"ghost",onClick:n,children:"Keep editing"}),s.jsx(ne,{intent:"secondary",onClick:o,children:"Discard"}),s.jsx(ne,{intent:"primary",onClick:r,children:"Save"})]}),children:s.jsx("p",{children:"Save the current draft, discard it, or return to the editor."})})}function np(){const[e,t]=v.useState(null),r=n=>t({confirmLabel:"Continue",danger:!1,...n}),o=s.jsx(el,{open:!!e,title:e?.title??"Confirm action",onClose:()=>t(null),size:"small",footer:s.jsxs(s.Fragment,{children:[s.jsx(ne,{intent:"ghost",onClick:()=>t(null),children:"Cancel"}),s.jsx(ne,{intent:e?.danger?"danger":"primary",onClick:()=>{const n=e?.action;t(null),n?.()},children:e?.confirmLabel})]}),children:e?.message&&s.jsx("p",{children:e.message})});return{confirm:r,dialog:o}}function ih({trigger:e,children:t,open:r,onOpen:o}){const[n,i]=v.useState(!1),a=v.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(Ho,{open:l,anchor:a,onClose:()=>c(!1),className:"bv-popover",children:t})]})}function tl({items:e,onReorder:t,onRemove:r,renderActions:o,initialExpanded:n=[]}){const[i,a]=v.useState(n),[l,c]=v.useState();return s.jsx("div",{className:"bv-sortable-list",children:e.map(u=>s.jsxs("article",{draggable:!u.disabled,onDragStart:()=>c(u.id),onDragOver:d=>d.preventDefault(),onDrop:()=>{if(!l||l===u.id)return;const d=[...e],f=d.findIndex(m=>m.id===l),p=d.findIndex(m=>m.id===u.id),[g]=d.splice(f,1);d.splice(p,0,g),t(d),c(void 0)},children:[s.jsxs("header",{children:[s.jsx("button",{type:"button",className:"bv-drag-handle","aria-label":`Reorder ${String(u.title)}`,children:"⠿"}),s.jsxs("div",{children:[s.jsx("strong",{children:u.title}),u.description&&s.jsx("small",{children:u.description})]}),o?.(u),s.jsxs("span",{className:"bv-segmented-actions",children:[r&&s.jsx(ne,{intent:"ghost",iconOnly:!0,"aria-label":`Remove ${String(u.title)}`,title:"Remove",onClick:()=>r(u.id),children:"×"}),u.content&&s.jsx(ne,{intent:"ghost",icon:s.jsx("span",{className:"bv-chevron"}),iconOnly:!0,"aria-label":`${i.includes(u.id)?"Collapse":"Expand"} ${String(u.title)}`,"aria-expanded":i.includes(u.id),onClick:()=>a(d=>d.includes(u.id)?d.filter(f=>f!==u.id):[...d,u.id])})]})]}),u.summary&&s.jsx("div",{className:"bv-sortable-summary",children:u.summary}),u.content&&i.includes(u.id)&&s.jsx("div",{className:"bv-sortable-content",children:u.content})]},u.id))})}const tt=Re.forwardRef(function({type:t="button",...r},o){return s.jsx("button",{...r,type:t,ref:o})}),L1=Re.forwardRef(function(t,r){return s.jsx("input",{...t,ref:r})});function Nr({tone:e="neutral",title:t,children:r,icon:o,actions:n,onClose:i}){return s.jsxs("aside",{className:`bv-callout ${e}`,role:e==="danger"?"alert":"status",children:[o&&s.jsx("span",{className:"bv-callout-icon",children:o}),s.jsxs("div",{children:[t&&s.jsx("strong",{children:t}),s.jsx("div",{children:r}),n&&s.jsx("div",{className:"bv-callout-actions",children:n})]}),i&&s.jsx(ne,{intent:"ghost",iconOnly:!0,"aria-label":"Close",onClick:i,children:"×"})]})}function Om({children:e,tone:t="neutral",dot:r=!1}){return s.jsx("span",{className:`bv-badge ${t} ${r?"dot":""}`,children:e})}function hc({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 C1({tone:e="neutral",title:t,children:r,onClose:o,duration:n=0,actionLabel:i,onAction:a}){const l=v.useRef(),c=v.useCallback(()=>{l.current&&window.clearTimeout(l.current)},[]),u=v.useCallback(()=>{c(),n&&(l.current=window.setTimeout(o,n))},[n,o,c]);return v.useEffect(()=>(u(),c),[u,c]),s.jsxs("div",{className:`bv-toast ${e}`,role:"status",tabIndex:0,onPointerEnter:c,onPointerLeave:u,onFocus:c,onBlur:u,children:[s.jsxs("div",{children:[s.jsx("strong",{children:t}),r&&s.jsx("p",{children:r}),i&&a?s.jsx(ne,{intent:"secondary",onClick:()=>{a(),o()},children:i}):null]}),s.jsx(ne,{intent:"ghost",iconOnly:!0,"aria-label":"Dismiss",onClick:o,children:"×"})]})}function Ti(){return(Ti=Object.assign||function(e){for(var t=1;t=0||(n[r]=e[r]);return n}function la(e){var t=v.useRef(e),r=v.useRef(function(o){t.current&&t.current(o)});return t.current=e,r.current}var pi=function(e,t,r){return t===void 0&&(t=0),r===void 0&&(r=1),e>r?r:e0:y.buttons>0)&&i.current?a(ah(i.current,y,u.current)):(h(!1),c())},b=function(){h(!1),c()};function h(y){var w=d.current,x=kd(i.current),T=y?x.addEventListener:x.removeEventListener;T(w?"touchmove":"mousemove",k),T(w?"touchend":"mouseup",b)}return[function(y){var w=y.nativeEvent,x=i.current;if(x&&(lh(w),!function(L,U){return U&&!sa(L)}(w,d.current)&&x)){if(sa(w)){d.current=!0;var T=w.changedTouches||[];T.length&&(u.current=T[0].identifier)}x.focus(),a(ah(x,w,u.current)),h(!0)}},function(y){var w=y.which||y.keyCode;w<37||w>40||(y.preventDefault(),l({left:w===39?.05:w===37?-.05:0,top:w===40?.05:w===38?-.05:0}))},function(y){var w=y.which||y.keyCode;w>=37&&w<=40&&c()},h]},[l,a,c]),p=f[0],g=f[1],m=f[2],_=f[3];return v.useEffect(function(){return _},[_]),Re.createElement("div",Ti({},n,{onTouchStart:p,onMouseDown:p,className:"react-colorful__interactive",ref:i,onKeyDown:g,onKeyUp:m,tabIndex:0,role:"slider"}))}),rl=function(e){return e.filter(Boolean).join(" ")},lp=function(e){var t=e.color,r=e.left,o=e.top,n=o===void 0?.5:o,i=rl(["react-colorful__pointer",e.className]);return Re.createElement("div",{className:i,style:{top:100*n+"%",left:100*r+"%"}},Re.createElement("div",{className:"react-colorful__pointer-fill",style:{backgroundColor:t}}))},gt=function(e,t,r){return t===void 0&&(t=0),r===void 0&&(r=Math.pow(10,t)),Math.round(r*e)/r},Mm=function(e){return M1(Ed(e))},Ed=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?gt(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?gt(parseInt(e.substring(6,8),16)/255,2):1}},Am=function(e){return O1(N1(e))},Dm=function(e){var t=e.s,r=e.v,o=e.a,n=(200-t)*r/100;return{h:gt(e.h),s:gt(n>0&&n<200?t*r/100/(n<=100?n:200-n)*100:0),l:gt(n/2),a:gt(o,2)}},Td=function(e){var t=Dm(e);return"hsl("+t.h+", "+t.s+"%, "+t.l+"%)"},pu=function(e){var t=Dm(e);return"hsla("+t.h+", "+t.s+"%, "+t.l+"%, "+t.a+")"},N1=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:gt(255*[o,l,a,a,c,o][u]),g:gt(255*[c,o,o,l,a,a][u]),b:gt(255*[a,a,c,o,o,l][u]),a:gt(n,2)}},Cl=function(e){var t=e.toString(16);return t.length<2?"0"+t:t},O1=function(e){var t=e.r,r=e.g,o=e.b,n=e.a,i=n<1?Cl(gt(255*n)):"";return"#"+Cl(t)+Cl(r)+Cl(o)+i},M1=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:gt(60*(l<0?l+6:l)),s:gt(i?a/i*100:0),v:gt(i/255*100),a:n}},Im=Re.memo(function(e){var t=e.hue,r=e.onChange,o=e.onChangeEnd,n=rl(["react-colorful__hue",e.className]);return Re.createElement("div",{className:n},Re.createElement(ap,{onMove:function(i){r({h:360*i.left})},onKey:function(i){r({h:pi(t+360*i.left,0,360)})},onEnd:o,"aria-label":"Hue","aria-valuenow":gt(t),"aria-valuemax":"360","aria-valuemin":"0"},Re.createElement(lp,{className:"react-colorful__hue-pointer",left:t/360,color:Td({h:t,s:100,v:100,a:1})})))}),jm=Re.memo(function(e){var t=e.hsva,r=e.onChange,o=e.onChangeEnd,n={backgroundColor:Td({h:t.h,s:100,v:100,a:1})};return Re.createElement("div",{className:"react-colorful__saturation",style:n},Re.createElement(ap,{onMove:function(i){r({s:100*i.left,v:100-100*i.top})},onKey:function(i){r({s:pi(t.s+100*i.left,0,100),v:pi(t.v-100*i.top,0,100)})},onEnd:o,"aria-label":"Color","aria-valuetext":"Saturation "+gt(t.s)+"%, Brightness "+gt(t.v)+"%"},Re.createElement(lp,{className:"react-colorful__saturation-pointer",top:1-t.v/100,left:t.s/100,color:Td(t)})))}),Pm=function(e,t){if(e===t)return!0;for(var r in e)if(e[r]!==t[r])return!1;return!0},Bm=function(e,t){return e.toLowerCase()===t.toLowerCase()||Pm(Ed(e),Ed(t))};function zm(e,t,r,o){var n=la(r),i=la(o),a=v.useState(function(){return e.toHsva(t)}),l=a[0],c=a[1],u=v.useRef({color:t,hsva:l}),d=v.useRef(!1);v.useEffect(function(){if(!e.equal(t,u.current.color)){var g=e.toHsva(t);u.current={hsva:g,color:t},c(g),d.current=!1}},[t,e]),v.useEffect(function(){var g;Pm(l,u.current.hsva)||e.equal(g=e.fromHsva(l),u.current.color)||(u.current={hsva:l,color:g},n(g),d.current=!0)},[l,e,n]);var f=v.useCallback(function(g){c(function(m){return Object.assign({},m,g)})},[]),p=v.useCallback(function(){d.current&&(d.current=!1,i(u.current.color))},[i]);return[l,f,p]}var A1=typeof window<"u"?v.useLayoutEffect:v.useEffect,D1=function(){return typeof __webpack_nonce__<"u"?__webpack_nonce__:void 0},sh=new WeakMap,Fm=function(e){A1(function(){var t=e.current;if(typeof document<"u"&&t){var r=t.getRootNode?t.getRootNode():t.ownerDocument,o=r&&("head"in r||"host"in r)?r:t.ownerDocument;if(!sh.has(o)){var n="head"in o?o.head:o,i=(n.ownerDocument||document).createElement("style");i.innerHTML=`.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:"";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url('data:image/svg+xml;charset=utf-8,')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}`;var a=D1();a&&i.setAttribute("nonce",a),sh.set(o,i),n.appendChild(i)}}},[])},I1=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=ip(e,["className","colorModel","color","onChange","onChangeEnd"]),c=v.useRef(null);Fm(c);var u=zm(r,n,i,a),d=u[0],f=u[1],p=u[2],g=rl(["react-colorful",t]);return Re.createElement("div",Ti({},l,{ref:c,className:g}),Re.createElement(jm,{hsva:d,onChange:f,onChangeEnd:p}),Re.createElement(Im,{hue:d.h,onChange:f,onChangeEnd:p,className:"react-colorful__last-control"}))},j1={defaultColor:"000",toHsva:Mm,fromHsva:function(e){return Am({h:e.h,s:e.s,v:e.v,a:1})},equal:Bm},P1=function(e){return Re.createElement(I1,Ti({},e,{colorModel:j1}))},B1=function(e){var t=e.className,r=e.hsva,o=e.onChange,n=e.onChangeEnd,i={backgroundImage:"linear-gradient(90deg, "+pu(Object.assign({},r,{a:0}))+", "+pu(Object.assign({},r,{a:1}))+")"},a=rl(["react-colorful__alpha",t]),l=gt(100*r.a);return Re.createElement("div",{className:a},Re.createElement("div",{className:"react-colorful__alpha-gradient",style:i}),Re.createElement(ap,{onMove:function(c){o({a:c.left})},onKey:function(c){o({a:pi(r.a+c.left)})},onEnd:n,"aria-label":"Alpha","aria-valuetext":l+"%","aria-valuenow":l,"aria-valuemin":"0","aria-valuemax":"100"},Re.createElement(lp,{className:"react-colorful__alpha-pointer",left:r.a,color:pu(r)})))},z1=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=ip(e,["className","colorModel","color","onChange","onChangeEnd"]),c=v.useRef(null);Fm(c);var u=zm(r,n,i,a),d=u[0],f=u[1],p=u[2],g=rl(["react-colorful",t]);return Re.createElement("div",Ti({},l,{ref:c,className:g}),Re.createElement(jm,{hsva:d,onChange:f,onChangeEnd:p}),Re.createElement(Im,{hue:d.h,onChange:f,onChangeEnd:p}),Re.createElement(B1,{hsva:d,onChange:f,onChangeEnd:p,className:"react-colorful__last-control"}))},F1={defaultColor:"0001",toHsva:Mm,fromHsva:Am,equal:Bm},U1=function(e){return Re.createElement(z1,Ti({},e,{colorModel:F1}))},Um={},ft=vr&&vr.__assign||function(){return ft=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[Br]=t,e[La]=o,nm(e,t,!1,!1),t.stateNode=e;e:{switch(a=zu(r,o),r){case"dialog":ze("cancel",e),ze("close",e),n=o;break;case"iframe":case"object":case"embed":ze("load",e),n=o;break;case"video":case"audio":for(n=0;nsi&&(t.flags|=128,o=!0,Pi(i,!1),t.lanes=4194304)}else{if(!o)if(e=ws(a),e!==null){if(t.flags|=128,o=!0,r=e.updateQueue,r!==null&&(t.updateQueue=r,t.flags|=4),Pi(i,!0),i.tail===null&&i.tailMode==="hidden"&&!a.alternate&&!We)return wt(t),null}else 2*Ze()-i.renderingStartTime>si&&r!==1073741824&&(t.flags|=128,o=!0,Pi(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=Ze(),t.sibling=null,r=Ye.current,Pe(Ye,o?r&1|2:r&1),t):(wt(t),null);case 22:case 23:return Xf(),o=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==o&&(t.flags|=8192),o&&t.mode&1?Gt&1073741824&&(wt(t),t.subtreeFlags&6&&(t.flags|=8192)):wt(t),null;case 24:return null;case 25:return null}throw Error(K(156,t.tag))}function H0(e,t){switch(Sf(t),t.tag){case 1:return $t(t.type)&&hs(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ai(),Fe(Wt),Fe(Ot),jf(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return If(t),null;case 13:if(Fe(Ye),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(K(340));ni()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Fe(Ye),null;case 4:return ai(),null;case 10:return Of(t.type._context),null;case 22:case 23:return Xf(),null;case 24:return null;default:return null}}var Rl=!1,St=!1,Y0=typeof WeakSet=="function"?WeakSet:Set,ae=null;function $n(e,t){var r=e.ref;if(r!==null)if(typeof r=="function")try{r(null)}catch(o){Ke(e,t,o)}else r.current=null}function fd(e,t,r){try{r()}catch(o){Ke(e,t,o)}}var Hg=!1;function X0(e,t){if(qu=ds,e=dv(),Tf(e)){if("selectionStart"in e)var r={start:e.selectionStart,end:e.selectionEnd};else e:{r=(r=e.ownerDocument)&&r.defaultView||window;var o=r.getSelection&&r.getSelection();if(o&&o.rangeCount!==0){r=o.anchorNode;var n=o.anchorOffset,i=o.focusNode;o=o.focusOffset;try{r.nodeType,i.nodeType}catch{r=null;break e}var a=0,l=-1,c=-1,u=0,d=0,f=e,p=null;t:for(;;){for(var g;f!==r||n!==0&&f.nodeType!==3||(l=a+n),f!==i||o!==0&&f.nodeType!==3||(c=a+o),f.nodeType===3&&(a+=f.nodeValue.length),(g=f.firstChild)!==null;)p=f,f=g;for(;;){if(f===e)break t;if(p===r&&++u===n&&(l=a),p===i&&++d===o&&(c=a),(g=f.nextSibling)!==null)break;f=p,p=f.parentNode}f=g}r=l===-1||c===-1?null:{start:l,end:c}}else r=null}r=r||{start:0,end:0}}else r=null;for(Ku={focusedElem:e,selectionRange:r},ds=!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 m=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(m!==null){var _=m.memoizedProps,k=m.memoizedState,b=t.stateNode,h=b.getSnapshotBeforeUpdate(t.elementType===t.type?_:wr(t.type,_),k);b.__reactInternalSnapshotBeforeUpdate=h}break;case 3:var x=t.stateNode.containerInfo;x.nodeType===1?x.textContent="":x.nodeType===9&&x.documentElement&&x.removeChild(x.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(K(163))}}catch(w){Ke(t,t.return,w)}if(e=t.sibling,e!==null){e.return=t.return,ae=e;break}ae=t.return}return m=Hg,Hg=!1,m}function oa(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&&fd(t,r,i)}n=n.next}while(n!==o)}}function ic(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 pd(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 lm(e){var t=e.alternate;t!==null&&(e.alternate=null,lm(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Br],delete t[La],delete t[Qu],delete t[C0],delete t[N0])),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 sm(e){return e.tag===5||e.tag===3||e.tag===4}function Yg(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||sm(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 gd(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=gs));else if(o!==4&&(e=e.child,e!==null))for(gd(e,t,r),e=e.sibling;e!==null;)gd(e,t,r),e=e.sibling}function hd(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(hd(e,t,r),e=e.sibling;e!==null;)hd(e,t,r),e=e.sibling}var bt=null,kr=!1;function ho(e,t,r){for(r=r.child;r!==null;)cm(e,t,r),r=r.sibling}function cm(e,t,r){if(Wr&&typeof Wr.onCommitFiberUnmount=="function")try{Wr.onCommitFiberUnmount(Js,r)}catch{}switch(r.tag){case 5:St||$n(r,t);case 6:var o=bt,n=kr;bt=null,ho(e,t,r),bt=o,kr=n,bt!==null&&(kr?(e=bt,r=r.stateNode,e.nodeType===8?e.parentNode.removeChild(r):e.removeChild(r)):bt.removeChild(r.stateNode));break;case 18:bt!==null&&(kr?(e=bt,r=r.stateNode,e.nodeType===8?Qc(e.parentNode,r):e.nodeType===1&&Qc(e,r),ka(e)):Qc(bt,r.stateNode));break;case 4:o=bt,n=kr,bt=r.stateNode.containerInfo,kr=!0,ho(e,t,r),bt=o,kr=n;break;case 0:case 11:case 14:case 15:if(!St&&(o=r.updateQueue,o!==null&&(o=o.lastEffect,o!==null))){n=o=o.next;do{var i=n,a=i.destroy;i=i.tag,a!==void 0&&(i&2||i&4)&&fd(r,t,a),n=n.next}while(n!==o)}ho(e,t,r);break;case 1:if(!St&&($n(r,t),o=r.stateNode,typeof o.componentWillUnmount=="function"))try{o.props=r.memoizedProps,o.state=r.memoizedState,o.componentWillUnmount()}catch(l){Ke(r,t,l)}ho(e,t,r);break;case 21:ho(e,t,r);break;case 22:r.mode&1?(St=(o=St)||r.memoizedState!==null,ho(e,t,r),St=o):ho(e,t,r);break;default:ho(e,t,r)}}function Xg(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var r=e.stateNode;r===null&&(r=e.stateNode=new Y0),t.forEach(function(o){var n=r1.bind(null,e,o);r.has(o)||(r.add(o),o.then(n,n))})}}function _r(e,t){var r=t.deletions;if(r!==null)for(var o=0;on&&(n=a),o&=~i}if(o=n,o=Ze()-o,o=(120>o?120:480>o?480:1080>o?1080:1920>o?1920:3e3>o?3e3:4320>o?4320:1960*q0(o/1960))-o,10e?16:e,Eo===null)var o=!1;else{if(e=Eo,Eo=null,Ss=0,ke&6)throw Error(K(331));var n=ke;for(ke|=4,ae=e.current;ae!==null;){var i=ae,a=i.child;if(ae.flags&16){var l=i.deletions;if(l!==null){for(var c=0;cZe()-Hf?sn(e,0):$f|=r),Ht(e,t)}function vm(e,t){t===0&&(e.mode&1?(t=vl,vl<<=1,!(vl&130023424)&&(vl=4194304)):t=1);var r=It();e=lo(e,t),e!==null&&(Ka(e,t,r),Ht(e,r))}function t1(e){var t=e.memoizedState,r=0;t!==null&&(r=t.retryLane),vm(e,r)}function r1(e,t){var r=0;switch(e.tag){case 13:var o=e.stateNode,n=e.memoizedState;n!==null&&(r=n.retryLane);break;case 19:o=e.stateNode;break;default:throw Error(K(314))}o!==null&&o.delete(t),vm(e,r)}var mm;mm=function(e,t,r){if(e!==null)if(e.memoizedProps!==t.pendingProps||Wt.current)Vt=!0;else{if(!(e.lanes&r)&&!(t.flags&128))return Vt=!1,W0(e,t,r);Vt=!!(e.flags&131072)}else Vt=!1,We&&t.flags&1048576&&wv(t,ms,t.index);switch(t.lanes=0,t.tag){case 2:var o=t.type;Yl(e,t),e=t.pendingProps;var n=oi(t,Ot.current);Jn(t,r),n=Bf(null,t,o,e,n,r);var i=zf();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,$t(o)?(i=!0,bs(t)):i=!1,t.memoizedState=n.state!==null&&n.state!==void 0?n.state:null,Af(t),n.updater=nc,t.stateNode=n,n._reactInternals=t,id(t,o,e,r),t=sd(null,t,o,!0,i,r)):(t.tag=0,We&&i&&Rf(t),At(null,t,n,r),t=t.child),t;case 16:o=t.elementType;e:{switch(Yl(e,t),e=t.pendingProps,n=o._init,o=n(o._payload),t.type=o,n=t.tag=n1(o),e=wr(o,e),n){case 0:t=ld(null,t,o,e,r);break e;case 1:t=Vg(null,t,o,e,r);break e;case 11:t=Fg(null,t,o,e,r);break e;case 14:t=Ug(null,t,o,wr(o.type,e),r);break e}throw Error(K(306,o,""))}return t;case 0:return o=t.type,n=t.pendingProps,n=t.elementType===o?n:wr(o,n),ld(e,t,o,n,r);case 1:return o=t.type,n=t.pendingProps,n=t.elementType===o?n:wr(o,n),Vg(e,t,o,n,r);case 3:e:{if(tm(t),e===null)throw Error(K(387));o=t.pendingProps,i=t.memoizedState,n=i.element,Lv(e,t),_s(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=li(Error(K(423)),t),t=Wg(e,t,o,r,n);break e}else if(o!==n){n=li(Error(K(424)),t),t=Wg(e,t,o,r,n);break e}else for(Jt=Oo(t.stateNode.containerInfo.firstChild),Zt=t,We=!0,Er=null,r=Rv(t,null,o,r),t.child=r;r;)r.flags=r.flags&-3|4096,r=r.sibling;else{if(ni(),o===n){t=so(e,t,r);break e}At(e,t,o,r)}t=t.child}return t;case 5:return Cv(t),e===null&&rd(t),o=t.type,n=t.pendingProps,i=e!==null?e.memoizedProps:null,a=n.children,Ju(o,n)?a=null:i!==null&&Ju(o,i)&&(t.flags|=32),em(e,t),At(e,t,a,r),t.child;case 6:return e===null&&rd(t),null;case 13:return rm(e,t,r);case 4:return Df(t,t.stateNode.containerInfo),o=t.pendingProps,e===null?t.child=ii(t,null,o,r):At(e,t,o,r),t.child;case 11:return o=t.type,n=t.pendingProps,n=t.elementType===o?n:wr(o,n),Fg(e,t,o,n,r);case 7:return At(e,t,t.pendingProps,r),t.child;case 8:return At(e,t,t.pendingProps.children,r),t.child;case 12:return At(e,t,t.pendingProps.children,r),t.child;case 10:e:{if(o=t.type._context,n=t.pendingProps,i=t.memoizedProps,a=n.value,Pe(xs,o._currentValue),o._currentValue=a,i!==null)if(Lr(i.value,a)){if(i.children===n.children&&!Wt.current){t=so(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=oo(-1,r&-r),c.tag=2;var u=i.updateQueue;if(u!==null){u=u.shared;var d=u.pending;d===null?c.next=c:(c.next=d.next,d.next=c),u.pending=c}}i.lanes|=r,c=i.alternate,c!==null&&(c.lanes|=r),od(i.return,r,t),l.lanes|=r;break}c=c.next}}else if(i.tag===10)a=i.type===t.type?null:i.child;else if(i.tag===18){if(a=i.return,a===null)throw Error(K(341));a.lanes|=r,l=a.alternate,l!==null&&(l.lanes|=r),od(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}At(e,t,n.children,r),t=t.child}return t;case 9:return n=t.type,o=t.pendingProps.children,Jn(t,r),n=vr(n),o=o(n),t.flags|=1,At(e,t,o,r),t.child;case 14:return o=t.type,n=wr(o,t.pendingProps),n=wr(o.type,n),Ug(e,t,o,n,r);case 15:return Zv(e,t,t.type,t.pendingProps,r);case 17:return o=t.type,n=t.pendingProps,n=t.elementType===o?n:wr(o,n),Yl(e,t),t.tag=1,$t(o)?(e=!0,bs(t)):e=!1,Jn(t,r),qv(t,o,n),id(t,o,n,r),sd(null,t,o,!0,e,r);case 19:return om(e,t,r);case 22:return Qv(e,t,r)}throw Error(K(156,t.tag))};function xm(e,t){return Yb(e,t)}function o1(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 pr(e,t,r,o){return new o1(e,t,r,o)}function qf(e){return e=e.prototype,!(!e||!e.isReactComponent)}function n1(e){if(typeof e=="function")return qf(e)?1:0;if(e!=null){if(e=e.$$typeof,e===gf)return 11;if(e===hf)return 14}return 2}function Io(e,t){var r=e.alternate;return r===null?(r=pr(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 ql(e,t,r,o,n,i){var a=2;if(o=e,typeof e=="function")qf(e)&&(a=1);else if(typeof e=="string")a=5;else e:switch(e){case In:return cn(r.children,n,i,t);case pf:a=8,n|=8;break;case Cu:return e=pr(12,r,t,n|2),e.elementType=Cu,e.lanes=i,e;case Nu:return e=pr(13,r,t,n),e.elementType=Nu,e.lanes=i,e;case Ou:return e=pr(19,r,t,n),e.elementType=Ou,e.lanes=i,e;case Cb:return lc(r,n,i,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Sb:a=10;break e;case Lb:a=9;break e;case gf:a=11;break e;case hf:a=14;break e;case vo:a=16,o=null;break e}throw Error(K(130,e==null?e:typeof e,""))}return t=pr(a,r,t,n),t.elementType=e,t.type=o,t.lanes=i,t}function cn(e,t,r,o){return e=pr(7,e,o,t),e.lanes=r,e}function lc(e,t,r,o){return e=pr(22,e,o,t),e.elementType=Cb,e.lanes=r,e.stateNode={isHidden:!1},e}function lu(e,t,r){return e=pr(6,e,null,t),e.lanes=r,e}function su(e,t,r){return t=pr(4,e.children!==null?e.children:[],e.key,t),t.lanes=r,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function i1(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=Vc(0),this.expirationTimes=Vc(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Vc(0),this.identifierPrefix=o,this.onRecoverableError=n,this.mutableSourceEagerHydrationData=null}function Kf(e,t,r,o,n,i,a,l,c){return e=new i1(e,t,r,l,c),t===1?(t=1,i===!0&&(t|=8)):t=0,i=pr(3,null,null,t),e.current=i,i.stateNode=e,i.memoizedState={element:o,isDehydrated:r,cache:null,transitions:null,pendingSuspenseBoundaries:null},Af(i),e}function a1(e,t,r){var o=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(km)}catch(e){console.error(e)}}km(),kb.exports=rr;var hr=kb.exports,wi,th=hr;wi=va.createRoot=th.createRoot,va.hydrateRoot=th.hydrateRoot;const Em=Object.freeze({theme:"cool-graphite",appearance:"auto"});let cu=Em;function d1(e=Em){cu=Object.freeze({...e});const t=document.documentElement;t.dataset.bvTheme=cu.theme,t.dataset.bvAppearance=cu.appearance}function ct(){return P_}function to(){return B_}function Tm(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 Rm(e){return e._nodes??e.nodes??[]}function f1(e){return e._groups??e.groups??[]}function p1(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 Sm(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 Rm(n)){const c=p1(l);c&&o.push({graph:c,path:i.concat([{node:l,graph:n,depth:i.length+1}])})}}}}function g1(){return globalThis.crypto?.randomUUID?.()??`bv-group-${Date.now()}-${Math.random().toString(16).slice(2)}`}function h1(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=g1();while(t.has(o));r.flags.bvGroupId=o}return t.add(o),o}function Ns(e){const t=Tm(e);if(!t)return[];const r=[],o=new Set;return Sm(t,(n,i)=>{for(const a of f1(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:h1(a,o),pathLabel:c})}}),r}function b1(e,t){const r=Tm(e);if(!r)return[];const o=[];return Sm(r,(n,i)=>{for(const a of Rm(n))Lm(a,t)&&o.push({node:a,graph:n,path:i})}),o}function Lm(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 ci="bv-control-config-changed";function v1(){return{version:2,forceActive:!1,controls:[]}}function ep(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(ci,{detail:e})))}function xn(){const e=ct()?.rootGraph?.extra?.bv_settings?.controlConfig;return e?.version===2?e:v1()}function m1(e,t=()=>!1){const r=e.group.nodes??e.group._nodes;if(Array.isArray(r)){const l=r.filter(c=>c&&typeof c=="object"&&!t(c));if(l.length>0)return l}const[o,n]=e.group.pos||[0,0],[i,a]=e.group.size||[0,0];return(e.graph._nodes??e.graph.nodes??[]).filter(l=>{if(t(l))return!1;const[c,u]=l.pos||[0,0],[d,f]=l.size||[0,0];return c+d/2>=o&&c+d/2<=o+i&&u+f/2>=n&&u+f/2<=n+a})}const rh={activate:3,mute:2,bypass:1},oh=e=>e.charAt(0).toUpperCase()+e.slice(1);function Cm(e){const t=new Map;for(const o of e.controls??[])if(o.enabled)for(const n of o.assignments??[]){if(n.unresolved)continue;const i=t.get(n.groupId)??[];i.push({controlId:o.id,controlName:o.name,action:n.action,groupId:n.groupId,groupPath:n.groupPath||n.groupTitle||n.groupId}),t.set(n.groupId,i)}const r=[];for(const o of t.values()){if(new Set(o.map(i=>i.action)).size<2)continue;const n=o.reduce((i,a)=>rh[a.action]>rh[i]?a.action:i,o[0].action);r.push({groupId:o[0].groupId,groupPath:o[0].groupPath,winnerAction:n,entries:o})}return r}function x1(e){if(!e.length)return"✓ No active conflicts";if(e.length>1)return`⚠ ${e.length} active control conflicts`;const t=e[0],r=[...new Set(t.entries.filter(o=>o.action!==t.winnerAction).map(o=>o.action))].join(", ");return`⚠ ${t.groupPath}: ${oh(t.winnerAction)} overrides ${r.split(", ").map(oh).join(", ")}`}function Nm({children:e}){const t=v.useRef();if(!t.current){const r=document.createElement("div");r.className="bv-ui bv-ui-portal",t.current=r}return v.useEffect(()=>(document.body.append(t.current),()=>t.current?.remove()),[]),hr.createPortal(e,t.current)}function $o({open:e,anchor:t,children:r,onClose:o,className:n="",matchWidth:i=!1}){const a=v.useRef(null),[l,c]=v.useState({left:0,top:0,visibility:"hidden"});return v.useLayoutEffect(()=>{if(!e)return;const u=()=>{const p=t.current?.getBoundingClientRect(),g=a.current?.getBoundingClientRect();if(!p||!g)return;const m=8,_=6,k=i?Math.min(Math.max(p.width,240),window.innerWidth-m*2):void 0,b=k??g.width,h=Math.max(m,Math.min(p.left,window.innerWidth-b-m)),x=p.bottom+_,w=x+g.height<=window.innerHeight-m?x:Math.max(m,p.top-g.height-_);c({left:h,top:w,width:k,visibility:"visible"})};u();const d=requestAnimationFrame(u),f=new ResizeObserver(u);return t.current&&f.observe(t.current),a.current&&f.observe(a.current),window.addEventListener("resize",u),window.addEventListener("scroll",u,!0),()=>{cancelAnimationFrame(d),f.disconnect(),window.removeEventListener("resize",u),window.removeEventListener("scroll",u,!0)}},[t,i,e]),v.useEffect(()=>{if(!e)return;const u=f=>{const p=f.target;!t.current?.contains(p)&&!a.current?.contains(p)&&o?.()},d=f=>{f.key==="Escape"&&o?.()};return document.addEventListener("pointerdown",u),document.addEventListener("keydown",d),()=>{document.removeEventListener("pointerdown",u),document.removeEventListener("keydown",d)}},[t,o,e]),e?s.jsx(Nm,{children:s.jsx("div",{ref:a,className:`bv-anchored-popover ${n}`.trim(),style:l,children:r})}):null}function tp({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 y1({actions:e,onClose:t}){return s.jsx("div",{className:"bv-menu-content",role:"menu",children:e.map(r=>s.jsxs(Re.Fragment,{children:[r.separatorBefore&&s.jsx("hr",{}),s.jsxs("button",{type:"button",role:"menuitem",disabled:r.disabled,className:r.danger?"danger":"",onClick:()=>{r.onSelect(),t?.()},children:[r.icon,s.jsx("span",{children:r.label}),r.shortcut&&s.jsx("kbd",{children:r.shortcut})]})]},r.id))})}function rp({label:e,actions:t,intent:r="secondary",icon:o,density:n}){const[i,a]=v.useState(!1),l=v.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($o,{open:i,anchor:l,onClose:()=>a(!1),className:"bv-menu",children:s.jsx(y1,{actions:t,onClose:()=>a(!1)})})]})}function _1({items:e,orientation:t="horizontal",label:r="Tools",overflow:o=[],density:n}){return s.jsxs("div",{className:`bv-toolbar ${t}`,role:"toolbar","aria-orientation":t,"aria-label":r,children:[e.map((i,a)=>s.jsxs(Re.Fragment,{children:[a>0&&i.group!==e[a-1].group&&s.jsx("span",{className:"bv-toolbar-divider"}),s.jsx(ie,{intent:"ghost",density:n,icon:i.icon,iconOnly:t==="vertical","aria-label":i.label,"aria-pressed":i.active,disabled:i.disabled,className:i.active?"active":"",onClick:i.onSelect,children:i.label})]},i.id)),o.length>0&&s.jsx(rp,{label:"More",actions:o,intent:"ghost",density:n})]})}function nh({items:e,compact:t=!1}){return s.jsx("dl",{className:`bv-definition-list ${t?"compact":""}`,children:e.map((r,o)=>s.jsxs("div",{className:"bv-definition-row",children:[s.jsx("dt",{children:r.term}),s.jsx("dd",{children:r.description})]},o))})}function fc({label:e,summary:t,icon:r,children:o,popover:n,className:i=""}){const[a,l]=v.useState(!1),c=v.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($o,{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 el({open:e,title:t,description:r,children:o,footer:n,onClose:i,modal:a=!0,size:l="medium"}){return e?s.jsx(Nm,{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 op({open:e,editorName:t,onSave:r,onDiscard:o,onKeep:n}){return s.jsx(el,{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 np(){const[e,t]=v.useState(null),r=n=>t({confirmLabel:"Continue",danger:!1,...n}),o=s.jsx(el,{open:!!e,title:e?.title??"Confirm action",onClose:()=>t(null),size:"small",footer:s.jsxs(s.Fragment,{children:[s.jsx(ie,{intent:"ghost",onClick:()=>t(null),children:"Cancel"}),s.jsx(ie,{intent:e?.danger?"danger":"primary",onClick:()=>{const n=e?.action;t(null),n?.()},children:e?.confirmLabel})]}),children:e?.message&&s.jsx("p",{children:e.message})});return{confirm:r,dialog:o}}function ih({trigger:e,children:t,open:r,onOpen:o}){const[n,i]=v.useState(!1),a=v.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($o,{open:l,anchor:a,onClose:()=>c(!1),className:"bv-popover",children:t})]})}function tl({items:e,onReorder:t,onRemove:r,renderActions:o,initialExpanded:n=[]}){const[i,a]=v.useState(n),[l,c]=v.useState();return s.jsx("div",{className:"bv-sortable-list",children:e.map(u=>s.jsxs("article",{draggable:!u.disabled,onDragStart:()=>c(u.id),onDragOver:d=>d.preventDefault(),onDrop:()=>{if(!l||l===u.id)return;const d=[...e],f=d.findIndex(m=>m.id===l),p=d.findIndex(m=>m.id===u.id),[g]=d.splice(f,1);d.splice(p,0,g),t(d),c(void 0)},children:[s.jsxs("header",{children:[s.jsx("button",{type:"button",className:"bv-drag-handle","aria-label":`Reorder ${String(u.title)}`,children:"⠿"}),s.jsxs("div",{children:[s.jsx("strong",{children:u.title}),u.description&&s.jsx("small",{children:u.description})]}),o?.(u),s.jsxs("span",{className:"bv-segmented-actions",children:[r&&s.jsx(ie,{intent:"ghost",iconOnly:!0,"aria-label":`Remove ${String(u.title)}`,title:"Remove",onClick:()=>r(u.id),children:"×"}),u.content&&s.jsx(ie,{intent:"ghost",icon:s.jsx("span",{className:"bv-chevron"}),iconOnly:!0,"aria-label":`${i.includes(u.id)?"Collapse":"Expand"} ${String(u.title)}`,"aria-expanded":i.includes(u.id),onClick:()=>a(d=>d.includes(u.id)?d.filter(f=>f!==u.id):[...d,u.id])})]})]}),u.summary&&s.jsx("div",{className:"bv-sortable-summary",children:u.summary}),u.content&&i.includes(u.id)&&s.jsx("div",{className:"bv-sortable-content",children:u.content})]},u.id))})}const tt=Re.forwardRef(function({type:t="button",...r},o){return s.jsx("button",{...r,type:t,ref:o})}),w1=Re.forwardRef(function(t,r){return s.jsx("input",{...t,ref:r})});function Cr({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 Om({children:e,tone:t="neutral",dot:r=!1}){return s.jsx("span",{className:`bv-badge ${t} ${r?"dot":""}`,children:e})}function pc({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 k1({tone:e="neutral",title:t,children:r,onClose:o,duration:n=0,actionLabel:i,onAction:a}){const l=v.useRef(),c=v.useCallback(()=>{l.current&&window.clearTimeout(l.current)},[]),u=v.useCallback(()=>{c(),n&&(l.current=window.setTimeout(o,n))},[n,o,c]);return v.useEffect(()=>(u(),c),[u,c]),s.jsxs("div",{className:`bv-toast ${e}`,role:"status",tabIndex:0,onPointerEnter:c,onPointerLeave:u,onFocus:c,onBlur:u,children:[s.jsxs("div",{children:[s.jsx("strong",{children:t}),r&&s.jsx("p",{children:r}),i&&a?s.jsx(ie,{intent:"secondary",onClick:()=>{a(),o()},children:i}):null]}),s.jsx(ie,{intent:"ghost",iconOnly:!0,"aria-label":"Dismiss",onClick:o,children:"×"})]})}function ki(){return(ki=Object.assign||function(e){for(var t=1;t=0||(n[r]=e[r]);return n}function aa(e){var t=v.useRef(e),r=v.useRef(function(o){t.current&&t.current(o)});return t.current=e,r.current}var ui=function(e,t,r){return t===void 0&&(t=0),r===void 0&&(r=1),e>r?r:e0:x.buttons>0)&&i.current?a(ah(i.current,x,u.current)):(h(!1),c())},b=function(){h(!1),c()};function h(x){var w=d.current,y=yd(i.current),T=x?y.addEventListener:y.removeEventListener;T(w?"touchmove":"mousemove",k),T(w?"touchend":"mouseup",b)}return[function(x){var w=x.nativeEvent,y=i.current;if(y&&(lh(w),!function(L,U){return U&&!la(L)}(w,d.current)&&y)){if(la(w)){d.current=!0;var T=w.changedTouches||[];T.length&&(u.current=T[0].identifier)}y.focus(),a(ah(y,w,u.current)),h(!0)}},function(x){var w=x.which||x.keyCode;w<37||w>40||(x.preventDefault(),l({left:w===39?.05:w===37?-.05:0,top:w===40?.05:w===38?-.05:0}))},function(x){var w=x.which||x.keyCode;w>=37&&w<=40&&c()},h]},[l,a,c]),p=f[0],g=f[1],m=f[2],_=f[3];return v.useEffect(function(){return _},[_]),Re.createElement("div",ki({},n,{onTouchStart:p,onMouseDown:p,className:"react-colorful__interactive",ref:i,onKeyDown:g,onKeyUp:m,tabIndex:0,role:"slider"}))}),rl=function(e){return e.filter(Boolean).join(" ")},lp=function(e){var t=e.color,r=e.left,o=e.top,n=o===void 0?.5:o,i=rl(["react-colorful__pointer",e.className]);return Re.createElement("div",{className:i,style:{top:100*n+"%",left:100*r+"%"}},Re.createElement("div",{className:"react-colorful__pointer-fill",style:{backgroundColor:t}}))},gt=function(e,t,r){return t===void 0&&(t=0),r===void 0&&(r=Math.pow(10,t)),Math.round(r*e)/r},Mm=function(e){return R1(_d(e))},_d=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?gt(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?gt(parseInt(e.substring(6,8),16)/255,2):1}},Am=function(e){return T1(E1(e))},Dm=function(e){var t=e.s,r=e.v,o=e.a,n=(200-t)*r/100;return{h:gt(e.h),s:gt(n>0&&n<200?t*r/100/(n<=100?n:200-n)*100:0),l:gt(n/2),a:gt(o,2)}},wd=function(e){var t=Dm(e);return"hsl("+t.h+", "+t.s+"%, "+t.l+"%)"},uu=function(e){var t=Dm(e);return"hsla("+t.h+", "+t.s+"%, "+t.l+"%, "+t.a+")"},E1=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:gt(255*[o,l,a,a,c,o][u]),g:gt(255*[c,o,o,l,a,a][u]),b:gt(255*[a,a,c,o,o,l][u]),a:gt(n,2)}},Cl=function(e){var t=e.toString(16);return t.length<2?"0"+t:t},T1=function(e){var t=e.r,r=e.g,o=e.b,n=e.a,i=n<1?Cl(gt(255*n)):"";return"#"+Cl(t)+Cl(r)+Cl(o)+i},R1=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:gt(60*(l<0?l+6:l)),s:gt(i?a/i*100:0),v:gt(i/255*100),a:n}},Im=Re.memo(function(e){var t=e.hue,r=e.onChange,o=e.onChangeEnd,n=rl(["react-colorful__hue",e.className]);return Re.createElement("div",{className:n},Re.createElement(ap,{onMove:function(i){r({h:360*i.left})},onKey:function(i){r({h:ui(t+360*i.left,0,360)})},onEnd:o,"aria-label":"Hue","aria-valuenow":gt(t),"aria-valuemax":"360","aria-valuemin":"0"},Re.createElement(lp,{className:"react-colorful__hue-pointer",left:t/360,color:wd({h:t,s:100,v:100,a:1})})))}),jm=Re.memo(function(e){var t=e.hsva,r=e.onChange,o=e.onChangeEnd,n={backgroundColor:wd({h:t.h,s:100,v:100,a:1})};return Re.createElement("div",{className:"react-colorful__saturation",style:n},Re.createElement(ap,{onMove:function(i){r({s:100*i.left,v:100-100*i.top})},onKey:function(i){r({s:ui(t.s+100*i.left,0,100),v:ui(t.v-100*i.top,0,100)})},onEnd:o,"aria-label":"Color","aria-valuetext":"Saturation "+gt(t.s)+"%, Brightness "+gt(t.v)+"%"},Re.createElement(lp,{className:"react-colorful__saturation-pointer",top:1-t.v/100,left:t.s/100,color:wd(t)})))}),Pm=function(e,t){if(e===t)return!0;for(var r in e)if(e[r]!==t[r])return!1;return!0},Bm=function(e,t){return e.toLowerCase()===t.toLowerCase()||Pm(_d(e),_d(t))};function zm(e,t,r,o){var n=aa(r),i=aa(o),a=v.useState(function(){return e.toHsva(t)}),l=a[0],c=a[1],u=v.useRef({color:t,hsva:l}),d=v.useRef(!1);v.useEffect(function(){if(!e.equal(t,u.current.color)){var g=e.toHsva(t);u.current={hsva:g,color:t},c(g),d.current=!1}},[t,e]),v.useEffect(function(){var g;Pm(l,u.current.hsva)||e.equal(g=e.fromHsva(l),u.current.color)||(u.current={hsva:l,color:g},n(g),d.current=!0)},[l,e,n]);var f=v.useCallback(function(g){c(function(m){return Object.assign({},m,g)})},[]),p=v.useCallback(function(){d.current&&(d.current=!1,i(u.current.color))},[i]);return[l,f,p]}var S1=typeof window<"u"?v.useLayoutEffect:v.useEffect,L1=function(){return typeof __webpack_nonce__<"u"?__webpack_nonce__:void 0},sh=new WeakMap,Fm=function(e){S1(function(){var t=e.current;if(typeof document<"u"&&t){var r=t.getRootNode?t.getRootNode():t.ownerDocument,o=r&&("head"in r||"host"in r)?r:t.ownerDocument;if(!sh.has(o)){var n="head"in o?o.head:o,i=(n.ownerDocument||document).createElement("style");i.innerHTML=`.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:"";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url('data:image/svg+xml;charset=utf-8,')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}`;var a=L1();a&&i.setAttribute("nonce",a),sh.set(o,i),n.appendChild(i)}}},[])},C1=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=ip(e,["className","colorModel","color","onChange","onChangeEnd"]),c=v.useRef(null);Fm(c);var u=zm(r,n,i,a),d=u[0],f=u[1],p=u[2],g=rl(["react-colorful",t]);return Re.createElement("div",ki({},l,{ref:c,className:g}),Re.createElement(jm,{hsva:d,onChange:f,onChangeEnd:p}),Re.createElement(Im,{hue:d.h,onChange:f,onChangeEnd:p,className:"react-colorful__last-control"}))},N1={defaultColor:"000",toHsva:Mm,fromHsva:function(e){return Am({h:e.h,s:e.s,v:e.v,a:1})},equal:Bm},O1=function(e){return Re.createElement(C1,ki({},e,{colorModel:N1}))},M1=function(e){var t=e.className,r=e.hsva,o=e.onChange,n=e.onChangeEnd,i={backgroundImage:"linear-gradient(90deg, "+uu(Object.assign({},r,{a:0}))+", "+uu(Object.assign({},r,{a:1}))+")"},a=rl(["react-colorful__alpha",t]),l=gt(100*r.a);return Re.createElement("div",{className:a},Re.createElement("div",{className:"react-colorful__alpha-gradient",style:i}),Re.createElement(ap,{onMove:function(c){o({a:c.left})},onKey:function(c){o({a:ui(r.a+c.left)})},onEnd:n,"aria-label":"Alpha","aria-valuetext":l+"%","aria-valuenow":l,"aria-valuemin":"0","aria-valuemax":"100"},Re.createElement(lp,{className:"react-colorful__alpha-pointer",left:r.a,color:uu(r)})))},A1=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=ip(e,["className","colorModel","color","onChange","onChangeEnd"]),c=v.useRef(null);Fm(c);var u=zm(r,n,i,a),d=u[0],f=u[1],p=u[2],g=rl(["react-colorful",t]);return Re.createElement("div",ki({},l,{ref:c,className:g}),Re.createElement(jm,{hsva:d,onChange:f,onChangeEnd:p}),Re.createElement(Im,{hue:d.h,onChange:f,onChangeEnd:p}),Re.createElement(M1,{hsva:d,onChange:f,onChangeEnd:p,className:"react-colorful__last-control"}))},D1={defaultColor:"0001",toHsva:Mm,fromHsva:Am,equal:Bm},I1=function(e){return Re.createElement(A1,ki({},e,{colorModel:D1}))},Um={},ft=br&&br.__assign||function(){return ft=Object.assign||function(e){for(var t,r=1,o=arguments.length;r-1){N.current.stack=ge.slice(0,ye+1);var Qe=N.current.stack.length;if(Qe>ph){var He=Qe-ph;N.current.stack=ge.slice(He,Qe),N.current.offset=Math.max(N.current.offset-He,0)}}var Be=Date.now();if(ue){var _e=N.current.stack[N.current.offset];if(_e&&Be-_e.timestamp=ye&&ul<=Qe&&ut.startsWith(pe)?ut.substring(pe.length):ut}).join(` -`);if(se!==He){var Be=ge[ye];le({value:He,selectionStart:Be?.startsWith(pe)?G-pe.length:G,selectionEnd:fe-(se.length-He.length)})}}else if(G!==fe){var ge=Q(se,G),_e=ge.length-1,qe=Q(se,fe).length-1,Be=ge[_e];le({value:se.split(` -`).map(function(Ni,Oi){return Oi>=_e&&Oi<=qe?pe+Ni:Ni}).join(` -`),selectionStart:Be&&/\S/.test(Be)?G+pe.length:G,selectionEnd:fe+pe.length*(qe-_e+1)})}else{var me=G+pe.length;le({value:se.substring(0,G)+pe+se.substring(fe),selectionStart:me,selectionEnd:me})}else if(X.key==="Backspace"){var Mt=G!==fe,ir=se.substring(0,G);if(ir.endsWith(pe)&&!Mt){X.preventDefault();var me=G-pe.length;le({value:se.substring(0,G-pe.length)+se.substring(fe),selectionStart:me,selectionEnd:me})}}else if(X.key==="Enter"){if(G===fe){var xt=Q(se,G).pop(),Yo=xt?.match(/^\s+/);if(Yo?.[0]){X.preventDefault();var Xo=` -`+Yo[0],me=G+Xo.length;le({value:se.substring(0,G)+Xo+se.substring(fe),selectionStart:me,selectionEnd:me})}}}else if(X.keyCode===ch||X.keyCode===uh||X.keyCode===dh||X.keyCode===fh){var ar=void 0;X.keyCode===ch&&X.shiftKey?ar=["(",")"]:X.keyCode===uh?X.shiftKey?ar=["{","}"]:ar=["[","]"]:X.keyCode===dh?X.shiftKey?ar=['"','"']:ar=["'","'"]:X.keyCode===fh&&!X.shiftKey&&(ar=["`","`"]),G!==fe&&ar&&(X.preventDefault(),le({value:se.substring(0,G)+ar[0]+se.substring(G,fe)+ar[1]+se.substring(fe),selectionStart:G,selectionEnd:fe+2}))}else(gu?X.metaKey&&X.keyCode===Nl:X.ctrlKey&&X.keyCode===Nl)&&!X.shiftKey&&!X.altKey?(X.preventDefault(),Oe()):(gu?X.metaKey&&X.keyCode===Nl&&X.shiftKey:q1?X.ctrlKey&&X.keyCode===Y1:X.ctrlKey&&X.keyCode===Nl&&X.shiftKey)&&!X.altKey?(X.preventDefault(),Ee()):X.keyCode===X1&&X.ctrlKey&&(!gu||X.shiftKey)&&(X.preventDefault(),Z(function(ut){return!ut}))}},Bt=function(X){var ue=X.currentTarget,se=ue.value,G=ue.selectionStart,fe=ue.selectionEnd;H({value:se,selectionStart:G,selectionEnd:fe},!0),y(se)};return sr.useEffect(function(){ee()},[ee]),sr.useImperativeHandle(r,function(){return{get session(){return{history:N.current}},set session(X){N.current=X.history}}},[]),sr.createElement("div",ft({},S,{style:ft(ft({},Fi.container),j)}),sr.createElement("pre",ft({className:L,"aria-hidden":"true",style:ft(ft(ft({},Fi.editor),Fi.highlight),Y)},typeof q=="string"?{dangerouslySetInnerHTML:{__html:q+"
"}}:{children:q})),sr.createElement("textarea",{ref:function(X){return A.current=X},style:ft(ft(ft({},Fi.editor),Fi.textarea),Y),className:Jl+(E?" ".concat(E):""),id:B,value:C,onChange:Bt,onKeyDown:ve,onClick:_,onKeyUp:h,onFocus:k,onBlur:m,disabled:n,form:i,maxLength:f,minLength:p,name:g,placeholder:T,readOnly:U,required:P,autoFocus:o,autoCapitalize:"off",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"data-gramm":!1}),sr.createElement("style",{dangerouslySetInnerHTML:{__html:K1}}))}),Fi={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"}};Um.default=J1;var Z1={exports:{}};(function(e){var t=typeof window<"u"?window:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:{};/** +`),H1=lr.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,d=u===void 0?!0:u,f=t.maxLength,p=t.minLength,g=t.name,m=t.onBlur,_=t.onClick,k=t.onFocus,b=t.onKeyDown,h=t.onKeyUp,x=t.onValueChange,w=t.padding,y=w===void 0?0:w,T=t.placeholder,L=t.preClassName,U=t.readOnly,P=t.required,j=t.style,M=t.tabSize,O=M===void 0?2:M,E=t.textareaClassName,B=t.textareaId,C=t.value,S=z1(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"]),N=lr.useRef({stack:[],offset:-1}),A=lr.useRef(null),F=lr.useState(!0),z=F[0],Z=F[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},q=a(C),Q=function(X,ue){return X.substring(0,ue).split(` +`)},H=lr.useCallback(function(X,ue){var se,G,fe;ue===void 0&&(ue=!1);var pe=N.current,ge=pe.stack,xe=pe.offset;if(ge.length&&xe>-1){N.current.stack=ge.slice(0,xe+1);var Qe=N.current.stack.length;if(Qe>ph){var He=Qe-ph;N.current.stack=ge.slice(He,Qe),N.current.offset=Math.max(N.current.offset-He,0)}}var Be=Date.now();if(ue){var _e=N.current.stack[N.current.offset];if(_e&&Be-_e.timestamp=xe&&ul<=Qe&&ut.startsWith(pe)?ut.substring(pe.length):ut}).join(` +`);if(se!==He){var Be=ge[xe];le({value:He,selectionStart:Be?.startsWith(pe)?G-pe.length:G,selectionEnd:fe-(se.length-He.length)})}}else if(G!==fe){var ge=Q(se,G),_e=ge.length-1,qe=Q(se,fe).length-1,Be=ge[_e];le({value:se.split(` +`).map(function(Ci,Ni){return Ni>=_e&&Ni<=qe?pe+Ci:Ci}).join(` +`),selectionStart:Be&&/\S/.test(Be)?G+pe.length:G,selectionEnd:fe+pe.length*(qe-_e+1)})}else{var me=G+pe.length;le({value:se.substring(0,G)+pe+se.substring(fe),selectionStart:me,selectionEnd:me})}else if(X.key==="Backspace"){var Mt=G!==fe,nr=se.substring(0,G);if(nr.endsWith(pe)&&!Mt){X.preventDefault();var me=G-pe.length;le({value:se.substring(0,G-pe.length)+se.substring(fe),selectionStart:me,selectionEnd:me})}}else if(X.key==="Enter"){if(G===fe){var yt=Q(se,G).pop(),Ho=yt?.match(/^\s+/);if(Ho?.[0]){X.preventDefault();var Yo=` +`+Ho[0],me=G+Yo.length;le({value:se.substring(0,G)+Yo+se.substring(fe),selectionStart:me,selectionEnd:me})}}}else if(X.keyCode===ch||X.keyCode===uh||X.keyCode===dh||X.keyCode===fh){var ir=void 0;X.keyCode===ch&&X.shiftKey?ir=["(",")"]:X.keyCode===uh?X.shiftKey?ir=["{","}"]:ir=["[","]"]:X.keyCode===dh?X.shiftKey?ir=['"','"']:ir=["'","'"]:X.keyCode===fh&&!X.shiftKey&&(ir=["`","`"]),G!==fe&&ir&&(X.preventDefault(),le({value:se.substring(0,G)+ir[0]+se.substring(G,fe)+ir[1]+se.substring(fe),selectionStart:G,selectionEnd:fe+2}))}else(du?X.metaKey&&X.keyCode===Nl:X.ctrlKey&&X.keyCode===Nl)&&!X.shiftKey&&!X.altKey?(X.preventDefault(),Ne()):(du?X.metaKey&&X.keyCode===Nl&&X.shiftKey:W1?X.ctrlKey&&X.keyCode===F1:X.ctrlKey&&X.keyCode===Nl&&X.shiftKey)&&!X.altKey?(X.preventDefault(),Ee()):X.keyCode===U1&&X.ctrlKey&&(!du||X.shiftKey)&&(X.preventDefault(),Z(function(ut){return!ut}))}},Bt=function(X){var ue=X.currentTarget,se=ue.value,G=ue.selectionStart,fe=ue.selectionEnd;H({value:se,selectionStart:G,selectionEnd:fe},!0),x(se)};return lr.useEffect(function(){ee()},[ee]),lr.useImperativeHandle(r,function(){return{get session(){return{history:N.current}},set session(X){N.current=X.history}}},[]),lr.createElement("div",ft({},S,{style:ft(ft({},zi.container),j)}),lr.createElement("pre",ft({className:L,"aria-hidden":"true",style:ft(ft(ft({},zi.editor),zi.highlight),Y)},typeof q=="string"?{dangerouslySetInnerHTML:{__html:q+"
"}}:{children:q})),lr.createElement("textarea",{ref:function(X){return A.current=X},style:ft(ft(ft({},zi.editor),zi.textarea),Y),className:Kl+(E?" ".concat(E):""),id:B,value:C,onChange:Bt,onKeyDown:ve,onClick:_,onKeyUp:h,onFocus:k,onBlur:m,disabled:n,form:i,maxLength:f,minLength:p,name:g,placeholder:T,readOnly:U,required:P,autoFocus:o,autoCapitalize:"off",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"data-gramm":!1}),lr.createElement("style",{dangerouslySetInnerHTML:{__html:$1}}))}),zi={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"}};Um.default=H1;var Y1={exports:{}};(function(e){var t=typeof window<"u"?window:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:{};/** * Prism: Lightweight, robust, elegant syntax highlighting * * @license MIT * @author Lea Verou * @namespace * @public - */var r=function(o){var n=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,i=0,a={},l={manual:o.Prism&&o.Prism.manual,disableWorkerMessageHandler:o.Prism&&o.Prism.disableWorkerMessageHandler,util:{encode:function h(y){return y instanceof c?new c(y.type,h(y.content),y.alias):Array.isArray(y)?y.map(h):y.replace(/&/g,"&").replace(/"u")return null;if(document.currentScript&&document.currentScript.tagName==="SCRIPT")return document.currentScript;try{throw new Error}catch(x){var h=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(x.stack)||[])[1];if(h){var y=document.getElementsByTagName("script");for(var w in y)if(y[w].src==h)return y[w]}return null}},isActive:function(h,y,w){for(var x="no-"+y;h;){var T=h.classList;if(T.contains(y))return!0;if(T.contains(x))return!1;h=h.parentElement}return!!w}},languages:{plain:a,plaintext:a,text:a,txt:a,extend:function(h,y){var w=l.util.clone(l.languages[h]);for(var x in y)w[x]=y[x];return w},insertBefore:function(h,y,w,x){x=x||l.languages;var T=x[h],L={};for(var U in T)if(T.hasOwnProperty(U)){if(U==y)for(var P in w)w.hasOwnProperty(P)&&(L[P]=w[P]);w.hasOwnProperty(U)||(L[U]=T[U])}var j=x[h];return x[h]=L,l.languages.DFS(l.languages,function(M,O){O===j&&M!=h&&(this[M]=L)}),L},DFS:function h(y,w,x,T){T=T||{};var L=l.util.objId;for(var U in y)if(y.hasOwnProperty(U)){w.call(y,U,y[U],x||U);var P=y[U],j=l.util.type(P);j==="Object"&&!T[L(P)]?(T[L(P)]=!0,h(P,w,null,T)):j==="Array"&&!T[L(P)]&&(T[L(P)]=!0,h(P,w,U,T))}}},plugins:{},highlightAll:function(h,y){l.highlightAllUnder(document,h,y)},highlightAllUnder:function(h,y,w){var x={callback:w,container:h,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};l.hooks.run("before-highlightall",x),x.elements=Array.prototype.slice.apply(x.container.querySelectorAll(x.selector)),l.hooks.run("before-all-elements-highlight",x);for(var T=0,L;L=x.elements[T++];)l.highlightElement(L,y===!0,x.callback)},highlightElement:function(h,y,w){var x=l.util.getLanguage(h),T=l.languages[x];l.util.setLanguage(h,x);var L=h.parentElement;L&&L.nodeName.toLowerCase()==="pre"&&l.util.setLanguage(L,x);var U=h.textContent,P={element:h,language:x,grammar:T,code:U};function j(O){P.highlightedCode=O,l.hooks.run("before-insert",P),P.element.innerHTML=P.highlightedCode,l.hooks.run("after-highlight",P),l.hooks.run("complete",P),w&&w.call(P.element)}if(l.hooks.run("before-sanity-check",P),L=P.element.parentElement,L&&L.nodeName.toLowerCase()==="pre"&&!L.hasAttribute("tabindex")&&L.setAttribute("tabindex","0"),!P.code){l.hooks.run("complete",P),w&&w.call(P.element);return}if(l.hooks.run("before-highlight",P),!P.grammar){j(l.util.encode(P.code));return}if(y&&o.Worker){var M=new Worker(l.filename);M.onmessage=function(O){j(O.data)},M.postMessage(JSON.stringify({language:P.language,code:P.code,immediateClose:!0}))}else j(l.highlight(P.code,P.grammar,P.language))},highlight:function(h,y,w){var x={code:h,grammar:y,language:w};if(l.hooks.run("before-tokenize",x),!x.grammar)throw new Error('The language "'+x.language+'" has no grammar.');return x.tokens=l.tokenize(x.code,x.grammar),l.hooks.run("after-tokenize",x),c.stringify(l.util.encode(x.tokens),x.language)},tokenize:function(h,y){var w=y.rest;if(w){for(var x in w)y[x]=w[x];delete y.rest}var T=new f;return p(T,T.head,h),d(h,T,y,T.head,0),m(T)},hooks:{all:{},add:function(h,y){var w=l.hooks.all;w[h]=w[h]||[],w[h].push(y)},run:function(h,y){var w=l.hooks.all[h];if(!(!w||!w.length))for(var x=0,T;T=w[x++];)T(y)}},Token:c};o.Prism=l;function c(h,y,w,x){this.type=h,this.content=y,this.alias=w,this.length=(x||"").length|0}c.stringify=function h(y,w){if(typeof y=="string")return y;if(Array.isArray(y)){var x="";return y.forEach(function(j){x+=h(j,w)}),x}var T={type:y.type,content:h(y.content,w),tag:"span",classes:["token",y.type],attributes:{},language:w},L=y.alias;L&&(Array.isArray(L)?Array.prototype.push.apply(T.classes,L):T.classes.push(L)),l.hooks.run("wrap",T);var U="";for(var P in T.attributes)U+=" "+P+'="'+(T.attributes[P]||"").replace(/"/g,""")+'"';return"<"+T.tag+' class="'+T.classes.join(" ")+'"'+U+">"+T.content+""};function u(h,y,w,x){h.lastIndex=y;var T=h.exec(w);if(T&&x&&T[1]){var L=T[1].length;T.index+=L,T[0]=T[0].slice(L)}return T}function d(h,y,w,x,T,L){for(var U in w)if(!(!w.hasOwnProperty(U)||!w[U])){var P=w[U];P=Array.isArray(P)?P:[P];for(var j=0;j=L.reach);F+=A.value.length,A=A.next){var z=A.value;if(y.length>h.length)return;if(!(z instanceof c)){var Z=1,Y;if(B){if(Y=u(N,F,h,E),!Y||Y.index>=h.length)break;var ee=Y.index,q=Y.index+Y[0].length,Q=F;for(Q+=A.value.length;ee>=Q;)A=A.next,Q+=A.value.length;if(Q-=A.value.length,F=Q,A.value instanceof c)continue;for(var H=A;H!==y.tail&&(QL.reach&&(L.reach=Ee);var ve=A.prev;le&&(ve=p(y,ve,le),F+=le.length),g(y,ve,Z);var Bt=new c(U,O?l.tokenize(ie,O):ie,C,ie);if(A=p(y,ve,Bt),Oe&&p(y,A,Oe),Z>1){var X={cause:U+","+j,reach:Ee};d(h,y,w,A.prev,F,X),L&&X.reach>L.reach&&(L.reach=X.reach)}}}}}}function f(){var h={value:null,prev:null,next:null},y={value:null,prev:h,next:null};h.next=y,this.head=h,this.tail=y,this.length=0}function p(h,y,w){var x=y.next,T={value:w,prev:y,next:x};return y.next=T,x.prev=T,h.length++,T}function g(h,y,w){for(var x=y.next,T=0;T/,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(_,k){return"✖ Error "+_+" while fetching file: "+k},i="✖ Error: File does not exist or is empty",a={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},l="data-src-status",c="loading",u="loaded",d="failed",f="pre[data-src]:not(["+l+'="'+u+'"]):not(['+l+'="'+c+'"])';function p(_,k,b){var h=new XMLHttpRequest;h.open("GET",_,!0),h.onreadystatechange=function(){h.readyState==4&&(h.status<400&&h.responseText?k(h.responseText):h.status>=400?b(n(h.status,h.statusText)):b(i))},h.send(null)}function g(_){var k=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(_||"");if(k){var b=Number(k[1]),h=k[2],y=k[3];return h?y?[b,Number(y)]:[b,void 0]:[b,b]}}r.hooks.add("before-highlightall",function(_){_.selector+=", "+f}),r.hooks.add("before-sanity-check",function(_){var k=_.element;if(k.matches(f)){_.code="",k.setAttribute(l,c);var b=k.appendChild(document.createElement("CODE"));b.textContent=o;var h=k.getAttribute("data-src"),y=_.language;if(y==="none"){var w=(/\.(\w+)$/.exec(h)||[,"none"])[1];y=a[w]||w}r.util.setLanguage(b,y),r.util.setLanguage(k,y);var x=r.plugins.autoloader;x&&x.loadLanguages(y),p(h,function(T){k.setAttribute(l,u);var L=g(k.getAttribute("data-range"));if(L){var U=T.split(/\r\n?|\n/g),P=L[0],j=L[1]==null?U.length:L[1];P<0&&(P+=U.length),P=Math.max(0,Math.min(P-1,U.length)),j<0&&(j+=U.length),j=Math.max(0,Math.min(j,U.length)),T=U.slice(P,j).join(` -`),k.hasAttribute("data-start")||k.setAttribute("data-start",String(P+1))}b.textContent=T,r.highlightElement(b)},function(T){k.setAttribute(l,d),b.textContent=T})}}),r.plugins.fileHighlight={highlight:function(k){for(var b=(k||document).querySelectorAll(f),h=0,y;y=b[h++];)r.highlightElement(y)}};var m=!1;r.fileHighlight=function(){m||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),m=!0),r.plugins.fileHighlight.highlight.apply(this,arguments)}}()})(Z1);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 Gn({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 Or({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 Hr({label:e,help:t,error:r,icon:o,suffix:n,onValue:i,className:a="",...l}){const c=(u=!1)=>s.jsxs("span",{className:"bv-input-shell",children:[o&&s.jsx("span",{className:"bv-field-icon","aria-hidden":"true",children:o}),s.jsx("input",{...l,id:u&&l.id?`${l.id}-expanded`:l.id,"aria-label":u?e:l["aria-label"],"aria-invalid":!!r,onChange:d=>i?.(d.target.value)}),n&&s.jsx("span",{className:"bv-field-suffix",children:n})]});return s.jsx(Or,{label:e,help:t,error:r,className:a,children:s.jsx(gc,{label:e,summary:String(l.value??l.defaultValue??l.placeholder??"Edit value"),icon:o,popover:c(!0),children:c()})})}function Q1({label:e,help:t,error:r,icon:o,resize:n="vertical",onValue:i,className:a="",...l}){const c=(d=!1)=>s.jsxs("span",{className:`bv-textarea-shell resize-${n}`,children:[o&&s.jsx("span",{className:"bv-field-icon","aria-hidden":"true",children:o}),s.jsx("textarea",{...l,id:d&&l.id?`${l.id}-expanded`:l.id,"aria-label":d?e:l["aria-label"],"aria-invalid":!!r,onChange:f=>i?.(f.target.value)})]}),u=String(l.value??l.defaultValue??l.placeholder??"Edit text");return s.jsx(Or,{label:e,help:t,error:r,className:`bv-textarea-field ${a}`,children:s.jsx(gc,{label:e,summary:u,icon:o,popover:c(!0),children:c()})})}const ek=v.forwardRef(function(t,r){return s.jsx("textarea",{...t,ref:r})});function Ur({label:e,value:t,min:r,max:o,step:n,unit:i,icon:a,help:l,slider:c=!0,onValue:u,className:d=""}){const f=v.useId(),[p,g]=v.useState(String(t));v.useEffect(()=>g(String(t)),[t]);const m=T=>Math.max(r,Math.min(o,T)),_=()=>{const T=Number(p);Number.isFinite(T)?u(m(T)):g(String(t))},k=`${Math.max(0,Math.min(100,(t-r)/Math.max(Number.EPSILON,o-r)*100))}%`,b=T=>s.jsxs("div",{className:"bv-number-box",children:[a&&s.jsx("span",{className:"bv-field-icon","aria-hidden":"true",children:a}),s.jsx("input",{id:T,value:p,inputMode:Number.isInteger(n)?"numeric":"decimal",onChange:L=>g(L.target.value),onBlur:_,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":k},children:[s.jsxs("output",{children:[t,i??""]}),s.jsx("input",{className:"bv-number-track",type:"range",min:r,max:o,step:n,value:t,style:{"--range-fill":k},"aria-labelledby":`${f}-label`,onChange:T=>u(m(+T.target.value))})]}),y=s.jsxs("div",{className:"bv-number-ticks",children:[s.jsx("span",{children:r}),s.jsx("span",{children:o})]}),w=s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"bv-number-value-row",children:[c&&h,b(f)]}),c&&y]}),x=s.jsxs("div",{className:"bv-number-popup",children:[c&&h,b(`${f}-expanded`),c&&y]});return s.jsxs("div",{className:`bv-number-field ${c?"has-slider":"direct-only"} ${d}`.trim(),children:[s.jsx("label",{id:`${f}-label`,htmlFor:f,children:e}),s.jsx(gc,{label:e,summary:`${t}${i??""}`,icon:a,popover:x,children:w}),l&&s.jsx("small",{className:"bv-control-help bv-control-help-overlay",children:l})]})}function Vm({label:e,value:t,options:r,onValue:o,disabled:n,className:i=""}){const[a,l]=v.useState(!1),c=v.useRef(null),u=r.find(d=>d.value===t);return s.jsxs("div",{ref:c,className:`bv-select-popover ${i}`.trim(),children:[s.jsxs("button",{type:"button",className:"bv-select-trigger",disabled:n,"aria-label":e,"aria-haspopup":"listbox","aria-expanded":a,onClick:()=>l(d=>!d),children:[s.jsx("span",{children:u?.label??"Select…"}),s.jsx("span",{className:"bv-chevron","aria-hidden":"true"})]}),s.jsx(Ho,{open:a,anchor:c,onClose:()=>l(!1),className:"bv-select-menu",matchWidth:!0,children:s.jsx("div",{role:"listbox","aria-label":e,children:r.map(d=>s.jsxs("button",{type:"button",role:"option","aria-selected":d.value===t,disabled:d.disabled,onClick:f=>{o(d.value,{shiftKey:f.shiftKey}),l(!1)},children:[d.icon,s.jsx("span",{children:d.label})]},d.value))})})]})}function at({label:e,value:t,options:r,onValue:o,help:n,disabled:i}){return s.jsx(Or,{label:e,help:n,children:s.jsx(Vm,{label:e,value:t,options:r,onValue:o,disabled:i})})}function tk({label:e,value:t,options:r,onValue:o,disabled:n,className:i=""}){return s.jsx(Vm,{label:e,value:t,options:r,onValue:o,disabled:n,className:`bv-density-compact ${i}`})}function no({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 bc({label:e,value:t,onValue:r,trueLabel:o="True",falseLabel:n="False",help:i}){return s.jsx(Or,{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 rk({label:e,value:t,options:r,onValue:o,minSelected:n=0,help:i}){const[a,l]=v.useState(!1),c=v.useRef(null),u=d=>{const f=t.includes(d);f&&t.length<=n||o(f?t.filter(p=>p!==d):[...t,d])};return s.jsx(Or,{label:e,help:i,children:s.jsxs("div",{ref:c,className:"bv-tag-select",children:[s.jsxs("button",{type:"button",className:"bv-tag-select-trigger","aria-haspopup":"listbox","aria-expanded":a,onClick:()=>l(d=>!d),children:[s.jsx("span",{className:"bv-tag-values",children:t.map(d=>s.jsx("span",{className:"bv-tag",children:r.find(f=>f.value===d)?.label??d},d))}),s.jsx("span",{className:"bv-chevron","aria-hidden":"true"})]}),s.jsx(Ho,{open:a,anchor:c,onClose:()=>l(!1),className:"bv-select-menu bv-tag-select-menu",matchWidth:!0,children:s.jsx("div",{role:"listbox","aria-label":e,"aria-multiselectable":"true",children:r.map(d=>{const f=t.includes(d.value),p=f&&t.length<=n;return s.jsxs("button",{type:"button",role:"option","aria-selected":f,disabled:d.disabled||p,onClick:()=>u(d.value),children:[s.jsx("span",{className:"bv-tag-select-check","aria-hidden":"true",children:f?"✓":""}),s.jsx("span",{children:d.label})]},d.value)})})})]})})}function ok({label:e,value:t,onValue:r,onClear:o}){const[n,i]=v.useState(!1);return s.jsx(Or,{label:e,children:s.jsxs("span",{className:"bv-input-shell",children:[s.jsx("input",{type:n?"text":"password",value:t,autoComplete:"off",onChange:a=>r(a.target.value)}),s.jsx(ne,{type:"button",intent:"ghost",className:"bv-field-action",onClick:()=>i(!n),children:n?"Hide":"Show"}),s.jsx(ne,{type:"button",intent:"ghost",className:"bv-field-action",onClick:()=>{r(""),o?.()},children:"Clear"})]})})}function nk({label:e,value:t,onValue:r,alpha:o=!1,help:n}){const[i,a]=v.useState(!1),l=v.useRef(null),c=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i.test(t),u=o?U1:P1,d=s.jsx("input",{value:t,"aria-label":`${e} hexadecimal value`,spellCheck:!1,onChange:p=>r(p.target.value)}),f=s.jsxs("div",{className:"bv-color-expanded",children:[d,s.jsx(u,{color:c?t:o?"#8D70FFFF":"#8D70FF",onChange:r})]});return s.jsx(Or,{label:e,help:n,error:c?void 0:"Enter a valid hexadecimal color.",children:s.jsx(gc,{label:e,summary:t,icon:s.jsx("span",{className:"bv-color-dot",style:{background:c?t:"#000"}}),popover:f,children:s.jsxs("div",{ref:l,className:"bv-color-field",children:[s.jsx("button",{type:"button",className:"bv-color-swatch",style:{background:c?t:"#000"},onClick:()=>a(!i),"aria-label":`${e}: ${t}`,"aria-haspopup":"dialog","aria-expanded":i}),d,s.jsx(Ho,{open:i,anchor:l,onClose:()=>a(!1),className:"bv-color-popover",children:f})]})})})}function Ms({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))})}const Wm=(e,t)=>JSON.stringify([e,t]);function ik(e){const t=new Map,r=new Map;for(const o of e)r.set(o.label,(r.get(o.label)??0)+1);for(const o of e)for(const n of o.resources)t.set(n.label,(t.get(n.label)??0)+1);return e.flatMap(o=>o.resources.map(n=>{const i=(r.get(o.label)??0)>1&&o.nodeId?`${o.label} · #${o.nodeId}`:o.label;return{value:Wm(o.id,n.id),collectorId:o.id,resourceId:n.id,label:(t.get(n.label)??0)>1?`${n.label} · ${i}`:n.label}}))}function Ri({collectors:e,collectorId:t,resourceId:r,resolved:o=!0,onSelection:n,label:i="Resource",emptyLabel:a="Select resource"}){const l=e.find(m=>m.id===t),c=l?.resources.find(m=>m.id===r),u=!!(t||r),d=u&&(!o||!l||!c),f=ik(e),p=u?Wm(t,r):"",g=d&&!f.some(m=>m.value===p)?[{value:p,label:`Unresolved · ${r||t}`},...f]:f;return s.jsx("div",{className:`bv-resource-picker ${d?"is-unresolved":""}`,children:s.jsx(at,{label:i,value:p,options:[{value:"",label:a},...g],onValue:m=>{if(!m){n("","");return}const _=f.find(k=>k.value===m);_&&n(_.collectorId,_.resourceId)}})})}const gh=["#E45756","#4C78A8","#54A24B","#F2CF5B","#B279A2","#FF9DA6"],$m=e=>gh[e%gh.length],Dt=()=>crypto.randomUUID(),hh=()=>({schema:"bv.regional",version:2,document_id:Dt(),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:[]}),ak=e=>({id:Dt(),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:$m(e)}}),qt=e=>structuredClone(e);function lk(e,t){return{...e,document_id:t}}const fr=(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},Ut=e=>e.layer_id??e.id,ol=e=>e.mask_group_id??Ut(e);function Hm(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:fr(n[0],i),enabled:n.some(a=>a.enabled!==!1)}))}function jr(e){return Hm(e.geometry,Ut)}function sk(e){return Hm(e,ol)}function Uo(e){const t=typeof e=="string"?JSON.parse(e):qt(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=fr(n,i)),n.type==="brush_stroke"&&(n.shape??(n.shape="round"),n.pressure_mode??(n.pressure_mode="constant"))})}return t}function Ym(e){const t=new Map;for(const r of e){const o=ol(r);t.has(o)||t.set(o,r)}return[...t.values()].every(r=>r.operation==="add")}function Rd(e,t){return Ym(e.filter(r=>r.id!==t))}function bh({value:e,onCommit:t}){const[r,o]=v.useState(!1),[n,i]=v.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(L1,{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 zt({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"}),merge:s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M5 6h3a4 4 0 0 1 4 4v8"}),s.jsx("path",{d:"M19 6h-3a4 4 0 0 0-4 4"}),s.jsx("path",{d:"m9 15 3 3 3-3"})]}),separate:s.jsxs(s.Fragment,{children:[s.jsx("rect",{x:"3.5",y:"7",width:"6",height:"10",rx:"1.5"}),s.jsx("rect",{x:"14.5",y:"7",width:"6",height:"10",rx:"1.5"}),s.jsx("path",{d:"M12 5v14M9.5 7.5 12 5l2.5 2.5M9.5 16.5 12 19l2.5-2.5"})]}),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 ck(e){const[t,r]=v.useState(()=>new Set),[o,n]=v.useState(()=>new Set(e.selectedRegionId?[e.selectedRegionId]:[])),[i,a]=v.useState(null),[l,c]=v.useState(null),u=b=>r(h=>{const y=new Set(h);return y.has(b)?y.delete(b):y.add(b),y}),d=b=>n(h=>{const y=new Set(h);return y.has(b)?y.delete(b):y.add(b),y});v.useEffect(()=>{e.selectedRegionId&&n(b=>b.has(e.selectedRegionId)?b:new Set([...b,e.selectedRegionId]))},[e.selectedRegionId]);const f=b=>b.kind==="region"?`region:${b.regionId}`:b.kind==="layer"?`layer:${b.regionId}:${b.layerId}`:`geometry:${b.regionId}:${b.layerId}:${b.geometryId}`,p=(b,h)=>{a(b),h.dataTransfer.effectAllowed="move",h.dataTransfer.setData("text/plain",f(b))},g=(b,h)=>{if(!i||i.kind!==b.kind||b.kind==="layer"&&i.kind==="geometry")return"inside";const y=h.currentTarget.getBoundingClientRect();return h.clientY({onDragOver:h=>{i&&(h.preventDefault(),h.dataTransfer.dropEffect="move",c(`${f(b)}:${g(b,h)}`))},onDragLeave:h=>{h.currentTarget.contains(h.relatedTarget)||c(null)},onDrop:h=>{h.preventDefault(),i&&e.onTreeMove({source:i,target:b,position:g(b,h)}),a(null),c(null)}}),_=b=>{const h=l?.split(":")??[];return l?.startsWith(`${f(b)}:`)?` drop-target drop-${h[h.length-1]}`:""},k=e.regions.find(b=>b.id===e.selectedRegionId)??null;return s.jsxs("aside",{className:"layers",children:[s.jsxs("div",{className:"panel-toolbar",children:[s.jsxs(tt,{className:"panel-tool primary",title:"Add region","aria-label":"Add region",onClick:e.onAddRegion,children:[s.jsx(zt,{name:"plus"}),s.jsx("span",{children:"Region"})]}),s.jsxs(tt,{className:"panel-tool",title:"Merge selected layers (Ctrl E)","aria-label":"Merge selected layers",disabled:!e.canMergeLayers,onClick:e.onMergeLayers,children:[s.jsx(zt,{name:"merge"}),s.jsx("span",{children:"Merge"})]}),s.jsxs(tt,{className:"panel-tool",title:"Separate disconnected areas into individual layers","aria-label":"Split disconnected areas",disabled:!e.canSplitDisconnectedAreas,onClick:e.onSplitDisconnectedAreas,children:[s.jsx(zt,{name:"separate"}),s.jsx("span",{children:"Split"})]}),s.jsx("span",{className:"panel-toolbar-spacer"}),s.jsx(tt,{className:"panel-tool danger",title:"Delete selected region","aria-label":"Delete selected region",disabled:!k,onClick:()=>k&&e.onDeleteRegion(k.id),children:s.jsx(zt,{name:"trash"})})]}),e.regions.map(b=>{const h=b.id===e.selectedRegionId,y=o.has(b.id),w={kind:"region",regionId:b.id};return s.jsxs("section",{className:`region-group ${h?"selected":""}`,"aria-expanded":y,children:[s.jsxs("div",{className:`region-row${_(w)}`,...m(w),onClick:()=>e.onSelectRegion(b.id),children:[s.jsx(tt,{className:"tree-drag-handle",draggable:!0,"aria-label":`Move ${b.name}`,title:"Drag to reorder; Alt + arrow keys also move",onDragStart:x=>p(w,x),onDragEnd:()=>{a(null),c(null)},onKeyDown:x=>{x.altKey&&x.key==="ArrowUp"&&(x.preventDefault(),e.onMoveRegion(b.id,-1)),x.altKey&&x.key==="ArrowDown"&&(x.preventDefault(),e.onMoveRegion(b.id,1))},onClick:x=>x.stopPropagation(),children:"⠿"}),s.jsx(tt,{className:"region-expand","aria-expanded":y,title:y?"Collapse region":"Expand region",onClick:x=>{x.stopPropagation(),d(b.id)},children:s.jsx(zt,{name:y?"chevron-down":"chevron-right"})}),s.jsx("i",{style:{background:b.authoring.color}}),s.jsx(bh,{value:b.name,onCommit:x=>e.onRenameRegion(b.id,x)}),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(tt,{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:x=>{x.stopPropagation(),e.onToggleRegion(b.id,"visible")},children:s.jsx(zt,{name:b.authoring.visible?"eye":"eye-off"})}),s.jsx(tt,{className:`tree-icon-button${b.authoring.locked?" deviant":""}`,title:b.authoring.locked?"Unlock region":"Lock region","aria-pressed":b.authoring.locked,onClick:x=>{x.stopPropagation(),e.onToggleRegion(b.id,"locked")},children:s.jsx(zt,{name:b.authoring.locked?"lock":"unlock"})}),s.jsx(tt,{className:`tree-check${b.enabled?"":" deviant"}`,role:"checkbox","aria-checked":b.enabled,title:b.enabled?"Disable region output":"Enable region output",onClick:x=>{x.stopPropagation(),e.onToggleRegion(b.id,"enabled")},children:b.enabled&&s.jsx(zt,{name:"check"})})]}),y&&s.jsx("div",{className:"geometry-layers",children:[...jr(b)].reverse().map(x=>{const T=e.selectedLayerIds.includes(x.id),L=x.id===e.selectedLayerId,U=new Set(x.geometries.map(E=>E.type)),P=new Set(x.geometries.map(ol)).size,j=U.size>1||P>1?"◈":x.geometries[0].type==="rect"?"▭":x.geometries[0].type==="ellipse"?"◯":x.geometries[0].type==="polygon"?"⬠":x.geometries[0].type==="raster_mask"?"▦":"✎",M=t.has(x.id),O={kind:"layer",regionId:b.id,layerId:x.id};return s.jsxs("div",{className:"geometry-tree-item",children:[s.jsxs("div",{className:`geometry-row ${T&&!e.selectedGeometryId?"selected":""} ${L?"primary-selection":""}${_(O)}`,...m(O),onClick:E=>e.onSelectLayer(b.id,x.id,E.shiftKey?"range":E.ctrlKey||E.metaKey?"toggle":"replace"),children:[s.jsx(tt,{className:"tree-drag-handle",draggable:!0,"aria-label":`Move ${x.authoring.name}`,title:"Drag layer; Alt + arrow keys also move",onDragStart:E=>p(O,E),onDragEnd:()=>{a(null),c(null)},onKeyDown:E=>{E.altKey&&E.key==="ArrowUp"&&(E.preventDefault(),e.onMoveLayer(x.id,1)),E.altKey&&E.key==="ArrowDown"&&(E.preventDefault(),e.onMoveLayer(x.id,-1))},onClick:E=>E.stopPropagation(),children:"⠿"}),s.jsx(tt,{className:"layer-expand","aria-expanded":M,title:M?"Collapse operations":"Expand operations",onClick:E=>{E.stopPropagation(),u(x.id)},children:s.jsx(zt,{name:M?"chevron-down":"chevron-right"})}),s.jsxs("span",{title:`${x.geometries.length} operations · ${P} mask group${P===1?"":"s"}`,children:[j,x.geometries.some(E=>E.operation==="subtract")?"−":""]}),s.jsx(bh,{value:x.authoring.name,onCommit:E=>e.onRenameLayer(x.id,E)}),s.jsx(tt,{className:`tree-icon-button${x.authoring.visible?"":" deviant"}`,title:x.authoring.visible?"Hide in editor":"Show in editor","aria-pressed":x.authoring.visible,onClick:E=>{E.stopPropagation(),e.onToggleLayer(x.id,"visible")},children:s.jsx(zt,{name:x.authoring.visible?"eye":"eye-off"})}),s.jsx(tt,{className:`tree-icon-button${x.authoring.locked?" deviant":""}`,title:x.authoring.locked?"Unlock layer":"Lock layer","aria-pressed":x.authoring.locked,onClick:E=>{E.stopPropagation(),e.onToggleLayer(x.id,"locked")},children:s.jsx(zt,{name:x.authoring.locked?"lock":"unlock"})}),s.jsx(tt,{className:`tree-check${x.enabled?"":" deviant"}`,role:"checkbox","aria-checked":x.enabled,title:x.enabled?"Disable mask output":"Enable mask output",onClick:E=>{E.stopPropagation(),e.onToggleLayer(x.id,"enabled")},children:x.enabled&&s.jsx(zt,{name:"check"})}),s.jsxs("details",{className:"layer-overflow",onClick:E=>E.stopPropagation(),children:[s.jsx("summary",{title:"Layer actions","aria-label":"Layer actions",children:s.jsx(zt,{name:"more"})}),s.jsxs("div",{children:[s.jsx(tt,{onClick:E=>{E.currentTarget.closest("details").removeAttribute("open"),e.onDuplicateLayer(x.id)},children:"Duplicate layer"}),s.jsx(tt,{className:"danger",onClick:E=>{E.currentTarget.closest("details").removeAttribute("open"),e.onDeleteLayer(x.id)},children:"Delete layer"})]})]})]}),M&&s.jsx("div",{className:"geometry-operations",children:x.geometries.map((E,B)=>{const C={kind:"geometry",regionId:b.id,layerId:x.id,geometryId:E.id};return s.jsxs("div",{className:`geometry-operation ${e.selectedGeometryId===E.id?"selected":""}${_(C)}`,...m(C),children:[s.jsx(tt,{className:"tree-drag-handle",draggable:!0,"aria-label":`Move ${fr(E,B).name}`,title:"Drag operation",onDragStart:S=>p(C,S),onDragEnd:()=>{a(null),c(null)},children:"⠿"}),s.jsxs(tt,{className:"geometry-operation-select",onClick:()=>e.onSelectGeometry(b.id,x.id,E.id),children:[s.jsx("span",{className:`operation-kind ${E.operation}`,children:E.operation==="add"?"+":"−"}),s.jsx("span",{children:fr(E,B).name}),s.jsx("small",{children:E.type.replace("_"," ")})]}),s.jsx(tt,{className:`tree-icon-button${E.enabled!==!1?"":" deviant"}`,title:E.enabled!==!1?"Disable operation":"Enable operation","aria-pressed":E.enabled!==!1,onClick:()=>e.onToggleGeometry(E.id),children:s.jsx(zt,{name:E.enabled!==!1?"eye":"eye-off"})}),s.jsx(tt,{className:"danger",disabled:!Rd(x.geometries,E.id),title:Rd(x.geometries,E.id)?"Delete operation":"Additive base: remove dependent subtract operations first",onClick:()=>e.onDeleteGeometry(E.id),children:"×"})]},E.id)})})]},x.id)})})]},b.id)})]})}const vh=({name:e})=>e==="select"?s.jsx("svg",{viewBox:"0 0 24 24",children:s.jsx("path",{d:"M5 3l13 9-6 1 4 7-3 1-4-7-4 4z"})}):e.startsWith("rect")?s.jsxs("svg",{viewBox:"0 0 24 24",children:[s.jsx("rect",{x:"4",y:"5",width:"16",height:"14",rx:"1"}),s.jsx("path",{d:e.endsWith("subtract")?"M16 17h6":"M16 17h6M19 14v6"})]}):e.startsWith("ellipse")?s.jsxs("svg",{viewBox:"0 0 24 24",children:[s.jsx("ellipse",{cx:"11",cy:"12",rx:"8",ry:"6"}),s.jsx("path",{d:e.endsWith("subtract")?"M16 18h6":"M16 18h6M19 15v6"})]}):e.startsWith("polygon")?s.jsxs("svg",{viewBox:"0 0 24 24",children:[s.jsx("path",{d:"M4 18L7 5l12 3 1 11z"}),s.jsx("path",{d:e.endsWith("subtract")?"M16 18h6":"M16 18h6M19 15v6"})]}):e==="brush-add"?s.jsxs("svg",{viewBox:"0 0 24 24",children:[s.jsx("path",{d:"M14 4l6 6-9 9H5v-6z"}),s.jsx("path",{d:"M16 17h6M19 14v6"})]}):e==="brush-subtract"?s.jsxs("svg",{viewBox:"0 0 24 24",children:[s.jsx("path",{d:"M14 4l6 6-9 9H5v-6z"}),s.jsx("path",{d:"M16 17h6"})]}):s.jsxs("svg",{viewBox:"0 0 24 24",children:[s.jsx("circle",{cx:"12",cy:"12",r:"3"}),s.jsx("path",{d:"M12 2v3M12 19v3M2 12h3M19 12h3M5 5l2 2M17 17l2 2M19 5l-2 2M7 17l-2 2"})]});function uk({tool:e,brush:t,canSubtract:r,canvas:o,onTool:n,onBrush:i}){const[a,l]=v.useState(!1),c=e.startsWith("brush"),u=[{id:"select",title:"Select and transform"},{id:"rect-add",title:"Add rectangle"},{id:"rect-subtract",title:"Subtract rectangle from selected layer"},{id:"ellipse-add",title:"Add ellipse"},{id:"ellipse-subtract",title:"Subtract ellipse from selected layer"},{id:"polygon-add",title:"Add polygon (click points, Enter or double-click to close)"},{id:"polygon-subtract",title:"Subtract polygon from selected layer"},{id:"brush-add",title:"Add brush stroke"},{id:"brush-subtract",title:"Subtract from selected layer"}];return s.jsxs("div",{className:"artboard-tools",onPointerDown:d=>d.stopPropagation(),onPointerUp:d=>d.stopPropagation(),onWheel:d=>d.stopPropagation(),children:[s.jsx(S1,{orientation:"vertical",density:"compact",label:"Regional drawing tools",items:[...u.map(d=>({id:d.id,label:d.title,icon:s.jsx(vh,{name:d.id}),active:e===d.id,disabled:d.id.endsWith("subtract")&&!r,onSelect:()=>{n(d.id),d.id.startsWith("brush")||l(!1)},group:d.id.split("-")[0]})),...c?[{id:"brush-settings",label:"Brush settings",icon:s.jsx(vh,{name:"settings"}),active:a,onSelect:()=>l(d=>!d),group:"settings"}]:[]]}),c&&a&&s.jsxs("div",{className:"brush-flyout",children:[s.jsxs("header",{children:[s.jsx("strong",{children:"Brush"}),s.jsx(ne,{intent:"ghost",iconOnly:!0,"aria-label":"Close brush settings",onClick:()=>l(!1),children:"×"})]}),s.jsx(Ur,{label:"Brush size",value:t.size,min:.005,max:.25,step:.005,unit:`${Math.round(t.size*Math.min(o.width,o.height))} px`,onValue:d=>i({...t,size:d})}),s.jsx(Ur,{label:"Hardness",value:t.hardness,min:0,max:1,step:.05,unit:"×",onValue:d=>i({...t,hardness:d})}),s.jsx(Ur,{label:"Opacity",value:t.opacity,min:.05,max:1,step:.05,unit:"×",onValue:d=>i({...t,opacity:d})}),s.jsx(at,{label:"Shape",value:t.shape,onValue:d=>i({...t,shape:d}),options:[{value:"round",label:"Round"},{value:"square",label:"Square"}]}),s.jsx(at,{label:"Pressure",value:t.pressureMode,onValue:d=>i({...t,pressureMode:d}),options:[{value:"constant",label:"Constant"},{value:"stylus",label:"Stylus"}]})]})]})}const dk=({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(Hr,{label:"Control name",value:e.name,onValue:a=>o({...e,name:a})}),s.jsxs("span",{children:[e.assignments.length," groups"]}),s.jsx(ne,{intent:"danger",onClick:()=>o(null),children:"Delete"})]}),s.jsx("div",{className:"bv-assignments",children:e.assignments.map((a,l)=>{const c=r.find(f=>f.groupId===a.groupId),u=c?.entries.filter(f=>f.action===c.winnerAction).map(f=>f.controlName).join(", "),d=c?a.action===c.winnerAction?`Overrides ${[...new Set(c.entries.filter(f=>f.action!==c.winnerAction).map(f=>n(f.action)))].join(", ")}`:`Overridden by ${n(c.winnerAction)} from ${u}`:"";return s.jsxs("div",{className:a.unresolved?"unresolved":c?"conflict":"",children:[s.jsxs("span",{children:[a.unresolved?"⚠ ":"",a.groupPath,d&&s.jsxs("small",{children:["⚠ ",d]})]}),s.jsx(at,{label:"Action",value:a.action,options:[{value:"activate",label:"Activate"},{value:"mute",label:"Mute"},{value:"bypass",label:"Bypass"}],onValue:f=>o({...e,assignments:e.assignments.map((p,g)=>g===l?{...p,action:f}:p)})}),s.jsx(ne,{intent:"ghost",iconOnly:!0,"aria-label":"Remove assignment",onClick:()=>o({...e,assignments:e.assignments.filter((f,p)=>p!==l)}),children:"×"})]},a.groupId)})}),s.jsx(at,{label:"Add group",value:"",onValue:i,options:[{value:"",label:"Choose group…"},...t.map(a=>({value:a.id,label:a.pathLabel}))]})]})},fk=100;function vc(e,t=r=>structuredClone(r)){const[r,o]=v.useState(()=>t(e)),[n,i]=v.useState([]),[a,l]=v.useState([]),c=v.useRef(r);c.current=r;const u=v.useCallback(m=>{o(_=>{const k=typeof m=="function"?m(t(_)):m;return i(b=>[...b.slice(-99),t(_)]),l([]),t(k)})},[t]),d=v.useCallback((m,_=!1)=>{o(t(m)),_&&(i([]),l([]))},[t]),f=v.useCallback(()=>{i(m=>{if(!m.length)return m;const _=m[m.length-1];return l(k=>[t(c.current),...k].slice(0,fk)),o(t(_)),m.slice(0,-1)})},[t]),p=v.useCallback(()=>{l(m=>{if(!m.length)return m;const _=m[0];return i(k=>[...k.slice(-99),t(c.current)]),o(t(_)),m.slice(1)})},[t]),g=v.useCallback(()=>{i([]),l([])},[]);return{value:r,commit:u,replace:d,undo:f,redo:p,clear:g,canUndo:n.length>0,canRedo:a.length>0}}const pk=e=>e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLElement&&e.isContentEditable;function mc(e,t=!0){v.useEffect(()=>{if(!t)return;const r=a=>{if(pk(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 gk(){return globalThis.crypto?.randomUUID?.()??`bv-control-${Date.now()}-${Math.random().toString(16).slice(2)}`}const hk=()=>{const e=v.useMemo(()=>{const d=xn(),f=new Set(Os(ct()).map(p=>p.id));return{...d,controls:d.controls.map(p=>({...p,assignments:p.assignments.map(g=>({...g,unresolved:!f.has(g.groupId)}))}))}},[]),t=vc(e),r=t.value,o=d=>t.commit(d);mc(t),v.useEffect(()=>{const d=f=>{const p=f.detail,g=new Map(p.controls.map(_=>[_.id,_.enabled])),m={...r,controls:r.controls.map(_=>g.has(_.id)?{..._,enabled:g.get(_.id)}:_)};JSON.stringify(m)!==JSON.stringify(r)&&t.replace(m)};return window.addEventListener(fi,d),()=>window.removeEventListener(fi,d)},[r,t.replace]);const n=v.useMemo(()=>Os(ct()),[r]),i=v.useMemo(()=>Cm(r),[r]),a=v.useRef(!1);v.useEffect(()=>{if(!a.current){a.current=!0;return}const d=window.setTimeout(()=>{const f=r.controls.map(g=>g.name.trim());if(f.some(g=>!g)||new Set(f).size!==f.length)return;const p=new Set(n.map(g=>g.id));ep({...r,controls:r.controls.map(g=>({...g,name:g.name.trim(),assignments:g.assignments.map(m=>({...m,unresolved:!p.has(m.groupId)}))}))})},250);return()=>window.clearTimeout(d)},[r,n]);const l=(d,f)=>{o({...r,controls:f?r.controls.map((p,g)=>g===d?f:p):r.controls.filter((p,g)=>g!==d)})},c=()=>{let d="New Control",f=2;for(;r.controls.some(p=>p.name===d);)d=`New Control ${f++}`;o({...r,controls:[...r.controls,{id:gk(),name:d,enabled:!0,assignments:[]}]})},u=r.controls.map((d,f)=>({id:d.id,title:d.name||"Unnamed control",description:`${d.assignments.length} assignment${d.assignments.length===1?"":"s"}`,content:s.jsx(dk,{control:d,groups:n,conflicts:i,onChange:p=>l(f,p)})}));return s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(no,{label:"Force active after releasing restrictions",checked:r.forceActive,onValue:d=>o({...r,forceActive:d})}),s.jsx("div",{className:"bv-controls",children:s.jsx(tl,{items:u,onReorder:d=>o({...r,controls:d.map(f=>r.controls.find(p=>p.id===f.id)).filter(Boolean)}),onRemove:d=>o({...r,controls:r.controls.filter(f=>f.id!==d)})})}),s.jsxs("footer",{className:"bv-ui-inline-footer",children:[s.jsx(Om,{tone:"success",dot:!0,children:"Autosaved"}),s.jsx(ne,{intent:"ghost",disabled:!t.canUndo,onClick:t.undo,children:"Undo"}),s.jsx(ne,{intent:"ghost",disabled:!t.canRedo,onClick:t.redo,children:"Redo"}),s.jsx(ne,{onClick:c,children:"Add Control"})]})]})},an=new Map,As=new Map;function sp(e,t={}){const r=t.key?an.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=Ei(o);let i=!1,a=0,l=e;const c=()=>{i||(i=!0,t.key&&an.get(t.key)?.close===c&&an.delete(t.key),n.unmount(),o.remove())},u=g=>{g&&(l=g),a+=1,document.body.append(o),o.querySelector(".bv-managed-window")?.dispatchEvent(new Event("bv-ui-activate")),n.render(l(c,a))},d=()=>o.querySelector(".bv-managed-window")?.dispatchEvent(new Event("bv-ui-minimize")),f=()=>{const g=o.querySelector(".bv-managed-window"),m=g?.getBoundingClientRect();return{mode:g?.classList.contains("workspace")?"workspace":"floating",geometry:m?{x:m.left,y:m.top,width:m.width,height:m.height}:void 0}},p=g=>o.querySelector(".bv-managed-window")?.dispatchEvent(new CustomEvent("bv-ui-set-window-state",{detail:g}));if(t.key){const g={activate:u,minimize:d,state:f,setState:p,close:c};an.set(t.key,g);const m=As.get(t.key);m&&(As.delete(t.key),requestAnimationFrame(()=>g.setState(m)))}return n.render(l(c,a)),c}function cp(e,t,r,o){if(e===t)return an.get(e)?.activate();const n=an.get(e),i=n?.state(),a=an.get(t);i&&As.set(t,i),a?a.activate():r(),i&&a&&(As.delete(t),requestAnimationFrame(()=>a.setState(i))),o?n?.close():n?.minimize()}const Xm="BV.NodePack.UI.Size",Gm="BV.NodePack.UI.ReducedEffects",up="BV.NodePack.UI.WindowSwitchMode";let qi="keep",qm;const Sd=new Set,bk=e=>e==="replace"?"replace":"keep",gi=()=>qi,vk=e=>{qm=e},mk=e=>(Sd.add(e),()=>Sd.delete(e));function dp(e,t=!0){return qi=bk(e),t&&qm?.(qi),Sd.forEach(r=>r(qi)),qi}const yk=["bv-ui-size-compact","bv-ui-size-default","bv-ui-size-large"];function xk(e){return e==="compact"||e==="large"?e:"default"}function Km(e,t=document.documentElement){const r=xk(e);return t.classList.remove(...yk),t.classList.add(`bv-ui-size-${r}`),r}function Jm(e,t=document.documentElement){return t.classList.toggle("bv-ui-reduced-effects",!!e),!!e}function _k(e){Km(e?.getSettingValue?.(Xm,"default")),Jm(e?.getSettingValue?.(Gm,!1)),dp(e?.getSettingValue?.(up,"keep"),!1)}function wk(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 kk(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 Ek(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 dn=[];let mh=!1;const Tk=e=>e.isConnected&&!e.hidden&&e.offsetParent!==null;function Rk(e){const t=dn.filter(Tk);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 Sk(){mh||(mh=!0,window.addEventListener("keydown",e=>{e.key!=="Tab"||!e.ctrlKey||e.altKey||e.metaKey||(e.preventDefault(),e.stopImmediatePropagation(),Rk(e.shiftKey))},!0))}function Lk(e){return Sk(),dn.push(e),()=>{const t=dn.indexOf(e);t>=0&&dn.splice(t,1)}}function yh(e){const t=dn.indexOf(e);t>=0&&dn.splice(t,1),dn.push(e)}const Zm="bvWindowMenuVisible",hi="bv-window-menu-visibility-changed",Ck=e=>!["BV Smart Pipe","BV Smart Pipe Merge"].includes(e);function Rn(e){const t=e?.properties?.[Zm];return typeof t=="boolean"?t:Ck(String(e?.type??e?.comfyClass??""))}function Sn(e,t){e&&(e.properties??(e.properties={}),e.properties[Zm]=!!t,e.graph?.setDirtyCanvas?.(!0,!0),window.dispatchEvent(new CustomEvent(hi,{detail:{node:e,visible:!!t}})))}function Nk(e){return window.addEventListener(hi,e),()=>window.removeEventListener(hi,e)}let Ld=0;window.addEventListener(hi,()=>Ld++);function Si(e){return v.useSyncExternalStore(Nk,()=>Ld,()=>Ld),Rn(e)}const xh=new WeakMap;let Ok=1;const Mk=(e,t)=>{const r=e?.id??e?._id??e?.extra?.uuid;if(r!=null&&String(r))return String(r);if(!e||typeof e!="object")return t;let o=xh.get(e);return o||(o=`${t}@${Ok++}`,xh.set(e,o)),o};function nl(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=Mk(n,i.length?i[i.length-1]:"root");for(const d of n._nodes??n.nodes??[]){const f=String(d.id),p=[...i,u];t(d)&&r.push({node:d,graph:n,path:p,key:`${p.join("/")}:${f}`,breadcrumb:a.join(" › ")});const g=d.subgraph??(()=>{try{return d.getSubgraph?.()}catch{return null}})();g&&o(g,[...p,f],[...a,String(d.title||d.type||`#${f}`)],c)}};return o(e,[],[]),r}function Ia(e,t){return nl(e,r=>r===t)[0]?.key??String(t?.id??"")}const Ds="bv-toggle-toolbar-window-launcher";let ca=null;const Ak=e=>ca?ca(e):window.dispatchEvent(new CustomEvent(Ds,{detail:{anchor:e}}));function Dk({getColumns:e}){const[t,r]=v.useState({left:0,top:0}),[o,n]=v.useState(!1),[i,a]=v.useState(!1),[,l]=v.useState(0),c=v.useRef(null),u=v.useRef(null),d=v.useRef(),f=v.useRef(),p=v.useRef(0),g=()=>{d.current&&window.clearTimeout(d.current),f.current&&window.clearTimeout(f.current)},m=(w,x)=>{const T=w.getBoundingClientRect(),L=Math.min(Math.max(1,x)*220,window.innerWidth-24),U=Math.min(420,window.innerHeight-84),P=Math.max(12,Math.min(T.left,window.innerWidth-L-12)),j=T.bottom+6+U<=window.innerHeight-12?T.bottom+6:Math.max(12,T.top-U-6);return{left:P,top:j}},_=v.useCallback((w,x)=>{g(),d.current=window.setTimeout(()=>{if(document.body.classList.contains("bv-toolbar-no-editor")&&document.body.classList.contains("bv-toolbar-no-quick"))return;const T=[...document.querySelectorAll(".bv-regional-action")].filter(U=>U.offsetParent!==null),L=x?.offsetParent?x:T[0];L&&(u.current=L,a(!1),r(m(L,e(!1).filter(U=>U.items.length).length)),n(!0))},w)},[e]),k=v.useCallback(()=>_(180),[_]),b=v.useCallback(()=>{d.current&&window.clearTimeout(d.current);const w=Math.max(280,p.current-Date.now());f.current=window.setTimeout(()=>{c.current?.matches(":hover")||(n(!1),a(!1))},w)},[]);v.useEffect(()=>{const w=new Map,x=()=>{for(const L of document.querySelectorAll(".bv-regional-action")){if(w.has(L))continue;const U=()=>k(),P=()=>b();L.addEventListener("pointerenter",U),L.addEventListener("pointerleave",P);const j=()=>{L.removeEventListener("pointerenter",U),L.removeEventListener("pointerleave",P)};w.set(L,j)}};x();const T=new MutationObserver(x);return T.observe(document.body,{childList:!0,subtree:!0}),()=>{T.disconnect(),w.forEach(L=>L()),g()}},[b,k]),v.useEffect(()=>{if(!o)return;const w=c.current;if(!w)return;const x=new MutationObserver(()=>{w.isConnected||(x.disconnect(),br.flushSync(()=>{n(!1),a(!1)}),window.setTimeout(()=>_(0,u.current??void 0),80))});return x.observe(document.body,{childList:!0,subtree:!0}),()=>x.disconnect()},[o,_]),v.useEffect(()=>{if(!o)return;const w=x=>{x.key==="Escape"&&(n(!1),a(!1))};return window.addEventListener("keydown",w),()=>window.removeEventListener("keydown",w)},[o]),v.useEffect(()=>{const w=T=>{if(o&&c.current?.isConnected){n(!1),a(!1);return}o&&br.flushSync(()=>{n(!1),a(!1)}),_(0,T)},x=T=>w(T.detail?.anchor);return ca=w,window.addEventListener(Ds,x),()=>{ca===w&&(ca=null),window.removeEventListener(Ds,x)}},[o,_]),v.useEffect(()=>{const w=()=>l(x=>x+1);return window.addEventListener(hi,w),()=>window.removeEventListener(hi,w)},[]);const h=w=>{g(),p.current=Date.now()+700;const x=c.current?.getBoundingClientRect();a(w),requestAnimationFrame(()=>requestAnimationFrame(()=>{const T=c.current?.getBoundingClientRect();!x||!T||r(L=>({...L,top:Math.max(12,Math.min(window.innerHeight-T.height-12,L.top+x.bottom-T.bottom))}))}))};if(!o)return null;const y=e(i).filter(w=>w.items.length);return br.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,y.length)},role:"dialog","aria-label":"BV window launcher",onPointerEnter:g,onPointerLeave:b,children:[s.jsx("div",{className:"bv-toolbar-window-launcher__body",children:y.length?y.map(w=>s.jsxs("section",{children:[s.jsx("h3",{children:w.label}),s.jsx("div",{children:w.items.map(x=>s.jsxs("div",{className:`bv-toolbar-launcher-row ${x.hidden?"is-hidden":""}`,children:[s.jsxs(ne,{intent:"ghost",disabled:x.disabled,onClick:()=>{n(!1),a(!1),x.onSelect()},children:[s.jsx("span",{children:x.label}),x.meta&&s.jsx("small",{children:x.meta})]}),x.secondary&&s.jsx("button",{type:"button",className:"bv-toolbar-launcher-secondary",title:x.secondary.label,"aria-label":x.secondary.label,onClick:()=>{n(!1),a(!1),x.secondary?.onSelect()},children:"✎"}),x.hidden&&x.onReveal&&s.jsx("button",{type:"button",className:"bv-toolbar-launcher-reveal",title:"Show in BV window menus","aria-label":`Show ${x.label} in BV window menus`,onClick:x.onReveal,children:"◉"})]},x.id))})]},w.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(bc,{label:"Show hidden nodes",value:i,trueLabel:"Shown",falseLabel:"Hidden",onValue:h})})]}),document.body)}var Li=class{constructor(){D(this,"attributes");D(this,"nameToAttribute");this.attributes=[],this.nameToAttribute=new Map}addWithAll(e,t,r,o){const n=new re(e,t,r,o);return this.attributes.push(n),this.nameToAttribute.set(e,n),n}addInherited(e,t){return this.addWithAll(e,t,void 0,!1)}add(e,t,r){return this.addWithAll(e,void 0,t,r)}getAttributes(){return this.attributes}getModelName(e){const t=this.nameToAttribute.get(e);if(t!==void 0)return t.modelName}toJson(e,t){for(const r of this.attributes){const o=t[r.name];(r.alwaysWriteJson||o!==r.defaultValue)&&(e[r.name]=o)}}fromJson(e,t){for(const r of this.attributes){let o=e[r.name];o===void 0&&r.alias&&(o=e[r.alias]),o===void 0?t[r.name]=r.defaultValue:t[r.name]=o}}update(e,t){for(const r of this.attributes)if(Object.prototype.hasOwnProperty.call(e,r.name)){const o=e[r.name];o===void 0?delete t[r.name]:t[r.name]=o}}setDefaults(e){for(const t of this.attributes)e[t.name]=t.defaultValue}pairAttributes(e,t){for(const r of t.attributes)if(r.modelName&&this.nameToAttribute.has(r.modelName)){const o=this.nameToAttribute.get(r.modelName);o.setpairedAttr(r),r.setpairedAttr(o),o.setPairedType(e)}}toTypescriptInterface(e,t){const r=[],o=this.attributes.sort((n,i)=>n.name.localeCompare(i.name));r.push("export interface I"+e+"Attributes {");for(let n=0;n"u")return null;if(document.currentScript&&document.currentScript.tagName==="SCRIPT")return document.currentScript;try{throw new Error}catch(y){var h=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(y.stack)||[])[1];if(h){var x=document.getElementsByTagName("script");for(var w in x)if(x[w].src==h)return x[w]}return null}},isActive:function(h,x,w){for(var y="no-"+x;h;){var T=h.classList;if(T.contains(x))return!0;if(T.contains(y))return!1;h=h.parentElement}return!!w}},languages:{plain:a,plaintext:a,text:a,txt:a,extend:function(h,x){var w=l.util.clone(l.languages[h]);for(var y in x)w[y]=x[y];return w},insertBefore:function(h,x,w,y){y=y||l.languages;var T=y[h],L={};for(var U in T)if(T.hasOwnProperty(U)){if(U==x)for(var P in w)w.hasOwnProperty(P)&&(L[P]=w[P]);w.hasOwnProperty(U)||(L[U]=T[U])}var j=y[h];return y[h]=L,l.languages.DFS(l.languages,function(M,O){O===j&&M!=h&&(this[M]=L)}),L},DFS:function h(x,w,y,T){T=T||{};var L=l.util.objId;for(var U in x)if(x.hasOwnProperty(U)){w.call(x,U,x[U],y||U);var P=x[U],j=l.util.type(P);j==="Object"&&!T[L(P)]?(T[L(P)]=!0,h(P,w,null,T)):j==="Array"&&!T[L(P)]&&(T[L(P)]=!0,h(P,w,U,T))}}},plugins:{},highlightAll:function(h,x){l.highlightAllUnder(document,h,x)},highlightAllUnder:function(h,x,w){var y={callback:w,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,x===!0,y.callback)},highlightElement:function(h,x,w){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 U=h.textContent,P={element:h,language:y,grammar:T,code:U};function j(O){P.highlightedCode=O,l.hooks.run("before-insert",P),P.element.innerHTML=P.highlightedCode,l.hooks.run("after-highlight",P),l.hooks.run("complete",P),w&&w.call(P.element)}if(l.hooks.run("before-sanity-check",P),L=P.element.parentElement,L&&L.nodeName.toLowerCase()==="pre"&&!L.hasAttribute("tabindex")&&L.setAttribute("tabindex","0"),!P.code){l.hooks.run("complete",P),w&&w.call(P.element);return}if(l.hooks.run("before-highlight",P),!P.grammar){j(l.util.encode(P.code));return}if(x&&o.Worker){var M=new Worker(l.filename);M.onmessage=function(O){j(O.data)},M.postMessage(JSON.stringify({language:P.language,code:P.code,immediateClose:!0}))}else j(l.highlight(P.code,P.grammar,P.language))},highlight:function(h,x,w){var y={code:h,grammar:x,language:w};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,x){var w=x.rest;if(w){for(var y in w)x[y]=w[y];delete x.rest}var T=new f;return p(T,T.head,h),d(h,T,x,T.head,0),m(T)},hooks:{all:{},add:function(h,x){var w=l.hooks.all;w[h]=w[h]||[],w[h].push(x)},run:function(h,x){var w=l.hooks.all[h];if(!(!w||!w.length))for(var y=0,T;T=w[y++];)T(x)}},Token:c};o.Prism=l;function c(h,x,w,y){this.type=h,this.content=x,this.alias=w,this.length=(y||"").length|0}c.stringify=function h(x,w){if(typeof x=="string")return x;if(Array.isArray(x)){var y="";return x.forEach(function(j){y+=h(j,w)}),y}var T={type:x.type,content:h(x.content,w),tag:"span",classes:["token",x.type],attributes:{},language:w},L=x.alias;L&&(Array.isArray(L)?Array.prototype.push.apply(T.classes,L):T.classes.push(L)),l.hooks.run("wrap",T);var U="";for(var P in T.attributes)U+=" "+P+'="'+(T.attributes[P]||"").replace(/"/g,""")+'"';return"<"+T.tag+' class="'+T.classes.join(" ")+'"'+U+">"+T.content+""};function u(h,x,w,y){h.lastIndex=x;var T=h.exec(w);if(T&&y&&T[1]){var L=T[1].length;T.index+=L,T[0]=T[0].slice(L)}return T}function d(h,x,w,y,T,L){for(var U in w)if(!(!w.hasOwnProperty(U)||!w[U])){var P=w[U];P=Array.isArray(P)?P:[P];for(var j=0;j=L.reach);F+=A.value.length,A=A.next){var z=A.value;if(x.length>h.length)return;if(!(z instanceof c)){var Z=1,Y;if(B){if(Y=u(N,F,h,E),!Y||Y.index>=h.length)break;var ee=Y.index,q=Y.index+Y[0].length,Q=F;for(Q+=A.value.length;ee>=Q;)A=A.next,Q+=A.value.length;if(Q-=A.value.length,F=Q,A.value instanceof c)continue;for(var H=A;H!==x.tail&&(QL.reach&&(L.reach=Ee);var ve=A.prev;le&&(ve=p(x,ve,le),F+=le.length),g(x,ve,Z);var Bt=new c(U,O?l.tokenize(ne,O):ne,C,ne);if(A=p(x,ve,Bt),Ne&&p(x,A,Ne),Z>1){var X={cause:U+","+j,reach:Ee};d(h,x,w,A.prev,F,X),L&&X.reach>L.reach&&(L.reach=X.reach)}}}}}}function f(){var h={value:null,prev:null,next:null},x={value:null,prev:h,next:null};h.next=x,this.head=h,this.tail=x,this.length=0}function p(h,x,w){var y=x.next,T={value:w,prev:x,next:y};return x.next=T,y.prev=T,h.length++,T}function g(h,x,w){for(var y=x.next,T=0;T/,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(_,k){return"✖ Error "+_+" while fetching file: "+k},i="✖ Error: File does not exist or is empty",a={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},l="data-src-status",c="loading",u="loaded",d="failed",f="pre[data-src]:not(["+l+'="'+u+'"]):not(['+l+'="'+c+'"])';function p(_,k,b){var h=new XMLHttpRequest;h.open("GET",_,!0),h.onreadystatechange=function(){h.readyState==4&&(h.status<400&&h.responseText?k(h.responseText):h.status>=400?b(n(h.status,h.statusText)):b(i))},h.send(null)}function g(_){var k=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(_||"");if(k){var b=Number(k[1]),h=k[2],x=k[3];return h?x?[b,Number(x)]:[b,void 0]:[b,b]}}r.hooks.add("before-highlightall",function(_){_.selector+=", "+f}),r.hooks.add("before-sanity-check",function(_){var k=_.element;if(k.matches(f)){_.code="",k.setAttribute(l,c);var b=k.appendChild(document.createElement("CODE"));b.textContent=o;var h=k.getAttribute("data-src"),x=_.language;if(x==="none"){var w=(/\.(\w+)$/.exec(h)||[,"none"])[1];x=a[w]||w}r.util.setLanguage(b,x),r.util.setLanguage(k,x);var y=r.plugins.autoloader;y&&y.loadLanguages(x),p(h,function(T){k.setAttribute(l,u);var L=g(k.getAttribute("data-range"));if(L){var U=T.split(/\r\n?|\n/g),P=L[0],j=L[1]==null?U.length:L[1];P<0&&(P+=U.length),P=Math.max(0,Math.min(P-1,U.length)),j<0&&(j+=U.length),j=Math.max(0,Math.min(j,U.length)),T=U.slice(P,j).join(` +`),k.hasAttribute("data-start")||k.setAttribute("data-start",String(P+1))}b.textContent=T,r.highlightElement(b)},function(T){k.setAttribute(l,d),b.textContent=T})}}),r.plugins.fileHighlight={highlight:function(k){for(var b=(k||document).querySelectorAll(f),h=0,x;x=b[h++];)r.highlightElement(x)}};var m=!1;r.fileHighlight=function(){m||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),m=!0),r.plugins.fileHighlight.highlight.apply(this,arguments)}}()})(Y1);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 Yn({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 Nr({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 Hr({label:e,help:t,error:r,icon:o,suffix:n,onValue:i,className:a="",...l}){const c=(u=!1)=>s.jsxs("span",{className:"bv-input-shell",children:[o&&s.jsx("span",{className:"bv-field-icon","aria-hidden":"true",children:o}),s.jsx("input",{...l,id:u&&l.id?`${l.id}-expanded`:l.id,"aria-label":u?e:l["aria-label"],"aria-invalid":!!r,onChange:d=>i?.(d.target.value)}),n&&s.jsx("span",{className:"bv-field-suffix",children:n})]});return s.jsx(Nr,{label:e,help:t,error:r,className:a,children:s.jsx(fc,{label:e,summary:String(l.value??l.defaultValue??l.placeholder??"Edit value"),icon:o,popover:c(!0),children:c()})})}function X1({label:e,help:t,error:r,icon:o,resize:n="vertical",onValue:i,className:a="",...l}){const c=(d=!1)=>s.jsxs("span",{className:`bv-textarea-shell resize-${n}`,children:[o&&s.jsx("span",{className:"bv-field-icon","aria-hidden":"true",children:o}),s.jsx("textarea",{...l,id:d&&l.id?`${l.id}-expanded`:l.id,"aria-label":d?e:l["aria-label"],"aria-invalid":!!r,onChange:f=>i?.(f.target.value)})]}),u=String(l.value??l.defaultValue??l.placeholder??"Edit text");return s.jsx(Nr,{label:e,help:t,error:r,className:`bv-textarea-field ${a}`,children:s.jsx(fc,{label:e,summary:u,icon:o,popover:c(!0),children:c()})})}const G1=v.forwardRef(function(t,r){return s.jsx("textarea",{...t,ref:r})});function Ur({label:e,value:t,min:r,max:o,step:n,unit:i,icon:a,help:l,slider:c=!0,onValue:u,className:d=""}){const f=v.useId(),[p,g]=v.useState(String(t));v.useEffect(()=>g(String(t)),[t]);const m=T=>Math.max(r,Math.min(o,T)),_=()=>{const T=Number(p);Number.isFinite(T)?u(m(T)):g(String(t))},k=`${Math.max(0,Math.min(100,(t-r)/Math.max(Number.EPSILON,o-r)*100))}%`,b=T=>s.jsxs("div",{className:"bv-number-box",children:[a&&s.jsx("span",{className:"bv-field-icon","aria-hidden":"true",children:a}),s.jsx("input",{id:T,value:p,inputMode:Number.isInteger(n)?"numeric":"decimal",onChange:L=>g(L.target.value),onBlur:_,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":k},children:[s.jsxs("output",{children:[t,i??""]}),s.jsx("input",{className:"bv-number-track",type:"range",min:r,max:o,step:n,value:t,style:{"--range-fill":k},"aria-labelledby":`${f}-label`,onChange:T=>u(m(+T.target.value))})]}),x=s.jsxs("div",{className:"bv-number-ticks",children:[s.jsx("span",{children:r}),s.jsx("span",{children:o})]}),w=s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"bv-number-value-row",children:[c&&h,b(f)]}),c&&x]}),y=s.jsxs("div",{className:"bv-number-popup",children:[c&&h,b(`${f}-expanded`),c&&x]});return s.jsxs("div",{className:`bv-number-field ${c?"has-slider":"direct-only"} ${d}`.trim(),children:[s.jsx("label",{id:`${f}-label`,htmlFor:f,children:e}),s.jsx(fc,{label:e,summary:`${t}${i??""}`,icon:a,popover:y,children:w}),l&&s.jsx("small",{className:"bv-control-help bv-control-help-overlay",children:l})]})}function Vm({label:e,value:t,options:r,onValue:o,disabled:n,className:i=""}){const[a,l]=v.useState(!1),c=v.useRef(null),u=r.find(d=>d.value===t);return s.jsxs("div",{ref:c,className:`bv-select-popover ${i}`.trim(),children:[s.jsxs("button",{type:"button",className:"bv-select-trigger",disabled:n,"aria-label":e,"aria-haspopup":"listbox","aria-expanded":a,onClick:()=>l(d=>!d),children:[s.jsx("span",{children:u?.label??"Select…"}),s.jsx("span",{className:"bv-chevron","aria-hidden":"true"})]}),s.jsx($o,{open:a,anchor:c,onClose:()=>l(!1),className:"bv-select-menu",matchWidth:!0,children:s.jsx("div",{role:"listbox","aria-label":e,children:r.map(d=>s.jsxs("button",{type:"button",role:"option","aria-selected":d.value===t,disabled:d.disabled,onClick:f=>{o(d.value,{shiftKey:f.shiftKey}),l(!1)},children:[d.icon,s.jsx("span",{children:d.label})]},d.value))})})]})}function at({label:e,value:t,options:r,onValue:o,help:n,disabled:i}){return s.jsx(Nr,{label:e,help:n,children:s.jsx(Vm,{label:e,value:t,options:r,onValue:o,disabled:i})})}function q1({label:e,value:t,options:r,onValue:o,disabled:n,className:i=""}){return s.jsx(Vm,{label:e,value:t,options:r,onValue:o,disabled:n,className:`bv-density-compact ${i}`})}function un({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 Ei({label:e,value:t,onValue:r,trueLabel:o="True",falseLabel:n="False",help:i,className:a=""}){return s.jsx(Nr,{label:e,help:i,className:a,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 K1({label:e,value:t,options:r,onValue:o,minSelected:n=0,help:i}){const[a,l]=v.useState(!1),c=v.useRef(null),u=d=>{const f=t.includes(d);f&&t.length<=n||o(f?t.filter(p=>p!==d):[...t,d])};return s.jsx(Nr,{label:e,help:i,children:s.jsxs("div",{ref:c,className:"bv-tag-select",children:[s.jsxs("button",{type:"button",className:"bv-tag-select-trigger","aria-haspopup":"listbox","aria-expanded":a,onClick:()=>l(d=>!d),children:[s.jsx("span",{className:"bv-tag-values",children:t.map(d=>s.jsx("span",{className:"bv-tag",children:r.find(f=>f.value===d)?.label??d},d))}),s.jsx("span",{className:"bv-chevron","aria-hidden":"true"})]}),s.jsx($o,{open:a,anchor:c,onClose:()=>l(!1),className:"bv-select-menu bv-tag-select-menu",matchWidth:!0,children:s.jsx("div",{role:"listbox","aria-label":e,"aria-multiselectable":"true",children:r.map(d=>{const f=t.includes(d.value),p=f&&t.length<=n;return s.jsxs("button",{type:"button",role:"option","aria-selected":f,disabled:d.disabled||p,onClick:()=>u(d.value),children:[s.jsx("span",{className:"bv-tag-select-check","aria-hidden":"true",children:f?"✓":""}),s.jsx("span",{children:d.label})]},d.value)})})})]})})}function J1({label:e,value:t,onValue:r,onClear:o}){const[n,i]=v.useState(!1);return s.jsx(Nr,{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 Z1({label:e,value:t,onValue:r,alpha:o=!1,help:n}){const[i,a]=v.useState(!1),l=v.useRef(null),c=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i.test(t),u=o?I1:O1,d=s.jsx("input",{value:t,"aria-label":`${e} hexadecimal value`,spellCheck:!1,onChange:p=>r(p.target.value)}),f=s.jsxs("div",{className:"bv-color-expanded",children:[d,s.jsx(u,{color:c?t:o?"#8D70FFFF":"#8D70FF",onChange:r})]});return s.jsx(Nr,{label:e,help:n,error:c?void 0:"Enter a valid hexadecimal color.",children:s.jsx(fc,{label:e,summary:t,icon:s.jsx("span",{className:"bv-color-dot",style:{background:c?t:"#000"}}),popover:f,children:s.jsxs("div",{ref:l,className:"bv-color-field",children:[s.jsx("button",{type:"button",className:"bv-color-swatch",style:{background:c?t:"#000"},onClick:()=>a(!i),"aria-label":`${e}: ${t}`,"aria-haspopup":"dialog","aria-expanded":i}),d,s.jsx($o,{open:i,anchor:l,onClose:()=>a(!1),className:"bv-color-popover",children:f})]})})})}function Os({items:e,value:t,onValue:r,exclusive:o=!1}){const n=i=>r(t.includes(i)?t.filter(a=>a!==i):o?[i]:[...t,i]);return s.jsx("div",{className:"bv-accordion",children:e.map(i=>s.jsxs("section",{className:i.disabled?"disabled":"",children:[s.jsxs("button",{type:"button","aria-expanded":t.includes(i.id),disabled:i.disabled,onClick:()=>n(i.id),children:[s.jsx("span",{children:i.title}),s.jsx("span",{className:"bv-chevron"})]}),t.includes(i.id)&&s.jsx("div",{children:i.content})]},i.id))})}const Wm=(e,t)=>JSON.stringify([e,t]);function Q1(e){const t=new Map,r=new Map;for(const o of e)r.set(o.label,(r.get(o.label)??0)+1);for(const o of e)for(const n of o.resources)t.set(n.label,(t.get(n.label)??0)+1);return e.flatMap(o=>o.resources.map(n=>{const i=(r.get(o.label)??0)>1&&o.nodeId?`${o.label} · #${o.nodeId}`:o.label;return{value:Wm(o.id,n.id),collectorId:o.id,resourceId:n.id,label:(t.get(n.label)??0)>1?`${n.label} · ${i}`:n.label}}))}function Ti({collectors:e,collectorId:t,resourceId:r,resolved:o=!0,onSelection:n,label:i="Resource",emptyLabel:a="Select resource"}){const l=e.find(m=>m.id===t),c=l?.resources.find(m=>m.id===r),u=!!(t||r),d=u&&(!o||!l||!c),f=Q1(e),p=u?Wm(t,r):"",g=d&&!f.some(m=>m.value===p)?[{value:p,label:`Unresolved · ${r||t}`},...f]:f;return s.jsx("div",{className:`bv-resource-picker ${d?"is-unresolved":""}`,children:s.jsx(at,{label:i,value:p,options:[{value:"",label:a},...g],onValue:m=>{if(!m){n("","");return}const _=f.find(k=>k.value===m);_&&n(_.collectorId,_.resourceId)}})})}const gh=["#E45756","#4C78A8","#54A24B","#F2CF5B","#B279A2","#FF9DA6"],$m=e=>gh[e%gh.length],Dt=()=>crypto.randomUUID(),hh=()=>({schema:"bv.regional",version:2,document_id:Dt(),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:[]}),ek=e=>({id:Dt(),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:$m(e)}}),qt=e=>structuredClone(e);function tk(e,t){return{...e,document_id:t}}const dr=(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},Ut=e=>e.layer_id??e.id,ol=e=>e.mask_group_id??Ut(e);function Hm(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:dr(n[0],i),enabled:n.some(a=>a.enabled!==!1)}))}function Ir(e){return Hm(e.geometry,Ut)}function rk(e){return Hm(e,ol)}function Fo(e){const t=typeof e=="string"?JSON.parse(e):qt(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=dr(n,i)),n.type==="brush_stroke"&&(n.shape??(n.shape="round"),n.pressure_mode??(n.pressure_mode="constant"))})}return t}function Ym(e){const t=new Map;for(const r of e){const o=ol(r);t.has(o)||t.set(o,r)}return[...t.values()].every(r=>r.operation==="add")}function kd(e,t){return Ym(e.filter(r=>r.id!==t))}function bh({value:e,onCommit:t}){const[r,o]=v.useState(!1),[n,i]=v.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(w1,{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 zt({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"}),merge:s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M5 6h3a4 4 0 0 1 4 4v8"}),s.jsx("path",{d:"M19 6h-3a4 4 0 0 0-4 4"}),s.jsx("path",{d:"m9 15 3 3 3-3"})]}),separate:s.jsxs(s.Fragment,{children:[s.jsx("rect",{x:"3.5",y:"7",width:"6",height:"10",rx:"1.5"}),s.jsx("rect",{x:"14.5",y:"7",width:"6",height:"10",rx:"1.5"}),s.jsx("path",{d:"M12 5v14M9.5 7.5 12 5l2.5 2.5M9.5 16.5 12 19l2.5-2.5"})]}),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 ok(e){const[t,r]=v.useState(()=>new Set),[o,n]=v.useState(()=>new Set(e.selectedRegionId?[e.selectedRegionId]:[])),[i,a]=v.useState(null),[l,c]=v.useState(null),u=b=>r(h=>{const x=new Set(h);return x.has(b)?x.delete(b):x.add(b),x}),d=b=>n(h=>{const x=new Set(h);return x.has(b)?x.delete(b):x.add(b),x});v.useEffect(()=>{e.selectedRegionId&&n(b=>b.has(e.selectedRegionId)?b:new Set([...b,e.selectedRegionId]))},[e.selectedRegionId]);const f=b=>b.kind==="region"?`region:${b.regionId}`:b.kind==="layer"?`layer:${b.regionId}:${b.layerId}`:`geometry:${b.regionId}:${b.layerId}:${b.geometryId}`,p=(b,h)=>{a(b),h.dataTransfer.effectAllowed="move",h.dataTransfer.setData("text/plain",f(b))},g=(b,h)=>{if(!i||i.kind!==b.kind||b.kind==="layer"&&i.kind==="geometry")return"inside";const x=h.currentTarget.getBoundingClientRect();return h.clientY({onDragOver:h=>{i&&(h.preventDefault(),h.dataTransfer.dropEffect="move",c(`${f(b)}:${g(b,h)}`))},onDragLeave:h=>{h.currentTarget.contains(h.relatedTarget)||c(null)},onDrop:h=>{h.preventDefault(),i&&e.onTreeMove({source:i,target:b,position:g(b,h)}),a(null),c(null)}}),_=b=>{const h=l?.split(":")??[];return l?.startsWith(`${f(b)}:`)?` drop-target drop-${h[h.length-1]}`:""},k=e.regions.find(b=>b.id===e.selectedRegionId)??null;return s.jsxs("aside",{className:"layers",children:[s.jsxs("div",{className:"panel-toolbar",children:[s.jsxs(tt,{className:"panel-tool primary",title:"Add region","aria-label":"Add region",onClick:e.onAddRegion,children:[s.jsx(zt,{name:"plus"}),s.jsx("span",{children:"Region"})]}),s.jsxs(tt,{className:"panel-tool",title:"Merge selected layers (Ctrl E)","aria-label":"Merge selected layers",disabled:!e.canMergeLayers,onClick:e.onMergeLayers,children:[s.jsx(zt,{name:"merge"}),s.jsx("span",{children:"Merge"})]}),s.jsxs(tt,{className:"panel-tool",title:"Separate disconnected areas into individual layers","aria-label":"Split disconnected areas",disabled:!e.canSplitDisconnectedAreas,onClick:e.onSplitDisconnectedAreas,children:[s.jsx(zt,{name:"separate"}),s.jsx("span",{children:"Split"})]}),s.jsx("span",{className:"panel-toolbar-spacer"}),s.jsx(tt,{className:"panel-tool danger",title:"Delete selected region","aria-label":"Delete selected region",disabled:!k,onClick:()=>k&&e.onDeleteRegion(k.id),children:s.jsx(zt,{name:"trash"})})]}),e.regions.map(b=>{const h=b.id===e.selectedRegionId,x=o.has(b.id),w={kind:"region",regionId:b.id};return s.jsxs("section",{className:`region-group ${h?"selected":""}`,"aria-expanded":x,children:[s.jsxs("div",{className:`region-row${_(w)}`,...m(w),onClick:()=>e.onSelectRegion(b.id),children:[s.jsx(tt,{className:"tree-drag-handle",draggable:!0,"aria-label":`Move ${b.name}`,title:"Drag to reorder; Alt + arrow keys also move",onDragStart:y=>p(w,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(tt,{className:"region-expand","aria-expanded":x,title:x?"Collapse region":"Expand region",onClick:y=>{y.stopPropagation(),d(b.id)},children:s.jsx(zt,{name:x?"chevron-down":"chevron-right"})}),s.jsx("i",{style:{background:b.authoring.color}}),s.jsx(bh,{value:b.name,onCommit:y=>e.onRenameRegion(b.id,y)}),s.jsx("span",{className:"region-usage",title:"Region usage",children:b.usage==="generation"?"GEN":b.usage==="detailer"?"DET":"BOTH"}),s.jsxs("span",{className:"priority",title:"Priority",children:["P",b.priority]}),s.jsx(tt,{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(zt,{name:b.authoring.visible?"eye":"eye-off"})}),s.jsx(tt,{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(zt,{name:b.authoring.locked?"lock":"unlock"})}),s.jsx(tt,{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(zt,{name:"check"})})]}),x&&s.jsx("div",{className:"geometry-layers",children:[...Ir(b)].reverse().map(y=>{const T=e.selectedLayerIds.includes(y.id),L=y.id===e.selectedLayerId,U=new Set(y.geometries.map(E=>E.type)),P=new Set(y.geometries.map(ol)).size,j=U.size>1||P>1?"◈":y.geometries[0].type==="rect"?"▭":y.geometries[0].type==="ellipse"?"◯":y.geometries[0].type==="polygon"?"⬠":y.geometries[0].type==="raster_mask"?"▦":"✎",M=t.has(y.id),O={kind:"layer",regionId:b.id,layerId:y.id};return s.jsxs("div",{className:"geometry-tree-item",children:[s.jsxs("div",{className:`geometry-row ${T&&!e.selectedGeometryId?"selected":""} ${L?"primary-selection":""}${_(O)}`,...m(O),onClick:E=>e.onSelectLayer(b.id,y.id,E.shiftKey?"range":E.ctrlKey||E.metaKey?"toggle":"replace"),children:[s.jsx(tt,{className:"tree-drag-handle",draggable:!0,"aria-label":`Move ${y.authoring.name}`,title:"Drag layer; Alt + arrow keys also move",onDragStart:E=>p(O,E),onDragEnd:()=>{a(null),c(null)},onKeyDown:E=>{E.altKey&&E.key==="ArrowUp"&&(E.preventDefault(),e.onMoveLayer(y.id,1)),E.altKey&&E.key==="ArrowDown"&&(E.preventDefault(),e.onMoveLayer(y.id,-1))},onClick:E=>E.stopPropagation(),children:"⠿"}),s.jsx(tt,{className:"layer-expand","aria-expanded":M,title:M?"Collapse operations":"Expand operations",onClick:E=>{E.stopPropagation(),u(y.id)},children:s.jsx(zt,{name:M?"chevron-down":"chevron-right"})}),s.jsxs("span",{title:`${y.geometries.length} operations · ${P} mask group${P===1?"":"s"}`,children:[j,y.geometries.some(E=>E.operation==="subtract")?"−":""]}),s.jsx(bh,{value:y.authoring.name,onCommit:E=>e.onRenameLayer(y.id,E)}),s.jsx(tt,{className:`tree-icon-button${y.authoring.visible?"":" deviant"}`,title:y.authoring.visible?"Hide in editor":"Show in editor","aria-pressed":y.authoring.visible,onClick:E=>{E.stopPropagation(),e.onToggleLayer(y.id,"visible")},children:s.jsx(zt,{name:y.authoring.visible?"eye":"eye-off"})}),s.jsx(tt,{className:`tree-icon-button${y.authoring.locked?" deviant":""}`,title:y.authoring.locked?"Unlock layer":"Lock layer","aria-pressed":y.authoring.locked,onClick:E=>{E.stopPropagation(),e.onToggleLayer(y.id,"locked")},children:s.jsx(zt,{name:y.authoring.locked?"lock":"unlock"})}),s.jsx(tt,{className:`tree-check${y.enabled?"":" deviant"}`,role:"checkbox","aria-checked":y.enabled,title:y.enabled?"Disable mask output":"Enable mask output",onClick:E=>{E.stopPropagation(),e.onToggleLayer(y.id,"enabled")},children:y.enabled&&s.jsx(zt,{name:"check"})}),s.jsxs("details",{className:"layer-overflow",onClick:E=>E.stopPropagation(),children:[s.jsx("summary",{title:"Layer actions","aria-label":"Layer actions",children:s.jsx(zt,{name:"more"})}),s.jsxs("div",{children:[s.jsx(tt,{onClick:E=>{E.currentTarget.closest("details").removeAttribute("open"),e.onDuplicateLayer(y.id)},children:"Duplicate layer"}),s.jsx(tt,{className:"danger",onClick:E=>{E.currentTarget.closest("details").removeAttribute("open"),e.onDeleteLayer(y.id)},children:"Delete layer"})]})]})]}),M&&s.jsx("div",{className:"geometry-operations",children:y.geometries.map((E,B)=>{const C={kind:"geometry",regionId:b.id,layerId:y.id,geometryId:E.id};return s.jsxs("div",{className:`geometry-operation ${e.selectedGeometryId===E.id?"selected":""}${_(C)}`,...m(C),children:[s.jsx(tt,{className:"tree-drag-handle",draggable:!0,"aria-label":`Move ${dr(E,B).name}`,title:"Drag operation",onDragStart:S=>p(C,S),onDragEnd:()=>{a(null),c(null)},children:"⠿"}),s.jsxs(tt,{className:"geometry-operation-select",onClick:()=>e.onSelectGeometry(b.id,y.id,E.id),children:[s.jsx("span",{className:`operation-kind ${E.operation}`,children:E.operation==="add"?"+":"−"}),s.jsx("span",{children:dr(E,B).name}),s.jsx("small",{children:E.type.replace("_"," ")})]}),s.jsx(tt,{className:`tree-icon-button${E.enabled!==!1?"":" deviant"}`,title:E.enabled!==!1?"Disable operation":"Enable operation","aria-pressed":E.enabled!==!1,onClick:()=>e.onToggleGeometry(E.id),children:s.jsx(zt,{name:E.enabled!==!1?"eye":"eye-off"})}),s.jsx(tt,{className:"danger",disabled:!kd(y.geometries,E.id),title:kd(y.geometries,E.id)?"Delete operation":"Additive base: remove dependent subtract operations first",onClick:()=>e.onDeleteGeometry(E.id),children:"×"})]},E.id)})})]},y.id)})})]},b.id)})]})}const vh=({name:e})=>e==="select"?s.jsx("svg",{viewBox:"0 0 24 24",children:s.jsx("path",{d:"M5 3l13 9-6 1 4 7-3 1-4-7-4 4z"})}):e.startsWith("rect")?s.jsxs("svg",{viewBox:"0 0 24 24",children:[s.jsx("rect",{x:"4",y:"5",width:"16",height:"14",rx:"1"}),s.jsx("path",{d:e.endsWith("subtract")?"M16 17h6":"M16 17h6M19 14v6"})]}):e.startsWith("ellipse")?s.jsxs("svg",{viewBox:"0 0 24 24",children:[s.jsx("ellipse",{cx:"11",cy:"12",rx:"8",ry:"6"}),s.jsx("path",{d:e.endsWith("subtract")?"M16 18h6":"M16 18h6M19 15v6"})]}):e.startsWith("polygon")?s.jsxs("svg",{viewBox:"0 0 24 24",children:[s.jsx("path",{d:"M4 18L7 5l12 3 1 11z"}),s.jsx("path",{d:e.endsWith("subtract")?"M16 18h6":"M16 18h6M19 15v6"})]}):e==="brush-add"?s.jsxs("svg",{viewBox:"0 0 24 24",children:[s.jsx("path",{d:"M14 4l6 6-9 9H5v-6z"}),s.jsx("path",{d:"M16 17h6M19 14v6"})]}):e==="brush-subtract"?s.jsxs("svg",{viewBox:"0 0 24 24",children:[s.jsx("path",{d:"M14 4l6 6-9 9H5v-6z"}),s.jsx("path",{d:"M16 17h6"})]}):s.jsxs("svg",{viewBox:"0 0 24 24",children:[s.jsx("circle",{cx:"12",cy:"12",r:"3"}),s.jsx("path",{d:"M12 2v3M12 19v3M2 12h3M19 12h3M5 5l2 2M17 17l2 2M19 5l-2 2M7 17l-2 2"})]});function nk({tool:e,brush:t,canSubtract:r,canvas:o,onTool:n,onBrush:i}){const[a,l]=v.useState(!1),c=e.startsWith("brush"),u=[{id:"select",title:"Select and transform"},{id:"rect-add",title:"Add rectangle"},{id:"rect-subtract",title:"Subtract rectangle from selected layer"},{id:"ellipse-add",title:"Add ellipse"},{id:"ellipse-subtract",title:"Subtract ellipse from selected layer"},{id:"polygon-add",title:"Add polygon (click points, Enter or double-click to close)"},{id:"polygon-subtract",title:"Subtract polygon from selected layer"},{id:"brush-add",title:"Add brush stroke"},{id:"brush-subtract",title:"Subtract from selected layer"}];return s.jsxs("div",{className:"artboard-tools",onPointerDown:d=>d.stopPropagation(),onPointerUp:d=>d.stopPropagation(),onWheel:d=>d.stopPropagation(),children:[s.jsx(_1,{orientation:"vertical",density:"compact",label:"Regional drawing tools",items:[...u.map(d=>({id:d.id,label:d.title,icon:s.jsx(vh,{name:d.id}),active:e===d.id,disabled:d.id.endsWith("subtract")&&!r,onSelect:()=>{n(d.id),d.id.startsWith("brush")||l(!1)},group:d.id.split("-")[0]})),...c?[{id:"brush-settings",label:"Brush settings",icon:s.jsx(vh,{name:"settings"}),active:a,onSelect:()=>l(d=>!d),group:"settings"}]:[]]}),c&&a&&s.jsxs("div",{className:"brush-flyout",children:[s.jsxs("header",{children:[s.jsx("strong",{children:"Brush"}),s.jsx(ie,{intent:"ghost",iconOnly:!0,"aria-label":"Close brush settings",onClick:()=>l(!1),children:"×"})]}),s.jsx(Ur,{label:"Brush size",value:t.size,min:.005,max:.25,step:.005,unit:`${Math.round(t.size*Math.min(o.width,o.height))} px`,onValue:d=>i({...t,size:d})}),s.jsx(Ur,{label:"Hardness",value:t.hardness,min:0,max:1,step:.05,unit:"×",onValue:d=>i({...t,hardness:d})}),s.jsx(Ur,{label:"Opacity",value:t.opacity,min:.05,max:1,step:.05,unit:"×",onValue:d=>i({...t,opacity:d})}),s.jsx(at,{label:"Shape",value:t.shape,onValue:d=>i({...t,shape:d}),options:[{value:"round",label:"Round"},{value:"square",label:"Square"}]}),s.jsx(at,{label:"Pressure",value:t.pressureMode,onValue:d=>i({...t,pressureMode:d}),options:[{value:"constant",label:"Constant"},{value:"stylus",label:"Stylus"}]})]})]})}const ik=({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-card-header",children:[s.jsx(Hr,{label:"Control name",value:e.name,onValue:a=>o({...e,name:a})}),s.jsxs("span",{children:[e.assignments.length," group",e.assignments.length===1?"":"s"]})]}),s.jsx("div",{className:"bv-assignments",children:e.assignments.map((a,l)=>{const c=r.find(f=>f.groupId===a.groupId),u=c?.entries.filter(f=>f.action===c.winnerAction).map(f=>f.controlName).join(", "),d=c?a.action===c.winnerAction?`Overrides ${[...new Set(c.entries.filter(f=>f.action!==c.winnerAction).map(f=>n(f.action)))].join(", ")}`:`Overridden by ${n(c.winnerAction)} from ${u}`:"";return s.jsxs("div",{className:`bv-control-assignment-row ${a.unresolved?"unresolved":c?"conflict":""}`,children:[s.jsxs("div",{className:"bv-control-assignment-target",children:[s.jsxs("strong",{children:[a.unresolved?"⚠ ":"",a.groupPath]}),d&&s.jsxs("small",{children:["⚠ ",d]})]}),s.jsx(at,{label:"Action",value:a.action,options:[{value:"activate",label:"Activate"},{value:"mute",label:"Mute"},{value:"bypass",label:"Bypass"}],onValue:f=>o({...e,assignments:e.assignments.map((p,g)=>g===l?{...p,action:f}:p)})}),s.jsx(ie,{intent:"ghost",iconOnly:!0,"aria-label":"Remove assignment",onClick:()=>o({...e,assignments:e.assignments.filter((f,p)=>p!==l)}),children:"×"})]},a.groupId)})}),s.jsx("div",{className:"bv-control-add-group",children:s.jsx(at,{label:"Add group",value:"",onValue:i,options:[{value:"",label:"Choose group…"},...t.map(a=>({value:a.id,label:a.pathLabel}))]})})]})},ak=100;function gc(e,t=r=>structuredClone(r)){const[r,o]=v.useState(()=>t(e)),[n,i]=v.useState([]),[a,l]=v.useState([]),c=v.useRef(r);c.current=r;const u=v.useCallback(m=>{o(_=>{const k=typeof m=="function"?m(t(_)):m;return i(b=>[...b.slice(-99),t(_)]),l([]),t(k)})},[t]),d=v.useCallback((m,_=!1)=>{o(t(m)),_&&(i([]),l([]))},[t]),f=v.useCallback(()=>{i(m=>{if(!m.length)return m;const _=m[m.length-1];return l(k=>[t(c.current),...k].slice(0,ak)),o(t(_)),m.slice(0,-1)})},[t]),p=v.useCallback(()=>{l(m=>{if(!m.length)return m;const _=m[0];return i(k=>[...k.slice(-99),t(c.current)]),o(t(_)),m.slice(1)})},[t]),g=v.useCallback(()=>{i([]),l([])},[]);return{value:r,commit:u,replace:d,undo:f,redo:p,clear:g,canUndo:n.length>0,canRedo:a.length>0}}const lk=e=>e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLElement&&e.isContentEditable;function hc(e,t=!0){v.useEffect(()=>{if(!t)return;const r=a=>{if(lk(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 sk(){return globalThis.crypto?.randomUUID?.()??`bv-control-${Date.now()}-${Math.random().toString(16).slice(2)}`}const ck=()=>{const e=v.useMemo(()=>{const d=xn(),f=new Set(Ns(ct()).map(p=>p.id));return{...d,controls:d.controls.map(p=>({...p,assignments:p.assignments.map(g=>({...g,unresolved:!f.has(g.groupId)}))}))}},[]),t=gc(e),r=t.value,o=d=>t.commit(d);hc(t),v.useEffect(()=>{const d=f=>{const p=f.detail,g=new Map(p.controls.map(_=>[_.id,_.enabled])),m={...r,controls:r.controls.map(_=>g.has(_.id)?{..._,enabled:g.get(_.id)}:_)};JSON.stringify(m)!==JSON.stringify(r)&&t.replace(m)};return window.addEventListener(ci,d),()=>window.removeEventListener(ci,d)},[r,t.replace]);const n=v.useMemo(()=>Ns(ct()),[r]),i=v.useMemo(()=>Cm(r),[r]),a=v.useRef(!1);v.useEffect(()=>{if(!a.current){a.current=!0;return}const d=window.setTimeout(()=>{const f=r.controls.map(g=>g.name.trim());if(f.some(g=>!g)||new Set(f).size!==f.length)return;const p=new Set(n.map(g=>g.id));ep({...r,controls:r.controls.map(g=>({...g,name:g.name.trim(),assignments:g.assignments.map(m=>({...m,unresolved:!p.has(m.groupId)}))}))})},250);return()=>window.clearTimeout(d)},[r,n]);const l=(d,f)=>{o({...r,controls:f?r.controls.map((p,g)=>g===d?f:p):r.controls.filter((p,g)=>g!==d)})},c=()=>{let d="New Control",f=2;for(;r.controls.some(p=>p.name===d);)d=`New Control ${f++}`;o({...r,controls:[...r.controls,{id:sk(),name:d,enabled:!0,assignments:[]}]})},u=r.controls.map((d,f)=>({id:d.id,title:d.name||"Unnamed control",description:`${d.assignments.length} assignment${d.assignments.length===1?"":"s"}`,content:s.jsx(ik,{control:d,groups:n,conflicts:i,onChange:p=>l(f,p)})}));return s.jsxs("div",{className:"bv-control-editor",children:[s.jsxs("section",{className:"bv-control-editor-settings",children:[s.jsxs("div",{children:[s.jsx("strong",{children:"Release behavior"}),s.jsx("span",{children:"Choose whether controls become active again when restrictions are released."})]}),s.jsx(Ei,{label:"Force active after releasing restrictions",value:r.forceActive,trueLabel:"Force active",falseLabel:"Keep current state",onValue:d=>o({...r,forceActive:d})})]}),s.jsx("div",{className:"bv-controls",children:s.jsx(tl,{items:u,onReorder:d=>o({...r,controls:d.map(f=>r.controls.find(p=>p.id===f.id)).filter(Boolean)}),onRemove:d=>o({...r,controls:r.controls.filter(f=>f.id!==d)})})}),s.jsxs("footer",{className:"bv-control-editor-footer bv-ui-inline-footer",children:[s.jsx(Om,{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"})]})]})},nn=new Map,Ms=new Map;function sp(e,t={}){const r=t.key?nn.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=wi(o);let i=!1,a=0,l=e;const c=()=>{i||(i=!0,t.key&&nn.get(t.key)?.close===c&&nn.delete(t.key),n.unmount(),o.remove())},u=g=>{g&&(l=g),a+=1,document.body.append(o),o.querySelector(".bv-managed-window")?.dispatchEvent(new Event("bv-ui-activate")),n.render(l(c,a))},d=()=>o.querySelector(".bv-managed-window")?.dispatchEvent(new Event("bv-ui-minimize")),f=()=>{const g=o.querySelector(".bv-managed-window"),m=g?.getBoundingClientRect();return{mode:g?.classList.contains("workspace")?"workspace":"floating",geometry:m?{x:m.left,y:m.top,width:m.width,height:m.height}:void 0}},p=g=>o.querySelector(".bv-managed-window")?.dispatchEvent(new CustomEvent("bv-ui-set-window-state",{detail:g}));if(t.key){const g={activate:u,minimize:d,state:f,setState:p,close:c};nn.set(t.key,g);const m=Ms.get(t.key);m&&(Ms.delete(t.key),requestAnimationFrame(()=>g.setState(m)))}return n.render(l(c,a)),c}function cp(e,t,r,o){if(e===t)return nn.get(e)?.activate();const n=nn.get(e),i=n?.state(),a=nn.get(t);i&&Ms.set(t,i),a?a.activate():r(),i&&a&&(Ms.delete(t),requestAnimationFrame(()=>a.setState(i))),o?n?.close():n?.minimize()}const Xm="BV.NodePack.UI.Size",Gm="BV.NodePack.UI.ReducedEffects",up="BV.NodePack.UI.WindowSwitchMode";let Gi="keep",qm;const Ed=new Set,uk=e=>e==="replace"?"replace":"keep",di=()=>Gi,dk=e=>{qm=e},fk=e=>(Ed.add(e),()=>Ed.delete(e));function dp(e,t=!0){return Gi=uk(e),t&&qm?.(Gi),Ed.forEach(r=>r(Gi)),Gi}const pk=["bv-ui-size-compact","bv-ui-size-default","bv-ui-size-large"];function gk(e){return e==="compact"||e==="large"?e:"default"}function Km(e,t=document.documentElement){const r=gk(e);return t.classList.remove(...pk),t.classList.add(`bv-ui-size-${r}`),r}function Jm(e,t=document.documentElement){return t.classList.toggle("bv-ui-reduced-effects",!!e),!!e}function hk(e){Km(e?.getSettingValue?.(Xm,"default")),Jm(e?.getSettingValue?.(Gm,!1)),dp(e?.getSettingValue?.(up,"keep"),!1)}function bk(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 vk(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 mk(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 dn=[];let mh=!1;const xk=e=>e.isConnected&&!e.hidden&&e.offsetParent!==null;function yk(e){const t=dn.filter(xk);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 _k(){mh||(mh=!0,window.addEventListener("keydown",e=>{e.key!=="Tab"||!e.ctrlKey||e.altKey||e.metaKey||(e.preventDefault(),e.stopImmediatePropagation(),yk(e.shiftKey))},!0))}function wk(e){return _k(),dn.push(e),()=>{const t=dn.indexOf(e);t>=0&&dn.splice(t,1)}}function xh(e){const t=dn.indexOf(e);t>=0&&dn.splice(t,1),dn.push(e)}const Zm="bvWindowMenuVisible",fi="bv-window-menu-visibility-changed",kk=e=>!["BV Smart Pipe","BV Smart Pipe Merge"].includes(e);function En(e){const t=e?.properties?.[Zm];return typeof t=="boolean"?t:kk(String(e?.type??e?.comfyClass??""))}function Tn(e,t){e&&(e.properties??(e.properties={}),e.properties[Zm]=!!t,e.graph?.setDirtyCanvas?.(!0,!0),window.dispatchEvent(new CustomEvent(fi,{detail:{node:e,visible:!!t}})))}function Ek(e){return window.addEventListener(fi,e),()=>window.removeEventListener(fi,e)}let Td=0;window.addEventListener(fi,()=>Td++);function Ri(e){return v.useSyncExternalStore(Ek,()=>Td,()=>Td),En(e)}const yh=new WeakMap;let Tk=1;const Rk=(e,t)=>{const r=e?.id??e?._id??e?.extra?.uuid;if(r!=null&&String(r))return String(r);if(!e||typeof e!="object")return t;let o=yh.get(e);return o||(o=`${t}@${Tk++}`,yh.set(e,o)),o};function nl(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=Rk(n,i.length?i[i.length-1]:"root");for(const d of n._nodes??n.nodes??[]){const f=String(d.id),p=[...i,u];t(d)&&r.push({node:d,graph:n,path:p,key:`${p.join("/")}:${f}`,breadcrumb:a.join(" › ")});const g=d.subgraph??(()=>{try{return d.getSubgraph?.()}catch{return null}})();g&&o(g,[...p,f],[...a,String(d.title||d.type||`#${f}`)],c)}};return o(e,[],[]),r}function Ia(e,t){return nl(e,r=>r===t)[0]?.key??String(t?.id??"")}const As="bv-toggle-toolbar-window-launcher";let sa=null;const Sk=e=>sa?sa(e):window.dispatchEvent(new CustomEvent(As,{detail:{anchor:e}}));function Lk({getColumns:e}){const[t,r]=v.useState({left:0,top:0}),[o,n]=v.useState(!1),[i,a]=v.useState(!1),[,l]=v.useState(0),c=v.useRef(null),u=v.useRef(null),d=v.useRef(),f=v.useRef(),p=v.useRef(0),g=()=>{d.current&&window.clearTimeout(d.current),f.current&&window.clearTimeout(f.current)},m=(w,y)=>{const T=w.getBoundingClientRect(),L=Math.min(Math.max(1,y)*220,window.innerWidth-24),U=Math.min(420,window.innerHeight-84),P=Math.max(12,Math.min(T.left,window.innerWidth-L-12)),j=T.bottom+6+U<=window.innerHeight-12?T.bottom+6:Math.max(12,T.top-U-6);return{left:P,top:j}},_=v.useCallback((w,y)=>{g(),d.current=window.setTimeout(()=>{if(document.body.classList.contains("bv-toolbar-no-editor")&&document.body.classList.contains("bv-toolbar-no-quick"))return;const T=[...document.querySelectorAll(".bv-regional-action")].filter(U=>U.offsetParent!==null),L=y?.offsetParent?y:T[0];L&&(u.current=L,a(!1),r(m(L,e(!1).filter(U=>U.items.length).length)),n(!0))},w)},[e]),k=v.useCallback(()=>_(180),[_]),b=v.useCallback(()=>{d.current&&window.clearTimeout(d.current);const w=Math.max(280,p.current-Date.now());f.current=window.setTimeout(()=>{c.current?.matches(":hover")||(n(!1),a(!1))},w)},[]);v.useEffect(()=>{const w=new Map,y=()=>{for(const L of document.querySelectorAll(".bv-regional-action")){if(w.has(L))continue;const U=()=>k(),P=()=>b();L.addEventListener("pointerenter",U),L.addEventListener("pointerleave",P);const j=()=>{L.removeEventListener("pointerenter",U),L.removeEventListener("pointerleave",P)};w.set(L,j)}};y();const T=new MutationObserver(y);return T.observe(document.body,{childList:!0,subtree:!0}),()=>{T.disconnect(),w.forEach(L=>L()),g()}},[b,k]),v.useEffect(()=>{if(!o)return;const w=c.current;if(!w)return;const y=new MutationObserver(()=>{w.isConnected||(y.disconnect(),hr.flushSync(()=>{n(!1),a(!1)}),window.setTimeout(()=>_(0,u.current??void 0),80))});return y.observe(document.body,{childList:!0,subtree:!0}),()=>y.disconnect()},[o,_]),v.useEffect(()=>{if(!o)return;const w=y=>{y.key==="Escape"&&(n(!1),a(!1))};return window.addEventListener("keydown",w),()=>window.removeEventListener("keydown",w)},[o]),v.useEffect(()=>{const w=T=>{if(o&&c.current?.isConnected){n(!1),a(!1);return}o&&hr.flushSync(()=>{n(!1),a(!1)}),_(0,T)},y=T=>w(T.detail?.anchor);return sa=w,window.addEventListener(As,y),()=>{sa===w&&(sa=null),window.removeEventListener(As,y)}},[o,_]),v.useEffect(()=>{const w=()=>l(y=>y+1);return window.addEventListener(fi,w),()=>window.removeEventListener(fi,w)},[]);const h=w=>{g(),p.current=Date.now()+700;const y=c.current?.getBoundingClientRect();a(w),requestAnimationFrame(()=>requestAnimationFrame(()=>{const T=c.current?.getBoundingClientRect();!y||!T||r(L=>({...L,top:Math.max(12,Math.min(window.innerHeight-T.height-12,L.top+y.bottom-T.bottom))}))}))};if(!o)return null;const x=e(i).filter(w=>w.items.length);return hr.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,x.length)},role:"dialog","aria-label":"BV window launcher",onPointerEnter:g,onPointerLeave:b,children:[s.jsx("div",{className:"bv-toolbar-window-launcher__body",children:x.length?x.map(w=>s.jsxs("section",{children:[s.jsx("h3",{children:w.label}),s.jsx("div",{children:w.items.map(y=>s.jsxs("div",{className:`bv-toolbar-launcher-row ${y.hidden?"is-hidden":""}`,children:[s.jsxs(ie,{intent:"ghost",disabled:y.disabled,onClick:()=>{n(!1),a(!1),y.onSelect()},children:[s.jsx("span",{children:y.label}),y.meta&&s.jsx("small",{children:y.meta})]}),y.secondary&&s.jsx("button",{type:"button",className:"bv-toolbar-launcher-secondary",title:y.secondary.label,"aria-label":y.secondary.label,onClick:()=>{n(!1),a(!1),y.secondary?.onSelect()},children:"✎"}),y.hidden&&y.onReveal&&s.jsx("button",{type:"button",className:"bv-toolbar-launcher-reveal",title:"Show in BV window menus","aria-label":`Show ${y.label} in BV window menus`,onClick:y.onReveal,children:"◉"})]},y.id))})]},w.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(Ei,{label:"Show hidden nodes",value:i,trueLabel:"Shown",falseLabel:"Hidden",onValue:h})})]}),document.body)}var Si=class{constructor(){D(this,"attributes");D(this,"nameToAttribute");this.attributes=[],this.nameToAttribute=new Map}addWithAll(e,t,r,o){const n=new re(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}},D($i,"NUMBER","number"),D($i,"STRING","string"),D($i,"BOOLEAN","boolean"),$i),he=class tn{constructor(t,r,o,n){D(this,"x");D(this,"y");D(this,"width");D(this,"height");this.x=t,this.y=r,this.width=o,this.height=n}static empty(){return new tn(0,0,0,0)}static fromJson(t){return new tn(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 tn(r,o,n,i)}static fromDomRect(t){return new tn(t.x,t.y,t.width,t.height)}relativeTo(t){return new tn(this.x-t.x,this.y-t.y,this.width,this.height)}clone(){return new tn(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+")"}},D(Ie,"values",new Map),D(Ie,"TOP",new Ie("top",we.VERT,0)),D(Ie,"BOTTOM",new Ie("bottom",we.VERT,1)),D(Ie,"LEFT",new Ie("left",we.HORZ,0)),D(Ie,"RIGHT",new Ie("right",we.HORZ,1)),D(Ie,"CENTER",new Ie("center",we.VERT,0)),Ie),ce,oe=(ce=class{static group(t){return new Qm(t)}static addTab(t,r,o,n,i){return new Ue(ce.ADD_TAB,{json:t,toNode:r,location:o.getName(),index:n,select:i})}static addNode(t,r,o,n,i){return this.addTab(t,r,o,n,i)}static moveNode(t,r,o,n,i){return new Ue(ce.MOVE_NODE,{fromNode:t,toNode:r,location:o.getName(),index:n,select:i})}static deleteTab(t){return new Ue(ce.DELETE_TAB,{node:t})}static deleteTabset(t){return new Ue(ce.DELETE_TABSET,{node:t})}static renameTab(t,r){return new Ue(ce.RENAME_TAB,{node:t,text:r})}static setTabPinned(t,r){return new Ue(ce.SET_TAB_PINNED,{node:t,pinned:r})}static setBorderType(t,r){return new Ue(ce.SET_BORDER_TYPE,{node:t,borderType:r})}static selectTab(t){return new Ue(ce.SELECT_TAB,{tabNode:t})}static setActiveTabset(t,r){return new Ue(ce.SET_ACTIVE_TABSET,{tabsetNode:t,layoutId:r})}static adjustWeights(t,r){return new Ue(ce.ADJUST_WEIGHTS,{nodeId:t,weights:r})}static adjustBorderSplit(t,r){return new Ue(ce.ADJUST_BORDER_SPLIT,{node:t,size:r})}static maximizeToggle(t,r){return new Ue(ce.MAXIMIZE_TOGGLE,{node:t,layoutId:r})}static updateModelAttributes(t){return new Ue(ce.UPDATE_MODEL_ATTRIBUTES,{json:t})}static updateNodeAttributes(t,r){return new Ue(ce.UPDATE_NODE_ATTRIBUTES,{node:t,json:r})}static updateSubLayoutAttributes(t,r){return new Ue(ce.UPDATE_SUBLAYOUT_ATTRIBUTES,{layoutId:t,json:r})}static popoutTab(t,r="window"){return new Ue(ce.POPOUT_TAB,{node:t,type:r})}static popoutTabset(t,r="window"){return new Ue(ce.POPOUT_TABSET,{node:t,type:r})}static closePopout(t){return new Ue(ce.CLOSE_POPOUT,{layoutId:t})}static movePopoutToFront(t){return new Ue(ce.MOVE_POPOUT_TO_FRONT,{layoutId:t})}static moveFloat(t,r){return new Ue(ce.MOVE_FLOAT,{layoutId:t,rect:r})}static popoutFloat(t,r){return new Ue(ce.POPOUT_FLOAT,{layoutId:t,rect:r})}static dockFloatToLayout(t,r,o,n){return new Ue(ce.DOCK_FLOAT_TO_LAYOUT,{layoutId:t,toNode:r,location:o.getName(),index:n})}static createPopout(t,r,o){return this.createSubLayout(t,r,o)}static createSubLayout(t,r,o){return new Ue(ce.CREATE_SUBLAYOUT,{layout:t,rect:r,type:o})}},D(ce,"ADD_TAB","FlexLayout_AddTab"),D(ce,"DELETE_TAB","FlexLayout_DeleteTab"),D(ce,"RENAME_TAB","FlexLayout_RenameTab"),D(ce,"SET_TAB_PINNED","FlexLayout_SetTabPinned"),D(ce,"SET_BORDER_TYPE","FlexLayout_SetBorderType"),D(ce,"SELECT_TAB","FlexLayout_SelectTab"),D(ce,"MOVE_NODE","FlexLayout_MoveNode"),D(ce,"DELETE_TABSET","FlexLayout_DeleteTabset"),D(ce,"SET_ACTIVE_TABSET","FlexLayout_SetActiveTabset"),D(ce,"ADJUST_WEIGHTS","FlexLayout_AdjustWeights"),D(ce,"ADJUST_BORDER_SPLIT","FlexLayout_AdjustBorderSplit"),D(ce,"MAXIMIZE_TOGGLE","FlexLayout_MaximizeToggle"),D(ce,"UPDATE_MODEL_ATTRIBUTES","FlexLayout_UpdateModelAttributes"),D(ce,"UPDATE_NODE_ATTRIBUTES","FlexLayout_UpdateNodeAttributes"),D(ce,"UPDATE_SUBLAYOUT_ATTRIBUTES","FlexLayout_UpdateSubLayoutAttributes"),D(ce,"POPOUT_TAB","FlexLayout_PopoutTab"),D(ce,"POPOUT_TABSET","FlexLayout_PopoutTabset"),D(ce,"CLOSE_POPOUT","FlexLayout_ClosePopout"),D(ce,"MOVE_POPOUT_TO_FRONT","FlexLayout_MoveFloatToFront"),D(ce,"MOVE_FLOAT","FlexLayout_MoveFloat"),D(ce,"DOCK_FLOAT_TO_LAYOUT","FlexLayout_DockFloatToLayout"),D(ce,"POPOUT_FLOAT","FlexLayout_PopoutFloat"),D(ce,"CREATE_SUBLAYOUT","FlexLayout_CreateSubLayout"),D(ce,"GROUP","FlexLayout_Group"),ce),Ue=class{constructor(e,t){D(this,"type");D(this,"data");D(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}}},Qm=class extends Ue{constructor(t){super(oe.GROUP,t);D(this,"actions");this.actions=t}},Rt=class{constructor(e,t,r,o,n){D(this,"node");D(this,"rect");D(this,"location");D(this,"index");D(this,"className");this.node=e,this.rect=t,this.location=r,this.index=o,this.className=n}},V=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}({}),yc=class{constructor(e){D(this,"model");D(this,"attributes");D(this,"parent");D(this,"children");D(this,"rect");D(this,"path");D(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 ja(e){return e.ctrlKey||e.shiftKey||e.altKey||e.metaKey}function jk(e){return{...Ik,...e}}function Po(e){return e?.replace(/\bctrl\b/i,"Control")}function ry(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 Zl(e,t){const r=[..._h("iframe",t),..._h("webview",t)];for(const o of r)o.style.pointerEvents=e?"auto":"none"}function _h(e,t){return[...t.getElementsByTagName(e)]}var Ql=!1;function Is(e,t,r,o,n){Ql=!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(),Ql=!1,n()},c=()=>{a(),Ql=!1,o()};e.addEventListener("pointermove",i),e.addEventListener("pointerup",c),e.addEventListener("pointercancel",l)}function oy(e){let t;return e.getController().getModel().visitNodes(r=>{r instanceof Ce&&r.getSubLayoutId()===e.getLayoutId()&&(t=r.getLayout())}),t}function ny(e,t){const r=t.getType();if(r==="window")return e.isAllowedInWindow();if(r==="float")return!0;if(r==="tab"){const o=oy(t);return!(o&&o.getType()==="window"&&!o.isMainLayout()&&!e.isAllowedInWindow()||iy(e))}return!1}function iy(e){return e instanceof Ce?e.getSubLayoutId()!==void 0:e.getChildren().some(t=>iy(t))}function wh(e,t){const r=e.getAttribute("style");return r===t.getAttribute("style")?!1:(r?t.setAttribute("style",r):t.removeAttribute("style"),!0)}function Pk(){const e=navigator.userAgent;return e.includes("Safari")&&!e.includes("Chrome")&&!e.includes("Chromium")}function Bk(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,Ve=(je=class extends yc{constructor(r,o){super(r);D(this,"layout");D(this,"minHeight");D(this,"minWidth");D(this,"maxHeight");D(this,"maxWidth");this.minHeight=1,this.minWidth=1,this.maxHeight=Jr,this.maxWidth=Jr,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===Me.TYPE){const l=Me.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()===we.HORZ,n=this.getChildren(),i=this.model.getSplitterSize(),a=n[0].getRect(),l=n[n.length-1].getRect();let c=o?[a.x,l.getRight()]:[a.y,l.getBottom()];const u=o?[a.x,l.getRight()]:[a.y,l.getBottom()];for(let d=0;d0&&(c[0]+=i,u[0]+=i)}for(let d=n.length-1;d>=r;d--){const f=n[d];c[1]-=(o?f.getMinWidth():f.getMinHeight())+i,u[1]-=(o?Math.max(f.getMinWidth(),f.getMaxWidth()):Math.max(f.getMinHeight(),f.getMaxHeight()))+i}return c=[Math.max(u[1],c[0]),Math.min(u[0],c[1])],c[0]>c[1]&&(c=[c[0],c[0]]),c}getSplitterInitials(r){const o=this.getOrientation()===we.HORZ,n=this.getChildren(),i=this.model.getSplitterSize(),a=[];let l=0;for(let d=0;df?(g=u[r]+p-f,u[r]=f):u[r]+=p;for(let m=r-1;m>=0;m--){const _=c[m],k=l?_.getMinWidth():_.getMinHeight();if(u[m]-p>k){u[m]-=p;break}else p-=u[m]-k,u[m]=k}for(let m=r+1;mf?(g=u[r-1]+p-f,u[r-1]=f):u[r-1]+=p;for(let m=r;mk){u[m]-=p;break}else p-=u[m]-k,u[m]=k}for(let m=r-1;m>=0;m--){const _=c[m],k=l?_.getMaxWidth():_.getMaxHeight();if(u[m]+gMath.max(.1,d)*100/i)}getMinWidth(){return this.minWidth}getMinHeight(){return this.minHeight}getMaxWidth(){return this.maxWidth}getMaxHeight(){return this.maxHeight}calcMinMaxSize(){this.minHeight=1,this.minWidth=1,this.maxHeight=Jr,this.maxWidth=Jr;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()===we.VERT?(this.minHeight+=n.getMinHeight(),this.maxHeight+=i,r||(this.minHeight+=this.model.getSplitterSize(),this.maxHeight+=this.model.getSplitterSize()),this.minWidth=Math.max(this.minWidth,n.getMinWidth()),this.maxWidth=Math.min(this.maxWidth,a)):(this.minWidth+=n.getMinWidth(),this.maxWidth+=a,r||(this.minWidth+=this.model.getSplitterSize(),this.maxWidth+=this.model.getSplitterSize()),this.minHeight=Math.max(this.minHeight,n.getMinHeight()),this.maxHeight=Math.min(this.maxHeight,i)),r=!1}this.maxWidth=Math.max(this.maxWidth,this.minWidth),this.maxHeight=Math.max(this.maxHeight,this.minHeight)}tidy(){let r=0;for(;ru/2-f&&athis.rect.getRight()-d&&a>u/2-f&&ac/2-f&&lthis.rect.getBottom()-d&&l>c/2-f&&ld+f.getWeight(),0);c===0&&(c=100),l.setWeight(c/3);const u=!this.model.isRootOrientationVertical();if(i===te.CENTER)n===-1?this.addChild(l,this.children.length):this.addChild(l,n);else if(u&&i===te.LEFT||!u&&i===te.TOP)this.addChild(l,0);else if(u&&i===te.RIGHT||!u&&i===te.BOTTOM)this.addChild(l);else if(u&&i===te.TOP||!u&&i===te.LEFT){const d=new je(this.model,{}),f=new je(this.model,{});f.setWeight(75),l.setWeight(25);for(const p of this.children)f.addChild(p);this.removeAll(),d.addChild(l),d.addChild(f),this.addChild(d)}else if(u&&i===te.BOTTOM||!u&&i===te.RIGHT){const d=new je(this.model,{}),f=new je(this.model,{});f.setWeight(75),l.setWeight(25);for(const p of this.children)f.addChild(p);this.removeAll(),d.addChild(f),d.addChild(l),this.addChild(d)}l instanceof Me&&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 nt.ensureAttributePairing(),je.attributeDefinitions}static createAttributeDefinitions(){const r=new Li;return r.add("type",je.TYPE,!0).setType(re.STRING).setFixed(),r.add("id",void 0).setType(re.STRING).setDescription("the unique id of the row, if left undefined a uuid will be assigned"),r.add("weight",100).setType(re.NUMBER).setDescription("relative weight for sizing of this row in parent row"),r}},D(je,"TYPE","row"),D(je,"attributeDefinitions",je.createAttributeDefinitions()),je),vt,Me=(vt=class extends yc{constructor(r,o){super(r);D(this,"tabStripRect",he.empty());D(this,"contentRect",he.empty());D(this,"calculatedMinHeight");D(this,"calculatedMinWidth");D(this,"calculatedMaxHeight");D(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=Ce.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=te.CENTER,u=this.tabStripRect;a=new Rt(this,u,c,-1,V.FLEXLAYOUT__OUTLINE_RECT)}else{if(this.getLayoutId()!==nt.MAIN_LAYOUT_ID&&!ny(r,l))return;if(this.contentRect.contains(o,n)){let c=te.CENTER;if(this.model.getMaximizedTabset(this.getLayoutId())===void 0){const d=!i&&this.isEnableDrop(),f=this.isEnableDivide();if(!d&&!f)return;d&&f?c=te.getLocation(this.contentRect,o,n):d?c=te.CENTER:c=te.getLocation(this.contentRect,o,n,!0)}const u=c.getDockRect(this.rect);a=new Rt(this,u,c,-1,V.FLEXLAYOUT__OUTLINE_RECT)}else if(this.tabStripRect!=null&&this.tabStripRect.contains(o,n)){let c,u,d;if(this.children.length===0)c=this.tabStripRect.clone(),u=c.y+3,d=c.height-4,c.width=2;else{let f=this.children[0];c=f.getTabRect(),u=c.y,d=c.height;let p=this.tabStripRect.x;for(let g=0;g0){const c=this.getPinnedRunLength(),u=r instanceof Ce&&r.isPinned()?Math.min(a.index,c):Math.max(a.index,c);if(u!==a.index){let d;if(u0&&n--,a===te.CENTER){let u=n;u===-1&&(u=this.children.length);const d=this.getPinnedRunLength();if(r instanceof Ce?u=r.isPinned()?Math.min(u,d):Math.max(u,d):u=Math.max(u,d),r instanceof Ce)this.addChild(r,u),i||i!==!1&&this.isAutoSelectTab()?this.setSelected(u):es(this,u);else if(r instanceof Ve){const f=u;r.forEachNode((p,g)=>{p instanceof Ce&&(this.addChild(p,u),u++)},0),es(this,f,u-f)}else{const f=u;for(let p=0;p0&&this.setSelected(0)}this.model.setActiveTabset(this,this.parent.getLayoutId())}else{let u=r;if(r instanceof Ce){const p=this.model.getOnCreateTabSet();u=new vt(this.model,p?p(r):{}),u.addChild(r)}else if(r instanceof Ve){const p=this.getParent();if(r.getOrientation()===p.getOrientation()&&(o.getOrientation()===p.getOrientation()||o===te.CENTER)){const g=new Ve(this.model,{});g.addChild(r),u=g}}else u=r;const d=this.parent,f=d.getChildren().indexOf(this);if(d.getOrientation()===a.orientation)u.setWeight(this.getWeight()/2),this.setWeight(this.getWeight()/2),d.addChild(u,f+a.indexPlus);else{const p=new Ve(this.model,{});if(p.setWeight(this.getWeight()),p.addChild(this),this.setWeight(50),r instanceof Ve&&r.getChildren().length>0&&r.getOrientation()!==d.getOrientation()){const g=r.getChildren(),m=g.reduce((k,b)=>k+b.getWeight(),0);let _=a.indexPlus;for(const k of g)k.setWeight(m===0?50/g.length:50*k.getWeight()/m),p.addChild(k,_++)}else u.setWeight(50),p.addChild(u,a.indexPlus);d.removeChild(this),d.addChild(p,f)}u instanceof vt&&this.model.setActiveTabset(u,this.getLayoutId())}this.model.tidy()}updateAttrs(r){vt.attributeDefinitions.update(r,this.attributes)}getAttributeDefinitions(){return vt.attributeDefinitions}static getAttributeDefinitions(){return nt.ensureAttributePairing(),vt.attributeDefinitions}static createAttributeDefinitions(){const r=new Li;return r.add("type",vt.TYPE,!0).setType(re.STRING).setFixed(),r.add("id",void 0).setType(re.STRING).setDescription("the unique id of the tab set, if left undefined a uuid will be assigned"),r.add("weight",100).setType(re.NUMBER).setDescription("relative weight for sizing of this tabset in parent row"),r.add("selected",0).setType(re.NUMBER).setDescription("index of selected/visible tab in tabset; -1 means no tab selected"),r.add("name",void 0).setType(re.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}},D(vt,"TYPE","tabset"),D(vt,"attributeDefinitions",vt.createAttributeDefinitions()),vt);function es(e,t,r=1){const o=e.getSelected();r>0&&o!==-1&&t<=o&&e.setSelected(o+r)}function js(e,t){if(e!==void 0&&(e instanceof Me||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 Dn(){return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,e=>(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16))}var kt,Je=(kt=class extends yc{constructor(r,o,n){super(n);D(this,"contentRect",he.empty());D(this,"tabHeaderRect",he.empty());D(this,"location");this.location=r,this.attributes.id=`border_${r.getName()}`,kt.attributeDefinitions.fromJson(o,this.attributes),n.addNode(this)}static fromJson(r,o){const n=te.getByName(r.location),i=new kt(n,r,o);return r.children&&(i.children=r.children.map(a=>{const l=Ce.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===we.HORZ}getSize(){const r=this.getAttr("size"),o=this.getSelected();if(o===-1)return r;{const n=this.children[o],i=this.isHorizontal()?n.getAttr("borderWidth"):n.getAttr("borderHeight");return i===-1?r:i}}getMinSize(){const r=this.getSelectedNode();let o=this.getAttr("minSize");if(r){const n=this.isHorizontal()?r.getMinWidth():r.getMinHeight();o=Math.max(o,n)}return o}getMaxSize(){const r=this.getSelectedNode();let o=this.getAttr("maxSize");if(r){const n=this.isHorizontal()?r.getMaxWidth():r.getMaxHeight();o=Math.min(o,n)}return o}getSelected(){return this.attributes.selected}isAutoHide(){return this.getAttr("enableAutoHide")}getBorderType(){return this.getAttr("borderType")}isOverlay(){return this.getAttr("borderType")==="overlay"}setBorderType(r){this.attributes.borderType=r}getSelectedNode(){if(this.getSelected()!==-1)return this.children[this.getSelected()]}getOrientation(){return this.location.getOrientation()}getConfig(){return this.attributes.config}isMaximized(){return!1}isShowing(){return this.attributes.show}toJson(){const r={location:"bottom"};return kt.attributeDefinitions.toJson(r,this.attributes),r.location=this.location.getName(),r.children=this.children.map(o=>o.toJson()),r}isAutoSelectTabWhenOpen(){return this.getAttr("autoSelectTabWhenOpen")}isAutoSelectTabWhenClosed(){return this.getAttr("autoSelectTabWhenClosed")}isAutoSelectTab(r){return r==null&&(r=this.getSelected()!==-1),r?this.isAutoSelectTabWhenOpen():this.isAutoSelectTabWhenClosed()}isEnableTabScrollbar(){return this.getAttr("enableTabScrollbar")}setSelected(r){this.attributes.selected=r}setTabHeaderRect(r){this.tabHeaderRect=r}getRect(){return this.tabHeaderRect}getContentRect(){return this.contentRect}setContentRect(r){this.contentRect=r}isEnableDrop(){return this.getAttr("enableDrop")}setSize(r){const o=this.getSelected();if(o===-1)this.attributes.size=r;else{const n=this.children[o];(this.isHorizontal()?n.getAttr("borderWidth"):n.getAttr("borderHeight"))===-1?this.attributes.size=r:this.isHorizontal()?n.setBorderWidth(r):n.setBorderHeight(r)}}updateAttrs(r){kt.attributeDefinitions.update(r,this.attributes)}remove(r){const o=this.removeChild(r);this.getSelected()!==-1&&js(this,o)}canDrop(r,o,n,i=!1){if(!(r instanceof Ce))return;let a;const l=te.CENTER;if(this.tabHeaderRect.contains(o,n)){if(this.location.orientation===we.VERT)if(this.children.length>0){let c=this.children[0],u=c.getTabRect();const d=u.y,f=u.height;let p=this.tabHeaderRect.x;for(let g=0;g=p&&o0){let c=this.children[0],u=c.getTabRect();const d=u.x,f=u.width;let p=this.tabHeaderRect.y;for(let g=0;g=p&&n0&&n--;let c=n;c===-1&&(c=this.children.length),this.addChild(r,c),i||i!==!1&&this.isAutoSelectTab()?this.setSelected(c):es(this,c),this.model.tidy()}getSplitterBounds(r=!1){const o=[0,0],n=this.model.getRootRow(nt.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===te.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===te.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===te.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===te.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===te.BOTTOM||this.location===te.RIGHT?Math.max(0,n[1]-o):Math.max(0,o-n[0])}getAttributeDefinitions(){return kt.attributeDefinitions}static getAttributeDefinitions(){return nt.ensureAttributePairing(),kt.attributeDefinitions}static createAttributeDefinitions(){const r=new Li;return r.add("type",kt.TYPE,!0).setType(re.STRING).setFixed(),r.add("selected",-1).setType(re.NUMBER).setDescription("index of selected/visible tab in border; -1 means no tab selected"),r.add("borderType","split").setType(re.STRING).setValues(["split","overlay"]).setDescription(`the border display type: 'split' splits the main layout to make room when a tab is selected; 'overlay' shows +`)}},Wi,re=(Wi=class{constructor(e,t,r,o){D(this,"name");D(this,"alias");D(this,"modelName");D(this,"pairedAttr");D(this,"pairedType");D(this,"defaultValue");D(this,"alwaysWriteJson");D(this,"type");D(this,"required");D(this,"fixed");D(this,"description");D(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}},D(Wi,"NUMBER","number"),D(Wi,"STRING","string"),D(Wi,"BOOLEAN","boolean"),Wi),he=class en{constructor(t,r,o,n){D(this,"x");D(this,"y");D(this,"width");D(this,"height");this.x=t,this.y=r,this.width=o,this.height=n}static empty(){return new en(0,0,0,0)}static fromJson(t){return new en(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 en(r,o,n,i)}static fromDomRect(t){return new en(t.x,t.y,t.width,t.height)}relativeTo(t){return new en(this.x-t.x,this.y-t.y,this.width,this.height)}clone(){return new en(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+")"}},D(Ie,"values",new Map),D(Ie,"TOP",new Ie("top",we.VERT,0)),D(Ie,"BOTTOM",new Ie("bottom",we.VERT,1)),D(Ie,"LEFT",new Ie("left",we.HORZ,0)),D(Ie,"RIGHT",new Ie("right",we.HORZ,1)),D(Ie,"CENTER",new Ie("center",we.VERT,0)),Ie),ce,oe=(ce=class{static group(t){return new Qm(t)}static addTab(t,r,o,n,i){return new Ue(ce.ADD_TAB,{json:t,toNode:r,location:o.getName(),index:n,select:i})}static addNode(t,r,o,n,i){return this.addTab(t,r,o,n,i)}static moveNode(t,r,o,n,i){return new Ue(ce.MOVE_NODE,{fromNode:t,toNode:r,location:o.getName(),index:n,select:i})}static deleteTab(t){return new Ue(ce.DELETE_TAB,{node:t})}static deleteTabset(t){return new Ue(ce.DELETE_TABSET,{node:t})}static renameTab(t,r){return new Ue(ce.RENAME_TAB,{node:t,text:r})}static setTabPinned(t,r){return new Ue(ce.SET_TAB_PINNED,{node:t,pinned:r})}static setBorderType(t,r){return new Ue(ce.SET_BORDER_TYPE,{node:t,borderType:r})}static selectTab(t){return new Ue(ce.SELECT_TAB,{tabNode:t})}static setActiveTabset(t,r){return new Ue(ce.SET_ACTIVE_TABSET,{tabsetNode:t,layoutId:r})}static adjustWeights(t,r){return new Ue(ce.ADJUST_WEIGHTS,{nodeId:t,weights:r})}static adjustBorderSplit(t,r){return new Ue(ce.ADJUST_BORDER_SPLIT,{node:t,size:r})}static maximizeToggle(t,r){return new Ue(ce.MAXIMIZE_TOGGLE,{node:t,layoutId:r})}static updateModelAttributes(t){return new Ue(ce.UPDATE_MODEL_ATTRIBUTES,{json:t})}static updateNodeAttributes(t,r){return new Ue(ce.UPDATE_NODE_ATTRIBUTES,{node:t,json:r})}static updateSubLayoutAttributes(t,r){return new Ue(ce.UPDATE_SUBLAYOUT_ATTRIBUTES,{layoutId:t,json:r})}static popoutTab(t,r="window"){return new Ue(ce.POPOUT_TAB,{node:t,type:r})}static popoutTabset(t,r="window"){return new Ue(ce.POPOUT_TABSET,{node:t,type:r})}static closePopout(t){return new Ue(ce.CLOSE_POPOUT,{layoutId:t})}static movePopoutToFront(t){return new Ue(ce.MOVE_POPOUT_TO_FRONT,{layoutId:t})}static moveFloat(t,r){return new Ue(ce.MOVE_FLOAT,{layoutId:t,rect:r})}static popoutFloat(t,r){return new Ue(ce.POPOUT_FLOAT,{layoutId:t,rect:r})}static dockFloatToLayout(t,r,o,n){return new Ue(ce.DOCK_FLOAT_TO_LAYOUT,{layoutId:t,toNode:r,location:o.getName(),index:n})}static createPopout(t,r,o){return this.createSubLayout(t,r,o)}static createSubLayout(t,r,o){return new Ue(ce.CREATE_SUBLAYOUT,{layout:t,rect:r,type:o})}},D(ce,"ADD_TAB","FlexLayout_AddTab"),D(ce,"DELETE_TAB","FlexLayout_DeleteTab"),D(ce,"RENAME_TAB","FlexLayout_RenameTab"),D(ce,"SET_TAB_PINNED","FlexLayout_SetTabPinned"),D(ce,"SET_BORDER_TYPE","FlexLayout_SetBorderType"),D(ce,"SELECT_TAB","FlexLayout_SelectTab"),D(ce,"MOVE_NODE","FlexLayout_MoveNode"),D(ce,"DELETE_TABSET","FlexLayout_DeleteTabset"),D(ce,"SET_ACTIVE_TABSET","FlexLayout_SetActiveTabset"),D(ce,"ADJUST_WEIGHTS","FlexLayout_AdjustWeights"),D(ce,"ADJUST_BORDER_SPLIT","FlexLayout_AdjustBorderSplit"),D(ce,"MAXIMIZE_TOGGLE","FlexLayout_MaximizeToggle"),D(ce,"UPDATE_MODEL_ATTRIBUTES","FlexLayout_UpdateModelAttributes"),D(ce,"UPDATE_NODE_ATTRIBUTES","FlexLayout_UpdateNodeAttributes"),D(ce,"UPDATE_SUBLAYOUT_ATTRIBUTES","FlexLayout_UpdateSubLayoutAttributes"),D(ce,"POPOUT_TAB","FlexLayout_PopoutTab"),D(ce,"POPOUT_TABSET","FlexLayout_PopoutTabset"),D(ce,"CLOSE_POPOUT","FlexLayout_ClosePopout"),D(ce,"MOVE_POPOUT_TO_FRONT","FlexLayout_MoveFloatToFront"),D(ce,"MOVE_FLOAT","FlexLayout_MoveFloat"),D(ce,"DOCK_FLOAT_TO_LAYOUT","FlexLayout_DockFloatToLayout"),D(ce,"POPOUT_FLOAT","FlexLayout_PopoutFloat"),D(ce,"CREATE_SUBLAYOUT","FlexLayout_CreateSubLayout"),D(ce,"GROUP","FlexLayout_Group"),ce),Ue=class{constructor(e,t){D(this,"type");D(this,"data");D(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}}},Qm=class extends Ue{constructor(t){super(oe.GROUP,t);D(this,"actions");this.actions=t}},Rt=class{constructor(e,t,r,o,n){D(this,"node");D(this,"rect");D(this,"location");D(this,"index");D(this,"className");this.node=e,this.rect=t,this.location=r,this.index=o,this.className=n}},V=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}({}),bc=class{constructor(e){D(this,"model");D(this,"attributes");D(this,"parent");D(this,"children");D(this,"rect");D(this,"path");D(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 ja(e){return e.ctrlKey||e.shiftKey||e.altKey||e.metaKey}function Nk(e){return{...Ck,...e}}function jo(e){return e?.replace(/\bctrl\b/i,"Control")}function rx(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 Jl(e,t){const r=[..._h("iframe",t),..._h("webview",t)];for(const o of r)o.style.pointerEvents=e?"auto":"none"}function _h(e,t){return[...t.getElementsByTagName(e)]}var Zl=!1;function Ds(e,t,r,o,n){Zl=!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(),Zl=!1,n()},c=()=>{a(),Zl=!1,o()};e.addEventListener("pointermove",i),e.addEventListener("pointerup",c),e.addEventListener("pointercancel",l)}function ox(e){let t;return e.getController().getModel().visitNodes(r=>{r instanceof Ce&&r.getSubLayoutId()===e.getLayoutId()&&(t=r.getLayout())}),t}function nx(e,t){const r=t.getType();if(r==="window")return e.isAllowedInWindow();if(r==="float")return!0;if(r==="tab"){const o=ox(t);return!(o&&o.getType()==="window"&&!o.isMainLayout()&&!e.isAllowedInWindow()||ix(e))}return!1}function ix(e){return e instanceof Ce?e.getSubLayoutId()!==void 0:e.getChildren().some(t=>ix(t))}function wh(e,t){const r=e.getAttribute("style");return r===t.getAttribute("style")?!1:(r?t.setAttribute("style",r):t.removeAttribute("style"),!0)}function Ok(){const e=navigator.userAgent;return e.includes("Safari")&&!e.includes("Chrome")&&!e.includes("Chromium")}function Mk(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,Ve=(je=class extends bc{constructor(r,o){super(r);D(this,"layout");D(this,"minHeight");D(this,"minWidth");D(this,"maxHeight");D(this,"maxWidth");this.minHeight=1,this.minWidth=1,this.maxHeight=Jr,this.maxWidth=Jr,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()===we.HORZ,n=this.getChildren(),i=this.model.getSplitterSize(),a=n[0].getRect(),l=n[n.length-1].getRect();let c=o?[a.x,l.getRight()]:[a.y,l.getBottom()];const u=o?[a.x,l.getRight()]:[a.y,l.getBottom()];for(let d=0;d0&&(c[0]+=i,u[0]+=i)}for(let d=n.length-1;d>=r;d--){const f=n[d];c[1]-=(o?f.getMinWidth():f.getMinHeight())+i,u[1]-=(o?Math.max(f.getMinWidth(),f.getMaxWidth()):Math.max(f.getMinHeight(),f.getMaxHeight()))+i}return c=[Math.max(u[1],c[0]),Math.min(u[0],c[1])],c[0]>c[1]&&(c=[c[0],c[0]]),c}getSplitterInitials(r){const o=this.getOrientation()===we.HORZ,n=this.getChildren(),i=this.model.getSplitterSize(),a=[];let l=0;for(let d=0;df?(g=u[r]+p-f,u[r]=f):u[r]+=p;for(let m=r-1;m>=0;m--){const _=c[m],k=l?_.getMinWidth():_.getMinHeight();if(u[m]-p>k){u[m]-=p;break}else p-=u[m]-k,u[m]=k}for(let m=r+1;mf?(g=u[r-1]+p-f,u[r-1]=f):u[r-1]+=p;for(let m=r;mk){u[m]-=p;break}else p-=u[m]-k,u[m]=k}for(let m=r-1;m>=0;m--){const _=c[m],k=l?_.getMaxWidth():_.getMaxHeight();if(u[m]+gMath.max(.1,d)*100/i)}getMinWidth(){return this.minWidth}getMinHeight(){return this.minHeight}getMaxWidth(){return this.maxWidth}getMaxHeight(){return this.maxHeight}calcMinMaxSize(){this.minHeight=1,this.minWidth=1,this.maxHeight=Jr,this.maxWidth=Jr;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()===we.VERT?(this.minHeight+=n.getMinHeight(),this.maxHeight+=i,r||(this.minHeight+=this.model.getSplitterSize(),this.maxHeight+=this.model.getSplitterSize()),this.minWidth=Math.max(this.minWidth,n.getMinWidth()),this.maxWidth=Math.min(this.maxWidth,a)):(this.minWidth+=n.getMinWidth(),this.maxWidth+=a,r||(this.minWidth+=this.model.getSplitterSize(),this.maxWidth+=this.model.getSplitterSize()),this.minHeight=Math.max(this.minHeight,n.getMinHeight()),this.maxHeight=Math.min(this.maxHeight,i)),r=!1}this.maxWidth=Math.max(this.maxWidth,this.minWidth),this.maxHeight=Math.max(this.maxHeight,this.minHeight)}tidy(){let r=0;for(;ru/2-f&&athis.rect.getRight()-d&&a>u/2-f&&ac/2-f&&lthis.rect.getBottom()-d&&l>c/2-f&&ld+f.getWeight(),0);c===0&&(c=100),l.setWeight(c/3);const u=!this.model.isRootOrientationVertical();if(i===te.CENTER)n===-1?this.addChild(l,this.children.length):this.addChild(l,n);else if(u&&i===te.LEFT||!u&&i===te.TOP)this.addChild(l,0);else if(u&&i===te.RIGHT||!u&&i===te.BOTTOM)this.addChild(l);else if(u&&i===te.TOP||!u&&i===te.LEFT){const d=new je(this.model,{}),f=new je(this.model,{});f.setWeight(75),l.setWeight(25);for(const p of this.children)f.addChild(p);this.removeAll(),d.addChild(l),d.addChild(f),this.addChild(d)}else if(u&&i===te.BOTTOM||!u&&i===te.RIGHT){const d=new je(this.model,{}),f=new je(this.model,{});f.setWeight(75),l.setWeight(25);for(const p of this.children)f.addChild(p);this.removeAll(),d.addChild(f),d.addChild(l),this.addChild(d)}l instanceof 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 nt.ensureAttributePairing(),je.attributeDefinitions}static createAttributeDefinitions(){const r=new Si;return r.add("type",je.TYPE,!0).setType(re.STRING).setFixed(),r.add("id",void 0).setType(re.STRING).setDescription("the unique id of the row, if left undefined a uuid will be assigned"),r.add("weight",100).setType(re.NUMBER).setDescription("relative weight for sizing of this row in parent row"),r}},D(je,"TYPE","row"),D(je,"attributeDefinitions",je.createAttributeDefinitions()),je),vt,Oe=(vt=class extends bc{constructor(r,o){super(r);D(this,"tabStripRect",he.empty());D(this,"contentRect",he.empty());D(this,"calculatedMinHeight");D(this,"calculatedMinWidth");D(this,"calculatedMaxHeight");D(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=Ce.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=te.CENTER,u=this.tabStripRect;a=new Rt(this,u,c,-1,V.FLEXLAYOUT__OUTLINE_RECT)}else{if(this.getLayoutId()!==nt.MAIN_LAYOUT_ID&&!nx(r,l))return;if(this.contentRect.contains(o,n)){let c=te.CENTER;if(this.model.getMaximizedTabset(this.getLayoutId())===void 0){const d=!i&&this.isEnableDrop(),f=this.isEnableDivide();if(!d&&!f)return;d&&f?c=te.getLocation(this.contentRect,o,n):d?c=te.CENTER:c=te.getLocation(this.contentRect,o,n,!0)}const u=c.getDockRect(this.rect);a=new Rt(this,u,c,-1,V.FLEXLAYOUT__OUTLINE_RECT)}else if(this.tabStripRect!=null&&this.tabStripRect.contains(o,n)){let c,u,d;if(this.children.length===0)c=this.tabStripRect.clone(),u=c.y+3,d=c.height-4,c.width=2;else{let f=this.children[0];c=f.getTabRect(),u=c.y,d=c.height;let p=this.tabStripRect.x;for(let g=0;g0){const c=this.getPinnedRunLength(),u=r instanceof Ce&&r.isPinned()?Math.min(a.index,c):Math.max(a.index,c);if(u!==a.index){let d;if(u0&&n--,a===te.CENTER){let u=n;u===-1&&(u=this.children.length);const d=this.getPinnedRunLength();if(r instanceof Ce?u=r.isPinned()?Math.min(u,d):Math.max(u,d):u=Math.max(u,d),r instanceof Ce)this.addChild(r,u),i||i!==!1&&this.isAutoSelectTab()?this.setSelected(u):Ql(this,u);else if(r instanceof Ve){const f=u;r.forEachNode((p,g)=>{p instanceof Ce&&(this.addChild(p,u),u++)},0),Ql(this,f,u-f)}else{const f=u;for(let p=0;p0&&this.setSelected(0)}this.model.setActiveTabset(this,this.parent.getLayoutId())}else{let u=r;if(r instanceof Ce){const p=this.model.getOnCreateTabSet();u=new vt(this.model,p?p(r):{}),u.addChild(r)}else if(r instanceof Ve){const p=this.getParent();if(r.getOrientation()===p.getOrientation()&&(o.getOrientation()===p.getOrientation()||o===te.CENTER)){const g=new Ve(this.model,{});g.addChild(r),u=g}}else u=r;const d=this.parent,f=d.getChildren().indexOf(this);if(d.getOrientation()===a.orientation)u.setWeight(this.getWeight()/2),this.setWeight(this.getWeight()/2),d.addChild(u,f+a.indexPlus);else{const p=new Ve(this.model,{});if(p.setWeight(this.getWeight()),p.addChild(this),this.setWeight(50),r instanceof Ve&&r.getChildren().length>0&&r.getOrientation()!==d.getOrientation()){const g=r.getChildren(),m=g.reduce((k,b)=>k+b.getWeight(),0);let _=a.indexPlus;for(const k of g)k.setWeight(m===0?50/g.length:50*k.getWeight()/m),p.addChild(k,_++)}else u.setWeight(50),p.addChild(u,a.indexPlus);d.removeChild(this),d.addChild(p,f)}u instanceof vt&&this.model.setActiveTabset(u,this.getLayoutId())}this.model.tidy()}updateAttrs(r){vt.attributeDefinitions.update(r,this.attributes)}getAttributeDefinitions(){return vt.attributeDefinitions}static getAttributeDefinitions(){return nt.ensureAttributePairing(),vt.attributeDefinitions}static createAttributeDefinitions(){const r=new Si;return r.add("type",vt.TYPE,!0).setType(re.STRING).setFixed(),r.add("id",void 0).setType(re.STRING).setDescription("the unique id of the tab set, if left undefined a uuid will be assigned"),r.add("weight",100).setType(re.NUMBER).setDescription("relative weight for sizing of this tabset in parent row"),r.add("selected",0).setType(re.NUMBER).setDescription("index of selected/visible tab in tabset; -1 means no tab selected"),r.add("name",void 0).setType(re.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}},D(vt,"TYPE","tabset"),D(vt,"attributeDefinitions",vt.createAttributeDefinitions()),vt);function Ql(e,t,r=1){const o=e.getSelected();r>0&&o!==-1&&t<=o&&e.setSelected(o+r)}function Is(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 Mn(){return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,e=>(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16))}var kt,Je=(kt=class extends bc{constructor(r,o,n){super(n);D(this,"contentRect",he.empty());D(this,"tabHeaderRect",he.empty());D(this,"location");this.location=r,this.attributes.id=`border_${r.getName()}`,kt.attributeDefinitions.fromJson(o,this.attributes),n.addNode(this)}static fromJson(r,o){const n=te.getByName(r.location),i=new kt(n,r,o);return r.children&&(i.children=r.children.map(a=>{const l=Ce.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===we.HORZ}getSize(){const r=this.getAttr("size"),o=this.getSelected();if(o===-1)return r;{const n=this.children[o],i=this.isHorizontal()?n.getAttr("borderWidth"):n.getAttr("borderHeight");return i===-1?r:i}}getMinSize(){const r=this.getSelectedNode();let o=this.getAttr("minSize");if(r){const n=this.isHorizontal()?r.getMinWidth():r.getMinHeight();o=Math.max(o,n)}return o}getMaxSize(){const r=this.getSelectedNode();let o=this.getAttr("maxSize");if(r){const n=this.isHorizontal()?r.getMaxWidth():r.getMaxHeight();o=Math.min(o,n)}return o}getSelected(){return this.attributes.selected}isAutoHide(){return this.getAttr("enableAutoHide")}getBorderType(){return this.getAttr("borderType")}isOverlay(){return this.getAttr("borderType")==="overlay"}setBorderType(r){this.attributes.borderType=r}getSelectedNode(){if(this.getSelected()!==-1)return this.children[this.getSelected()]}getOrientation(){return this.location.getOrientation()}getConfig(){return this.attributes.config}isMaximized(){return!1}isShowing(){return this.attributes.show}toJson(){const r={location:"bottom"};return kt.attributeDefinitions.toJson(r,this.attributes),r.location=this.location.getName(),r.children=this.children.map(o=>o.toJson()),r}isAutoSelectTabWhenOpen(){return this.getAttr("autoSelectTabWhenOpen")}isAutoSelectTabWhenClosed(){return this.getAttr("autoSelectTabWhenClosed")}isAutoSelectTab(r){return r==null&&(r=this.getSelected()!==-1),r?this.isAutoSelectTabWhenOpen():this.isAutoSelectTabWhenClosed()}isEnableTabScrollbar(){return this.getAttr("enableTabScrollbar")}setSelected(r){this.attributes.selected=r}setTabHeaderRect(r){this.tabHeaderRect=r}getRect(){return this.tabHeaderRect}getContentRect(){return this.contentRect}setContentRect(r){this.contentRect=r}isEnableDrop(){return this.getAttr("enableDrop")}setSize(r){const o=this.getSelected();if(o===-1)this.attributes.size=r;else{const n=this.children[o];(this.isHorizontal()?n.getAttr("borderWidth"):n.getAttr("borderHeight"))===-1?this.attributes.size=r:this.isHorizontal()?n.setBorderWidth(r):n.setBorderHeight(r)}}updateAttrs(r){kt.attributeDefinitions.update(r,this.attributes)}remove(r){const o=this.removeChild(r);this.getSelected()!==-1&&Is(this,o)}canDrop(r,o,n,i=!1){if(!(r instanceof Ce))return;let a;const l=te.CENTER;if(this.tabHeaderRect.contains(o,n)){if(this.location.orientation===we.VERT)if(this.children.length>0){let c=this.children[0],u=c.getTabRect();const d=u.y,f=u.height;let p=this.tabHeaderRect.x;for(let g=0;g=p&&o0){let c=this.children[0],u=c.getTabRect();const d=u.x,f=u.width;let p=this.tabHeaderRect.y;for(let g=0;g=p&&n0&&n--;let c=n;c===-1&&(c=this.children.length),this.addChild(r,c),i||i!==!1&&this.isAutoSelectTab()?this.setSelected(c):Ql(this,c),this.model.tidy()}getSplitterBounds(r=!1){const o=[0,0],n=this.model.getRootRow(nt.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===te.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===te.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===te.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===te.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===te.BOTTOM||this.location===te.RIGHT?Math.max(0,n[1]-o):Math.max(0,o-n[0])}getAttributeDefinitions(){return kt.attributeDefinitions}static getAttributeDefinitions(){return nt.ensureAttributePairing(),kt.attributeDefinitions}static createAttributeDefinitions(){const r=new Si;return r.add("type",kt.TYPE,!0).setType(re.STRING).setFixed(),r.add("selected",-1).setType(re.NUMBER).setDescription("index of selected/visible tab in border; -1 means no tab selected"),r.add("borderType","split").setType(re.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(re.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}},D(kt,"TYPE","border"),D(kt,"attributeDefinitions",kt.createAttributeDefinitions()),kt),kh=class ay{constructor(t){D(this,"borders");D(this,"borderMap");this.borders=[],this.borderMap=new Map}static fromJson(t,r){const o=new ay(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}}},fn=function(e){return e[e.Visible=1]="Visible",e[e.Always=2]="Always",e[e.Selected=3]="Selected",e}({}),Kt,On=(Kt=class{constructor(t,r,o,n,i){D(this,"_layoutId");D(this,"_type");D(this,"_rect");D(this,"_path");D(this,"attributes");D(this,"_controller");D(this,"_rootRow");D(this,"_maximizedTabSet");D(this,"_activeTabSet");D(this,"_toExportRectFunction");this.attributes={},Kt.attributeDefinitions.fromJson(i??{},this.attributes),this._layoutId=t,this._type=o,this._rect=n,this._toExportRectFunction=(a,l)=>a,t===nt.MAIN_LAYOUT_ID?this._path="":this._path="/sublayout"+r}getPath(){return this._path}visitNodes(t){this.getRootRow()?.forEachNode(t,0)}isMainLayout(){return this._layoutId===nt.MAIN_LAYOUT_ID}getLayoutId(){return this._layoutId}getType(){return this._type}getName(){return this.getAttr("name")}getAttr(t){return this.attributes[t]}getAttributeDefinitions(){return Kt.attributeDefinitions}updateAttrs(t){Kt.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 Kt.attributeDefinitions}static createAttributeDefinitions(){const t=new Li;return t.add("name",void 0).setType(re.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 Kt.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===nt.MAIN_LAYOUT_ID?0:r.getNextSubLayoutId(),l=new Kt(o,a,t.type||"window",i,t);return l.setRootRow(Ve.fromJson(t.layout,r,l)),l}},D(Kt,"attributeDefinitions",Kt.createAttributeDefinitions()),Kt),Jr=99999,be,nt=(be=class{constructor(){D(this,"attributes");D(this,"layouts");D(this,"borders");D(this,"changeListeners");D(this,"idMap");D(this,"mainLayout");D(this,"adoptedFromModel");D(this,"splitterSize");D(this,"onAllowDrop");D(this,"onCreateTabSet");D(this,"nextSubLayoutId");this.attributes={},this.layouts=new Map,this.borders=new kh(this),this.idMap=new Map,this.changeListeners=[],this.nextSubLayoutId=1,this.mainLayout=new On(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",Ve.getAttributeDefinitions()),be.attributeDefinitions.pairAttributes("TabSetNode",Me.getAttributeDefinitions()),be.attributeDefinitions.pairAttributes("TabNode",Ce.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 oe.ADD_TAB:{const o=new Ce(this,t.data.json,!0),n=this.idMap.get(t.data.toNode);(n instanceof Me||n instanceof Je||n instanceof Ve)&&(n.drop(o,te.getByName(t.data.location),t.data.index,t.data.select),r=o);break}case oe.MOVE_NODE:{const o=this.idMap.get(t.data.fromNode);if(o instanceof Ce||o instanceof Me||o instanceof Ve){o===this.getMaximizedTabset(o.getLayoutId())&&this.layouts.get(o.getLayoutId()).setMaximizedTabSet(void 0);const n=this.idMap.get(t.data.toNode);(n instanceof Me||n instanceof Je||n instanceof Ve)&&n.drop(o,te.getByName(t.data.location),t.data.index,t.data.select)}break}case oe.DELETE_TAB:{const o=this.idMap.get(t.data.node);o instanceof Ce&&o.delete();break}case oe.DELETE_TABSET:{const o=this.idMap.get(t.data.node);if(o instanceof Me){const n=[...o.getChildren()];for(let i=0;i{u instanceof Ce&&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 oe.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 Me)return r;if(r instanceof Ve)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=kh.fromJson(t.borders,o));const n=t.subLayouts||t.popouts;if(n)for(const i in n){const a=n[i],l=On.fromJson(a,o,i);o.layouts.set(i,l)}return o.mainLayout.setRootRow(Ve.fromJson(t.layout,o,o.mainLayout)),o.tidy(),r&&(o.adoptedFromModel=r,r.adoptedFromModel=void 0,o.visitNodes(i=>{if(i instanceof Ce){const a=r.getNodeById(i.getId());a instanceof Ce&&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"#"+Dn()}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(Ve.getAttributeDefinitions().toTypescriptInterface("Row",be.attributeDefinitions)),t.push(Me.getAttributeDefinitions().toTypescriptInterface("TabSet",be.attributeDefinitions)),t.push(Ce.getAttributeDefinitions().toTypescriptInterface("Tab",be.attributeDefinitions)),t.push(Je.getAttributeDefinitions().toTypescriptInterface("Border",be.attributeDefinitions)),t.push(On.getAttributeDefinitions().toTypescriptInterface("SubLayout",void 0)),t.join(` -`)}static createAttributeDefinitions(){const t=new Li;return t.add("enableEdgeDock",!0).setType(re.BOOLEAN).setDescription("enable docking to the edges of the layout"),t.add("enableEdgeDockIndicators",!0).setType(re.BOOLEAN).setDescription("show the edge indicators when dragging"),t.add("rootOrientationVertical",!1).setType(re.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(re.BOOLEAN).setDescription("boolean indicating if tab icons should rotate with the text in the left and right borders"),t.add("tabEnableClose",!0).setType(re.BOOLEAN),t.add("tabCloseType",1).setType("ICloseType").setValues([{value:fn.Visible,label:"Visible"},{value:fn.Always,label:"Always"},{value:fn.Selected,label:"Selected"}]),t.add("tabEnablePopout",!1).setType(re.BOOLEAN).setAlias("tabEnableFloat"),t.add("tabEnablePopoutIcon",!0).setType(re.BOOLEAN),t.add("tabEnablePopoutFloatIcon",!1).setType(re.BOOLEAN),t.add("tabEnablePopoutOverlay",!1).setType(re.BOOLEAN),t.add("tabEnableDrag",!0).setType(re.BOOLEAN),t.add("tabEnableRename",!0).setType(re.BOOLEAN),t.add("tabEnablePin",!0).setType(re.BOOLEAN),t.add("tabContentClassName",void 0).setType(re.STRING),t.add("tabClassName",void 0).setType(re.STRING),t.add("tabIcon",void 0).setType(re.STRING),t.add("tabEnableRenderOnDemand",!0).setType(re.BOOLEAN),t.add("tabBorderWidth",-1).setType(re.NUMBER),t.add("tabBorderHeight",-1).setType(re.NUMBER),t.add("tabEnableScrollbars",!0).setType(re.BOOLEAN),t.add("tabSetEnableDeleteWhenEmpty",!0).setType(re.BOOLEAN),t.add("tabSetEnableDrop",!0).setType(re.BOOLEAN),t.add("tabSetEnableDrag",!0).setType(re.BOOLEAN),t.add("tabSetEnableDivide",!0).setType(re.BOOLEAN),t.add("tabSetEnableMaximize",!0).setType(re.BOOLEAN),t.add("tabSetEnableClose",!0).setType(re.BOOLEAN),t.add("tabSetEnableCloseButton",!1).setType(re.BOOLEAN),t.add("tabSetEnableSingleTabStretch",!1).setType(re.BOOLEAN),t.add("tabSetAutoSelectTab",!0).setType(re.BOOLEAN),t.add("tabSetEnableActiveIcon",!1).setType(re.BOOLEAN),t.add("tabSetClassNameTabStrip",void 0).setType(re.STRING),t.add("tabSetEnableTabStrip",!0).setType(re.BOOLEAN),t.add("tabSetEnableTabWrap",!1).setType(re.BOOLEAN),t.add("tabSetTabLocation","top").setType("ITabLocation").setValues(["top","bottom"]),t.add("tabMinWidth",1).setType(re.NUMBER),t.add("tabMinHeight",1).setType(re.NUMBER),t.add("tabSetMinWidth",1).setType(re.NUMBER),t.add("tabSetMinHeight",1).setType(re.NUMBER),t.add("tabMaxWidth",Jr).setType(re.NUMBER),t.add("tabMaxHeight",Jr).setType(re.NUMBER),t.add("tabSetMaxWidth",Jr).setType(re.NUMBER),t.add("tabSetMaxHeight",Jr).setType(re.NUMBER),t.add("tabSetEnableTabScrollbar",!1).setType(re.BOOLEAN),t.add("borderSize",200).setType(re.NUMBER),t.add("borderMinSize",1).setType(re.NUMBER),t.add("borderMaxSize",Jr).setType(re.NUMBER),t.add("borderEnableDrop",!0).setType(re.BOOLEAN),t.add("borderAutoSelectTabWhenOpen",!0).setType(re.BOOLEAN),t.add("borderAutoSelectTabWhenClosed",!1).setType(re.BOOLEAN),t.add("borderClassName",void 0).setType(re.STRING),t.add("borderEnableAutoHide",!1).setType(re.BOOLEAN),t.add("borderEnableTabScrollbar",!1).setType(re.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}},D(be,"MAIN_LAYOUT_ID","__main_layout_id__"),D(be,"attributeDefinitions",be.createAttributeDefinitions()),D(be,"attributePairingDone",!1),be),Et,Ce=(Et=class extends yc{constructor(r,o,n=!0){super(r);D(this,"tabRect",he.empty());D(this,"renderedName");D(this,"extra");D(this,"visible");D(this,"rendered");D(this,"moveableElement");D(this,"tabStamp");D(this,"scrollTop");D(this,"scrollLeft");this.extra={},this.moveableElement=null,this.tabStamp=null,this.rendered=!1,this.visible=!1,Et.attributeDefinitions.fromJson(o,this.attributes),n===!0&&r.addNode(this)}static fromJson(r,o,n=!0){return new Et(o,r,n)}getName(){return this.getAttr("name")}getIcon(){return this.getAttr("icon")}getSubLayoutId(){return this.getAttr("subLayoutId")}getHelpText(){return this.getAttr("helpText")}getComponent(){return this.getAttr("component")}getAltName(){return this.getAttr("altName")}getWindowId(){const r=this.getLayout();if(r)return r.getWindowId()}getConfig(){return this.attributes.config}getExtraData(){return this.extra}isPoppedOut(){return this.getLayoutId()!==nt.MAIN_LAYOUT_ID}isSelected(){return this.getParent().getSelectedNode()===this}isPinned(){return this.getAttr("pinned")}isCloseable(){if(this.isPinned())return!1;let r=this.isEnableClose();if(r&&this.getSubLayoutId()){const o=this.model.getLayouts().get(this.getSubLayoutId());o&&(r=o.getRootRow().isCloseable())}return r}isAllowedInWindow(){let r=this.isEnablePopout();if(r&&this.getSubLayoutId()){const o=this.model.getLayouts().get(this.getSubLayoutId());o&&(r=o.getRootRow().isAllowedInWindow())}return r}isEnableClose(){return this.getAttr("enableClose")}isEnableScrollbars(){return this.getAttr("enableScrollbars")}getCloseType(){return this.getAttr("closeType")}isEnablePopout(){return this.getAttr("enablePopout")}isEnablePopoutIcon(){return this.getAttr("enablePopoutIcon")}isEnablePopoutFloatIcon(){return this.getAttr("enablePopoutFloatIcon")}isEnablePopoutOverlay(){return this.getAttr("enablePopoutOverlay")}isEnableDrag(){return this.getAttr("enableDrag")}isEnableRename(){return this.getAttr("enableRename")}isEnablePin(){return this.getAttr("enablePin")}isEnableWindowReMount(){return this.getAttr("enableWindowReMount")}getClassName(){return this.getAttr("className")}getContentClassName(){return this.getAttr("contentClassName")}getTabSetClassName(){return this.getAttr("tabsetClassName")}isEnableRenderOnDemand(){return this.getAttr("enableRenderOnDemand")}getMinWidth(){return this.getAttr("minWidth")}getMinHeight(){return this.getAttr("minHeight")}getMaxWidth(){return this.getAttr("maxWidth")}getMaxHeight(){return this.getAttr("maxHeight")}getBorderWidth(){return this.getAttr("borderWidth")}getBorderHeight(){return this.getAttr("borderHeight")}isVisible(){return this.visible}toJson(){const r={};return Et.attributeDefinitions.toJson(r,this.attributes),r}saveScrollPosition(){this.moveableElement&&(this.scrollLeft=this.moveableElement.scrollLeft,this.scrollTop=this.moveableElement.scrollTop)}restoreScrollPosition(){(this.scrollTop||this.scrollLeft)&&requestAnimationFrame(()=>{this.moveableElement&&(this.moveableElement.scrollTop=this.scrollTop??0,this.moveableElement.scrollLeft=this.scrollLeft??0)})}setRect(r){r.equalsWhenRounded(this.rect)||this.fireEvent("resize",{rect:r}),this.rect=r}setVisible(r){r!==this.visible&&(this.visible=r,this.fireEvent("visibility",{visible:r}))}setScrollTop(r){this.scrollTop=r}setScrollLeft(r){this.scrollLeft=r}isRendered(){return this.rendered}setRendered(r){this.rendered=r}getTabRect(){return this.tabRect}setTabRect(r){this.tabRect=r}getTabStamp(){return this.tabStamp}setTabStamp(r){this.tabStamp=r}getMoveableElement(){return this.moveableElement===null&&(this.moveableElement=document.createElement("div"),this.moveableElement.className=V.FLEXLAYOUT__TAB_MOVEABLE),this.moveableElement}setMoveableElement(r){this.moveableElement=r}setRenderedName(r){this.renderedName=r}getNameForOverflowMenu(){const r=this.getAttr("altName");return r!==void 0?r:this.renderedName}setName(r){this.attributes.name=r}setPinned(r){this.attributes.pinned=r}delete(){this.parent.remove(this),this.deleteSubLayout(),this.fireEvent("close",{})}adoptViewState(r){this.moveableElement=r.moveableElement,r.moveableElement=null,this.tabStamp=r.tabStamp,this.scrollTop=r.scrollTop,this.scrollLeft=r.scrollLeft,this.rendered=r.rendered,this.visible=r.visible,this.rect=r.rect,this.tabRect=r.tabRect,this.extra=r.extra}deleteSubLayout(){const r=this.getSubLayoutId();if(r){const o=this.model.getLayouts().get(r);this.model.getLayouts().delete(r),o&&o.getRootRow()?.forEachNode(n=>{n instanceof Et&&(n.deleteSubLayout(),n.fireEvent("close",{}))},0)}}updateAttrs(r){Et.attributeDefinitions.update(r,this.attributes)}getAttributeDefinitions(){return Et.attributeDefinitions}setBorderWidth(r){this.attributes.borderWidth=r}setBorderHeight(r){this.attributes.borderHeight=r}static getAttributeDefinitions(){return nt.ensureAttributePairing(),Et.attributeDefinitions}static createAttributeDefinitions(){const r=new Li;return r.add("type",Et.TYPE,!0).setType(re.STRING).setFixed(),r.add("id",void 0).setType(re.STRING).setDescription("the unique id of the tab, if left undefined a uuid will be assigned"),r.add("name","[Unnamed Tab]").setType(re.STRING).setDescription("name of tab to be displayed in the tab button"),r.add("component",void 0).setType(re.STRING).setDescription("string identifying which component to render in this tab (used in the layout factory function)"),r.add("subLayoutId",void 0).setType(re.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}},D(kt,"TYPE","border"),D(kt,"attributeDefinitions",kt.createAttributeDefinitions()),kt),kh=class ax{constructor(t){D(this,"borders");D(this,"borderMap");this.borders=[],this.borderMap=new Map}static fromJson(t,r){const o=new ax(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}}},fn=function(e){return e[e.Visible=1]="Visible",e[e.Always=2]="Always",e[e.Selected=3]="Selected",e}({}),Kt,Cn=(Kt=class{constructor(t,r,o,n,i){D(this,"_layoutId");D(this,"_type");D(this,"_rect");D(this,"_path");D(this,"attributes");D(this,"_controller");D(this,"_rootRow");D(this,"_maximizedTabSet");D(this,"_activeTabSet");D(this,"_toExportRectFunction");this.attributes={},Kt.attributeDefinitions.fromJson(i??{},this.attributes),this._layoutId=t,this._type=o,this._rect=n,this._toExportRectFunction=(a,l)=>a,t===nt.MAIN_LAYOUT_ID?this._path="":this._path="/sublayout"+r}getPath(){return this._path}visitNodes(t){this.getRootRow()?.forEachNode(t,0)}isMainLayout(){return this._layoutId===nt.MAIN_LAYOUT_ID}getLayoutId(){return this._layoutId}getType(){return this._type}getName(){return this.getAttr("name")}getAttr(t){return this.attributes[t]}getAttributeDefinitions(){return Kt.attributeDefinitions}updateAttrs(t){Kt.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 Kt.attributeDefinitions}static createAttributeDefinitions(){const t=new Si;return t.add("name",void 0).setType(re.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 Kt.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===nt.MAIN_LAYOUT_ID?0:r.getNextSubLayoutId(),l=new Kt(o,a,t.type||"window",i,t);return l.setRootRow(Ve.fromJson(t.layout,r,l)),l}},D(Kt,"attributeDefinitions",Kt.createAttributeDefinitions()),Kt),Jr=99999,be,nt=(be=class{constructor(){D(this,"attributes");D(this,"layouts");D(this,"borders");D(this,"changeListeners");D(this,"idMap");D(this,"mainLayout");D(this,"adoptedFromModel");D(this,"splitterSize");D(this,"onAllowDrop");D(this,"onCreateTabSet");D(this,"nextSubLayoutId");this.attributes={},this.layouts=new Map,this.borders=new kh(this),this.idMap=new Map,this.changeListeners=[],this.nextSubLayoutId=1,this.mainLayout=new Cn(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",Ve.getAttributeDefinitions()),be.attributeDefinitions.pairAttributes("TabSetNode",Oe.getAttributeDefinitions()),be.attributeDefinitions.pairAttributes("TabNode",Ce.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 oe.ADD_TAB:{const o=new Ce(this,t.data.json,!0),n=this.idMap.get(t.data.toNode);(n instanceof Oe||n instanceof Je||n instanceof Ve)&&(n.drop(o,te.getByName(t.data.location),t.data.index,t.data.select),r=o);break}case oe.MOVE_NODE:{const o=this.idMap.get(t.data.fromNode);if(o instanceof Ce||o instanceof Oe||o instanceof Ve){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 Ve)&&n.drop(o,te.getByName(t.data.location),t.data.index,t.data.select)}break}case oe.DELETE_TAB:{const o=this.idMap.get(t.data.node);o instanceof Ce&&o.delete();break}case oe.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 Ce&&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 oe.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 Ve)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=kh.fromJson(t.borders,o));const n=t.subLayouts||t.popouts;if(n)for(const i in n){const a=n[i],l=Cn.fromJson(a,o,i);o.layouts.set(i,l)}return o.mainLayout.setRootRow(Ve.fromJson(t.layout,o,o.mainLayout)),o.tidy(),r&&(o.adoptedFromModel=r,r.adoptedFromModel=void 0,o.visitNodes(i=>{if(i instanceof Ce){const a=r.getNodeById(i.getId());a instanceof Ce&&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"#"+Mn()}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(Ve.getAttributeDefinitions().toTypescriptInterface("Row",be.attributeDefinitions)),t.push(Oe.getAttributeDefinitions().toTypescriptInterface("TabSet",be.attributeDefinitions)),t.push(Ce.getAttributeDefinitions().toTypescriptInterface("Tab",be.attributeDefinitions)),t.push(Je.getAttributeDefinitions().toTypescriptInterface("Border",be.attributeDefinitions)),t.push(Cn.getAttributeDefinitions().toTypescriptInterface("SubLayout",void 0)),t.join(` +`)}static createAttributeDefinitions(){const t=new Si;return t.add("enableEdgeDock",!0).setType(re.BOOLEAN).setDescription("enable docking to the edges of the layout"),t.add("enableEdgeDockIndicators",!0).setType(re.BOOLEAN).setDescription("show the edge indicators when dragging"),t.add("rootOrientationVertical",!1).setType(re.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(re.BOOLEAN).setDescription("boolean indicating if tab icons should rotate with the text in the left and right borders"),t.add("tabEnableClose",!0).setType(re.BOOLEAN),t.add("tabCloseType",1).setType("ICloseType").setValues([{value:fn.Visible,label:"Visible"},{value:fn.Always,label:"Always"},{value:fn.Selected,label:"Selected"}]),t.add("tabEnablePopout",!1).setType(re.BOOLEAN).setAlias("tabEnableFloat"),t.add("tabEnablePopoutIcon",!0).setType(re.BOOLEAN),t.add("tabEnablePopoutFloatIcon",!1).setType(re.BOOLEAN),t.add("tabEnablePopoutOverlay",!1).setType(re.BOOLEAN),t.add("tabEnableDrag",!0).setType(re.BOOLEAN),t.add("tabEnableRename",!0).setType(re.BOOLEAN),t.add("tabEnablePin",!0).setType(re.BOOLEAN),t.add("tabContentClassName",void 0).setType(re.STRING),t.add("tabClassName",void 0).setType(re.STRING),t.add("tabIcon",void 0).setType(re.STRING),t.add("tabEnableRenderOnDemand",!0).setType(re.BOOLEAN),t.add("tabBorderWidth",-1).setType(re.NUMBER),t.add("tabBorderHeight",-1).setType(re.NUMBER),t.add("tabEnableScrollbars",!0).setType(re.BOOLEAN),t.add("tabSetEnableDeleteWhenEmpty",!0).setType(re.BOOLEAN),t.add("tabSetEnableDrop",!0).setType(re.BOOLEAN),t.add("tabSetEnableDrag",!0).setType(re.BOOLEAN),t.add("tabSetEnableDivide",!0).setType(re.BOOLEAN),t.add("tabSetEnableMaximize",!0).setType(re.BOOLEAN),t.add("tabSetEnableClose",!0).setType(re.BOOLEAN),t.add("tabSetEnableCloseButton",!1).setType(re.BOOLEAN),t.add("tabSetEnableSingleTabStretch",!1).setType(re.BOOLEAN),t.add("tabSetAutoSelectTab",!0).setType(re.BOOLEAN),t.add("tabSetEnableActiveIcon",!1).setType(re.BOOLEAN),t.add("tabSetClassNameTabStrip",void 0).setType(re.STRING),t.add("tabSetEnableTabStrip",!0).setType(re.BOOLEAN),t.add("tabSetEnableTabWrap",!1).setType(re.BOOLEAN),t.add("tabSetTabLocation","top").setType("ITabLocation").setValues(["top","bottom"]),t.add("tabMinWidth",1).setType(re.NUMBER),t.add("tabMinHeight",1).setType(re.NUMBER),t.add("tabSetMinWidth",1).setType(re.NUMBER),t.add("tabSetMinHeight",1).setType(re.NUMBER),t.add("tabMaxWidth",Jr).setType(re.NUMBER),t.add("tabMaxHeight",Jr).setType(re.NUMBER),t.add("tabSetMaxWidth",Jr).setType(re.NUMBER),t.add("tabSetMaxHeight",Jr).setType(re.NUMBER),t.add("tabSetEnableTabScrollbar",!1).setType(re.BOOLEAN),t.add("borderSize",200).setType(re.NUMBER),t.add("borderMinSize",1).setType(re.NUMBER),t.add("borderMaxSize",Jr).setType(re.NUMBER),t.add("borderEnableDrop",!0).setType(re.BOOLEAN),t.add("borderAutoSelectTabWhenOpen",!0).setType(re.BOOLEAN),t.add("borderAutoSelectTabWhenClosed",!1).setType(re.BOOLEAN),t.add("borderClassName",void 0).setType(re.STRING),t.add("borderEnableAutoHide",!1).setType(re.BOOLEAN),t.add("borderEnableTabScrollbar",!1).setType(re.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}},D(be,"MAIN_LAYOUT_ID","__main_layout_id__"),D(be,"attributeDefinitions",be.createAttributeDefinitions()),D(be,"attributePairingDone",!1),be),Et,Ce=(Et=class extends bc{constructor(r,o,n=!0){super(r);D(this,"tabRect",he.empty());D(this,"renderedName");D(this,"extra");D(this,"visible");D(this,"rendered");D(this,"moveableElement");D(this,"tabStamp");D(this,"scrollTop");D(this,"scrollLeft");this.extra={},this.moveableElement=null,this.tabStamp=null,this.rendered=!1,this.visible=!1,Et.attributeDefinitions.fromJson(o,this.attributes),n===!0&&r.addNode(this)}static fromJson(r,o,n=!0){return new Et(o,r,n)}getName(){return this.getAttr("name")}getIcon(){return this.getAttr("icon")}getSubLayoutId(){return this.getAttr("subLayoutId")}getHelpText(){return this.getAttr("helpText")}getComponent(){return this.getAttr("component")}getAltName(){return this.getAttr("altName")}getWindowId(){const r=this.getLayout();if(r)return r.getWindowId()}getConfig(){return this.attributes.config}getExtraData(){return this.extra}isPoppedOut(){return this.getLayoutId()!==nt.MAIN_LAYOUT_ID}isSelected(){return this.getParent().getSelectedNode()===this}isPinned(){return this.getAttr("pinned")}isCloseable(){if(this.isPinned())return!1;let r=this.isEnableClose();if(r&&this.getSubLayoutId()){const o=this.model.getLayouts().get(this.getSubLayoutId());o&&(r=o.getRootRow().isCloseable())}return r}isAllowedInWindow(){let r=this.isEnablePopout();if(r&&this.getSubLayoutId()){const o=this.model.getLayouts().get(this.getSubLayoutId());o&&(r=o.getRootRow().isAllowedInWindow())}return r}isEnableClose(){return this.getAttr("enableClose")}isEnableScrollbars(){return this.getAttr("enableScrollbars")}getCloseType(){return this.getAttr("closeType")}isEnablePopout(){return this.getAttr("enablePopout")}isEnablePopoutIcon(){return this.getAttr("enablePopoutIcon")}isEnablePopoutFloatIcon(){return this.getAttr("enablePopoutFloatIcon")}isEnablePopoutOverlay(){return this.getAttr("enablePopoutOverlay")}isEnableDrag(){return this.getAttr("enableDrag")}isEnableRename(){return this.getAttr("enableRename")}isEnablePin(){return this.getAttr("enablePin")}isEnableWindowReMount(){return this.getAttr("enableWindowReMount")}getClassName(){return this.getAttr("className")}getContentClassName(){return this.getAttr("contentClassName")}getTabSetClassName(){return this.getAttr("tabsetClassName")}isEnableRenderOnDemand(){return this.getAttr("enableRenderOnDemand")}getMinWidth(){return this.getAttr("minWidth")}getMinHeight(){return this.getAttr("minHeight")}getMaxWidth(){return this.getAttr("maxWidth")}getMaxHeight(){return this.getAttr("maxHeight")}getBorderWidth(){return this.getAttr("borderWidth")}getBorderHeight(){return this.getAttr("borderHeight")}isVisible(){return this.visible}toJson(){const r={};return Et.attributeDefinitions.toJson(r,this.attributes),r}saveScrollPosition(){this.moveableElement&&(this.scrollLeft=this.moveableElement.scrollLeft,this.scrollTop=this.moveableElement.scrollTop)}restoreScrollPosition(){(this.scrollTop||this.scrollLeft)&&requestAnimationFrame(()=>{this.moveableElement&&(this.moveableElement.scrollTop=this.scrollTop??0,this.moveableElement.scrollLeft=this.scrollLeft??0)})}setRect(r){r.equalsWhenRounded(this.rect)||this.fireEvent("resize",{rect:r}),this.rect=r}setVisible(r){r!==this.visible&&(this.visible=r,this.fireEvent("visibility",{visible:r}))}setScrollTop(r){this.scrollTop=r}setScrollLeft(r){this.scrollLeft=r}isRendered(){return this.rendered}setRendered(r){this.rendered=r}getTabRect(){return this.tabRect}setTabRect(r){this.tabRect=r}getTabStamp(){return this.tabStamp}setTabStamp(r){this.tabStamp=r}getMoveableElement(){return this.moveableElement===null&&(this.moveableElement=document.createElement("div"),this.moveableElement.className=V.FLEXLAYOUT__TAB_MOVEABLE),this.moveableElement}setMoveableElement(r){this.moveableElement=r}setRenderedName(r){this.renderedName=r}getNameForOverflowMenu(){const r=this.getAttr("altName");return r!==void 0?r:this.renderedName}setName(r){this.attributes.name=r}setPinned(r){this.attributes.pinned=r}delete(){this.parent.remove(this),this.deleteSubLayout(),this.fireEvent("close",{})}adoptViewState(r){this.moveableElement=r.moveableElement,r.moveableElement=null,this.tabStamp=r.tabStamp,this.scrollTop=r.scrollTop,this.scrollLeft=r.scrollLeft,this.rendered=r.rendered,this.visible=r.visible,this.rect=r.rect,this.tabRect=r.tabRect,this.extra=r.extra}deleteSubLayout(){const r=this.getSubLayoutId();if(r){const o=this.model.getLayouts().get(r);this.model.getLayouts().delete(r),o&&o.getRootRow()?.forEachNode(n=>{n instanceof Et&&(n.deleteSubLayout(),n.fireEvent("close",{}))},0)}}updateAttrs(r){Et.attributeDefinitions.update(r,this.attributes)}getAttributeDefinitions(){return Et.attributeDefinitions}setBorderWidth(r){this.attributes.borderWidth=r}setBorderHeight(r){this.attributes.borderHeight=r}static getAttributeDefinitions(){return nt.ensureAttributePairing(),Et.attributeDefinitions}static createAttributeDefinitions(){const r=new Si;return r.add("type",Et.TYPE,!0).setType(re.STRING).setFixed(),r.add("id",void 0).setType(re.STRING).setDescription("the unique id of the tab, if left undefined a uuid will be assigned"),r.add("name","[Unnamed Tab]").setType(re.STRING).setDescription("name of tab to be displayed in the tab button"),r.add("component",void 0).setType(re.STRING).setDescription("string identifying which component to render in this tab (used in the layout factory function)"),r.add("subLayoutId",void 0).setType(re.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(re.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(re.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(re.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(re.BOOLEAN).setDescription("if enabled the tab will re-mount when popped out/in"),r.add("pinned",!1).setType(re.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}},D(Et,"TYPE","tab"),D(Et,"attributeDefinitions",Et.createAttributeDefinitions()),Et),go={width:"1em",height:"1em",display:"flex",alignItems:"center"},ts=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:go,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"})]});ts.displayName="CloseIcon";var ly=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:go,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"})]});ly.displayName="PinIcon";var sy=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:go,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"})]});sy.displayName="MaximizeIcon";var cy=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:go,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"})]});cy.displayName="OverflowIcon";var uy=()=>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"})});uy.displayName="EdgeIcon";var Cd=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:go,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"})]});Cd.displayName="PopoutIcon";var dy=()=>s.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 -960 960 960",style:go,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"})});dy.displayName="PopoutFloatIcon";var fy=()=>s.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",style:go,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"})});fy.displayName="GripIcon";var py=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:go,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"})]});py.displayName="RestoreIcon";var gy=()=>s.jsx("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:go,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"})});gy.displayName="AsterickIcon";var hy=e=>{const{controller:t,show:r}=e;return s.jsx("div",{"aria-hidden":"true",className:t.getClassName(V.FLEXLAYOUT__LAYOUT_OVERLAY),style:{display:r?"flex":"none"}})};hy.displayName="Overlay";var De=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}({}),Ba=e=>{const{controller:t,tabNode:r}=e,o=t.getClassName,n=o(V.FLEXLAYOUT__TAB_BUTTON_STAMP),i=fp(t,r),a=i.content?s.jsx("div",{className:o(V.FLEXLAYOUT__TAB_BUTTON_CONTENT),children:i.content}):r.getNameForOverflowMenu(),l=i.leading?s.jsx("div",{className:o(V.FLEXLAYOUT__TAB_BUTTON_LEADING),children:i.leading}):null;return s.jsxs("div",{className:n,title:r.getHelpText(),children:[l,a]})};Ba.displayName="TabButtonStamp";var zk=500;function xc(e){return typeof e.getBoundingClientRect=="function"}function by(e){return e.container?e.container:xc(e.anchor)?e.anchor.ownerDocument.body:document.body}function Fk(e){if(xc(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 Uk(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=by(e),u=v.useRef(null),d=v.useRef(null),f=v.useRef({buffer:"",timer:void 0});v.useEffect(()=>()=>{f.current.timer&&clearTimeout(f.current.timer)},[]);const p=v.useCallback(b=>{b.disabled||((b.onSelect??o)?.(b),n())},[o,n]);v.useEffect(()=>{(d.current?.querySelector('[role="menuitem"]:not([aria-disabled="true"])')??d.current)?.focus();const b=e.returnFocusTo??(xc(t)?t:void 0);return()=>{b?.focus?.()}},[]),v.useEffect(()=>{const b=c.ownerDocument,h=y=>{u.current?.contains(y.target)||n()};return b.addEventListener("pointerdown",h),()=>b.removeEventListener("pointerdown",h)},[c,n]);const g=b=>{const h=Array.from(d.current?.querySelectorAll('[role="menuitem"]:not([aria-disabled="true"])')??[]),y=b.target.closest?.('[role="menuitem"]'),w=y?h.indexOf(y):-1;if(b.key==="Escape"||b.key==="Tab")n(),b.preventDefault();else if(b.key==="ArrowDown"||b.key==="ArrowUp")h.length>0&&h[(w+(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 x=f.current;x.timer&&clearTimeout(x.timer),x.buffer+=b.key.toLowerCase(),x.timer=setTimeout(()=>{x.buffer=""},zk);const T=[...x.buffer].every(P=>P===x.buffer[0]),L=T?x.buffer[0]:x.buffer,U=T?w+1:Math.max(w,0);for(let P=0;P({select:()=>p(b),close:n}),_=b=>s.jsx("div",{className:l(V.FLEXLAYOUT__POPUP_MENU_ITEM)+(b.disabled?" "+l(V.FLEXLAYOUT__POPUP_MENU_ITEM__DISABLED):""),role:"menuitem",tabIndex:-1,"aria-disabled":b.disabled||void 0,onClick:h=>{p(b),h.stopPropagation()},children:b.content??s.jsxs(s.Fragment,{children:[b.icon,b.label]})},b.key),k=s.jsx("div",{ref:u,className:l(V.FLEXLAYOUT__POPUP_MENU_CONTAINER),style:Uk(Fk(t),c.getBoundingClientRect()),children:s.jsx("div",{ref:d,className:l(V.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(V.FLEXLAYOUT__POPUP_MENU_DIVIDER),role:"separator"},b.key):i?i(b,h,m(b)):_(b))})});return br.createPortal(k,c)};function Vk(e){const t=by(e),r=xc(e.anchor)?e.anchor.getBoundingClientRect():e.anchor,o=t.ownerDocument.createElement("div");t.appendChild(o);const n=Ei(o);let i=!1;const a=()=>{i||(i=!0,n.unmount(),o.remove(),e.onClose())};return n.render(s.jsx(vy,{...e,anchor:r,container:t,onClose:a})),a}function my(e,t,r,o,n,i){const a=n.getClassName,l=r.map(u=>({key:u.node.getId()}));n.showOverlayOnAllWindows(!0);const c=(u,d,f)=>{const p=r[d];let g=a(V.FLEXLAYOUT__POPUP_MENU_ITEM);return t.getSelected()===p.index&&(g+=" "+a(V.FLEXLAYOUT__POPUP_MENU_ITEM__SELECTED)),s.jsx("div",{className:g,role:"menuitem","aria-label":p.node.getNameForOverflowMenu(),tabIndex:-1,"data-layout-path":"/popup-menu/tb"+d,onClick:m=>{f.select(),m.stopPropagation()},draggable:!0,onDragStart:m=>{m.stopPropagation(),n.getDragDropManager().setDragNode(m.nativeEvent,p.node),setTimeout(()=>f.close(),0)},onDragEnd:()=>n.getDragDropManager().onDragEnded(),title:p.node.getHelpText(),children:s.jsx(Ba,{tabNode:p.node,controller:n})},u.key)};return Vk({anchor:e,container:n.getRootDiv()??void 0,classNameMapper:a,returnFocusTo:e,title:n.i18nName(De.Overflow_Menu_Tooltip),items:l,onSelect:u=>{const d=l.indexOf(u);d>=0&&o(r[d])},renderItem:c,onClose:()=>{n.showOverlayOnAllWindows(!1),i?.()}})}vy.displayName="PopupMenu";var yy=e=>{const{controller:t,tabNode:r,selected:o,path:n}=e,i=v.useRef(null),a=v.useRef(null),l=t.getIcons(),c=t.getKeyMap(),u=t.getEditingTab()===r,d=v.useCallback(z=>{i.current=z,t.registerMeasurable(r,"tabbutton",z)},[t,r]);v.useLayoutEffect(()=>{u&&a.current.select()},[u]),v.useEffect(()=>{if(u){const z=t.getCurrentDocument().body,Z=Y=>{Y.target!==a.current&&t.setEditingTab(void 0)};return z.addEventListener("pointerdown",Z),()=>z.removeEventListener("pointerdown",Z)}},[u,t]);const f=z=>{r.isEnableDrag()?(z.stopPropagation(),t.getDragDropManager().setDragNode(z.nativeEvent,r)):z.preventDefault()},p=z=>{t.getDragDropManager().onDragEnded()},g=z=>{Pa(z)&&t.auxMouseClick(r,z)},m=z=>{t.showContextMenu(r,z)},_=()=>{r.isSelected()||t.doAction(oe.selectTab(r.getId()))},k=z=>{const Z=i.current?.closest('[role="tablist"]');if(Z){const Y=Array.from(Z.querySelectorAll('[role="tab"]'));Y[Y.indexOf(i.current)+z]?.focus()}},b=()=>{const z=i.current.ownerDocument,Z=()=>ry(z.getElementById(Lt("flexlayout-tab-",r.getId())));o?Z():(_(),requestAnimationFrame(Z))},h=z=>{u||(io(z,c.focusTabToggle)?(b(),z.preventDefault()):z.key==="Enter"||z.key===" "?(o?b():_(),z.preventDefault()):(z.key==="ArrowLeft"||z.key==="ArrowUp")&&!ja(z)?(k(-1),z.preventDefault()):(z.key==="ArrowRight"||z.key==="ArrowDown")&&!ja(z)?(k(1),z.preventDefault()):io(z,c.closeTab)&&r.isCloseable()?(k(1),t.doAction(oe.deleteTab(r.getId())),z.preventDefault()):io(z,c.renameTab)&&r.isEnableRename()&&(w(),z.preventDefault()))},y=z=>{r.isEnableRename()&&(w(),z.stopPropagation())},w=()=>{t.setEditingTab(r)},x=()=>{const z=r.getCloseType();return!!(o||z===fn.Always||z===fn.Visible&&window.matchMedia&&window.matchMedia("(hover: hover) and (pointer: fine)").matches)},T=z=>{x()&&(t.doAction(oe.deleteTab(r.getId())),z.stopPropagation())},L=z=>{z.stopPropagation()},U=z=>{z.stopPropagation()},P=z=>{z.code==="Escape"?(t.setEditingTab(void 0),i.current?.focus()):(z.code==="Enter"||z.code==="NumpadEnter")&&(t.setEditingTab(void 0),t.doAction(oe.renameTab(r.getId(),z.target.value)),i.current?.focus())},j=t.getClassName,M=r.getParent(),O=M.isEnableSingleTabStretch()&&M.getChildren().length===1,E=O?V.FLEXLAYOUT__TAB_BUTTON_STRETCH:V.FLEXLAYOUT__TAB_BUTTON;let B=j(E);B+=" "+j(E+"_"+M.getTabLocation()),O||(o?B+=" "+j(E+"--selected"):B+=" "+j(E+"--unselected")),r.isPinned()&&(B+=" "+j(E+"--pinned")),r.getClassName()!==void 0&&(B+=" "+r.getClassName());const C=fp(t,r),S=o||M.getSelectedNode()===void 0&&M.getChildren()[0]===r,N=[Po(c.focusTabToggle),r.isCloseable()?Po(c.closeTab):void 0,r.isEnableRename()?Po(c.renameTab):void 0].filter(Boolean).join(" ")||void 0;let A=C.content?s.jsx("div",{className:j(V.FLEXLAYOUT__TAB_BUTTON_CONTENT),children:C.content}):null;const F=C.leading?s.jsx("div",{className:j(V.FLEXLAYOUT__TAB_BUTTON_LEADING),children:C.leading}):null;if(u&&(A=s.jsx("input",{ref:a,className:j(V.FLEXLAYOUT__TAB_BUTTON_TEXTBOX),"data-layout-path":n+"/textbox",type:"text","aria-label":t.i18nName(De.Rename_Tab),autoFocus:!0,defaultValue:r.getName(),onKeyDown:P,onPointerDown:U})),r.isPinned()){const z=t.i18nName(De.Pinned_Tab);C.buttons.push(s.jsx("div",{"data-layout-path":n+"/button/pin",title:z,"aria-hidden":"true",className:j(V.FLEXLAYOUT__TAB_BUTTON_PIN),children:typeof l.pin=="function"?l.pin(r):l.pin},"pin"))}if(r.isCloseable()&&!O){const z=t.i18nName(De.Close_Tab);C.buttons.push(s.jsx("div",{"data-layout-path":n+"/button/close",title:z,"aria-hidden":"true",className:j(V.FLEXLAYOUT__TAB_BUTTON_TRAILING),onPointerDown:L,onClick:T,children:typeof l.close=="function"?l.close(r):l.close},"close"))}return s.jsxs("div",{ref:d,id:Lt("flexlayout-tabbutton-",r.getId()),role:u?void 0:"tab","aria-selected":u?void 0:o,"aria-controls":u?void 0:Lt("flexlayout-tab-",r.getId()),"aria-label":u?void 0:r.isPinned()?C.name+" ("+t.i18nName(De.Pinned_Tab)+")":C.name,"aria-keyshortcuts":u?void 0:N,tabIndex:u?-1:S?0:-1,onKeyDown:h,"data-layout-path":n,className:B,onClick:_,onAuxClick:g,onContextMenu:m,title:r.getHelpText(),draggable:!0,onDragStart:f,onDragEnd:p,onDoubleClick:y,children:[F,A,C.buttons]})};yy.displayName="TabButton";var xy=(e,t,r,o,n,i,a)=>{const[l,c]=v.useState([]),[u,d]=v.useState(!1),[f,p]=v.useState(!1),g=v.useRef(!1),m=v.useRef(void 0),_=v.useRef([]),k=v.useRef(0),b=v.useRef(!1);v.useEffect(()=>()=>{m.current!==void 0&&clearTimeout(m.current)},[]),v.useLayoutEffect(()=>{_.current=l});const h=v.useCallback(q=>{r===we.HORZ?o.current.scrollLeft=q:o.current.scrollTop=q},[r,o]),y=v.useCallback(q=>r===we.HORZ?q.scrollLeft:q.scrollTop,[r]),w=v.useCallback(q=>r===we.HORZ?q.clientWidth:q.clientHeight,[r]),x=v.useCallback(q=>r===we.HORZ?q.scrollWidth:q.scrollHeight,[r]),T=v.useCallback(q=>r===we.HORZ?q.width:q.height,[r]),L=v.useCallback(q=>r===we.HORZ?q.x:q.y,[r]),U=v.useCallback(q=>r===we.HORZ?q.right:q.bottom,[r]),P=v.useCallback(()=>{const q=[];if(o.current){const Q=o.current,H=Q.getBoundingClientRect(),ee=L(H)-1,ie=U(H)+1,le=Q.firstElementChild;let Oe=0;Array.from(le.children).forEach(Ee=>{const ve=Ee.getBoundingClientRect();Ee.classList.contains(a)&&((L(ve)ie)&&q.push(Oe),Oe++)})}return q},[a,o,L,U]),j=v.useCallback(()=>{if(o.current&&n.current){const q=o.current,Q=n.current,H=w(q),ee=x(q),ie=y(q);if(ee>H&&ee>0){let le=H*H/ee,Oe=0;le<20&&(Oe=20-le,le=20);const Ee=ie*(H-Oe)/ee;r===we.HORZ?(Q.style.width=le+"px",Q.style.left=Ee+"px"):(Q.style.height=le+"px",Q.style.top=Ee+"px"),Q.style.display="block"}else Q.style.display="none";r===we.HORZ?Q.style.bottom="0px":Q.style.right="0px"}},[r,o,n,w,x,y]),M=v.useCallback((q=!1)=>{const Q=P(),H=Q.length>0;H!==u&&d(H),q?c(Q):m.current===void 0&&(m.current=setTimeout(()=>{const ee=P();Wk(ee,_.current)||c(ee),m.current=void 0},100))},[P,u]),O=v.useCallback(()=>{const q=t.getSelectedNode();if(q&&o.current){const Q=e.getBoundingClientRect(o.current),H=o.current.ownerDocument.getElementById(Lt("flexlayout-tabbutton-",q.getId()));if(!H)return;const ee=e.getBoundingClientRect(H);let ie=L(Q)-L(ee);ie>0||T(ee)>T(Q)?(h(y(o.current)-ie),b.current=!0):(ie=U(ee)-U(Q),ie>0&&(h(y(o.current)+ie),b.current=!0))}},[t,e,o,L,U,T,y,h]),E=v.useCallback(()=>{if(o.current){const q=o.current;let Q=0;for(const ee of Array.from(q.children))Q+=w(ee);const H=Q+(f?10:0)>w(o.current);H!==f&&p(H)}},[o,f,w]),B=v.useCallback(()=>{b.current||(g.current=!0),b.current=!1,j(),M()},[j,M]),C=v.useCallback((q,Q)=>{if(o.current&&n.current){const H=o.current,ee=n.current,ie=w(H),le=x(H),Oe=w(ee),Ee=H.getBoundingClientRect();let ve;if(r===we.HORZ?ve=q-Ee.x-k.current:ve=Q-Ee.y-k.current,ve=Math.max(0,Math.min(le-Oe,ve)),ie>0){const Bt=ve*le/ie;h(Bt)}}},[o,n,r,w,x,h]),S=v.useCallback(()=>{},[]),N=v.useCallback(()=>{},[]),A=v.useCallback(q=>{q.stopPropagation(),n.current.setPointerCapture(q.pointerId);const Q=n.current.getBoundingClientRect();r===we.HORZ?k.current=q.clientX-Q.x:k.current=q.clientY-Q.y,Is(q.currentTarget.ownerDocument,q,C,S,N)},[n,r,C,S,N]),F=v.useCallback(q=>{if(o.current){if(t.getChildren().length===0)return;let Q;if(Math.abs(q.deltaY)>0){Q=-q.deltaY,q.deltaMode===1&&(Q*=40);const H=y(o.current)-Q,ee=x(o.current)-w(o.current);h(Math.max(0,Math.min(ee,H))),q.stopPropagation()}}},[t,o,y,x,w,h]),z=v.useCallback(q=>{q.preventDefault()},[]),Z=t.getId(),Y=t.getSelectedNode();return v.useLayoutEffect(()=>{o.current&&h(0)},[Z,o,h]),v.useLayoutEffect(()=>{g.current=!1},[Y]),v.useLayoutEffect(()=>{E(),g.current===!1&&O(),j(),M(!0),requestAnimationFrame(()=>{M()})},[E,O,j,M,r,Y]),v.useLayoutEffect(()=>{const q=o.current;if(!q)return;const Q=new q.ownerDocument.defaultView.ResizeObserver(()=>{g.current=!1,E(),O(),j(),M()});return Q.observe(q),()=>Q.disconnect()},[E,O,j,M,o]),v.useEffect(()=>{if(t instanceof Me&&t.isEnableTabWrap())return;const q=i.current;return q?.addEventListener("wheel",z,{passive:!1}),()=>{q?.removeEventListener("wheel",z)}}),{userControlledPositionRef:g,onScroll:B,onScrollPointerDown:A,hiddenTabs:l,onMouseWheel:F,isDockStickyButtons:f,isShowHiddenTabs:u}};function Wk(e,t){return e.length===t.length&&e.every((r,o)=>r===t[o])}var _y=e=>{const{tabsetNode:t,controller:r}=e,o=v.useRef(null),n=v.useRef(null),i=v.useRef(null),a=v.useRef(null),l=v.useRef(null),c=v.useRef(null),u=v.useRef(null),d=v.useRef(null),[f,p]=v.useState(!1),g=v.useRef(null),m=r.getIcons();v.useEffect(()=>()=>g.current?.(),[]);const{userControlledPositionRef:_,onScroll:k,onScrollPointerDown:b,hiddenTabs:h,onMouseWheel:y,isDockStickyButtons:w,isShowHiddenTabs:x}=xy(r,t,we.HORZ,a,i,n,r.getClassName(V.FLEXLAYOUT__TAB_BUTTON)),T=v.useCallback(G=>{o.current=G,r.registerMeasurable(t,"tabset",G)},[r,t]),L=v.useCallback(G=>{n.current=G,r.registerMeasurable(t,"tabstrip",G)},[r,t]),U=v.useCallback(G=>{l.current=G,r.registerMeasurable(t,"tabsetcontent",G)},[r,t]),P=G=>{const fe=r.getShowOverflowMenu(),pe=h.map(ge=>({index:ge,node:t.getChildren()[ge]}));if(fe!==void 0)fe(t,G,pe,j);else{const ge=u.current;p(!0),g.current=my(ge,t,pe,j,r,()=>{p(!1),g.current=null})}G.stopPropagation()},j=G=>{r.doAction(oe.selectTab(G.node.getId())),_.current=!1},M=G=>{r.getEditingTab()?G.preventDefault():t.isEnableDrag()?(G.stopPropagation(),r.getDragDropManager().setDragNode(G.nativeEvent,t)):G.preventDefault()},O=G=>{!Pa(G)&&!t.isActive()&&r.doAction(oe.setActiveTabset(t.getId(),r.getLayoutId()))},E=G=>{Pa(G)&&r.auxMouseClick(t,G)},B=G=>{r.showContextMenu(t,G)},C=G=>{G.stopPropagation()},S=G=>{t.canMaximize()&&r.maximize(t),G.stopPropagation()},N=G=>{r.doAction(oe.deleteTabset(t.getId())),G.stopPropagation()},A=G=>{r.doAction(oe.deleteTab(t.getChildren()[0].getId())),G.stopPropagation()},F=G=>{q!==void 0&&r.doAction(oe.popoutTab(q.getId(),"window")),G.stopPropagation()},z=G=>{q!==void 0&&r.doAction(oe.popoutTab(q.getId(),"float")),G.stopPropagation()},Z=G=>{t.canMaximize()&&r.maximize(t)},Y=r.getClassName,q=t.getSelectedNode(),Q=t.getPath(),H=()=>{const G=[];let fe=!1;if(t.isEnableTabStrip()){const pe=t.isEnableSingleTabStretch()&&t.getChildren().length===1;for(let ge=0;ge{let G,fe=[],pe=[];const ge={leading:G,stickyButtons:fe,buttons:pe,overflowPosition:void 0};r.customizeTabSet(t,ge),G=ge.leading,fe=ge.stickyButtons,pe=ge.buttons;const ye=t.isEnableSingleTabStretch()&&t.getChildren().length===1;let Qe=ye&&t.getChildren()[0].isCloseable()||t.isCloseable();Qe=Qe&&t.isEnableCloseButton(),ge.overflowPosition===void 0&&(ge.overflowPosition=fe.length);let He;if(fe.length>0&&(!t.isEnableTabWrap()&&(w||ye)?pe=[...fe,...pe]:He=s.jsx("div",{ref:d,onPointerDown:C,onDragStart:_e=>{_e.preventDefault()},className:Y(V.FLEXLAYOUT__TAB_TOOLBAR_STICKY_BUTTONS_CONTAINER),children:fe},"sticky_buttons_container")),!t.isEnableTabWrap()&&x){const _e=r.i18nName(De.Overflow_Menu_Tooltip);let qe;if(typeof m.more=="function"){const me=h.map(Mt=>({index:Mt,node:t.getChildren()[Mt]}));qe=m.more(t,me)}else qe=s.jsxs(s.Fragment,{children:[m.more,s.jsx("div",{className:Y(V.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":Q+"/button/overflow","aria-haspopup":"menu","aria-expanded":f,"aria-label":_e,ref:u,className:Y(V.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(V.FLEXLAYOUT__TAB_BUTTON_OVERFLOW),title:_e,onClick:P,onPointerDown:C,children:qe},"overflowbutton"))}if(q!==void 0&&!q.isPinned()){if(q.isEnablePopoutFloatIcon()){const _e=r.i18nName(De.Popout_Tab_Float);pe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Q+"/button/popout-float",title:_e,"aria-label":_e,className:Y(V.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(V.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_FLOAT),onClick:z,onPointerDown:C,children:typeof m.popoutFloat=="function"?m.popoutFloat(q):m.popoutFloat},"popout-float"))}if(r.isSupportsPopout()&&q.isAllowedInWindow()&&q.isEnablePopoutIcon()){const _e=r.i18nName(De.Popout_Tab);pe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Q+"/button/popout",title:_e,"aria-label":_e,className:Y(V.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(V.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_FLOAT),onClick:F,onPointerDown:C,children:typeof m.popout=="function"?m.popout(q):m.popout},"popout"))}}if(t.canMaximize()){const _e=r.i18nName(De.Restore),qe=r.i18nName(De.Maximize);pe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Q+"/button/max",title:t.isMaximized()?_e:qe,"aria-label":t.isMaximized()?_e:qe,"aria-pressed":t.isMaximized(),className:Y(V.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(V.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_+(t.isMaximized()?"max":"min")),onClick:S,onPointerDown:C,children:t.isMaximized()?typeof m.restore=="function"?m.restore(t):m.restore:typeof m.maximize=="function"?m.maximize(t):m.maximize},"max"))}if(!t.isMaximized()&&Qe){const _e=ye?r.i18nName(De.Close_Tab):r.i18nName(De.Close_Tabset);pe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Q+"/button/close",title:_e,"aria-label":_e,className:Y(V.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(V.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_CLOSE),onClick:ye?A:N,onPointerDown:C,children:typeof m.closeTabset=="function"?m.closeTabset(t):m.closeTabset},"close"))}if(t.isActive()&&t.isEnableActiveIcon()){const _e=r.i18nName(De.Active_Tabset);pe.push(s.jsx("div",{"data-layout-path":Q+"/button/active",title:_e,"aria-hidden":"true",className:Y(V.FLEXLAYOUT__TAB_TOOLBAR_ICON),children:typeof m.activeTabset=="function"?m.activeTabset(t):m.activeTabset},"active"))}const Be=s.jsx("div",{ref:c,className:Y(V.FLEXLAYOUT__TAB_TOOLBAR),onPointerDown:C,onDragStart:_e=>{_e.preventDefault()},children:pe},"buttonbar");return{leading:G,buttonbar:Be,stickyBar:He}},ie=(G,fe,pe,ge)=>{let ye;const Qe=r.getKeyMap(),He=[Po(Qe.focusNextTabset),Po(Qe.focusPreviousTabset)].filter(Boolean).join(" ")||void 0,Be=r.getEditingTab()?.getParent()===t,_e=Be?void 0:"tablist";let qe=Y(V.FLEXLAYOUT__TABSET_TABBAR_OUTER);t.getClassNameTabStrip()!==void 0&&(qe+=" "+t.getClassNameTabStrip()),qe+=" "+V.FLEXLAYOUT__TABSET_TABBAR_OUTER_+t.getTabLocation(),t.isActive()&&(qe+=" "+Y(V.FLEXLAYOUT__TABSET_SELECTED)),t.isMaximized()&&(qe+=" "+Y(V.FLEXLAYOUT__TABSET_MAXIMIZED));const me=t.isEnableSingleTabStretch()&&t.getChildren().length===1;if(me){const ir=t.getChildren()[0];ir.getTabSetClassName()!==void 0&&(qe+=" "+ir.getTabSetClassName())}let Mt;if(fe&&(Mt=s.jsx("div",{className:Y(V.FLEXLAYOUT__TABSET_LEADING),children:fe})),t.isEnableTabWrap())t.isEnableTabStrip()&&(ye=s.jsxs("div",{className:qe,style:{flexWrap:"wrap",gap:"1px",marginTop:"2px"},ref:L,"data-layout-path":Q+"/tabstrip",onPointerDown:O,onDoubleClick:Z,onContextMenu:B,onClick:E,onAuxClick:E,draggable:!0,onDragStart:M,children:[Mt,s.jsx("div",{role:_e,"aria-orientation":Be?void 0:"horizontal","aria-label":Be?void 0:t.getName(),"aria-keyshortcuts":Be?void 0:He,style:{display:"contents"},children:G}),ge,s.jsx("div",{style:{flexGrow:1,display:"flex",justifyContent:"flex-end"},children:pe})]}));else if(t.isEnableTabStrip()){let ir;t.isEnableTabScrollbar()&&(ir=s.jsx("div",{ref:i,"aria-hidden":"true",className:Y(V.FLEXLAYOUT__MINI_SCROLLBAR),onPointerDown:b})),ye=s.jsxs("div",{className:qe,ref:L,"data-layout-path":Q+"/tabstrip",onPointerDown:O,onDoubleClick:Z,onContextMenu:B,onClick:E,onAuxClick:E,draggable:!0,onWheel:y,onDragStart:M,children:[Mt,s.jsxs("div",{className:Y(V.FLEXLAYOUT__MINI_SCROLLBAR_CONTAINER),children:[s.jsxs("div",{ref:a,className:Y(V.FLEXLAYOUT__TABSET_TABBAR_INNER)+" "+Y(V.FLEXLAYOUT__TABSET_TABBAR_INNER_+t.getTabLocation()),style:{overflowX:"auto",overflowY:"hidden"},onScroll:k,children:[s.jsx("div",{style:{width:me?"100%":"none"},role:_e,"aria-orientation":Be?void 0:"horizontal","aria-label":Be?void 0:t.getName(),"aria-keyshortcuts":Be?void 0:He,className:Y(V.FLEXLAYOUT__TABSET_TABBAR_INNER_TAB_CONTAINER)+" "+Y(V.FLEXLAYOUT__TABSET_TABBAR_INNER_TAB_CONTAINER_+t.getTabLocation()),children:G}),ge]}),ir]}),pe]})}return ye},le=G=>{let fe;if(t.getChildren().length===0){const ge=r.getTabSetPlaceHolderCallback();ge&&(fe=ge(t))}let pe=s.jsx("div",{ref:U,className:Y(V.FLEXLAYOUT__TABSET_CONTENT),children:fe});return t.getTabLocation()==="top"?pe=s.jsxs(s.Fragment,{children:[G,pe]}):pe=s.jsxs(s.Fragment,{children:[pe,G]}),pe},Oe=H(),{leading:Ee,buttonbar:ve,stickyBar:Bt}=ee(),X=le(ie(Oe,Ee,ve,Bt)),ue={flexGrow:Math.max(1,t.getWeight()*1e3),minWidth:t.getMinWidth(),minHeight:t.getMinHeight(),maxWidth:t.getMaxWidth(),maxHeight:t.getMaxHeight()};t.getModel().getMaximizedTabset(r.getLayoutId())!==void 0&&!t.isMaximized()&&(ue.display="none");const se=s.jsx("div",{ref:T,className:Y(V.FLEXLAYOUT__TABSET_CONTAINER),style:ue,children:s.jsx("div",{className:Y(V.FLEXLAYOUT__TABSET),"data-layout-path":Q,children:X})});return t.isMaximized()&&r.getMainElement()?br.createPortal(s.jsx("div",{style:{position:"absolute",display:"flex",top:0,left:0,bottom:0,right:0},children:se}),r.getMainElement()):se};_y.displayName="TabSet";var ua=e=>{const{controller:t,node:r,index:o,horizontal:n}=e,i=v.useRef(null),a=v.useRef(null),l=v.useRef([]),c=v.useRef(void 0),u=v.useRef(void 0),d=v.useRef(0),f=v.useRef(0),p=v.useRef({initialSizes:[],sum:0,startPosition:0}),g=v.useCallback(O=>{O.preventDefault(),O.stopImmediatePropagation()},[]);v.useEffect(()=>{const O=i.current,E=a.current;return O?.addEventListener("touchstart",g,{passive:!1}),E?.addEventListener("touchstart",g,{passive:!1}),()=>{O?.removeEventListener("touchstart",g),E?.removeEventListener("touchstart",g)}},[g]);const m=O=>{O.stopPropagation(),r instanceof Ve&&(p.current=r.getSplitterInitials(o)),Zl(!1,t.getCurrentDocument()),Is(O.currentTarget.ownerDocument,O,b,h,k),l.current=r instanceof Je?r.getSplitterBounds(!0):r.getSplitterBounds(o);const E=t.getRootDiv();c.current=t.getCurrentDocument().createElement("div"),c.current.style.flexDirection=n?"row":"column",c.current.className=t.getClassName(V.FLEXLAYOUT__SPLITTER_DRAG)+(r instanceof Je?" "+t.getClassName(V.FLEXLAYOUT__SPLITTER_BORDER):""),c.current.style.cursor=r.getOrientation()===we.VERT?"ns-resize":"ew-resize",u.current=t.getCurrentDocument().createElement("div"),u.current.className=x(V.FLEXLAYOUT__SPLITTER_HANDLE)+" "+x(n?V.FLEXLAYOUT__SPLITTER_HANDLE_HORZ:V.FLEXLAYOUT__SPLITTER_HANDLE_VERT),c.current.appendChild(u.current);const B=i.current.getBoundingClientRect(),C=new he(B.x-t.getDomRect().x,B.y-t.getDomRect().y,B.width,B.height);d.current=O.clientX-B.x,f.current=O.clientY-B.y,C.positionElement(c.current),E&&E.appendChild(c.current)},_=O=>{if(ja(O))return;let E=0;if(n?(O.key==="ArrowLeft"&&(E=-10),O.key==="ArrowRight"&&(E=10)):(O.key==="ArrowUp"&&(E=-10),O.key==="ArrowDown"&&(E=10)),E!==0)if(O.preventDefault(),r instanceof Je){const B=r.getLocation(),C=B===te.BOTTOM||B===te.RIGHT?-E:E,S=Math.max(r.getMinSize(),Math.min(r.getMaxSize(),r.getSize()+C));t.doAction(oe.adjustBorderSplit(r.getId(),S))}else{const B=r.getSplitterInitials(o);if(B.sum<=0)return;const C=r.getSplitterBounds(o),S=Math.max(C[0],Math.min(C[1],B.startPosition+E)),N=r.calculateSplit(o,S,B.initialSizes,B.sum,B.startPosition);t.doAction(oe.adjustWeights(r.getId(),N))}},k=()=>{const O=t.getRootDiv();O&&c.current&&O.removeChild(c.current),c.current=void 0,Zl(!0,t.getCurrentDocument())},b=(O,E)=>{if(c.current){const B=t.getDomRect();if(!B)return;r.getOrientation()===we.VERT?c.current.style.top=w(E-B.y-f.current)+"px":c.current.style.left=w(O-B.x-d.current)+"px",t.isRealtimeResize()&&y(!0)}},h=()=>{if(c.current){y(!1);const O=t.getRootDiv();O&&c.current&&O.removeChild(c.current),c.current=void 0}Zl(!0,t.getCurrentDocument())},y=O=>{(()=>{if(c.current){let B;if(r.getOrientation()===we.VERT?B=c.current.offsetTop:B=c.current.offsetLeft,r instanceof Je){const C=r.calculateSplit(r,B);t.doAction(oe.adjustBorderSplit(r.getId(),C).setAdjusting(O))}else{const C=p.current;if(C.sum<=0)return;const S=r.calculateSplit(o,B,C.initialSizes,C.sum,C.startPosition);t.doAction(oe.adjustWeights(r.getId(),S).setAdjusting(O))}}})()},w=O=>{const E=l.current;let B=O;return OE[1]&&(B=E[1]),B},x=t.getClassName,T={cursor:n?"ew-resize":"ns-resize",flexDirection:n?"column":"row"};let L=x(V.FLEXLAYOUT__SPLITTER)+" "+x(V.FLEXLAYOUT__SPLITTER_+r.getOrientation().getName());r instanceof Je?L+=" "+x(V.FLEXLAYOUT__SPLITTER_BORDER):r.getModel().getMaximizedTabset(t.getLayoutId())!==void 0&&(T.display="none"),ty()||(T["--splitter-active-size"]="30px");let U,P,j,M;if(r instanceof Ve){const O=r.getRect(),E=r.getChildren()[o-1],B=n?O.width:O.height;if(E&&B>0){const C=E.getRect();U=Math.round((n?C.getRight()-O.x:C.getBottom()-O.y)/B*100),P=0,j=100,M=U+"%"}}else U=Math.round(r.getSize()),P=Math.round(r.getMinSize()),j=Math.round(r.getMaxSize()),M=U+"px";return s.jsx("div",{className:L,style:T,ref:i,role:"separator","aria-label":t.i18nName(De.Splitter),"aria-orientation":n?"vertical":"horizontal","aria-valuenow":U,"aria-valuemin":P,"aria-valuemax":j,"aria-valuetext":M,tabIndex:0,onKeyDown:_,"data-layout-path":r.getPath()+"/s"+(o-1),onPointerDown:m,children:s.jsx("div",{className:x(V.FLEXLAYOUT__SPLITTER_HANDLE)+" "+x(n?V.FLEXLAYOUT__SPLITTER_HANDLE_HORZ:V.FLEXLAYOUT__SPLITTER_HANDLE_VERT)})})};ua.displayName="Splitter";var pp=e=>{const{controller:t,rowNode:r}=e,o=v.useRef(null),n=r.getOrientation()===we.HORZ,i=v.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(ua,{controller:t,node:r,index:l,horizontal:n},"splitter"+l)),u instanceof Ve?a.push(s.jsx(pp,{controller:t,rowNode:u},u.getId())):u instanceof Me&&a.push(s.jsx(_y,{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(V.FLEXLAYOUT__ROW),style:c,children:a})};pp.displayName="Row";var wy=e=>{const{controller:t,selected:r,tabNode:o}=e,n=v.useRef(null),i=v.useRef(!0),a=v.useCallback(()=>{const g=o.getParent();g instanceof Me&&(g.isActive()||t.doAction(oe.setActiveTabset(g.getId(),t.getLayoutId())))},[o,t]),l=o.getParent(),c=t.getKeyMap().focusTabToggle,u=g=>{if(io(g,c)){const m=g.currentTarget.ownerDocument.getElementById(Lt("flexlayout-tabbutton-",o.getId()));m&&(m.focus(),g.preventDefault(),g.stopPropagation())}};v.useLayoutEffect(()=>{const g=o.getMoveableElement(),m=n.current.ownerDocument,_=g.ownerDocument!==m;_&&m.adoptNode(g),g.parentElement!==n.current&&n.current.appendChild(g),_&&t.redrawLayoutAndTabContent();const k=()=>{o.saveScrollPosition()};g.addEventListener("scroll",k);const b=n.current;return b&&b.addEventListener("pointerdown",a),()=>{b&&b.removeEventListener("pointerdown",a),g.removeEventListener("scroll",k),g.isConnected||(t.getModel().getNodeById(o.getId())&&(o.isEnableWindowReMount()||t.getMainController()?.getMoveablesHome()?.appendChild(g)),o.setVisible(!1))}},[o,t,a]),v.useEffect(()=>{o.isSelected()&&i.current&&(o.restoreScrollPosition(),i.current=!1)}),v.useLayoutEffect(()=>(t.registerTabPanel(o,n.current),()=>{t.registerTabPanel(o,null)}),[t,o]);const d=t.getClassName;let f=null;if(r&&document.hidden&&o.isEnablePopoutOverlay()){const g={};l.getContentRect().styleWithPosition(g);let m=d(V.FLEXLAYOUT__TAB_OVERLAY);l instanceof Je&&l.isOverlay()&&(m+=" "+d(V.FLEXLAYOUT__TAB_OVERLAY_RAISED)),f=s.jsx("div",{style:g,className:m})}let p=d(V.FLEXLAYOUT__TAB);return l instanceof Je&&(p+=" "+d(V.FLEXLAYOUT__TAB_BORDER),p+=" "+d(V.FLEXLAYOUT__TAB_BORDER_+l.getLocation().getName()),l.isOverlay()&&(p+=" "+d(V.FLEXLAYOUT__TAB_BORDER_OVERLAY))),o.getContentClassName()!==void 0&&(p+=" "+o.getContentClassName()),s.jsxs(s.Fragment,{children:[f,s.jsx("div",{ref:n,id:Lt("flexlayout-tab-",o.getId()),role:"tabpanel","aria-labelledby":Lt("flexlayout-tabbutton-",o.getId()),"aria-keyshortcuts":Po(c),tabIndex:-1,onKeyDown:c?u:void 0,className:p,"data-layout-path":o.getPath()})]})};wy.displayName="Tab";var $k=class extends v.Component{constructor(t){super(t);D(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:V.FLEXLAYOUT__ERROR_BOUNDARY_CONTAINER,children:s.jsx("div",{role:"alert",className:V.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}},ky=v.memo(({controller:e,tabNode:t})=>{ky.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(V.FLEXLAYOUT__TAB_LAYOUT_CONTAINER),children:[s.jsx(za,{...e.getProps(),layoutId:t.getSubLayoutId(),path:t.getPath()+o.getPath(),mainLayoutController:e.getMainController()}),";"]})}return s.jsx($k,{message:e.i18nName(De.Error_rendering_component),retryText:e.i18nName(De.Error_rendering_component_retry),children:r})},Hk);function Hk(e,t){return!(t.visible&&(e.windowId!==t.windowId||e.fullRedrawRevision!==t.fullRedrawRevision||e.parentRedrawRevision!==t.parentRedrawRevision||e.tabNode!==t.tabNode||t.tabNode.getSubLayoutId()!==void 0))}var Te,Yk=(Te=class{constructor(t){D(this,"_controller");D(this,"_dragEnterCount",0);D(this,"_dragging",!1);D(this,"_active",!1);D(this,"_dropInfo");D(this,"_outlineDiv");D(this,"_mainController");D(this,"setDragNode",(t,r)=>{if(Te.dragState=new Ol(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 Me){let o=!1,n=this._controller.i18nName(De.Move_Tabset);if(r.getChildren().length>0&&(n=this._controller.i18nName(De.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()===we.HORZ,u=c?10:i,d=c?10:a;let f=!1;if(this._controller.getProps().onRenderDragRect){const p=s.jsx(Ba,{controller:this._controller,tabNode:r},r.getId()),g=this._controller.getProps().onRenderDragRect(p,r,void 0);g&&(this.setDragComponent(t,g,u,d),f=!0)}f||(Pk()?this.setDragComponent(t,s.jsx(Ba,{tabNode:r,controller:this._controller}),u,d):t.dataTransfer.setDragImage(r.getTabStamp(),u,d))}}});D(this,"onDragEnterRaw",t=>{this._dragEnterCount++,this.updateActive(t)});D(this,"onDragLeaveRaw",t=>{this._dragEnterCount--,this.updateActive(t)});D(this,"onDragEnter",t=>{if(!Te.dragState&&this._controller.getProps().onExternalDrag){const r=this._controller.getProps().onExternalDrag(t);if(r){const o=Ce.fromJson(r.json,this._controller.getModel(),!1);Te.dragState=new Ol(this._controller.getMainController(),"external",o,r.json,r.onDrop)}}if(this._mainController===Te.dragState?.mainLayoutController&&!(Te.dragState?.dockFloatToMain&&!this.isDockTarget())&&Te.dragState){t.preventDefault(),this._dropInfo=void 0;const r=this._controller.getRootDiv(),o=this._controller.getCurrentDocument();this._outlineDiv=o.createElement("div"),this._outlineDiv.className=this._controller.getClassName(V.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)}});D(this,"onDragOver",t=>{if(this._mainController===Te.dragState?.mainLayoutController&&!(Te.dragState?.dockFloatToMain&&!this.isDockTarget())&&this._active){if(Te.dragState?.dockFloatToMain){const i=t.target;if(i&&Te.dragState.sourceFloatElement?.contains(i)){this._dropInfo=void 0;return}}const r=this._controller.getRootDiv()?.getBoundingClientRect(),o={x:t.clientX-(r?.left??0),y:t.clientY-(r?.top??0)};Te.dragState.dockFloatToMain||this._controller.checkForBorderToShow(o.x,o.y);const n=this._controller.getModel().findDropTargetNode(this._controller.getLayoutId(),Te.dragState.dragNode,o.x,o.y,this.isExcludeCenter());if(n){if(Te.dragState.dockFloatToMain&&(n.location===te.CENTER||!(n.node instanceof Me)&&!(n.node instanceof Ve)))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")}}});D(this,"onDragLeave",t=>{if(this._mainController===Te.dragState?.mainLayoutController&&(this.clearDragLocalVisuals(),this._controller.isMainLayout())){let r=!1;for(const[,o]of this._controller.getModel().getLayouts())if(o.getController()&&o.getController().getDragDropManager().isDragging()){r=!0;break}r===!1&&this.clearDragMain()}});D(this,"onDrop",t=>{if(this._mainController===Te.dragState?.mainLayoutController&&!(Te.dragState?.dockFloatToMain&&!this.isDockTarget())){if(this._active){t.preventDefault();const r=Te.dragState;if(this._dropInfo&&r.dockFloatToMain){const o=t.target;o&&r.sourceFloatElement?.contains(o)&&(this._dropInfo=void 0)}if(this._dropInfo)if(r.dragJson!==void 0){const o=this._controller.doAction(oe.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(oe.dockFloatToLayout(r.floatLayoutId,this._dropInfo.node.getId(),this._dropInfo.location,this._dropInfo.index)):this._controller.doAction(oe.moveNode(r.dragNode.getId(),this._dropInfo.node.getId(),this._dropInfo.location,this._dropInfo.index)));this.clearDragMain(),Te.dragState=void 0}this._dragEnterCount=0}});this._controller=t,this._mainController=t.getMainController()}isDockTarget(){return this._controller.getLayout().getLayoutId()!==Te.dragState?.floatLayoutId}isExcludeCenter(){if(Te.dragState?.dockFloatToMain)return!0;const t=Te.dragState?.dragNode;return t instanceof Me?!t.isEnableClose()||t.getPinnedRunLength()>0:!1}addTabWithDragAndDrop(t,r,o){const n=Ce.fromJson(r,this._controller.getModel(),!1);Te.dragState=new Ol(this._controller.getMainController(),"add",n,r,o)}onDragEnded(){this.clearDragMain(),Te.dragState=void 0}moveTabWithDragAndDrop(t,r){this.setDragNode(t,r)}startDockLayoutDrag(t,r,o){const n=r.getRootRow();Te.dragState=new Ol(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 Ce&&i++},0);const a=this._controller.i18nName(De.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(V.FLEXLAYOUT__LAYOUT)+" "+this._controller.getClassName(V.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=Ei(l);br.flushSync(()=>c.render(i)),t.dataTransfer.setDragImage(l,o,n),setTimeout(()=>{c.unmount(),a.body.removeChild(l)},0)}updateActive(t){const r=Array.from(this._controller.getModel().getLayouts().values()),o=Te.dragState?.dockFloatToMain===!0;let n,i;for(let a=r.length-1;a>=0;a--){const l=r[a];if(o&&l.getLayoutId()===Te.dragState?.floatLayoutId)continue;const c=l.getController()?.getDragDropManager();c&&c.getDragEnterCount()>0&&(l.getType()==="tab"?i=l:!n&&!i&&(n=l))}if(i){const a=oy(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}},D(Te,"dragState"),Te),Ol=class{constructor(e,t,r,o,n,i=!1,a=void 0,l=void 0){D(this,"mainLayoutController");D(this,"dragSource");D(this,"dragNode");D(this,"dragJson");D(this,"fnNewNodeDropped");D(this,"dockFloatToMain");D(this,"floatLayoutId");D(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}},Ey=({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(V.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(V.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(V.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(V.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(V.FLEXLAYOUT__EDGE_RECT_RIGHT),children:s.jsx("div",{style:{transform:"rotate(-90deg)"},children:r})},"East"))}return s.jsx(s.Fragment,{children:t})};Ey.displayName="EdgeIndicators";var Xk=2e3,Gk=750,Ty=e=>{const{title:t,controller:r,layout:o,url:n,onCloseLayout:i,children:a}=e,l=v.useRef(null),[c,u]=v.useState(void 0),[d,f]=v.useState(void 0),[p,g]=v.useState(void 0),m=v.useMemo(()=>new Map,[]),_=v.useRef(!1),k=v.useRef(null),b=v.useRef(null),h=v.useRef(new Map);if(v.useLayoutEffect(()=>{!_.current&&c&&(_.current=!0,r.redrawLayout(),Zk(m))},[c,r,m]),v.useLayoutEffect(()=>{const y=()=>{if(l.current){const w=l.current;l.current=null,w.close()}};if(!l.current){const w=o.getLayoutId(),x=o.getRect();l.current=window.open(n,w,`left=${x.x},top=${x.y},width=${x.width},height=${x.height}`),l.current?(window.addEventListener("beforeunload",y),l.current.addEventListener("load",()=>{if(l.current){l.current.focus(),l.current.resizeTo(x.width,x.height),l.current.moveTo(x.x,x.y);const T=l.current;T.resizeBy(x.width-T.outerWidth,x.height-T.outerHeight),T.moveBy(x.x-T.screenLeft,x.y-T.screenTop);const L=l.current.document;f(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 U=L.createElement("div");U.className=V.FLEXLAYOUT__FLOATING_WINDOW_CONTENT,L.body.appendChild(U),r.getProps().onPopoutOpen?.(o,l.current,L),Jk(L,m).then(()=>{u(U)}),k.current=new MutationObserver(P=>qk(P,L,m)),k.current.observe(document.head,{childList:!0,subtree:!0,characterData:!0}),b.current=L.defaultView?.setInterval(()=>{Qk(m,h.current)},Gk)??null,l.current.addEventListener("beforeunload",()=>{l.current&&(r.getProps().onPopoutClose?.(o,l.current,L),i(o),l.current=null,k.current?.disconnect(),k.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",y),l.current?.close(),l.current=null,k.current?.disconnect(),k.current=null,b.current!=null&&(b.current=null)}},[]),c!==void 0){const y=r.getProps().renderPopoutContent;let w=a;return y&&p&&(w=y({children:a,layout:o,popoutWindow:d??window,popoutDocument:p})),br.createPortal(w,c)}else return null};function qk(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)&&Ry(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=Kk(o.target),i=n&&r.get(n);n&&i&&_c(n,i)}}function Kk(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 Jk(e,t){const r=[],o=document.querySelectorAll('style, link[rel="stylesheet"]');for(const n of o)Ry(e,n,t,r);return Promise.all(r)}function Ry(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),Xk)}))}else if(t instanceof HTMLStyleElement)try{const n=t.cloneNode(!0);e.head.appendChild(n),_c(t,n),r.set(t,n)}catch{}}function _c(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 Zk(e){for(const[t,r]of e)t instanceof HTMLStyleElement&&_c(t,r)}function Qk(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),_c(r,o))}}Ty.displayName="PopoutWindow";var vo=10,Dr=-4,cr=8,Mn=12,Eh=12,eE=150,tE=25,rE=e=>{const{controller:t,layout:r,children:o}=e,[n,i]=v.useState(r.getRect()),a=v.useRef(he.empty()),l=t.getClassName,c=v.useRef(null),u=v.useRef(null),d=v.useRef(null),f=v.useRef(null),p=v.useRef(null),g=v.useRef(null),m=v.useRef(null),_=v.useRef(null),k=v.useRef(null),b=v.useRef(null),h=v.useRef(!1),y=v.useRef(void 0);v.useEffect(()=>{a.current=n},[n]),v.useEffect(()=>{requestAnimationFrame(()=>{i(r.getRect())})},[r]);const w=v.useCallback(C=>{const S=t.getCurrentWindow()??window,N=he.fromDomRect(t.getRootDiv().getBoundingClientRect());let A;if(t.getProps().constrainFloatPanels)A=new he(0,0,N.width,N.height);else{const z=Bk(S),Z=Math.max(z.fullWidth,S.innerWidth),Y=Math.max(z.fullHeight,S.innerHeight);A=new he(-N.x,-N.y,Z,Y)}const F=C.clone();return F.clamp(A),F},[t]),x=v.useCallback(C=>{C.preventDefault(),C.stopImmediatePropagation()},[]);v.useEffect(()=>{const C=[u,d,f,p,g,m,_,k,b].map(S=>S.current).filter(S=>S!==null);return C.forEach(S=>S.addEventListener("touchstart",x,{passive:!1})),()=>{C.forEach(S=>S.removeEventListener("touchstart",x))}},[x]);const T=v.useRef(!1);v.useLayoutEffect(()=>{if(!T.current){T.current=!0;const C=w(n);C.equals(n)||(i(C),r.setRect(C))}},[w,n,r]),v.useEffect(()=>{const C=()=>{const F=[...t.getModel().getLayouts()],z=F[F.length-1][1];r!==z&&(h.current=!0)},S=t.getCurrentWindow()??window,N=()=>{h.current&&(y.current=S.setTimeout(()=>{y.current=void 0,t.moveWindowToFront(r.getLayoutId())},10),h.current=!1)},A=c.current;return A&&(A.addEventListener("pointerdown",C,{capture:!0}),A.addEventListener("pointerup",N)),()=>{A&&(A.removeEventListener("pointerdown",C,{capture:!0}),A.removeEventListener("pointerup",N)),y.current!==void 0&&(S.clearTimeout(y.current),y.current=void 0)}},[t,r]);const L=C=>{C.stopPropagation();const S={x:C.clientX-n.x,y:C.clientY-n.y};t.showOverlayOnAllWindows(!0),Is(t.getCurrentDocument()??document,C,(N,A)=>{h.current&&(t.moveWindowToFront(r.getLayoutId()),h.current=!1);const F=new he(N-S.x,A-S.y,n.width,n.height),z=w(F);i(z),t.doAction(oe.moveFloat(r.getLayoutId(),z).setAdjusting(!0))},()=>{t.doAction(oe.moveFloat(r.getLayoutId(),a.current).setAdjusting(!1)),t.redrawLayout(),t.showOverlayOnAllWindows(!1)},()=>{t.doAction(oe.moveFloat(r.getLayoutId(),a.current).setAdjusting(!1)),t.redrawLayout(),t.showOverlayOnAllWindows(!1)})},U=t.getIcons(),P=t.isSupportsPopout()&&r.getRootRow()?.isAllowedInWindow()===!0,j=C=>{C.stopPropagation(),r.getRootRow()?.getChildren().length?t.getDragDropManager().startDockLayoutDrag(C.nativeEvent,r,c.current??void 0):C.preventDefault()},M=C=>{t.getDragDropManager().onDragEnded()},O=C=>{C.stopPropagation()},E=C=>{C.stopPropagation();const S=t.getScreenRect(r.getRect());t.doAction(oe.popoutFloat(r.getLayoutId(),S.toJson()))},B=(C,S)=>{const N=n,A={x:C.clientX,y:C.clientY};t.showOverlayOnAllWindows(!0),Is(t.getCurrentDocument()??document,C,(F,z)=>{const Z=F-A.x,Y=z-A.y;let q=N.x,Q=N.y,H=N.width,ee=N.height;S.includes("n")&&(Q+=Y,ee-=Y),S.includes("s")&&(ee+=Y),S.includes("w")&&(q+=Z,H-=Z),S.includes("e")&&(H+=Z);const ie=new he(q,Q,Math.max(eE,H),Math.max(tE,ee)),le=w(ie);i(le),t.doAction(oe.moveFloat(r.getLayoutId(),le).setAdjusting(!0))},()=>{t.doAction(oe.moveFloat(r.getLayoutId(),a.current).setAdjusting(!1)),t.redrawLayout(),t.showOverlayOnAllWindows(!1)},()=>{t.doAction(oe.moveFloat(r.getLayoutId(),a.current).setAdjusting(!1)),t.redrawLayout(),t.showOverlayOnAllWindows(!1)}),C.stopPropagation()};return s.jsxs("div",{ref:c,className:l(V.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(V.FLEXLAYOUT__FLOAT_WINDOW_HEADER),onPointerDown:L,children:[s.jsx("div",{"data-layout-path":"/floatwindow/drag-handle",className:l(V.FLEXLAYOUT__FLOAT_WINDOW_DRAG_HANDLE),draggable:!0,title:t.i18nName(De.Dock_Float_To_Layout),"aria-label":t.i18nName(De.Dock_Float_To_Layout),onDragStart:j,onDragEnd:M,onPointerDown:O,children:U.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(V.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}})})}),P&&s.jsx("button",{type:"button","data-layout-path":"/floatwindow/button/popout",className:l(V.FLEXLAYOUT__FLOAT_WINDOW_BUTTON),title:t.i18nName(De.Popout_Float_To_Window),"aria-label":t.i18nName(De.Popout_Float_To_Window),onClick:E,onPointerDown:O,children:U.popoutFloatWindow})]}),s.jsx("div",{className:l(V.FLEXLAYOUT__FLOAT_WINDOW_CONTENT),children:o}),s.jsx("div",{ref:d,style:{position:"absolute",zIndex:vo,top:Dr,left:cr,right:cr,height:cr,cursor:"ns-resize"},onPointerDown:C=>B(C,"n")}),s.jsx("div",{ref:m,style:{position:"absolute",zIndex:vo,bottom:Dr,left:cr,right:cr,height:cr,cursor:"ns-resize"},onPointerDown:C=>B(C,"s")}),s.jsx("div",{ref:p,style:{position:"absolute",zIndex:vo,top:cr,bottom:cr,right:Dr,width:cr,cursor:"ew-resize"},onPointerDown:C=>B(C,"e")}),s.jsx("div",{ref:k,style:{position:"absolute",zIndex:vo,top:cr,bottom:cr,left:Dr,width:cr,cursor:"ew-resize"},onPointerDown:C=>B(C,"w")}),s.jsx("div",{ref:b,style:{position:"absolute",zIndex:vo,top:Dr,left:Dr,width:Mn,height:Mn,cursor:"nwse-resize"},onPointerDown:C=>B(C,"nw")}),s.jsx("div",{ref:f,style:{position:"absolute",zIndex:vo,top:Dr,right:Dr,width:Mn,height:Mn,cursor:"nesw-resize"},onPointerDown:C=>B(C,"ne")}),s.jsx("div",{ref:_,style:{position:"absolute",zIndex:vo,bottom:Dr,left:Dr,width:Mn,height:Mn,cursor:"nesw-resize"},onPointerDown:C=>B(C,"sw")}),s.jsx("div",{ref:g,style:{position:"absolute",zIndex:vo,bottom:0,right:0,width:Eh,height:Eh,cursor:"nwse-resize"},onPointerDown:C=>B(C,"se")})]})},Sy=({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(Ty,{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(za,{...e.getProps(),layoutId:i,path:a.getPath(),mainLayoutController:e})})},i)),o++):a.getType()==="float"&&(t.push(s.jsx(rE,{controller:e,layout:a,zIndex:n,onCloseLayout:e.onCloseLayout,children:s.jsx(za,{...e.getProps(),layoutId:i,path:a.getPath(),mainLayoutController:e})},i+"float")),n++));return s.jsx(s.Fragment,{children:t})};Sy.displayName="FloatingWindowContainer";var Ly=e=>{const{controller:t,tabNode:r,selected:o,border:n,icons:i,path:a}=e,l=v.useRef(null),c=v.useRef(null),u=t.getKeyMap(),d=N=>{r.isEnableDrag()?(N.stopPropagation(),t.getDragDropManager().setDragNode(N.nativeEvent,r)):N.preventDefault()},f=N=>{N.stopPropagation(),t.getDragDropManager().onDragEnded()},p=N=>{Pa(N)&&t.auxMouseClick(r,N)},g=N=>{t.showContextMenu(r,N)},m=()=>{t.doAction(oe.selectTab(r.getId()))},_=N=>{const A=l.current?.closest('[role="tablist"]');if(A){const F=Array.from(A.querySelectorAll('[role="tab"]'));F[F.indexOf(l.current)+N]?.focus()}},k=()=>{const N=l.current.ownerDocument,A=()=>ry(N.getElementById(Lt("flexlayout-tab-",r.getId())));o?A():(m(),requestAnimationFrame(A))},b=N=>{t.getEditingTab()!==r&&(io(N,u.focusTabToggle)?(k(),N.preventDefault()):N.key==="Enter"||N.key===" "?(m(),N.preventDefault()):(N.key==="ArrowLeft"||N.key==="ArrowUp")&&!ja(N)?(_(-1),N.preventDefault()):(N.key==="ArrowRight"||N.key==="ArrowDown")&&!ja(N)?(_(1),N.preventDefault()):io(N,u.closeTab)&&r.isCloseable()&&(_(1),t.doAction(oe.deleteTab(r.getId())),N.preventDefault()))},h=()=>{const N=r.getCloseType();return!!(o||N===fn.Always||N===fn.Visible&&window.matchMedia&&window.matchMedia("(hover: hover) and (pointer: fine)").matches)},y=N=>{h()&&(t.doAction(oe.deleteTab(r.getId())),N.stopPropagation())},w=N=>{N.stopPropagation()},x=()=>{if(o)return!0;const N=r.getParent();return N instanceof Je&&N.getSelected()===-1&&N.getChildren()[0]===r},T=t.getEditingTab()===r,L=v.useCallback(N=>{l.current=N,t.registerMeasurable(r,"tabbutton",N)},[t,r]);v.useLayoutEffect(()=>{T&&c.current.select()},[T]),v.useEffect(()=>{if(T){const N=t.getCurrentDocument().body,A=F=>{F.target!==c.current&&t.setEditingTab(void 0)};return N.addEventListener("pointerdown",A),()=>N.removeEventListener("pointerdown",A)}},[T,t]);const U=N=>{N.stopPropagation()},P=N=>{N.code==="Escape"?(t.setEditingTab(void 0),l.current?.focus()):(N.code==="Enter"||N.code==="NumpadEnter")&&(t.setEditingTab(void 0),t.doAction(oe.renameTab(r.getId(),N.target.value)),l.current?.focus())},j=t.getClassName;let M=j(V.FLEXLAYOUT__BORDER_BUTTON)+" "+j(V.FLEXLAYOUT__BORDER_BUTTON_+n);o?M+=" "+j(V.FLEXLAYOUT__BORDER_BUTTON__SELECTED):M+=" "+j(V.FLEXLAYOUT__BORDER_BUTTON__UNSELECTED),r.getClassName()!==void 0&&(M+=" "+r.getClassName());let O=0;r.getModel().isEnableRotateBorderIcons()===!1&&(n==="left"?O=r.getModel().getBorderLeftTabDirection()==="down"?-90:90:n==="right"&&(O=-90));const E=fp(t,r,O);let B=E.content?s.jsx("div",{className:j(V.FLEXLAYOUT__BORDER_BUTTON_CONTENT),children:E.content}):null;const C=E.leading?s.jsx("div",{className:j(V.FLEXLAYOUT__BORDER_BUTTON_LEADING),children:E.leading}):null;if(T&&(B=s.jsx("input",{ref:c,className:j(V.FLEXLAYOUT__TAB_BUTTON_TEXTBOX),"data-layout-path":a+"/textbox",type:"text","aria-label":t.i18nName(De.Rename_Tab),autoFocus:!0,defaultValue:r.getName(),onKeyDown:P,onPointerDown:U})),r.isCloseable()){const N=t.i18nName(De.Close_Tab);E.buttons.push(s.jsx("div",{"data-layout-path":a+"/button/close",title:N,"aria-hidden":"true",className:j(V.FLEXLAYOUT__BORDER_BUTTON_TRAILING),onPointerDown:w,onClick:y,children:typeof i.close=="function"?i.close(r):i.close},"close"))}const S=[Po(u.focusTabToggle),r.isCloseable()?Po(u.closeTab):void 0].filter(Boolean).join(" ")||void 0;return s.jsxs("div",{ref:L,id:Lt("flexlayout-tabbutton-",r.getId()),role:T?void 0:"tab","aria-selected":T?void 0:o,"aria-controls":T?void 0:Lt("flexlayout-tab-",r.getId()),"aria-label":T?void 0:E.name,"aria-keyshortcuts":T?void 0:S,tabIndex:T?-1:x()?0:-1,onKeyDown:b,"data-layout-path":a,className:M,onClick:m,onAuxClick:p,onContextMenu:g,title:r.getHelpText(),draggable:!0,onDragStart:d,onDragEnd:f,children:[C,B,E.buttons]})};Ly.displayName="BorderButton";var Cy=e=>{const{borderNode:t,controller:r,size:o}=e,n=v.useRef(null),i=v.useRef(null),a=v.useRef(null),l=v.useRef(null),c=v.useRef(null),u=v.useRef(null),[d,f]=v.useState(!1),p=v.useRef(null),g=r.getIcons();v.useEffect(()=>()=>p.current?.(),[]);const{userControlledPositionRef:m,onScroll:_,onScrollPointerDown:k,hiddenTabs:b,onMouseWheel:h,isDockStickyButtons:y,isShowHiddenTabs:w}=xy(r,t,we.flip(t.getOrientation()),u,a,n,r.getClassName(V.FLEXLAYOUT__BORDER_BUTTON)),x=v.useCallback(ie=>{n.current=ie,r.registerMeasurable(t,"borderheader",ie)},[r,t]),T=ie=>{Pa(ie)&&r.auxMouseClick(t,ie)},L=ie=>{r.showContextMenu(t,ie)},U=ie=>{ie.stopPropagation()},P=ie=>{const le=r.getShowOverflowMenu(),Oe=b.map(Ee=>({index:Ee,node:t.getChildren()[Ee]}));if(le!==void 0)le(t,ie,Oe,j);else{const Ee=l.current;f(!0),p.current=my(Ee,t,Oe,j,r,()=>{f(!1),p.current=null})}ie.stopPropagation()},j=ie=>{r.doAction(oe.selectTab(ie.node.getId())),m.current=!1},M=ie=>{const le=t.getChildren()[t.getSelected()];le!==void 0&&r.doAction(oe.popoutTab(le.getId(),"window")),ie.stopPropagation()},O=ie=>{const le=t.getChildren()[t.getSelected()];le!==void 0&&r.doAction(oe.popoutTab(le.getId(),"float")),ie.stopPropagation()},E=r.getClassName,B=()=>{const ie=[];for(let le=0;le{let ie,le=[],Oe=[],Ee;const ve={leading:ie,buttons:le,stickyButtons:Oe,overflowPosition:void 0};if(r.customizeTabSet(t,ve),ie=ve.leading,Oe=ve.stickyButtons,le=ve.buttons,ve.overflowPosition===void 0&&(ve.overflowPosition=Oe.length),Oe.length>0&&(y?le=[...Oe,...le]:Ee=s.jsx("div",{ref:c,onPointerDown:U,onDragStart:ue=>{ue.preventDefault()},className:E(V.FLEXLAYOUT__TAB_TOOLBAR_STICKY_BUTTONS_CONTAINER),children:Oe},"sticky_buttons_container")),w){const ue=r.i18nName(De.Overflow_Menu_Tooltip);let se;if(typeof g.more=="function"){const G=b.map(fe=>({index:fe,node:t.getChildren()[fe]}));se=g.more(t,G)}else se=s.jsxs(s.Fragment,{children:[g.more,s.jsx("div",{className:E(V.FLEXLAYOUT__TAB_BUTTON_OVERFLOW_COUNT),children:b.length>0?b.length:""})]});le.splice(Math.min(ve.overflowPosition,le.length),0,s.jsx("button",{tabIndex:0,"aria-haspopup":"menu","aria-expanded":d,"aria-label":ue,ref:l,className:E(V.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON)+" "+E(V.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_OVERFLOW)+" "+E(V.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_OVERFLOW_+t.getLocation().getName()),title:ue,onClick:P,onPointerDown:U,children:se},"overflowbutton"))}const Bt=t.getSelected();if(Bt!==-1){const ue=t.getChildren()[Bt];if(ue!==void 0&&r.isMainLayout()){if(ue.isEnablePopoutFloatIcon()){const se=r.i18nName(De.Popout_Tab_Float);le.push(s.jsx("button",{tabIndex:0,title:se,"aria-label":se,className:E(V.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON)+" "+E(V.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_FLOAT),onClick:O,onPointerDown:U,children:typeof g.popoutFloat=="function"?g.popoutFloat(ue):g.popoutFloat},"popout-float"))}if(r.isSupportsPopout()&&ue.isEnablePopoutIcon()&&ue.isAllowedInWindow()){const se=r.i18nName(De.Popout_Tab);le.push(s.jsx("button",{tabIndex:0,title:se,"aria-label":se,className:E(V.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON)+" "+E(V.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_FLOAT),onClick:M,onPointerDown:U,children:typeof g.popout=="function"?g.popout(ue):g.popout},"popout"))}}}const X=s.jsx("div",{ref:i,className:E(V.FLEXLAYOUT__BORDER_TOOLBAR)+" "+E(V.FLEXLAYOUT__BORDER_TOOLBAR_+t.getLocation().getName()),children:le},"toolbar");return{leading:ie,toolbar:X,stickyBar:Ee}},S=B(),{leading:N,toolbar:A,stickyBar:F}=C();let z=E(V.FLEXLAYOUT__BORDER)+" "+E(V.FLEXLAYOUT__BORDER_+t.getLocation().getName());t.getClassName()!==void 0&&(z+=" "+t.getClassName());let Z,Y;const q=o-1;t.getLocation()===te.LEFT?(Z=r.getModel().getBorderLeftTabDirection()==="down"?{left:"100%",top:0}:{right:"100%",top:0},Y={width:q,overflowY:"auto"}):t.getLocation()===te.RIGHT?(Z={left:"100%",top:0},Y={width:q,overflowY:"auto"}):(Z={left:0},Y={height:q,overflowX:"auto"});let Q;t.isEnableTabScrollbar()&&(Q=s.jsx("div",{ref:a,"aria-hidden":"true",className:E(V.FLEXLAYOUT__MINI_SCROLLBAR),onPointerDown:k}));let H;N&&(H=s.jsx("div",{className:E(V.FLEXLAYOUT__BORDER_LEADING),children:N}));const ee=E(V.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER)+" "+E(V.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER_+t.getLocation().getName())+(t.getLocation()===te.LEFT&&r.getModel().getBorderLeftTabDirection()==="down"?" "+E(V.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER_LEFT_DOWN):"");return s.jsxs("div",{ref:x,style:{display:"flex",flexDirection:t.getOrientation()===we.VERT?"row":"column"},className:z,"data-layout-path":t.getPath(),onClick:T,onAuxClick:T,onContextMenu:L,onWheel:h,children:[H,s.jsxs("div",{className:E(V.FLEXLAYOUT__MINI_SCROLLBAR_CONTAINER),children:[s.jsxs("div",{ref:u,className:E(V.FLEXLAYOUT__BORDER_INNER)+" "+E(V.FLEXLAYOUT__BORDER_INNER_+t.getLocation().getName()),style:Y,onScroll:_,children:[s.jsx("div",{style:Z,role:r.getEditingTab()?.getParent()===t?void 0:"tablist","aria-orientation":r.getEditingTab()?.getParent()!==t&&(t.getLocation()===te.LEFT||t.getLocation()===te.RIGHT)?"vertical":void 0,className:ee,children:S}),F]}),Q]}),A]})};Cy.displayName="BorderTabSet";function Ny(e){const{controller:t,borderNode:r,show:o}=e,n=v.useRef(null),i=v.useCallback(d=>{n.current=d,t.registerMeasurable(r,"bordercontent",d)},[t,r]);let a=!0;const l={};r.getOrientation()===we.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(V.FLEXLAYOUT__BORDER_TAB_CONTENTS),u=r.getLocation()===te.LEFT||r.getLocation()===te.TOP;if(r.isOverlay()){l.display="flex";const d={display:o?"flex":"none"};if(a){const p=t.getModel();for(const g of p.getBorderSet().getBorders())if(g!==r&&g.isOverlay()&&g.isShowing()&&g.getSelected()!==-1){const m=g.getSize()+p.getSplitterSize();g.getLocation()===te.TOP?d.top=m:g.getLocation()===te.BOTTOM&&(d.bottom=m)}}const f=t.getClassName(V.FLEXLAYOUT__BORDER_TAB_OVERLAY)+" "+t.getClassName(V.FLEXLAYOUT__BORDER_TAB_OVERLAY_+r.getLocation().getName());return s.jsxs("div",{className:f,style:d,children:[u&&s.jsx("div",{ref:i,style:l,className:c}),o&&s.jsx(ua,{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(ua,{controller:t,node:r,index:0,horizontal:a})]}):s.jsxs(s.Fragment,{children:[o&&s.jsx(ua,{controller:t,node:r,index:0,horizontal:a}),s.jsx("div",{ref:i,style:l,className:c})]})}Ny.displayName="BorderTab";var Oy=({controller:e,inner:t})=>{const r=e.getClassName(V.FLEXLAYOUT__LAYOUT_MAIN),o=e.getModel().getBorderSet().getBorderMap();if(e.isMainLayout()&&o.size>0){const n=s.jsx("div",{className:r,ref:e.getMainRef(),children:t}),i=new Map,a=new Map;for(const[d,f]of te.values){const p=o.get(f);p&&p.isShowing()&&(!p.isAutoHide()||p.isAutoHide()&&(p.getChildren().length>0||e.getState().showHiddenBorder===f))&&(i.set(f,s.jsx(Cy,{controller:e,borderNode:p,size:e.getState().calculatedBorderBarSize})),a.set(f,s.jsx(Ny,{controller:e,borderNode:p,show:p.getSelected()!==-1})))}const l=e.getClassName(V.FLEXLAYOUT__LAYOUT_BORDER_CONTAINER),c=e.getClassName(V.FLEXLAYOUT__LAYOUT_BORDER_CONTAINER_INNER),u=s.jsxs("div",{className:c,style:{flexDirection:"column"},children:[a.get(te.TOP),s.jsxs("div",{className:c,style:{flexDirection:"row"},children:[a.get(te.LEFT),n,a.get(te.RIGHT)]}),a.get(te.BOTTOM)]});return s.jsxs("div",{className:l,style:{flexDirection:"column"},children:[i.get(te.TOP),s.jsxs("div",{className:c,style:{flexDirection:"row"},children:[i.get(te.LEFT),u,i.get(te.RIGHT)]}),i.get(te.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})};Oy.displayName="BorderContainer";var My=v.memo(e=>{My.displayName="DragTabButton";const{controller:t,tabNode:r}=e,o=v.useRef(null);v.useEffect(()=>{r.setTabStamp(o.current)},[r]);const n=t.getClassName,i=n(V.FLEXLAYOUT__DRAG_RECT);return s.jsx("div",{ref:o,className:i,children:s.jsx(Ba,{controller:t,tabNode:r},r.getId())})},oE);function oE(e,t){return t.dragging}var za=v.forwardRef((e,t)=>{za.displayName="LayoutInternal";const[r,o]=v.useState({editingTab:void 0,showEdges:!1,showOverlay:!1,calculatedBorderBarSize:29,layoutRedrawRevision:0,fullRedrawRevision:0,showHiddenBorder:te.CENTER}),n=v.useCallback(j=>{o(M=>({...M,...typeof j=="function"?j(M,e):j}))},[e]),i=v.useRef(null),[a,l]=v.useState(0),c=v.useRef(null),u=v.useRef(null),d=v.useRef(null),f=v.useRef(null),p=v.useMemo(()=>new nE(e,r,n),[]);p.setProps(e),p.setStateRaw(r),p.setSetState(n),p.setLayoutRef(i),p.setMoveablesHomeRef(c),p.setFindBorderBarSizeRef(u),p.setFindSplitterSizeRef(d),p.setMainRef(f);const g=e.model.getLayouts().get(p.getLayoutId());g.setController(p),v.useImperativeHandle(t,()=>p,[p]),v.useLayoutEffect(()=>{const j=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(M=>M+1),j){const M=i.current?.ownerDocument.defaultView??window,O=M.requestAnimationFrame(()=>{p.syncLayoutMetrics(),p.positionTabPanels(),p.isReLayout()&&(p.redrawLayout(),p.setReLayout(!1))});return()=>M.cancelAnimationFrame(O)}}),v.useEffect(()=>{const j=i.current.ownerDocument,M=j.defaultView;p.setCurrentDocument(j),p.setCurrentWindow(M);const O=new M.ResizeObserver(()=>{p.updateRect(),p.syncLayoutMetrics(),p.positionTabPanels(),p.updateLayoutMetrics(),p.isReLayout()&&(p.redrawLayout(),p.setReLayout(!1))});O.observe(i.current),p.setGeometryResizeObserver(O),u.current&&O.observe(u.current),d.current&&O.observe(d.current);const E=()=>{p.updateRect()};M.addEventListener("resize",E);const B=()=>{for(const[C,S]of p.getProps().model.getLayouts()){const N=S.getController();N&&N.redrawLayout()}};return p.isMainLayout()&&(document.addEventListener("visibilitychange",B),j.addEventListener("pointerdown",p.onOverlayBorderPointerDown,!0),j.addEventListener("keydown",p.onOverlayBorderKeyDown)),(p.isMainLayout()||p.getLayout()?.getType()==="window")&&j.addEventListener("keydown",p.onTabsetNavKeyDown),()=>{p.setGeometryResizeObserver(void 0),O.disconnect(),M.removeEventListener("resize",E),document.removeEventListener("visibilitychange",B),j.removeEventListener("pointerdown",p.onOverlayBorderPointerDown,!0),j.removeEventListener("keydown",p.onOverlayBorderKeyDown),j.removeEventListener("keydown",p.onTabsetNavKeyDown)}},[p,a]),v.useEffect(()=>{let j;if(!p.isMainLayout()&&p.getLayout().getType()==="window"){const M=p.getProps().mainLayoutController?.getRootDiv();if(M){const O=M,E=i.current;wh(O,E),j=new MutationObserver(()=>{wh(O,E)&&p.redrawLayout()}),j.observe(O,{attributeFilter:["style"]})}}return()=>{j&&j.disconnect()}},[p]),v.useEffect(()=>{const j=e.model;if(g.setToExportRectFunction((M,O)=>O==="window"?p.getScreenRect(M):p.getRelativeRect(M)),p.setLayout(g),p.isMainLayout()){const M={onAfterAction:p.onModelChange};return j.addChangeListener(M),()=>{j.removeChangeListener(M)}}},[e.model,p,g]);const m=p.isMainLayout()?s.jsxs("div",{className:p.getClassName(V.FLEXLAYOUT__LAYOUT_METRICS),children:[s.jsx("div",{ref:u,className:p.getClassName(V.FLEXLAYOUT__BORDER_SIZER),children:"FindBorderBarSize"},"findBorderBarSize"),s.jsx("div",{ref:d,className:p.getClassName(V.FLEXLAYOUT__SPLITTER_+"horz")},"findSplitterSize")]}):null;if(!i.current)return s.jsx("div",{ref:i,className:p.getClassName(V.FLEXLAYOUT__LAYOUT),children:m});const _=e.model,k=p.getLayoutId();_.getRootRow(k).calcMinMaxSize(),_.getRootRow(k).setPaths(e.path||""),p.isMainLayout()&&_.getBorderSet().setPaths();const b=s.jsx(hy,{controller:p,show:r.showOverlay},"__overlay__"),h=p.renderLayout(),y=s.jsx(Oy,{controller:p,inner:h}),w=p.renderTabContainers(),x=p.reorderComponents(w,p.getOrderedTabIds());let T=null,L=null,U=null,P=null;return p.isMainLayout()&&(T=s.jsx(Sy,{controller:p}),L=p.reorderComponents(p.renderTabContents(),p.getOrderedTabMoveableIds()),U=s.jsx("div",{"aria-hidden":"true",className:p.getClassName(V.FLEXLAYOUT__LAYOUT_TAB_STAMPS),children:p.renderDragTabButtons()},"__dragTabButtons__"),P=s.jsx("div",{ref:c,className:p.getClassName(V.FLEXLAYOUT__LAYOUT_MOVEABLES_HOME)},"__moveables_home__")),s.jsxs("div",{ref:i,className:p.getClassName(V.FLEXLAYOUT__LAYOUT),onDragEnter:p.getDragDropManager().onDragEnterRaw,onDragLeave:p.getDragDropManager().onDragLeaveRaw,onDragOver:p.getDragDropManager().onDragOver,onDrop:p.getDragDropManager().onDrop,children:[m,P,b,y,x,L,T,U]})}),ro,nE=(ro=class{constructor(t,r,o){D(this,"_props");D(this,"_state");D(this,"_setState");D(this,"_layoutRef");D(this,"_moveablesHomeRef");D(this,"_findBorderBarSizeRef");D(this,"_findSplitterSizeRef");D(this,"_mainRef");D(this,"_orderedTabIds");D(this,"_orderedTabMoveableIds");D(this,"_currentDocument");D(this,"_currentWindow");D(this,"_showOverlay",!1);D(this,"_supportsPopout");D(this,"_popoutURL");D(this,"_icons");D(this,"_dragDropManager");D(this,"_layoutId");D(this,"_layout");D(this,"_mainController");D(this,"_popoutWindowName");D(this,"_cachedLayoutDOMRect");D(this,"_reLayout");D(this,"_measurables",new Map);D(this,"_tabPanels",new Map);D(this,"_lastRect",he.empty());D(this,"_lastSplitterSize",8);D(this,"_geometryResizeObserver");D(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(V.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())}});D(this,"onModelChange",t=>{const r=t instanceof Qm?t.actions:[t];for(const o of r)if(o.type==oe.DELETE_TAB&&this._state.showHiddenBorder!==te.CENTER&&this._props.model.getBorderSet().getBorderMap().get(this._state.showHiddenBorder).getChildren().length===0){this._setState({showHiddenBorder:te.CENTER});break}if(t.isAdjusting()&&(t.type===oe.ADJUST_WEIGHTS||t.type===oe.ADJUST_BORDER_SPLIT)){t.type===oe.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)});D(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(V.FLEXLAYOUT__POPUP_MENU_CONTAINER)+",."+this.getClassName(V.FLEXLAYOUT__FLOAT_WINDOW)+",."+this.getClassName(V.FLEXLAYOUT__FLOATING_WINDOW_CONTENT)+",."+this.getClassName(V.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(nt.MAIN_LAYOUT_ID)?.getRect();if(!(!a||!a.contains(n,i)))for(const l of r)l.getContentRect()?.contains(n,i)||this.closeOverlayBorder(l)});D(this,"onOverlayBorderKeyDown",t=>{if(!io(t,this.getKeyMap().closeOverlayBorder))return;const r=this._currentDocument?.activeElement;if(!r)return;const o=this._props.model.getBorderSet().getBorders().filter(n=>n.isOverlay()&&n.getSelected()!==-1);for(const n of o){const i=n.getSelectedNode(),a=this._currentDocument.getElementById(Lt("flexlayout-tab-",i.getId())),l=this._currentDocument.getElementById(Lt("flexlayout-tabbutton-",i.getId()));if(a&&a.contains(r)||r===l){this.closeOverlayBorder(n),t.preventDefault();break}}});D(this,"onTabsetNavKeyDown",t=>{if(t.defaultPrevented)return;const r=this.getKeyMap();let o;if(io(t,r.focusNextTabset))o=1;else if(io(t,r.focusPreviousTabset))o=-1;else return;this.focusAdjacentTabset(o)&&t.preventDefault()});D(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())}});D(this,"getClassName",t=>this._props.classNameMapper===void 0?t:this._props.classNameMapper(t));D(this,"onCloseLayout",t=>{this.doAction(oe.closePopout(t.getLayoutId()))});this._props=t,this._state=r,this._setState=o,this._orderedTabIds=[],this._orderedTabMoveableIds=[],this._supportsPopout=t.supportsPopout!==void 0?t.supportsPopout:aE,this._popoutURL=t.popoutURL?t.popoutURL:"popout.html",this._icons={...iE,...t.icons},this._layoutId=t.layoutId?t.layoutId:nt.MAIN_LAYOUT_ID,this._mainController=t.mainLayoutController?t.mainLayoutController:this,this._dragDropManager=new Yk(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(pp,{controller:this,rowNode:this._props.model.getRootRow(this._layoutId)},"__row__"),s.jsx(Ey,{controller:this})]})}renderTabContainers(){const t=new Map;return this._props.model.visitLayoutNodes(this._layoutId,r=>{if(r instanceof Ce){const o=r,n=o.isSelected(),i=o.isRendered(),a=o.isEnableRenderOnDemand();(i||n||!a)&&t.set(o.getId(),s.jsx(wy,{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 Ce){const i=n,a=i.isSelected(),l=i.isRendered(),c=i.isEnableRenderOnDemand(),u=i.getParent().getContentRect(),d=a||!c;if(l||d&&u.width>0&&u.height>0){const f=i.getMoveableElement();f.style.overflow=i.isEnableScrollbars()?"auto":"hidden";const p=o.getWindowId()||"",g=i.getId()+(i.isEnableWindowReMount()?p:"");t.set(i.getId(),br.createPortal(s.jsx(ky,{controller:this,tabNode:i,windowId:p,visible:d,fullRedrawRevision:this._state.fullRedrawRevision,parentRedrawRevision:this._props.parentRedrawRevision},g),f,g)),i.setRendered(!0)}}});return t}renderDragTabButtons(){const t=[];return this._props.model.visitNodes(r=>{if(r instanceof Ce){const o=r;t.push(s.jsx(My,{controller:this,tabNode:o,dragging:Ql},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 Ve)){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===te.CENTER&&(r>n.y-a&&rn.x-a&&t=o.getRight()-i?c=te.RIGHT:r<=o.y+i?c=te.TOP:r>=o.getBottom()-i&&(c=te.BOTTOM)),c!==this._state.showHiddenBorder&&this.setState({showHiddenBorder:c})}closeOverlayBorder(t){const r=t.getSelectedNode();if(r===void 0)return;const o=this._currentDocument,n=o?.getElementById(Lt("flexlayout-tab-",r.getId())),i=!!o&&!!n&&n.contains(o.activeElement);this.doAction(oe.selectTab(r.getId())),i&&o.getElementById(Lt("flexlayout-tabbutton-",r.getId()))?.focus()}focusAdjacentTabset(t){const r=this._currentDocument,o=r?.activeElement;if(!r||!o||!this.getRootDiv()?.contains(o))return!1;const n=o.tagName;if(n==="INPUT"||n==="TEXTAREA"||o.isContentEditable||o.closest('[role="menu"]')||this._props.model.getMaximizedTabset(this._layoutId)!==void 0)return!1;const i=[];if(this._props.model.visitLayoutNodes(this._layoutId,u=>{u instanceof Me&&u.getSelectedNode()!==void 0&&i.push(u)}),i.length<2)return!1;const a=u=>this._measurables.get("tabset:"+u.getId())?.element.contains(o)?!0:!!r.getElementById(Lt("flexlayout-tab-",u.getSelectedNode().getId()))?.contains(o);let l=i.findIndex(a);if(l===-1){const u=this._props.model.getActiveTabset(this._layoutId);l=u!==void 0?i.indexOf(u):0,l===-1&&(l=0)}const c=i[(l+t+i.length)%i.length];return r.getElementById(Lt("flexlayout-tabbutton-",c.getSelectedNode().getId()))?.focus(),this.doAction(oe.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 Me?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 jk(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&&!ro.Windows.has(t)&&ro.Windows.set(t,Dn())}getWindowId(){if(this.getCurrentWindow())return ro.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(oe.movePopoutToFront(t))}addTabToTabSet(t,r){if(this._props.model.getNodeById(t)!==void 0)return this.doAction(oe.addTab(r,t,te.CENTER,-1))}addTabToActiveTabSet(t){const r=this._props.model.getActiveTabset(this._layoutId);if(r!==void 0)return this.doAction(oe.addTab(t,r.getId(),te.CENTER,-1))}maximize(t){this.doAction(oe.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}),Zl(!t,this._currentDocument))}showOverlayOnAllWindows(t){for(const[,r]of this._props.model.getLayouts())r.getController()&&r.getController().showOverlay(t)}},D(ro,"Windows",new WeakMap),ro),iE={close:s.jsx(ts,{}),pin:s.jsx(ly,{}),closeTabset:s.jsx(ts,{}),closeFloatPopout:s.jsx(ts,{}),popout:s.jsx(Cd,{}),popoutFloat:s.jsx(dy,{}),maximize:s.jsx(sy,{}),restore:s.jsx(py,{}),more:s.jsx(cy,{}),edgeArrow:s.jsx(uy,{}),activeTabset:s.jsx(gy,{}),dragToDock:s.jsx(fy,{}),popoutFloatWindow:s.jsx(Cd,{})},aE=ty(),Ay=v.forwardRef((e,t)=>{const r=v.useRef(null),o=v.useRef(e.model),n=v.useRef(0);o.current!==e.model&&(e.model.getAdoptedFromModel()!==o.current&&n.current++,o.current=e.model),Ay.displayName="Layout",v.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 Ce&&l.isEnableRename()&&l.getLayout().getController()?.setEditingTab(l)},getRootDiv:()=>r.current.getRootDiv()}));const i={};return s.jsx(za,{ref:r,...e,parentRedrawRevision:i},n.current)});const Th=20,lE="bv-nodepack:layout-profiles:v1:",gp=new Map,Nd=new Map,rs=new Map,Od="bv-layout-session-changed",Dy=e=>`${lE}${e}`;function hp(e){try{const t=JSON.parse(localStorage.getItem(Dy(e))??"");if(t?.schemaVersion===1&&Array.isArray(t.profiles))return t}catch{}return{schemaVersion:1,profiles:[]}}function Iy(e,t){localStorage.setItem(Dy(e),JSON.stringify(t))}const sE=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 Rh(e){const t=hp(e.editorType),r=sE(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>Th)throw new Error(`A maximum of ${Th} layouts can be saved for this editor.`);return Iy(e.editorType,{schemaVersion:1,profiles:a,selectedId:o}),i}function cE(e,t){const r=hp(e);Iy(e,{...r,profiles:r.profiles.filter(o=>o.id!==t),selectedId:r.selectedId===t?void 0:r.selectedId})}function jy(e){Nd.set(e,(Nd.get(e)??0)+1);for(const t of rs.get(e)??[])t()}function uE(e){return Nd.get(e)??0}function dE(e,t){const r=rs.get(e)??new Set;return r.add(t),rs.set(e,r),()=>{r.delete(t),r.size||rs.delete(e)}}function os(e,t,r,o,n=!0){gp.set(e,{layout:structuredClone(t),status:r,profileId:o}),jy(e),n&&window.dispatchEvent(new CustomEvent(Od,{detail:{key:e}}))}function Ki(e){const t=gp.get(e);return t?structuredClone(t):void 0}function fE(e){gp.delete(e),jy(e)}function pE(e,t){return e.editorType===t.editorType&&e.editorVersion===t.editorVersion&&e.library===t.library&&e.signature===t.signature}function gE(e){const t=new Set,r=o=>{if(!(!o||typeof o!="object")){o.type==="tab"&&typeof o.id=="string"&&t.add(o.id);for(const n of o.children??[])r(n)}};r(e?.layout);for(const o of e?.borders??[])r(o);return t}function hE(e,t){const r=gE(e);return t.filter(o=>!r.has(o))}let ko=[];const Md=new Set,Py=()=>Md.forEach(e=>e());function Ct(e){const t=e.id??`${e.title}:${e.message??""}`,r=ko.findIndex(n=>n.id===t),o={...e,id:t};return ko=r>=0?[...ko.slice(0,r),o,...ko.slice(r+1)]:[...ko,o].slice(-3),Py(),t}function By(e){ko=ko.filter(t=>t.id!==e),Py()}const bE=e=>(Md.add(e),()=>Md.delete(e)),Sh=()=>ko;function vE(){const e=v.useSyncExternalStore(bE,Sh,Sh),t=v.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 v.useEffect(()=>{const r=o=>{const n=o.detail;n?.title&&Ct({title:n.title,message:n.message,tone:n.tone??"neutral",duration:n.duration??4500,actionLabel:n.actionLabel,onAction:n.onAction})};return window.addEventListener("bv-show-toast",r),()=>window.removeEventListener("bv-show-toast",r)},[]),v.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?br.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(C1,{tone:r.tone,title:r.title,duration:r.duration,actionLabel:r.actionLabel,onAction:r.onAction,onClose:()=>By(r.id),children:r.message},r.id))}),document.body):null}const Lh="flexlayout-react@0.10.5",zy=v.createContext(new Map);function mE({id:e}){const t=v.useContext(zy);return s.jsx(s.Fragment,{children:t.get(e)??null})}function yE(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.layoutId??t.id,name:t.title,component:t.id,enablePopoutFloatIcon:!0}]}))}}}const xE=new Set([oe.MOVE_NODE,oe.DELETE_TAB,oe.DELETE_TABSET,oe.RENAME_TAB]),_E=e=>xE.has(e.type)?"modified":"adjusted";function Ch(e){fE(e)}function Fy({storageId:e,panels:t,resetSignal:r=0,defaultModel:o,onStatus:n}){const i=JSON.stringify({panels:t.map(f=>`${f.layoutId??f.id}:${f.weight}`),defaultModel:o}),a=v.useMemo(()=>o??yE(t),[i]),[l,c]=v.useState(()=>nt.fromJson(Ki(e)?.layout??a)),u=v.useMemo(()=>new Map(t.map(f=>[f.id,f.content])),[t]);v.useEffect(()=>{const f=Ki(e),p=f?hE(f.layout,t.map(g=>g.layoutId??g.id)):[];c(nt.fromJson(f?.layout??a)),n?.(f?.status??"saved"),p.length&&Ct({id:`bv-layout-missing:${e}`,title:"Layout has new panels",message:`${p.length} registered panel${p.length===1?" is":"s are"} missing from this saved layout.`,tone:"info",duration:0,actionLabel:"Use Factory layout",onAction:()=>{Ch(e),c(nt.fromJson(a)),n?.("saved")}})},[a,i,e]),v.useEffect(()=>{r&&(Ch(e),c(nt.fromJson(a)),n?.("saved"))},[a,r,e]),v.useEffect(()=>{const f=p=>{if(p.detail?.key!==e)return;const g=Ki(e);g&&(c(nt.fromJson(g.layout)),n?.(g.status))};return window.addEventListener(Od,f),()=>window.removeEventListener(Od,f)},[n,e]);const d=f=>f.type===oe.POPOUT_TAB&&f.data.type==="float"&&l.getNodeById(f.data.node)?.getLayoutId()!==nt.MAIN_LAYOUT_ID?void 0:f;return s.jsx(zy.Provider,{value:u,children:s.jsx("div",{className:"bv-ui-dock flexlayout__theme_dark",children:s.jsx(Ay,{model:l,factory:f=>s.jsx(mE,{id:f.getComponent()??""}),constrainFloatPanels:!0,onAction:d,onModelChange:(f,p)=>{c(f);const g=Ki(e),m=g?.status==="modified"?"modified":_E(p);os(e,f.toJson(),m,g?.profileId,!1),n?.(m)}})})})}const Pr=({children:e,className:t=""})=>s.jsx("svg",{className:t,viewBox:"0 0 24 24","aria-hidden":"true",children:e}),Uy=()=>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"})}),Vy=v.createContext({narrow:!1,minimal:!1,menuOverflow:!1}),Wy=()=>v.useContext(Vy);function wE(e){const t=e.mode==="workspace",r=v.useRef(null),[o,n]=v.useState(1/0),[i,a]=v.useState(!1),l=v.useRef(null);v.useEffect(()=>{const u=r.current;if(!u)return;const d=new ResizeObserver(f=>n(f[0]?.contentRect.width??u.clientWidth));return d.observe(u),()=>d.disconnect()},[]);const c=v.useMemo(()=>({narrow:o<760,minimal:o<620,menuOverflow:o<520}),[o]);return s.jsx(Vy.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(Uy,{})}),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(Ds,{detail:{anchor:u.currentTarget}})),children:s.jsxs(Pr,{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(Ho,{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(Pr,{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(Pr,{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(Pr,{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(Pr,{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(Pr,{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(Pr,{children:s.jsx("path",{d:"m7 7 10 10M17 7 7 17"})})})]})]})})}const Ui=(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 Ln({open:e,title:t,shortTitle:r,context:o,center:n,children:i,status:a,actions:l,activationToken:c=0,allowWorkspace:u=!0,initialMode:d="floating",initialGeometry:f,minSize:p={width:360,height:240},mode:g,className:m="",bodyClassName:_="",menuVisible:k,onMenuVisible:b,onClose:h,onGeometry:y,onModeChange:w}){const x=r??(t==="BV Regional Editor"?"Reg. Editor":t==="Regional Quick Edit"?"Quick Edit":void 0),T=()=>Ui({x:Math.max(16,(window.innerWidth-(f?.width??760))/2),y:Math.max(16,(window.innerHeight-(f?.height??640))/2),width:f?.width??760,height:f?.height??640,...f},p),[L,U]=v.useState(u?d:"floating"),[P,j]=v.useState(!1),[M,O]=v.useState(T),E=g??L,B=v.useRef(null),C=v.useRef(null),S=v.useRef(M),N=v.useRef(f),A=v.useRef();v.useEffect(()=>{S.current=M},[M]),v.useEffect(()=>{e&&j(!1)},[e]),v.useEffect(()=>{const H=B.current;if(!(!e||!H))return C.current=document.activeElement instanceof HTMLElement&&!H.contains(document.activeElement)?document.activeElement:C.current,Lk(H)},[e]),v.useEffect(()=>{const H=B.current;if(!H)return;const ee=()=>{j(!1),requestAnimationFrame(()=>H.focus({preventScroll:!0}))},ie=()=>j(!0);return H.addEventListener("bv-ui-activate",ee),H.addEventListener("bv-ui-minimize",ie),()=>{H.removeEventListener("bv-ui-activate",ee),H.removeEventListener("bv-ui-minimize",ie)}},[]),v.useEffect(()=>{const H=B.current;if(!H)return;const ee=ie=>{const le=ie.detail;u&&le?.mode&&(U(le.mode),w?.(le.mode)),le?.mode==="floating"&&le.geometry&&O(Ui(le.geometry,p))};return H.addEventListener("bv-ui-set-window-state",ee),()=>H.removeEventListener("bv-ui-set-window-state",ee)},[u,p.height,p.width,w]),v.useEffect(()=>{e&&(j(!1),requestAnimationFrame(()=>B.current?.focus({preventScroll:!0})))},[c,e]),v.useEffect(()=>{const H=N.current;N.current=f,f&&O(ee=>Ui(kk(ee,H,f),p))},[f?.height,f?.width,f?.x,f?.y,p.height,p.width]),v.useEffect(()=>{if(!e)return;const H=()=>O(ee=>Ui(ee,p));return window.addEventListener("resize",H),()=>window.removeEventListener("resize",H)},[p.height,p.width,e]);const F=H=>{E!=="floating"||H.button!==0||H.target.closest("button,input,select,textarea")||(A.current={pointerId:H.pointerId,startX:H.clientX,startY:H.clientY,kind:"move",x:M.x,y:M.y},H.currentTarget.setPointerCapture(H.pointerId),H.preventDefault())},z=H=>ee=>{E!=="floating"||ee.button!==0||(A.current={pointerId:ee.pointerId,startX:ee.clientX,startY:ee.clientY,kind:"resize",direction:H,geometry:M},ee.currentTarget.setPointerCapture(ee.pointerId),ee.preventDefault(),ee.stopPropagation())},Z=H=>{const ee=A.current;if(!ee||ee.pointerId!==H.pointerId)return;const ie={x:H.clientX-ee.startX,y:H.clientY-ee.startY},le={...p,width:Math.min(p.width,420)};O(Oe=>Ui(ee.kind==="move"?{...Oe,x:ee.x+ie.x,y:ee.y+ie.y}:wk(ee.geometry,ie,ee.direction,le),p))},Y=H=>{A.current?.pointerId===H.pointerId&&(A.current=void 0,requestAnimationFrame(()=>y?.(S.current)))};if(!e)return null;const q=E==="workspace"?void 0:{left:M.x,top:M.y,width:M.width,height:M.height},Q=()=>{h(),requestAnimationFrame(()=>C.current?.focus({preventScroll:!0}))};return s.jsxs(s.Fragment,{children:[P&&s.jsx(wc,{title:t,onRestore:()=>j(!1),onClose:Q}),s.jsxs("div",{ref:B,tabIndex:-1,hidden:P,className:`bv-managed-window ${E} ${m}`.trim(),role:"dialog","aria-modal":E==="workspace","aria-label":t,style:q,onPointerDownCapture:()=>B.current&&yh(B.current),onFocusCapture:()=>B.current&&yh(B.current),onPointerMove:Z,onPointerUp:Y,onPointerCancel:Y,onKeyDown:H=>{if(H.key==="Escape"&&![...document.querySelectorAll(".bv-anchored-popover,[role='listbox'],[role='menu']")].some(ie=>ie.offsetParent!==null)){H.preventDefault(),H.stopPropagation(),Q();return}H.stopPropagation()},children:[s.jsxs("div",{className:"bv-managed-window-surface",children:[s.jsx(wE,{title:t,shortTitle:x,context:o,center:n,mode:E,allowWorkspace:u,menuVisible:k,onMenuVisible:b,onMode:()=>{if(!u)return;const H=E==="workspace"?"floating":"workspace";U(H),w?.(H)},onMinimize:()=>j(!0),onClose:Q,onPointerDown:F}),s.jsx("div",{className:`bv-managed-window-body ${_}`.trim(),children:i}),(a||l)&&s.jsx(kE,{status:a??null,actions:l,stacked:E==="floating"&&M.width<700,minimal:E==="floating"&&M.width<470})]}),E==="floating"&&["n","ne","e","se","s","sw","w","nw"].map(H=>s.jsx("div",{className:`bv-window-resize-handle ${H}`,"aria-hidden":"true",onPointerDown:z(H)},H))]})]})}function kE({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 bp({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(rp,{label:"More",actions:r,intent:"ghost",density:"compact"}),s.jsx("div",{className:"bv-footer-primary-action",children:e})]})}function wc({title:e,onRestore:t,onClose:r}){const o=v.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 bv-ui bv-density-compact",document.body.append(n)),n},[]);return v.useEffect(()=>{const n="#graph-canvas, .graph-canvas-container, nav, aside, [role='navigation'], .side-tool-bar-container, .side-bar-panel",i=()=>{const f=document.querySelector("#graph-canvas, .graph-canvas-container")?.getBoundingClientRect()??null,p=[...document.querySelectorAll("nav, aside, [role='navigation'], .side-tool-bar-container, .side-bar-panel")].map(m=>m.getBoundingClientRect()),g=Ek(f,p,{width:window.innerWidth,height:window.innerHeight});o.style.setProperty("--bv-ui-window-shelf-left",`${g.left}px`),o.style.setProperty("--bv-ui-window-shelf-bottom",`${g.bottom}px`)},a=new ResizeObserver(i),l=new Set,c=()=>document.querySelectorAll(n).forEach(d=>{l.has(d)||(l.add(d),a.observe(d))}),u=new MutationObserver(()=>{c(),i()});return c(),u.observe(document.body,{childList:!0,subtree:!0}),window.addEventListener("resize",i),i(),()=>{u.disconnect(),a.disconnect(),window.removeEventListener("resize",i)}},[o]),v.useEffect(()=>()=>{requestAnimationFrame(()=>{o.childElementCount||o.remove()})},[o]),br.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(Uy,{})}),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(Pr,{children:s.jsx("path",{d:"m7 7 10 10M17 7 7 17"})})})]}),o)}function il({label:e,value:t,options:r,onNavigate:o}){const n=v.useSyncExternalStore(mk,gi,gi),i=n==="keep",a=Wy(),[l,c]=v.useState(!1),u=v.useRef(null),d=r.filter(k=>k.value!==t);if(!d.length)return null;const f=i?"Keep current window when switching. Hold Shift to replace once.":"Replace current window when switching. Hold Shift to keep once.",p=a.minimal,g=a.narrow,m=s.jsx(tk,{className:"bv-window-node-select",label:e,value:"",options:d,onValue:(k,b)=>o(k,b.shiftKey?i:!i)}),_=s.jsxs("button",{type:"button",role:"switch","aria-label":f,"aria-checked":i,className:"bv-window-switch-mode",title:f,onClick:()=>dp(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&&m,!g&&_,g&&s.jsxs("div",{ref:u,className:"bv-window-navigator-overflow",children:[s.jsx("button",{type:"button","aria-label":"More window navigation options","aria-expanded":l,onClick:()=>c(k=>!k),children:"•••"}),s.jsx(Ho,{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:m}),s.jsxs("div",{className:"bv-window-navigator-panel-row is-mode",children:[s.jsx("span",{children:"Keep current window"}),_]})]})})]})]})}function $y({onClick:e,storageId:t,editorType:r="regional",signature:o=`${r}:v1`}){const[n,i]=v.useState(null),[a,l]=v.useState(""),[c,u]=v.useState(0),d=np(),f=t??"",p=v.useCallback(T=>dE(f,T),[f]),g=v.useCallback(()=>uE(f),[f]);if(v.useSyncExternalStore(p,g,()=>0),!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(Pr,{children:s.jsx("path",{d:"M4.9 9A7.5 7.5 0 1 1 5 15M4 4v5h5"})}),s.jsx("span",{children:"Reset layout"})]});const m=hp(r),_=Ki(t),k=m.profiles.find(T=>T.id===_?.profileId),b=()=>u(T=>T+1),h=()=>{if(!_)return;const T=Rh({id:n==="rename"?k?.id:void 0,name:a,editorType:r,editorVersion:"1",library:Lh,signature:o,layout:_.layout});os(t,_.layout,"saved",T.id),i(null),b()},y={editorType:r,editorVersion:"1",library:Lh,signature:o},w=(T,L)=>_?.status==="modified"?d.confirm({title:"Replace modified layout?",message:`Structural panel changes in this session will be discarded when switching to ${T}.`,confirmLabel:"Switch layout",danger:!0,action:L}):L(),x=[{id:"factory",label:"Factory layout",onSelect:()=>w("Factory",e)},...m.profiles.map(T=>{const L=pE(T,y);return{id:T.id,label:`${T.name}${L?"":" · Incompatible"}`,onSelect:()=>w(T.name,()=>{if(!L){e(),Ct({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}os(t,T.layout,"saved",T.id)})}}),{id:"save-as",label:"Save as new layout…",disabled:!_,onSelect:()=>{l(""),i("save")}},...k?[{id:"update",label:`Update ${k.name}`,onSelect:()=>{_&&(Rh({...k,layout:_.layout}),os(t,_.layout,"saved",k.id),b())}},{id:"rename",label:"Rename layout…",onSelect:()=>{l(k.name),i("rename")}},{id:"delete",label:"Delete layout",danger:!0,onSelect:()=>{cE(r,k.id),e(),b()}}]:[]];return s.jsxs(s.Fragment,{children:[s.jsx(rp,{label:`${k?.name??"Factory"}${_?.status&&_.status!=="saved"?` · ${_.status[0].toUpperCase()}${_.status.slice(1)}`:""}`,icon:s.jsx(Pr,{children:s.jsx("path",{d:"M4 5h16v14H4zM8 5v14M8 10h12"})}),actions:x}),s.jsx(el,{open:!!n,title:n==="rename"?"Rename layout":"Save layout",onClose:()=>i(null),footer:s.jsx(ne,{intent:"primary",onClick:h,children:n==="rename"?"Rename":"Save layout"}),children:s.jsx(Hr,{label:"Layout name",value:a,maxLength:40,onValue:l})}),d.dialog]})}const Hy=new Map;let Yy;function Rr(e,t){const r=String(t);r&&Hy.set(e,r),r&&e!=="quick"&&(Yy=e)}function EE(){return Yy}function xo(e){return Hy.get(e)}function Ps({label:e,value:t,onImport:r,allowImport:o=!0}){const[n,i]=v.useState(!1),[a,l]=v.useState(""),[c,u]=v.useState(""),d=async()=>{try{await navigator.clipboard.writeText(JSON.stringify(t,null,2)),Ct({title:"Draft copied",message:`${e} draft JSON was copied to the clipboard.`,tone:"success",duration:4e3})}catch{Ct({title:"Clipboard unavailable",message:"Copy the draft from the import/export dialog instead.",tone:"warning",duration:4e3}),l(JSON.stringify(t,null,2)),i(!0)}},f=()=>{try{const g=JSON.parse(a);r(g),i(!1),u("")}catch(g){u(g instanceof Error?g.message:"Invalid draft JSON")}},p=()=>{l(""),u(""),i(!0)};return s.jsxs(s.Fragment,{children:[s.jsx(ne,{intent:"ghost",onClick:d,children:"Copy draft"}),o&&s.jsx(ne,{intent:"ghost",onClick:p,children:"Import draft"}),s.jsx(el,{open:n,title:`Import ${e} draft`,description:"Imported JSON updates only the editor draft. Save explicitly to update the workflow.",onClose:()=>i(!1),footer:s.jsxs(s.Fragment,{children:[s.jsx(ne,{intent:"ghost",iconOnly:!0,"aria-label":"Paste from clipboard",title:"Paste from clipboard",onClick:async()=>{try{l(await navigator.clipboard.readText())}catch{u("Clipboard permission was not granted.")}},children:"⌘"}),s.jsx(ne,{intent:"primary",onClick:f,children:"Import draft"})]}),children:s.jsx(Q1,{label:"Draft JSON",value:a,rows:14,resize:"vertical",error:c,onValue:l})})]})}const Xr=(e,t)=>JSON.stringify(e)===JSON.stringify(t),qo=e=>e?.id??e?.key;function Ad(e,t,r,o="draft"){if(Xr(r,e))return{ok:!0,value:structuredClone(t)};if(Xr(t,e))return{ok:!0,value:structuredClone(r)};if(Xr(t,r))return{ok:!0,value:structuredClone(t)};if(Array.isArray(e)&&Array.isArray(t)&&Array.isArray(r)){if(![...e,...t,...r].every(_=>qo(_)!=null))return{ok:!1,reason:`Concurrent list change at ${o}`};const n=e.map(qo),i=t.map(qo),a=r.map(qo),l=!Xr(n,i.filter(_=>n.includes(_))),c=!Xr(n,a.filter(_=>n.includes(_)));if(l&&c&&!Xr(i,a))return{ok:!1,reason:`Concurrent reorder at ${o}`};const u=new Map(e.map(_=>[qo(_),_])),d=new Map(t.map(_=>[qo(_),_])),f=new Map(r.map(_=>[qo(_),_])),p=l?i:a,g=[...p,...i,...a].filter((_,k,b)=>b.indexOf(_)===k),m=[];for(const _ of g){const k=u.get(_),b=d.get(_),h=f.get(_);if(k&&b&&!h&&!Xr(k,b))return{ok:!1,reason:`Edited item ${_} was removed externally`};if(k&&!b&&h&&!Xr(k,h))return{ok:!1,reason:`Removed item ${_} changed externally`};if(!b&&!h)continue;if(!k){if(b&&h&&!Xr(b,h))return{ok:!1,reason:`Item ${_} was added differently`};m.push(structuredClone(b??h));continue}if(!b||!h){m.push(structuredClone(b??h));continue}const y=Ad(k,b,h,`${o}.${_}`);if(!y.ok)return y;m.push(y.value)}return{ok:!0,value:m}}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=Ad(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 TE(){const[e,t]=v.useState(xn);v.useEffect(()=>{const o=n=>t(n.detail);return window.addEventListener(fi,o),()=>window.removeEventListener(fi,o)},[]);const r=(o,n)=>ep({...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(no,{label:o.name,checked:o.enabled,onValue:n=>r(o.id,n)},o.id))}):s.jsx(Nr,{tone:"info",title:"No controls configured",children:"Create a control in Configuration before using live workflow states."})}const RE=({open:e,onClose:t,hasControlNodes:r=!0})=>{const[o,n]=v.useState(0),i=xn().controls.length>0,a=v.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(Ln,{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($y,{storageId:"control-center",editorType:"control-center",onClick:()=>n(l=>l+1)}),children:[!r&&s.jsx(Nr,{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(Fy,{storageId:"control-center",resetSignal:o+(i?0:1),defaultModel:a,panels:[{id:"controls",title:"Controls",weight:1,content:s.jsx(TE,{})},{id:"configuration",title:"Configuration",weight:1,content:s.jsx(hk,{})}]})]})},Xy=()=>globalThis.__bvSmartPipeEditorBridge??{},vp=e=>String(e?.type??e?.comfyClass??""),hu=e=>vp(e)==="BV Smart Pipe Merge"?"merge":"pipe",Bs=()=>ct().rootGraph??ct().graph,Nh=()=>nl(Bs(),e=>["BV Smart Pipe","BV Smart Pipe Merge"].includes(vp(e)));function SE(){const[e,t]=v.useState([]),[r,o]=v.useState(null),[n,i]=v.useState(0),[a,l]=v.useState({}),c=v.useRef(new Map),[u,d]=v.useState(null),f=()=>({mode:"floating",geometry:{x:Math.max(16,(window.innerWidth-860)/2),y:Math.max(16,(window.innerHeight-650)/2),width:860,height:650}}),p=k=>`${k.kind}:${Ia(Bs(),k.node)}`,g=(k,b)=>c.current.get(k)?.dirty?d({key:k,action:b}):b(),m=(k,b)=>{const h=p(k),y=r,w=()=>{Rr(k.kind,Ia(Bs(),k.node)),t(x=>{const T=b&&y&&y!==h?x.filter(L=>L.key!==y):x;return T.some(L=>L.key===h)?T:[...T,{key:h,target:k}]}),l(x=>({...x,[h]:y&&x[y]?structuredClone(x[y]):x[h]??f()})),o(h),i(x=>x+1)};b&&y&&y!==h?g(y,w):w()},_=k=>g(k,()=>{c.current.delete(k),t(b=>b.filter(h=>h.key!==k)),l(b=>{const h={...b};return delete h[k],h}),o(b=>b===k?null:b)});return v.useEffect(()=>{const k=b=>{const h=b.detail;h?.node&&m({node:h.node,kind:h.kind??hu(h.node)},gi()==="replace")};return window.addEventListener("bv-open-smart-pipe-editor",k),()=>window.removeEventListener("bv-open-smart-pipe-editor",k)}),s.jsxs(s.Fragment,{children:[e.map(k=>{const b=a[k.key]??f();return s.jsx(LE,{sessionKey:k.key,target:k.target,open:k.key===r,activation:n,presentation:b,onPresentation:h=>l(y=>({...y,[k.key]:h})),onActions:h=>c.current.set(k.key,h),onClose:()=>_(k.key),onRemap:h=>t(y=>y.map(w=>w.key===k.key?{...w,target:{node:h,kind:hu(h)}}:w)),onNavigate:(h,y)=>m({node:h,kind:hu(h)},y)},k.key)}),e.filter(k=>k.key!==r).map(k=>s.jsx(wc,{title:`${k.target.kind==="merge"?"Smart Pipe Merge":"Smart Pipe Editor"} · ${k.target.node.title||`#${k.target.node.id}`}`,onRestore:()=>m(k.target,!1),onClose:()=>_(k.key)},`shelf:${k.key}`)),s.jsx(op,{open:!!u,editorName:"Smart Pipe editor",onKeep:()=>d(null),onDiscard:()=>{const k=u;k&&c.current.get(k.key)?.discard(),d(null),k?.action()},onSave:()=>{const k=u;k&&c.current.get(k.key)?.save(),d(null),k?.action()}})]})}function LE({sessionKey:e,target:t,open:r,activation:o,presentation:n,onPresentation:i,onActions:a,onClose:l,onRemap:c,onNavigate:u}){const d=Xy()[t.kind],f=v.useMemo(()=>d?.read(t.node)??{},[d,t.node]),p=vc(f),g=p.value;mc(p);const m=v.useRef(structuredClone(f)),_=v.useRef(!1),[k,b]=v.useState(null),h=v.useMemo(()=>Ia(Bs(),t.node),[t.node]);v.useEffect(()=>{const M=()=>{const O=Nh().find(C=>C.key===h);if(!O){b("missing");return}if(O.node!==t.node){c(O.node);return}if(_.current)return;const E=d?.read(t.node)??{};if(JSON.stringify(E)===JSON.stringify(m.current))return;if(!p.canUndo){m.current=structuredClone(E),p.replace(E,!0),b(null);return}const B=Ad(m.current,g,E);B.ok?(m.current=structuredClone(E),p.replace(B.value)):b(B.reason)};return to().addEventListener("graphChanged",M),()=>to().removeEventListener("graphChanged",M)},[d,g,p.canUndo,p.replace,c,t.node,h]);const y=Si(t.node),w=Nh(),x=w.filter(M=>Rn(M.node)).map(M=>({value:M.key,label:`${M.breadcrumb?`${M.breadcrumb} › `:""}${M.node.title||vp(M.node)} · #${M.node.id}`})),T=M=>p.commit(O=>(M(O),O)),L=t.kind==="pipe"?d?.validation?.(t.node,g)??[]:[],U=()=>{_.current=!0;try{d?.save(t.node,g);const M=d?.read(t.node)??g;m.current=structuredClone(M),p.replace(M,!0),b(null)}finally{_.current=!1}},P=()=>{const M=d?.read(t.node)??{};m.current=structuredClone(M),p.replace(M,!0),b(null)};v.useEffect(()=>{a({dirty:p.canUndo,save:U,discard:P})},[d,g,p.canUndo,p.replace,a,e,t.node]);const j=s.jsx(il,{label:"Smart Pipe node",value:w.find(M=>M.node===t.node)?.key??"",options:x,onNavigate:(M,O)=>{const E=w.find(B=>B.key===M);E&&u(E.node,O)}});return s.jsx(Ln,{open:r,activationToken:o,title:t.kind==="merge"?"Smart Pipe Merge":"Smart Pipe Editor",shortTitle:"Smart Pipe",menuVisible:y,onMenuVisible:M=>Sn(t.node,M),context:j,mode:n.mode,initialGeometry:n.geometry,onModeChange:M=>i({...n,mode:M}),onGeometry:M=>i({...n,geometry:M}),minSize:{width:420,height:360},onClose:l,status:L.length?"Required inputs missing":p.canUndo?"Unsaved changes":"Saved",actions:s.jsx(bp,{primary:s.jsx(ne,{intent:"primary",onClick:U,children:"Save"}),secondary:s.jsxs(s.Fragment,{children:[s.jsx(ne,{disabled:!p.canUndo,onClick:P,children:"Discard"}),s.jsx(Ps,{label:t.kind==="merge"?"Smart Pipe Merge":"Smart Pipe",value:{schema:"bv.editor-draft",version:1,type:t.kind,data:g},onImport:M=>{if(M?.schema!=="bv.editor-draft"||M?.version!==1||M?.type!==t.kind||!M?.data)throw new Error("Draft type or version does not match this editor.");p.replace(M.data)}})]}),overflow:[{id:"undo",label:"Undo",disabled:!p.canUndo,onSelect:p.undo},{id:"redo",label:"Redo",disabled:!p.canRedo,onSelect:p.redo}]}),children:k?s.jsxs(Nr,{tone:"danger",title:k==="missing"?"Node no longer exists":"Smart Pipe changed externally",children:[k==="missing"?"This draft cannot be saved because its workflow node was removed.":"An external change could not be migrated safely. Reload the editor to discard the incompatible draft.",s.jsxs("div",{className:"bv-callout-actions",children:[s.jsx(Ps,{label:t.kind==="merge"?"Smart Pipe Merge":"Smart Pipe",value:{schema:"bv.editor-draft",version:1,type:t.kind,data:g},onImport:()=>{},allowImport:!1}),s.jsx(ne,{onClick:()=>{if(k==="missing")l();else{const M=d?.read(t.node)??{};m.current=structuredClone(M),p.replace(M,!0),b(null)}},children:k==="missing"?"Close window":"Reload editor"})]})]}):t.kind==="pipe"?s.jsx(CE,{node:t.node,draft:g,update:T}):s.jsx(NE,{draft:g,update:T})})}function CE({node:e,draft:t,update:r}){const o=Xy().pipe,[n,i]=v.useState(()=>o?.predecessor(e)??{value:"Start new pipe",options:[]}),a=o?.validation?.(e,t)??[];v.useEffect(()=>{const f=()=>i(o?.predecessor(e)??{value:"Start new pipe",options:[]});to().addEventListener("graphChanged",f);const p=window.setInterval(f,750);return()=>{to().removeEventListener("graphChanged",f),window.clearInterval(p)}},[o,e]);const l=t.definition?.localSlots??[],c=t.projection?.inheritedSlots??[],u=[...l.map((f,p)=>({id:f.id,title:f.name||"New slot",description:"Local · input required",summary:f.type||"*",content:s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(Hr,{label:"Name",value:f.name??"",onValue:g=>r(m=>{m.definition.localSlots[p].name=g})}),s.jsx(Hr,{label:"Type",value:f.type??"*",onValue:g=>r(m=>{m.definition.localSlots[p].type=g||"*"})}),s.jsx(no,{label:"Expose output",checked:!!f.showOutput,onValue:g=>r(m=>{m.definition.localSlots[p].showOutput=g})})]})})),...c.map((f,p)=>({id:f.id,title:f.name||f.id,description:"Inherited override",content:s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(no,{label:"Expose input",checked:!!f.showInput,onValue:g=>r(m=>{m.projection.inheritedSlots[p].showInput=g})}),s.jsx(no,{label:"Expose output",checked:!!f.showOutput,onValue:g=>r(m=>{m.projection.inheritedSlots[p].showOutput=g})})]})}))],d=()=>r(f=>{f.definition.localSlots.push({id:crypto.randomUUID(),name:"new_slot",ordinal:f.definition.nextOrdinal++,type:"*",showInput:!0,showOutput:!1})});return s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(at,{label:"Pipe predecessor",value:n.value,options:n.options.length?n.options:[{value:n.value,label:n.value}],onValue:f=>{o?.setPredecessor(e,f),i(o?.predecessor(e)??{value:f,options:n.options})}}),a.length>0&&s.jsx(Nr,{tone:"danger",title:"Required Smart Pipe inputs are missing",children:a.map(f=>s.jsx("div",{children:f.message},f.id))}),s.jsx(ne,{onClick:d,children:"Add slot"}),u.length?s.jsx(tl,{items:u,onReorder:f=>r(p=>{const g=new Map(p.definition.localSlots.map(m=>[m.id,m]));p.definition.localSlots=f.map(m=>g.get(m.id)).filter(Boolean)}),onRemove:f=>r(p=>{p.definition.localSlots=p.definition.localSlots.filter(g=>g.id!==f),p.projection.inheritedSlots=p.projection.inheritedSlots.filter(g=>g.id!==f)})}):s.jsx(hc,{title:"No slots",description:"Add a local slot or connect a predecessor."})]})}function NE({draft:e,update:t}){const r=e.sources??[],[o,n]=v.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(at,{label:"Wireless source",value:o,options:(e.candidates??[]).map(c=>({value:c.address,label:c.label})),onValue:n}),s.jsx(ne,{disabled:!a,onClick:l,children:"Add"})]}),i.length?s.jsx(tl,{items:i,onReorder:c=>t(u=>{const d=new Map(u.sources.map(f=>[f.key,f]));u.sources=c.map(f=>d.get(f.id)).filter(Boolean)}),onRemove:c=>t(u=>{u.sources=u.sources.filter(d=>d.key!==c)})}):s.jsx(hc,{title:"No merge sources",description:"Connect a pipe or add a wireless source."})]})}const OE=`: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{color-scheme:dark;--bv-ui-bg:#0f1217;--bv-ui-surface:#171b22;--bv-ui-surface-raised:#1d222a;--bv-ui-surface-subtle:#13171d;--bv-ui-surface-hover:#252c36;--bv-ui-surface-active:#2d3541;--bv-ui-input:#12161c;--bv-ui-text:#edf2f7;--bv-ui-text-on-accent:#f8faff;--bv-ui-muted:#9ba6b4;--bv-ui-disabled:#697482;--bv-ui-border:#303945;--bv-ui-border-hover:#424d5c;--bv-ui-border-strong:#424d5c;--bv-ui-action:#2d518f;--bv-ui-action-hover:#3760a4;--bv-ui-action-active:#254477;--bv-ui-brand:#1345b7;--bv-ui-accent:var(--bv-ui-brand);--bv-ui-accent-hover:#2858c2;--bv-ui-accent-light:#6688d2;--bv-ui-accent-soft:#a9bce8;--bv-ui-accent-rgb:19,69,183;--bv-ui-selection-bg:rgba(19,69,183,.18);--bv-ui-selection-border:rgba(19,69,183,.46);--bv-ui-focus-ring:rgba(19,69,183,.3);--bv-ui-success:#356f59;--bv-ui-success-fg:#83c7aa;--bv-ui-success-bg:rgba(53,111,89,.2);--bv-ui-warning:#80612e;--bv-ui-warning-fg:#dfbd7a;--bv-ui-warning-bg:rgba(128,97,46,.22);--bv-ui-danger:#7b3f4b;--bv-ui-danger-fg:#e4a3af;--bv-ui-danger-bg:rgba(123,63,75,.22);--bv-ui-info:#355f78;--bv-ui-info-fg:#9cc7dd;--bv-ui-info-bg:rgba(53,95,120,.22);--bv-ui-overlay:rgba(5,8,12,.72);--bv-ui-shadow:rgba(0,0,0,.52);--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}:root[data-bv-theme=cool-graphite][data-bv-appearance=light] :is(.bv-ui,#bv-root,.bv-ui-portal,.bv-completion-popup),:root[data-bv-theme=cool-graphite][data-bv-appearance=auto].comfy-theme-light :is(.bv-ui,#bv-root,.bv-ui-portal,.bv-completion-popup){color-scheme:light;--bv-ui-bg:#f2f5f8;--bv-ui-surface:#ffffff;--bv-ui-surface-raised:#e7ecf2;--bv-ui-surface-subtle:#eef2f6;--bv-ui-surface-hover:#dce3eb;--bv-ui-surface-active:#cfd8e2;--bv-ui-input:#f8fafc;--bv-ui-text:#1b2530;--bv-ui-text-on-accent:#f8faff;--bv-ui-muted:#5f6d7c;--bv-ui-disabled:#8d98a4;--bv-ui-border:#c4ced9;--bv-ui-border-hover:#8e9baa;--bv-ui-border-strong:#6f7e8f;--bv-ui-action:#2d518f;--bv-ui-action-hover:#244477;--bv-ui-action-active:#1d3864;--bv-ui-accent-light:#315fc3;--bv-ui-accent-soft:#274ea7;--bv-ui-selection-bg:rgba(19,69,183,.12);--bv-ui-selection-border:rgba(19,69,183,.42);--bv-ui-focus-ring:rgba(19,69,183,.24);--bv-ui-success-fg:#285946;--bv-ui-success-bg:rgba(53,111,89,.13);--bv-ui-warning-fg:#684c1f;--bv-ui-warning-bg:rgba(128,97,46,.14);--bv-ui-danger-fg:#713744;--bv-ui-danger-bg:rgba(123,63,75,.13);--bv-ui-info-fg:#284f68;--bv-ui-info-bg:rgba(53,95,120,.13);--bv-ui-overlay:rgba(15,18,23,.48);--bv-ui-shadow:rgba(39,50,64,.22)}.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}.bv-anchored-popover.bv-popover{min-width:260px}.bv-anchored-popover.bv-popover:has(.bv-menu-stack){width:min(320px,calc(100vw - 16px))}.bv-anchored-popover.bv-popover:has(.help-menu){width:min(560px,calc(100vw - 16px))}.bv-menu-stack{display:grid;gap:8px;width:100%}.bv-menu-stack>.bv-button{justify-content:space-between;width:100%;text-align:left}.bv-menu-stack>hr{width:100%;margin:2px 0;border:0;border-top:1px solid var(--bv-ui-border)}.bv-menu-stack>small{color:var(--bv-ui-muted)}.bv-anchored-popover.bv-popover:has(.editor-menus-overflow-panel){width:min(320px,calc(100vw - 16px))}.editor-menus-overflow-panel{display:grid;gap:3px}.menu-item{position:relative}.editor-menus>.menu-item>button{padding:4px 7px;border-color:transparent;background:transparent}.menu-popover,.toolbar-popover{position:absolute;z-index:20;top:calc(100% + 5px);left:0;display:grid;min-width:230px;padding:7px;border:1px solid var(--bv-border-color);border-radius:var(--bv-ui-radius);background:var(--comfy-menu-bg, #20242a);box-shadow:0 12px 35px #000b}.menu-popover button{display:flex;justify-content:space-between;border-color:transparent;background:transparent;text-align:left}.menu-popover button:hover{background:#ffffff12}.menu-popover hr{width:100%;border:0;border-top:1px solid #ffffff18}.menu-popover kbd{color:var(--bv-muted-text-color)}.view-menu label{display:grid;grid-template-columns:1fr auto;gap:7px}.view-menu input{grid-column:1 / -1;width:100%;padding:0}.view-menu small{padding:5px 7px;color:var(--bv-muted-text-color)}.help-menu{width:min(680px,calc(100vw - 40px));grid-template-columns:repeat(2,minmax(280px,1fr));gap:18px}.help-section{min-width:0}.help-section strong{display:block;margin-bottom:8px}.help-section dl{display:grid;grid-template-columns:minmax(135px,auto) minmax(110px,1fr);gap:5px 12px;margin:0}.help-section dt{color:#8fd2ff;white-space:nowrap}.help-section dd{min-width:0;margin:0;color:var(--bv-muted-text-color)}@media (max-width: 720px){.help-menu{width:calc(100vw - 40px);grid-template-columns:1fr;max-height:calc(100vh - 90px);overflow:auto}}.help-button{width:29px;border-radius:50%!important}.toolbar-popover-anchor{position:relative}.toolbar-popover{right:0;left:auto;gap:7px}.toolbar-popover label{display:grid;grid-template-columns:65px 1fr;align-items:center}.toolbar-popover input{width:120px!important}.panel-splitter{position:relative;cursor:col-resize;background:#ffffff0b;border-left:1px solid #ffffff12;border-right:1px solid #0008}.panel-splitter:hover,.panel-splitter:active{background:var(--bv-primary-color)}.bv-regional-shell main>aside{min-width:0}.bv-regional-shell .layers{display:flex;flex-direction:column;padding:8px}.panel-toolbar{display:flex;align-items:center;gap:3px;margin-bottom:7px;padding:4px;background:#ffffff06;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.panel-toolbar-spacer{flex:1}.panel-toolbar .panel-tool{display:flex;align-items:center;justify-content:center;gap:5px;min-width:28px;height:28px;min-height:28px;padding:0 6px;color:var(--bv-ui-muted);background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius-sm)}.panel-toolbar .panel-tool.primary{color:var(--bv-ui-accent-soft);background:rgba(var(--bv-ui-accent-rgb),.11);border-color:rgba(var(--bv-ui-accent-rgb),.2)}.panel-toolbar .panel-tool:hover:not(:disabled){color:var(--bv-ui-text);background:#fff1;border-color:#ffffff14}.panel-toolbar .panel-tool.danger:not(:disabled){color:#e68f8a}.panel-toolbar .panel-tool:disabled{opacity:.35;cursor:default}.panel-toolbar .panel-tool .tree-control-icon{width:15px;height:15px}.panel-toolbar .panel-tool span{flex:none}.region-row{position:relative;display:grid;grid-template-columns:18px 20px 14px minmax(55px,1fr) auto auto 25px 27px 20px}.region-row .region-expand{display:grid;place-items:center;width:20px;min-width:20px;height:24px;min-height:24px;padding:0;color:var(--bv-ui-muted)}.region-row .region-usage{flex:none;color:var(--bv-muted-text-color);font-size:10px;letter-spacing:.03em}.region-row .priority{flex:none;color:var(--bv-muted-text-color);font-size:11px}.layer-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.inline-name{min-width:0;width:100%;padding:2px 4px!important}.geometry-row{position:relative;margin-bottom:3px}.geometry-tree-item{margin-bottom:4px}.geometry-row{grid-template-columns:18px 20px 22px minmax(0,1fr) 25px 27px 20px 24px;margin-bottom:0}.geometry-row .layer-expand{display:grid;place-items:center;width:20px;min-width:20px;height:24px;min-height:24px;padding:0;color:var(--bv-ui-muted)}.bv-regional-shell .tree-control-icon{display:block;width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round;pointer-events:none}.bv-regional-shell .tree-control-icon circle[r="1"]{fill:currentColor;stroke:none}.bv-regional-shell .tree-icon-button{display:grid;place-items:center;width:24px;min-width:24px;height:24px;min-height:24px;padding:0;color:var(--bv-ui-muted);background:transparent;border:0;border-radius:var(--bv-ui-radius-sm)}.bv-regional-shell .tree-icon-button:hover{color:var(--bv-ui-text);background:#ffffff0e}.bv-regional-shell .tree-icon-button.deviant{color:#e2b96e;background:#e2b96e13}.bv-regional-shell .tree-icon-button.deviant:hover{color:#f0cc88;background:#e2b96e21}.bv-regional-shell .tree-check{display:grid;place-items:center;align-self:center;width:16px;min-width:16px;height:16px;min-height:16px;padding:0;color:var(--bv-ui-muted);background:transparent;border:1px solid color-mix(in srgb,var(--bv-ui-muted) 72%,transparent);border-radius:var(--bv-ui-radius-sm);box-shadow:none}.bv-regional-shell .tree-check[aria-checked=true]{color:var(--bv-ui-muted);border-color:color-mix(in srgb,var(--bv-ui-muted) 72%,transparent);background:transparent}.bv-regional-shell .tree-check.deviant{color:#e2b96e;border-color:#e2b96eb8;background:#e2b96e13}.bv-regional-shell .tree-check:hover{color:var(--bv-ui-text);border-color:var(--bv-ui-text);background:#ffffff09}.bv-regional-shell .tree-check.deviant:hover{color:#f0cc88;border-color:#e2b96e;background:#e2b96e21}.bv-regional-shell .tree-check .tree-control-icon{width:13px;height:13px;stroke-width:2.2}.bv-regional-shell .layer-overflow{position:relative;margin:0;padding:0!important;border:0!important;border-radius:0}.bv-regional-shell .layer-overflow>summary{display:grid;place-items:center;width:24px;height:24px;margin:0!important;padding:0;color:var(--bv-ui-muted);border-radius:var(--bv-ui-radius-sm);cursor:pointer;list-style:none}.bv-regional-shell .layer-overflow>summary::-webkit-details-marker{display:none}.bv-regional-shell .layer-overflow>summary:hover,.bv-regional-shell .layer-overflow[open]>summary{color:var(--bv-ui-text);background:#ffffff12}.bv-regional-shell .layer-overflow>div{position:absolute;z-index:30;top:calc(100% + 4px);right:0;display:grid;gap:2px;min-width:142px;padding:4px;background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius);box-shadow:0 10px 28px #00000061}.bv-regional-shell .layer-overflow>div>button{width:100%;min-height:28px;padding:4px 8px;text-align:left;white-space:nowrap}.geometry-operations{position:relative;display:grid;gap:2px;margin:2px 0 5px 20px;padding-left:12px;border-left:1px solid rgba(var(--bv-ui-accent-rgb),.28)}.geometry-operation{position:relative;display:grid;grid-template-columns:18px minmax(0,1fr) 24px 24px;align-items:center;gap:3px;min-height:32px;padding:3px 4px;color:var(--bv-ui-muted);border:1px solid transparent;border-radius:var(--bv-ui-radius-sm)}.geometry-operation:hover{color:var(--bv-ui-text);background:#ffffff0b}.geometry-operation.selected{color:var(--bv-ui-text);background:rgba(var(--bv-ui-accent-rgb),.14);border-color:rgba(var(--bv-ui-accent-rgb),.36);box-shadow:inset 2px 0 0 var(--bv-ui-accent)}.geometry-operation-select{display:grid!important;grid-template-columns:22px minmax(0,1fr) auto;align-items:center;gap:5px;min-width:0;min-height:24px;padding:0!important;color:inherit;text-align:left;background:transparent!important;border:0!important;box-shadow:none!important}.geometry-operation-select>span:nth-child(2){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.geometry-operation small{color:var(--bv-ui-muted);font-size:calc(9px * var(--bv-ui-scale));text-transform:capitalize}.geometry-operation>button:not(.geometry-operation-select){display:grid;place-items:center;min-width:24px;min-height:24px;padding:0;background:transparent;border:0}.operation-kind{display:grid;place-items:center;width:20px;height:20px;border-radius:var(--bv-ui-radius-sm);font-weight:800}.operation-kind.add{color:var(--bv-ui-accent-soft);background:rgba(var(--bv-ui-accent-rgb),.16)}.operation-kind.subtract{color:#f0c275;background:#e9b65f21}.bv-regional-shell .tree-drag-handle{display:grid;place-items:center;width:18px;min-width:18px;height:24px;min-height:24px;padding:0;color:var(--bv-ui-muted);background:transparent;border:0;border-radius:var(--bv-ui-radius-sm);cursor:grab;opacity:.62}.bv-regional-shell .tree-drag-handle:hover{color:var(--bv-ui-text);background:#ffffff12;opacity:1}.bv-regional-shell .tree-drag-handle:active{cursor:grabbing}.drop-target.drop-inside{background:rgba(var(--bv-ui-accent-rgb),.14)!important;outline:1px solid rgba(var(--bv-ui-accent-rgb),.7)!important}.drop-target.drop-before:before,.drop-target.drop-after:after{content:"";position:absolute;z-index:4;left:4px;right:4px;height:2px;background:var(--bv-ui-accent);border-radius:var(--bv-ui-radius-sm);box-shadow:0 0 0 2px rgba(var(--bv-ui-accent-rgb),.12)}.drop-target.drop-before:before{top:-2px}.drop-target.drop-after:after{bottom:-2px}.option-section{display:grid;gap:8px;padding:10px 0;border-bottom:1px solid #ffffff18}.option-section:first-child{padding-top:0}.option-section h3{margin:0;font-size:14px}.option-hint{padding:10px;border:1px dashed #ffffff22;border-radius:var(--bv-ui-radius-sm);color:var(--bv-muted-text-color)}.inspector details textarea{min-height:90px}.stroke-width-meta{color:var(--bv-muted-text-color);font-variant-numeric:tabular-nums}.inspector-density{width:100%;height:100%;min-height:0}.region-color-control{display:block;padding:8px;border:1px solid #ffffff18;border-radius:var(--bv-ui-radius)}.region-color-split{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end}.region-color-split>.bv-button{width:30px;min-width:30px;margin-bottom:1px;margin-left:-1px;border-radius:0 var(--bv-ui-radius) var(--bv-ui-radius) 0}.region-color-split>.bv-control-field .bv-color-field{border-radius:var(--bv-ui-radius) 0 0 var(--bv-ui-radius)}.region-color-control>.bv-control-field{min-width:0}.region-color-control>.bv-button{align-self:center}.bv-regional-shell header{min-height:38px;padding:5px 8px;gap:7px}.bv-regional-shell header strong{font-size:13px;white-space:nowrap}.menu-popover{font-size:13px;line-height:1.25}.menu-popover button{min-height:27px;padding:5px 7px}.menu-popover small{padding:5px 7px;color:var(--bv-muted-text-color)}.artboard-menu{gap:7px}.artboard-menu label{display:grid;grid-template-columns:65px 1fr;align-items:center}.artboard-menu input{width:130px}.bv-regional-shell[hidden]{display:none!important}.bv-managed-window{position:fixed;z-index:var(--bv-layer-window);min-width:0;min-height:0;overflow:visible;color:var(--bv-ui-text);border-radius:var(--bv-ui-radius);box-shadow:0 20px 70px #000b;outline:0}.bv-managed-window-surface{display:grid;grid-template-rows:auto minmax(0,1fr) auto;width:100%;height:100%;overflow:hidden;background:var(--bv-ui-surface);border:1px solid var(--bv-ui-border-hover);border-radius:inherit}.bv-managed-window[hidden]{display:none!important}.bv-managed-window.floating{resize:none}.bv-managed-window.workspace{left:24px;top:58px;width:calc(100vw - 48px);height:calc(100vh - 82px);border-radius:var(--bv-ui-radius);resize:none}.bv-managed-window-body{min-width:0;min-height:0;padding:var(--bv-ui-content-padding);overflow:auto}.bv-managed-window.floating>.bv-ui-window-header{cursor:move;user-select:none;touch-action:none}.bv-managed-window .bv-ui-window-header button,.bv-managed-window .bv-ui-window-header select{cursor:pointer;user-select:auto}.bv-window-resize-handle{position:absolute;z-index:8;touch-action:none}.bv-window-resize-handle.n,.bv-window-resize-handle.s{right:10px;left:10px;height:5px;cursor:ns-resize}.bv-window-resize-handle.n{top:0}.bv-window-resize-handle.s{bottom:0}.bv-window-resize-handle.e,.bv-window-resize-handle.w{top:10px;bottom:10px;width:5px;cursor:ew-resize}.bv-window-resize-handle.e{right:0}.bv-window-resize-handle.w{left:0}.bv-window-resize-handle.ne,.bv-window-resize-handle.nw,.bv-window-resize-handle.se,.bv-window-resize-handle.sw{width:10px;height:10px}.bv-window-resize-handle.ne,.bv-window-resize-handle.sw{cursor:nesw-resize}.bv-window-resize-handle.nw,.bv-window-resize-handle.se{cursor:nwse-resize}.bv-window-resize-handle.n,.bv-window-resize-handle.ne,.bv-window-resize-handle.nw{top:0}.bv-window-resize-handle.s,.bv-window-resize-handle.se,.bv-window-resize-handle.sw{bottom:0}.bv-window-resize-handle.e,.bv-window-resize-handle.ne,.bv-window-resize-handle.se{right:0}.bv-window-resize-handle.w,.bv-window-resize-handle.nw,.bv-window-resize-handle.sw{left:0}.bv-ui-window-header{display:grid!important;grid-template-columns:minmax(320px,1fr) auto minmax(180px,1fr);align-items:center;gap:calc(8px * var(--bv-ui-scale));min-height:calc(34px * var(--bv-ui-scale))!important;padding:calc(2px * var(--bv-ui-scale)) calc(6px * var(--bv-ui-scale))!important;background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)!important}.bv-managed-window .bv-ui-window-header{grid-template-columns:minmax(0,1fr) auto}.bv-managed-window .bv-ui-window-center:empty{display:none}.bv-managed-window .bv-ui-window-header:has(.bv-ui-window-center:not(:empty)){grid-template-columns:minmax(250px,1fr) auto minmax(78px,1fr)}.bv-regional-window-body{display:flex;flex-direction:column;min-width:0;min-height:0;padding:0;overflow:hidden}.bv-regional-window-body>.bv-regional-dock-host{flex:1;min-height:0}.bv-ui-window-identity{display:flex;align-items:center;gap:calc(7px * var(--bv-ui-scale));min-width:0;overflow:visible}.bv-ui-window-icon{display:grid;place-items:center;width:calc(25px * var(--bv-ui-scale));height:calc(25px * var(--bv-ui-scale));flex:0 0 calc(25px * var(--bv-ui-scale));color:var(--bv-ui-accent-soft);background:rgba(var(--bv-ui-accent-rgb),.13);border:1px solid rgba(var(--bv-ui-accent-rgb),.22);border-radius:var(--bv-ui-radius-sm)}.bv-ui-window-icon svg,.bv-ui-window-reset svg,.bv-ui-window-shelf-icon svg{width:calc(16px * var(--bv-ui-scale));height:calc(16px * var(--bv-ui-scale));fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.bv-ui-window-icon .bv-brand-cyclone,.bv-ui-window-shelf-icon .bv-brand-cyclone{color:var(--bv-ui-accent-light);fill:currentColor;stroke:none}.bv-ui-window-title{flex:0 1 auto;min-width:0;overflow:hidden;font-size:calc(13px * var(--bv-ui-scale));text-overflow:ellipsis;white-space:nowrap}.bv-ui-window-title-short{display:none}@container bv-window-header (max-width:900px){.bv-ui-window-title:has(.bv-ui-window-title-short) .bv-ui-window-title-full{display:none}.bv-ui-window-title-short{display:inline}}.bv-ui-window-context{display:flex;align-items:center;gap:calc(5px * var(--bv-ui-scale));min-width:0;overflow:visible;color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale))}.bv-regional-shell .bv-ui-window-context select{width:min(240px,100%);min-width:0;height:auto;padding:0 18px 0 calc(5px * var(--bv-ui-scale));color:var(--bv-ui-muted);background-color:transparent;border:0;border-radius:0;font:inherit;text-overflow:ellipsis}.bv-regional-shell .bv-ui-window-context .bv-select-shell{width:min(240px,100%);min-height:calc(22px * var(--bv-ui-scale));overflow:visible;background:#ffffff06;border-color:var(--bv-ui-border);border-radius:var(--bv-ui-radius-sm);box-shadow:none}.bv-regional-shell .bv-ui-window-context .bv-select-shell:hover{background:#ffffff0b;border-color:var(--bv-ui-border)}.bv-regional-shell .bv-ui-window-context .bv-select-shell:focus-within{background:rgba(var(--bv-ui-accent-rgb),.07);border-color:rgba(var(--bv-ui-accent-rgb),.34);box-shadow:none}.bv-regional-shell .bv-ui-window-context .bv-select-shell:focus-within select{border-color:transparent;box-shadow:none;outline:0}.bv-regional-shell .bv-ui-window-context .bv-select-shell>.bv-chevron{right:calc(7px * var(--bv-ui-scale));color:var(--bv-ui-muted)}.bv-ui-window-center{display:flex;align-self:stretch;align-items:center;justify-content:center;min-width:0}.bv-ui-window-center .editor-menus{justify-content:center}.editor-menu-label-short{display:none}@container bv-window-header (max-width:560px){.editor-menu-label-full{display:none}.editor-menu-label-short{display:inline}.bv-ui-window-center .editor-menus .bv-button{min-width:22px;padding-inline:5px}}.bv-ui-window-controls{display:flex;align-items:center;justify-content:flex-end;gap:2px}.bv-ui-window-control{display:grid;place-items:center;width:calc(24px * var(--bv-ui-scale));height:calc(24px * var(--bv-ui-scale));min-height:0;padding:0;color:var(--bv-ui-muted);background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius-sm);font-size:inherit}.bv-ui-window-control svg{width:calc(14px * var(--bv-ui-scale));height:calc(14px * var(--bv-ui-scale));fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.bv-ui-window-control:hover{color:var(--bv-ui-text);background:#ffffff12;border-color:#e7e1f714}.bv-ui-window-control--close:hover{color:#ffd8df;background:#ee6f8321;border-color:#ee6f8333}.bv-regional-shell.floating .bv-ui-window-header{cursor:move;user-select:none;touch-action:none}.bv-regional-shell .bv-ui-window-header button,.bv-regional-shell .bv-ui-window-header select{cursor:pointer;user-select:auto}.bv-ui-window-footer{container:bv-window-footer / inline-size;display:grid!important;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:calc(10px * var(--bv-ui-scale));min-height:calc(38px * var(--bv-ui-scale));padding:calc(4px * var(--bv-ui-scale)) calc(7px * var(--bv-ui-scale)) calc(4px * var(--bv-ui-scale)) calc(9px * var(--bv-ui-scale))!important;background:#211f27;border-top:1px solid var(--bv-ui-border)!important;border-bottom:0!important}.bv-ui-window-status{display:flex;align-items:center;gap:var(--bv-ui-field-gap);min-width:0;overflow:hidden;color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale));white-space:nowrap;text-overflow:ellipsis}.bv-ui-window-status>span:first-child{overflow:hidden;min-width:0;text-overflow:ellipsis;white-space:nowrap}.bv-ui-window-footer.has-warning .bv-ui-window-status{color:#e9b65f}.bv-ui-window-footer-actions{display:flex;align-items:center;gap:calc(7px * var(--bv-ui-scale));margin-left:auto}.bv-ui-window-footer-actions .bv-button{white-space:nowrap}.bv-ui-window-footer-actions .bv-button>svg{width:calc(16px * var(--bv-ui-scale));height:calc(16px * var(--bv-ui-scale));flex:none;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.bv-footer-action-set,.bv-footer-secondary-actions{display:flex;align-items:center;gap:5px}.bv-footer-action-set>.bv-menu-button{display:none}.bv-ui-window-footer.is-stacked{grid-template-columns:1fr}.bv-ui-window-footer.is-stacked .bv-ui-window-footer-actions{width:100%;margin-left:0;justify-content:flex-end}.bv-ui-window-footer.is-minimal .bv-footer-secondary-actions{display:none}.bv-ui-window-footer.is-minimal .bv-footer-action-set>.bv-menu-button{display:block}.bv-ui-window-footer.is-minimal .bv-ui-window-footer-actions>.bv-button:not(:last-child){display:none}.bv-regional-shell .bv-ui-window-reset{min-height:calc(29px * var(--bv-ui-scale));padding:0 calc(9px * var(--bv-ui-scale));font-size:calc(10px * var(--bv-ui-scale))}.bv-ui-window-shelf{position:fixed;z-index:var(--bv-layer-shelf);left:var(--bv-ui-window-shelf-left,calc(14px * var(--bv-ui-scale)));bottom:var(--bv-ui-window-shelf-bottom,calc(14px * var(--bv-ui-scale)));display:flex;align-items:flex-end;gap:calc(7px * var(--bv-ui-scale));pointer-events:none}.bv-ui-window-shelf-item{display:inline-flex;align-items:center;height:calc(36px * var(--bv-ui-scale));color:var(--bv-ui-muted);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 8px 24px #0006;font:calc(10px * var(--bv-ui-scale))/1.2 system-ui,-apple-system,"Segoe UI",sans-serif;pointer-events:auto;overflow:hidden}.bv-ui-window-shelf-restore,.bv-ui-window-shelf-close{align-self:stretch;display:inline-flex;align-items:center;color:inherit;background:transparent;border:0}.bv-ui-window-shelf-restore{gap:calc(7px * var(--bv-ui-scale));padding:0 calc(8px * var(--bv-ui-scale)) 0 calc(6px * var(--bv-ui-scale))}.bv-ui-window-shelf-close{padding:0 calc(7px * var(--bv-ui-scale));border-left:1px solid var(--bv-ui-border)}.bv-ui-window-shelf-close svg{width:calc(14px * var(--bv-ui-scale));fill:none;stroke:currentColor;stroke-width:1.7}.bv-ui-window-shelf-item:hover{color:var(--bv-ui-text);background:#2b2832;border-color:rgba(var(--bv-ui-accent-rgb),.3)}.bv-window-navigator{display:flex;align-items:center;gap:3px;min-width:0}.bv-window-navigator .bv-select-popover{width:clamp(112px,18vw,180px)}.bv-window-navigator .bv-select-trigger{min-height:22px;height:22px;padding:0 7px;gap:5px;color:var(--bv-ui-muted);background:#ffffff05;border-color:#e7e1f71a;border-radius:var(--bv-ui-radius-sm);font-size:10px;box-shadow:none}.bv-window-navigator .bv-select-trigger:hover:not(:disabled),.bv-window-navigator .bv-select-trigger[aria-expanded=true]{color:var(--bv-ui-text);background:#ffffff0b;border-color:#e7e1f72e;box-shadow:none}.bv-window-navigator .bv-select-trigger>span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-window-navigator .bv-chevron{width:6px;height:6px}.bv-window-switch-mode{display:inline-flex;align-items:center;height:22px;padding:0 4px;color:var(--bv-ui-muted);background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius-sm);font:inherit}.bv-window-switch-mode:hover{background:#ffffff0b;border-color:#e7e1f71a}.bv-window-switch-mode>span:last-child{display:none}.bv-window-switch-mode .bv-toggle-track{width:26px;height:14px;padding:1px}.bv-window-switch-mode .bv-toggle-track>span{width:10px;height:10px}.bv-window-switch-mode[aria-checked=true] .bv-toggle-track{background:rgba(var(--bv-ui-accent-rgb),.35);border-color:var(--bv-ui-accent)}.bv-window-switch-mode .bv-toggle-track>span{margin-left:0;transition:margin-left .15s}.bv-window-switch-mode[aria-checked=true] .bv-toggle-track>span{margin-left:auto;translate:0;transform:none;background:var(--bv-ui-accent-soft)}.bv-ui-window-header{container:bv-window-header / inline-size}.bv-window-navigator-overflow{position:relative}.bv-window-navigator-overflow>button{display:grid;place-items:center;width:22px;height:22px;padding:0;color:var(--bv-ui-muted);cursor:pointer;background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius-sm)}.bv-window-navigator-overflow>button:hover,.bv-window-navigator-overflow>button[aria-expanded=true]{color:var(--bv-ui-text);background:#ffffff0b;border-color:var(--bv-ui-border)}.bv-window-navigator-menu{color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 14px 42px #000b}.bv-window-navigator-panel{display:grid;gap:7px;width:min(260px,calc(100vw - 24px));padding:8px}.bv-window-navigator-panel-row{display:flex;align-items:center;justify-content:space-between;gap:12px;min-width:0;color:var(--bv-ui-muted)}.bv-window-navigator-panel-row.is-node>.bv-select-popover{width:100%}.bv-ui-window-header.is-menu-overflow .bv-ui-window-title-full{display:none}.bv-ui-window-header.is-menu-overflow .bv-ui-window-title-short{display:inline}.bv-ui-window-shelf-icon{display:grid;place-items:center;width:calc(24px * var(--bv-ui-scale));height:calc(24px * var(--bv-ui-scale));color:var(--bv-ui-accent-soft);background:rgba(var(--bv-ui-accent-rgb),.14);border-radius:var(--bv-ui-radius-sm)}.artboard-tools{position:absolute;z-index:12;top:12px;left:12px;display:flex;align-items:flex-start;gap:7px;pointer-events:none}.artboard-tools .bv-toolbar{pointer-events:auto}.zoom-controls{position:absolute;z-index:12;bottom:12px;left:50%;display:flex;gap:3px;padding:4px;border:1px solid #ffffff2b;border-radius:var(--bv-ui-radius);background:color-mix(in srgb,var(--comfy-menu-bg, #20242a) 92%,transparent);box-shadow:0 8px 25px #0009;backdrop-filter:blur(8px);transform:translate(-50%)}.zoom-controls button{min-width:32px;height:28px;padding:3px 8px;border-color:transparent;background:transparent}.zoom-controls button:nth-child(2){min-width:66px}.zoom-controls button:hover{background:#ffffff15}.tool-palette,.brush-flyout{pointer-events:auto;border:1px solid #ffffff2b;border-radius:var(--bv-ui-radius);background:color-mix(in srgb,var(--comfy-menu-bg, #20242a) 92%,transparent);box-shadow:0 8px 25px #0009;backdrop-filter:blur(8px)}.tool-palette{display:grid;gap:3px;padding:4px}.tool-palette button{display:grid;place-items:center;width:34px;height:34px;padding:6px;border-color:transparent;background:transparent}.tool-palette button:hover:not(:disabled){background:#ffffff15}.tool-palette button.active{background:var(--bv-primary-color)}.tool-palette button:disabled{opacity:.3;cursor:not-allowed}.tool-palette svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.brush-flyout{display:grid;width:235px;gap:8px;padding:10px}.brush-flyout header{min-height:0;padding:0 0 5px;border-bottom:1px solid #ffffff18}.brush-flyout header button{margin-left:auto}.brush-flyout label{display:grid;grid-template-columns:1fr auto;align-items:center;gap:4px 8px}.brush-flyout output{color:var(--bv-muted-text-color)}.brush-flyout input[type=range]{grid-column:1 / -1;width:100%;padding:0}.brush-flyout select{grid-column:1 / -1}.fixed-inspector .inspector-tabs{display:none}.bv-ui-dock .flexlayout__float_window{border:1px solid rgba(var(--bv-ui-accent-rgb),.36);border-radius:var(--bv-ui-radius);background:var(--bv-ui-surface);box-shadow:0 18px 48px #00000094,0 0 0 1px #ffffff09}.bv-ui-dock .flexlayout__float_window_header{min-height:31px;padding:6px 8px;color:var(--bv-ui-text);font-family:system-ui,-apple-system,Segoe UI,sans-serif;font-size:calc(12px * var(--bv-ui-scale));line-height:1.35;background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-ui-dock .flexlayout__float_window_drag_handle{min-width:22px;min-height:22px;padding:0 5px;color:var(--bv-ui-muted);border-radius:var(--bv-ui-radius-sm)}.bv-ui-dock .flexlayout__float_window_drag_handle:hover{color:var(--bv-ui-text);background:rgba(var(--bv-ui-accent-rgb),.14)}.bv-ui-dock .flexlayout__float_window_content{margin:0;background:var(--bv-ui-surface);border-radius:0 0 var(--bv-ui-radius) var(--bv-ui-radius)}.bv-detector-card{display:grid;gap:12px}.bv-detector-card-title{display:grid;min-width:0;gap:2px;margin-right:auto}.bv-detector-card-title strong,.bv-detector-card-title small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-detector-card-title small,.bv-detector-impact{color:var(--bv-ui-muted)}.bv-detector-impact{display:block;padding:8px 10px;border-left:2px solid rgba(var(--bv-ui-accent-rgb),.55);background:rgba(var(--bv-ui-accent-rgb),.07)}.bv-ui-empty-state{display:grid;place-items:center;min-height:160px;padding:28px;color:var(--bv-ui-muted);text-align:center;border:1px dashed var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-ui-empty-state strong{color:var(--bv-ui-text)}.bv-ui-empty-state p{margin:4px 0 0}.bv-inspector-section{display:grid;align-content:start;gap:calc(12px * var(--bv-ui-scale));min-width:0;padding:calc(10px * var(--bv-ui-scale))}.bv-inspector-section>h3{margin:0;font-size:calc(13px * var(--bv-ui-scale))}.inspector-tab-panel>.bv-inspector-section+.bv-inspector-section{border-top:1px solid var(--bv-ui-border)}.bv-compact-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,125px),1fr));gap:calc(10px * var(--bv-ui-scale));min-width:0}.bv-inspector-section{container:bv-inspector-section / inline-size}.bv-layer-bounds-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--bv-ui-field-gap);min-width:0}@container bv-inspector-section (max-width:220px){.bv-layer-bounds-grid{grid-template-columns:1fr}}.bv-control-field,.bv-number-field{display:grid;gap:var(--bv-ui-field-gap);min-width:0;color:var(--bv-ui-muted);font-size:calc(11px * var(--bv-ui-scale))}.bv-control-label,.bv-number-field>label{color:var(--bv-ui-muted)}.bv-control-help{color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale));line-height:1.4}.bv-select-shell{position:relative;display:block;min-width:0}.bv-select-shell select{width:100%;height:var(--bv-ui-control-height);padding:0 calc(36px * var(--bv-ui-scale)) 0 calc(11px * var(--bv-ui-scale));appearance:none;color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius);outline:0}.bv-select-shell>svg{position:absolute;top:50%;right:calc(10px * var(--bv-ui-scale));width:calc(16px * var(--bv-ui-scale));height:calc(16px * var(--bv-ui-scale));translate:0 -50%;fill:none;stroke:var(--bv-ui-muted);stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;pointer-events:none}.bv-select-shell:hover{border-color:var(--bv-ui-border-hover)}.bv-number-field{grid-template-columns:minmax(0,1fr)}.bv-number-slider{position:relative;min-width:0;padding-top:calc(9px * var(--bv-ui-scale))}.bv-number-slider output{position:absolute;z-index:2;left:var(--bubble-left,50%);bottom:calc(100% + 4px);translate:-50% 2px;padding:3px 6px;color:var(--bv-ui-text);white-space:nowrap;background:#302c3a;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius-sm);font-size:calc(10px * var(--bv-ui-scale));opacity:0;pointer-events:none}.bv-number-slider:hover output,.bv-number-slider:focus-within output{opacity:1;translate:-50% 0}.bv-number-track{width:100%;height:18px;margin:0;padding:0!important;appearance:none;background:transparent!important;border:0!important;cursor:pointer}.bv-number-track::-webkit-slider-runnable-track{height:4px;border-radius:999px;background:linear-gradient(90deg,var(--bv-ui-accent) 0 var(--range-fill),rgba(168,161,179,.18) var(--range-fill) 100%)}.bv-number-track::-webkit-slider-thumb{width:16px;height:16px;margin-top:-6px;appearance:none;border:2px solid var(--bv-ui-surface);border-radius:50%;background:var(--bv-ui-accent);box-shadow:0 0 0 1px rgba(var(--bv-ui-accent-rgb),.38)}.bv-number-box{display:flex;min-width:0;height:var(--bv-ui-control-height);overflow:hidden;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-number-box:focus-within{border-color:var(--bv-ui-accent);box-shadow:0 0 0 3px rgba(var(--bv-ui-accent-rgb),.18)}.bv-number-box input{min-width:0;width:100%;padding:0 calc(10px * var(--bv-ui-scale));color:var(--bv-ui-text);text-align:right;background:transparent;border:0;outline:0;font-variant-numeric:tabular-nums}.bv-number-box>span{display:grid;place-items:center;min-width:calc(34px * var(--bv-ui-scale));padding:0 7px;border-left:1px solid var(--bv-ui-border);background:#ffffff08}.bv-number-ticks{display:flex;justify-content:space-between;color:var(--bv-ui-muted);font-size:calc(9px * var(--bv-ui-scale))}.bv-textarea-shell{display:flex;min-width:0;max-width:100%;min-height:calc(100px * var(--bv-ui-scale));overflow:hidden;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-textarea-shell:hover{border-color:var(--bv-ui-border-hover)}.bv-textarea-shell:focus-within{border-color:var(--bv-ui-accent);box-shadow:0 0 0 3px rgba(var(--bv-ui-accent-rgb),.18)}.bv-textarea-shell textarea{width:100%;min-width:0;min-height:calc(98px * var(--bv-ui-scale));max-height:360px;padding:calc(9px * var(--bv-ui-scale)) calc(10px * var(--bv-ui-scale));color:var(--bv-ui-text);background:transparent;border:0;outline:0;resize:vertical;font:inherit;line-height:1.45}.bv-control-disclosure{margin:0;padding:0!important;overflow:hidden;border:1px solid var(--bv-ui-border)!important;border-radius:var(--bv-ui-radius)!important}.bv-control-disclosure>summary{position:relative;margin:0!important;padding:calc(9px * var(--bv-ui-scale)) calc(12px * var(--bv-ui-scale));list-style:none}.bv-control-disclosure>summary::-webkit-details-marker{display:none}.bv-control-disclosure>summary:after{content:"›";position:absolute;right:12px;font-size:18px;line-height:1}.bv-control-disclosure[open]>summary:after{transform:rotate(90deg)}.bv-control-disclosure-body{display:grid;gap:calc(10px * var(--bv-ui-scale));padding:calc(10px * var(--bv-ui-scale));border-top:1px solid var(--bv-ui-border)}.bv-control-field{container:bv-control-field / inline-size;display:grid;align-self:start;gap:var(--bv-ui-field-gap);min-width:0;color:var(--bv-ui-muted)}.bv-field-grid,.bv-choice-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,var(--bv-field-grid-min,165px)),1fr));gap:calc(9px * var(--bv-ui-scale));min-width:0}.bv-choice-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,var(--bv-choice-grid-min,145px)),1fr));gap:var(--bv-ui-field-gap)}.bv-editor-dialog,.bv-card-list,.bv-editor-item-summary{display:grid;gap:calc(10px * var(--bv-ui-scale));min-width:0}.bv-editor-item-compact-summary,.bv-detector-summary{display:flex;align-items:center;gap:calc(6px * var(--bv-ui-scale));min-width:0;color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale))}.bv-editor-item-compact-summary>span,.bv-detector-summary>span{max-width:220px;overflow:hidden;padding:2px 6px;text-overflow:ellipsis;white-space:nowrap;background:#ffffff09;border:1px solid var(--bv-ui-border);border-radius:999px}.bv-detector-summary{width:100%}.bv-detector-summary>strong{min-width:90px;color:var(--bv-ui-text)}.bv-detector-summary>span:nth-last-child(1){margin-left:auto}.bv-editor-item-details,.bv-detector-details{display:grid;gap:calc(10px * var(--bv-ui-scale))}.bv-editor-item-actions{display:flex;justify-content:flex-end;gap:var(--bv-ui-field-gap)}.bv-subtle-danger:hover:not(:disabled){color:#f19aa8;background:#d35d711a;border-color:#d35d7129}.bv-editor-impact{color:var(--bv-ui-muted)}.bv-control-label{display:flex;align-items:center;gap:6px;font-size:calc(11px * var(--bv-ui-scale))}.bv-control-help,.bv-control-message{color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale));line-height:1.4}.bv-control-message.is-error,.bv-control-field.is-error{color:#f19aa8}.bv-density-compact .bv-control-field,.bv-density-compact .bv-number-field{position:relative}.bv-density-compact .bv-control-help-overlay{position:absolute;z-index:30;top:calc(100% + 4px);left:0;width:max-content;max-width:min(280px,calc(100vw - 24px));padding:5px 7px;opacity:0;color:var(--bv-ui-text);background:#0d0c12;border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius-sm);box-shadow:0 8px 20px #0009;pointer-events:none;transition:opacity .12s ease}.bv-density-compact .bv-control-field:hover>.bv-control-help-overlay,.bv-density-compact .bv-control-field:focus-within>.bv-control-help-overlay,.bv-density-compact .bv-number-field:hover>.bv-control-help-overlay,.bv-density-compact .bv-number-field:focus-within>.bv-control-help-overlay{opacity:1}.bv-input-shell,.bv-select-shell{position:relative;display:flex;align-items:stretch;min-width:0;min-height:var(--bv-ui-control-height);overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-input-shell:focus-within,.bv-select-shell:focus-within,.bv-number-box:focus-within,.bv-textarea-shell:focus-within{border-color:var(--bv-ui-accent);box-shadow:0 0 0 3px rgba(var(--bv-ui-accent-rgb),.18)}.bv-input-shell>input,.bv-select-shell>select{width:100%;min-width:0;min-height:0;padding:0 calc(11px * var(--bv-ui-scale));color:inherit;background:transparent;border:0;outline:0}.bv-select-shell>select{appearance:none;padding-right:36px}.bv-field-icon,.bv-field-suffix,.bv-number-unit{display:grid;place-items:center;flex:0 0 auto;min-width:calc(34px * var(--bv-ui-scale));padding:0 7px;color:var(--bv-ui-muted);background:#ffffff06}.bv-input-shell>.bv-field-icon{border-right:1px solid var(--bv-ui-border)}.bv-field-suffix,.bv-number-unit{border-left:1px solid var(--bv-ui-border)}.bv-chevron{display:inline-block;width:8px;height:8px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg) translateY(-2px)}.bv-select-shell>.bv-chevron{position:absolute;top:50%;right:13px;transform:translateY(-65%) rotate(45deg);pointer-events:none}.bv-select-popover{position:relative;min-width:0}.bv-select-trigger{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:var(--bv-ui-field-gap);width:100%;min-height:var(--bv-ui-control-height);padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-select-trigger:hover:not(:disabled){border-color:var(--bv-ui-border-hover)}.bv-select-trigger:focus-visible,.bv-select-trigger[aria-expanded=true]{outline:0;border-color:var(--bv-ui-accent);box-shadow:0 0 0 3px rgba(var(--bv-ui-accent-rgb),.18)}.bv-select-trigger>.bv-chevron{justify-self:end}.bv-select-menu{z-index:120;display:grid;gap:2px;max-width:min(360px,calc(100vw - 24px));max-height:min(280px,50vh);padding:var(--bv-ui-field-gap);overflow:auto;color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 14px 42px #000b}.bv-select-menu>button{display:flex;align-items:center;gap:var(--bv-ui-field-gap);min-width:100%;min-height:var(--bv-ui-control-height);padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;white-space:nowrap;background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius)}.bv-select-menu>button:hover:not(:disabled),.bv-select-menu>button[aria-selected=true]{background:rgba(var(--bv-ui-accent-rgb),.14);border-color:rgba(var(--bv-ui-accent-rgb),.22)}.bv-select-menu>button:disabled{color:var(--bv-ui-muted);opacity:.45}.bv-input-shell>.bv-field-action{align-self:stretch;flex:0 0 auto;min-height:0;padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-muted);background:#ffffff06;border:0;border-left:1px solid var(--bv-ui-border);border-radius:0}.bv-input-shell>.bv-field-action:hover:not(:disabled){color:var(--bv-ui-text);background:rgba(var(--bv-ui-accent-rgb),.12)}@container bv-control-field (max-width:220px){.bv-input-shell:has(.bv-field-action){flex-wrap:wrap;overflow:visible}.bv-input-shell:has(.bv-field-action)>input{flex-basis:100%;min-height:var(--bv-ui-control-height)}.bv-input-shell:has(.bv-field-action)>.bv-field-action{flex:1 1 auto;min-height:var(--bv-ui-control-height);border-top:1px solid var(--bv-ui-border)}.bv-input-shell:has(.bv-field-action)>.bv-field-action:first-of-type{border-left:0}.bv-keybinding{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.bv-keybinding>button:first-child{grid-column:1/-1}}.bv-number-field{container:bv-number-field / inline-size;display:grid;gap:var(--bv-ui-field-gap);min-width:0;color:var(--bv-ui-muted);font-size:calc(11px * var(--bv-ui-scale))}.bv-number-value-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(calc(148px * var(--bv-ui-scale)),38%);align-items:center;gap:calc(11px * var(--bv-ui-scale));min-width:0}.bv-number-field.direct-only .bv-number-value-row{grid-template-columns:1fr}.bv-number-box{display:flex;min-width:0;height:var(--bv-ui-control-height);overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-number-box>input{width:100%;min-width:0;min-height:0;padding:0 10px;text-align:right;background:transparent;border:0;outline:0;font-variant-numeric:tabular-nums}.bv-number-ticks{display:flex;justify-content:space-between;width:calc(62% - 6px);font-size:calc(9px * var(--bv-ui-scale))}@container bv-number-field (max-width:380px){.bv-number-field.has-slider .bv-number-value-row{grid-template-columns:1fr}.bv-number-field.has-slider .bv-number-box{grid-row:1;width:min(calc(292px * var(--bv-ui-scale)),100%);justify-self:center}.bv-number-field.has-slider .bv-number-slider{grid-row:2;width:100%}.bv-number-field.has-slider .bv-number-ticks{width:100%}}.bv-textarea-shell{display:flex;min-width:0;max-width:100%;min-height:var(--bv-ui-textarea-height);overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-textarea-shell>textarea{width:100%;min-width:0;min-height:calc(var(--bv-ui-textarea-height) - 2px);max-height:360px;padding:9px 10px;line-height:1.45;background:transparent;border:0;outline:0;resize:vertical;scrollbar-color:rgba(170,162,181,.55) transparent;scrollbar-width:thin}.bv-textarea-shell>textarea::-webkit-scrollbar{width:10px;height:10px}.bv-textarea-shell>textarea::-webkit-scrollbar-track{background:transparent}.bv-textarea-shell>textarea::-webkit-scrollbar-thumb{background:#aaa2b57a;border:2px solid var(--bv-ui-input);border-radius:999px}.bv-textarea-shell>textarea::-webkit-scrollbar-corner{background:var(--bv-ui-input)}.bv-textarea-shell>textarea::-webkit-resizer{background-color:var(--bv-ui-input);background-image:linear-gradient(135deg,transparent 0 48%,rgba(170,162,181,.3) 49% 56%,transparent 57% 65%,rgba(170,162,181,.55) 66% 73%,transparent 74%)}.bv-textarea-shell.resize-none>textarea{resize:none}.bv-textarea-shell.resize-both{max-width:100%;overflow:auto}.bv-textarea-shell.resize-both>textarea{resize:both;max-width:100%}.bv-button{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:var(--bv-ui-control-height);padding:0 calc(13px * var(--bv-ui-scale));color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius);cursor:pointer}.bv-button:hover:not(:disabled){border-color:var(--bv-ui-border-hover);background:#302d39}.bv-button.primary{background:var(--bv-ui-accent);border-color:var(--bv-ui-accent-hover)}.bv-button.ghost{color:var(--bv-ui-muted);background:transparent;border-color:transparent}.bv-button.danger{color:#f19aa8;background:#d35d7121}.bv-button.warning{color:#f0c275;background:#e9b65f1f}.bv-button.success{color:#83deb6;background:#55c9941f}.bv-button.icon-only{width:var(--bv-ui-control-height);padding:0}.bv-button:disabled{opacity:.42;cursor:not-allowed}.bv-menu-button,.bv-split-button,.bv-popover-host,.bv-rich-select,.bv-search-field,.bv-image-picker{position:relative}.bv-menu,.bv-rich-select-menu,.bv-search-results,.bv-image-picker-menu,.bv-popover{position:absolute;z-index:100;top:calc(100% + 6px);right:0;min-width:220px;padding:5px;color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 14px 42px #000b}.bv-menu-content>button,.bv-rich-select-menu>button,.bv-search-results>button,.bv-image-picker-menu>button{display:flex;align-items:center;gap:var(--bv-ui-field-gap);width:100%;padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);text-align:left;background:transparent;border:0;border-radius:var(--bv-ui-radius)}.bv-menu-content>button:hover,.bv-rich-select-menu>button:hover,.bv-search-results>button:hover,.bv-image-picker-menu>button:hover{background:rgba(var(--bv-ui-accent-rgb),.12)}.bv-menu-content kbd{margin-left:auto}.bv-split-button{display:inline-flex}.bv-split-button>.bv-button:first-child{border-radius:var(--bv-ui-radius) 0 0 var(--bv-ui-radius)}.bv-split-button>.bv-button:nth-child(2){border-radius:0 var(--bv-ui-radius) var(--bv-ui-radius) 0;border-left-color:#fff3}.bv-toggle{display:flex;align-items:center;gap:10px;padding:0;color:var(--bv-ui-text);background:transparent;border:0}.bv-toggle-track{width:42px;height:23px;padding:3px;background:#35313f;border:1px solid var(--bv-ui-border);border-radius:999px}.bv-toggle-track>span{display:block;width:15px;height:15px;background:var(--bv-ui-muted);border-radius:50%;transition:translate .15s}.bv-toggle[aria-checked=true] .bv-toggle-track{background:rgba(var(--bv-ui-accent-rgb),.35);border-color:var(--bv-ui-accent)}.bv-toggle[aria-checked=true] .bv-toggle-track>span{translate:19px;background:var(--bv-ui-accent-soft)}.bv-checkbox-field{display:flex;align-items:flex-start;gap:9px;color:var(--bv-ui-text)}.bv-checkbox-field>input{position:absolute;opacity:0}.bv-checkbox-mark{display:grid;width:var(--bv-ui-check-size);height:var(--bv-ui-check-size);flex:none;border:1px solid var(--bv-ui-muted);border-radius:var(--bv-ui-radius-sm)}.bv-checkbox-field>input:checked+.bv-checkbox-mark{border-color:var(--bv-ui-accent)}.bv-checkbox-field>input:checked+.bv-checkbox-mark:after{content:"";width:8px;height:4px;margin:4px 3px;border-left:2px solid var(--bv-ui-accent);border-bottom:2px solid var(--bv-ui-accent);transform:rotate(-45deg)}.bv-checkbox-field small{display:block;color:var(--bv-ui-muted)}.bv-option-set{display:flex}.bv-option-set>button{min-height:var(--bv-ui-control-height);padding:0 12px;color:var(--bv-ui-muted);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border)}.bv-option-set>button+button{border-left:0}.bv-option-set>button:first-child{border-radius:var(--bv-ui-radius) 0 0 var(--bv-ui-radius)}.bv-option-set>button:last-child{border-radius:0 var(--bv-ui-radius) var(--bv-ui-radius) 0}.bv-option-set>button[aria-checked=true]{z-index:1;color:var(--bv-ui-text);background:rgba(var(--bv-ui-accent-rgb),.2);border-color:var(--bv-ui-accent);box-shadow:inset 0 0 0 1px var(--bv-ui-accent)}.bv-tag-input,.bv-multi-select{padding:var(--bv-ui-field-gap);color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-tag-values{display:flex;flex-wrap:wrap;gap:var(--bv-ui-field-gap)}.bv-tag{display:inline-flex;align-items:center;gap:4px;padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);background:rgba(var(--bv-ui-accent-rgb),.16);border:1px solid rgba(var(--bv-ui-accent-rgb),.28);border-radius:var(--bv-ui-radius)}.bv-tag>button{padding:0 2px;color:var(--bv-ui-muted);background:transparent;border:0}.bv-tag-input>input,.bv-multi-select>input{width:100%;min-height:var(--bv-ui-control-height);background:transparent;border:0;outline:0}.bv-tag-select{position:relative;min-width:0}.bv-tag-select-trigger{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:var(--bv-ui-field-gap);width:100%;min-height:var(--bv-ui-control-height);padding:3px var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-tag-select-trigger:hover{border-color:var(--bv-ui-border-hover)}.bv-tag-select-trigger:focus-visible,.bv-tag-select-trigger[aria-expanded=true]{outline:0;border-color:var(--bv-ui-accent);box-shadow:0 0 0 3px #8d70ff2e}.bv-tag-select-trigger>.bv-tag-values{min-width:0;overflow:hidden;flex-wrap:nowrap}.bv-tag-select-trigger .bv-tag{max-width:180px;padding:2px 6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-tag-select-trigger>.bv-chevron{justify-self:end}.bv-tag-select-menu>div>button{grid-template-columns:18px minmax(0,1fr)}.bv-tag-select-menu>div>button>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-tag-select-check{display:grid;place-items:center;width:16px;height:16px;color:var(--bv-ui-accent-soft);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius-sm)}.bv-tag-select-menu button[aria-selected=true] .bv-tag-select-check{background:#8d70ff33;border-color:var(--bv-ui-accent)}.bv-tag-select-menu button:disabled{opacity:.7;cursor:not-allowed}.bv-color-field,.bv-keybinding{position:relative;display:flex;gap:7px}.bv-color-swatch{width:var(--bv-ui-control-height);flex:0 0 var(--bv-ui-control-height);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius)}.bv-color-field>input{flex:1;min-width:0;padding:0 10px;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-anchored-popover{position:fixed;right:auto;bottom:auto;min-width:0;z-index:var(--bv-layer-flyout)}.bv-color-popover{padding:10px;background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 14px 34px #0000006b}.bv-color-popover .react-colorful{width:min(240px,calc(100vw - 36px))}.bv-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--bv-ui-field-gap);padding:var(--bv-ui-field-gap);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-toolbar.vertical{width:max-content;flex-direction:column}.bv-toolbar-divider{align-self:stretch;border-left:1px solid var(--bv-ui-border)}.bv-toolbar.vertical .bv-toolbar-divider{border-left:0;border-top:1px solid var(--bv-ui-border)}.bv-toolbar .active{color:var(--bv-ui-accent-soft);background:rgba(var(--bv-ui-accent-rgb),.18)}.bv-toolbar .bv-button>svg{width:calc(18px * var(--bv-ui-scale));height:calc(18px * var(--bv-ui-scale));fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.bv-section,.bv-card{min-width:0;color:var(--bv-ui-text)}.bv-section.outlined,.bv-card{border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-section.raised{background:var(--bv-ui-surface-raised);border-radius:var(--bv-ui-radius)}.bv-section>header,.bv-card>header{display:flex;align-items:center;gap:var(--bv-ui-field-gap);padding:var(--bv-ui-content-padding)}.bv-section>header>div,.bv-card>header>div{flex:1;min-width:0}.bv-section h3,.bv-section p{margin:0}.bv-section p,.bv-card small{color:var(--bv-ui-muted)}.bv-section-body,.bv-card>div{padding:var(--bv-ui-content-padding)}.bv-card.interactive{display:block;width:100%;text-align:left;background:transparent}.bv-callout{display:flex;gap:var(--bv-ui-field-gap);padding:var(--bv-ui-content-padding);color:var(--bv-ui-text);background:#ffffff09;border:1px solid var(--bv-ui-border);border-left:3px solid var(--bv-ui-muted);border-radius:var(--bv-ui-radius-sm)}.bv-callout.info{border-left-color:#72a7ff}.bv-callout.success{border-left-color:var(--bv-ui-success)}.bv-callout.warning{border-left-color:var(--bv-ui-warning)}.bv-callout.danger{border-left-color:var(--bv-ui-danger)}.bv-callout>div{flex:1}.bv-badge{display:inline-flex;align-items:center;padding:3px 7px;color:var(--bv-ui-muted);background:#ffffff0f;border-radius:999px;font-size:.85em}.bv-badge.success{color:#83deb6}.bv-badge.warning{color:#f0c275}.bv-badge.danger{color:#f19aa8}.bv-dialog-layer{position:fixed;z-index:var(--bv-layer-modal);inset:0;display:grid;place-items:center;padding:16px}.bv-dialog-layer.modal{background:#08070a9e}.bv-dialog-layer.modeless{place-items:start end;pointer-events:none}.bv-dialog{display:grid;grid-template-rows:auto minmax(0,1fr) auto;width:min(680px,calc(100vw - 32px));max-height:86vh;overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-surface);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius-lg);box-shadow:0 28px 90px #000c;pointer-events:auto}.bv-dialog.small{width:min(480px,calc(100vw - 32px))}.bv-dialog.large{width:min(1040px,calc(100vw - 32px))}.bv-dialog>header,.bv-dialog>footer{display:flex;align-items:flex-start;gap:var(--bv-ui-field-gap);padding:var(--bv-ui-content-padding);background:var(--bv-ui-surface-raised)}.bv-dialog>header>div{flex:1}.bv-dialog h2,.bv-dialog p{margin:0}.bv-dialog-body{min-height:0;overflow:auto;padding:var(--bv-ui-content-padding)}.bv-tree{color:var(--bv-ui-text)}.bv-tree-row{display:grid;grid-template-columns:22px auto minmax(0,1fr) auto auto;align-items:center;gap:var(--bv-ui-field-gap);min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap);border:1px solid transparent;border-radius:var(--bv-ui-radius)}.bv-tree [role=treeitem][aria-selected=true]>.bv-tree-row{background:rgba(var(--bv-ui-accent-rgb),.15);border-color:rgba(var(--bv-ui-accent-rgb),.42)}.bv-tree [role=group]{margin-left:17px;padding-left:8px;border-left:1px solid rgba(var(--bv-ui-accent-rgb),.25)}.bv-tree-expander{display:grid;place-items:center;padding:0;color:var(--bv-ui-muted);background:transparent;border:0}.bv-tree [aria-expanded=false]>.bv-tree-row .bv-chevron{transform:rotate(-45deg)}.bv-tree-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-tree-meta{color:var(--bv-ui-muted);font-size:.85em}.bv-showcase{display:grid;grid-template-columns:240px minmax(0,1fr);min-height:100vh;color:var(--bv-ui-text);background:var(--bv-ui-bg)}.bv-showcase>aside{position:sticky;top:0;height:100vh;display:grid;align-content:start;gap:4px;padding:24px 16px;background:var(--bv-ui-surface);border-right:1px solid var(--bv-ui-border)}.bv-showcase>aside a{padding:8px 10px;color:var(--bv-ui-muted);text-decoration:none;border-radius:var(--bv-ui-radius)}.bv-showcase>aside a:hover{color:var(--bv-ui-text);background:#8d70ff1f}.bv-showcase>main{display:grid;gap:22px;width:min(1180px,100%);padding:32px}.bv-showcase>main>header{display:flex;align-items:end;justify-content:space-between;gap:18px}.bv-showcase>main>header>div{min-width:0}.bv-showcase>main>header>.bv-control-field{width:min(320px,100%)}.bv-showcase>main>header h1,.bv-showcase>main>header p{margin:0}.bv-demo-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:14px}.bv-showcase .bv-section-body{display:grid;gap:14px}.bv-window-contract-demo{container:bv-window-header / inline-size;display:grid;grid-template-rows:auto minmax(100px,1fr) auto;min-width:0;overflow:hidden;background:var(--bv-ui-surface);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius)}.bv-window-contract-demo>.bv-ui-window-header{position:relative}.bv-window-contract-body{display:grid;align-content:center;gap:4px;padding:var(--bv-ui-content-padding);color:var(--bv-ui-muted)}.bv-window-contract-body strong{color:var(--bv-ui-text)}.bv-demo-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.bv-panel-demo{overflow:hidden;background:var(--bv-ui-surface);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-panel-demo>div{padding:var(--bv-ui-content-padding);color:var(--bv-ui-muted)}@media (max-width:760px){.bv-showcase{grid-template-columns:1fr}.bv-showcase>aside{position:relative;display:flex;height:auto;padding:10px;overflow-x:auto}.bv-showcase>aside h2{margin:0 8px 0 0}.bv-showcase>aside a{white-space:nowrap}.bv-showcase>main{padding:12px}.bv-showcase>main>header{align-items:stretch;flex-direction:column}.bv-showcase>main>header>.bv-control-field{width:100%}.bv-toast-stack{right:12px;bottom:12px;left:12px}.bv-toast{width:100%}}.bv-density-compact .bv-toggle-track{width:36px;height:20px;padding:2px}.bv-density-compact .bv-toggle-track>span{width:14px;height:14px}.bv-density-compact .bv-toggle[aria-checked=true] .bv-toggle-track>span{translate:16px}.bv-density-compact .bv-badge{padding:2px 6px}.bv-density-compact .bv-tooltip{padding:4px 7px}.bv-density-compact .bv-menu,.bv-density-compact .bv-rich-select-menu,.bv-density-compact .bv-search-results,.bv-density-compact .bv-image-picker-menu,.bv-density-compact .bv-popover{padding:var(--bv-ui-field-gap)}.bv-card>header>div,.bv-rich-select-trigger>span,.bv-rich-select-menu button>span,.bv-search-results button>span,.bv-image-picker button>span{display:grid;gap:2px}.bv-card>header>div small,.bv-rich-select small,.bv-search-results small,.bv-image-picker small{color:var(--bv-ui-muted);font-size:.84em}.bv-rich-select-trigger,.bv-image-picker-trigger{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--bv-ui-field-gap);width:100%;min-height:var(--bv-ui-control-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-rich-select-trigger>.bv-chevron,.bv-image-picker-trigger>.bv-chevron{justify-self:end}.bv-image-picker-control{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:stretch;min-width:0;overflow:hidden;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-image-picker-control:focus-within{border-color:var(--bv-ui-accent);box-shadow:0 0 0 3px #8d70ff2e}.bv-image-picker-control .bv-image-picker-trigger{min-width:0;padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);background:transparent;border:0;border-radius:0}.bv-image-preview-action,.bv-image-picker-toggle{align-self:stretch;width:28px!important;min-height:0;padding:0;color:var(--bv-ui-muted);background:transparent;border:0;border-left:1px solid transparent;border-radius:0}.bv-image-preview-action:hover:not(:disabled),.bv-image-picker-toggle:hover:not(:disabled){color:var(--bv-ui-text);background:#8d70ff21;border-left-color:var(--bv-ui-border)}.bv-image-preview-action svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}.bv-image-picker-toggle .bv-chevron{width:7px;height:7px}.bv-search-field .bv-input-shell>span:first-child{display:grid;place-items:center;width:34px;color:var(--bv-ui-muted)}.bv-search-results{left:0;right:auto;width:100%}.bv-keybinding{align-items:stretch}.bv-keybinding>button{min-height:var(--bv-ui-control-height);padding:0 10px;color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-keybinding>button:first-child{flex:1;text-align:left}.bv-compound-field{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,calc(132px * var(--bv-ui-scale))),1fr));align-self:start;gap:var(--bv-ui-field-gap);min-width:0;margin:0;padding:0;border:0}.bv-compound-field>legend{grid-column:1/-1;margin:0 0 1px;padding:0;color:var(--bv-ui-muted);font-size:calc(11px * var(--bv-ui-scale))}.bv-json-editor{overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-json-toolbar{display:flex;justify-content:flex-end;padding:var(--bv-ui-field-gap);background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-json-toolbar>button{min-height:28px;padding:0 9px;color:var(--bv-ui-text);background:transparent;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-json-editor textarea,.bv-json-editor pre{outline:0!important;font:calc(11px * var(--bv-ui-scale))/1.45 var(--bv-ui-font-mono)!important}.bv-progress{display:grid;gap:var(--bv-ui-field-gap)}.bv-progress>div:first-child{display:flex;justify-content:space-between}.bv-progress [role=progressbar]{height:7px;overflow:hidden;background:var(--bv-ui-input);border-radius:999px}.bv-progress [role=progressbar]>span{display:block;height:100%;background:linear-gradient(90deg,var(--bv-ui-accent),var(--bv-ui-accent-light));border-radius:inherit}.bv-empty-state{display:grid;justify-items:center;gap:var(--bv-ui-field-gap);padding:calc(var(--bv-ui-content-padding) * 2);color:var(--bv-ui-muted);text-align:center;border:1px dashed var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-empty-state strong{color:var(--bv-ui-text)}.bv-empty-state p{margin:0}.bv-toast-stack{position:fixed;z-index:1000;right:18px;bottom:18px;display:grid;justify-items:end;gap:8px;max-width:calc(100vw - 24px)}.bv-toast{display:flex;align-items:flex-start;gap:10px;width:min(360px,calc(100vw - 24px));max-width:calc(100vw - 24px);min-width:0;padding:10px 10px 10px 12px;color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 12px 30px #0008}.bv-toast>div{flex:1 1 auto;min-width:0}.bv-toast strong{display:block;line-height:1.3}.bv-toast p{margin:4px 0 0;color:var(--bv-ui-muted);line-height:1.4;overflow-wrap:anywhere}.bv-toast>.bv-button{flex:0 0 auto;width:26px;min-width:26px;height:26px;padding:0;margin-top:-3px}.bv-breadcrumbs{display:flex;align-items:center;gap:var(--bv-ui-field-gap);color:var(--bv-ui-muted)}.bv-breadcrumbs button{padding:0;color:var(--bv-ui-accent-soft);background:transparent;border:0}.bv-tabs{container:bv-tabs / inline-size;min-width:0}.bv-tabs>div[role=tablist]{display:flex;align-items:end;min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding) 0;background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-tabs>div[role=tablist]>button{position:relative;min-height:var(--bv-ui-control-height);padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-muted);background:transparent;border:0}.bv-tabs>div[role=tablist]>button[aria-selected=true]{color:var(--bv-ui-text)}.bv-tabs>div[role=tablist]>button[aria-selected=true]:after{content:"";position:absolute;right:0;bottom:0;left:0;height:2px;background:var(--bv-ui-accent)}.bv-tabs>[role=tabpanel]{padding:var(--bv-ui-content-padding)}.bv-tabs.vertical{display:grid;grid-template-columns:auto 1fr}.bv-tabs.vertical>div[role=tablist]{display:flex;flex-direction:column;align-items:stretch;padding:6px 0 6px 6px;border-right:1px solid var(--bv-ui-border);border-bottom:0}.bv-accordion{overflow:hidden;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-accordion>section+section{border-top:1px solid var(--bv-ui-border)}.bv-accordion>section>button{display:flex;justify-content:space-between;align-items:center;width:100%;min-height:var(--bv-ui-row-height);padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;background:var(--bv-ui-surface-raised);border:0}.bv-accordion>section>button .bv-chevron{flex:none;align-self:center;transform-origin:center}.bv-accordion>section>button[aria-expanded=true] .bv-chevron{transform:rotate(225deg)}.bv-accordion>section>div{padding:var(--bv-ui-content-padding)}.bv-pagination{display:flex;align-items:center;gap:3px}.bv-pagination button{min-width:var(--bv-ui-control-height);min-height:var(--bv-ui-control-height);padding:0 8px;color:var(--bv-ui-muted);background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius)}.bv-pagination button[aria-current=page]{color:var(--bv-ui-text);background:var(--bv-ui-accent)}.bv-pagination button:hover{border-color:var(--bv-ui-border)}.bv-steps{display:flex;min-width:0;overflow-x:auto;counter-reset:steps;margin:0;padding:0;list-style:none}.bv-steps li{position:relative;display:grid;justify-items:center;gap:5px;flex:1;color:var(--bv-ui-muted)}.bv-steps li:not(:last-child):after{content:"";position:absolute;top:14px;left:calc(50% + 18px);width:calc(100% - 36px);border-top:1px solid var(--bv-ui-border)}.bv-steps li>span{z-index:1;display:grid;place-items:center;width:28px;height:28px;background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border);border-radius:50%}.bv-steps li.current,.bv-steps li.complete{color:var(--bv-ui-text)}.bv-steps li.current>span,.bv-steps li.complete>span{border-color:var(--bv-ui-accent)}.bv-tooltip-host{position:relative;display:inline-flex}.bv-tooltip-host>.bv-tooltip{position:absolute;z-index:110;bottom:calc(100% + 7px);left:50%;width:max-content;max-width:260px;padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-text);background:#0d0c12;border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius-sm);box-shadow:0 8px 20px #0009;translate:-50%;opacity:0;pointer-events:none}.bv-tooltip-host:hover>.bv-tooltip,.bv-tooltip-host:focus-within>.bv-tooltip{opacity:1}.bv-divider{display:flex;align-items:center;gap:9px;color:var(--bv-ui-muted)}.bv-divider:before,.bv-divider:after{content:"";flex:1;border-top:1px solid var(--bv-ui-border)}.bv-divider.vertical{flex-direction:column;align-self:stretch}.bv-divider.vertical:before,.bv-divider.vertical:after{border-top:0;border-left:1px solid var(--bv-ui-border)}.bv-code-block{overflow:hidden;background:#100f16;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-code-block>header{display:flex;justify-content:space-between;align-items:center;min-height:var(--bv-ui-row-height);padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-muted);background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-code-block pre{margin:0;padding:var(--bv-ui-content-padding);overflow:auto;font:calc(11px * var(--bv-ui-scale))/1.55 var(--bv-ui-font-mono)}.bv-code-line{display:block;min-height:1.55em}.bv-code-block.line-numbers pre{counter-reset:line}.bv-code-block.line-numbers .bv-code-line:before{counter-increment:line;content:counter(line);display:inline-block;width:2.5em;margin-right:1em;color:#6f6a7b;text-align:right}.bv-definition-list{container:bv-definition-list / inline-size;display:grid;gap:7px;margin:0}.bv-definition-row{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:18px}.bv-definition-list dt{color:var(--bv-ui-muted)}.bv-definition-list dd{margin:0}.bv-table-scroll{overflow:auto;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-table-scroll table{width:100%;border-collapse:collapse}.bv-table-scroll th,.bv-table-scroll td{padding:var(--bv-ui-content-padding);text-align:left;border-bottom:1px solid var(--bv-ui-border)}.bv-table-scroll th{color:var(--bv-ui-muted);background:var(--bv-ui-surface-raised)}.bv-table-scroll tbody tr:last-child td{border-bottom:0}.bv-table-scroll .numeric{text-align:right}.bv-sortable-list{display:grid;gap:7px}.bv-sortable-list>article{container:bv-sortable-item / inline-size;overflow:hidden;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-sortable-list article>header{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:5px;min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap)}.bv-sortable-list>article>header>div{display:grid}.bv-sortable-list>article>header small{color:var(--bv-ui-muted)}.bv-drag-handle{width:30px;height:30px;color:var(--bv-ui-muted);background:transparent;border:0;cursor:grab}.bv-segmented-actions{display:inline-flex;align-items:stretch;overflow:hidden;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-segmented-actions>.bv-button{width:30px;min-width:30px;border:0;border-radius:0}.bv-segmented-actions>.bv-button+.bv-button{border-left:1px solid var(--bv-ui-border)}.bv-segmented-actions .bv-chevron{transition:transform .15s}.bv-segmented-actions .bv-button[aria-expanded=true] .bv-chevron{transform:rotate(225deg)}.bv-sortable-summary,.bv-sortable-content{padding:var(--bv-ui-content-padding);border-top:1px solid var(--bv-ui-border)}.bv-sortable-content{background:#ffffff05}.bv-image-picker-trigger img,.bv-image-picker-menu img{width:42px;height:32px;object-fit:cover;border-radius:var(--bv-ui-radius-sm)}.bv-image-picker-menu{left:0;right:auto;width:100%}.bv-image-preview{position:fixed;z-index:var(--bv-layer-modal);inset:0;display:grid;place-items:center;padding:24px;background:radial-gradient(circle at 50% 42%,#221e2db3,#07060af0 70%);backdrop-filter:blur(3px)}.bv-image-preview-dialog{display:grid;grid-template-rows:auto minmax(0,1fr) auto;width:min(94vw,1600px);max-height:calc(100vh - 48px);overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-surface);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius-lg);box-shadow:0 28px 90px #000d}.bv-image-preview-dialog>header{display:flex;align-items:center;gap:var(--bv-ui-content-padding);min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-image-preview-dialog>header>div{flex:1;min-width:0}.bv-image-preview-dialog h2{margin:0;overflow:hidden;font-size:calc(13px * var(--bv-ui-scale));text-overflow:ellipsis;white-space:nowrap}.bv-image-preview-dialog header small{color:var(--bv-ui-muted)}.bv-image-preview-icon{display:grid;place-items:center;width:26px;height:26px;color:#c7baff;background:#8d70ff21;border:1px solid rgba(141,112,255,.25);border-radius:var(--bv-ui-radius)}.bv-image-preview-icon svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}.bv-image-preview-stage{display:grid;place-items:center;min-height:220px;max-height:calc(100vh - 140px);padding:18px;overflow:auto;background-color:#0d0c11;background-image:linear-gradient(45deg,rgba(255,255,255,.025) 25%,transparent 25%),linear-gradient(-45deg,rgba(255,255,255,.025) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,rgba(255,255,255,.025) 75%),linear-gradient(-45deg,transparent 75%,rgba(255,255,255,.025) 75%);background-position:0 0,0 8px,8px -8px,-8px 0;background-size:16px 16px}.bv-image-preview-stage>img{display:block;max-width:100%;max-height:calc(100vh - 176px);object-fit:contain;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius);box-shadow:0 18px 50px #000a;transform-origin:center;user-select:none;will-change:transform}.bv-image-preview-stage.is-pannable{cursor:grab}.bv-image-preview-stage.is-dragging{cursor:grabbing}.bv-image-preview-stage:not(.is-dragging)>img{transition:transform .12s ease-out}.bv-image-preview-stage>span{color:var(--bv-ui-muted)}.bv-image-preview-dialog>footer{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--bv-ui-content-padding);min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-muted);background:var(--bv-ui-surface-raised);border-top:1px solid var(--bv-ui-border);font-size:calc(10px * var(--bv-ui-scale))}.bv-image-preview-help{overflow:hidden;text-align:center;text-overflow:ellipsis;white-space:nowrap}.bv-image-preview-controls{display:flex;align-items:center;gap:2px}.bv-image-preview-controls .bv-button{min-height:24px}.bv-image-preview-controls .icon-only{width:24px}.bv-image-preview-controls output{width:48px;color:var(--bv-ui-text);text-align:center;font-variant-numeric:tabular-nums}@media (max-width:720px){.bv-image-preview-help{display:none}.bv-image-preview-dialog>footer{grid-template-columns:1fr auto}}.bv-command-palette{display:grid;gap:var(--bv-ui-field-gap)}.bv-command-input>span{display:grid;place-items:center;width:var(--bv-ui-control-height);color:var(--bv-ui-muted)}.bv-command-results{display:grid;gap:2px;max-height:min(420px,60vh);overflow:auto}.bv-command-option{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--bv-ui-content-padding);width:100%;min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius)}.bv-command-option>span{display:grid;min-width:0}.bv-command-option small,.bv-command-option kbd{color:var(--bv-ui-muted)}.bv-command-option:hover,.bv-command-option[aria-selected=true]{background:rgba(var(--bv-ui-accent-rgb),.14);border-color:rgba(var(--bv-ui-accent-rgb),.25)}.bv-command-empty{margin:0;padding:calc(var(--bv-ui-content-padding) * 2);color:var(--bv-ui-muted);text-align:center}.bv-adaptive-field{container:bv-adaptive-field / inline-size;min-width:0}.bv-adaptive-inline{min-width:0}.bv-adaptive-trigger{display:none;width:100%;min-width:0;grid-template-columns:auto minmax(0,1fr) auto;text-align:left}.bv-adaptive-summary{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-adaptive-popover{width:min(calc(420px * var(--bv-ui-scale)),calc(100vw - 16px));padding:0;overflow:hidden;background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 18px 48px #000c}.bv-adaptive-popover>header{display:flex;align-items:center;gap:var(--bv-ui-field-gap);min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);border-bottom:1px solid var(--bv-ui-border)}.bv-adaptive-popover>header>strong{flex:1}.bv-adaptive-popover>div{display:grid;gap:var(--bv-ui-field-gap);padding:var(--bv-ui-content-padding)}.bv-number-popup{display:grid;gap:var(--bv-ui-field-gap)}.bv-number-popup .bv-number-ticks,.bv-number-popup .bv-number-slider{width:100%}.bv-number-popup .bv-number-box{width:min(calc(292px * var(--bv-ui-scale)),100%);justify-self:center}.bv-color-dot{width:14px;height:14px;border:1px solid var(--bv-ui-border-hover);border-radius:50%}.bv-color-expanded{display:grid;gap:var(--bv-ui-content-padding)}.bv-color-expanded>input{width:100%;min-height:var(--bv-ui-control-height);padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-color-expanded .react-colorful{width:100%}@container bv-adaptive-field (max-width:220px){.bv-adaptive-inline{display:none}.bv-adaptive-trigger{display:grid}}.bv-select-menu>div,.bv-rich-select-menu>div,.bv-search-results>div,.bv-image-picker-menu>div{display:grid;gap:2px}.bv-select-menu>div>button,.bv-rich-select-menu>div>button,.bv-search-results>div>button,.bv-image-picker-menu>div>button{display:flex;align-items:center;gap:var(--bv-ui-field-gap);width:100%;min-height:var(--bv-ui-control-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius)}.bv-select-menu>div>button:hover:not(:disabled),.bv-rich-select-menu>div>button:hover:not(:disabled),.bv-search-results>div>button:hover:not(:disabled),.bv-image-picker-menu>div>button:hover:not(:disabled),.bv-select-menu>div>button[aria-selected=true],.bv-rich-select-menu>div>button[aria-selected=true],.bv-image-picker-menu>div>button[aria-selected=true]{background:rgba(var(--bv-ui-accent-rgb),.14);border-color:rgba(var(--bv-ui-accent-rgb),.24)}.bv-select-menu.bv-tag-select-menu>div>button{display:grid;grid-template-columns:18px minmax(0,1fr)}@container bv-tabs (max-width:280px){.bv-tabs:not(.vertical)>div[role=tablist]{align-items:stretch;overflow-x:auto}.bv-tabs:not(.vertical)>div[role=tablist]>button{flex:0 0 auto}.bv-tabs>[role=tabpanel]{min-width:0}}.bv-steps>li{min-width:88px}@container bv-definition-list (max-width:280px){.bv-definition-row{grid-template-columns:1fr;gap:2px}.bv-definition-row+.bv-definition-row{padding-top:var(--bv-ui-field-gap);border-top:1px solid var(--bv-ui-border)}}@container bv-sortable-item (max-width:280px){.bv-sortable-list>article>header{grid-template-columns:auto minmax(0,1fr) repeat(2,auto)}.bv-sortable-list>article>header>.bv-button{grid-row:2}.bv-sortable-list>article>header>div{grid-column:2/-1}}.bv-responsive-lab{display:grid;gap:18px}.bv-resizable-demo{width:min(100%,420px);min-width:150px;max-width:100%;resize:horizontal;overflow:auto;background:#12111680;border:1px dashed var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius)}.bv-resizable-demo>header{display:flex;justify-content:space-between;gap:10px;padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-muted);background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-resizable-demo>header strong{color:var(--bv-ui-text)}.bv-responsive-state:before{content:"Wide";color:var(--bv-ui-success)}@container (max-width:380px){.bv-responsive-state:before{content:"Medium";color:var(--bv-ui-warning)}}@container (max-width:220px){.bv-responsive-state:before{content:"Minimal";color:var(--bv-ui-accent-soft)}}.bv-resizable-demo>div{display:grid;gap:var(--bv-ui-content-padding);min-width:0;padding:var(--bv-ui-content-padding)}.bv-global-toast-stack{z-index:var(--bv-layer-toast);bottom:var(--bv-toast-bottom,18px)}.bv-window-header-utility{position:relative;display:inline-flex}.bv-window-visibility-menu-action{min-width:190px;padding:7px 9px;color:var(--bv-ui-text);background:transparent;border:0;text-align:left;cursor:pointer}.bv-window-visibility-menu-action:hover{background:var(--bv-ui-surface-hover)}.bv-toolbar-launcher-secondary{width:26px;height:26px;padding:0;color:var(--bv-ui-muted);background:transparent;border:0;border-radius:var(--bv-ui-radius-xs);cursor:pointer}.bv-toolbar-launcher-secondary:hover{color:var(--bv-ui-text);background:var(--bv-ui-surface-hover)}.bv-regional-action-control:before{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M4 6h10v2H4V6Zm14-2h2v6h-2V4ZM4 16h4v2H4v-2Zm8-2h2v6h-2v-6Zm6 2h2v2h-2v-2ZM4 11h2v2H4v-2Zm6-2h2v6h-2V9Zm6 2h4v2h-4v-2Z'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M4 6h10v2H4V6Zm14-2h2v6h-2V4ZM4 16h4v2H4v-2Zm8-2h2v6h-2v-6Zm6 2h2v2h-2v-2ZM4 11h2v2H4v-2Zm6-2h2v6h-2V9Zm6 2h4v2h-4v-2Z'/%3E%3C/svg%3E")}.bv-toolbar-no-control .bv-regional-action-control,.bv-toolbar-no-editor .bv-regional-action-editor,.bv-toolbar-no-quick .bv-regional-action-quick,.bv-toolbar-no-overview .bv-regional-action-menu{display:none!important}.bv-tag-select-trigger:focus-visible,.bv-tag-select-trigger[aria-expanded=true],.bv-image-picker-control:focus-within{box-shadow:0 0 0 3px rgba(var(--bv-ui-accent-rgb),.18)}.bv-tag-select-menu button[aria-selected=true] .bv-tag-select-check{background:rgba(var(--bv-ui-accent-rgb),.2)}.bv-showcase>aside a:hover{background:rgba(var(--bv-ui-accent-rgb),.12)}.bv-image-preview-action:hover:not(:disabled),.bv-image-picker-toggle:hover:not(:disabled){background:rgba(var(--bv-ui-accent-rgb),.13)}.bv-image-preview-icon{color:var(--bv-ui-accent-soft);background:rgba(var(--bv-ui-accent-rgb),.13);border-color:rgba(var(--bv-ui-accent-rgb),.25)}.bv-m0-picker-host{position:relative;z-index:1;padding:6px}.bv-m0-picker-panel{display:grid;gap:7px}.bv-m0-picker-panel>.bv-control-field{grid-template-columns:1fr auto;align-items:center}.bv-m0-picker-panel>.bv-control-field>.bv-toggle{justify-self:end}.bv-resource-picker{display:grid;gap:5px}.bv-resource-picker.is-unresolved .bv-select-trigger{border-color:var(--bv-ui-danger)}.bv-resource-picker .bv-field-grid{align-items:end}.bv-resource-picker .bv-select-trigger{width:100%}.lg-node:has([node-type="BV M0 Fake Resource Collector"]) [node-type="BV M0 Fake Resource Collector"]:has(input[aria-label=collector_id]),.lg-node:has([node-type="BV M0 Fake Resource Collector"]) [node-type="BV M0 Fake Resource Collector"]:has(input[aria-label=resource_a_id]),.lg-node:has([node-type="BV M0 Fake Resource Collector"]) [node-type="BV M0 Fake Resource Collector"]:has(input[aria-label=resource_b_id]),.lg-node:has([node-type="BV M0 Fake Resource Consumer"]) [node-type="BV M0 Fake Resource Consumer"]:has(input[aria-label=collector_id]),.lg-node:has([node-type="BV M0 Fake Resource Consumer"]) [node-type="BV M0 Fake Resource Consumer"]:has(input[aria-label=resource_id]){display:none}.lg-slot:has(circle[fill*=BV_RUNTIME_RESOURCE_PROVIDER_M0],[style*=BV_RUNTIME_RESOURCE_PROVIDER_M0]){display:none!important}.lg-slot:has(circle[fill*=BV_RUNTIME_RESOURCE_PROVIDER],[style*=BV_RUNTIME_RESOURCE_PROVIDER]){display:none!important}.bv-lora-v3-picker-host{position:relative;z-index:1;padding:6px}.bv-lora-v3-picker-panel{display:grid;gap:10px}.bv-lora-v3-target{display:grid;gap:8px;padding:9px;border:1px solid var(--bv-ui-border);border-radius:4px}.bv-lora-v3-target>h3{margin:0}.bv-optional-lora-scope{display:grid;gap:7px}.bv-lora-v3-enable-row{display:grid;grid-template-columns:minmax(0,1fr);align-items:start;gap:8px}.bv-lora-v3-enable-row>.bv-control-field>.bv-control-label{display:none}.bv-lora-v3-enable-row>.bv-control-field .bv-toggle{white-space:nowrap}.bv-lora-v3-scope-picker{display:grid;gap:8px}.bv-lora-v3-stack-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 8px;align-items:end;padding:7px;border:1px solid var(--bv-ui-border);border-radius:4px}.bv-lora-v3-stack-row>strong,.bv-lora-v3-stack-row>.bv-resource-picker{grid-column:1}.bv-lora-v3-stack-row>.bv-button{grid-column:2;grid-row:2}.bv-trash-icon{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.bv-lora-v3-window{display:grid;gap:10px;padding:10px;overflow:auto}.lg-node:has([node-type="BV M0 Fake Multi Resource Consumer"]) [node-type="BV M0 Fake Multi Resource Consumer"]:has(input[aria-label=resource_bindings]){display:none}.bv-m0-multi-picker{max-height:520px;overflow:auto}.bv-m0-binding{display:grid;gap:5px;padding:6px;border:1px solid var(--bv-ui-border);border-radius:4px}.bv-m0-binding>header{display:flex;align-items:center;justify-content:space-between}.bv-m0-binding>header button,.bv-m0-add-binding{color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:4px}.bv-m0-binding>header button{width:24px;height:24px}.bv-m0-add-binding{min-height:28px}:is(.bv-ui,#bv-root,.bv-ui-portal,.bv-completion-popup) :where(button,input,select,textarea):focus-visible{outline:3px solid var(--bv-ui-focus-ring);outline-offset:2px}:is(.bv-ui,#bv-root,.bv-ui-portal,.bv-completion-popup) :where(input,select,textarea):focus{border-color:var(--bv-ui-brand);box-shadow:0 0 0 3px var(--bv-ui-focus-ring)}.bv-button,.bv-ui-button{color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border-color:var(--bv-ui-border)}.bv-button:hover:not(:disabled),.bv-ui-button:hover:not(:disabled){color:var(--bv-ui-text);background:var(--bv-ui-surface-hover);border-color:var(--bv-ui-border-hover)}.bv-button:active:not(:disabled),.bv-ui-button:active:not(:disabled){background:var(--bv-ui-surface-active);border-color:var(--bv-ui-border-strong)}.bv-button:disabled,.bv-ui-button:disabled{color:var(--bv-ui-disabled);opacity:.62}.bv-button.primary,.bv-ui-button--primary{color:var(--bv-ui-text-on-accent);background:var(--bv-ui-action);border-color:var(--bv-ui-action)}.bv-button.primary:hover:not(:disabled),.bv-ui-button--primary:hover:not(:disabled){background:var(--bv-ui-action-hover);border-color:var(--bv-ui-action-hover)}.bv-button.primary:active:not(:disabled),.bv-ui-button--primary:active:not(:disabled){background:var(--bv-ui-action-active);border-color:var(--bv-ui-action-active)}.bv-button.ghost,.bv-ui-button--ghost{color:var(--bv-ui-muted);background:transparent;border-color:transparent}.bv-button.ghost:hover:not(:disabled),.bv-ui-button--ghost:hover:not(:disabled){color:var(--bv-ui-text);background:var(--bv-ui-surface-hover)}.bv-button.danger,.bv-ui-button--danger{color:var(--bv-ui-danger-fg);background:var(--bv-ui-danger-bg);border-color:var(--bv-ui-danger)}.bv-button.warning{color:var(--bv-ui-warning-fg);background:var(--bv-ui-warning-bg);border-color:var(--bv-ui-warning)}.bv-button.success{color:var(--bv-ui-success-fg);background:var(--bv-ui-success-bg);border-color:var(--bv-ui-success)}.bv-button.info{color:var(--bv-ui-info-fg);background:var(--bv-ui-info-bg);border-color:var(--bv-ui-info)}.bv-badge.success{color:var(--bv-ui-success-fg)}.bv-badge.warning{color:var(--bv-ui-warning-fg)}.bv-badge.danger{color:var(--bv-ui-danger-fg)}.bv-callout.info{border-left-color:var(--bv-ui-info)}.bv-ui-dialog,.bv-menu,.bv-rich-select-menu,.bv-search-results,.bv-image-picker-menu,.bv-popover,.bv-toolbar-window-launcher,.bv-toast,.bv-managed-window,.bv-ui-window-shelf-item,.bv-adaptive-popover{color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border-color:var(--bv-ui-border-hover);box-shadow:0 18px 48px var(--bv-ui-shadow)}.bv-ui-dialog::backdrop,.bv-ui-overlay{background:var(--bv-ui-overlay)}.bv-ui-window-header,.bv-ui-dialog__header,.bv-ui-dialog__footer,.bv-ui-window-footer,.bv-toolbar-window-launcher>footer{background:var(--bv-ui-surface-raised)}.bv-ui-window-control:hover,.bv-ui-window-shelf-item:hover,.bv-toolbar-launcher-secondary:hover,.bv-toolbar-launcher-reveal:hover{color:var(--bv-ui-text);background:var(--bv-ui-surface-hover);border-color:var(--bv-ui-border)}.bv-ui-window-control--close:hover{color:var(--bv-ui-danger-fg);background:var(--bv-ui-danger-bg);border-color:var(--bv-ui-danger)}.bv-ui-window-footer.has-warning .bv-ui-window-status{color:var(--bv-ui-warning-fg)}.bv-toolbar .active,.bv-command-option[aria-selected=true],.bv-select-menu button[aria-selected=true],.bv-rich-select-menu button[aria-selected=true],.bv-image-picker-menu button[aria-selected=true]{color:var(--bv-ui-accent-soft);background:var(--bv-ui-selection-bg);border-color:var(--bv-ui-selection-border)}.bv-menu-content>button:hover,.bv-rich-select-menu>button:hover,.bv-search-results>button:hover,.bv-image-picker-menu>button:hover,.bv-command-option:hover{background:var(--bv-ui-selection-bg);border-color:var(--bv-ui-selection-border)}.bv-showcase,.bv-showcase>aside{color:var(--bv-ui-text);background:var(--bv-ui-bg)}.bv-showcase>aside{background:var(--bv-ui-surface)}.bv-resizable-demo,.bv-ui-card-list>.bv-detailer-card,.bv-sortable-content{background:var(--bv-ui-surface-subtle)}.bv-showcase>aside a:hover,.bv-image-preview-action:hover:not(:disabled),.bv-image-picker-toggle:hover:not(:disabled){background:var(--bv-ui-selection-bg)}.bv-ui-window-icon,.bv-ui-window-shelf-icon,.bv-image-preview-icon{color:var(--bv-ui-accent-soft);background:var(--bv-ui-selection-bg);border-color:var(--bv-ui-selection-border)}`,ME='.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 AE(e){return!e||!e.enabled||e.authoring.locked?null:e.id}function DE(e,t,r=3){return Math.hypot(t.x-e.x,t.y-e.y)>=r}function IE(e,t,r,o=12){return e>=3&&Math.hypot(r.x-t.x,r.y-t.y)<=o}function jE(e){return[...e].sort((t,r)=>r.priority-t.priority)}function PE(e){e.forEach((t,r)=>{t.priority=r})}function BE(e){return e==="draw-brush"}function Oh(e){return[...e].sort((t,r)=>t.priority-r.priority)}const zE=[{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 FE({geometry:e,canvas:t}){const r=e.operation==="add"?"white":"black";if(e.type==="rect")return s.jsx("rect",{x:e.x*t.width,y:e.y*t.height,width:e.width*t.width,height:e.height*t.height,fill:r});if(e.type==="ellipse")return s.jsx("ellipse",{cx:(e.x+e.width/2)*t.width,cy:(e.y+e.height/2)*t.height,rx:e.width*t.width/2,ry:e.height*t.height/2,fill:r});if(e.type==="polygon")return s.jsx("polygon",{points:e.points.map(c=>`${c.x*t.width},${c.y*t.height}`).join(" "),fill:r});if(e.type==="raster_mask"){const c=`raster-${e.id}`;return s.jsxs(s.Fragment,{children:[s.jsx("defs",{children:s.jsx("mask",{id:c,maskUnits:"userSpaceOnUse",x:"0",y:"0",width:t.width,height:t.height,children:s.jsx("image",{href:e.data_url,x:e.x*t.width,y:e.y*t.height,width:e.width*t.width,height:e.height*t.height,preserveAspectRatio:"none"})})}),s.jsx("rect",{width:t.width,height:t.height,fill:r,mask:`url(#${c})`})]})}const o=e.shape==="square"?"square":"round",n=e.size*Math.min(t.width,t.height),i=`bv-brush-soft-${e.id}`,a=(1-e.hardness)*n/6,l=a>.05?`url(#${i})`:void 0;if(e.points.length===1){const c=e.points[0],u=n*c.pressure,d=e.shape==="square"?s.jsx("rect",{x:c.x*t.width-u/2,y:c.y*t.height-u/2,width:u,height:u,fill:r,fillOpacity:e.opacity,filter:l}):s.jsx("circle",{cx:c.x*t.width,cy:c.y*t.height,r:u/2,fill:r,fillOpacity:e.opacity,filter:l}),f=u*e.hardness;return s.jsxs(s.Fragment,{children:[s.jsx("defs",{children:l&&s.jsx("filter",{id:i,filterUnits:"userSpaceOnUse",x:"0",y:"0",width:t.width,height:t.height,children:s.jsx("feGaussianBlur",{stdDeviation:a})})}),d,f>0&&(e.shape==="square"?s.jsx("rect",{x:c.x*t.width-f/2,y:c.y*t.height-f/2,width:f,height:f,fill:r,fillOpacity:e.opacity}):s.jsx("circle",{cx:c.x*t.width,cy:c.y*t.height,r:f/2,fill:r,fillOpacity:e.opacity}))]})}if((e.pressure_mode??"constant")==="constant"){const c=e.points.map((u,d)=>`${d?"L":"M"}${u.x*t.width},${u.y*t.height}`).join(" ");return s.jsxs(s.Fragment,{children:[s.jsx("defs",{children:l&&s.jsx("filter",{id:i,filterUnits:"userSpaceOnUse",x:"0",y:"0",width:t.width,height:t.height,children:s.jsx("feGaussianBlur",{stdDeviation:a})})}),s.jsx("path",{d:c,fill:"none",stroke:r,strokeOpacity:e.opacity,strokeWidth:n,strokeLinecap:o,strokeLinejoin:o==="round"?"round":"miter",filter:l}),e.hardness>0&&s.jsx("path",{d:c,fill:"none",stroke:r,strokeOpacity:e.opacity,strokeWidth:n*e.hardness,strokeLinecap:o,strokeLinejoin:o==="round"?"round":"miter"})]})}return s.jsx(s.Fragment,{children:e.points.slice(1).map((c,u)=>{const d=e.points[u],f=(d.pressure+c.pressure)/2;return s.jsx("line",{x1:d.x*t.width,y1:d.y*t.height,x2:c.x*t.width,y2:c.y*t.height,stroke:r,strokeOpacity:e.opacity,strokeWidth:n*f,strokeLinecap:o},u)})})}function UE({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 VE({region:e,geometries:t,canvas:r,opacity:o,resolved:n}){const i=sk(t).filter(u=>u.enabled&&(n||u.geometries.some((d,f)=>fr(d,f).visible))),a=`bv-feather-${e.id}`,l=Math.min(64,Math.round(e.mask.feather*Math.min(r.width,r.height))),c=l/3;return s.jsxs("g",{opacity:o,children:[n&&l>0&&s.jsx("defs",{children:s.jsx("filter",{id:a,filterUnits:"userSpaceOnUse",x:"0",y:"0",width:r.width,height:r.height,children:s.jsx("feGaussianBlur",{stdDeviation:c})})}),s.jsx("g",{filter:n&&l>0?`url(#${a})`:void 0,children:i.map(u=>{const d=`bv-mask-${e.id}-${u.id}`;return s.jsxs("g",{children:[s.jsx("defs",{children:s.jsxs("mask",{id:d,maskUnits:"userSpaceOnUse",x:"0",y:"0",width:r.width,height:r.height,children:[s.jsx("rect",{width:r.width,height:r.height,fill:"black"}),u.geometries.filter((f,p)=>f.enabled!==!1&&(n||fr(f,p).visible)).map(f=>s.jsx(FE,{geometry:f,canvas:r},f.id))]})}),s.jsx("rect",{width:r.width,height:r.height,fill:e.authoring.color,mask:`url(#${d})`})]},u.id)})})]})}function WE(e){const{document:t,selectedLayerId:r,selectedRegionId:o}=e,n=v.useRef(null),i=v.useRef(null),[a,l]=v.useState({width:1,height:1}),[c,u]=v.useState(e.initialView.zoom),[d,f]=v.useState({x:e.initialView.panX,y:e.initialView.panY}),[p,g]=v.useState(e.initialView.fit),[m,_]=v.useState(!1),k=v.useCallback((O=a)=>Math.max(.02,Math.min(1,(O.width-40)/t.canvas.width,(O.height-40)/t.canvas.height)),[t.canvas.height,t.canvas.width,a]),b=v.useCallback(()=>{u(k()),f({x:0,y:0}),g(!0)},[k]);v.useEffect(()=>{const O=n.current;if(!O)return;const E=new ResizeObserver(B=>{const C=B[0].contentRect,S={width:C.width,height:C.height};l(S),p&&(u(Math.max(.02,Math.min(1,(S.width-40)/t.canvas.width,(S.height-40)/t.canvas.height))),f({x:0,y:0}))});return E.observe(O),()=>E.disconnect()},[t.canvas.height,t.canvas.width,p]),v.useEffect(()=>e.onView({zoom:c,panX:d.x,panY:d.y,fit:p}),[p,d.x,d.y,e.onView,c]),v.useEffect(()=>{const O=B=>{const C=B.target;B.code!=="Space"||C instanceof HTMLInputElement||C instanceof HTMLTextAreaElement||C instanceof HTMLSelectElement||C?.isContentEditable||(B.preventDefault(),B.stopImmediatePropagation(),_(!0))},E=B=>{B.code==="Space"&&(B.preventDefault(),B.stopImmediatePropagation(),_(!1),i.current=null)};return window.addEventListener("keydown",O,!0),window.addEventListener("keyup",E,!0),()=>{window.removeEventListener("keydown",O,!0),window.removeEventListener("keyup",E,!0)}},[]);const h=O=>{let E=[...O.geometry];if(e.draft&&O.id===o){const B=new Set(e.draft.map(C=>C.id));E=E.map(C=>B.has(C.id)?e.draft.find(S=>S.id===C.id):C);for(const C of e.draft)E.some(S=>S.id===C.id)||E.push(C)}return!e.binaryMaskPreview&&e.isolate&&r&&(E=E.filter(B=>Ut(B)===r)),E},y=e.brush.size*Math.min(t.canvas.width,t.canvas.height)/t.canvas.width*100,w=O=>{O.preventDefault();const E=O.currentTarget.getBoundingClientRect(),B=O.clientX-E.left,C=O.clientY-E.top,S=Math.max(.02,Math.min(8,c*Math.exp(-O.deltaY*.0015))),N=S/c;f(A=>({x:B-E.width/2-(B-E.width/2-A.x)*N,y:C-E.height/2-(C-E.height/2-A.y)*N})),u(S),g(!1)},x=O=>{O.button!==1&&!(O.button===0&&m)||(O.preventDefault(),O.stopPropagation(),O.currentTarget.setPointerCapture(O.pointerId),i.current={x:O.clientX,y:O.clientY,panX:d.x,panY:d.y},g(!1))},T=O=>{i.current&&(O.preventDefault(),O.stopPropagation(),f({x:i.current.panX+O.clientX-i.current.x,y:i.current.panY+O.clientY-i.current.y}))},L=O=>{i.current&&(O.preventDefault(),O.stopPropagation(),i.current=null)},U=a.width/2-t.canvas.width*c/2+d.x,P=a.height/2-t.canvas.height*c/2+d.y,j=10/c,M=24/c;return s.jsx("section",{className:"bv-regional-work",children:s.jsxs("div",{ref:n,className:`artboard-viewport ${m?"pan-ready":""}`,onWheel:w,onPointerDownCapture:x,onPointerMoveCapture:T,onPointerUpCapture:L,onPointerCancelCapture:L,children:[s.jsx(uk,{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(${U}px, ${P}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:jE(t.regions.filter(O=>O.enabled&&(e.binaryMaskPreview||O.authoring.visible))).map(O=>s.jsx(VE,{region:e.binaryMaskPreview?{...O,authoring:{...O.authoring,color:"#FFFFFF"}}:O,geometries:h(O),canvas:t.canvas,opacity:e.binaryMaskPreview?1:e.displayOpacity,resolved:e.binaryMaskPreview},O.id))}),!e.binaryMaskPreview&&e.draft&&s.jsx("svg",{className:"bv-tool-preview",viewBox:`0 0 ${t.canvas.width} ${t.canvas.height}`,preserveAspectRatio:"none",children:e.draft.map(O=>s.jsx(UE,{geometry:O,canvas:t.canvas,cursor:e.cursor,activePolygon:e.tool.startsWith("polygon")},O.id))}),!e.binaryMaskPreview&&e.selectionBounds&&s.jsxs("svg",{className:"bv-selection-overlay",viewBox:`0 0 ${t.canvas.width} ${t.canvas.height}`,preserveAspectRatio:"none",children:[s.jsx("rect",{className:"brush-bounds",x:e.selectionBounds.x*t.canvas.width,y:e.selectionBounds.y*t.canvas.height,width:e.selectionBounds.width*t.canvas.width,height:e.selectionBounds.height*t.canvas.height}),zE.map(O=>{const E=(e.selectionBounds.x+e.selectionBounds.width*O.x)*t.canvas.width,B=(e.selectionBounds.y+e.selectionBounds.height*O.y)*t.canvas.height;return s.jsxs("g",{"data-handle":O.id,className:`resize-handle resize-handle-${O.id}`,children:[s.jsx("rect",{className:"resize-handle-hit",x:E-M/2,y:B-M/2,width:M,height:M}),s.jsx("rect",{className:"resize-handle-visible",x:E-j/2,y:B-j/2,width:j,height:j,rx:2/c})]},O.id)}),e.draft&&s.jsxs("text",{className:"tool-preview-size",style:{fontSize:12/c},x:(e.selectionBounds.x+e.selectionBounds.width)*t.canvas.width-4/c,y:(e.selectionBounds.y+e.selectionBounds.height)*t.canvas.height-7/c,children:[Math.round(e.selectionBounds.width*t.canvas.width)," × ",Math.round(e.selectionBounds.height*t.canvas.height)," px"]})]}),!e.binaryMaskPreview&&e.cursor&&e.tool.startsWith("brush")&&s.jsx("div",{className:`brush-cursor ${e.brush.shape}`,style:{left:`${e.cursor.x*100}%`,top:`${e.cursor.y*100}%`,width:`${y}%`,aspectRatio:"1"},children:s.jsx("i",{style:{width:`${e.brush.hardness*100}%`,height:`${e.brush.hardness*100}%`}})})]})}),s.jsxs("div",{className:"zoom-controls",onWheel:O=>O.stopPropagation(),children:[s.jsx(ne,{intent:"ghost",title:"Zoom out",onClick:()=>{u(O=>Math.max(.02,O/1.25)),g(!1)},children:"−"}),s.jsxs(ne,{intent:"ghost",title:"100%",onClick:()=>{u(1),f({x:0,y:0}),g(!1)},children:[Math.round(c*100)," %"]}),s.jsx(ne,{intent:"ghost",title:"Zoom in",onClick:()=>{u(O=>Math.min(8,O*1.25)),g(!1)},children:"+"}),s.jsx(ne,{intent:"ghost",title:"Fit to view",onClick:b,children:"Fit"})]})]})})}const Gy="BV.NodePack.Completion.Enabled",qy="BV.NodePack.Completion.Datasets",Ky="BV.NodePack.Completion.Placement",Jy="bv-nodepack:completion-enabled",Fa="bv-completion-enabled-changed",Ua="bv-completion-placement-changed",mp="bv-nodepack:completion-datasets",Zy="bv-nodepack:completion-placement",zs="bv-completion-datasets-changed";let Qy=null,ex=null,tx=null;function Dd(){try{return localStorage.getItem(Zy)==="field"?"field":"caret"}catch{return"caret"}}function $E(e){tx=e}function rx(e,t=!1){const r=e==="field"?"field":"caret";try{localStorage.setItem(Zy,r)}catch{}t&&tx?.(r),window.dispatchEvent(new CustomEvent(Ua,{detail:{placement:r}}))}function ox(){const[e,t]=v.useState(Dd);return v.useEffect(()=>{const r=o=>t(o.detail?.placement==="field"?"field":"caret");return window.addEventListener(Ua,r),()=>window.removeEventListener(Ua,r)},[]),e}function yp(){try{return localStorage.getItem(Jy)!=="false"}catch{return!0}}function HE(e){Qy=e}function nx(e,t=!1){try{localStorage.setItem(Jy,String(e))}catch{}t&&Qy?.(e),window.dispatchEvent(new CustomEvent(Fa,{detail:{enabled:e}}))}function ix(){const[e,t]=v.useState(yp);return v.useEffect(()=>{const r=o=>t(!!o.detail?.enabled);return window.addEventListener(Fa,r),()=>window.removeEventListener(Fa,r)},[]),e}function ax(){try{const e=localStorage.getItem(mp);if(e==null)return null;const t=JSON.parse(e);return Array.isArray(t)?t.map(String):null}catch{return null}}function YE(e){ex=e}function lx(e,t=!1){const r=[...new Set(e.map(String))];try{localStorage.setItem(mp,JSON.stringify(r))}catch{}t&&ex?.(JSON.stringify(r)),window.dispatchEvent(new CustomEvent(zs,{detail:{datasets:r}}))}function sx(e){if(e==null||e===""){try{localStorage.removeItem(mp)}catch{}window.dispatchEvent(new CustomEvent(zs,{detail:{datasets:null}}));return}try{const t=typeof e=="string"?JSON.parse(e):e;Array.isArray(t)&&lx(t.map(String))}catch{}}function XE(){const[e,t]=v.useState(ax);return v.useEffect(()=>{const r=o=>t(o.detail?.datasets??null);return window.addEventListener(zs,r),()=>window.removeEventListener(zs,r)},[]),e}function cx({onSelectionChange:e}={}){const t=XE(),[r,o]=v.useState([]),[n,i]=v.useState(""),a=async()=>{try{const g=await fetch("/bv_nodepack/completion/status");if(!g.ok)throw new Error(`HTTP ${g.status}`);const m=await g.json();o(Array.isArray(m?.datasets)?m.datasets:[]),i("")}catch(g){i(g instanceof Error?g.message:String(g))}};v.useEffect(()=>{a()},[]);const l=t??r.map(g=>g.id),c=g=>{lx(g,!0),e?.(g)},u=g=>c(l.includes(g)?l.filter(m=>m!==g):[...l,g]),d=(g,m)=>{const _=l.indexOf(g),k=_+m;if(_<0||k<0||k>=l.length)return;const b=[...l];[b[_],b[k]]=[b[k],b[_]],c(b)},f=new Map(r.map(g=>[g.id,g])),p=[...l.map(g=>f.get(g)).filter(g=>!!g),...r.filter(g=>!l.includes(g.id))];return s.jsxs("div",{className:"completion-dataset-picker",children:[s.jsx("strong",{children:"Completion Data"}),s.jsx("small",{children:"Topmost enabled dataset wins when tags are duplicated."}),p.map(g=>{const m=l.indexOf(g.id),_=m>=0;return s.jsxs("div",{children:[s.jsx(no,{label:g.name,help:`${(g.bytes/1048576).toFixed(1)} MiB`,checked:_,onValue:()=>u(g.id)}),s.jsxs("span",{className:"dataset-order",children:[s.jsx(ne,{intent:"ghost",iconOnly:!0,disabled:!_||m===0,title:"Move up",onClick:()=>d(g.id,-1),children:"↑"}),s.jsx(ne,{intent:"ghost",iconOnly:!0,disabled:!_||m===l.length-1,title:"Move down",onClick:()=>d(g.id,1),children:"↓"})]})]},g.id)}),!r.length&&!n&&s.jsx("small",{children:"No local CSV/TSV dataset found."}),n&&s.jsxs("small",{className:"dataset-error",children:["Could not load datasets: ",n]}),s.jsx(ne,{onClick:()=>void a(),children:"Reload List"})]})}function GE(e){const t=ix(),r=ox(),o=e.openMenu,{menuOverflow:n}=Wy(),i=v.useRef(null),a=v.useRef(null),l=(u,d,f)=>s.jsx(ih,{open:o===u,onOpen:p=>e.onOpenMenu(p?u:null),trigger:({toggle:p})=>s.jsxs(ne,{intent:"ghost",density:"compact","aria-label":d,title:d,"aria-expanded":o===u,onClick:p,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:f}),c=s.jsxs(s.Fragment,{children:[l("file","File",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsx(ne,{intent:"ghost",onClick:()=>{e.onExportDocument(),e.onOpenMenu(null)},children:"Export Document"}),s.jsx(ne,{intent:"ghost",onClick:()=>i.current?.click(),children:"Load and Replace Document"}),s.jsx("hr",{}),s.jsx(ne,{intent:"ghost",onClick:()=>{e.onExportRegions(),e.onOpenMenu(null)},children:"Export Regions"}),s.jsx(ne,{intent:"ghost",onClick:()=>a.current?.click(),children:"Add Regions"})]})),l("edit","Edit",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsxs(ne,{intent:"ghost",disabled:!e.canUndo,onClick:e.onUndo,children:["Undo ",s.jsx("kbd",{children:"Ctrl Z"})]}),s.jsxs(ne,{intent:"ghost",disabled:!e.canRedo,onClick:e.onRedo,children:["Redo ",s.jsx("kbd",{children:"Ctrl Shift Z"})]}),s.jsx(no,{label:"Prompt Autocomplete",help:"Optional. Disable it when using another completion extension.",checked:t,onValue:u=>nx(u,!0)}),s.jsx(at,{label:"Popup Position",value:r,onValue:u=>rx(u,!0),options:[{value:"caret",label:"At Caret"},{value:"field",label:"Below Text Field"}]}),s.jsx(cx,{})]})),l("view","View",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsx(Ur,{label:"Mask Display",value:e.displayOpacity,min:.05,max:1,step:.05,unit:"×",onValue:e.onDisplayOpacity}),s.jsx(Ur,{label:"Background Image",value:e.backgroundOpacity,min:0,max:1,step:.05,unit:"×",onValue:e.onBackgroundOpacity}),s.jsx(no,{label:"Binary Mask Preview",checked:e.binaryMaskPreview,onValue:e.onToggleBinaryMaskPreview}),s.jsx(no,{label:"Isolate Selection",checked:e.isolate,disabled:!e.hasSelection,onValue:e.onToggleIsolate}),s.jsx("small",{children:"Affects the editor display only."})]})),l("artboard","Artboard",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsx(Ur,{label:"Width",value:e.canvas.width,min:1,max:32768,step:1,unit:"px",slider:!1,onValue:u=>e.onCanvas({...e.canvas,width:u})}),s.jsx(Ur,{label:"Height",value:e.canvas.height,min:1,max:32768,step:1,unit:"px",slider:!1,onValue:u=>e.onCanvas({...e.canvas,height:u})})]})),l("help","?",s.jsxs("div",{className:"help-menu",children:[s.jsx(nh,{items:[{term:"Ctrl Z",description:"Undo"},{term:"Ctrl Shift Z",description:"Redo"},{term:"Ctrl E",description:"Merge selected layers"},{term:"Escape",description:"Cancel action"},{term:"Delete",description:"Delete layer"},{term:"Shift + Resize",description:"Scale proportionally"},{term:"Space + Drag",description:"Pan artboard"}]}),s.jsx(nh,{items:[{term:"Click",description:"Select layer"},{term:"Ctrl + Click",description:"Add/remove layer selection"},{term:"Shift + Click",description:"Select layer range"},{term:"Drag",description:"Draw or move"},{term:"Mouse wheel",description:"Zoom under cursor"}]})]}))]});return s.jsxs("div",{className:"editor-menus",children:[n?s.jsx(ih,{trigger:({toggle:u})=>s.jsx(ne,{intent:"ghost",density:"compact","aria-label":"Editor menus",onClick:u,children:"•••"}),children:s.jsx("div",{className:"editor-menus-overflow-panel",children:c})}):c,s.jsx("input",{hidden:!0,ref:i,type:"file",accept:"application/json,.json",onChange:u=>{const d=u.target.files?.[0];d&&e.onImportDocument(d),u.target.value=""}}),s.jsx("input",{hidden:!0,ref:a,type:"file",accept:"application/json,.json",onChange:u=>{const d=u.target.files?.[0];d&&e.onImportRegions(d),u.target.value=""}})]})}function ux(e,t,r,o=20){const n=Math.max(0,Math.min(e.length,t)),l=e.slice(0,n).match(/(?:^|[,\n;])\s*([^,\n;]*)$/)?.[1]??"",c=l.match(/^\s*/)?.[0].length??0,u=l.slice(c);if(u.trim().length<2)return null;const d=n-l.length+c;return{...r,text:e,caret:n,term:u,start:d,end:n,limit:o}}function dx(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 fx(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 px={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:ax()}),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:{}}]:[]})}},qE=["fontFamily","fontSize","fontStyle","fontWeight","letterSpacing","lineHeight","textTransform","textIndent","textAlign","wordSpacing","paddingTop","paddingRight","paddingBottom","paddingLeft","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth"];function KE(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"}),qE.forEach(_=>{c.style[_]=o[_]}),c.textContent=e.value.slice(0,t);const u=document.createElement("span");u.textContent=e.value.slice(t,t+1)||"​",c.append(u),document.body.append(c),c.scrollTop=e.scrollTop,c.scrollLeft=e.scrollLeft;const d=c.getBoundingClientRect(),f=u.getBoundingClientRect(),p=Number.parseFloat(o.lineHeight)||Number.parseFloat(o.fontSize)*1.2||16;c.remove();const g=r.left+(f.left-d.left)*a,m=r.top+(f.top-d.top)*l;return{left:g,top:m,bottom:m+p*l}}function Fs(e,t,r=210){const i=e.getBoundingClientRect(),a=t==="caret"?KE(e):{left:i.left,top:i.top,bottom:i.bottom},l=t==="caret"?Math.min(460,Math.max(320,i.width*.8)):i.width,c=Math.max(180,Math.min(l,window.innerWidth-4*2)),u=Math.max(4,Math.min(a.left,window.innerWidth-c-4)),d=a.bottom+4,f=d+r<=window.innerHeight-4?d:Math.max(4,a.top-r-4);return{left:u,top:f,width:c}}function gx({suggestions:e,selected:t,position:r,onAccept:o,onHeight:n}){const i=v.useRef(null);return v.useLayoutEffect(()=>{i.current&&n?.(i.current.offsetHeight)}),s.jsx("div",{ref:i,className:"bv-completion-popup bv-global-completion-popup",style:r,role:"listbox",children:e.map((a,l)=>s.jsxs(ne,{density:"compact",intent:"ghost",className:l===t?"active":"",onPointerDown:c=>{c.preventDefault(),o(l)},children:[s.jsx("span",{children:a.label}),s.jsx("small",{children:[a.category,a.detail,a.source].filter(Boolean).join(" · ")})]},a.id))})}function Us({value:e,onValue:t,completionContext:r,onKeyDown:o,onBlur:n,onSelect:i,...a}){const l=ix(),c=ox(),u=v.useRef(null),[d,f]=v.useState([]),[p,g]=v.useState(0),[m,_]=v.useState(null),k=v.useRef(null),b=v.useRef(null),h=v.useRef(null),y=v.useRef(210),w=v.useRef(()=>{}),x=()=>{b.current?.abort(),f([]),_(null)},T=()=>{const P=u.current;P&&_(Fs(P,c,y.current))},L=(P,j,M=j)=>{if(!l||j!==M)return x();h.current!=null&&window.clearTimeout(h.current),b.current?.abort();const O=ux(P,j,r);if(k.current=O,!O)return x();const E=new AbortController;b.current=E,h.current=window.setTimeout(async()=>{const B=await fx(O,[px],E.signal);if(E.signal.aborted)return;const C=u.current;f(B),g(0),_(B.length&&C?Fs(C,c):null)},120)};w.current=L;const U=(P=p)=>{const j=k.current,M=d[P];if(!j||!M)return;const O=dx(e,j,M);t(O.text),x(),requestAnimationFrame(()=>{u.current?.focus(),u.current?.setSelectionRange(O.caret,O.caret)})};return v.useEffect(()=>{l||x()},[l]),v.useEffect(()=>{const P=()=>{const j=u.current;j&&document.activeElement===j&&w.current(j.value,j.selectionStart,j.selectionEnd)};return document.addEventListener("selectionchange",P),()=>document.removeEventListener("selectionchange",P)},[]),v.useEffect(()=>{m&&T()},[c]),v.useEffect(()=>{if(m)return window.addEventListener("scroll",T,!0),window.addEventListener("resize",T),()=>{window.removeEventListener("scroll",T,!0),window.removeEventListener("resize",T)}},[!!m,c]),v.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(ek,{...a,ref:u,value:e,onChange:P=>{t(P.target.value),L(P.target.value,P.target.selectionStart,P.target.selectionEnd)},onSelect:P=>{L(P.currentTarget.value,P.currentTarget.selectionStart,P.currentTarget.selectionEnd),i?.(P)},onKeyDown:P=>{if(d.length){if(P.key==="ArrowDown"||P.key==="ArrowUp"){P.preventDefault(),P.stopPropagation(),g(j=>(j+(P.key==="ArrowDown"?1:-1)+d.length)%d.length);return}if(P.key==="Enter"||P.key==="Tab"){P.preventDefault(),P.stopPropagation(),U();return}if(P.key==="Escape"){P.preventDefault(),P.stopPropagation(),x();return}}o?.(P)},onBlur:P=>{window.setTimeout(x,120),n?.(P)}})}),l&&m&&s.jsx(gx,{suggestions:d,selected:p,position:m,onAccept:U,onHeight:P=>{Math.abs(P-y.current)<1||(y.current=P,T())}})]})}function An({label:e,help:t,value:r,onChange:o,children:n,disabled:i,className:a=""}){const l=Re.Children.toArray(n).flatMap(c=>Re.isValidElement(c)?[{value:String(c.props.value??c.props.children??""),label:String(c.props.children??c.props.value??""),disabled:c.props.disabled}]:[]);return s.jsx("div",{className:a,children:s.jsx(at,{label:e,help:t,value:r,onValue:o,options:l,disabled:i})})}function In({onChange:e,...t}){return s.jsx(Ur,{...t,onValue:e})}const Mh=({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))]}),bu=({title:e,scope:t,value:r,open:o,onOpen:n,onChange:i})=>s.jsx(Ms,{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(Or,{label:"Positive",children:s.jsx(Us,{value:r.positive_source,onValue:a=>i({...r,positive_source:a}),completionContext:{scope:t,polarity:"positive"}})}),s.jsx(Or,{label:"Negative",children:s.jsx(Us,{value:r.negative_source,onValue:a=>i({...r,negative_source:a}),completionContext:{scope:t,polarity:"negative"}})})]})}]}),JE=({region:e,automaticColor:t,onRegion:r})=>s.jsxs("section",{className:"bv-inspector-section",children:[s.jsx("h3",{children:"Mask & appearance"}),s.jsx(In,{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(nk,{label:"Display color",help:"Editor display only. It does not change masks or sampling.",value:e.authoring.color,onValue:o=>r(n=>{n.authoring.color=o.toUpperCase()})}),s.jsx(ne,{density:"compact",intent:"ghost",iconOnly:!0,"aria-label":"Reset display color to automatic",title:"Reset to automatic",disabled:!t||e.authoring.color.toUpperCase()===t,onClick:()=>r(o=>{t&&(o.authoring.color=t)}),children:"↶"})]})})]});function ZE(e){const t=e.layer?.geometries.find(n=>n.type==="brush_stroke"),[r,o]=v.useState(e.mode??(e.layer?"selection":e.region?"region":"document"));return v.useEffect(()=>o(e.mode??(e.layer?"selection":e.region?"region":"document")),[e.layer?.id,e.mode,e.region?.id]),s.jsx(tp,{density:"compact",className:"inspector-density",children:s.jsxs("aside",{className:`inspector bv-ui ${e.mode?"fixed-inspector":""}`,children:[s.jsxs("nav",{className:"inspector-tabs",role:"tablist","aria-label":"Inspector context",children:[s.jsx(ne,{intent:"ghost",role:"tab","aria-selected":r==="selection",disabled:!e.layer,onClick:()=>o("selection"),children:"Selection"}),s.jsx(ne,{intent:"ghost",role:"tab","aria-selected":r==="region",disabled:!e.region,onClick:()=>o("region"),children:"Region"}),s.jsx(ne,{intent:"ghost",role:"tab","aria-selected":r==="document",onClick:()=>o("document"),children:"Document"})]}),s.jsxs("div",{className:"inspector-tab-panel",role:"tabpanel",hidden:r!=="selection",children:[e.region&&s.jsx(JE,{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(In,{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(In,{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(In,{label:"Hardness",value:t.hardness,min:0,max:1,step:.05,onChange:n=>e.onBrushSetting("hardness",n)}),s.jsx(In,{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(An,{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(An,{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(An,{label:"Usage",help:"Controls whether this region participates in the main render, Detailer output, or both.",value:e.region.usage,onChange:n=>e.onRegion(i=>{i.usage=n}),children:[s.jsx("option",{value:"generation",children:"Generation"}),s.jsx("option",{value:"detailer",children:"Detailer only"}),s.jsx("option",{value:"both",children:"Generation + Detailer"})]}),e.detailerEasyRegionEditor,e.loraV3RegionEditor??s.jsx(An,{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(Mh,{stacks:e.loraStacks})}),s.jsx(In,{label:"Strength",value:e.region.strength,min:0,max:10,step:.05,onChange:n=>e.onRegion(i=>{i.strength=n})}),s.jsx(bu,{title:"Region Prompt",scope:"region",value:e.region.prompts,open:e.promptSections.region,onOpen:n=>e.onPromptSection("region",n),onChange:n=>e.onRegion(i=>{i.prompts=n})})]})}),s.jsx("div",{className:"inspector-tab-panel",role:"tabpanel",hidden:r!=="document",children:s.jsxs("section",{className:"bv-inspector-section",children:[s.jsx("h3",{children:"Document Prompts"}),e.loraV3GlobalEditor??s.jsx(An,{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(Mh,{stacks:e.loraStacks})}),s.jsxs(An,{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(bu,{title:"Global",scope:"global",value:e.globalPrompts,open:e.promptSections.global,onOpen:n=>e.onPromptSection("global",n),onChange:e.onGlobalPrompts}),s.jsx(bu,{title:"Background",scope:"background",value:e.backgroundPrompts,open:e.promptSections.background,onOpen:n=>e.onPromptSection("background",n),onChange:e.onBackgroundPrompts})]})})]})})}const ot=(e,t=0,r=1)=>Math.max(t,Math.min(r,e));function QE(e,t={width:1,height:1}){if(e.type==="rect"||e.type==="ellipse"||e.type==="raster_mask")return{x:e.x,y:e.y,width:e.width,height:e.height};const r=e.points.map(f=>f.x),o=e.points.map(f=>f.y);if(e.type==="polygon")return{x:Math.min(...r),y:Math.min(...o),width:Math.max(...r)-Math.min(...r),height:Math.max(...o)-Math.min(...o)};const n=Math.min(t.width,t.height),i=e.size*n/t.width/2,a=e.size*n/t.height/2,l=ot(Math.min(...r)-i),c=ot(Math.min(...o)-a),u=ot(Math.max(...r)+i),d=ot(Math.max(...o)+a);return{x:l,y:c,width:u-l,height:d-c}}function hx(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=ot(((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 eT(e,t,r={width:1,height:1}){if(e.type==="rect"||e.type==="raster_mask")return t.x>=e.x&&t.x<=e.x+e.width&&t.y>=e.y&&t.y<=e.y+e.height;if(e.type==="ellipse"){const a=e.width/2,l=e.height/2;return((t.x-e.x-a)/a)**2+((t.y-e.y-l)/l)**2<=1}if(e.type==="polygon"){let a=!1;for(let l=0,c=e.points.length-1;lt.y!=d.y>t.y&&t.x<(d.x-u.x)*(t.y-u.y)/(d.y-u.y)+u.x&&(a=!a)}return a}const o=a=>({...a,x:a.x*r.width,y:a.y*r.height}),n=e.size*Math.min(r.width,r.height)/2,i=o(t);return e.points.length===1?Math.hypot(i.x-e.points[0].x*r.width,i.y-e.points[0].y*r.height)<=n:e.points.slice(1).some((a,l)=>hx(i,o(e.points[l]),o(a))<=n)}function kc(e,t){const r=e.map(l=>QE(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 Ah(e,t,r,o){const n=kc(e,o);return t=ot(t,-n.x,1-n.x-n.width),r=ot(r,-n.y,1-n.y-n.height),e.map(i=>{const a=qt(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 bx(e,t,r){const o=kc(e,r);t={x:ot(t.x,0,.998),y:ot(t.y,0,.998),width:ot(t.width,.002,1),height:ot(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=qt(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=ot(l.size*Math.sqrt(n*i),.001,1))),l})}function tT(e,t,r,o,n=!1,i){const a=kc(e,i);let l=a.x,c=a.y,u=l+a.width,d=c+a.height;if(t.includes("w")&&(l=ot(l+r,0,u-.002)),t.includes("e")&&(u=ot(u+r,l+.002,1)),t.includes("n")&&(c=ot(c+o,0,d-.002)),t.includes("s")&&(d=ot(d+o,c+.002,1)),n&&t.length===2){const f=a.width/Math.max(a.height,1e-4),p=u-l,g=d-c;if(p/g>f){const m=p/f;t.includes("n")?c=ot(d-m):d=ot(c+m)}else{const m=g*f;t.includes("w")?l=ot(u-m):u=ot(l+m)}}return bx(e,{x:l,y:c,width:u-l,height:d-c},i)}function rT(e,t,r){return hx(e,t,r)}function oT(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 Dh=e=>e.layer_id??e.id,nT=e=>e.authoring??{name:"Layer",visible:!0,locked:!1};function iT(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 aT(e,t,r){const o=new Set(t);if(o.size<2||!o.has(r))return!1;const n=e.geometry.find(l=>Dh(l)===r);if(!n)return!1;const i=nT(n);let a=!1;return e.geometry.forEach(l=>{const c=Dh(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 vx(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 lT="bv-regional-editor-state-v1:",rt=(e,t)=>typeof e=="number"&&Number.isFinite(e)?e:t,Tt=(e,t,r)=>Math.max(t,Math.min(r,e)),sT=["select","rect-add","rect-subtract","ellipse-add","ellipse-subtract","polygon-add","polygon-subtract","brush-add","brush-subtract"];function mx(e){return`${lT}${e}`}function cT(e,t,r={width:520,height:560}){return{x:Tt(rt(e.x,t.width-r.width-24),-r.width+52,t.width-52),y:Tt(rt(e.y,84),72,Math.max(72,t.height-52))}}function Vs(e,t){const r=Tt(rt(e.width,520),Math.min(360,t.width),Math.max(360,t.width-32)),o=Tt(rt(e.height,640),Math.min(320,t.height),Math.max(320,t.height-32));return{...cT({x:rt(e.x,t.width-r-24),y:rt(e.y,84)},t,{width:r}),width:r,height:o}}function Ih(e,t){return e.mode==="workspace"?_n({x:24,y:58,width:t.width-48,height:t.height-82},t,"workspace"):e.windows.floating}function _n(e,t,r){const o=Math.min(780,Math.max(320,t.width-16)),n=Math.min(520,Math.max(300,t.height-16)),i=Math.max(o,t.width),a=Math.max(n,t.height),l=Tt(rt(e.width,o),o,i),c=Tt(rt(e.height,n),n,a),u=r==="workspace"?8:0;return{x:Tt(rt(e.x,u),u-l+80,t.width-u-80),y:Tt(rt(e.y,58),0,t.height-42),width:l,height:c}}function xp(e={width:window.innerWidth,height:window.innerHeight}){const t=_n({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=_n({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:Vs({x:e.width-544,y:84,width:520,height:640},e)}}function uT(e,t={width:window.innerWidth,height:window.innerHeight}){const r=xp(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:_n(i.workspace??r.windows.workspace,t,"workspace"),floating:_n(i.floating??r.windows.floating,t,"floating")},panels:{left:Tt(rt(a.left,290),210,620),right:Tt(rt(a.right,340),210,620)},artboard:{zoom:Tt(rt(l.zoom,1),.02,8),panX:rt(l.panX,0),panY:rt(l.panY,0),fit:typeof l.fit=="boolean"?l.fit:!0},selectedRegionId:typeof o.selectedRegionId=="string"?o.selectedRegionId:null,selectedLayerId:typeof o.selectedLayerId=="string"?o.selectedLayerId:null,displayOpacity:Tt(rt(o.displayOpacity,.5),.05,1),backgroundOpacity:Tt(rt(o.backgroundOpacity,1),0,1),isolate:o.isolate===!0,tool:o.tool==="rect"?"rect-add":sT.includes(o.tool)?o.tool:"select",binaryMaskPreview:o.binaryMaskPreview===!0,brush:{size:Tt(rt(c.size,.04),.001,1),hardness:Tt(rt(c.hardness,.75),0,1),opacity:Tt(rt(c.opacity,1),0,1),shape:c.shape==="square"?"square":"round",pressureMode:c.pressureMode==="stylus"?"stylus":"constant"},openMenu:["file","edit","view","artboard","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:Vs(o.quickPromptWindow??r.quickPromptWindow,t)}}function ns(e,t=localStorage,r={width:window.innerWidth,height:window.innerHeight}){try{return uT(JSON.parse(t.getItem(mx(e))||"null"),r)}catch{return xp(r)}}function Id(e,t,r=localStorage){try{return r.setItem(mx(e),JSON.stringify(t)),!0}catch{return!1}}function dT(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[x]=a,l[d++]=x)}}i.push({label:a,x:f,y:p,width:g-f+1,height:m-p+1,pixels:_})}return{labels:n,areas:i}}const jd=(e,t)=>{const r=document.createElement("canvas");return r.width=e,r.height=t,r},fT=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 pT(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 fT(t.data_url),t.x*r,t.y*o,t.width*r,t.height*o);else{const n=Math.min(r,o),i=t.points,a=t.size*n,l=t.shape==="square"?"square":"round",c=(f,p,g=0)=>{const m=a*f.pressure*p;e.filter=g>0?`blur(${g}px)`:"none",e.beginPath(),t.shape==="square"?e.rect(f.x*r-m/2,f.y*o-m/2,m,m):e.arc(f.x*r,f.y*o,m/2,0,Math.PI*2),e.fill()},u=(f,p=0)=>{e.filter=p>0?`blur(${p}px)`:"none",e.lineCap=l,e.lineJoin=l==="round"?"round":"miter";for(let g=1;g0&&c(i[0],t.hardness)):(u(1,d),t.hardness>0&&u(t.hardness))}e.restore()}async function gT(e,t,r){const o=jd(t,r),n=o.getContext("2d",{willReadFrequently:!0}),i=new Map;e.filter(a=>a.enabled!==!1).forEach(a=>{const l=ol(a),c=i.get(l);c?c.push(a):i.set(l,[a])});for(const a of i.values()){const l=jd(t,r),c=l.getContext("2d");for(const u of a)await pT(c,u,t,r);n.drawImage(l,0,0)}return o}async function hT(e,t,r){const i=(await gT(e,t.width,t.height)).getContext("2d",{willReadFrequently:!0}).getImageData(0,0,t.width,t.height),a=new Uint8ClampedArray(t.width*t.height);for(let f=0;ff.pixels>1);if(u.length<2)return[];const d={...e[0].authoring??{name:"Layer",visible:!0,locked:!1}};return u.map((f,p)=>{const g=jd(f.width,f.height),m=g.getContext("2d"),_=m.createImageData(f.width,f.height);for(let b=0;b({schema:"bv.regional.lora_bindings",version:1,document_id:e,global_stack_id:null,regions:{}});function bT(e,t,r){if(!t)return!1;const o=r.filter(n=>n.id===t);return o.length>1&&o[0].nodeId!==e}function _p(e,t){if(e==null||e==="")return Ec(t);const r=typeof e=="string"?JSON.parse(e):structuredClone(e);if(r?.schema!=="bv.regional.lora_bindings"||r?.version!==1||typeof r?.regions!="object"||Array.isArray(r.regions))throw new Error("Not a valid BV regional LoRA bindings v1 value");if(r.document_id&&r.document_id!==t)throw new Error("LoRA bindings target a different BV Regional document");const o={};for(const[n,i]of Object.entries(r.regions))typeof i=="string"&&i&&(o[n]=i);return{schema:"bv.regional.lora_bindings",version:1,document_id:t,global_stack_id:typeof r.global_stack_id=="string"&&r.global_stack_id?r.global_stack_id:null,regions:o}}function ti(e,t){const r=Object.fromEntries(Object.entries(e.regions).filter(([o])=>t.has(o)));return{...e,regions:r}}function vu(e,t){const r=structuredClone(e);return{document:r,loraBindings:structuredClone(ti(t,new Set(r.regions.map(o=>o.id))))}}function vT(e,t,r){const o=t.find((c,u)=>t.findIndex(d=>d.id===c.id)!==u);if(o)return[`Duplicate LoRA stack ID: ${o.id}`];const n=t.find((c,u)=>t.findIndex(d=>d.name.localeCompare(c.name,void 0,{sensitivity:"accent"})===0)!==u);if(n)return[`Duplicate LoRA stack name: ${n.name}`];const i=r&&Object.keys(e.regions).find(c=>!r.has(c));if(i)return[`LoRA assignment targets a missing region: ${i}`];const a=new Set(t.map(c=>c.id)),l=[e.global_stack_id,...Object.values(e.regions)].filter(c=>!!c);return l.length?t.length?[...new Set(l.filter(c=>!a.has(c)))].map(c=>`Assigned LoRA stack is missing: ${c}`):["LoRA stacks are assigned, but no BV Named LoRA Stack sources exist in this workflow."]:[]}function mT(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 Ws=(e,t)=>e.regions.find(r=>r.id===t)??null,Pd=(e,t)=>e?jr(e).find(r=>r.id===t)??null:null,Bd=e=>e.kind==="layer"||e.kind==="geometry"?e.layerId:null;function yT(e,t){const r=Ws(e,t.source.regionId),o=Ws(e,t.target.regionId);if(!r||!o||r.authoring.locked||o.authoring.locked||t.source.kind!=="region"&&Pd(r,t.source.layerId)?.authoring.locked)return!1;const n=Bd(t.target);return!(n&&Pd(o,n)?.authoring.locked)}function xT(e,t,r,o){if(!r||o==="inside"){e.geometry.push(...t);return}const n=e.geometry.map((a,l)=>Ut(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 _T(e,t,r){if(!yT(e,t))return!1;const o=structuredClone(e.regions),n=()=>e.regions.every(f=>Ym(f.geometry))?!0:(e.regions=o,!1);if(t.source.kind==="region"){if(t.target.kind!=="region"||t.position==="inside"||t.source.regionId===t.target.regionId)return!1;const f=e.regions.findIndex(m=>m.id===t.source.regionId),[p]=e.regions.splice(f,1),g=e.regions.findIndex(m=>m.id===t.target.regionId);return e.regions.splice(t.position==="before"?g:g+1,0,p),e.regions.forEach((m,_)=>{m.priority=_}),n()}const i=Ws(e,t.source.regionId),a=Ws(e,t.target.regionId);if(t.source.kind==="layer"){const f=t.source;if(t.target.kind==="geometry"||f.layerId===Bd(t.target))return!1;const p=i.geometry.filter(g=>Ut(g)===f.layerId);return p.length?(i.geometry=i.geometry.filter(g=>Ut(g)!==f.layerId),xT(a,p,Bd(t.target),t.position),n()):!1}const l=t.source,c=i.geometry.findIndex(f=>f.id===l.geometryId);if(c<0||t.target.kind==="region"&&t.position!=="inside")return!1;const[u]=i.geometry.splice(c,1);if(t.target.kind==="region")return u.layer_id=r(),delete u.mask_group_id,u.authoring={...fr(u)},a.geometry.push(u),n();const d=t.target.layerId;if((d!==l.layerId||a!==i)&&(u.mask_group_id??(u.mask_group_id=l.layerId),u.layer_id=d,u.authoring={...Pd(a,d).authoring}),t.target.kind==="layer"||t.position==="inside"){const f=a.geometry.map((p,g)=>Ut(p)===d?g:-1).filter(p=>p>=0);a.geometry.splice(f.length?f[f.length-1]+1:a.geometry.length,0,u)}else{const f=t.target,p=a.geometry.findIndex(g=>g.id===f.geometryId);a.geometry.splice(t.position==="before"?p:p+1,0,u)}return n()}const wT=e=>e.scope==="global"?"global":`region:${e.document_id}:${e.region_id}`;function yx(e,t){return e.scope===t.scope&&(t.scope==="global"||e.document_id===t.document_id&&e.region_id===t.region_id)}function xx(e,t,r){const o=e.entries.flatMap(n=>{if(r&&n.id!==r)return[n];const i=n.targets.filter(a=>!yx(a,t));return i.length?[{...n,targets:i}]:[]});return{...e,entries:o}}const _x=(e,t)=>e.entries.filter(r=>r.source.kind==="external"&&r.targets.some(o=>yx(o,t)));function kT({collectors:e,config:t,target:r,resolved:o,onSelection:n,onAdd:i,onRemove:a}){const l=_x(t,r);return s.jsxs("div",{className:"bv-lora-v3-scope-picker",children:[l.map((c,u)=>s.jsxs("section",{className:"bv-lora-v3-stack-row",children:[s.jsxs("strong",{children:["LoRA Stack ",u+1]}),s.jsx(Ri,{collectors:e,collectorId:c.source.collector_id,resourceId:c.source.resource_id,resolved:typeof o=="function"?o(c):o,label:"LoRA stack",emptyLabel:"Select LoRA stack",onSelection:(d,f)=>n(c.id,d,f)}),s.jsx(ne,{density:"compact",intent:"ghost",iconOnly:!0,"aria-label":`Remove LoRA Stack ${u+1}`,title:"Remove LoRA stack",onClick:()=>a(c.id,r),children:s.jsx("svg",{className:"bv-trash-icon",viewBox:"0 0 24 24","aria-hidden":"true",children:s.jsx("path",{d:"M4 7h16M9 7V4h6v3M7 7l1 13h8l1-13M10 11v5M14 11v5"})})})]},c.id)),s.jsx(ne,{intent:"secondary",disabled:!e.some(c=>c.resources.length>0),onClick:()=>i(r),children:"Add LoRA stack"})]})}function jh(e){const t=_x(e.config,e.target).length>0;return s.jsx("div",{className:"bv-optional-lora-scope",children:s.jsxs("div",{className:"bv-lora-v3-enable-row",children:[s.jsx(bc,{label:"",value:t,trueLabel:"LoRA enabled",falseLabel:"LoRA disabled",onValue:r=>{r?e.onAdd(e.target):e.onClear(e.target)}}),t&&s.jsx(kT,{...e})]})})}const ET=()=>({version:3,entries:[],steps:[]}),Ph=(e,t)=>e?.source?.kind==="external"?{...e,source:{...e.source,collector_id:String(e.source.collector_id??t??"")}}:e;function wx(e){const t=typeof e=="string"?JSON.parse(e):e;if(!t||typeof t!="object"||![1,2,3].includes(t.version)||!Array.isArray(t.entries)||t.version>=2&&!Array.isArray(t.steps))throw new Error("Invalid BV Regional LoRA v3 configuration");const r=structuredClone(t),o=r.collector_id??null;return{version:3,entries:r.entries.map(n=>Ph(n,o)),steps:(r.steps??[]).map(n=>({...n,entries:n.entries.map(i=>Ph(i,o))}))}}const kx=e=>JSON.stringify(e);function TT(e,t,r,o){const n=i=>i.id===t&&i.source.kind==="external"?{...i,source:{...i.source,collector_id:r,resource_id:o}}:i;return{...e,entries:e.entries.map(n),steps:e.steps?.map(i=>({...i,entries:i.entries.map(n)}))}}const uo="BV_RUNTIME_RESOURCE_PROVIDER",Va="resource_provider",zd="BV LoRA Stack Collector",wp=20,Ex=e=>`${Va}_${e}`,RT=20,Tc=(e,t)=>t==null?null:e?._links?.get?.(t)??e?.links?.get?.(t)??e?.links?.[t]??null,Bh=e=>e?.findIndex(t=>t?.name===Va||t?.type===uo)??-1;function Tx(e){let t=Bh(e.outputs);t<0&&e.addOutput&&(e.addOutput(Va,uo),t=Bh(e.outputs));const r=e.outputs?.[t];return r&&(r.name=Va,r.type=uo,r.hidden=!0,r.__bvResourceSlot=!0),t}function Rx(e,t=wp){const r=[];for(let o=1;o<=t;o++){const n=Ex(o);let i=e.inputs?.findIndex(l=>l?.name===n)??-1;i<0&&e.addInput&&(e.addInput(n,uo),i=e.inputs?.findIndex(l=>l?.name===n)??-1);const a=e.inputs?.[i];a&&(a.name=n,a.type=uo,a.hidden=!0,a.__bvResourceSlot=!0,a.__bvLoraProviderOrdinal=o),r.push(i)}return r}function Sx(e,t=0){const r=(e.inputs??[]).map((o,n)=>({slot:o,index:n,ordinal:Number(o?.__bvLoraProviderOrdinal??String(o?.name??"").match(/^resource_provider_(\d+)$/)?.[1]??0)})).filter(o=>o.ordinal>t&&o.slot?.type===uo&&o.slot?.link==null).sort((o,n)=>n.index-o.index);for(const o of r)e.removeInput?.(o.index)}function ST(e){if(e.__bvLoraOriginalComputeSize||typeof e.computeSize!="function")return;const t=e.computeSize;e.__bvLoraOriginalComputeSize=t,e.computeSize=function(){const r=t.apply(this,arguments),o=(this.inputs??[]).filter(n=>n?.type===uo).length;return[Number(r?.[0]??this.size?.[0]??220),Math.max(60,Number(r?.[1]??this.size?.[1]??60)-o*RT)]}}function Wa(e){if(ST(e),!e.setSize)return;const t=e.size??[220,60],r=Math.max(Number(t[0]??0),220);e.setSize([r,60]);const o=e.computeSize?.()??e.size??[220,60],n=Math.max(60,Number(o[1]??60)),i=Math.max(r,Number(o[0]??0),220);Math.abs(Number(e.size?.[0]??0)-i)<.5&&Math.abs(Number(e.size?.[1]??0)-n)<.5||e.setSize([i,n])}function Rc(e){if(!e.__bvLoraCompactScheduled){e.__bvLoraCompactScheduled=!0,Wa(e);for(const t of[0,50,150])setTimeout(()=>{Wa(e),t===150&&(e.__bvLoraCompactScheduled=!1)},t)}}function bi(e){return Array.from({length:wp},(t,r)=>{const o=e.inputs?.find(l=>l?.name===Ex(r+1)),n=Tc(e.graph,o?.link);if(!n||String(n.target_id)!==String(e.id))return null;const i=e.graph?.getNodeById?.(n.origin_id),a=i?.outputs?.[Number(n.origin_slot)];return i?.graph===e.graph&&(i?.type===zd||i?.comfyClass===zd||a?.type===uo)?i:null})}function Lx(e,t){if(t.length>wp)return!1;const r=Rx(e,t.length);for(let o=0;o({slot:a,index:l,ordinal:Number(a?.__bvLoraProviderOrdinal??String(a?.name??"").match(/^resource_provider_(\d+)$/)?.[1]??0)})))i>t.length&&o?.type===uo&&o.link!=null&&e.disconnectInput?.(n);return Sx(e,t.length),bi(e).slice(0,t.length).every((o,n)=>o===t[n])}function LT(e){const t=e.inputs?.findIndex(n=>n.name===Va)??-1;if(t<0||e.inputs?.[t]?.link==null)return!1;const r=Tc(e.graph,e.inputs[t].link),o=r&&e.graph?.getNodeById?.(r.origin_id);return!o||o.graph!==e.graph||!Lx(e,[o])?!1:(e.disconnectInput?.(t),!0)}function CT(e){return(e.graph?._nodes??[]).filter(t=>t!==e&&t.graph===e.graph&&String(t.comfyClass??t.type)===zd)}const NT=new Set(["BV Regional LoRA"]);function OT(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=Tc(t,l),u=c&&t?.getNodeById?.(c.target_id);!u||u.graph!==t||o.has(u)||(o.add(u),NT.has(String(u.comfyClass??u.type))&&n.push(u),(u.outputs??[]).some(d=>d.type==="BV_REGIONAL")&&r.push(u))}}return n}function MT(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=Tc(t,i.link),l=a&&t?.getNodeById?.(a.origin_id);if(!(!l||l.graph!==t||o.has(l))){if(["BV Regional LoRA","BV Regional Prompt"].includes(String(l.comfyClass??l.type)))return l;o.add(l),r.push(l)}}}return null}function Cx(e,t){const r=MT(e),o=r?bi(r).filter(Boolean):[];for(const i of t)i&&!o.includes(i)&&o.push(i);const n=bi(e);return!n.slice(o.length).some(Boolean)&&o.every((i,a)=>n[a]===i)||Lx(e,o),o}function AT(e,t){return OT(e).map(r=>Cx(r,t(r)))}const Nx="BV.Regional.ShowLegacyPorts";let Ox=!1,ri=!1;const kp=(e,t)=>t==="input"?e.link!=null:!!e.links?.length,Ep=(e,t)=>{for(const r of e?._nodes??[])t(r),r.subgraph&&Ep(r.subgraph,t)},DT=new Set(["BV Regional Native Conditioning","BV Regional SDXL Attention","BV Regional Z-Image Attention","BV Regional FLUX.2 Klein 9B Attention","BV Regional Krea 2 Attention","BV Regional Anima Conditioning"]);function IT(e){return DT.has(e)?[{direction:"input",name:"lora_registry",type:"BV_LORA_STACK_REGISTRY",guidance:"Use Regional V3 resource providers."},{direction:"input",name:"lora_bindings",type:"BV_REGIONAL_LORA_BINDINGS",guidance:"Use the BV_REGIONAL context input."}]:e==="BV Regional Detailer Plan"?[{direction:"input",name:"detector_registry",type:"BV_DETECTOR_REGISTRY",guidance:"Use Regional V3 detector resource providers."}]:[]}function Mx(e,t){Ox=!!e,Ep(t,wn)}function jT(e,t){return ri=!!e,typeof document<"u"&&document.documentElement.classList.toggle("bv-regional-debug-wiring-active",ri),Ep(t,wn),t?.setDirtyCanvas?.(!0,!0),ri}function PT(e){return jT(!ri,e)}function Ax(){return ri}function BT(e,t,r){return Ox||ri||kp(e,t)||e.__bvLegacySticky===!0||!!(r&&e.type===r)}function Fd(e){const t=e?.connecting_output?.type??e?.connecting_input?.type;if(t)return String(t);const r=e?.linkConnector?.renderLinks?.[0]?.fromSlot?.type;return r==null?null:String(r)}function Ml(e,t){for(const r of t){const o=r.direction==="input"?e.inputs:e.outputs,n=o?.find(i=>i.name===r.name);n&&(n.__bvLegacyPort=!0,n.__bvLegacyWasConnected=kp(n,r.direction),n.__bvLegacyGuidance=r.guidance)}wn(e)}function wn(e,t){for(const[r,o]of[["input",e.inputs],["output",e.outputs]])for(const n of o??[]){if(!n.__bvLegacyPort)continue;const i=kp(n,r);n.__bvLegacyWasConnected&&!i&&(n.__bvLegacySticky=!0),n.__bvLegacyWasConnected=i;const a=BT(n,r,t);n.hidden=!a,n.__bvM0PortHidden=!a,n.__bvM0VisualHidden=!a}e.setDirtyCanvas?.(!0,!0)}function zT(e){const t=Fd(e);for(const r of e?.graph?._nodes??[])wn(r,t);return t}function zh(e){for(const t of[...e.inputs??[],...e.outputs??[]])t.__bvLegacyPort&&(t.__bvLegacySticky=!1);wn(e)}function FT(e){return[...e.inputs??[],...e.outputs??[]].filter(t=>t.__bvLegacyPort&&(t.link!=null||!!t.links?.length))}const UT="BV_RUNTIME_RESOURCE_PROVIDER_M0",Ud="BV_RUNTIME_RESOURCE_PROVIDER",Vd=e=>e===UT||e===Ud;function Tp(e){return Ax()||(e?._nodes??[]).some(t=>t.__bvM0ResourceConsumer===!0&&!!t.properties?.bvM0DebugVisible)}function VT(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===Ud||o?.inputs?.[t.target_slot]?.type===Ud?!Ax():Dx(e,t)?!Tp(e.graph):!!(r?.outputs?.[t.origin_slot]?.__bvM0VisualHidden||o?.inputs?.[t.target_slot]?.__bvM0VisualHidden)}function Dx(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||Vd(n?.type))&&(i?.__bvM0ResourceSlot||Vd(i?.type)))}function Rp(e){if(!e||e.__bvM0DebugAnimation)return;e.__bvM0DebugAnimation=!0;const t=()=>{const r=Tp(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 Ix(e){if(typeof document>"u")return;const t=Tp(e);document.documentElement.classList.toggle("bv-m0-debug-active",t)}function Sp(e){if(!e||e.__bvM0VisibilityInstalled)return;e.__bvM0VisibilityInstalled=!0;let t=null,r=0;const o=()=>{r=0;const c=Fd(e);c!==t&&(t=c,zT(e))},n=()=>{r||(r=requestAnimationFrame(o))},i=()=>requestAnimationFrame(n);typeof window<"u"&&(window.addEventListener("pointermove",n,!0),window.addEventListener("pointerup",i,!0),window.addEventListener("pointercancel",i,!0));const a=e.drawNode,l=e.renderLink;e.renderLink=function(...c){if(VT(this,c[3]))return;if(!Dx(this,c[3]))return l.apply(this,c);const u=this.graph?.getNodeById?.(c[3]?.target_id),d=u?.inputs?.map((g,m)=>({slot:g,index:m})).filter(({slot:g})=>g.__bvM0ResourceSlot)??[],f=u?.__bvM0FanInAnchorSlot??(d.length>1?d[0].index:void 0);f!=null&&u&&((c[3]?.target_slot===f||!u.__bvM0FanInPoint)&&(u.__bvM0FanInPoint=c[2]),c[2]=u.__bvM0FanInPoint);const p=c[0];p.save();try{return p.setLineDash([7,5]),p.lineDashOffset=-((typeof performance>"u"?0:performance.now())/45%12),c[5]=typeof performance>"u"?0:performance.now()/1e3,l.apply(this,c)}finally{p.restore()}},e.drawNode=function(c,u){const d=[],f=Fd(this)??"";for(const p of[...c.inputs??[],...c.outputs??[]])if(!(p.__bvLegacyPort&&f&&p.type===f)&&!(!Vd(p.type)&&!p.__bvM0PortHidden)){for(const g of["name","label","localized_name"]){const m=Object.prototype.hasOwnProperty.call(p,g),_=p[g];Object.defineProperty(p,g,{configurable:!0,writable:!0,value:""}),d.push(()=>m?Object.defineProperty(p,g,{configurable:!0,writable:!0,value:_}):delete p[g])}for(const g of["draw","drawCollapsed"]){if(typeof p[g]!="function")continue;const m=Object.prototype.hasOwnProperty.call(p,g),_=p[g];Object.defineProperty(p,g,{configurable:!0,writable:!0,value:()=>{}}),d.push(()=>m?Object.defineProperty(p,g,{configurable:!0,writable:!0,value:_}):delete p[g])}}try{return a.call(this,c,u)}finally{for(let p=d.length-1;p>=0;p--)d[p]()}}}function Lp(e,t,r){let o=0;const n=(e.__bvM0ElementMarkRevision??0)+1;e.__bvM0ElementMarkRevision=n;const i=()=>{if(e.__bvM0ElementMarkRevision!==n)return;const a=CSS.escape(String(e.id)),l=document.querySelector(`.lg-node[data-node-id="${a}"]`);if(!l){o++<40&&setTimeout(i,50);return}l.classList.add(`bv-m0-${t}`),l.classList.toggle("bv-m0-debug",r);const c=l.querySelectorAll(".lg-slot--input"),u=e.inputs?.map((f,p)=>({slot:f,index:p})).filter(({slot:f})=>f.__bvM0ResourceSlot)??[],d=u.length>1?u[0].index:void 0;c.forEach((f,p)=>f.classList.toggle("bv-m0-port-hidden",!!e.inputs?.[p]?.__bvM0PortHidden||d!=null&&p!==d)),l.classList.toggle("bv-m0-fan-in",d!=null),o++<4&&setTimeout(i,75*o)};i()}const WT=new Map,$T={regional:"bv-open-regional-editor",quick:"bv-open-regional-quick-edit",lora:"bv-open-regional-lora-editor"};function zr(e,t=null){for(const r of WT.get(e)??[])r(t);typeof window<"u"&&window.dispatchEvent(new CustomEvent($T[e],{detail:{node:t}}))}const Wd="bvRegionalEditorDraftV1",$d="bv-regional-migration-report",Hd="bv-regional-validation-changed",mu=(e,t)=>e.widgets?.find(r=>r.name===t),HT=e=>String(e.comfyClass??e.type??"");function YT(e){if(e==null||typeof e!="object"||Array.isArray(e))return null;const t=e;return t.schema!=="bv.regional.editor-draft"||t.version!==1||!t.raw||typeof t.raw!="object"||Array.isArray(t.raw)?null:{schema:"bv.regional.editor-draft",version:1,raw:structuredClone(t.raw),issues:Array.isArray(t.issues)?structuredClone(t.issues):[]}}function XT(e,t){e.properties??(e.properties={}),t?e.properties[Wd]=structuredClone(t):delete e.properties[Wd],e.graph?.change?.(),e.graph?.setDirtyCanvas?.(!0,!0),typeof window<"u"&&window.dispatchEvent(new CustomEvent(Hd,{detail:{node:e}}))}function Yd(e){return YT(e.properties?.[Wd])}function GT(e,t){const r=structuredClone(e),o=[];if(Object.prototype.hasOwnProperty.call(t,"title")){const n=typeof t.title=="string"?t.title.trim():"";n?r.title=n:o.push({field:"title",section:"document",message:"Title is required.",fallback:r.title})}for(const[n,i,a]of[["canvas.width",64,16384],["canvas.height",64,16384]]){if(!Object.prototype.hasOwnProperty.call(t,n))continue;const l=typeof t[n]=="number"?t[n]:Number(t[n]);Number.isInteger(l)&&l>=i&&l<=a?r.canvas[n.endsWith("width")?"width":"height"]=l:o.push({field:n,section:"canvas",message:`${n} must be an integer from ${i} to ${a}.`,fallback:r.canvas[n.endsWith("width")?"width":"height"]})}return{canonical:r,draft:{schema:"bv.regional.editor-draft",version:1,raw:structuredClone(t),issues:o}}}function Xd(e){const t={nodeId:String(e.id??""),nodeTitle:e.title||"BV Regional node",migrated:!1,assumedDefaults:[]},r=[];try{const o=mu(e,"regional_json");if(o){const i=typeof o.value=="string"?JSON.parse(o.value):structuredClone(o.value),a=Uo(i),l=JSON.stringify(a);i?.version===1&&t.assumedDefaults.push("region usage = generation"),String(o.value??"")!==l&&r.push({target:o,value:l})}const n=mu(e,"lora_v3_config_json")??(HT(e)==="BV Regional LoRA"?mu(e,"config_json"):void 0);if(n&&String(n.value??"").trim()){const i=wx(n.value),a=kx(i);String(n.value??"")!==a&&r.push({target:n,value:a})}}catch(o){return t.error=o instanceof Error?o.message:String(o),t}for(const o of r)o.target.value=o.value,o.target.callback?.(o.value);return t.migrated=r.length>0,t.migrated&&(e.graph?.change?.(),e.graph?.setDirtyCanvas?.(!0,!0)),t}let Al=[],yu=!1;function Gd(e){if(!e.migrated&&!e.error)return;const t=`${e.nodeId}:${e.nodeTitle}`;Al=[...Al.filter(r=>`${r.nodeId}:${r.nodeTitle}`!==t),e],!(yu||typeof window>"u")&&(yu=!0,queueMicrotask(()=>{yu=!1;const r=Al;Al=[],window.dispatchEvent(new CustomEvent($d,{detail:{reports:r}}))}))}function qT(e){const t=e.filter(n=>n.migrated),r=e.filter(n=>n.error),o=[...new Set(t.flatMap(n=>n.assumedDefaults))];return{title:r.length?"Regional migration needs attention":"Regional configuration migrated",message:`${t.length} migrated, ${r.length} failed${o.length?` · Defaults: ${o.join(", ")}`:""}.`,tone:r.length?"warning":"info"}}const Fh="bv-open-regional-lora-editor",fo="bv-regional-lora-inventory-changed",tr=(e,t)=>e?.widgets?.find(r=>r.name===t),Ci=e=>String(e?.comfyClass??e?.type??""),jx=(e,t)=>t==null?null:e?._links?.get?.(t)??e?.links?.get?.(t)??e?.links?.[t]??null,ln=e=>{e&&(e.type="converted-widget",e.hidden=!0,e.computeSize=()=>[0,-4],e.element&&(e.element.style.display="none"),e.serializeValue=e.serializeValue??function(){return this.value})},KT=e=>{e&&!String(e.value??"").trim()&&(e.value=crypto.randomUUID())},Px=()=>{let e=0;const t=()=>{const r=ct().canvas;r?Sp(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=jx(n.graph,i.link),l=a&&n.graph?.getNodeById?.(a.origin_id);if(!(!l||l.graph!==n.graph)){if(Ci(l)==="BV Named LoRA Stack"){const c=String(tr(l,"stack_id")?.value??"").trim(),u=String(tr(l,"name")?.value??"").trim();c&&u&&t.push({id:c,label:u,node:l})}o.push(l)}}}}return t.reverse()}function al(e){return CT(e).map(t=>({id:String(tr(t,"collector_id")?.value??"").trim(),nodeId:String(t.id),label:String(t.title||"BV LoRA Stack Collector"),resources:Bx(t),node:t})).filter(t=>t.id)}function Cp(e){const t=[];for(const r of[...e.entries,...(e.steps??[]).flatMap(o=>o.entries)])r.source.kind==="external"&&r.source.collector_id&&!t.includes(r.source.collector_id)&&t.push(r.source.collector_id);return t}function Bo(e,t=Ci(e)==="BV Regional Prompt"?"lora_v3_config_json":"config_json"){try{let r=wx(tr(e,t)?.value),o=bi(e),n=!1;const i=a=>{if(a.source.kind!=="external")return a;const l=o.find(f=>f?.__bvLoraCollectorIdRemap?.[a.source.collector_id]||String(tr(f,"collector_id")?.value??"")===a.source.collector_id),c=l?.__bvLoraCollectorIdRemap?.[a.source.collector_id]??a.source.collector_id,u=Object.assign({},...Bx(l).map(f=>f.node?.__bvLoraResourceIdRemap??{})),d=u[a.source.resource_id]??a.source.resource_id;return n||(n=c!==a.source.collector_id||d!==a.source.resource_id),{...a,source:{...a.source,collector_id:c,resource_id:d}}};return r={...r,entries:r.entries.map(i),steps:r.steps?.map(a=>({...a,entries:a.entries.map(i)}))},n&&zx(e,r,t),r}catch{return ET()}}function zx(e,t,r=Ci(e)==="BV Regional Prompt"?"lora_v3_config_json":"config_json"){const o=tr(e,r);o&&(o.value=kx(t),o.callback?.(o.value),e.setDirtyCanvas?.(!0,!0))}function JT(e){const t=e?.graph,r=[e],o=new Set;let n=null;for(;r.length&&!n;){const i=r.shift();if(!(!i||o.has(i))){if(o.add(i),Ci(i)==="BV Regional Prompt"){try{const a=JSON.parse(String(tr(i,"regional_json")?.value??"{}"));n=a.version===3?a.core:a}catch{}break}for(const a of i.inputs??[]){if(a.type!=="BV_REGIONAL")continue;const l=jx(t,a.link),c=l&&t?.getNodeById?.(l.origin_id);c?.graph===t&&r.push(c)}}}return n?.document_id?[{value:"global",label:"Global",target:{scope:"global"}},...(n.regions??[]).map(i=>({value:`region:${n.document_id}:${i.id}`,label:String(i.name||i.id),target:{scope:"region",document_id:String(n.document_id),region_id:String(i.id)}}))]:[{value:"global",label:"Global",target:{scope:"global"}}]}const Fx=e=>new Set(bi(e).map(t=>String(tr(t,"collector_id")?.value??"")).filter(Boolean));function Uh(e,t){const r=Fx(e);return Cp(t).every(o=>r.has(o))}function Ux(e,t,r){return r.source.kind!=="external"||Fx(e).has(r.source.collector_id)}function ll(e,t){return zx(e,t),Wx(e,t),t}function Vx(e,t,r,o,n){return ll(e,TT(t,r,o,n))}function ZT(e,t,r){const o=al(e)[0],n=o?.resources[0];return!o||!n?t:ll(e,{...t,entries:[...t.entries,{id:crypto.randomUUID(),source:{kind:"external",collector_id:o.id,resource_id:n.id},targets:[r]}]})}function QT(e,t,r,o){return ll(e,xx(t,o,r))}function eR(e,t,r){return ll(e,xx(t,r))}function tR(e){Px();const t=tr(e,"collector_id");KT(t);const r=String(t?.value??"").trim(),o=(e.graph?._nodes??[]).find(n=>n!==e&&Ci(n)==="BV LoRA Stack Collector"&&String(tr(n,"collector_id")?.value??"").trim()===r);if(t&&r&&o){const n=crypto.randomUUID();t.value=n,e.__bvLoraCollectorIdRemap={[r]:n}}ln(t),Tx(e),e.__bvRuntimeResourceProvider=!0}function rR(e){try{const t=Ci(e)==="BV Regional Prompt"?"lora_v3_config_json":"config_json",r=JSON.parse(String(tr(e,t)?.value??"{}")),o=[...r.entries??[],...(r.steps??[]).flatMap(i=>i.entries??[])],n=[];for(const i of o)i?.source?.kind==="external"&&i.source.collector_id&&!n.includes(i.source.collector_id)&&n.push(i.source.collector_id);return n.length}catch{return 0}}function oR(e,t){const r=t??Bo(e),o=al(e),n=Cp(r).map(i=>o.find(a=>a.id===i)?.node??null);return Cx(e,n)}function nR(e){const t=Bo(e),r=al(e);return Cp(t).map(o=>r.find(n=>n.id===o)?.node??null)}function iR(e,t){const r=oR(e,t);return AT(e,nR),r}function Wx(e,t){e.__bvLoraPendingConfig=t??e.__bvLoraPendingConfig,!e.__bvLoraReconcileScheduled&&(e.__bvLoraReconcileScheduled=!0,setTimeout(()=>{const r=e.__bvLoraPendingConfig;delete e.__bvLoraPendingConfig,e.__bvLoraReconcileScheduled=!1,iR(e,r),window.dispatchEvent(new CustomEvent(fo,{detail:{node:e}}))},0))}function $s(e){Px(),LT(e),Wx(e);const t=bi(e),r=t.reduce((n,i,a)=>i?a+1:n,0),o=Math.max(rR(e),r);Sx(e,o);for(const n of Rx(e,o)){const i=e.inputs?.[n];i&&(i.hidden=!0,i.label="",i.__bvM0VisualHidden=!0,i.__bvM0PortHidden=!0,i.__bvM0ResourceSlot=!0)}Rc(e)}function aR(e){if($s(e),ln(tr(e,"operation")),ln(tr(e,"config_json")),!e.widgets?.find(t=>t.name==="open_lora_editor")){const t=e.addWidget?.("button","open_lora_editor",null,()=>zr("lora",e),{serialize:!1});t&&(t.label="Open LoRA Editor",t.serialize=!1)}Wa(e)}function lR(e,t){const r=t.name==="BV LoRA Stack Collector",o=t.name==="BV Regional LoRA",n=t.name==="BV Regional Prompt";if(!r&&!o&&!n)return!1;const i=e.prototype.onNodeCreated,a=e.prototype.onConfigure,l=e.prototype.onConnectionsChange,c=e.prototype.onRemoved,u=function(){r&&tR(this),o&&aR(this),n&&$s(this),o&&window.dispatchEvent(new CustomEvent(fo))};return e.prototype.onNodeCreated=function(){const d=i?.apply(this,arguments);return queueMicrotask(()=>u.call(this)),d},e.prototype.onConfigure=function(){const d=a?.apply(this,arguments);return queueMicrotask(()=>{(o||n)&&Gd(Xd(this)),u.call(this)}),d},e.prototype.onConnectionsChange=function(){const d=l?.apply(this,arguments);return queueMicrotask(()=>u.call(this)),d},e.prototype.onRemoved=function(){const d=c?.apply(this,arguments);return o&&queueMicrotask(()=>window.dispatchEvent(new CustomEvent(fo))),d},!0}const Gr=(e,t,r,o)=>{const n=Number(e);return Number.isFinite(n)?Math.max(r,Math.min(o,n)):t},Np=()=>({global_influence:1,background_influence:.35,primary_region_influence:1,context_region_influence:1}),$x=()=>({roi_padding:.15,threshold:.5,dilation:0,crop_factor:1.5,drop_size:10}),Op=e=>e.filter(t=>t.enabled!==!1&&(t.usage==="detailer"||t.usage==="both")).sort((t,r)=>(t.priority??0)-(r.priority??0)),qd=e=>({version:1,jobs:Op(e).map(t=>({id:crypto.randomUUID(),region_ids:[t.id],primary_region_id:t.id,mask_composition:"union",prompt_composition:"context",conditioning:Np(),detector_assignments:[]}))}),da=(e,t,r=[])=>{const o=new Set(Op(t).map(a=>a.id));let n;try{n=String(e??"").trim()?JSON.parse(String(e)):qd(t)}catch{n=qd(t)}return{version:1,jobs:Array.isArray(n?.jobs)?n.jobs.flatMap(a=>{const l=Array.isArray(a?.region_ids)?[...new Set(a.region_ids.map(String).filter(m=>o.has(m)))]:[];if(!l.length)return[];const c=a.conditioning??{},u=a.detector??{},d=Array.isArray(a.detector_assignments)?a.detector_assignments.slice(0,1):[],f=String(a.detector_id??"").trim(),p=r.flatMap(m=>m.resources.filter(_=>_.id===f).map(_=>({collector:m,resource:_}))),g=d.length?d:f?[{id:crypto.randomUUID(),source:{collector_id:p.length===1?p[0].collector.id:"",resource_id:f},options:u}]:[];return[{id:String(a.id??"").trim()||crypto.randomUUID(),region_ids:l,primary_region_id:l.includes(String(a.primary_region_id))?String(a.primary_region_id):l[0],mask_composition:["union","intersection","subtract"].includes(a.mask_composition)?a.mask_composition:"union",prompt_composition:a.prompt_composition==="primary"?"primary":"context",conditioning:{global_influence:Gr(c.global_influence,1,0,2),background_influence:Gr(c.background_influence,.35,0,2),primary_region_influence:Gr(c.primary_region_influence,1,0,2),context_region_influence:Gr(c.context_region_influence,1,0,2)},detector_assignments:g.map(m=>{const _=m.options??{};return{id:String(m.id??"").trim()||crypto.randomUUID(),source:{collector_id:String(m.source?.collector_id??""),resource_id:String(m.source?.resource_id??"")},options:{roi_padding:Gr(_.roi_padding,.15,0,2),threshold:Gr(_.threshold,.5,0,1),dilation:Math.round(Gr(_.dilation,0,-512,512)),crop_factor:Gr(_.crop_factor,1.5,1,20),drop_size:Math.round(Gr(_.drop_size,10,1,8192)),...String(_.query??"").trim()?{query:String(_.query).trim()}:{},...Array.isArray(_.labels)?{labels:_.labels.map(String).map(k=>k.trim()).filter(Boolean)}:{}}}})}]}):[]}},fa=e=>JSON.stringify(e),Hs=()=>({schema:"bv.detector_registry_config",version:2,collector_id:crypto.randomUUID(),detectors:[]}),pa=e=>{try{const t=String(e??"").trim()?JSON.parse(String(e)):Hs(),r=String(t?.collector_id??"").trim()||crypto.randomUUID(),o=Array.isArray(t?.detectors)?t.detectors.flatMap(n=>{const i=String(n?.id??"").trim(),a=String(n?.model_name??"").trim();if(!i||!a)return[];const l=n.provider==="onnx"?"onnx":"ultralytics",c=String(n.sam_model_name??"").trim();return[{id:i,provider:l,model_name:a,...c?{sam_model_name:c,sam_device_mode:["Prefer GPU","CPU"].includes(n.sam_device_mode)?n.sam_device_mode:"AUTO"}:{}}]}):[];return{schema:"bv.detector_registry_config",version:2,collector_id:r,detectors:o}}catch{return Hs()}},ga=e=>JSON.stringify(e),vi="bv-regional-detailer-inventory-changed",Vr="BV_RUNTIME_RESOURCE_PROVIDER",Hx="BV Detector Registry",Sc=20,Cn=(e,t)=>e?.widgets?.find(r=>r.name===t),Mp=e=>String(e?.comfyClass??e?.type??""),Ap=e=>e===0?"resource_provider":`resource_provider_${e}`,Yx=e=>`detailer_resource_provider_${e+1}`,sl=(e,t)=>t==null?null:e?._links?.get?.(t)??e?.links?.get?.(t)??e?.links?.[t]??null,rr=e=>e?.graph??e?.__bvConcreteGraph??null;function $a(e,t){return e&&t&&(e.__bvConcreteGraph=t),t}const Ha=e=>pa(Cn(e,"config_json")?.value),Xx=e=>{try{const t=JSON.parse(String(Cn(e,"config_json")?.value??"{}"));return t?.version===1&&Array.isArray(t.jobs)?t:{version:1,jobs:[]}}catch{return{version:1,jobs:[]}}};function Dp(e){let t=e.outputs?.findIndex(o=>o?.type===Vr)??-1;t<0&&e.addOutput&&(e.addOutput("resource_provider",Vr),t=e.outputs?.findIndex(o=>o?.type===Vr)??-1);const r=e.outputs?.[t];return r&&(r.name="resource_provider",r.type=Vr,r.hidden=!0,r.__bvResourceSlot=!0),t}function Gx(e,t){const r=[];for(let o=0;ol.name===n)??-1;i<0&&e.addInput&&(e.addInput(n,Vr),i=e.inputs?.findIndex(l=>l.name===n)??-1);const a=e.inputs?.[i];a&&(a.type=Vr,a.hidden=!0,a.label="",a.__bvResourceSlot=!0,a.__bvM0PortHidden=!0),r.push(i)}return r}const sR=e=>e?.name==="resource_provider"?0:Number(String(e?.name??"").match(/^resource_provider_(\d+)$/)?.[1]??-1);function qx(e,t){const r=(e.inputs??[]).map((o,n)=>({slot:o,index:n,ordinal:sR(o)})).filter(o=>o.slot?.type===Vr&&o.ordinal>=t&&o.slot?.link==null).sort((o,n)=>n.index-o.index);for(const o of r)e.removeInput?.(o.index)}function Ip(e,t){const r=rr(e),o=e.inputs?.find(l=>l.name===Ap(t)),n=sl(r,o?.link);if(!n)return null;const i=r?.getNodeById?.(n.origin_id),a=i?.outputs?.[Number(n.origin_slot)];return rr(i)===r&&a?.type===Vr?i:null}function Lc(e){const t=rr(e);return(t?._nodes??t?.nodes??[]).filter(r=>r!==e&&rr(r)===t&&Mp(r)===Hx)}function is(e){const t=[];for(const r of e.jobs??[])for(const o of r.detector_assignments??[]){const n=String(o?.source?.collector_id??"");n&&!t.includes(n)&&t.push(n)}return t}const Kx=e=>{try{const t=JSON.parse(String(Cn(e,"detailer_v3_config_json")?.value??"{}"));return t?.version===1&&Array.isArray(t.jobs)?t:{version:1,jobs:[]}}catch{return{version:1,jobs:[]}}};function cR(e){const t=rr(e),r=[e],o=new Set(r);for(;r.length;){const n=r.shift();for(const i of n?.inputs??[]){if(i?.type!=="BV_REGIONAL")continue;const a=sl(t,i.link),l=a&&t?.getNodeById?.(a.origin_id);if(!(!l||rr(l)!==t||o.has(l))){if(Mp(l)==="BV Regional Prompt")return l;o.add(l),r.push(l)}}}return null}function Jx(e,t){if(String(Cn(e,"config_json")?.value??"").trim())return is(t);const r=cR(e);return is(r?Kx(r):t)}function uR(e,t){$a(e,t);const r=Cn(e,"config_json");if(!r)return;let o=Ha(e);if(Lc(e).find(i=>Ha(i).collector_id===o.collector_id)){const i=o.collector_id;o={...o,collector_id:crypto.randomUUID()},r.value=ga(o),r.callback?.(r.value),e.__bvDetectorCollectorIdRemap={[i]:o.collector_id}}Dp(e),e.__bvRuntimeResourceProvider=!0,window.dispatchEvent(new CustomEvent(vi,{detail:{node:e}}))}function Cc(e){return Lc(e).map(t=>{const r=rr(t),o=Ha(t),n=o.detectors.map(i=>({id:i.id,label:i.id}));for(const i of t.inputs??[]){if(!String(i.name).startsWith("external_detector_")||i.link==null)continue;const a=sl(r,i.link),l=a&&r?.getNodeById?.(a.origin_id),c=String(Cn(l,"detector_id")?.value??"").trim();c&&!n.some(u=>u.id===c)&&n.push({id:c,label:c})}return{id:o.collector_id,label:`${String(t.title||Hx)} · #${t.id}`,resources:n}}).filter(t=>t.id)}function dR(e,t){let r=!1;const o=t.jobs.map(n=>({...n,detector_assignments:n.detector_assignments.map(i=>{const l=Array.from({length:Sc+1},(c,u)=>Ip(e,u)).find(c=>c?.__bvDetectorCollectorIdRemap?.[i.source.collector_id])?.__bvDetectorCollectorIdRemap?.[i.source.collector_id];return l?(r=!0,{...i,source:{...i.source,collector_id:l}}):i})}));return{config:r?{...t,jobs:o}:t,changed:r}}function Zx(e){const t=rr(e),r=Cn(e,"config_json");if(!r)return;let o=Xx(e),n=dR(e,o);o=n.config,n.changed&&(r.value=fa(o),r.callback?.(r.value));const i=Lc(e),a=Jx(e,o).map(c=>i.find(u=>Ha(u).collector_id===c)??null),l=Gx(e,a.length);a.forEach((c,u)=>{const d=l[u];if(Ip(e,u)!==c&&(e.inputs?.[d]?.link!=null&&e.disconnectInput?.(d),c&&rr(c)===t)){const p=Dp(c);c.connect?.(p,e,d)}});for(let c=a.length;c<=Sc;c++){const u=e.inputs?.findIndex(d=>d.name===Ap(c))??-1;u>=0&&e.inputs[u].link!=null&&e.disconnectInput?.(u)}qx(e,a.length),Rc(e),window.dispatchEvent(new CustomEvent(vi,{detail:{node:e}}))}function fR(e){e.__bvDetailerV3Scheduled||(e.__bvDetailerV3Scheduled=!0,setTimeout(()=>{e.__bvDetailerV3Scheduled=!1,Zx(e)},0))}function Kd(e,t){$a(e,t),fR(e);const r=Math.max(Jx(e,Xx(e)).length,Array.from({length:Sc+1},(o,n)=>Ip(e,n)).filter(Boolean).length);for(const o of Gx(e,r)){const n=e.inputs?.[o];n&&(n.hidden=!0,n.label="",n.__bvM0PortHidden=!0)}qx(e,r),Rc(e)}function pR(e){const t=rr(e),r=[e],o=new Set(r),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=sl(t,l),u=c&&t?.getNodeById?.(c.target_id);!u||rr(u)!==t||o.has(u)||(o.add(u),Mp(u)==="BV Regional Detailer Plan"&&n.push(u),(u.outputs??[]).some(d=>d.type==="BV_REGIONAL")&&r.push(u))}}return n}function gR(e,t){const r=[];for(let o=0;ol.name===n)??-1;i<0&&e.addInput&&(e.addInput(n,Vr),i=e.inputs?.findIndex(l=>l.name===n)??-1);const a=e.inputs?.[i];a&&(a.type=Vr,a.hidden=!0,a.label="",a.__bvResourceSlot=!0,a.__bvM0PortHidden=!0),r.push(i)}return r}function hR(e){const t=rr(e),r=is(Kx(e)),o=Lc(e),n=r.map(a=>o.find(l=>Ha(l).collector_id===a)??null),i=gR(e,n.length);n.forEach((a,l)=>{const c=i[l],u=e.inputs?.[c],d=sl(t,u?.link);(d&&t?.getNodeById?.(d.origin_id))!==a&&(u?.link!=null&&e.disconnectInput?.(c),a&&rr(a)===t&&a.connect?.(Dp(a),e,c))});for(let a=n.length;ac.name===Yx(a))??-1;l>=0&&e.inputs[l].link!=null&&e.disconnectInput?.(l),l>=0&&e.inputs[l].link==null&&e.removeInput?.(l)}for(const a of pR(e))Zx(a);Rc(e)}function Qx(e){!e||e.__bvDetailerPromptV3Scheduled||(e.__bvDetailerPromptV3Scheduled=!0,setTimeout(()=>{e.__bvDetailerPromptV3Scheduled=!1,hR(e)},0))}function Vh(e,t){$a(e,t),Qx(e)}const e_=(e,t)=>e?.widgets?.find(r=>r.name===t),bR=()=>({version:1,jobs:[]}),Wh=(e,t)=>da(e_(e,"detailer_v3_config_json")?.value,t,Cc(e));function vR(e,t){const r=t.filter(i=>i.enabled!==!1&&(i.usage==="detailer"||i.usage==="both")),o=new Map(e.jobs.filter(i=>i.region_ids.length===1).map(i=>[i.region_ids[0],i])),n=r.map(i=>o.get(i.id)??{id:crypto.randomUUID(),region_ids:[i.id],primary_region_id:i.id,mask_composition:"union",prompt_composition:"context",conditioning:Np(),detector_assignments:[]});return{...e,jobs:n}}function t_(e,t){const r=e_(e,"detailer_v3_config_json");if(!r)return t;const o=fa(t);return String(r.value??"")!==o&&(r.value=o,r.callback?.(o),e.setDirtyCanvas?.(!0,!0)),Qx(e),t}function mR({node:e,config:t,regionId:r,collectors:o,onConfig:n}){const i=t.jobs.find(l=>l.region_ids.length===1&&l.region_ids[0]===r),a=i?.detector_assignments[0];return i?s.jsx(Ri,{label:"Detailer detector",emptyLabel:"No detector · use composed region mask",collectors:o,collectorId:a?.source.collector_id??"",resourceId:a?.source.resource_id??"",onSelection:(l,c)=>{const u={...t,jobs:t.jobs.map(d=>d.id!==i.id?d:{...d,detector_assignments:l&&c?[{id:a?.id??crypto.randomUUID(),source:{collector_id:l,resource_id:c},options:a?.options??$x()}]:[]})};n(t_(e,u))}}):null}const Ko=e=>Ia(ct().rootGraph??ct().graph,e),$h=e=>e?.widgets?.find(t=>t.name==="regional_json"),Dl=e=>e?.widgets?.find(t=>t.name==="lora_bindings_json"),Hh=(e,t)=>e&&t?e.geometry.filter(r=>Ut(r)===t):[],Jo=PE,xu=(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 Yh(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 yR(e){const t=new Map(e.map(r=>[r.id,Dt()]));return qt(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,vx(r.geometry,Dt);const o=new Map;return r.geometry.forEach(n=>{const i=Ut(n);o.has(i)||o.set(i,Dt()),n.id=Dt(),n.layer_id=o.get(i)}),r})}function xR({open:e,activationToken:t=0,nodes:r,initialNode:o,backgrounds:n,loraStacks:i,onClose:a}){const[l,c]=v.useState(o),[u,d]=v.useState(null),[f,p]=v.useState(null),[g,m]=v.useState(null),[_,k]=v.useState([]),[b,h]=v.useState(null),[y,w]=v.useState(null),[x,T]=v.useState("select"),[L,U]=v.useState({size:.04,hardness:.75,opacity:1,shape:"round",pressureMode:"constant"}),[P,j]=v.useState(.5),[M,O]=v.useState(1),[E,B]=v.useState(!1),[C,S]=v.useState([]),[N,A]=v.useState([]),[F,z]=v.useState(null),[Z,Y]=v.useState(null),[q,Q]=v.useState(""),[H,ee]=v.useState(()=>xp()),[ie,le]=v.useState(0),[Oe,Ee]=v.useState([]),[ve,Bt]=v.useState(()=>Ec("")),[X,ue]=v.useState(()=>Bo(o)),[se,G]=v.useState(()=>bR()),[fe,pe]=v.useState(()=>o?Yd(o):null),ge=np(),ye=v.useRef(null),Qe=v.useRef(!1),He=v.useRef(t),Be=v.useRef(null),_e=v.useCallback(R=>ee(I=>{const W=I.artboard;return W.zoom===R.zoom&&W.panX===R.panX&&W.panY===R.panY&&W.fit===R.fit?I:{...I,artboard:R}}),[]),qe=v.useCallback(R=>ee(I=>I.openMenu===R?I:{...I,openMenu:R}),[]);v.useEffect(()=>{const R=Qe.current,I=He.current!==t;if(Qe.current=e,He.current=t,!e||!I)return;const W=o??r[0]??null,$=Ko(l),J=Ko(W);R&&$&&J!==$&&gi()==="keep"?Ee(de=>[...new Set([...de,$])].filter(Se=>Se!==J)):J&&Ee(de=>de.filter(Se=>Se!==J)),Be.current=R?{mode:H.mode,geometry:Ih(H,{width:window.innerWidth,height:window.innerHeight})}:null,c(W)},[t,o,r,e]),v.useEffect(()=>{h(null)},[l,e]),v.useEffect(()=>{if(!e||!l)return;const R=()=>ue(Bo(l));return window.addEventListener(fo,R),()=>window.removeEventListener(fo,R)},[l,e]),v.useEffect(()=>{if(!e||!l||!u)return;const R=()=>G(Wh(l,u.regions));return window.addEventListener(vi,R),()=>window.removeEventListener(vi,R)},[l,e,u]),v.useEffect(()=>{if(!(!e||!l))try{const R=Uo($h(l)?.value);R.regions=Oh(R.regions),Jo(R.regions);const I=_p(Dl(l)?.value,R.document_id),W=ti(I,new Set(R.regions.map(_r=>_r.id))),$=Dl(l);$&&JSON.stringify(I)!==JSON.stringify(W)&&($.value=JSON.stringify(W),$.callback?.($.value),l.graph?.setDirtyCanvas?.(!0,!0));const J=ns(R.document_id),de=R.regions.some(_r=>_r.id===J.selectedRegionId)?J.selectedRegionId:R.regions[0]?.id??null,Se=Be.current;Be.current=null,Se&&(J.mode=Se.mode,J.windows[Se.mode]=Se.geometry);const dt=R.regions.find(_r=>_r.id===de),Yt=dt&&jr(dt).some(_r=>_r.id===J.selectedLayerId)?J.selectedLayerId:null;ee(J),d(R),pe(Yd(l)),Bt(W),ue(Bo(l)),G(Wh(l,R.regions)),p(de),m(Yt),k(Yt?[Yt]:[]),w(Yt),T(J.tool),U(J.brush),j(J.displayOpacity),O(J.backgroundOpacity),B(J.isolate&&!!Yt),S([]),A([]),Q("")}catch(R){Q(R instanceof Error?R.message:String(R))}},[l,e]),v.useEffect(()=>{u&&Id(u.document_id,{...H,selectedRegionId:f,selectedLayerId:g,displayOpacity:P,backgroundOpacity:M,isolate:E,tool:x,brush:L})},[M,L,P,u,E,g,f,x,H]),v.useEffect(()=>{if(!l||!u)return;const R=vR(se,u.regions);JSON.stringify(R)!==JSON.stringify(se)&&G(t_(l,R))},[l,u?.regions,se]),v.useEffect(()=>{if(!e)return;const R=()=>ee(I=>({...I,windows:{workspace:_n(I.windows.workspace,{width:window.innerWidth,height:window.innerHeight},"workspace"),floating:_n(I.windows.floating,{width:window.innerWidth,height:window.innerHeight},"floating")}}));return window.addEventListener("resize",R),()=>window.removeEventListener("resize",R)},[e]);const me=u?.regions.find(R=>R.id===f)??null,Mt=Hh(me,g),ir=b?Mt.filter(R=>R.id===b):Mt,xt=me&&g?jr(me).find(R=>R.id===g)??null:null,Yo=me?jr(me).filter(R=>_.includes(R.id)):[],Xo=Yo.length>1&&Yo.every(R=>!R.authoring.locked),ar=!!xt&&!xt.authoring.locked,ut=R=>{m(R),k(R?[R]:[]),w(R),h(null)},ul=(R,I,W)=>{const $=u?.regions.find(Yt=>Yt.id===R);if(!$)return;const J=R===f,de=[...jr($)].reverse().map(Yt=>Yt.id),dt=iT(J?{ids:_,primary:g,anchor:y}:{ids:[],primary:null,anchor:null},I,de,W);p(R),k(dt.ids),m(dt.primary),w(dt.anchor),B(!1),h(null)},Ni=F&&g&&F.every(R=>Ut(R)===g)?ye.current&&"commit"in ye.current&&ye.current.commit==="subtract"?[...ir,...F]:F:ir,Oi=Ni.length&&u?kc(Ni,u.canvas):null,ho=v.useCallback((R,I=!0,W=ve)=>{if(!l)return;I&&u&&(S(Se=>[...Se.slice(-99),vu(u,ve)]),A([]));const $=ti(W,new Set(R.regions.map(Se=>Se.id)));d(R);const J=$h(l);J&&(J.value=JSON.stringify(R),J.callback?.(J.value)),Bt($);const de=Dl(l);de&&(de.value=JSON.stringify($),de.callback?.(de.value)),l.graph?.setDirtyCanvas?.(!0,!0)},[u,ve,l]),et=v.useCallback((R,I=!0)=>{if(!u)return;const W=qt(u);R(W),ho(W,I)},[u,ho]),Dc=(R,I)=>{if(!l||!u)return;const W={title:u.title,"canvas.width":String(u.canvas.width),"canvas.height":String(u.canvas.height),...fe?.raw??{},[R]:I},$=GT(u,W);pe($.draft),XT(l,$.draft),ho($.canonical)},Up=v.useCallback(R=>{if(!l)return;const I=u?ti(R,new Set(u.regions.map($=>$.id))):R;Bt(I);const W=Dl(l);W&&(W.value=JSON.stringify(I),W.callback?.(W.value)),l.graph?.setDirtyCanvas?.(!0,!0)},[u,l]),m_=R=>Up({...ve,global_stack_id:R}),y_=(R,I)=>{const W={...ve.regions};I?W[R]=I:delete W[R],Up({...ve,regions:W})},x_=R=>et(I=>{const W=I.regions.find($=>$.id===f);W&&R(W)}),Go=(R,I)=>et(W=>{const $=W.regions.find(J=>J.id===f);$&&I(Hh($,R),$)}),xr=v.useCallback(()=>{ye.current=null,z(null)},[]),dl=v.useCallback(()=>{if(ye.current?.mode!=="draw-polygon"||!F?.length)return;const R=F.map(I=>I.type==="polygon"?{...I,points:I.points.filter((W,$,J)=>$===0||Math.hypot(W.x-J[$-1].x,W.y-J[$-1].y)>.001)}:I);if(R.some(I=>I.type!=="polygon"||I.points.length<3))return xr();et(I=>{const W=I.regions.find($=>$.id===f);W&&W.geometry.push(...R)}),xr()},[xr,F,et,f]),Ic=v.useCallback(()=>{if(!u||!C.length)return;const R=C[C.length-1];S(C.slice(0,-1)),A([vu(u,ve),...N]),ho(qt(R.document),!1,qt(R.loraBindings))},[u,N,C,ve,ho]),jc=v.useCallback(()=>{if(!u||!N.length)return;const R=N[0];A(N.slice(1)),S([...C,vu(u,ve)]),ho(qt(R.document),!1,qt(R.loraBindings))},[u,N,C,ve,ho]),Pc=R=>{Go(R,(I,W)=>{W.geometry=W.geometry.filter($=>Ut($)!==R)}),_.includes(R)&&ut(null)},__=R=>et(I=>{const W=I.regions.find(J=>J.id===f),$=W?.geometry.find(J=>J.id===R);$&&($.enabled=$.enabled===!1)}),w_=R=>{const I=u?.regions.find(W=>W.id===f);if(!I||!Rd(I.geometry,R)){Ct({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}et(W=>{const $=W.regions.find(J=>J.id===f);$&&($.geometry=$.geometry.filter(J=>J.id!==R))}),b===R&&h(null)},Vp=()=>{if(!f||!g||!Xo)return;const R=g;et(I=>{const W=I.regions.find($=>$.id===f);W&&aT(W,_,R)}),ut(R)},k_=async()=>{if(!(!u||!f||!g||!xt||!ar))try{const R=await hT(xt.geometries,u.canvas,Dt);if(R.length<2){Ct({title:"Layer was not split",message:"The selected layer contains fewer than two disconnected visible areas.",tone:"info",duration:4500});return}et(W=>{const $=W.regions.find(de=>de.id===f);if(!$)return;const J=$.geometry.findIndex(de=>Ut(de)===g);$.geometry=$.geometry.filter(de=>Ut(de)!==g),$.geometry.splice(Math.max(0,J),0,...R)});const I=R.map(W=>Ut(W));k(I),m(I[0]),w(I[0])}catch(R){Ct({title:"Split failed",message:String(R),tone:"danger",duration:6e3})}};v.useEffect(()=>{if(!e)return;const R=I=>{if(I.key==="Escape"&&ye.current){I.preventDefault(),I.stopImmediatePropagation(),xr();return}if(I.key==="Enter"&&ye.current?.mode==="draw-polygon"){I.preventDefault(),I.stopImmediatePropagation(),dl();return}if((I.ctrlKey||I.metaKey)&&I.key.toLowerCase()==="e"&&Xo){I.preventDefault(),I.stopImmediatePropagation(),Vp();return}if((I.key==="Delete"||I.key==="Backspace")&&g&&!(I.target instanceof HTMLInputElement||I.target instanceof HTMLTextAreaElement)){I.preventDefault(),I.stopImmediatePropagation(),Pc(g);return}!(I.ctrlKey||I.metaKey)||I.key.toLowerCase()!=="z"||(I.preventDefault(),I.stopImmediatePropagation(),I.shiftKey?jc():Ic())};return window.addEventListener("keydown",R,!0),()=>window.removeEventListener("keydown",R,!0)},[xr,Xo,Pc,dl,e,jc,g,_,Ic]);const E_=R=>{if(!u||!me||me.authoring.locked)return;const I=xu(R,L.pressureMode),W=R.target.closest?.("[data-handle]")?.getAttribute("data-handle");if(x==="select"){if(R.currentTarget.setPointerCapture(R.pointerId),z(null),W&&xt&&!xt.authoring.locked){ye.current={mode:"resize",start:I,original:qt(ir),handle:W};return}const lr=[...jr(me)].reverse().find(Xt=>Xt.enabled&&Xt.authoring.visible&&Xt.geometries.filter(Mr=>Mr.operation==="add").some(Mr=>eT(Mr,I,u.canvas)));ut(lr?.id??null),lr&&!lr.authoring.locked&&(ye.current={mode:"move",start:I,startScreen:{x:R.clientX,y:R.clientY},original:qt(lr.geometries),started:!1});return}const $=x.endsWith("subtract");if($&&(!g||xt?.authoring.locked))return;if(x.startsWith("polygon")&&ye.current?.mode==="draw-polygon"){const lr=F?.find(Xt=>Xt.type==="polygon")?.points.length??0;if(IE(lr,ye.current.startScreen,{x:R.clientX,y:R.clientY})){dl();return}z(Xt=>Xt?.map(Mr=>Mr.type==="polygon"?{...Mr,points:[...Mr.points,I]}:Mr)??null);return}const J=Dt(),de=$?null:AE(xt),Se=$?g:de??J,dt=x.startsWith("rect")?"Rectangle":x.startsWith("ellipse")?"Ellipse":x.startsWith("polygon")?"Polygon":"Brush",Yt=$||de?xt?.authoring:{name:`${dt} ${jr(me).length+1}`,visible:!0,locked:!1},_r=$?[...new Set(ir.map(ol))]:[void 0];if(x.startsWith("rect")||x.startsWith("ellipse")){R.currentTarget.setPointerCapture(R.pointerId);const lr=x.startsWith("rect")?"rect":"ellipse";z(_r.map((Xt,Mr)=>({id:Mr?Dt():J,layer_id:Se,mask_group_id:Xt,type:lr,operation:$?"subtract":"add",enabled:!0,authoring:Yt,x:I.x,y:I.y,width:.001,height:.001}))),ye.current={mode:"draw-box",start:I,commit:$?"subtract":"add"},$||ut(Se)}else x.startsWith("polygon")?(z(_r.map((lr,Xt)=>({id:Xt?Dt():J,layer_id:Se,mask_group_id:lr,type:"polygon",operation:$?"subtract":"add",enabled:!0,authoring:Yt,points:[I]}))),ye.current={mode:"draw-polygon",start:I,startScreen:{x:R.clientX,y:R.clientY},commit:$?"subtract":"add"},$||ut(Se)):(R.currentTarget.setPointerCapture(R.pointerId),z(_r.map((lr,Xt)=>({id:Xt?Dt():J,layer_id:Se,mask_group_id:lr,type:"brush_stroke",operation:x==="brush-add"?"add":"subtract",enabled:!0,authoring:Yt,size:L.size,hardness:L.hardness,opacity:L.opacity,shape:L.shape,pressure_mode:L.pressureMode,points:[I]}))),ye.current={mode:"draw-brush",start:I,commit:x==="brush-add"?"add":"subtract"},x==="brush-add"&&ut(Se))},T_=R=>{if(!u)return;const I=xu(R,L.pressureMode);Y(I);const W=ye.current;if(W)if(W.mode==="draw-box"&&(F?.[0]?.type==="rect"||F?.[0]?.type==="ellipse"))z(F.map($=>$.type==="rect"||$.type==="ellipse"?{...$,x:Math.min(W.start.x,I.x),y:Math.min(W.start.y,I.y),width:Math.max(.001,Math.abs(I.x-W.start.x)),height:Math.max(.001,Math.abs(I.y-W.start.y))}:$));else if(W.mode==="draw-brush"&&F?.[0]?.type==="brush_stroke")z(F.map($=>$.type==="brush_stroke"?{...$,points:[...$.points,I]}:$));else if(W.mode==="move"){if(!W.started&&!DE(W.startScreen,{x:R.clientX,y:R.clientY}))return;W.started=!0,z(Ah(W.original,I.x-W.start.x,I.y-W.start.y,u.canvas))}else W.mode==="resize"&&z(tT(W.original,W.handle,I.x-W.start.x,I.y-W.start.y,R.shiftKey,u.canvas))},R_=R=>{if(!u||!ye.current||!F)return xr();const I=ye.current,W=xu(R,L.pressureMode);if(I.mode==="draw-polygon")return;let $=BE(I.mode)?F.map(J=>J.type==="brush_stroke"?{...J,points:oT([...J.points,W])}:J):F;if(I.mode==="draw-box"&&($[0].type==="rect"||$[0].type==="ellipse")&&($[0].width<=.002||$[0].height<=.002))return xr();et(J=>{const de=J.regions.find(Se=>Se.id===f);if(de)if(I.mode.startsWith("draw"))de.geometry.push(...$);else{const Se=new Map($.map(dt=>[dt.id,dt]));de.geometry=de.geometry.map(dt=>Se.get(dt.id)??dt)}}),xr()},S_=R=>{ye.current?.mode==="draw-polygon"&&(R.preventDefault(),dl())},L_=(R,I)=>et(W=>{const $=W.regions.findIndex(de=>de.id===R),J=$+I;J<0||J>=W.regions.length||([W.regions[$],W.regions[J]]=[W.regions[J],W.regions[$]],Jo(W.regions))}),C_=(R,I)=>Go(R,(W,$)=>{const J=jr($),de=J.findIndex(dt=>dt.id===R),Se=de+I;Se<0||Se>=J.length||([J[de],J[Se]]=[J[Se],J[de]],$.geometry=J.flatMap(dt=>dt.geometries))}),N_=R=>{let I=!1,W=null;if(et(J=>{I=_T(J,R,()=>W=Dt()),Jo(J.regions)}),!I)return;if(p(R.target.regionId),R.source.kind==="region"){ut(null);return}const $=R.source.kind==="layer"?R.source.layerId:R.target.kind==="region"?W:R.target.layerId;m($),k($?[$]:[]),w($),h(R.source.kind==="geometry"?R.source.geometryId:null),B(!1)},O_=(R,I)=>Go(R,W=>{if(W.length)if(I==="enabled"){const $=!W.some(J=>J.enabled!==!1);W.forEach(J=>{J.enabled=$})}else{const $=!fr(W[0])[I];W.forEach(J=>{J.authoring={...fr(J),[I]:$}})}}),M_=R=>Go(R,(I,W)=>{const $=Dt(),J=Ah(qt(I),.02,.02,u.canvas);vx(J,Dt),J.forEach((de,Se)=>{de.id=Dt(),de.layer_id=$,de.authoring={...fr(de),name:`${fr(de).name} Copy`,visible:!0,locked:!1},Se&&(de.authoring=J[0].authoring)}),W.geometry.push(...J),ut($)}),A_=R=>{const I=u?.regions.find(W=>W.id===R);I&&ge.confirm({title:`Delete region “${I.name}”?`,message:`This removes ${jr(I).length} layer(s) and clears child-region parent references.`,confirmLabel:"Delete region",danger:!0,action:()=>{et(W=>{W.regions=W.regions.filter($=>$.id!==R),W.regions.forEach($=>{$.parent_region_id===R&&($.parent_region_id=null)}),Jo(W.regions)}),p(u?.regions.find(W=>W.id!==R)?.id??null),ut(null)}})},D_=async R=>{try{if(!u)return;const I=lk(Uo(await R.text()),u.document_id);I.regions=Oh(I.regions),Jo(I.regions),ho(I),p(I.regions[0]?.id??null),ut(null)}catch(I){Ct({title:"Document import failed",message:String(I),tone:"danger",duration:6e3})}},I_=async R=>{try{const I=JSON.parse(await R.text());if(I?.schema!=="bv.regions"||![1,2].includes(I?.version)||!Array.isArray(I.regions))throw new Error("Not a BV Regions v1/v2 export");const W=I.version===1?I.regions.map($=>({...$,usage:"generation"})):I.regions;et($=>{$.regions.push(...yR(W)),Jo($.regions)})}catch(I){Ct({title:"Region import failed",message:String(I),tone:"danger",duration:6e3})}},j_=Si(l);if(!e)return null;const Wp=Ih(H,{width:window.innerWidth,height:window.innerHeight}),$p=(R,I,W=!0)=>{const $=Ko(l);Rr("regional",R),R!==$&&(Ee(J=>I?J.filter(de=>de!==R):[...new Set([...J,$])].filter(de=>de&&de!==R)),W&&(Be.current={mode:H.mode,geometry:Wp}),c(r.find(J=>Ko(J)===R)??null))},P_=u?vT(ve,i,new Set(u.regions.map(R=>R.id))):[],Hp=X.entries.length&&(!l||!Uh(l,X))?["V3 LoRA collector link is unresolved"]:P_,B_=X.entries.length?`${X.entries.length} V3 LoRA assignment${X.entries.length===1?"":"s"}`:u?mT(ve,i,Object.fromEntries(u.regions.map(R=>[R.id,R.name]))):"",z_=l?al(l).filter(R=>R.resources.length>0):[];l&&Uh(l,X);const Yp={collectors:z_,config:X,resolved:R=>!!l&&Ux(l,X,R),onSelection:(R,I,W)=>l&&ue(Vx(l,X,R,I,W)),onAdd:R=>l&&ue(ZT(l,X,R)),onRemove:(R,I)=>l&&ue(QT(l,X,R,I)),onClear:R=>l&&ue(eR(l,X,R))},Bc=R=>fe?.issues.find(I=>I.field===R)?.message,F_=u?s.jsxs("div",{className:"bv-ui-stack","data-bv-regional-section":"document",children:[s.jsx("div",{"data-bv-regional-field":"title",children:s.jsx(Hr,{label:"Title",value:String(fe?.raw.title??u.title),error:Bc("title"),onValue:R=>Dc("title",R)})}),s.jsx("div",{"data-bv-regional-field":"canvas.width",children:s.jsx(Hr,{label:"Canvas width",value:String(fe?.raw["canvas.width"]??u.canvas.width),error:Bc("canvas.width"),onValue:R=>Dc("canvas.width",R)})}),s.jsx("div",{"data-bv-regional-field":"canvas.height",children:s.jsx(Hr,{label:"Canvas height",value:String(fe?.raw["canvas.height"]??u.canvas.height),error:Bc("canvas.height"),onValue:R=>Dc("canvas.height",R)})})]}):null,zc=R=>u?s.jsx(ZE,{mode:R,region:me,layer:xt,bounds:Oi,canvas:u.canvas,automaticRegionColor:me?$m(u.regions.indexOf(me)):null,globalPrompts:u.prompts.global,backgroundPrompts:u.prompts.background,negativeMode:u.negative_mode,promptSections:H.promptSections,loraBindings:ve,loraStacks:i,loraV3GlobalEditor:s.jsx(jh,{...Yp,target:{scope:"global"}}),loraV3RegionEditor:me?s.jsx(jh,{...Yp,target:{scope:"region",document_id:u.document_id,region_id:me.id}},me.id):null,detailerEasyRegionEditor:me&&(me.usage==="detailer"||me.usage==="both")?s.jsx(mR,{node:l,config:se,regionId:me.id,collectors:l?Cc(l):[],onConfig:G}):null,onGlobalLoraStack:m_,onRegionLoraStack:y_,onPromptSection:(I,W)=>ee($=>({...$,promptSections:{...$.promptSections,[I]:W}})),onNegativeMode:I=>et(W=>{W.negative_mode=I}),onGlobalPrompts:I=>et(W=>{W.prompts.global=I}),onBackgroundPrompts:I=>et(W=>{W.prompts.background=I}),onRegion:x_,onLayerBounds:I=>g&&Go(g,(W,$)=>{const J=new Map(bx(W,I,u.canvas).map(de=>[de.id,de]));$.geometry=$.geometry.map(de=>J.get(de.id)??de)}),onBrushSetting:(I,W)=>g&&Go(g,$=>$.forEach(J=>{J.type==="brush_stroke"&&Object.assign(J,{[I]:W})}))}):null;return s.jsxs(s.Fragment,{children:[Oe.map(R=>{const I=r.find(W=>Ko(W)===R);return I?s.jsx(wc,{title:`Regional Editor · ${I.title||"BV Regional Prompt"} · #${I.id}`,onRestore:()=>$p(R,!1,!1),onClose:()=>Ee(W=>W.filter($=>$!==R))},R):null}),s.jsx(Ln,{open:e,activationToken:t,title:"BV Regional Editor",menuVisible:j_,onMenuVisible:R=>Sn(l,R),context:s.jsx(il,{label:"Regional prompt document",value:Ko(l),onNavigate:$p,options:r.filter(R=>Rn(R)).map(R=>({value:Ko(R),label:`${R.title||"BV Regional Prompt"} · #${R.id}`}))}),center:s.jsx(GE,{openMenu:H.openMenu,onOpenMenu:qe,displayOpacity:P,backgroundOpacity:M,isolate:E,binaryMaskPreview:H.binaryMaskPreview,hasSelection:!!g,onDisplayOpacity:j,onBackgroundOpacity:O,onToggleIsolate:()=>B(R=>!R),onToggleBinaryMaskPreview:()=>{xr(),ee(R=>({...R,binaryMaskPreview:!R.binaryMaskPreview}))},onExportDocument:()=>u&&Yh(`${u.title||"bv-regional"}.json`,u),onExportRegions:()=>u&&Yh(`${u.title||"bv-regions"}.regions.json`,{schema:"bv.regions",version:2,canvas:u.canvas,regions:u.regions}),onImportDocument:D_,onImportRegions:I_,onUndo:Ic,onRedo:jc,canUndo:!!C.length,canRedo:!!N.length,canvas:u?.canvas??{width:1024,height:1024},onCanvas:R=>et(I=>{I.canvas=R})}),mode:H.mode,initialGeometry:Wp,minSize:{width:780,height:520},className:"bv-regional-shell",bodyClassName:"bv-regional-window-body",onModeChange:R=>ee(I=>({...I,mode:R})),onGeometry:R=>ee(I=>({...I,windows:{...I.windows,floating:R}})),onClose:a,status:u?s.jsxs(s.Fragment,{children:[s.jsx("span",{children:Hp[0]?`⚠ ${Hp[0]}`:`✓ ${B_}`}),s.jsxs("span",{children:[u.regions.length," regions · layout adjusted for this session"]})]}):null,actions:u?s.jsx($y,{storageId:`regional-editor:${u.document_id}`,editorType:"regional",signature:"regional:v2:bv.regional.regions,bv.regional.selection,bv.regional.canvas,bv.regional.global,bv.regional.region,bv.regional.document",onClick:()=>le(R=>R+1)}):null,children:q?s.jsx("div",{className:"bv-regional-error",children:q}):u&&s.jsx(s.Fragment,{children:s.jsx("main",{className:"bv-regional-dock-host",children:s.jsx(Fy,{storageId:`regional-editor:${u.document_id}`,resetSignal:ie,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:"bv.regional.regions",name:"Regions",component:"regions",enablePopoutFloatIcon:!0}]},{type:"tabset",weight:45,children:[{type:"tab",id:"bv.regional.selection",name:"Selection",component:"selection",enablePopoutFloatIcon:!0}]}]},{type:"tabset",weight:54,minWidth:320,children:[{type:"tab",id:"bv.regional.canvas",name:"Canvas",component:"canvas",enablePopoutFloatIcon:!0}]},{type:"row",weight:24,minWidth:260,children:[{type:"tabset",weight:75,selected:0,children:[{type:"tab",id:"bv.regional.global",name:"Global",component:"global",enablePopoutFloatIcon:!0},{type:"tab",id:"bv.regional.document",name:"Document",component:"document",enablePopoutFloatIcon:!0}]},{type:"tabset",weight:25,children:[{type:"tab",id:"bv.regional.region",name:"Region",component:"region",enablePopoutFloatIcon:!0}]}]}]}},panels:[{id:"regions",layoutId:"bv.regional.regions",title:"Regions",weight:22,minWidth:220,content:s.jsx(ck,{regions:u.regions,selectedRegionId:f,selectedLayerId:g,selectedLayerIds:_,selectedGeometryId:b,onSelectRegion:R=>{p(R),ut(null),B(!1)},onSelectLayer:ul,onSelectGeometry:(R,I,W)=>{p(R),m(I),k([I]),w(I),h(W),B(!1)},onToggleGeometry:__,onDeleteGeometry:w_,onAddRegion:()=>et(R=>{const I=ak(R.regions.length);R.regions.unshift(I),Jo(R.regions),p(I.id),ut(null)}),onRenameRegion:(R,I)=>et(W=>{W.regions.find($=>$.id===R).name=I}),onRenameLayer:(R,I)=>Go(R,W=>W.forEach($=>{$.authoring={...fr($),name:I}})),onToggleRegion:(R,I)=>et(W=>{const $=W.regions.find(J=>J.id===R);I==="enabled"?$.enabled=!$.enabled:I==="visible"?$.authoring.visible=!$.authoring.visible:$.authoring.locked=!$.authoring.locked}),onToggleLayer:O_,onMoveRegion:L_,onMoveLayer:C_,onTreeMove:N_,onDeleteRegion:A_,onDeleteLayer:Pc,onDuplicateLayer:M_,canSplitDisconnectedAreas:ar,onSplitDisconnectedAreas:k_,canMergeLayers:Xo,onMergeLayers:Vp})},{id:"canvas",layoutId:"bv.regional.canvas",title:"Canvas",weight:54,minWidth:320,content:s.jsx(WE,{document:u,background:n[u.document_id],selectedRegionId:f,selectedLayerId:g,draft:F,selectionBounds:Oi,cursor:Z,tool:x,brush:L,canSubtract:!!xt&&!xt.authoring.locked,displayOpacity:P,backgroundOpacity:M,isolate:E,binaryMaskPreview:H.binaryMaskPreview,initialView:H.artboard,onView:_e,onTool:R=>{T(R),xr()},onBrush:U,onPointerDown:E_,onPointerMove:T_,onPointerUp:R_,onPointerCancel:xr,onPointerLeave:()=>{ye.current||Y(null)},onDoubleClick:S_},u.document_id)},{id:"global",layoutId:"bv.regional.global",title:"Global",weight:12,minWidth:240,content:zc("document")},{id:"selection",layoutId:"bv.regional.selection",title:"Selection",weight:12,minWidth:240,content:zc("selection")},{id:"region",layoutId:"bv.regional.region",title:"Region",weight:12,minWidth:240,content:zc("region")},{id:"document",layoutId:"bv.regional.document",title:"Document",weight:12,minWidth:240,content:F_}]})})})}),ge.dialog]})}const Zo=e=>Ia(ct().rootGraph??ct().graph,e),Xh=e=>e?.widgets?.find(t=>t.name==="regional_json"),_u=e=>e?.widgets?.find(t=>t.name==="lora_bindings_json"),_R=(e,t)=>t==="global"||t==="background"||e.regions.some(r=>r.id===t),wR=(e,t)=>t==="global"?e.prompts.global:t==="background"?e.prompts.background:e.regions.find(r=>r.id===t)?.prompts??e.prompts.global;function kR({open:e,activationToken:t=0,nodes:r,initialNode:o,loraStacks:n,onClose:i,onOpenEditor:a}){const[l,c]=v.useState(o),[u,d]=v.useState(null),[f,p]=v.useState(()=>Ec("")),[g,m]=v.useState("global"),[_,k]=v.useState(()=>Vs({x:window.innerWidth-544,y:84,width:520,height:640},{width:window.innerWidth,height:window.innerHeight})),[b,h]=v.useState(""),[y,w]=v.useState([]),x=v.useRef(null),T=v.useRef(!1),L=v.useRef(t);v.useEffect(()=>{const S=T.current,N=L.current!==t;if(T.current=e,L.current=t,!e||!N)return;const A=o??r[0]??null,F=Zo(l),z=Zo(A);S&&F&&z!==F&&gi()==="keep"?w(Z=>[...new Set([...Z,F])].filter(Y=>Y!==z)):z&&w(Z=>Z.filter(Y=>Y!==z)),x.current=S?_:null,c(A)},[t,o,r,e]),v.useEffect(()=>{if(l)try{const S=Uo(Xh(l)?.value),N=_p(_u(l)?.value,S.document_id),A=ti(N,new Set(S.regions.map(Y=>Y.id))),F=_u(l);F&&JSON.stringify(N)!==JSON.stringify(A)&&(F.value=JSON.stringify(A),F.callback?.(F.value),l.graph?.setDirtyCanvas?.(!0,!0));const z=ns(S.document_id),Z=_R(S,z.quickPromptTarget)?z.quickPromptTarget:"global";d(S),p(A),m(Z),k(x.current??z.quickPromptWindow),x.current=null,h("")}catch(S){d(null),h(S instanceof Error?S.message:String(S))}},[l,e]);const U=v.useMemo(()=>u?wR(u,g):null,[u,g]),P=S=>{if(m(S),!u)return;const N=ns(u.document_id);Id(u.document_id,{...N,quickPromptTarget:S})},j=S=>{if(!u)return;const N=ns(u.document_id);Id(u.document_id,{...N,quickPromptWindow:S})},M=S=>{if(!u||!l)return;const N=qt(u);if(g==="global")N.prompts.global=S;else if(g==="background")N.prompts.background=S;else{const F=N.regions.find(z=>z.id===g);if(!F)return;F.prompts=S}d(N);const A=Xh(l);A&&(A.value=JSON.stringify(N),A.callback?.(A.value)),l.graph?.setDirtyCanvas?.(!0,!0)},O=S=>{if(!u||!l)return;let N;if(g==="global"||g==="background")N={...f,global_stack_id:S};else{const F={...f.regions};S?F[g]=S:delete F[g],N={...f,regions:F}}p(N);const A=_u(l);A&&(A.value=JSON.stringify(N),A.callback?.(A.value)),l.graph?.setDirtyCanvas?.(!0,!0)},E=g==="global"||g==="background"?f.global_stack_id??"":f.regions[g]??"",B=(S,N,A=!0)=>{const F=Zo(l);Rr("quick",S),S!==F&&(w(z=>N?z.filter(Z=>Z!==S):[...new Set([...z,F])].filter(Z=>Z&&Z!==S)),x.current=A?_:null,c(r.find(z=>Zo(z)===S)??null))},C=Si(l);return s.jsxs(s.Fragment,{children:[y.map(S=>{const N=r.find(A=>Zo(A)===S);return N?s.jsx(wc,{title:`Quick Edit · ${N.title||"BV Regional Prompt"} · #${N.id}`,onRestore:()=>B(S,!1,!1),onClose:()=>w(A=>A.filter(F=>F!==S))},S):null}),s.jsx(Ln,{open:e,activationToken:t,title:"Regional Quick Edit",menuVisible:C,onMenuVisible:S=>Sn(l,S),context:s.jsx(il,{label:"Regional Prompt Node",value:Zo(l),options:r.filter(S=>Rn(S)).map(S=>({value:Zo(S),label:`${S.title||"BV Regional Prompt"} · #${S.id}`})),onNavigate:B}),allowWorkspace:!1,initialGeometry:_,minSize:{width:360,height:320},className:"bv-quick-prompt-window bv-density-compact",onClose:i,onGeometry:S=>{const N=Vs(S,{width:window.innerWidth,height:window.innerHeight});k(N),j(N)},status:s.jsx(Om,{tone:"success",dot:!0,children:"Autosaved"}),actions:s.jsx(ne,{intent:"primary",disabled:!l||!u,onClick:()=>l&&a(l),children:"Open Full Editor"}),children:s.jsx("div",{className:"bv-quick-prompt-body",children:b?s.jsx(Nr,{tone:"danger",title:"Prompt document unavailable",children:b}):u&&U&&s.jsxs(s.Fragment,{children:[s.jsx(at,{label:"Prompt Target",value:g,onValue:P,options:[{value:"global",label:"Global"},{value:"background",label:"Background"},...u.regions.map(S=>({value:S.id,label:S.name}))]}),s.jsx(at,{label:g==="global"||g==="background"?"Global LoRA Stack":"Additional LoRA Stack",help:g==="global"||g==="background"?"Applied globally and inherited by every region.":"Added to the global stack for this region.",value:E,onValue:S=>O(S||null),options:[{value:"",label:"None"},...n.map(S=>({value:S.id,label:S.name}))]}),s.jsxs("div",{className:"bv-prompt-editor-fields",children:[s.jsx(Or,{label:"Positive",children:s.jsx(Us,{autoFocus:!0,value:U.positive_source,onValue:S=>M({...U,positive_source:S}),completionContext:{scope:g==="global"||g==="background"?g:"region",polarity:"positive"}})}),s.jsx(Or,{label:"Negative",children:s.jsx(Us,{value:U.negative_source,onValue:S=>M({...U,negative_source:S}),completionContext:{scope:g==="global"||g==="background"?g:"region",polarity:"negative"}})})]})]})})})]})}function r_(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 ER(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 TR(e,t,r){const o=typeof e=="string"?e:"";return t.some(n=>n.documentId===o)?o:r?t[0]?.documentId??"":""}function RR(e,t,r){sx(r);const o=document.createElement("div");o.className="bv-ui bv-settings-datasets";const n=Ei(o),i=cx;return n.render(v.createElement(i,{onSelectionChange:a=>t(JSON.stringify(a))})),o}const Ro=new Map;let Vi=null;function SR(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 Gh(e){if(Ro.has(e)||!SR(e))return;let t=[],r=0,o=null,n=null,i=null,a=null,l=null,c=210;const u=()=>{n?.abort(),n=null,t=[],o=null,l?.unmount(),l=null,a?.remove(),a=null},d=()=>{if(!a)return;const h=Fs(e,Dd(),c);f(h)},f=(h=Fs(e,Dd(),c))=>{a||(a=document.createElement("div"),a.className="bv-ui bv-ui-portal",document.body.append(a),l=Ei(a)),l.render(v.createElement(gx,{suggestions:t,selected:r,position:h,onAccept:g,onHeight:y=>{Math.abs(y-c)<1||(c=y,d())}}))},p=()=>f(),g=(h=r)=>{const y=t[h];if(!o||!y)return;const w=dx(e.value,o,y);e.value=w.text,e.dispatchEvent(new InputEvent("input",{bubbles:!0,inputType:"insertText",data:y.insertText})),e.dispatchEvent(new Event("change",{bubbles:!0})),u(),requestAnimationFrame(()=>{e.focus(),e.setSelectionRange(w.caret,w.caret)})},m=()=>{if(!yp()||e.selectionStart!==e.selectionEnd||(i!=null&&window.clearTimeout(i),n?.abort(),o=ux(e.value,e.selectionStart??e.value.length,{scope:"generic",polarity:"positive"}),!o))return u();const h=o;n=new AbortController;const y=n;i=window.setTimeout(async()=>{const w=await fx(h,[px],y.signal);y.signal.aborted||document.activeElement!==e||(t=w,r=0,w.length?p():u())},120)},_=h=>{t.length&&(h.key==="ArrowDown"||h.key==="ArrowUp"?(h.preventDefault(),h.stopPropagation(),h.stopImmediatePropagation(),r=(r+(h.key==="ArrowDown"?1:-1)+t.length)%t.length,p()):h.key==="Enter"||h.key==="Tab"?(h.preventDefault(),h.stopPropagation(),h.stopImmediatePropagation(),g()):h.key==="Escape"&&(h.preventDefault(),h.stopPropagation(),h.stopImmediatePropagation(),u()))},k=()=>window.setTimeout(()=>{a?.contains(document.activeElement)||u()},120),b=()=>{document.activeElement===e&&m()};e.addEventListener("input",m),e.addEventListener("select",m),document.addEventListener("selectionchange",b),e.addEventListener("keydown",_,!0),e.addEventListener("blur",k),window.addEventListener("resize",d),window.addEventListener("scroll",d,!0),Ro.set(e,{close:u,destroy:()=>{u(),e.removeEventListener("input",m),e.removeEventListener("select",m),document.removeEventListener("selectionchange",b),e.removeEventListener("keydown",_,!0),e.removeEventListener("blur",k),window.removeEventListener("resize",d),window.removeEventListener("scroll",d,!0)}})}function qh(e){e instanceof HTMLTextAreaElement&&Gh(e),e.querySelectorAll?.("textarea").forEach(t=>Gh(t))}function LR(e){(e instanceof HTMLTextAreaElement?[e]:[...e.querySelectorAll?.("textarea")??[]]).forEach(r=>{Ro.get(r)?.destroy(),Ro.delete(r)})}function CR(){if(Vi)return Vi;qh(document);const e=new MutationObserver(o=>o.forEach(n=>{n.addedNodes.forEach(i=>{i instanceof Element&&qh(i)}),n.removedNodes.forEach(i=>{i instanceof Element&&LR(i)})}));e.observe(document.body,{childList:!0,subtree:!0});const t=()=>{yp()||Ro.forEach(o=>o.close())},r=()=>Ro.forEach(o=>o.close());return window.addEventListener(Fa,t),window.addEventListener(Ua,r),Vi=()=>{e.disconnect(),window.removeEventListener(Fa,t),window.removeEventListener(Ua,r),Ro.forEach(o=>o.destroy()),Ro.clear(),Vi=null},Vi}function ha(e){const t=e?.extensionManager?.workflow?.activeWorkflow??e?.workflowManager?.activeWorkflow??null;if(t&&typeof t=="object"){for(const r of["key","id","workflowId","workflow_id","uuid","path"]){const o=t[r];if(o!=null&&String(o))return`${r}:${String(o)}`}return t}return e?.canvas?.graph??e?.graph??t}function NR(e,t,r,o=(a,l)=>globalThis.setInterval(a,l),n=a=>globalThis.clearInterval(a),i=ha(e)){let a=!1;const l=()=>{a||ha(e)===i||(a=!0,r())};t.addEventListener("graphChanged",l);const c=o(l,250);return()=>{t.removeEventListener("graphChanged",l),n(c)}}const o_=["region","global_influence","background_influence","primary_region_influence","context_regions_json"],OR=e=>o_.map(t=>e?.find(r=>r.name===t)?.value),MR=e=>Array.isArray(e)&&e.length===o_.length+1&&e[3]==null&&typeof e[4]=="number"&&typeof e[5]=="string"?[...e.slice(0,3),...e.slice(4)]:e,AR=new Set(["BV Regional LoRA"]),DR=e=>String(e?.comfyClass??e?.type??""),IR=(e,t)=>t==null?null:e?.links?.[t]??e?._links?.get?.(t);function jR(e,t=null){let r=e,o=e?.__bvConcreteGraph??e?.graph??t;const n=new Set;for(;r&&!n.has(r);){n.add(r),o=r.__bvConcreteGraph??r.graph??o;const i=r.inputs?.find(u=>u.name==="regional"||u.name==="regional_prompt"),a=IR(o,i?.link),l=a?o?.getNodeById?.(a.origin_id):null,c=DR(l);if(c==="BV Regional Prompt"){const u=l.widgets?.find(d=>d.name==="regional_json")?.value;try{return Uo(u)}catch{return null}}if(!AR.has(c))return null;r=l}return null}const PR=e=>structuredClone(e);function BR({regions:e,collectors:t=[],stored:r,save:o,close:n,nodeId:i="",nodes:a=[],onNavigate:l=()=>{},currentNode:c}){const[u,d]=v.useState(t);v.useEffect(()=>{const E=()=>d(Cc(c));return window.addEventListener(vi,E),()=>window.removeEventListener(vi,E)},[c]),t=u;const f=Op(e),p=v.useMemo(()=>da(r,e,t),[e,r,t]),g=vc(p),m=g.value,[_,k]=v.useState(()=>fa(p));mc(g);const b=fa(m)!==_,[h,y]=v.useState(null),w=()=>{const E=fa(m);o(E),k(E),g.clear()},x=E=>b?y(()=>E):E(),T=()=>x(n),L=Si(c),[U,P]=v.useState([]),j=E=>g.commit(B=>{const C=PR(B);return E(C),C}),M=()=>j(E=>{const B=f[0];B&&E.jobs.push({id:crypto.randomUUID(),region_ids:[B.id],primary_region_id:B.id,mask_composition:"union",prompt_composition:"context",conditioning:Np(),detector_assignments:[]})}),O=m.jobs.map((E,B)=>({id:E.id,title:`Job ${B+1}`,description:E.region_ids.map(C=>f.find(S=>S.id===C)?.name??C).join(" + ")||"No region",summary:s.jsxs("div",{className:"bv-editor-item-compact-summary",children:[s.jsxs("span",{children:[E.region_ids.length," region",E.region_ids.length===1?"":"s"]}),s.jsx("span",{children:E.detector_assignments[0]?.source.resource_id||"Composed mask"}),s.jsx("span",{children:E.region_ids.length?"Ready":"Needs region"})]}),content:s.jsxs("div",{className:"bv-editor-item-details",children:[s.jsxs("div",{className:"bv-editor-item-summary",children:[s.jsx(rk,{label:"Regions",value:E.region_ids,minSelected:1,options:f.map(C=>({value:C.id,label:C.name})),onValue:C=>j(S=>{const N=S.jobs[B];N.region_ids=C,C.includes(N.primary_region_id)||(N.primary_region_id=C[0]??"")})}),s.jsx(Ri,{label:"Detector",emptyLabel:"No detector · use composed region mask",collectors:t,collectorId:E.detector_assignments[0]?.source.collector_id??"",resourceId:E.detector_assignments[0]?.source.resource_id??"",onSelection:(C,S)=>j(N=>{N.jobs[B].detector_assignments=C&&S?[{id:N.jobs[B].detector_assignments[0]?.id??crypto.randomUUID(),source:{collector_id:C,resource_id:S},options:N.jobs[B].detector_assignments[0]?.options??$x()}]:[]})}),s.jsx(Gn,{children:E.region_ids.length>1&&s.jsx(at,{label:"Primary region",value:E.primary_region_id,options:E.region_ids.map(C=>({value:C,label:f.find(S=>S.id===C)?.name??C})),onValue:C=>j(S=>{S.jobs[B].primary_region_id=C})})})]}),s.jsx(Ms,{value:U,onValue:P,items:[{id:`composition-${B}`,title:"Mask and prompt composition",content:s.jsxs(Gn,{children:[s.jsx(at,{label:"Mask composition",value:E.mask_composition,options:[{value:"union",label:"Union"},{value:"intersection",label:"Intersection"},{value:"subtract",label:"Subtract in listed order"}],onValue:C=>j(S=>{S.jobs[B].mask_composition=C})}),s.jsx(at,{label:"Prompt composition",value:E.prompt_composition,options:[{value:"context",label:"Primary and context regions"},{value:"primary",label:"Primary region only"}],onValue:C=>j(S=>{S.jobs[B].prompt_composition=C})})]})},{id:`conditioning-${B}`,title:"Conditioning strengths",content:s.jsx(Gn,{minimum:150,children:[["Global influence","global_influence"],["Background influence","background_influence"],["Primary region influence","primary_region_influence"],["Context region influence","context_region_influence"]].map(([C,S])=>s.jsx(Ur,{label:C,value:E.conditioning[S],min:0,max:2,step:.05,onValue:N=>j(A=>{A.jobs[B].conditioning[S]=N})},S))})},{id:`detection-${B}`,title:"Detector and ROI settings",content:E.detector_assignments[0]?s.jsxs(Gn,{minimum:150,children:[Object.entries(E.detector_assignments[0].options).slice(0,5).map(([C,S])=>s.jsx(Ur,{label:C.replaceAll("_"," "),value:Number(S),min:C==="dilation"?-512:C==="crop_factor"||C==="drop_size"?1:0,max:C==="threshold"?1:C==="crop_factor"?20:C==="drop_size"?8192:C==="dilation"?512:2,step:["dilation","drop_size"].includes(C)?1:.01,onValue:N=>j(A=>{A.jobs[B].detector_assignments[0].options[C]=N})},C)),s.jsx(Hr,{label:"Detector query",value:E.detector_assignments[0].options.query??"",onValue:C=>j(S=>{S.jobs[B].detector_assignments[0].options.query=C.trim()||void 0})}),s.jsx(Hr,{label:"Accepted labels",value:(E.detector_assignments[0].options.labels??[]).join(", "),onValue:C=>j(S=>{S.jobs[B].detector_assignments[0].options.labels=C.split(",").map(N=>N.trim()).filter(Boolean)})})]}):s.jsx(Nr,{tone:"info",title:"Composed mask",children:"This job has no detector assignment."})}]})]})}));return s.jsxs(s.Fragment,{children:[s.jsx(Ln,{open:!0,title:"Regional Detailer Plan",shortTitle:"Detailer Plan",menuVisible:L,onMenuVisible:E=>Sn(c,E),context:s.jsx(il,{label:"Detailer Plan Node",value:i,options:a.map(E=>({value:E.id,label:E.label})),onNavigate:(E,B)=>B?x(()=>l(E,!0)):l(E,!1)}),initialGeometry:{width:1040,height:720},minSize:{width:420,height:360},onClose:T,status:b?"Unsaved plan changes":"Plan saved",actions:s.jsx(bp,{primary:s.jsx(ne,{intent:"primary",disabled:m.jobs.some(E=>!E.region_ids.length),onClick:w,children:"Save plan"}),secondary:s.jsxs(s.Fragment,{children:[s.jsx(ne,{onClick:M,disabled:!f.length,children:"Add job"}),s.jsx(Ps,{label:"Detailer Plan",value:{schema:"bv.editor-draft",version:1,type:"detailer-plan",data:m},onImport:E=>{if(E?.schema!=="bv.editor-draft"||E?.version!==1||E?.type!=="detailer-plan"||!E?.data)throw new Error("Draft type or version does not match this editor.");g.replace(da(E.data,e,t))}})]}),overflow:[{id:"undo",label:"Undo",disabled:!g.canUndo,onSelect:g.undo},{id:"redo",label:"Redo",disabled:!g.canRedo,onSelect:g.redo},{id:"discard",label:"Discard changes",disabled:!b,onSelect:()=>g.replace(da(_,e,t),!0)},{id:"restore",label:"Restore defaults",onSelect:()=>g.commit(qd(e))}]}),children:s.jsxs(tp,{density:"compact",className:"bv-editor-dialog",children:[!t.length&&m.jobs.length>0&&s.jsx(Nr,{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."}),f.length?s.jsx(tl,{items:O,onReorder:E=>j(B=>{const C=new Map(B.jobs.map(S=>[S.id,S]));B.jobs=E.map(S=>C.get(S.id)).filter(Boolean)}),onRemove:E=>j(B=>{B.jobs=B.jobs.filter(C=>C.id!==E)})}):s.jsx(hc,{title:"No eligible regions",description:"Enable a region with Detailer or Both usage first."})]})}),s.jsx(op,{open:!!h,editorName:"Detailer Plan",onKeep:()=>y(null),onDiscard:()=>{const E=h;y(null),E?.()},onSave:()=>{w();const E=h;y(null),E?.()}})]})}const zR=(e,t,r,o,n,i,a,l)=>{sp((c,u)=>v.createElement(BR,{regions:e,collectors:t,stored:r,save:o,close:c,activationToken:u,nodeId:n.split(":").slice(1).join(":"),nodes:i,onNavigate:a,currentNode:l}),{key:n})};function FR({catalog:e,stored:t,save:r,close:o,nodeId:n="",nodes:i=[],onNavigate:a=()=>{},currentNode:l}){const c=v.useMemo(()=>pa(t),[t]),u=v.useMemo(()=>new Set(c.detectors.map(S=>S.id)),[c]),d=vc(c),f=d.value,[p,g]=v.useState(()=>ga(c));mc(d);const m=ga(f)!==p,_=np(),[k,b]=v.useState(null),h=()=>{const S=ga(f);r(S),g(S),d.clear()},y=S=>m?b(()=>S):S(),w=()=>y(o),x=Si(l),T=v.useMemo(()=>S=>s.jsx(Ln,{...S,title:S.title,shortTitle:"Registry",menuVisible:x,onMenuVisible:N=>Sn(l,N),onClose:w,context:s.jsx(il,{label:"Detector Registry Node",value:n,options:i.map(N=>({value:N.id,label:N.label})),onNavigate:(N,A)=>A?y(()=>a(N,!0)):a(N,!1)})}),[l,m,x,n,i,a]),[L,U]=v.useState([]),P=S=>d.commit(N=>{const A=structuredClone(N);return S(A),A}),j=()=>{let S=f.detectors.length+1,N=`detector-${S}`;for(;f.detectors.some(A=>A.id===N);)N=`detector-${++S}`;return N},M=f.detectors.map(S=>S.id.trim()),O=M.find((S,N)=>S&&M.indexOf(S)!==N),E=f.detectors.some(S=>!S.id.trim()||!S.model_name),B=()=>P(S=>{const N=e.ultralytics.length?"ultralytics":"onnx";S.detectors.push({id:j(),provider:N,model_name:e[N][0]??""})}),C=()=>{f.detectors.length?_.confirm({title:"Clear Detector Registry?",message:"Existing Detailer jobs will keep missing references until reassigned.",confirmLabel:"Clear registry",danger:!0,action:()=>d.commit(Hs())}):d.commit(Hs())};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:m?"Unsaved registry changes":"Registry saved",actions:s.jsx(bp,{primary:s.jsx(ne,{intent:"primary",disabled:!!(O||E),onClick:h,children:"Save registry"}),secondary:s.jsxs(s.Fragment,{children:[s.jsx(ne,{onClick:B,children:"Add detector"}),s.jsx(Ps,{label:"Detector Registry",value:{schema:"bv.editor-draft",version:1,type:"detector-registry",data:f},onImport:S=>{if(S?.schema!=="bv.editor-draft"||S?.version!==1||S?.type!=="detector-registry"||!S?.data)throw new Error("Draft type or version does not match this editor.");d.replace(pa(S.data))}})]}),overflow:[{id:"undo",label:"Undo",disabled:!d.canUndo,onSelect:d.undo},{id:"redo",label:"Redo",disabled:!d.canRedo,onSelect:d.redo},{id:"discard",label:"Discard changes",disabled:!m,onSelect:()=>d.replace(pa(p),!0)},{id:"clear",label:"Clear registry…",onSelect:C}]}),children:s.jsxs(tp,{density:"compact",className:"bv-editor-dialog",children:[O||E?s.jsx(Nr,{tone:"danger",title:"Registry needs attention",children:O?`Detector ID “${O}” is used more than once.`:"Every detector needs a unique ID and a detection model."}):s.jsxs(Nr,{tone:"success",title:"Registry valid",children:[f.detectors.length," detector",f.detectors.length===1?"":"s"," ready to save."]}),s.jsxs("div",{className:"bv-card-list",children:[!f.detectors.length&&s.jsx(hc,{title:"No detectors configured",description:"Add a detector to make it selectable in Regional Detailer jobs."}),s.jsx(Ms,{value:L,onValue:U,items:f.detectors.map((S,N)=>({id:`detector-${N}`,title:s.jsxs("span",{className:"bv-detector-summary",children:[s.jsx("strong",{children:S.id||"New detector"}),s.jsx("span",{children:S.provider==="onnx"?"ONNX":"Ultralytics"}),s.jsx("span",{children:S.model_name||"No model selected"}),s.jsx("span",{children:S.id.trim()&&S.model_name?"Ready":"Needs attention"})]}),content:s.jsxs("div",{className:"bv-detector-details",children:[s.jsxs("div",{className:"bv-editor-item-actions",children:[s.jsx(ne,{intent:"ghost",onClick:()=>P(A=>{A.detectors.splice(N+1,0,{...A.detectors[N],id:j()})}),children:"Duplicate"}),s.jsx(ne,{intent:"ghost",className:"bv-subtle-danger",onClick:()=>{const A=()=>P(F=>{F.detectors.splice(N,1)});u.has(S.id)?_.confirm({title:`Remove detector “${S.id}”?`,message:"Existing Detailer jobs will show it as missing until reassigned.",confirmLabel:"Remove detector",danger:!0,action:A}):A()},children:"Remove"})]}),s.jsxs(Gn,{children:[s.jsx(Hr,{label:"Detector ID",value:S.id,readOnly:u.has(S.id),help:u.has(S.id)?"Stable job reference. Create a new detector instead of renaming it.":"Choose once; the ID becomes immutable after saving.",onValue:A=>P(F=>{F.detectors[N].id=A.trim()})}),s.jsx(at,{label:"Provider",value:S.provider,options:[{value:"ultralytics",label:"Ultralytics"},{value:"onnx",label:"ONNX"}],onValue:A=>P(F=>{const z=F.detectors[N];z.provider=A,z.model_name=e[z.provider][0]??""})}),s.jsx(at,{label:"Detection model",value:S.model_name,options:e[S.provider].map(A=>({value:A,label:A})),onValue:A=>P(F=>{F.detectors[N].model_name=A})})]}),s.jsx(Ms,{value:L,onValue:U,items:[{id:`sam-${N}`,title:S.sam_model_name?"SAM refinement enabled":"Optional SAM refinement",content:s.jsxs(Gn,{children:[s.jsx(at,{label:"SAM model",value:S.sam_model_name??"",options:[{value:"",label:"No SAM refinement"},...e.sam.map(A=>({value:A,label:A}))],onValue:A=>P(F=>{const z=F.detectors[N];z.sam_model_name=A||void 0,A||delete z.sam_device_mode})}),S.sam_model_name&&s.jsx(at,{label:"Execution device",value:S.sam_device_mode??"AUTO",options:["AUTO","Prefer GPU","CPU"].map(A=>({value:A,label:A})),onValue:A=>P(F=>{F.detectors[N].sam_device_mode=A})})]})}]})]})}))})]})]})}),_.dialog,s.jsx(op,{open:!!k,editorName:"Detector Registry",onKeep:()=>b(null),onDiscard:()=>{const S=k;b(null),S?.()},onSave:()=>{h();const S=k;b(null),S?.()}})]})}const UR=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();sp((u,d)=>v.createElement(FR,{catalog:c,stored:t,save:r,close:u,activationToken:d,nodeId:o.split(":").slice(1).join(":"),nodes:n,onNavigate:i,currentNode:a}),{key:o})},VR=10,WR=(e,t=VR)=>{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)};function $R(e,t=220,r=60){if(!e?.setSize)return;const o=Math.max(Number(e.size?.[0]??0),t);e.setSize([o,r]);const n=e.computeSize?.()??e.size??[t,r];e.setSize([Math.max(o,Number(n[0]??0),t),Math.max(r,Number(n[1]??r))])}const HR=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"]),YR={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"},XR={"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"}},wu=(e,t)=>XR[e]?.[t]??YR[t]??t.split("_").join(" ");function GR({label:e,configured:t,close:r,onSave:o,onDelete:n}){const[i,a]=v.useState(""),[l,c]=v.useState(""),[u,d]=v.useState(!1),f=async p=>{d(!0),c("");try{const g=await p();g?c(g):r()}finally{d(!1)}};return s.jsxs(el,{open:!0,title:`${e} API Key`,description:"Credentials are stored by the local BV Nodepack backend and are never written into the workflow.",size:"small",onClose:r,footer:s.jsxs(s.Fragment,{children:[s.jsx(ne,{intent:"danger",disabled:!t||u,onClick:()=>f(n),children:"Delete key"}),s.jsx(ne,{intent:"ghost",disabled:u,onClick:r,children:"Cancel"}),s.jsx(ne,{intent:"primary",loading:u,disabled:!i.trim(),onClick:()=>f(()=>o(i)),children:"Save key"})]}),children:[s.jsx(Nr,{tone:t?"info":"warning",children:t?"A key is configured. Enter a new key to replace it.":"No key is configured."}),s.jsx(ok,{label:"API key",value:i,onValue:a}),l&&s.jsx(Nr,{tone:"danger",children:l})]})}let ku=null;const Jd=(e,t=!1)=>((t||!ku)&&(ku=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:[]})),ku),Zr=(e,t)=>e.widgets?.find(r=>r.name===t),Ys=(e,t,r)=>{const o=t.find(l=>l.label===String(Zr(e,"provider_profile")?.value??""));if(!o)return;const n=Zr(e,"custom_endpoint"),i=Zr(e,"model");if(n&&((!o.allow_custom_endpoint||!String(n.value??"").trim())&&(n.value=o.endpoint),n.disabled=!1,n.element&&(n.element.readOnly=!o.allow_custom_endpoint),n.label=o.allow_custom_endpoint?"custom endpoint":"endpoint (managed)",!n.__bvRemoteEndpointHooked)){n.__bvRemoteEndpointHooked=!0;const l=n.callback;n.callback=function(){const c=l?.apply(this,arguments),u=t.find(d=>d.label===String(Zr(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=Zr(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)},qR=(e,t,r)=>{const o=r.find(n=>n.label===String(Zr(t,"provider_profile")?.value??""))??r[0];o&&o.auth_mode!=="none"&&sp(n=>v.createElement(GR,{label:o.label,configured:o.configured,close:n,onSave:async i=>{const a=await fetch(e.apiURL("/bv_nodepack/remote_llm/api_key"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({profile_id:o.id,api_key:i})});if(!a.ok)return(await a.json().catch(()=>null))?.error??"Could not save API key.";o.configured=!0,Ys(t,r),Jd(e,!0)},onDelete:async()=>{if(!(await fetch(e.apiURL(`/bv_nodepack/remote_llm/api_key/${encodeURIComponent(o.id)}`),{method:"DELETE"})).ok)return"Could not delete API key.";o.configured=!1,Ys(t,r),Jd(e,!0)}}))},Kh=(e,t)=>{Jd(t).then(r=>{let o=String(Zr(e,"provider_profile")?.value??"");const n=Zr(e,"provider_profile");if(n&&!n.__bvRemoteLLMHooked){n.__bvRemoteLLMHooked=!0;const a=n.callback;n.callback=function(l){const c=a?.apply(this,arguments);return Ys(e,r,o),o=l,c}}let i=Zr(e,"configure_api_key");i||(i=e.addWidget("button","configure_api_key",null,()=>qR(t,e,r),{serialize:!1}),i.serialize=!1),Ys(e,r)}).catch(r=>console.error("BV Remote LLM settings unavailable",r))};function KR({collectors:e,collectorId:t,resourceId:r,resolved:o,debugVisible:n,onSelection:i,onDebug:a}){return s.jsxs("div",{className:"bv-m0-picker-panel",children:[s.jsx(bc,{label:"Hidden link debug",value:n,trueLabel:"Visible",falseLabel:"Hidden",onValue:a}),s.jsx(Ri,{collectors:e,collectorId:t,resourceId:r,resolved:o,onSelection:i})]})}function JR({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(bc,{label:"Native fan-in debug",value:r,trueLabel:"Dashed links",falseLabel:"Hidden",onValue:a}),t.map((l,c)=>s.jsxs("section",{className:"bv-m0-binding",children:[s.jsxs("header",{children:[s.jsxs("strong",{children:["Binding ",c+1]}),s.jsx(ne,{type:"button",iconOnly:!0,icon:"×",onClick:()=>i(c),"aria-label":`Remove binding ${c+1}`})]}),s.jsx(Ri,{collectors:e,collectorId:l.collector_id,resourceId:l.resource_id,resolved:l.resolved,onSelection:(u,d)=>o(c,u,d)})]},l.binding_id)),s.jsx(ne,{type:"button",className:"bv-m0-add-binding",disabled:t.length>=20,onClick:n,children:"Add collector binding"})]})}const Yr="BV_RUNTIME_RESOURCE_PROVIDER_M0",mi="resource_provider",yi=20,ZR=20;function Xs(e){return e?.findIndex(t=>t?.name===mi||t?.type===Yr)??-1}function jp(e){let t=Xs(e.outputs);t<0&&e.addOutput&&(e.addOutput(mi,Yr),t=Xs(e.outputs));const r=e.outputs?.[t];return r&&(r.name=mi,r.type=Yr),t}function n_(e){let t=Xs(e.inputs);t<0&&e.addInput&&(e.addInput(mi,Yr),t=Xs(e.inputs));const r=e.inputs?.[t];return r&&(r.name=mi,r.type=Yr),t}function QR(e){return`${mi}_${e}`}function Nc(e,t=yi){const r=[];for(let o=1;o<=t;o++){const n=QR(o);let i=e.inputs?.findIndex(l=>l?.name===n)??-1;i<0&&e.addInput&&(e.addInput(n,Yr),i=e.inputs?.findIndex(l=>l?.name===n)??-1);const a=e.inputs?.[i];a&&(a.name=n,a.type=Yr,a.__bvM0ProviderOrdinal=o),r.push(i)}return r}function eS(e,t){const r=e.computeSize?.(),o=e.size??[0,0];!r||!e.setSize||e.setSize([Math.max(Number(o[0]??0),Number(r[0]??0),220),Math.max(60,Number(r[1]??0)-t*ZR)])}const tS=(e,t)=>t==null?null:e?._links?.get?.(t)??e?.links?.get?.(t)??e?.links?.[t]??null,rS=e=>[...e?._links?.values?.()??[],...e?.links?.values?.()??Object.values(e?.links??{})],Jh=(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===Yr||o?.type===Yr)?r:null};function Pp(e,t,r){const o=e.inputs?.find(a=>a.name===t),n=tS(e.graph,o?.link),i=Jh(e,n);if(i&&(!r||r(i)))return i;if(!r)return null;for(const a of rS(e.graph)){const l=Jh(e,a);if(l&&r(l))return l}return null}const oi=(e,t)=>e?.widgets?.find(r=>r.name===t),oS=e=>{try{const t=JSON.parse(String(oi(e,"resource_bindings")?.value??"[]"));return Array.isArray(t)?t.slice(0,yi).map(r=>({binding_id:String(r.binding_id??""),collector_id:String(r.collector_id??""),resource_id:String(r.resource_id??"")})):[]}catch{return[]}},i_=(e,t)=>["resource_a_id","resource_b_id"].some(r=>String(oi(e,r)?.value??"")===t);function Zh(e){const t=oi(e,"collector_id"),r=oi(e,"resource_id");if(!t||!r)return!1;const o=Pp(e,"resource_provider",n=>String(oi(n,"collector_id")?.value??"")===String(t.value??""));return!!o&&i_(o,String(r.value??""))}function Eu(e){const t=oS(e);return Nc(e),t.every((r,o)=>{const n=Pp(e,`resource_provider_${o+1}`,i=>String(oi(i,"collector_id")?.value??"")===r.collector_id);return!!n&&i_(n,r.resource_id)})}const nS="BV M0 Fake Resource Collector",iS="BV M0 Fake Resource Consumer",a_="BV M0 Fake Multi Resource Consumer",l_=Yr,aS="a1bdeceb-76ae-4e45-ae36-e5c2664819ce",lS="d97a4268-c02c-42a3-8793-8e578e12e12c",$e=(e,t)=>e?.widgets?.find(r=>r.name===t),Tu=e=>{e&&(e.type="converted-widget",e.hidden=!0,e.computeSize=()=>[0,-4],e.serializeValue=()=>e.value)},Ru=(e,t)=>(e&&!String(e.value??"").trim()&&(e.value=t??crypto.randomUUID()),String(e?.value??"")),Su=()=>{let e=0;const t=()=>{const r=ct().canvas;r?Sp(r):e++<40&&setTimeout(t,50)};t()};function sS(e){const t=$e(e,"collector_id"),r=$e(e,"resource_a_id"),o=$e(e,"resource_b_id");if(!t||!r||!o||!e.graph||!(e.graph._nodes??[]).find(a=>a!==e&&a.__bvM0ResourceProvider===!0&&String($e(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 s_(e,t,r=""){return Pp(e,t,r?o=>String($e(o,"collector_id")?.value??"")===r:void 0)}function kn(e){return s_(e,"resource_provider",String($e(e,"collector_id")?.value??""))}function cl(e,t){const r=xi(e)[t];return s_(e,`resource_provider_${t+1}`,r?.collector_id??"")}function Qh(e){const t=kn(e),r=t?.__bvM0IdRemap;if(!r)return;const o=$e(e,"collector_id"),n=$e(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 Oc(e){return(e.graph?._nodes??[]).filter(t=>t.__bvM0ResourceProvider===!0&&t.graph===e.graph).map(t=>({id:String($e(t,"collector_id")?.value??""),label:String(t.title||`Collector #${t.id}`),resources:[{id:String($e(t,"resource_a_id")?.value??""),label:"Alpha"},{id:String($e(t,"resource_b_id")?.value??""),label:"Beta"}],node:t})).filter((t,r,o)=>t.id&&o.findIndex(n=>n.id===t.id)===r)}function So(e){if(!e?.__bvM0ResourceProvider)return;const t=e.graph?._nodes??[],r=e.outputs?.find(n=>n.type===l_),o=t.some(n=>!!n.properties?.bvM0DebugVisible&&(kn(n)===e||n.inputs?.some((i,a)=>cl(n,a)===e)));r&&(r.hidden=!0,r.__bvM0VisualHidden=!o,r.__bvM0PortHidden=!0,r.__bvM0ResourceSlot=!0),Lp(e,"collector",o)}function xi(e){const t=$e(e,"resource_bindings");if(!t)return[];try{const r=JSON.parse(String(t.value??"[]"));return Array.isArray(r)?r.slice(0,yi).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 ba(e,t){const r=$e(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 cS(e){const t=xi(e),r=new Set(t.map(n=>n.binding_id));if((e.graph?._nodes??[]).some(n=>n!==e&&n.type===a_&&xi(n).some(i=>r.has(i.binding_id)))){for(const n of t)n.binding_id=crypto.randomUUID();ba(e,t)}}function Il(e){const t=xi(e);let r=!1;t.forEach((o,n)=>{const i=cl(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&&ba(e,t)}function Gs(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="";Lp(e,"consumer",t);for(let n=0;n=0&&e.inputs?.[n]?.link!=null&&e.disconnectInput?.(n);const a=Oc(e).find(c=>c.id===r)?.node,l=a?jp(a):-1;a&&n>=0&&l>=0&&a.connect(l,e,n),Gs(e,!!e.properties?.bvM0DebugVisible),So(i)}function Ya(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===l_).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 c_(e,t){[0,50,150,300].forEach(r=>setTimeout(()=>Ya(e,t),r))}function jl(e){if(!$e(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+xi(e).length*124),onDraw:()=>Ya(e,r),afterResize:()=>Ya(e,r)});n&&(n.serialize=!1)}e.__bvM0PickerRoot??(e.__bvM0PickerRoot=va.createRoot(r));const o=()=>{const n=Oc(e),i=xi(e).map((a,l)=>{const c=cl(e,l);return{...a,resolved:!!c&&String($e(c,"collector_id")?.value??"")===a.collector_id}});e.__bvM0PickerRoot.render(s.jsx(JR,{collectors:n,bindings:i,debugVisible:!!e.properties?.bvM0DebugVisible,onDebug:a=>{Gs(e,a),o()},onBinding:(a,l,c)=>{i[a]={...i[a],collector_id:l,resource_id:c},ba(e,i),eb(e,a,l),o()},onAdd:()=>{i.length>=yi||(i.push({binding_id:crypto.randomUUID(),collector_id:"",resource_id:"",resolved:!1}),ba(e,i),o())},onRemove:a=>{const l=Nc(e),c=l[a];c>=0&&e.inputs?.[c]?.link!=null&&e.disconnectInput?.(c),i.splice(a,1),ba(e,i);for(let d=a;d=0&&e.inputs?.[u]?.link!=null&&e.disconnectInput?.(u),o()}}))};o(),Gs(e,!!e.properties?.bvM0DebugVisible,!1),eS(e,yi),c_(e,r)}function Lu(e,t){if(e.__bvM0DomRefresh)return;const r=()=>{setTimeout(t,0),setTimeout(t,100)};e.__bvM0DomRefresh=r,to().addEventListener("executed",r),to().addEventListener("graphChanged",r);const o=e.onRemoved;e.onRemoved=function(){return to().removeEventListener("executed",r),to().removeEventListener("graphChanged",r),o?.apply(this,arguments)}}function Zd(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=""),Lp(e,"consumer",t),So(kn(e)),Ix(e.graph),t&&Rp(e.graph?.list_of_graphcanvas?.[0]??ct().canvas),r&&e.setDirtyCanvas?.(!0,!0)}function uS(e,t){const r=kn(e),o=n_(e);o>=0&&e.inputs?.[o]?.link!=null&&e.disconnectInput?.(o);const n=Oc(e).find(a=>a.id===t)?.node,i=n?jp(n):-1;n&&o>=0&&i>=0&&n.connect(i,e,o),Zd(e,!!e.properties?.bvM0DebugVisible),So(r)}function Pl(e){const t=$e(e,"collector_id"),r=$e(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:()=>Ya(e,o),afterResize:()=>Ya(e,o)});i&&(i.serialize=!1)}e.__bvM0PickerRoot??(e.__bvM0PickerRoot=va.createRoot(o));const n=()=>{const i=kn(e),a=String($e(i,"collector_id")?.value??"");e.__bvM0PickerRoot.render(s.jsx(KR,{collectors:Oc(e),collectorId:String(t.value??""),resourceId:String(r.value??""),resolved:!!i&&a===String(t.value??""),debugVisible:!!e.properties?.bvM0DebugVisible,onDebug:l=>{Zd(e,l),n()},onSelection:(l,c)=>{t.value=l,r.value=c,uS(e,l),n()}}))};n(),Zd(e,!!e.properties?.bvM0DebugVisible,!1),c_(e,o)}function dS(e,t){if(t.name===nS){const r=e.prototype.onNodeCreated,o=e.prototype.onConfigure,n=function(){Su(),this.__bvM0ResourceProvider=!0,jp(this),Ru($e(this,"collector_id")),Ru($e(this,"resource_a_id"),aS),Ru($e(this,"resource_b_id"),lS),sS(this),["collector_id","resource_a_id","resource_b_id"].forEach(i=>Tu($e(this,i))),Lu(this,()=>So(this)),So(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===iS){const r=e.prototype.onNodeCreated,o=e.prototype.onConfigure,n=e.prototype.onConnectionsChange,i=function(){Su(),this.__bvM0ResourceConsumer=!0,n_(this),Qh(this),Zh(this),["collector_id","resource_id"].forEach(a=>Tu($e(this,a))),Lu(this,()=>Pl(this)),Pl(this),setTimeout(()=>Pl(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=kn(this),l=n?.apply(this,arguments);return queueMicrotask(()=>{Qh(this),Zh(this),Pl(this),So(a),So(kn(this))}),l},!0}if(t.name===a_){const r=e.prototype.onNodeCreated,o=e.prototype.onConfigure,n=e.prototype.onConnectionsChange,i=function(){Su(),this.__bvM0ResourceConsumer=!0,Nc(this),cS(this),Il(this),Eu(this),Tu($e(this,"resource_bindings")),Lu(this,()=>{Il(this),jl(this)}),jl(this),[0,50,150].forEach(a=>setTimeout(()=>{Il(this),Eu(this),jl(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(()=>{Il(this),Eu(this),Gs(this,!!this.properties?.bvM0DebugVisible,!1),jl(this)}),a},!0}return!1}const fS=(e,t)=>e?.widgets?.find(r=>r.name===t),pS=["replace","merge","subtract","clear"].map(e=>({value:e,label:e[0].toUpperCase()+e.slice(1)}));function gS({open:e,node:t,onClose:r}){const[o,n]=v.useState(()=>Bo(t)),i=Si(t);if(v.useEffect(()=>{e&&t&&n(Bo(t))},[t,e]),v.useEffect(()=>{if(!e||!t)return;const p=()=>n(Bo(t));return window.addEventListener(fo,p),()=>window.removeEventListener(fo,p)},[t,e]),!t)return null;const a=al(t).filter(p=>p.resources.length>0),l=JT(t),c=String(fS(t,"operation")?.value??"replace"),u=o.steps??o.entries.flatMap(p=>p.targets.map(g=>({id:crypto.randomUUID(),operation:c,target:g,entries:[{...p,targets:[g]}]}))),d=p=>{n(ll(t,{version:3,entries:[],steps:p}))},f=u.map((p,g)=>{const m=wT(p.target),_=l.find(k=>k.value===m)?.label??"Missing region";return{id:p.id,title:`Step ${g+1}: ${_}`,description:p.operation,content:s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(at,{label:"Target",value:m,options:l,onValue:k=>{const b=l.find(h=>h.value===k)?.target;b&&d(u.map(h=>h.id===p.id?{...h,target:b,entries:h.entries.map(y=>({...y,targets:[b]}))}:h))}}),s.jsx(at,{label:"Operation",value:p.operation,options:pS,onValue:k=>d(u.map(b=>b.id===p.id?{...b,operation:k}:b))}),p.operation!=="clear"&&p.entries.map((k,b)=>k.source.kind==="external"?s.jsxs("section",{className:"bv-lora-v3-stack-row",children:[s.jsxs("strong",{children:["LoRA Stack ",b+1]}),s.jsx(Ri,{collectors:a,collectorId:k.source.collector_id,resourceId:k.source.resource_id,resolved:Ux(t,o,k),label:"LoRA stack",emptyLabel:"Select LoRA stack",onSelection:(h,y)=>n(Vx(t,o,k.id,h,y))}),s.jsx(ne,{intent:"ghost",iconOnly:!0,"aria-label":`Remove LoRA Stack ${b+1}`,onClick:()=>d(u.map(h=>h.id===p.id?{...h,entries:h.entries.filter(y=>y.id!==k.id)}:h)),children:"×"})]},k.id):null),p.operation!=="clear"&&s.jsx(ne,{intent:"secondary",disabled:!a.length,onClick:()=>{const k=a[0],b=k?.resources[0];b&&d(u.map(h=>h.id===p.id?{...h,entries:[...h.entries,{id:crypto.randomUUID(),source:{kind:"external",collector_id:k.id,resource_id:b.id},targets:[h.target]}]}:h))},children:"Add LoRA stack"})]})}});return s.jsx(Ln,{open:e,title:"BV Regional LoRA Editor",shortTitle:"Regional LoRA",menuVisible:i,onMenuVisible:p=>Sn(t,p),initialGeometry:{width:620,height:520},minSize:{width:420,height:320},onClose:r,children:s.jsxs("div",{className:"bv-ui bv-lora-v3-window",children:[s.jsx(ne,{intent:"secondary",disabled:!l.length,onClick:()=>d([...u,{id:crypto.randomUUID(),operation:"merge",target:l[0].target,entries:[]}]),children:"Add step"}),s.jsx(tl,{items:f,initialExpanded:f.map(p=>p.id),onReorder:p=>{const g=new Map(u.map(m=>[m.id,m]));d(p.map(m=>g.get(m.id)).filter(Boolean))},onRemove:p=>d(u.filter(g=>g.id!==p))})]})})}const Bp="BV Control Center",qs=0,hS=2,bS=4,Ji="bvControlBaseMode",vS="bv-open-control-rack",u_=320,mS=48,tb="bv_control_conflict_status",Cu=new Set;function yS(e){return e==="activate"?{mode:qs,priority:3}:e==="mute"?{mode:hS,priority:2}:{mode:bS,priority:1}}function rb(e){const t=new Set(Os(ct()).map(r=>r.id));return{...e,controls:e.controls.map(r=>({...r,assignments:r.assignments.map(o=>({...o,unresolved:!t.has(o.groupId)}))}))}}function xS(e){return E1(e,t=>Lm(t,Bp))}function _S(e){for(const o of Cu){const n=o.properties?.[Ji];o.mode=e.forceActive?qs:typeof n=="number"?n:o.mode,o.properties&&delete o.properties[Ji],o.setDirtyCanvas?.(!0,!0)}Cu.clear();const t=new Map(Os(ct()).map(o=>[o.id,o])),r=new Map;for(const o of e.controls)if(o.enabled)for(const n of o.assignments){const i=t.get(n.groupId);if(i)for(const a of xS(i)){const l=yS(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[Ji]!="number"&&(o.properties[Ji]=typeof o.mode=="number"?o.mode:qs),o.mode=n.mode,Cu.add(o),o.setDirtyCanvas?.(!0,!0)}function wS(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 kS(e,t){const r=Cm(t),o=T1(r);let n=e.widgets?.find(i=>i.name===tb);n||(n=e.addCustomWidget({name:tb,type:"custom",value:o,y:0,options:{},serialize:!1,computeSize:()=>[0,24],computeLayoutSize:()=>({minHeight:24,maxHeight:24,minWidth:u_}),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 d_(e,t){e.mode=qs,e.properties&&delete e.properties[Ji];let r=e.widgets?.find(c=>c.name==="configure_control_center");r||(r=e.addWidget("button","configure_control_center",null,()=>window.dispatchEvent(new Event(vS)),{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)&&wS(e,c)}for(const c of t.controls){const u=`bvcc_${c.id}`,d=g=>{const m=xn(),_={...m,controls:m.controls.map(k=>k.id===c.id?{...k,enabled:!!g}:k)};ep(_)};let f=e.inputs.find(g=>g.name===u);f||(f=e.addInput(u,"BOOLEAN",{label:c.name,nameLocked:!0,widget:{name:u}})),f.label=c.name;let p=e.widgets?.find(g=>g.name===u);p&&!p.__bvControlCallbackBound&&(e.removeWidget?.(p),p=null),p||(p=e.addWidget("toggle",u,c.enabled,d,{on:"ACTIVE",off:"INACTIVE"})),p.__bvControlCallbackBound=!0,p.label=c.name,p.value=c.enabled,p.serialize=!0,p.options??(p.options={}),p.options.on="ACTIVE",p.options.off="INACTIVE",p.callback=d,f.widget={name:u}}kS(e,t);const n=e.widgets?.find(c=>c.name==="bv_control_config_json");n&&(n.value=JSON.stringify(rb(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(rb(xn()))),e.serialize_widgets=!0;const i=e.size??[0,0],a=e.computeSize?.()??i,l=Math.max(u_,(a[0]??0)+mS);e.setSize?.([Math.max(i[0]??0,l),a[1]??i[1]??0]),e.setDirtyCanvas?.(!0,!0)}function f_(e=xn()){for(const{node:t}of w1(ct(),Bp))d_(t,e);_S(e)}window.addEventListener(fi,e=>f_(e.detail));ct().registerExtension({name:"bv_nodepack.control_center",async beforeRegisterNodeDef(e,t){if(t.name!==Bp)return;const r=e.prototype.onNodeCreated;e.prototype.onNodeCreated=function(){const o=r?.apply(this,arguments);return d_(this,xn()),o}},afterConfigureGraph(){f_()}});const Ne=ct(),Jt=to();HE(e=>Ne.ui?.settings?.setSettingValue?.(Gy,e));YE(e=>Ne.ui?.settings?.setSettingValue?.(qy,e));$E(e=>Ne.ui?.settings?.setSettingValue?.(Ky,e));vk(e=>Ne.ui?.settings?.setSettingValue?.(up,e));const Qd="bv-open-control-rack",ef="bv-open-regional-editor",tf="bv-open-regional-quick-edit",Lo="bv-regional-document-changed",ob="bv-nodepack-styles",p_="BV.DebugBridge.Enabled";let pn=!1,Bl=null;const ES=()=>{const e=Ne.extensionManager?.workflow?.activeWorkflow??Ne.workflowManager?.activeWorkflow;return String(e?.filename??e?.path??"Current workflow")},g_=async e=>{pn=!!e;const t=await fetch(Jt.apiURL("/bv_nodepack/debug/session"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({enabled:pn})});if(!t.ok)throw new Error(`BV Debug Bridge session failed: ${t.status} ${await t.text()}`)},h_=async()=>{if(!pn)return!1;const e=await Ne.graphToPrompt(),t=await fetch(Jt.apiURL("/bv_nodepack/debug/snapshot"),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:e.output,workflow_name:ES()})});if(!t.ok)throw new Error(`BV Debug Bridge snapshot failed: ${t.status} ${await t.text()}`);return!0},Ks=()=>{pn&&(Bl!=null&&window.clearTimeout(Bl),Bl=window.setTimeout(()=>{Bl=null,h_().catch(e=>console.error(e))},600))},Fr=e=>{e.type="converted-widget",e.hidden=!0,e.computeSize=()=>[0,-4],e.element&&(e.element.style.display="none")},TS=(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)},RS=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=[]},Mc=e=>jR(e,Ne.graph),sn=e=>{const t=Ne.canvas?.graph??Ne.graph;return nl(t,r=>r===e)[0]?.graph??e?.graph??null},SS=e=>{const t=Ne.canvas?.graph??Ne.graph,r=sn(e);$a(e,r);for(const o of nl(t,n=>String(n?.comfyClass??n?.type)==="BV Detector Registry"))o.graph===r&&$a(o.node,r);return Cc(e)},Nu=e=>{const t=/^external_detector_(\d+)$/,r=(e.inputs??[]).flatMap(i=>{const a=t.exec(String(i.name));return a&&i.link!=null?[Number(a[1])]:[]}),o=new Set(WR(r));for(let i=(e.inputs?.length??0)-1;i>=0;i--){const a=e.inputs[i],l=t.exec(String(a.name));l&&a.link==null&&!o.has(Number(l[1]))&&e.removeInput(i)}for(const i of[...o].sort((a,l)=>a-l)){const a=`external_detector_${i}`;e.inputs?.some(l=>l.name===a)||e.addInput(a,"BV_DETECTOR_BINDING",{label:`external detector ${i}`,nameLocked:!0})}const n=()=>{$R(e)};n(),setTimeout(n,0),e.setDirtyCanvas?.(!0,!0)},nb=(e,t)=>{for(const r of e.inputs??[])r.label=wu(t,String(r.name));for(const r of e.outputs??[])r.label=wu(t,String(r.name));for(const r of e.widgets??[])String(r.name).startsWith("configure_")||(r.label=wu(t,String(r.name)));e.setDirtyCanvas?.(!0,!0)},rf=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;Fr(t);const o=Mc(e),n=o?da(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)},ib=e=>{Kd(e,sn(e));const t=e.widgets?.find(o=>o.name==="config_json");if(!t)return;Fr(t);let r=e.widgets?.find(o=>o.name==="configure_detailer_plan");r||(r=e.addWidget("button","configure_detailer_plan",null,()=>{const o=Mc(e);o&&(Rr("detailer",Le(e)),zR(o.regions,SS(e),t.value,n=>{t.value=n,Kd(e,sn(e)),rf(e),e.graph?.setDirtyCanvas?.(!0,!0)},`detailer-plan:${Le(e)}`,Nt("BV Regional Detailer Plan").filter(Rn).map(n=>({id:Le(n),label:`${n.title||"BV Regional Detailer Plan"} · #${n.id}`})),(n,i)=>{const a=Nt("BV Regional Detailer Plan").find(c=>Le(c)===n),l=a?.widgets?.find(c=>c.name==="configure_detailer_plan");l&&cp(`detailer-plan:${Le(e)}`,`detailer-plan:${Le(a)}`,()=>l.callback?.(),i)},e))},{serialize:!1}),r.serialize=!1),rf(e)},ab=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[]}},zp=e=>{if(e.comfyClass!=="BV Regional Detailer Mask"&&e.type!=="BV Regional Detailer Mask")return;const t=e.widgets?.find(d=>d.name==="context_regions_json");if(!t)return;Fr(t);const r=Mc(e);if(!r)return;for(const d of e.__bvDetailerContextWidgets??[]){const f=e.widgets?.indexOf(d)??-1;f>=0&&e.widgets.splice(f,1),d.onRemove?.()}const o=String(e.widgets?.find(d=>d.name==="region")?.value??""),n=(r?.regions??[]).filter(d=>d.enabled!==!1&&d.id!==o),i=new Set,a=ab(t.value).filter(d=>d.region_id!==o&&!i.has(d.region_id)&&!!i.add(d.region_id));t.value=JSON.stringify(a);const l=[],c=d=>{t.value=JSON.stringify(d),queueMicrotask(()=>zp(e))};for(let d=0;d<=a.length;d++){const f=a[d],p=new Set(a.filter((k,b)=>b!==d).map(k=>k.region_id)),g=r_(n.filter(k=>!p.has(k.id))),m=f&&!g.some(k=>k.id===f.region_id)?`Missing region · ${f.region_id.slice(0,8)}`:null,_=e.addWidget("combo",`context_region_${d+1}`,f?g.find(k=>k.id===f.region_id)?.label??m??"None":"None",k=>{if(k==="None")return c(a.slice(0,d));const b=g.find(y=>y.label===k);if(!b)return;const h=a.slice();h[d]={region_id:b.id,influence:f?.influence??1},c(h)},{values:["None",...m?[m]:[],...g.map(k=>k.label)],serialize:!1});if(_.label=`context region ${d+1}`,_.serialize=!1,l.push(_),f){const k=e.addWidget("number",`context_influence_${d+1}`,f.influence,b=>{const h=ab(t.value);h[d]&&(h[d].influence=Math.max(0,Math.min(2,+b))),t.value=JSON.stringify(h)},{min:0,max:2,step:.05,precision:2,serialize:!1});k.label=`context influence ${d+1}`,k.serialize=!1,l.push(k)}}e.__bvDetailerContextWidgets=l;const u=e.computeSize?.();u&&e.setSize&&e.setSize([Math.max(e.size?.[0]??0,u[0]),u[1]]),e.setDirtyCanvas?.(!0,!0),e.graph?.setDirtyCanvas?.(!0,!0)},as=e=>{const t=e.widgets?.find(d=>d.name==="region"),r=e.widgets?.find(d=>d.name==="region_selector");if(!t||!r)return;const o=Mc(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=r_(o.regions,n),a=String(t.value??""),l=i.some(d=>d.id===a)?a:a||i[0]?.id||"";t.value=l,e.__bvRegionChoices=i,r.options??(r.options={});const c=l&&!i.some(d=>d.id===l)?`Missing region · ${l.slice(0,8)}`:null;r.options.values=i.length||c?[...c?[c]:[],...i.map(d=>d.label)]:["Connect a BV Regional Prompt"],r.value=i.find(d=>d.id===l)?.label??c??r.options.values[0];const u=e.widgets?.find(d=>d.name==="scope");r.disabled=u&&u.value!=="region"||!i.length,zp(e),e.setDirtyCanvas?.(!0,!0)},lb=e=>{const t=e.widgets?.find(n=>n.name==="region");if(!t)return;Fr(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,zp(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")&&TS(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 as(e),i}}if(!e.__bvRegionDocumentListener){e.__bvRegionDocumentListener=()=>as(e),window.addEventListener(Lo,e.__bvRegionDocumentListener);const n=e.onRemoved;e.onRemoved=function(){return window.removeEventListener(Lo,e.__bvRegionDocumentListener),n?.apply(this,arguments)}}as(e)},Ac=()=>Ne.canvas?.graph??Ne.graph,Nt=e=>{const t=[],r=o=>{for(const n of o?._nodes??[])n.type===e&&t.push(n),n.subgraph&&r(n.subgraph)};return r(Ac()),t},gn=()=>{const e=Ac(),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},ni=()=>{const e=Nt("BV Control Center").length>0,t=gn().length>0,r=t||["BV Regional LoRA","BV Regional Detailer Plan","BV Detector Registry","BV Smart Pipe","BV Smart Pipe Merge"].some(n=>Nt(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}}))},b_=e=>nl(Ac(),t=>t===e)[0],Le=e=>b_(e)?.key??String(e.id),Wi=(e,t)=>{const r=b_(e);return{label:String(e.title||t),meta:`${r?.breadcrumb?`${r.breadcrumb} · `:""}#${e.id}`}},Js=(e,t,r,o)=>{const n=o.widgets?.find(c=>c.name===r);if(!n||n.disabled)return;const i=Le(o),a=xo(e),l=()=>n.callback?.();a&&a!==i?cp(`${t}:${a}`,`${t}:${i}`,l,gi()==="replace"):l(),Rr(e,i)},sb=(e,t)=>{e==="regional"?zr("regional",t):e==="lora"?zr("lora",t):e==="detailer"?Js("detailer","detailer-plan","configure_detailer_plan",t):e==="detector"?Js("detector","detector-registry","configure_detector_registry",t):window.dispatchEvent(new CustomEvent("bv-open-smart-pipe-editor",{detail:{node:t,kind:e}}))},LS=()=>{const e=[{type:"regional",nodes:gn()},{type:"lora",nodes:Nt("BV Regional LoRA")},{type:"detailer",nodes:Nt("BV Regional Detailer Plan")},{type:"detector",nodes:Nt("BV Detector Registry")},{type:"pipe",nodes:Nt("BV Smart Pipe")},{type:"merge",nodes:Nt("BV Smart Pipe Merge")}],t=EE(),r=t&&xo(t),o=e.find(i=>i.type===t)?.nodes.find(i=>Le(i)===r);if(o){sb(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&&(sb(n.type,n.node),t&&Ct({title:"Previous editor unavailable",message:"Opened the first available BV editor instead.",tone:"warning",duration:4e3}))},of=()=>{const e=Ac(),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))},CS=()=>ER(gn().flatMap(e=>{try{const t=Uo(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[]}})),cb=(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=CS(),i=TR(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)},ub=(e,t=!1)=>{const r=e.widgets?.find(n=>n.name==="document_id");if(!r)return;Fr(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=()=>cb(e,!1),window.addEventListener(Lo,e.__bvDocumentTargetListener);const n=e.onRemoved;e.onRemoved=function(){return window.removeEventListener(Lo,e.__bvDocumentTargetListener),n?.apply(this,arguments)}}cb(e,t)},db=(e,t=!1)=>{const r=e.widgets?.find(o=>o.name==="regional_json");if(r)try{const o=t?hh():Uo(r.value);!t&&gn().some(a=>{if(a===e)return!1;try{return Uo(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={..._p(i.value,t?"":o.document_id),document_id:o.document_id};i.value=JSON.stringify(ti(a,new Set(o.regions.map(l=>l.id))))}catch{i.value=JSON.stringify(Ec(o.document_id))}}catch{r.value=JSON.stringify(hh())}};function NS(){const[e,t]=v.useState(!1),[r,o]=v.useState(!1),[n,i]=v.useState(!1),[a,l]=v.useState(0),[c,u]=v.useState(!1),[d,f]=v.useState(0),[p,g]=v.useState(null),m=v.useRef(null),[_,k]=v.useState([]),[b,h]=v.useState({}),[y,w]=v.useState([]),[x,T]=v.useState(null),L=v.useRef(!1);m.current=p,L.current=c;const U=v.useRef(ha(Ne)),P=()=>{const M=ha(Ne);return U.current=M,M},j=v.useCallback((M=!1)=>{const O=gn(),E=Nt("BV Regional LoRA"),B=Nt("BV Regional Detailer Plan"),C=Nt("BV Detector Registry"),S=[...Nt("BV Smart Pipe"),...Nt("BV Smart Pipe Merge")],N=(F,z)=>{const Z=!Rn(F);return Z&&!M?null:{...z,hidden:Z,onReveal:Z?()=>Sn(F,!0):void 0}};return[{id:"regional",label:"Regional Prompts",items:O.map(F=>{const z=Wi(F,"BV Regional Prompt"),Z=xo("regional")===Le(F);return N(F,{id:Le(F),...z,meta:`${z.meta}${Z?" · Last active":""}`,onSelect:()=>zr("regional",F),secondary:{label:`Quick edit ${z.label}`,onSelect:()=>zr("quick",F)}})}).filter(Boolean)},{id:"lora",label:"Regional LoRA",items:E.map(F=>{const z=Wi(F,"BV Regional LoRA"),Z=xo("lora")===Le(F);return N(F,{id:Le(F),...z,meta:`${z.meta}${Z?" · Last active":""}`,onSelect:()=>{Rr("lora",Le(F)),zr("lora",F)}})}).filter(Boolean)},{id:"detailer",label:"Detailer Plan",items:B.map(F=>{const z=Wi(F,"BV Regional Detailer Plan"),Z=F.widgets?.find(q=>q.name==="configure_detailer_plan"),Y=xo("detailer")===Le(F);return N(F,{id:Le(F),...z,disabled:!Z||Z.disabled,meta:`${z.meta}${Z?.disabled?" · Connect Regional Prompt":Y?" · Last active":""}`,onSelect:()=>Js("detailer","detailer-plan","configure_detailer_plan",F)})}).filter(Boolean)},{id:"detector",label:"Detector Registry",items:C.map(F=>{const z=Wi(F,"BV Detector Registry"),Z=xo("detector")===Le(F);return N(F,{id:Le(F),...z,meta:`${z.meta}${Z?" · Last active":""}`,onSelect:()=>Js("detector","detector-registry","configure_detector_registry",F)})}).filter(Boolean)},{id:"smart-pipe",label:"Smart Pipes",items:S.map(F=>{const z=String(F.type??F.comfyClass)==="BV Smart Pipe Merge"?"merge":"pipe",Z=Wi(F,z==="merge"?"Smart Pipe Merge":"Smart Pipe");return N(F,{id:Le(F),...Z,meta:`${Z.meta} · ${z==="merge"?"Merge":"Pipe"}`,onSelect:()=>window.dispatchEvent(new CustomEvent("bv-open-smart-pipe-editor",{detail:{node:F,kind:z}}))})}).filter(Boolean)}]},[]);return v.useEffect(()=>{const M=()=>t(!0);return window.addEventListener(Qd,M),()=>window.removeEventListener(Qd,M)},[]),v.useEffect(()=>NR(Ne,Jt,()=>window.setTimeout(OS,0),void 0,void 0,U.current),[]),v.useEffect(()=>{const M=E=>{E&&(P(),Rr("lora",Le(E))),T(E)},O=E=>M(E.detail?.node??null);return window.addEventListener(Fh,O),()=>window.removeEventListener(Fh,O)},[]),v.useEffect(()=>{const M=O=>o(!!O.detail?.control);return window.addEventListener("bv-toolbar-capabilities-changed",M),ni(),()=>window.removeEventListener("bv-toolbar-capabilities-changed",M)},[]),v.useEffect(()=>{const M=()=>ni();return window.addEventListener(fo,M),()=>window.removeEventListener(fo,M)},[]),v.useEffect(()=>{const M=O=>{const E=O.detail?.reports??[];if(!E.length)return;const B=qT(E);Ct({...B,id:"bv-regional-migration-report",duration:1e4})};return window.addEventListener($d,M),()=>window.removeEventListener($d,M)},[]),v.useEffect(()=>{const M=O=>{const E=O.detail?.node,B=E&&Yd(E),C=`bv-regional-validation:${Le(E)}`;if(!B?.issues.length){By(C);return}const S=B.issues[0];Ct({id:C,title:"Regional fallbacks are active",message:`${B.issues.length} invalid field${B.issues.length===1?"":"s"}. ${S.message}`,tone:"warning",duration:0,actionLabel:"Open field",onAction:()=>{zr("regional",E),window.setTimeout(()=>{const N=document.querySelector(`[data-bv-regional-field="${CSS.escape(S.field)}"]`);N?.scrollIntoView({block:"center"}),N?.querySelector("input,textarea,button")?.focus()},100)}})};return window.addEventListener(Hd,M),()=>window.removeEventListener(Hd,M)},[]),v.useEffect(()=>{const M=new Set,O=()=>{const E=ha(Ne);if(M.has(E))return;const B=Ne.graph?._nodes?.filter(S=>FT(S).length)??[];if(!B.length)return;M.add(E);const C=B[0];Ct({id:"bv-regional-legacy-usage",title:"Legacy Regional wiring detected",message:`${B.length} node${B.length===1?"":"s"} still use deprecated Regional ports. Existing execution remains active; migrate the wiring manually.`,tone:"warning",duration:0,actionLabel:"Open migration target",onAction:()=>{String(C?.comfyClass??C?.type)==="BV Regional Prompt"?zr("regional",C):(Ne.canvas?.selectNode?.(C),Ne.canvas?.centerOnNode?.(C))}})};return Jt.addEventListener("execution_start",O),()=>Jt.removeEventListener("execution_start",O)},[]),v.useEffect(()=>{const M=O=>{P();const E=O.detail?.node??null,B=gn();w(of()),k(B);const C=E??B.find(S=>Le(S)===xo("quick"))??B[0]??null;C&&Rr("quick",Le(C)),g(C),i(!1),u(!0),f(S=>S+1)};return window.addEventListener(tf,M),()=>window.removeEventListener(tf,M)},[]),v.useEffect(()=>{const M=O=>{const E=O.detail?.output,B=E?.bv_regional_background?.[0]?.document_id,C=E?.images?.[E.images.length-1];if(!B||!C)return;const S=new URLSearchParams({filename:C.filename,type:C.type,subfolder:C.subfolder||""});h(N=>({...N,[B]:Jt.apiURL(`/view?${S}`)}))};return Jt.addEventListener("executed",M),()=>Jt.removeEventListener("executed",M)},[]),v.useEffect(()=>{const M=O=>{try{P();const E=O.detail?.node??null,B=gn();w(of()),k(B);const C=E??B.find(S=>Le(S)===xo("regional"))??B[0]??null;C&&Rr("regional",Le(C)),g(C),C&&L.current&&String(m.current?.id)===String(C.id)&&u(!1),i(!0),l(S=>S+1)}catch(E){throw Ct({title:"Regional editor failed to open",message:E instanceof Error?E.message:String(E),tone:"danger",duration:1e4}),E}};return window.addEventListener(ef,M),()=>window.removeEventListener(ef,M)},[]),s.jsxs(s.Fragment,{children:[s.jsx(vE,{}),s.jsx(Dk,{getColumns:j}),s.jsx(SE,{}),s.jsx(RE,{open:e,hasControlNodes:r,onClose:()=>t(!1)}),s.jsx(gS,{open:!!x,node:x,onClose:()=>T(null)}),s.jsx(xR,{open:n,activationToken:a,nodes:_,initialNode:p,backgrounds:b,loraStacks:y,onClose:()=>i(!1)}),s.jsx(kR,{open:c,activationToken:d,nodes:_,initialNode:p,loraStacks:y,onClose:()=>u(!1),onOpenEditor:M=>{Rr("regional",Le(M)),g(M),u(!1),i(!0),l(O=>O+1)}})]})}const nf="bv-root";let Xa=null,Ga=null;function v_(){Xa&&(Ga=va.createRoot(Xa),Ga.render(s.jsx(Re.StrictMode,{children:s.jsx(NS,{})})))}function OS(){if(!Xa?.isConnected){Fp();return}Ga?.unmount(),Ga=null,v_()}function Fp(){if(v1(),!document.getElementById(ob)){const t=document.createElement("style");t.id=ob,t.textContent=`${ME} -${OE}`,document.head.appendChild(t)}let e=document.getElementById(nf);e||(e=Xa??document.createElement("div"),e.id=nf,document.body.appendChild(e)),Xa=e,Ga||v_()}new MutationObserver(()=>{document.getElementById(nf)||Fp()}).observe(document.body,{childList:!0});Ne.registerExtension({name:"bv_nodepack.control_rack_portal",setup(){Fp(),Sp(Ne.canvas),_k(Ne.ui?.settings),Mx(!!Ne.ui?.settings?.getSettingValue?.(Nx,!1),Ne.graph),CR(),pn=!!Ne.ui?.settings?.getSettingValue?.(p_,!1),g_(pn).then(()=>{pn&&Ks()}).catch(e=>console.error(e)),Jt.addEventListener("graphChanged",Ks),Jt.addEventListener("graphChanged",ni)}});Ne.registerExtension({name:"bv_nodepack.regional_editor",settings:[{id:Xm,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=>Km(e)},{id:Gm,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=>Jm(e)},{id:up,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=>dp(e,!1)},{id:Nx,name:"Show BV Regional Legacy Ports",type:"boolean",defaultValue:!1,category:["BV Node Pack","Regional","Show Legacy ports"],tooltip:"Temporarily reveal every deprecated BV Regional port in the active workflow.",onChange:e=>Mx(!!e,Ne.graph)},{id:p_,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=>{g_(!!e).then(()=>{e&&Ks()}).catch(t=>console.error(t))}},{id:Gy,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=>nx(!!e)},{id:Ky,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=>rx(e)},{id:qy,name:"Completion Datasets",type:RR,defaultValue:"",category:["BV Node Pack","Prompting","Completion datasets"],tooltip:"Choose one or more local CSV/TSV datasets for BV Prompt Autocomplete.",onChange:e=>sx(e)}],commands:[{id:"bv.regional.openEditor",label:"Open BV Regional Editor",icon:"icon-[lucide--layers]",function:()=>{window.dispatchEvent(new CustomEvent(ef))}},{id:"bv.regional.toggleDebugWiring",label:"Toggle BV Regional Legacy wiring debug",icon:"icon-[lucide--workflow]",function:()=>{const e=Ne.canvas,t=PT(e?.graph??Ne.graph);t&&Rp(e),Ct({id:"bv-regional-debug-wiring",title:`Regional wiring debug ${t?"enabled":"disabled"}`,message:t?"Legacy ports and hidden V3 provider links are visible for this UI session.":"Legacy ports and V3 provider links returned to their normal presentation.",tone:"info",duration:3500})}},{id:"bv.debugBridge.publishSnapshot",label:"Refresh BV Debug Bridge Snapshot",icon:"icon-[lucide--radio-tower]",function:()=>h_().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(Qd))},{icon:"icon-[lucide--scan-search]",class:"bv-regional-action bv-regional-action-editor",tooltip:"Open last BV editor",onClick:LS},{icon:"icon-[lucide--layers]",class:"bv-regional-action bv-regional-action-quick",tooltip:"Quick edit BV Regional prompts",onClick:()=>window.dispatchEvent(new CustomEvent(tf))},{icon:"icon-[lucide--chevron-down]",class:"bv-regional-action bv-regional-action-menu",tooltip:"Choose BV window",onClick:e=>Ak(e?.currentTarget instanceof HTMLElement?e.currentTarget:void 0)}],beforeRegisterNodeDef(e,t){if(dS(e,t))return;const r=IT(t.name);if(r.length){const u=e.prototype.onNodeCreated,d=e.prototype.onConfigure,f=e.prototype.onConnectionsChange,p=e.prototype.onDeselected;e.prototype.onNodeCreated=function(){const g=u?.apply(this,arguments);return queueMicrotask(()=>Ml(this,r)),g},e.prototype.onConfigure=function(){const g=d?.apply(this,arguments);return queueMicrotask(()=>Ml(this,r)),g},e.prototype.onConnectionsChange=function(){const g=f?.apply(this,arguments);return queueMicrotask(()=>wn(this)),g},e.prototype.onDeselected=function(){const g=p?.apply(this,arguments);return zh(this),g}}if(lR(e,t)&&t.name!=="BV Regional Prompt")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 u=e.prototype.onNodeCreated,d=e.prototype.onRemoved;e.prototype.onNodeCreated=function(){const f=u?.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(ni),f},e.prototype.onRemoved=function(){const f=d?.apply(this,arguments);return queueMicrotask(ni),f}}if(HR.has(t.name)){const u=e.prototype.onNodeCreated,d=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const f=u?.apply(this,arguments);return queueMicrotask(()=>nb(this,t.name)),f},e.prototype.onConfigure=function(f){const p=d?.call(this,f);return queueMicrotask(()=>nb(this,t.name)),p}}if(t.name==="BV Detector Registry"){const u=g=>{const m=g.widgets?.find(y=>y.name==="config_json");if(!m)return;Fr(m);const _=pa(m.value),k=ga(_);String(m.value??"")!==k&&(m.value=k,m.callback?.(k)),uR(g,sn(g));let b=g.widgets?.find(y=>y.name==="configure_detector_registry");b||(b=g.addWidget("button","configure_detector_registry",null,()=>{Rr("detector",Le(g)),UR(Jt,m.value,y=>{m.value=y,u(g),g.graph?.setDirtyCanvas?.(!0,!0)},`detector-registry:${Le(g)}`,Nt("BV Detector Registry").filter(Rn).map(y=>({id:Le(y),label:`${y.title||"BV Detector Registry"} · #${y.id}`})),(y,w)=>{const x=Nt("BV Detector Registry").find(L=>Le(L)===y),T=x?.widgets?.find(L=>L.name==="configure_detector_registry");T&&cp(`detector-registry:${Le(g)}`,`detector-registry:${Le(x)}`,()=>T.callback?.(),w)},g).catch(y=>console.error(y))},{serialize:!1}),b.serialize=!1);const h=_.detectors.length;b.label=`Configure Detector Registry · ${h} Detector${h===1?"":"s"}`,g.setDirtyCanvas?.(!0,!0)},d=e.prototype.onNodeCreated,f=e.prototype.onConfigure,p=e.prototype.onConnectionsChange;e.prototype.onNodeCreated=function(){const g=d?.apply(this,arguments);return queueMicrotask(()=>{u(this),Nu(this)}),g},e.prototype.onConfigure=function(){const g=f?.apply(this,arguments);return queueMicrotask(()=>{u(this),Nu(this)}),g},e.prototype.onConnectionsChange=function(){const g=p?.apply(this,arguments);return queueMicrotask(()=>Nu(this)),g};return}if(t.name==="BV Regional Detailer Plan"){const u=e.prototype.onNodeCreated,d=e.prototype.onConfigure,f=e.prototype.onConnectionsChange;e.prototype.onNodeCreated=function(){const p=u?.apply(this,arguments);return queueMicrotask(()=>ib(this)),p},e.prototype.onConfigure=function(){const p=d?.apply(this,arguments);return queueMicrotask(()=>{Gd(Xd(this)),ib(this)}),p},e.prototype.onConnectionsChange=function(){const p=f?.apply(this,arguments);return queueMicrotask(()=>{Kd(this,sn(this)),rf(this)}),p};return}if(t.name==="BV Remote LLM Provider"){const u=e.prototype.onNodeCreated,d=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const f=u?.apply(this,arguments);return queueMicrotask(()=>Kh(this,Jt)),f},e.prototype.onConfigure=function(f){Array.isArray(f?.widgets_values)&&f.widgets_values.length>=6&&/^[A-Za-z_][A-Za-z0-9_]*$/.test(String(f.widgets_values[3]??""))&&(f={...f,widgets_values:[...f.widgets_values.slice(0,3),...f.widgets_values.slice(4)]});const p=d?.call(this,f);return queueMicrotask(()=>Kh(this,Jt)),p};return}if(t.name==="BV Named LoRA Stack"){const u=p=>{const g=p.widgets?.find(_=>_.name==="stack_id");if(!g)return;const m=String(g.value??"").trim();if(!m||bT(String(p.id),m,of())){const _=crypto.randomUUID();m&&(p.__bvLoraResourceIdRemap={[m]:_}),g.value=_,p.setDirtyCanvas?.(!0,!0)}Fr(g)},d=e.prototype.onNodeCreated,f=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const p=d?.apply(this,arguments);return u(this),p},e.prototype.onConfigure=function(){const p=f?.apply(this,arguments);return queueMicrotask(()=>u(this)),p};return}if(t.name==="BV Regional Image Send"||t.name==="BV Regional Image Save"){const u=e.prototype.onNodeCreated,d=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const f=u?.apply(this,arguments);return queueMicrotask(()=>ub(this,!0)),f},e.prototype.onConfigure=function(){const f=d?.apply(this,arguments);return queueMicrotask(()=>ub(this,!1)),f};return}if(["BV Regional Select","BV Regional Deconstructor","BV Regional Detailer Mask"].includes(t.name)){const u=e.prototype.onNodeCreated,d=e.prototype.onConfigure,f=e.prototype.onConnectionsChange;e.prototype.onNodeCreated=function(){const g=u?.apply(this,arguments);return lb(this),g};const p=e.prototype.onSerialize;e.prototype.onConfigure=function(g){t.name==="BV Regional Detailer Mask"&&(RS(this),g?.widgets_values&&(g={...g,widgets_values:MR(g.widgets_values)}));const m=d?.call(this,g);return queueMicrotask(()=>lb(this)),m},e.prototype.onSerialize=function(g){const m=p?.apply(this,arguments);return t.name==="BV Regional Detailer Mask"&&(g.widgets_values=OR(this.widgets)),m},e.prototype.onConnectionsChange=function(){const g=f?.apply(this,arguments);return queueMicrotask(()=>as(this)),g};return}if(t.name!=="BV Regional Prompt")return;const n=e.prototype.onNodeCreated,i=e.prototype.onConfigure,a=e.prototype.onConnectionsChange,l=e.prototype.onDeselected;e.prototype.onNodeCreated=function(){const u=n?.apply(this,arguments);db(this,!0);const d=this.widgets?.find(m=>m.name==="regional_json"),f=this.widgets?.find(m=>m.name==="lora_bindings_json"),p=this.widgets?.find(m=>m.name==="lora_v3_config_json"),g=this.widgets?.find(m=>m.name==="detailer_v3_config_json");if(f&&Fr(f),p&&ln(p),g&&ln(g),$s(this),Vh(this,sn(this)),d&&(Fr(d),!d.__bvRegionalDocumentHooked)){d.__bvRegionalDocumentHooked=!0;const m=d.callback;d.callback=function(){const _=m?.apply(this,arguments);return window.dispatchEvent(new CustomEvent(Lo)),_}}if(!this.widgets?.find(m=>m.name==="open_regional_editor")){const m=this.addWidget("button","open_regional_editor",null,()=>zr("regional",this),{serialize:!1});m.label="Open Regional Editor",m.serialize=!1}if(!this.widgets?.find(m=>m.name==="quick_edit_regional_prompts")){const m=this.addWidget("button","quick_edit_regional_prompts",null,()=>zr("quick",this),{serialize:!1});m.label="Quick Edit Prompts",m.serialize=!1}return Wa(this),Ml(this,[{direction:"output",name:"lora_bindings",type:"BV_REGIONAL_LORA_BINDINGS",guidance:"Use the BV_REGIONAL context output and v3 capability editors."}]),window.dispatchEvent(new CustomEvent(Lo)),u},e.prototype.onConfigure=function(){const u=i?.apply(this,arguments);Gd(Xd(this)),db(this,!1);const d=this.widgets?.find(g=>g.name==="lora_bindings_json"),f=this.widgets?.find(g=>g.name==="lora_v3_config_json"),p=this.widgets?.find(g=>g.name==="detailer_v3_config_json");return d&&Fr(d),f&&ln(f),p&&ln(p),$s(this),Vh(this,sn(this)),Wa(this),Ml(this,[{direction:"output",name:"lora_bindings",type:"BV_REGIONAL_LORA_BINDINGS",guidance:"Use the BV_REGIONAL context output and v3 capability editors."}]),window.dispatchEvent(new CustomEvent(Lo)),u},e.prototype.onConnectionsChange=function(){const u=a?.apply(this,arguments);return queueMicrotask(()=>wn(this)),u},e.prototype.onDeselected=function(){const u=l?.apply(this,arguments);return zh(this),u};const c=e.prototype.onRemoved;e.prototype.onRemoved=function(){const u=c?.apply(this,arguments);return window.dispatchEvent(new CustomEvent(Lo)),u}},afterConfigureGraph(){Ks(),queueMicrotask(ni)}}); + 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}},D(Et,"TYPE","tab"),D(Et,"attributeDefinitions",Et.createAttributeDefinitions()),Et),po={width:"1em",height:"1em",display:"flex",alignItems:"center"},es=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:po,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"})]});es.displayName="CloseIcon";var lx=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:po,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"})]});lx.displayName="PinIcon";var sx=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:po,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"})]});sx.displayName="MaximizeIcon";var cx=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:po,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"})]});cx.displayName="OverflowIcon";var ux=()=>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"})});ux.displayName="EdgeIcon";var Rd=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:po,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"})]});Rd.displayName="PopoutIcon";var dx=()=>s.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 -960 960 960",style:po,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"})});dx.displayName="PopoutFloatIcon";var fx=()=>s.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",style:po,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"})});fx.displayName="GripIcon";var px=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:po,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"})]});px.displayName="RestoreIcon";var gx=()=>s.jsx("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:po,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"})});gx.displayName="AsterickIcon";var hx=e=>{const{controller:t,show:r}=e;return s.jsx("div",{"aria-hidden":"true",className:t.getClassName(V.FLEXLAYOUT__LAYOUT_OVERLAY),style:{display:r?"flex":"none"}})};hx.displayName="Overlay";var De=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}({}),Ba=e=>{const{controller:t,tabNode:r}=e,o=t.getClassName,n=o(V.FLEXLAYOUT__TAB_BUTTON_STAMP),i=fp(t,r),a=i.content?s.jsx("div",{className:o(V.FLEXLAYOUT__TAB_BUTTON_CONTENT),children:i.content}):r.getNameForOverflowMenu(),l=i.leading?s.jsx("div",{className:o(V.FLEXLAYOUT__TAB_BUTTON_LEADING),children:i.leading}):null;return s.jsxs("div",{className:n,title:r.getHelpText(),children:[l,a]})};Ba.displayName="TabButtonStamp";var Ak=500;function vc(e){return typeof e.getBoundingClientRect=="function"}function bx(e){return e.container?e.container:vc(e.anchor)?e.anchor.ownerDocument.body:document.body}function Dk(e){if(vc(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 Ik(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=bx(e),u=v.useRef(null),d=v.useRef(null),f=v.useRef({buffer:"",timer:void 0});v.useEffect(()=>()=>{f.current.timer&&clearTimeout(f.current.timer)},[]);const p=v.useCallback(b=>{b.disabled||((b.onSelect??o)?.(b),n())},[o,n]);v.useEffect(()=>{(d.current?.querySelector('[role="menuitem"]:not([aria-disabled="true"])')??d.current)?.focus();const b=e.returnFocusTo??(vc(t)?t:void 0);return()=>{b?.focus?.()}},[]),v.useEffect(()=>{const b=c.ownerDocument,h=x=>{u.current?.contains(x.target)||n()};return b.addEventListener("pointerdown",h),()=>b.removeEventListener("pointerdown",h)},[c,n]);const g=b=>{const h=Array.from(d.current?.querySelectorAll('[role="menuitem"]:not([aria-disabled="true"])')??[]),x=b.target.closest?.('[role="menuitem"]'),w=x?h.indexOf(x):-1;if(b.key==="Escape"||b.key==="Tab")n(),b.preventDefault();else if(b.key==="ArrowDown"||b.key==="ArrowUp")h.length>0&&h[(w+(b.key==="ArrowDown"?1:-1)+h.length)%h.length]?.focus(),b.preventDefault();else if(b.key==="Home"||b.key==="End")(b.key==="Home"?h[0]:h[h.length-1])?.focus(),b.preventDefault();else if(b.key.length===1&&b.key!==" "&&!b.ctrlKey&&!b.metaKey&&!b.altKey){const y=f.current;y.timer&&clearTimeout(y.timer),y.buffer+=b.key.toLowerCase(),y.timer=setTimeout(()=>{y.buffer=""},Ak);const T=[...y.buffer].every(P=>P===y.buffer[0]),L=T?y.buffer[0]:y.buffer,U=T?w+1:Math.max(w,0);for(let P=0;P({select:()=>p(b),close:n}),_=b=>s.jsx("div",{className:l(V.FLEXLAYOUT__POPUP_MENU_ITEM)+(b.disabled?" "+l(V.FLEXLAYOUT__POPUP_MENU_ITEM__DISABLED):""),role:"menuitem",tabIndex:-1,"aria-disabled":b.disabled||void 0,onClick:h=>{p(b),h.stopPropagation()},children:b.content??s.jsxs(s.Fragment,{children:[b.icon,b.label]})},b.key),k=s.jsx("div",{ref:u,className:l(V.FLEXLAYOUT__POPUP_MENU_CONTAINER),style:Ik(Dk(t),c.getBoundingClientRect()),children:s.jsx("div",{ref:d,className:l(V.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(V.FLEXLAYOUT__POPUP_MENU_DIVIDER),role:"separator"},b.key):i?i(b,h,m(b)):_(b))})});return hr.createPortal(k,c)};function jk(e){const t=bx(e),r=vc(e.anchor)?e.anchor.getBoundingClientRect():e.anchor,o=t.ownerDocument.createElement("div");t.appendChild(o);const n=wi(o);let i=!1;const a=()=>{i||(i=!0,n.unmount(),o.remove(),e.onClose())};return n.render(s.jsx(vx,{...e,anchor:r,container:t,onClose:a})),a}function mx(e,t,r,o,n,i){const a=n.getClassName,l=r.map(u=>({key:u.node.getId()}));n.showOverlayOnAllWindows(!0);const c=(u,d,f)=>{const p=r[d];let g=a(V.FLEXLAYOUT__POPUP_MENU_ITEM);return t.getSelected()===p.index&&(g+=" "+a(V.FLEXLAYOUT__POPUP_MENU_ITEM__SELECTED)),s.jsx("div",{className:g,role:"menuitem","aria-label":p.node.getNameForOverflowMenu(),tabIndex:-1,"data-layout-path":"/popup-menu/tb"+d,onClick:m=>{f.select(),m.stopPropagation()},draggable:!0,onDragStart:m=>{m.stopPropagation(),n.getDragDropManager().setDragNode(m.nativeEvent,p.node),setTimeout(()=>f.close(),0)},onDragEnd:()=>n.getDragDropManager().onDragEnded(),title:p.node.getHelpText(),children:s.jsx(Ba,{tabNode:p.node,controller:n})},u.key)};return jk({anchor:e,container:n.getRootDiv()??void 0,classNameMapper:a,returnFocusTo:e,title:n.i18nName(De.Overflow_Menu_Tooltip),items:l,onSelect:u=>{const d=l.indexOf(u);d>=0&&o(r[d])},renderItem:c,onClose:()=>{n.showOverlayOnAllWindows(!1),i?.()}})}vx.displayName="PopupMenu";var xx=e=>{const{controller:t,tabNode:r,selected:o,path:n}=e,i=v.useRef(null),a=v.useRef(null),l=t.getIcons(),c=t.getKeyMap(),u=t.getEditingTab()===r,d=v.useCallback(z=>{i.current=z,t.registerMeasurable(r,"tabbutton",z)},[t,r]);v.useLayoutEffect(()=>{u&&a.current.select()},[u]),v.useEffect(()=>{if(u){const z=t.getCurrentDocument().body,Z=Y=>{Y.target!==a.current&&t.setEditingTab(void 0)};return z.addEventListener("pointerdown",Z),()=>z.removeEventListener("pointerdown",Z)}},[u,t]);const f=z=>{r.isEnableDrag()?(z.stopPropagation(),t.getDragDropManager().setDragNode(z.nativeEvent,r)):z.preventDefault()},p=z=>{t.getDragDropManager().onDragEnded()},g=z=>{Pa(z)&&t.auxMouseClick(r,z)},m=z=>{t.showContextMenu(r,z)},_=()=>{r.isSelected()||t.doAction(oe.selectTab(r.getId()))},k=z=>{const Z=i.current?.closest('[role="tablist"]');if(Z){const Y=Array.from(Z.querySelectorAll('[role="tab"]'));Y[Y.indexOf(i.current)+z]?.focus()}},b=()=>{const z=i.current.ownerDocument,Z=()=>rx(z.getElementById(Lt("flexlayout-tab-",r.getId())));o?Z():(_(),requestAnimationFrame(Z))},h=z=>{u||(no(z,c.focusTabToggle)?(b(),z.preventDefault()):z.key==="Enter"||z.key===" "?(o?b():_(),z.preventDefault()):(z.key==="ArrowLeft"||z.key==="ArrowUp")&&!ja(z)?(k(-1),z.preventDefault()):(z.key==="ArrowRight"||z.key==="ArrowDown")&&!ja(z)?(k(1),z.preventDefault()):no(z,c.closeTab)&&r.isCloseable()?(k(1),t.doAction(oe.deleteTab(r.getId())),z.preventDefault()):no(z,c.renameTab)&&r.isEnableRename()&&(w(),z.preventDefault()))},x=z=>{r.isEnableRename()&&(w(),z.stopPropagation())},w=()=>{t.setEditingTab(r)},y=()=>{const z=r.getCloseType();return!!(o||z===fn.Always||z===fn.Visible&&window.matchMedia&&window.matchMedia("(hover: hover) and (pointer: fine)").matches)},T=z=>{y()&&(t.doAction(oe.deleteTab(r.getId())),z.stopPropagation())},L=z=>{z.stopPropagation()},U=z=>{z.stopPropagation()},P=z=>{z.code==="Escape"?(t.setEditingTab(void 0),i.current?.focus()):(z.code==="Enter"||z.code==="NumpadEnter")&&(t.setEditingTab(void 0),t.doAction(oe.renameTab(r.getId(),z.target.value)),i.current?.focus())},j=t.getClassName,M=r.getParent(),O=M.isEnableSingleTabStretch()&&M.getChildren().length===1,E=O?V.FLEXLAYOUT__TAB_BUTTON_STRETCH:V.FLEXLAYOUT__TAB_BUTTON;let B=j(E);B+=" "+j(E+"_"+M.getTabLocation()),O||(o?B+=" "+j(E+"--selected"):B+=" "+j(E+"--unselected")),r.isPinned()&&(B+=" "+j(E+"--pinned")),r.getClassName()!==void 0&&(B+=" "+r.getClassName());const C=fp(t,r),S=o||M.getSelectedNode()===void 0&&M.getChildren()[0]===r,N=[jo(c.focusTabToggle),r.isCloseable()?jo(c.closeTab):void 0,r.isEnableRename()?jo(c.renameTab):void 0].filter(Boolean).join(" ")||void 0;let A=C.content?s.jsx("div",{className:j(V.FLEXLAYOUT__TAB_BUTTON_CONTENT),children:C.content}):null;const F=C.leading?s.jsx("div",{className:j(V.FLEXLAYOUT__TAB_BUTTON_LEADING),children:C.leading}):null;if(u&&(A=s.jsx("input",{ref:a,className:j(V.FLEXLAYOUT__TAB_BUTTON_TEXTBOX),"data-layout-path":n+"/textbox",type:"text","aria-label":t.i18nName(De.Rename_Tab),autoFocus:!0,defaultValue:r.getName(),onKeyDown:P,onPointerDown:U})),r.isPinned()){const z=t.i18nName(De.Pinned_Tab);C.buttons.push(s.jsx("div",{"data-layout-path":n+"/button/pin",title:z,"aria-hidden":"true",className:j(V.FLEXLAYOUT__TAB_BUTTON_PIN),children:typeof l.pin=="function"?l.pin(r):l.pin},"pin"))}if(r.isCloseable()&&!O){const z=t.i18nName(De.Close_Tab);C.buttons.push(s.jsx("div",{"data-layout-path":n+"/button/close",title:z,"aria-hidden":"true",className:j(V.FLEXLAYOUT__TAB_BUTTON_TRAILING),onPointerDown:L,onClick:T,children:typeof l.close=="function"?l.close(r):l.close},"close"))}return s.jsxs("div",{ref:d,id:Lt("flexlayout-tabbutton-",r.getId()),role:u?void 0:"tab","aria-selected":u?void 0:o,"aria-controls":u?void 0:Lt("flexlayout-tab-",r.getId()),"aria-label":u?void 0:r.isPinned()?C.name+" ("+t.i18nName(De.Pinned_Tab)+")":C.name,"aria-keyshortcuts":u?void 0:N,tabIndex:u?-1:S?0:-1,onKeyDown:h,"data-layout-path":n,className:B,onClick:_,onAuxClick:g,onContextMenu:m,title:r.getHelpText(),draggable:!0,onDragStart:f,onDragEnd:p,onDoubleClick:x,children:[F,A,C.buttons]})};xx.displayName="TabButton";var yx=(e,t,r,o,n,i,a)=>{const[l,c]=v.useState([]),[u,d]=v.useState(!1),[f,p]=v.useState(!1),g=v.useRef(!1),m=v.useRef(void 0),_=v.useRef([]),k=v.useRef(0),b=v.useRef(!1);v.useEffect(()=>()=>{m.current!==void 0&&clearTimeout(m.current)},[]),v.useLayoutEffect(()=>{_.current=l});const h=v.useCallback(q=>{r===we.HORZ?o.current.scrollLeft=q:o.current.scrollTop=q},[r,o]),x=v.useCallback(q=>r===we.HORZ?q.scrollLeft:q.scrollTop,[r]),w=v.useCallback(q=>r===we.HORZ?q.clientWidth:q.clientHeight,[r]),y=v.useCallback(q=>r===we.HORZ?q.scrollWidth:q.scrollHeight,[r]),T=v.useCallback(q=>r===we.HORZ?q.width:q.height,[r]),L=v.useCallback(q=>r===we.HORZ?q.x:q.y,[r]),U=v.useCallback(q=>r===we.HORZ?q.right:q.bottom,[r]),P=v.useCallback(()=>{const q=[];if(o.current){const Q=o.current,H=Q.getBoundingClientRect(),ee=L(H)-1,ne=U(H)+1,le=Q.firstElementChild;let Ne=0;Array.from(le.children).forEach(Ee=>{const ve=Ee.getBoundingClientRect();Ee.classList.contains(a)&&((L(ve)ne)&&q.push(Ne),Ne++)})}return q},[a,o,L,U]),j=v.useCallback(()=>{if(o.current&&n.current){const q=o.current,Q=n.current,H=w(q),ee=y(q),ne=x(q);if(ee>H&&ee>0){let le=H*H/ee,Ne=0;le<20&&(Ne=20-le,le=20);const Ee=ne*(H-Ne)/ee;r===we.HORZ?(Q.style.width=le+"px",Q.style.left=Ee+"px"):(Q.style.height=le+"px",Q.style.top=Ee+"px"),Q.style.display="block"}else Q.style.display="none";r===we.HORZ?Q.style.bottom="0px":Q.style.right="0px"}},[r,o,n,w,y,x]),M=v.useCallback((q=!1)=>{const Q=P(),H=Q.length>0;H!==u&&d(H),q?c(Q):m.current===void 0&&(m.current=setTimeout(()=>{const ee=P();Pk(ee,_.current)||c(ee),m.current=void 0},100))},[P,u]),O=v.useCallback(()=>{const q=t.getSelectedNode();if(q&&o.current){const Q=e.getBoundingClientRect(o.current),H=o.current.ownerDocument.getElementById(Lt("flexlayout-tabbutton-",q.getId()));if(!H)return;const ee=e.getBoundingClientRect(H);let ne=L(Q)-L(ee);ne>0||T(ee)>T(Q)?(h(x(o.current)-ne),b.current=!0):(ne=U(ee)-U(Q),ne>0&&(h(x(o.current)+ne),b.current=!0))}},[t,e,o,L,U,T,x,h]),E=v.useCallback(()=>{if(o.current){const q=o.current;let Q=0;for(const ee of Array.from(q.children))Q+=w(ee);const H=Q+(f?10:0)>w(o.current);H!==f&&p(H)}},[o,f,w]),B=v.useCallback(()=>{b.current||(g.current=!0),b.current=!1,j(),M()},[j,M]),C=v.useCallback((q,Q)=>{if(o.current&&n.current){const H=o.current,ee=n.current,ne=w(H),le=y(H),Ne=w(ee),Ee=H.getBoundingClientRect();let ve;if(r===we.HORZ?ve=q-Ee.x-k.current:ve=Q-Ee.y-k.current,ve=Math.max(0,Math.min(le-Ne,ve)),ne>0){const Bt=ve*le/ne;h(Bt)}}},[o,n,r,w,y,h]),S=v.useCallback(()=>{},[]),N=v.useCallback(()=>{},[]),A=v.useCallback(q=>{q.stopPropagation(),n.current.setPointerCapture(q.pointerId);const Q=n.current.getBoundingClientRect();r===we.HORZ?k.current=q.clientX-Q.x:k.current=q.clientY-Q.y,Ds(q.currentTarget.ownerDocument,q,C,S,N)},[n,r,C,S,N]),F=v.useCallback(q=>{if(o.current){if(t.getChildren().length===0)return;let Q;if(Math.abs(q.deltaY)>0){Q=-q.deltaY,q.deltaMode===1&&(Q*=40);const H=x(o.current)-Q,ee=y(o.current)-w(o.current);h(Math.max(0,Math.min(ee,H))),q.stopPropagation()}}},[t,o,x,y,w,h]),z=v.useCallback(q=>{q.preventDefault()},[]),Z=t.getId(),Y=t.getSelectedNode();return v.useLayoutEffect(()=>{o.current&&h(0)},[Z,o,h]),v.useLayoutEffect(()=>{g.current=!1},[Y]),v.useLayoutEffect(()=>{E(),g.current===!1&&O(),j(),M(!0),requestAnimationFrame(()=>{M()})},[E,O,j,M,r,Y]),v.useLayoutEffect(()=>{const q=o.current;if(!q)return;const Q=new q.ownerDocument.defaultView.ResizeObserver(()=>{g.current=!1,E(),O(),j(),M()});return Q.observe(q),()=>Q.disconnect()},[E,O,j,M,o]),v.useEffect(()=>{if(t instanceof Oe&&t.isEnableTabWrap())return;const q=i.current;return q?.addEventListener("wheel",z,{passive:!1}),()=>{q?.removeEventListener("wheel",z)}}),{userControlledPositionRef:g,onScroll:B,onScrollPointerDown:A,hiddenTabs:l,onMouseWheel:F,isDockStickyButtons:f,isShowHiddenTabs:u}};function Pk(e,t){return e.length===t.length&&e.every((r,o)=>r===t[o])}var _x=e=>{const{tabsetNode:t,controller:r}=e,o=v.useRef(null),n=v.useRef(null),i=v.useRef(null),a=v.useRef(null),l=v.useRef(null),c=v.useRef(null),u=v.useRef(null),d=v.useRef(null),[f,p]=v.useState(!1),g=v.useRef(null),m=r.getIcons();v.useEffect(()=>()=>g.current?.(),[]);const{userControlledPositionRef:_,onScroll:k,onScrollPointerDown:b,hiddenTabs:h,onMouseWheel:x,isDockStickyButtons:w,isShowHiddenTabs:y}=yx(r,t,we.HORZ,a,i,n,r.getClassName(V.FLEXLAYOUT__TAB_BUTTON)),T=v.useCallback(G=>{o.current=G,r.registerMeasurable(t,"tabset",G)},[r,t]),L=v.useCallback(G=>{n.current=G,r.registerMeasurable(t,"tabstrip",G)},[r,t]),U=v.useCallback(G=>{l.current=G,r.registerMeasurable(t,"tabsetcontent",G)},[r,t]),P=G=>{const fe=r.getShowOverflowMenu(),pe=h.map(ge=>({index:ge,node:t.getChildren()[ge]}));if(fe!==void 0)fe(t,G,pe,j);else{const ge=u.current;p(!0),g.current=mx(ge,t,pe,j,r,()=>{p(!1),g.current=null})}G.stopPropagation()},j=G=>{r.doAction(oe.selectTab(G.node.getId())),_.current=!1},M=G=>{r.getEditingTab()?G.preventDefault():t.isEnableDrag()?(G.stopPropagation(),r.getDragDropManager().setDragNode(G.nativeEvent,t)):G.preventDefault()},O=G=>{!Pa(G)&&!t.isActive()&&r.doAction(oe.setActiveTabset(t.getId(),r.getLayoutId()))},E=G=>{Pa(G)&&r.auxMouseClick(t,G)},B=G=>{r.showContextMenu(t,G)},C=G=>{G.stopPropagation()},S=G=>{t.canMaximize()&&r.maximize(t),G.stopPropagation()},N=G=>{r.doAction(oe.deleteTabset(t.getId())),G.stopPropagation()},A=G=>{r.doAction(oe.deleteTab(t.getChildren()[0].getId())),G.stopPropagation()},F=G=>{q!==void 0&&r.doAction(oe.popoutTab(q.getId(),"window")),G.stopPropagation()},z=G=>{q!==void 0&&r.doAction(oe.popoutTab(q.getId(),"float")),G.stopPropagation()},Z=G=>{t.canMaximize()&&r.maximize(t)},Y=r.getClassName,q=t.getSelectedNode(),Q=t.getPath(),H=()=>{const G=[];let fe=!1;if(t.isEnableTabStrip()){const pe=t.isEnableSingleTabStretch()&&t.getChildren().length===1;for(let ge=0;ge{let G,fe=[],pe=[];const ge={leading:G,stickyButtons:fe,buttons:pe,overflowPosition:void 0};r.customizeTabSet(t,ge),G=ge.leading,fe=ge.stickyButtons,pe=ge.buttons;const xe=t.isEnableSingleTabStretch()&&t.getChildren().length===1;let Qe=xe&&t.getChildren()[0].isCloseable()||t.isCloseable();Qe=Qe&&t.isEnableCloseButton(),ge.overflowPosition===void 0&&(ge.overflowPosition=fe.length);let He;if(fe.length>0&&(!t.isEnableTabWrap()&&(w||xe)?pe=[...fe,...pe]:He=s.jsx("div",{ref:d,onPointerDown:C,onDragStart:_e=>{_e.preventDefault()},className:Y(V.FLEXLAYOUT__TAB_TOOLBAR_STICKY_BUTTONS_CONTAINER),children:fe},"sticky_buttons_container")),!t.isEnableTabWrap()&&y){const _e=r.i18nName(De.Overflow_Menu_Tooltip);let qe;if(typeof m.more=="function"){const me=h.map(Mt=>({index:Mt,node:t.getChildren()[Mt]}));qe=m.more(t,me)}else qe=s.jsxs(s.Fragment,{children:[m.more,s.jsx("div",{className:Y(V.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":Q+"/button/overflow","aria-haspopup":"menu","aria-expanded":f,"aria-label":_e,ref:u,className:Y(V.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(V.FLEXLAYOUT__TAB_BUTTON_OVERFLOW),title:_e,onClick:P,onPointerDown:C,children:qe},"overflowbutton"))}if(q!==void 0&&!q.isPinned()){if(q.isEnablePopoutFloatIcon()){const _e=r.i18nName(De.Popout_Tab_Float);pe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Q+"/button/popout-float",title:_e,"aria-label":_e,className:Y(V.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(V.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_FLOAT),onClick:z,onPointerDown:C,children:typeof m.popoutFloat=="function"?m.popoutFloat(q):m.popoutFloat},"popout-float"))}if(r.isSupportsPopout()&&q.isAllowedInWindow()&&q.isEnablePopoutIcon()){const _e=r.i18nName(De.Popout_Tab);pe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Q+"/button/popout",title:_e,"aria-label":_e,className:Y(V.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(V.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_FLOAT),onClick:F,onPointerDown:C,children:typeof m.popout=="function"?m.popout(q):m.popout},"popout"))}}if(t.canMaximize()){const _e=r.i18nName(De.Restore),qe=r.i18nName(De.Maximize);pe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Q+"/button/max",title:t.isMaximized()?_e:qe,"aria-label":t.isMaximized()?_e:qe,"aria-pressed":t.isMaximized(),className:Y(V.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(V.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_+(t.isMaximized()?"max":"min")),onClick:S,onPointerDown:C,children:t.isMaximized()?typeof m.restore=="function"?m.restore(t):m.restore:typeof m.maximize=="function"?m.maximize(t):m.maximize},"max"))}if(!t.isMaximized()&&Qe){const _e=xe?r.i18nName(De.Close_Tab):r.i18nName(De.Close_Tabset);pe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Q+"/button/close",title:_e,"aria-label":_e,className:Y(V.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(V.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_CLOSE),onClick:xe?A:N,onPointerDown:C,children:typeof m.closeTabset=="function"?m.closeTabset(t):m.closeTabset},"close"))}if(t.isActive()&&t.isEnableActiveIcon()){const _e=r.i18nName(De.Active_Tabset);pe.push(s.jsx("div",{"data-layout-path":Q+"/button/active",title:_e,"aria-hidden":"true",className:Y(V.FLEXLAYOUT__TAB_TOOLBAR_ICON),children:typeof m.activeTabset=="function"?m.activeTabset(t):m.activeTabset},"active"))}const Be=s.jsx("div",{ref:c,className:Y(V.FLEXLAYOUT__TAB_TOOLBAR),onPointerDown:C,onDragStart:_e=>{_e.preventDefault()},children:pe},"buttonbar");return{leading:G,buttonbar:Be,stickyBar:He}},ne=(G,fe,pe,ge)=>{let xe;const Qe=r.getKeyMap(),He=[jo(Qe.focusNextTabset),jo(Qe.focusPreviousTabset)].filter(Boolean).join(" ")||void 0,Be=r.getEditingTab()?.getParent()===t,_e=Be?void 0:"tablist";let qe=Y(V.FLEXLAYOUT__TABSET_TABBAR_OUTER);t.getClassNameTabStrip()!==void 0&&(qe+=" "+t.getClassNameTabStrip()),qe+=" "+V.FLEXLAYOUT__TABSET_TABBAR_OUTER_+t.getTabLocation(),t.isActive()&&(qe+=" "+Y(V.FLEXLAYOUT__TABSET_SELECTED)),t.isMaximized()&&(qe+=" "+Y(V.FLEXLAYOUT__TABSET_MAXIMIZED));const me=t.isEnableSingleTabStretch()&&t.getChildren().length===1;if(me){const nr=t.getChildren()[0];nr.getTabSetClassName()!==void 0&&(qe+=" "+nr.getTabSetClassName())}let Mt;if(fe&&(Mt=s.jsx("div",{className:Y(V.FLEXLAYOUT__TABSET_LEADING),children:fe})),t.isEnableTabWrap())t.isEnableTabStrip()&&(xe=s.jsxs("div",{className:qe,style:{flexWrap:"wrap",gap:"1px",marginTop:"2px"},ref:L,"data-layout-path":Q+"/tabstrip",onPointerDown:O,onDoubleClick:Z,onContextMenu:B,onClick:E,onAuxClick:E,draggable:!0,onDragStart:M,children:[Mt,s.jsx("div",{role:_e,"aria-orientation":Be?void 0:"horizontal","aria-label":Be?void 0:t.getName(),"aria-keyshortcuts":Be?void 0:He,style:{display:"contents"},children:G}),ge,s.jsx("div",{style:{flexGrow:1,display:"flex",justifyContent:"flex-end"},children:pe})]}));else if(t.isEnableTabStrip()){let nr;t.isEnableTabScrollbar()&&(nr=s.jsx("div",{ref:i,"aria-hidden":"true",className:Y(V.FLEXLAYOUT__MINI_SCROLLBAR),onPointerDown:b})),xe=s.jsxs("div",{className:qe,ref:L,"data-layout-path":Q+"/tabstrip",onPointerDown:O,onDoubleClick:Z,onContextMenu:B,onClick:E,onAuxClick:E,draggable:!0,onWheel:x,onDragStart:M,children:[Mt,s.jsxs("div",{className:Y(V.FLEXLAYOUT__MINI_SCROLLBAR_CONTAINER),children:[s.jsxs("div",{ref:a,className:Y(V.FLEXLAYOUT__TABSET_TABBAR_INNER)+" "+Y(V.FLEXLAYOUT__TABSET_TABBAR_INNER_+t.getTabLocation()),style:{overflowX:"auto",overflowY:"hidden"},onScroll:k,children:[s.jsx("div",{style:{width:me?"100%":"none"},role:_e,"aria-orientation":Be?void 0:"horizontal","aria-label":Be?void 0:t.getName(),"aria-keyshortcuts":Be?void 0:He,className:Y(V.FLEXLAYOUT__TABSET_TABBAR_INNER_TAB_CONTAINER)+" "+Y(V.FLEXLAYOUT__TABSET_TABBAR_INNER_TAB_CONTAINER_+t.getTabLocation()),children:G}),ge]}),nr]}),pe]})}return xe},le=G=>{let fe;if(t.getChildren().length===0){const ge=r.getTabSetPlaceHolderCallback();ge&&(fe=ge(t))}let pe=s.jsx("div",{ref:U,className:Y(V.FLEXLAYOUT__TABSET_CONTENT),children:fe});return t.getTabLocation()==="top"?pe=s.jsxs(s.Fragment,{children:[G,pe]}):pe=s.jsxs(s.Fragment,{children:[pe,G]}),pe},Ne=H(),{leading:Ee,buttonbar:ve,stickyBar:Bt}=ee(),X=le(ne(Ne,Ee,ve,Bt)),ue={flexGrow:Math.max(1,t.getWeight()*1e3),minWidth:t.getMinWidth(),minHeight:t.getMinHeight(),maxWidth:t.getMaxWidth(),maxHeight:t.getMaxHeight()};t.getModel().getMaximizedTabset(r.getLayoutId())!==void 0&&!t.isMaximized()&&(ue.display="none");const se=s.jsx("div",{ref:T,className:Y(V.FLEXLAYOUT__TABSET_CONTAINER),style:ue,children:s.jsx("div",{className:Y(V.FLEXLAYOUT__TABSET),"data-layout-path":Q,children:X})});return t.isMaximized()&&r.getMainElement()?hr.createPortal(s.jsx("div",{style:{position:"absolute",display:"flex",top:0,left:0,bottom:0,right:0},children:se}),r.getMainElement()):se};_x.displayName="TabSet";var ca=e=>{const{controller:t,node:r,index:o,horizontal:n}=e,i=v.useRef(null),a=v.useRef(null),l=v.useRef([]),c=v.useRef(void 0),u=v.useRef(void 0),d=v.useRef(0),f=v.useRef(0),p=v.useRef({initialSizes:[],sum:0,startPosition:0}),g=v.useCallback(O=>{O.preventDefault(),O.stopImmediatePropagation()},[]);v.useEffect(()=>{const O=i.current,E=a.current;return O?.addEventListener("touchstart",g,{passive:!1}),E?.addEventListener("touchstart",g,{passive:!1}),()=>{O?.removeEventListener("touchstart",g),E?.removeEventListener("touchstart",g)}},[g]);const m=O=>{O.stopPropagation(),r instanceof Ve&&(p.current=r.getSplitterInitials(o)),Jl(!1,t.getCurrentDocument()),Ds(O.currentTarget.ownerDocument,O,b,h,k),l.current=r instanceof Je?r.getSplitterBounds(!0):r.getSplitterBounds(o);const E=t.getRootDiv();c.current=t.getCurrentDocument().createElement("div"),c.current.style.flexDirection=n?"row":"column",c.current.className=t.getClassName(V.FLEXLAYOUT__SPLITTER_DRAG)+(r instanceof Je?" "+t.getClassName(V.FLEXLAYOUT__SPLITTER_BORDER):""),c.current.style.cursor=r.getOrientation()===we.VERT?"ns-resize":"ew-resize",u.current=t.getCurrentDocument().createElement("div"),u.current.className=y(V.FLEXLAYOUT__SPLITTER_HANDLE)+" "+y(n?V.FLEXLAYOUT__SPLITTER_HANDLE_HORZ:V.FLEXLAYOUT__SPLITTER_HANDLE_VERT),c.current.appendChild(u.current);const B=i.current.getBoundingClientRect(),C=new he(B.x-t.getDomRect().x,B.y-t.getDomRect().y,B.width,B.height);d.current=O.clientX-B.x,f.current=O.clientY-B.y,C.positionElement(c.current),E&&E.appendChild(c.current)},_=O=>{if(ja(O))return;let E=0;if(n?(O.key==="ArrowLeft"&&(E=-10),O.key==="ArrowRight"&&(E=10)):(O.key==="ArrowUp"&&(E=-10),O.key==="ArrowDown"&&(E=10)),E!==0)if(O.preventDefault(),r instanceof Je){const B=r.getLocation(),C=B===te.BOTTOM||B===te.RIGHT?-E:E,S=Math.max(r.getMinSize(),Math.min(r.getMaxSize(),r.getSize()+C));t.doAction(oe.adjustBorderSplit(r.getId(),S))}else{const B=r.getSplitterInitials(o);if(B.sum<=0)return;const C=r.getSplitterBounds(o),S=Math.max(C[0],Math.min(C[1],B.startPosition+E)),N=r.calculateSplit(o,S,B.initialSizes,B.sum,B.startPosition);t.doAction(oe.adjustWeights(r.getId(),N))}},k=()=>{const O=t.getRootDiv();O&&c.current&&O.removeChild(c.current),c.current=void 0,Jl(!0,t.getCurrentDocument())},b=(O,E)=>{if(c.current){const B=t.getDomRect();if(!B)return;r.getOrientation()===we.VERT?c.current.style.top=w(E-B.y-f.current)+"px":c.current.style.left=w(O-B.x-d.current)+"px",t.isRealtimeResize()&&x(!0)}},h=()=>{if(c.current){x(!1);const O=t.getRootDiv();O&&c.current&&O.removeChild(c.current),c.current=void 0}Jl(!0,t.getCurrentDocument())},x=O=>{(()=>{if(c.current){let B;if(r.getOrientation()===we.VERT?B=c.current.offsetTop:B=c.current.offsetLeft,r instanceof Je){const C=r.calculateSplit(r,B);t.doAction(oe.adjustBorderSplit(r.getId(),C).setAdjusting(O))}else{const C=p.current;if(C.sum<=0)return;const S=r.calculateSplit(o,B,C.initialSizes,C.sum,C.startPosition);t.doAction(oe.adjustWeights(r.getId(),S).setAdjusting(O))}}})()},w=O=>{const E=l.current;let B=O;return OE[1]&&(B=E[1]),B},y=t.getClassName,T={cursor:n?"ew-resize":"ns-resize",flexDirection:n?"column":"row"};let L=y(V.FLEXLAYOUT__SPLITTER)+" "+y(V.FLEXLAYOUT__SPLITTER_+r.getOrientation().getName());r instanceof Je?L+=" "+y(V.FLEXLAYOUT__SPLITTER_BORDER):r.getModel().getMaximizedTabset(t.getLayoutId())!==void 0&&(T.display="none"),tx()||(T["--splitter-active-size"]="30px");let U,P,j,M;if(r instanceof Ve){const O=r.getRect(),E=r.getChildren()[o-1],B=n?O.width:O.height;if(E&&B>0){const C=E.getRect();U=Math.round((n?C.getRight()-O.x:C.getBottom()-O.y)/B*100),P=0,j=100,M=U+"%"}}else U=Math.round(r.getSize()),P=Math.round(r.getMinSize()),j=Math.round(r.getMaxSize()),M=U+"px";return s.jsx("div",{className:L,style:T,ref:i,role:"separator","aria-label":t.i18nName(De.Splitter),"aria-orientation":n?"vertical":"horizontal","aria-valuenow":U,"aria-valuemin":P,"aria-valuemax":j,"aria-valuetext":M,tabIndex:0,onKeyDown:_,"data-layout-path":r.getPath()+"/s"+(o-1),onPointerDown:m,children:s.jsx("div",{className:y(V.FLEXLAYOUT__SPLITTER_HANDLE)+" "+y(n?V.FLEXLAYOUT__SPLITTER_HANDLE_HORZ:V.FLEXLAYOUT__SPLITTER_HANDLE_VERT)})})};ca.displayName="Splitter";var pp=e=>{const{controller:t,rowNode:r}=e,o=v.useRef(null),n=r.getOrientation()===we.HORZ,i=v.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(ca,{controller:t,node:r,index:l,horizontal:n},"splitter"+l)),u instanceof Ve?a.push(s.jsx(pp,{controller:t,rowNode:u},u.getId())):u instanceof Oe&&a.push(s.jsx(_x,{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(V.FLEXLAYOUT__ROW),style:c,children:a})};pp.displayName="Row";var wx=e=>{const{controller:t,selected:r,tabNode:o}=e,n=v.useRef(null),i=v.useRef(!0),a=v.useCallback(()=>{const g=o.getParent();g instanceof Oe&&(g.isActive()||t.doAction(oe.setActiveTabset(g.getId(),t.getLayoutId())))},[o,t]),l=o.getParent(),c=t.getKeyMap().focusTabToggle,u=g=>{if(no(g,c)){const m=g.currentTarget.ownerDocument.getElementById(Lt("flexlayout-tabbutton-",o.getId()));m&&(m.focus(),g.preventDefault(),g.stopPropagation())}};v.useLayoutEffect(()=>{const g=o.getMoveableElement(),m=n.current.ownerDocument,_=g.ownerDocument!==m;_&&m.adoptNode(g),g.parentElement!==n.current&&n.current.appendChild(g),_&&t.redrawLayoutAndTabContent();const k=()=>{o.saveScrollPosition()};g.addEventListener("scroll",k);const b=n.current;return b&&b.addEventListener("pointerdown",a),()=>{b&&b.removeEventListener("pointerdown",a),g.removeEventListener("scroll",k),g.isConnected||(t.getModel().getNodeById(o.getId())&&(o.isEnableWindowReMount()||t.getMainController()?.getMoveablesHome()?.appendChild(g)),o.setVisible(!1))}},[o,t,a]),v.useEffect(()=>{o.isSelected()&&i.current&&(o.restoreScrollPosition(),i.current=!1)}),v.useLayoutEffect(()=>(t.registerTabPanel(o,n.current),()=>{t.registerTabPanel(o,null)}),[t,o]);const d=t.getClassName;let f=null;if(r&&document.hidden&&o.isEnablePopoutOverlay()){const g={};l.getContentRect().styleWithPosition(g);let m=d(V.FLEXLAYOUT__TAB_OVERLAY);l instanceof Je&&l.isOverlay()&&(m+=" "+d(V.FLEXLAYOUT__TAB_OVERLAY_RAISED)),f=s.jsx("div",{style:g,className:m})}let p=d(V.FLEXLAYOUT__TAB);return l instanceof Je&&(p+=" "+d(V.FLEXLAYOUT__TAB_BORDER),p+=" "+d(V.FLEXLAYOUT__TAB_BORDER_+l.getLocation().getName()),l.isOverlay()&&(p+=" "+d(V.FLEXLAYOUT__TAB_BORDER_OVERLAY))),o.getContentClassName()!==void 0&&(p+=" "+o.getContentClassName()),s.jsxs(s.Fragment,{children:[f,s.jsx("div",{ref:n,id:Lt("flexlayout-tab-",o.getId()),role:"tabpanel","aria-labelledby":Lt("flexlayout-tabbutton-",o.getId()),"aria-keyshortcuts":jo(c),tabIndex:-1,onKeyDown:c?u:void 0,className:p,"data-layout-path":o.getPath()})]})};wx.displayName="Tab";var Bk=class extends v.Component{constructor(t){super(t);D(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:V.FLEXLAYOUT__ERROR_BOUNDARY_CONTAINER,children:s.jsx("div",{role:"alert",className:V.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}},kx=v.memo(({controller:e,tabNode:t})=>{kx.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(V.FLEXLAYOUT__TAB_LAYOUT_CONTAINER),children:[s.jsx(za,{...e.getProps(),layoutId:t.getSubLayoutId(),path:t.getPath()+o.getPath(),mainLayoutController:e.getMainController()}),";"]})}return s.jsx(Bk,{message:e.i18nName(De.Error_rendering_component),retryText:e.i18nName(De.Error_rendering_component_retry),children:r})},zk);function zk(e,t){return!(t.visible&&(e.windowId!==t.windowId||e.fullRedrawRevision!==t.fullRedrawRevision||e.parentRedrawRevision!==t.parentRedrawRevision||e.tabNode!==t.tabNode||t.tabNode.getSubLayoutId()!==void 0))}var Te,Fk=(Te=class{constructor(t){D(this,"_controller");D(this,"_dragEnterCount",0);D(this,"_dragging",!1);D(this,"_active",!1);D(this,"_dropInfo");D(this,"_outlineDiv");D(this,"_mainController");D(this,"setDragNode",(t,r)=>{if(Te.dragState=new Ol(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(De.Move_Tabset);if(r.getChildren().length>0&&(n=this._controller.i18nName(De.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()===we.HORZ,u=c?10:i,d=c?10:a;let f=!1;if(this._controller.getProps().onRenderDragRect){const p=s.jsx(Ba,{controller:this._controller,tabNode:r},r.getId()),g=this._controller.getProps().onRenderDragRect(p,r,void 0);g&&(this.setDragComponent(t,g,u,d),f=!0)}f||(Ok()?this.setDragComponent(t,s.jsx(Ba,{tabNode:r,controller:this._controller}),u,d):t.dataTransfer.setDragImage(r.getTabStamp(),u,d))}}});D(this,"onDragEnterRaw",t=>{this._dragEnterCount++,this.updateActive(t)});D(this,"onDragLeaveRaw",t=>{this._dragEnterCount--,this.updateActive(t)});D(this,"onDragEnter",t=>{if(!Te.dragState&&this._controller.getProps().onExternalDrag){const r=this._controller.getProps().onExternalDrag(t);if(r){const o=Ce.fromJson(r.json,this._controller.getModel(),!1);Te.dragState=new Ol(this._controller.getMainController(),"external",o,r.json,r.onDrop)}}if(this._mainController===Te.dragState?.mainLayoutController&&!(Te.dragState?.dockFloatToMain&&!this.isDockTarget())&&Te.dragState){t.preventDefault(),this._dropInfo=void 0;const r=this._controller.getRootDiv(),o=this._controller.getCurrentDocument();this._outlineDiv=o.createElement("div"),this._outlineDiv.className=this._controller.getClassName(V.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)}});D(this,"onDragOver",t=>{if(this._mainController===Te.dragState?.mainLayoutController&&!(Te.dragState?.dockFloatToMain&&!this.isDockTarget())&&this._active){if(Te.dragState?.dockFloatToMain){const i=t.target;if(i&&Te.dragState.sourceFloatElement?.contains(i)){this._dropInfo=void 0;return}}const r=this._controller.getRootDiv()?.getBoundingClientRect(),o={x:t.clientX-(r?.left??0),y:t.clientY-(r?.top??0)};Te.dragState.dockFloatToMain||this._controller.checkForBorderToShow(o.x,o.y);const n=this._controller.getModel().findDropTargetNode(this._controller.getLayoutId(),Te.dragState.dragNode,o.x,o.y,this.isExcludeCenter());if(n){if(Te.dragState.dockFloatToMain&&(n.location===te.CENTER||!(n.node instanceof Oe)&&!(n.node instanceof Ve)))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")}}});D(this,"onDragLeave",t=>{if(this._mainController===Te.dragState?.mainLayoutController&&(this.clearDragLocalVisuals(),this._controller.isMainLayout())){let r=!1;for(const[,o]of this._controller.getModel().getLayouts())if(o.getController()&&o.getController().getDragDropManager().isDragging()){r=!0;break}r===!1&&this.clearDragMain()}});D(this,"onDrop",t=>{if(this._mainController===Te.dragState?.mainLayoutController&&!(Te.dragState?.dockFloatToMain&&!this.isDockTarget())){if(this._active){t.preventDefault();const r=Te.dragState;if(this._dropInfo&&r.dockFloatToMain){const o=t.target;o&&r.sourceFloatElement?.contains(o)&&(this._dropInfo=void 0)}if(this._dropInfo)if(r.dragJson!==void 0){const o=this._controller.doAction(oe.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(oe.dockFloatToLayout(r.floatLayoutId,this._dropInfo.node.getId(),this._dropInfo.location,this._dropInfo.index)):this._controller.doAction(oe.moveNode(r.dragNode.getId(),this._dropInfo.node.getId(),this._dropInfo.location,this._dropInfo.index)));this.clearDragMain(),Te.dragState=void 0}this._dragEnterCount=0}});this._controller=t,this._mainController=t.getMainController()}isDockTarget(){return this._controller.getLayout().getLayoutId()!==Te.dragState?.floatLayoutId}isExcludeCenter(){if(Te.dragState?.dockFloatToMain)return!0;const t=Te.dragState?.dragNode;return t instanceof Oe?!t.isEnableClose()||t.getPinnedRunLength()>0:!1}addTabWithDragAndDrop(t,r,o){const n=Ce.fromJson(r,this._controller.getModel(),!1);Te.dragState=new Ol(this._controller.getMainController(),"add",n,r,o)}onDragEnded(){this.clearDragMain(),Te.dragState=void 0}moveTabWithDragAndDrop(t,r){this.setDragNode(t,r)}startDockLayoutDrag(t,r,o){const n=r.getRootRow();Te.dragState=new Ol(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 Ce&&i++},0);const a=this._controller.i18nName(De.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(V.FLEXLAYOUT__LAYOUT)+" "+this._controller.getClassName(V.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=wi(l);hr.flushSync(()=>c.render(i)),t.dataTransfer.setDragImage(l,o,n),setTimeout(()=>{c.unmount(),a.body.removeChild(l)},0)}updateActive(t){const r=Array.from(this._controller.getModel().getLayouts().values()),o=Te.dragState?.dockFloatToMain===!0;let n,i;for(let a=r.length-1;a>=0;a--){const l=r[a];if(o&&l.getLayoutId()===Te.dragState?.floatLayoutId)continue;const c=l.getController()?.getDragDropManager();c&&c.getDragEnterCount()>0&&(l.getType()==="tab"?i=l:!n&&!i&&(n=l))}if(i){const a=ox(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}},D(Te,"dragState"),Te),Ol=class{constructor(e,t,r,o,n,i=!1,a=void 0,l=void 0){D(this,"mainLayoutController");D(this,"dragSource");D(this,"dragNode");D(this,"dragJson");D(this,"fnNewNodeDropped");D(this,"dockFloatToMain");D(this,"floatLayoutId");D(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}},Ex=({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(V.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(V.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(V.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(V.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(V.FLEXLAYOUT__EDGE_RECT_RIGHT),children:s.jsx("div",{style:{transform:"rotate(-90deg)"},children:r})},"East"))}return s.jsx(s.Fragment,{children:t})};Ex.displayName="EdgeIndicators";var Uk=2e3,Vk=750,Tx=e=>{const{title:t,controller:r,layout:o,url:n,onCloseLayout:i,children:a}=e,l=v.useRef(null),[c,u]=v.useState(void 0),[d,f]=v.useState(void 0),[p,g]=v.useState(void 0),m=v.useMemo(()=>new Map,[]),_=v.useRef(!1),k=v.useRef(null),b=v.useRef(null),h=v.useRef(new Map);if(v.useLayoutEffect(()=>{!_.current&&c&&(_.current=!0,r.redrawLayout(),Yk(m))},[c,r,m]),v.useLayoutEffect(()=>{const x=()=>{if(l.current){const w=l.current;l.current=null,w.close()}};if(!l.current){const w=o.getLayoutId(),y=o.getRect();l.current=window.open(n,w,`left=${y.x},top=${y.y},width=${y.width},height=${y.height}`),l.current?(window.addEventListener("beforeunload",x),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;f(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 U=L.createElement("div");U.className=V.FLEXLAYOUT__FLOATING_WINDOW_CONTENT,L.body.appendChild(U),r.getProps().onPopoutOpen?.(o,l.current,L),Hk(L,m).then(()=>{u(U)}),k.current=new MutationObserver(P=>Wk(P,L,m)),k.current.observe(document.head,{childList:!0,subtree:!0,characterData:!0}),b.current=L.defaultView?.setInterval(()=>{Xk(m,h.current)},Vk)??null,l.current.addEventListener("beforeunload",()=>{l.current&&(r.getProps().onPopoutClose?.(o,l.current,L),i(o),l.current=null,k.current?.disconnect(),k.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",x),l.current?.close(),l.current=null,k.current?.disconnect(),k.current=null,b.current!=null&&(b.current=null)}},[]),c!==void 0){const x=r.getProps().renderPopoutContent;let w=a;return x&&p&&(w=x({children:a,layout:o,popoutWindow:d??window,popoutDocument:p})),hr.createPortal(w,c)}else return null};function Wk(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)&&Rx(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=$k(o.target),i=n&&r.get(n);n&&i&&mc(n,i)}}function $k(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 Hk(e,t){const r=[],o=document.querySelectorAll('style, link[rel="stylesheet"]');for(const n of o)Rx(e,n,t,r);return Promise.all(r)}function Rx(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),Uk)}))}else if(t instanceof HTMLStyleElement)try{const n=t.cloneNode(!0);e.head.appendChild(n),mc(t,n),r.set(t,n)}catch{}}function mc(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 Yk(e){for(const[t,r]of e)t instanceof HTMLStyleElement&&mc(t,r)}function Xk(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),mc(r,o))}}Tx.displayName="PopoutWindow";var bo=10,Ar=-4,sr=8,Nn=12,Eh=12,Gk=150,qk=25,Kk=e=>{const{controller:t,layout:r,children:o}=e,[n,i]=v.useState(r.getRect()),a=v.useRef(he.empty()),l=t.getClassName,c=v.useRef(null),u=v.useRef(null),d=v.useRef(null),f=v.useRef(null),p=v.useRef(null),g=v.useRef(null),m=v.useRef(null),_=v.useRef(null),k=v.useRef(null),b=v.useRef(null),h=v.useRef(!1),x=v.useRef(void 0);v.useEffect(()=>{a.current=n},[n]),v.useEffect(()=>{requestAnimationFrame(()=>{i(r.getRect())})},[r]);const w=v.useCallback(C=>{const S=t.getCurrentWindow()??window,N=he.fromDomRect(t.getRootDiv().getBoundingClientRect());let A;if(t.getProps().constrainFloatPanels)A=new he(0,0,N.width,N.height);else{const z=Mk(S),Z=Math.max(z.fullWidth,S.innerWidth),Y=Math.max(z.fullHeight,S.innerHeight);A=new he(-N.x,-N.y,Z,Y)}const F=C.clone();return F.clamp(A),F},[t]),y=v.useCallback(C=>{C.preventDefault(),C.stopImmediatePropagation()},[]);v.useEffect(()=>{const C=[u,d,f,p,g,m,_,k,b].map(S=>S.current).filter(S=>S!==null);return C.forEach(S=>S.addEventListener("touchstart",y,{passive:!1})),()=>{C.forEach(S=>S.removeEventListener("touchstart",y))}},[y]);const T=v.useRef(!1);v.useLayoutEffect(()=>{if(!T.current){T.current=!0;const C=w(n);C.equals(n)||(i(C),r.setRect(C))}},[w,n,r]),v.useEffect(()=>{const C=()=>{const F=[...t.getModel().getLayouts()],z=F[F.length-1][1];r!==z&&(h.current=!0)},S=t.getCurrentWindow()??window,N=()=>{h.current&&(x.current=S.setTimeout(()=>{x.current=void 0,t.moveWindowToFront(r.getLayoutId())},10),h.current=!1)},A=c.current;return A&&(A.addEventListener("pointerdown",C,{capture:!0}),A.addEventListener("pointerup",N)),()=>{A&&(A.removeEventListener("pointerdown",C,{capture:!0}),A.removeEventListener("pointerup",N)),x.current!==void 0&&(S.clearTimeout(x.current),x.current=void 0)}},[t,r]);const L=C=>{C.stopPropagation();const S={x:C.clientX-n.x,y:C.clientY-n.y};t.showOverlayOnAllWindows(!0),Ds(t.getCurrentDocument()??document,C,(N,A)=>{h.current&&(t.moveWindowToFront(r.getLayoutId()),h.current=!1);const F=new he(N-S.x,A-S.y,n.width,n.height),z=w(F);i(z),t.doAction(oe.moveFloat(r.getLayoutId(),z).setAdjusting(!0))},()=>{t.doAction(oe.moveFloat(r.getLayoutId(),a.current).setAdjusting(!1)),t.redrawLayout(),t.showOverlayOnAllWindows(!1)},()=>{t.doAction(oe.moveFloat(r.getLayoutId(),a.current).setAdjusting(!1)),t.redrawLayout(),t.showOverlayOnAllWindows(!1)})},U=t.getIcons(),P=t.isSupportsPopout()&&r.getRootRow()?.isAllowedInWindow()===!0,j=C=>{C.stopPropagation(),r.getRootRow()?.getChildren().length?t.getDragDropManager().startDockLayoutDrag(C.nativeEvent,r,c.current??void 0):C.preventDefault()},M=C=>{t.getDragDropManager().onDragEnded()},O=C=>{C.stopPropagation()},E=C=>{C.stopPropagation();const S=t.getScreenRect(r.getRect());t.doAction(oe.popoutFloat(r.getLayoutId(),S.toJson()))},B=(C,S)=>{const N=n,A={x:C.clientX,y:C.clientY};t.showOverlayOnAllWindows(!0),Ds(t.getCurrentDocument()??document,C,(F,z)=>{const Z=F-A.x,Y=z-A.y;let q=N.x,Q=N.y,H=N.width,ee=N.height;S.includes("n")&&(Q+=Y,ee-=Y),S.includes("s")&&(ee+=Y),S.includes("w")&&(q+=Z,H-=Z),S.includes("e")&&(H+=Z);const ne=new he(q,Q,Math.max(Gk,H),Math.max(qk,ee)),le=w(ne);i(le),t.doAction(oe.moveFloat(r.getLayoutId(),le).setAdjusting(!0))},()=>{t.doAction(oe.moveFloat(r.getLayoutId(),a.current).setAdjusting(!1)),t.redrawLayout(),t.showOverlayOnAllWindows(!1)},()=>{t.doAction(oe.moveFloat(r.getLayoutId(),a.current).setAdjusting(!1)),t.redrawLayout(),t.showOverlayOnAllWindows(!1)}),C.stopPropagation()};return s.jsxs("div",{ref:c,className:l(V.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(V.FLEXLAYOUT__FLOAT_WINDOW_HEADER),onPointerDown:L,children:[s.jsx("div",{"data-layout-path":"/floatwindow/drag-handle",className:l(V.FLEXLAYOUT__FLOAT_WINDOW_DRAG_HANDLE),draggable:!0,title:t.i18nName(De.Dock_Float_To_Layout),"aria-label":t.i18nName(De.Dock_Float_To_Layout),onDragStart:j,onDragEnd:M,onPointerDown:O,children:U.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(V.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}})})}),P&&s.jsx("button",{type:"button","data-layout-path":"/floatwindow/button/popout",className:l(V.FLEXLAYOUT__FLOAT_WINDOW_BUTTON),title:t.i18nName(De.Popout_Float_To_Window),"aria-label":t.i18nName(De.Popout_Float_To_Window),onClick:E,onPointerDown:O,children:U.popoutFloatWindow})]}),s.jsx("div",{className:l(V.FLEXLAYOUT__FLOAT_WINDOW_CONTENT),children:o}),s.jsx("div",{ref:d,style:{position:"absolute",zIndex:bo,top:Ar,left:sr,right:sr,height:sr,cursor:"ns-resize"},onPointerDown:C=>B(C,"n")}),s.jsx("div",{ref:m,style:{position:"absolute",zIndex:bo,bottom:Ar,left:sr,right:sr,height:sr,cursor:"ns-resize"},onPointerDown:C=>B(C,"s")}),s.jsx("div",{ref:p,style:{position:"absolute",zIndex:bo,top:sr,bottom:sr,right:Ar,width:sr,cursor:"ew-resize"},onPointerDown:C=>B(C,"e")}),s.jsx("div",{ref:k,style:{position:"absolute",zIndex:bo,top:sr,bottom:sr,left:Ar,width:sr,cursor:"ew-resize"},onPointerDown:C=>B(C,"w")}),s.jsx("div",{ref:b,style:{position:"absolute",zIndex:bo,top:Ar,left:Ar,width:Nn,height:Nn,cursor:"nwse-resize"},onPointerDown:C=>B(C,"nw")}),s.jsx("div",{ref:f,style:{position:"absolute",zIndex:bo,top:Ar,right:Ar,width:Nn,height:Nn,cursor:"nesw-resize"},onPointerDown:C=>B(C,"ne")}),s.jsx("div",{ref:_,style:{position:"absolute",zIndex:bo,bottom:Ar,left:Ar,width:Nn,height:Nn,cursor:"nesw-resize"},onPointerDown:C=>B(C,"sw")}),s.jsx("div",{ref:g,style:{position:"absolute",zIndex:bo,bottom:0,right:0,width:Eh,height:Eh,cursor:"nwse-resize"},onPointerDown:C=>B(C,"se")})]})},Sx=({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(Tx,{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(za,{...e.getProps(),layoutId:i,path:a.getPath(),mainLayoutController:e})})},i)),o++):a.getType()==="float"&&(t.push(s.jsx(Kk,{controller:e,layout:a,zIndex:n,onCloseLayout:e.onCloseLayout,children:s.jsx(za,{...e.getProps(),layoutId:i,path:a.getPath(),mainLayoutController:e})},i+"float")),n++));return s.jsx(s.Fragment,{children:t})};Sx.displayName="FloatingWindowContainer";var Lx=e=>{const{controller:t,tabNode:r,selected:o,border:n,icons:i,path:a}=e,l=v.useRef(null),c=v.useRef(null),u=t.getKeyMap(),d=N=>{r.isEnableDrag()?(N.stopPropagation(),t.getDragDropManager().setDragNode(N.nativeEvent,r)):N.preventDefault()},f=N=>{N.stopPropagation(),t.getDragDropManager().onDragEnded()},p=N=>{Pa(N)&&t.auxMouseClick(r,N)},g=N=>{t.showContextMenu(r,N)},m=()=>{t.doAction(oe.selectTab(r.getId()))},_=N=>{const A=l.current?.closest('[role="tablist"]');if(A){const F=Array.from(A.querySelectorAll('[role="tab"]'));F[F.indexOf(l.current)+N]?.focus()}},k=()=>{const N=l.current.ownerDocument,A=()=>rx(N.getElementById(Lt("flexlayout-tab-",r.getId())));o?A():(m(),requestAnimationFrame(A))},b=N=>{t.getEditingTab()!==r&&(no(N,u.focusTabToggle)?(k(),N.preventDefault()):N.key==="Enter"||N.key===" "?(m(),N.preventDefault()):(N.key==="ArrowLeft"||N.key==="ArrowUp")&&!ja(N)?(_(-1),N.preventDefault()):(N.key==="ArrowRight"||N.key==="ArrowDown")&&!ja(N)?(_(1),N.preventDefault()):no(N,u.closeTab)&&r.isCloseable()&&(_(1),t.doAction(oe.deleteTab(r.getId())),N.preventDefault()))},h=()=>{const N=r.getCloseType();return!!(o||N===fn.Always||N===fn.Visible&&window.matchMedia&&window.matchMedia("(hover: hover) and (pointer: fine)").matches)},x=N=>{h()&&(t.doAction(oe.deleteTab(r.getId())),N.stopPropagation())},w=N=>{N.stopPropagation()},y=()=>{if(o)return!0;const N=r.getParent();return N instanceof Je&&N.getSelected()===-1&&N.getChildren()[0]===r},T=t.getEditingTab()===r,L=v.useCallback(N=>{l.current=N,t.registerMeasurable(r,"tabbutton",N)},[t,r]);v.useLayoutEffect(()=>{T&&c.current.select()},[T]),v.useEffect(()=>{if(T){const N=t.getCurrentDocument().body,A=F=>{F.target!==c.current&&t.setEditingTab(void 0)};return N.addEventListener("pointerdown",A),()=>N.removeEventListener("pointerdown",A)}},[T,t]);const U=N=>{N.stopPropagation()},P=N=>{N.code==="Escape"?(t.setEditingTab(void 0),l.current?.focus()):(N.code==="Enter"||N.code==="NumpadEnter")&&(t.setEditingTab(void 0),t.doAction(oe.renameTab(r.getId(),N.target.value)),l.current?.focus())},j=t.getClassName;let M=j(V.FLEXLAYOUT__BORDER_BUTTON)+" "+j(V.FLEXLAYOUT__BORDER_BUTTON_+n);o?M+=" "+j(V.FLEXLAYOUT__BORDER_BUTTON__SELECTED):M+=" "+j(V.FLEXLAYOUT__BORDER_BUTTON__UNSELECTED),r.getClassName()!==void 0&&(M+=" "+r.getClassName());let O=0;r.getModel().isEnableRotateBorderIcons()===!1&&(n==="left"?O=r.getModel().getBorderLeftTabDirection()==="down"?-90:90:n==="right"&&(O=-90));const E=fp(t,r,O);let B=E.content?s.jsx("div",{className:j(V.FLEXLAYOUT__BORDER_BUTTON_CONTENT),children:E.content}):null;const C=E.leading?s.jsx("div",{className:j(V.FLEXLAYOUT__BORDER_BUTTON_LEADING),children:E.leading}):null;if(T&&(B=s.jsx("input",{ref:c,className:j(V.FLEXLAYOUT__TAB_BUTTON_TEXTBOX),"data-layout-path":a+"/textbox",type:"text","aria-label":t.i18nName(De.Rename_Tab),autoFocus:!0,defaultValue:r.getName(),onKeyDown:P,onPointerDown:U})),r.isCloseable()){const N=t.i18nName(De.Close_Tab);E.buttons.push(s.jsx("div",{"data-layout-path":a+"/button/close",title:N,"aria-hidden":"true",className:j(V.FLEXLAYOUT__BORDER_BUTTON_TRAILING),onPointerDown:w,onClick:x,children:typeof i.close=="function"?i.close(r):i.close},"close"))}const S=[jo(u.focusTabToggle),r.isCloseable()?jo(u.closeTab):void 0].filter(Boolean).join(" ")||void 0;return s.jsxs("div",{ref:L,id:Lt("flexlayout-tabbutton-",r.getId()),role:T?void 0:"tab","aria-selected":T?void 0:o,"aria-controls":T?void 0:Lt("flexlayout-tab-",r.getId()),"aria-label":T?void 0:E.name,"aria-keyshortcuts":T?void 0:S,tabIndex:T?-1:y()?0:-1,onKeyDown:b,"data-layout-path":a,className:M,onClick:m,onAuxClick:p,onContextMenu:g,title:r.getHelpText(),draggable:!0,onDragStart:d,onDragEnd:f,children:[C,B,E.buttons]})};Lx.displayName="BorderButton";var Cx=e=>{const{borderNode:t,controller:r,size:o}=e,n=v.useRef(null),i=v.useRef(null),a=v.useRef(null),l=v.useRef(null),c=v.useRef(null),u=v.useRef(null),[d,f]=v.useState(!1),p=v.useRef(null),g=r.getIcons();v.useEffect(()=>()=>p.current?.(),[]);const{userControlledPositionRef:m,onScroll:_,onScrollPointerDown:k,hiddenTabs:b,onMouseWheel:h,isDockStickyButtons:x,isShowHiddenTabs:w}=yx(r,t,we.flip(t.getOrientation()),u,a,n,r.getClassName(V.FLEXLAYOUT__BORDER_BUTTON)),y=v.useCallback(ne=>{n.current=ne,r.registerMeasurable(t,"borderheader",ne)},[r,t]),T=ne=>{Pa(ne)&&r.auxMouseClick(t,ne)},L=ne=>{r.showContextMenu(t,ne)},U=ne=>{ne.stopPropagation()},P=ne=>{const le=r.getShowOverflowMenu(),Ne=b.map(Ee=>({index:Ee,node:t.getChildren()[Ee]}));if(le!==void 0)le(t,ne,Ne,j);else{const Ee=l.current;f(!0),p.current=mx(Ee,t,Ne,j,r,()=>{f(!1),p.current=null})}ne.stopPropagation()},j=ne=>{r.doAction(oe.selectTab(ne.node.getId())),m.current=!1},M=ne=>{const le=t.getChildren()[t.getSelected()];le!==void 0&&r.doAction(oe.popoutTab(le.getId(),"window")),ne.stopPropagation()},O=ne=>{const le=t.getChildren()[t.getSelected()];le!==void 0&&r.doAction(oe.popoutTab(le.getId(),"float")),ne.stopPropagation()},E=r.getClassName,B=()=>{const ne=[];for(let le=0;le{let ne,le=[],Ne=[],Ee;const ve={leading:ne,buttons:le,stickyButtons:Ne,overflowPosition:void 0};if(r.customizeTabSet(t,ve),ne=ve.leading,Ne=ve.stickyButtons,le=ve.buttons,ve.overflowPosition===void 0&&(ve.overflowPosition=Ne.length),Ne.length>0&&(x?le=[...Ne,...le]:Ee=s.jsx("div",{ref:c,onPointerDown:U,onDragStart:ue=>{ue.preventDefault()},className:E(V.FLEXLAYOUT__TAB_TOOLBAR_STICKY_BUTTONS_CONTAINER),children:Ne},"sticky_buttons_container")),w){const ue=r.i18nName(De.Overflow_Menu_Tooltip);let se;if(typeof g.more=="function"){const G=b.map(fe=>({index:fe,node:t.getChildren()[fe]}));se=g.more(t,G)}else se=s.jsxs(s.Fragment,{children:[g.more,s.jsx("div",{className:E(V.FLEXLAYOUT__TAB_BUTTON_OVERFLOW_COUNT),children:b.length>0?b.length:""})]});le.splice(Math.min(ve.overflowPosition,le.length),0,s.jsx("button",{tabIndex:0,"aria-haspopup":"menu","aria-expanded":d,"aria-label":ue,ref:l,className:E(V.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON)+" "+E(V.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_OVERFLOW)+" "+E(V.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_OVERFLOW_+t.getLocation().getName()),title:ue,onClick:P,onPointerDown:U,children:se},"overflowbutton"))}const Bt=t.getSelected();if(Bt!==-1){const ue=t.getChildren()[Bt];if(ue!==void 0&&r.isMainLayout()){if(ue.isEnablePopoutFloatIcon()){const se=r.i18nName(De.Popout_Tab_Float);le.push(s.jsx("button",{tabIndex:0,title:se,"aria-label":se,className:E(V.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON)+" "+E(V.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_FLOAT),onClick:O,onPointerDown:U,children:typeof g.popoutFloat=="function"?g.popoutFloat(ue):g.popoutFloat},"popout-float"))}if(r.isSupportsPopout()&&ue.isEnablePopoutIcon()&&ue.isAllowedInWindow()){const se=r.i18nName(De.Popout_Tab);le.push(s.jsx("button",{tabIndex:0,title:se,"aria-label":se,className:E(V.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON)+" "+E(V.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_FLOAT),onClick:M,onPointerDown:U,children:typeof g.popout=="function"?g.popout(ue):g.popout},"popout"))}}}const X=s.jsx("div",{ref:i,className:E(V.FLEXLAYOUT__BORDER_TOOLBAR)+" "+E(V.FLEXLAYOUT__BORDER_TOOLBAR_+t.getLocation().getName()),children:le},"toolbar");return{leading:ne,toolbar:X,stickyBar:Ee}},S=B(),{leading:N,toolbar:A,stickyBar:F}=C();let z=E(V.FLEXLAYOUT__BORDER)+" "+E(V.FLEXLAYOUT__BORDER_+t.getLocation().getName());t.getClassName()!==void 0&&(z+=" "+t.getClassName());let Z,Y;const q=o-1;t.getLocation()===te.LEFT?(Z=r.getModel().getBorderLeftTabDirection()==="down"?{left:"100%",top:0}:{right:"100%",top:0},Y={width:q,overflowY:"auto"}):t.getLocation()===te.RIGHT?(Z={left:"100%",top:0},Y={width:q,overflowY:"auto"}):(Z={left:0},Y={height:q,overflowX:"auto"});let Q;t.isEnableTabScrollbar()&&(Q=s.jsx("div",{ref:a,"aria-hidden":"true",className:E(V.FLEXLAYOUT__MINI_SCROLLBAR),onPointerDown:k}));let H;N&&(H=s.jsx("div",{className:E(V.FLEXLAYOUT__BORDER_LEADING),children:N}));const ee=E(V.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER)+" "+E(V.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER_+t.getLocation().getName())+(t.getLocation()===te.LEFT&&r.getModel().getBorderLeftTabDirection()==="down"?" "+E(V.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER_LEFT_DOWN):"");return s.jsxs("div",{ref:y,style:{display:"flex",flexDirection:t.getOrientation()===we.VERT?"row":"column"},className:z,"data-layout-path":t.getPath(),onClick:T,onAuxClick:T,onContextMenu:L,onWheel:h,children:[H,s.jsxs("div",{className:E(V.FLEXLAYOUT__MINI_SCROLLBAR_CONTAINER),children:[s.jsxs("div",{ref:u,className:E(V.FLEXLAYOUT__BORDER_INNER)+" "+E(V.FLEXLAYOUT__BORDER_INNER_+t.getLocation().getName()),style:Y,onScroll:_,children:[s.jsx("div",{style:Z,role:r.getEditingTab()?.getParent()===t?void 0:"tablist","aria-orientation":r.getEditingTab()?.getParent()!==t&&(t.getLocation()===te.LEFT||t.getLocation()===te.RIGHT)?"vertical":void 0,className:ee,children:S}),F]}),Q]}),A]})};Cx.displayName="BorderTabSet";function Nx(e){const{controller:t,borderNode:r,show:o}=e,n=v.useRef(null),i=v.useCallback(d=>{n.current=d,t.registerMeasurable(r,"bordercontent",d)},[t,r]);let a=!0;const l={};r.getOrientation()===we.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(V.FLEXLAYOUT__BORDER_TAB_CONTENTS),u=r.getLocation()===te.LEFT||r.getLocation()===te.TOP;if(r.isOverlay()){l.display="flex";const d={display:o?"flex":"none"};if(a){const p=t.getModel();for(const g of p.getBorderSet().getBorders())if(g!==r&&g.isOverlay()&&g.isShowing()&&g.getSelected()!==-1){const m=g.getSize()+p.getSplitterSize();g.getLocation()===te.TOP?d.top=m:g.getLocation()===te.BOTTOM&&(d.bottom=m)}}const f=t.getClassName(V.FLEXLAYOUT__BORDER_TAB_OVERLAY)+" "+t.getClassName(V.FLEXLAYOUT__BORDER_TAB_OVERLAY_+r.getLocation().getName());return s.jsxs("div",{className:f,style:d,children:[u&&s.jsx("div",{ref:i,style:l,className:c}),o&&s.jsx(ca,{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(ca,{controller:t,node:r,index:0,horizontal:a})]}):s.jsxs(s.Fragment,{children:[o&&s.jsx(ca,{controller:t,node:r,index:0,horizontal:a}),s.jsx("div",{ref:i,style:l,className:c})]})}Nx.displayName="BorderTab";var Ox=({controller:e,inner:t})=>{const r=e.getClassName(V.FLEXLAYOUT__LAYOUT_MAIN),o=e.getModel().getBorderSet().getBorderMap();if(e.isMainLayout()&&o.size>0){const n=s.jsx("div",{className:r,ref:e.getMainRef(),children:t}),i=new Map,a=new Map;for(const[d,f]of te.values){const p=o.get(f);p&&p.isShowing()&&(!p.isAutoHide()||p.isAutoHide()&&(p.getChildren().length>0||e.getState().showHiddenBorder===f))&&(i.set(f,s.jsx(Cx,{controller:e,borderNode:p,size:e.getState().calculatedBorderBarSize})),a.set(f,s.jsx(Nx,{controller:e,borderNode:p,show:p.getSelected()!==-1})))}const l=e.getClassName(V.FLEXLAYOUT__LAYOUT_BORDER_CONTAINER),c=e.getClassName(V.FLEXLAYOUT__LAYOUT_BORDER_CONTAINER_INNER),u=s.jsxs("div",{className:c,style:{flexDirection:"column"},children:[a.get(te.TOP),s.jsxs("div",{className:c,style:{flexDirection:"row"},children:[a.get(te.LEFT),n,a.get(te.RIGHT)]}),a.get(te.BOTTOM)]});return s.jsxs("div",{className:l,style:{flexDirection:"column"},children:[i.get(te.TOP),s.jsxs("div",{className:c,style:{flexDirection:"row"},children:[i.get(te.LEFT),u,i.get(te.RIGHT)]}),i.get(te.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})};Ox.displayName="BorderContainer";var Mx=v.memo(e=>{Mx.displayName="DragTabButton";const{controller:t,tabNode:r}=e,o=v.useRef(null);v.useEffect(()=>{r.setTabStamp(o.current)},[r]);const n=t.getClassName,i=n(V.FLEXLAYOUT__DRAG_RECT);return s.jsx("div",{ref:o,className:i,children:s.jsx(Ba,{controller:t,tabNode:r},r.getId())})},Jk);function Jk(e,t){return t.dragging}var za=v.forwardRef((e,t)=>{za.displayName="LayoutInternal";const[r,o]=v.useState({editingTab:void 0,showEdges:!1,showOverlay:!1,calculatedBorderBarSize:29,layoutRedrawRevision:0,fullRedrawRevision:0,showHiddenBorder:te.CENTER}),n=v.useCallback(j=>{o(M=>({...M,...typeof j=="function"?j(M,e):j}))},[e]),i=v.useRef(null),[a,l]=v.useState(0),c=v.useRef(null),u=v.useRef(null),d=v.useRef(null),f=v.useRef(null),p=v.useMemo(()=>new Zk(e,r,n),[]);p.setProps(e),p.setStateRaw(r),p.setSetState(n),p.setLayoutRef(i),p.setMoveablesHomeRef(c),p.setFindBorderBarSizeRef(u),p.setFindSplitterSizeRef(d),p.setMainRef(f);const g=e.model.getLayouts().get(p.getLayoutId());g.setController(p),v.useImperativeHandle(t,()=>p,[p]),v.useLayoutEffect(()=>{const j=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(M=>M+1),j){const M=i.current?.ownerDocument.defaultView??window,O=M.requestAnimationFrame(()=>{p.syncLayoutMetrics(),p.positionTabPanels(),p.isReLayout()&&(p.redrawLayout(),p.setReLayout(!1))});return()=>M.cancelAnimationFrame(O)}}),v.useEffect(()=>{const j=i.current.ownerDocument,M=j.defaultView;p.setCurrentDocument(j),p.setCurrentWindow(M);const O=new M.ResizeObserver(()=>{p.updateRect(),p.syncLayoutMetrics(),p.positionTabPanels(),p.updateLayoutMetrics(),p.isReLayout()&&(p.redrawLayout(),p.setReLayout(!1))});O.observe(i.current),p.setGeometryResizeObserver(O),u.current&&O.observe(u.current),d.current&&O.observe(d.current);const E=()=>{p.updateRect()};M.addEventListener("resize",E);const B=()=>{for(const[C,S]of p.getProps().model.getLayouts()){const N=S.getController();N&&N.redrawLayout()}};return p.isMainLayout()&&(document.addEventListener("visibilitychange",B),j.addEventListener("pointerdown",p.onOverlayBorderPointerDown,!0),j.addEventListener("keydown",p.onOverlayBorderKeyDown)),(p.isMainLayout()||p.getLayout()?.getType()==="window")&&j.addEventListener("keydown",p.onTabsetNavKeyDown),()=>{p.setGeometryResizeObserver(void 0),O.disconnect(),M.removeEventListener("resize",E),document.removeEventListener("visibilitychange",B),j.removeEventListener("pointerdown",p.onOverlayBorderPointerDown,!0),j.removeEventListener("keydown",p.onOverlayBorderKeyDown),j.removeEventListener("keydown",p.onTabsetNavKeyDown)}},[p,a]),v.useEffect(()=>{let j;if(!p.isMainLayout()&&p.getLayout().getType()==="window"){const M=p.getProps().mainLayoutController?.getRootDiv();if(M){const O=M,E=i.current;wh(O,E),j=new MutationObserver(()=>{wh(O,E)&&p.redrawLayout()}),j.observe(O,{attributeFilter:["style"]})}}return()=>{j&&j.disconnect()}},[p]),v.useEffect(()=>{const j=e.model;if(g.setToExportRectFunction((M,O)=>O==="window"?p.getScreenRect(M):p.getRelativeRect(M)),p.setLayout(g),p.isMainLayout()){const M={onAfterAction:p.onModelChange};return j.addChangeListener(M),()=>{j.removeChangeListener(M)}}},[e.model,p,g]);const m=p.isMainLayout()?s.jsxs("div",{className:p.getClassName(V.FLEXLAYOUT__LAYOUT_METRICS),children:[s.jsx("div",{ref:u,className:p.getClassName(V.FLEXLAYOUT__BORDER_SIZER),children:"FindBorderBarSize"},"findBorderBarSize"),s.jsx("div",{ref:d,className:p.getClassName(V.FLEXLAYOUT__SPLITTER_+"horz")},"findSplitterSize")]}):null;if(!i.current)return s.jsx("div",{ref:i,className:p.getClassName(V.FLEXLAYOUT__LAYOUT),children:m});const _=e.model,k=p.getLayoutId();_.getRootRow(k).calcMinMaxSize(),_.getRootRow(k).setPaths(e.path||""),p.isMainLayout()&&_.getBorderSet().setPaths();const b=s.jsx(hx,{controller:p,show:r.showOverlay},"__overlay__"),h=p.renderLayout(),x=s.jsx(Ox,{controller:p,inner:h}),w=p.renderTabContainers(),y=p.reorderComponents(w,p.getOrderedTabIds());let T=null,L=null,U=null,P=null;return p.isMainLayout()&&(T=s.jsx(Sx,{controller:p}),L=p.reorderComponents(p.renderTabContents(),p.getOrderedTabMoveableIds()),U=s.jsx("div",{"aria-hidden":"true",className:p.getClassName(V.FLEXLAYOUT__LAYOUT_TAB_STAMPS),children:p.renderDragTabButtons()},"__dragTabButtons__"),P=s.jsx("div",{ref:c,className:p.getClassName(V.FLEXLAYOUT__LAYOUT_MOVEABLES_HOME)},"__moveables_home__")),s.jsxs("div",{ref:i,className:p.getClassName(V.FLEXLAYOUT__LAYOUT),onDragEnter:p.getDragDropManager().onDragEnterRaw,onDragLeave:p.getDragDropManager().onDragLeaveRaw,onDragOver:p.getDragDropManager().onDragOver,onDrop:p.getDragDropManager().onDrop,children:[m,P,b,x,y,L,T,U]})}),ro,Zk=(ro=class{constructor(t,r,o){D(this,"_props");D(this,"_state");D(this,"_setState");D(this,"_layoutRef");D(this,"_moveablesHomeRef");D(this,"_findBorderBarSizeRef");D(this,"_findSplitterSizeRef");D(this,"_mainRef");D(this,"_orderedTabIds");D(this,"_orderedTabMoveableIds");D(this,"_currentDocument");D(this,"_currentWindow");D(this,"_showOverlay",!1);D(this,"_supportsPopout");D(this,"_popoutURL");D(this,"_icons");D(this,"_dragDropManager");D(this,"_layoutId");D(this,"_layout");D(this,"_mainController");D(this,"_popoutWindowName");D(this,"_cachedLayoutDOMRect");D(this,"_reLayout");D(this,"_measurables",new Map);D(this,"_tabPanels",new Map);D(this,"_lastRect",he.empty());D(this,"_lastSplitterSize",8);D(this,"_geometryResizeObserver");D(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(V.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())}});D(this,"onModelChange",t=>{const r=t instanceof Qm?t.actions:[t];for(const o of r)if(o.type==oe.DELETE_TAB&&this._state.showHiddenBorder!==te.CENTER&&this._props.model.getBorderSet().getBorderMap().get(this._state.showHiddenBorder).getChildren().length===0){this._setState({showHiddenBorder:te.CENTER});break}if(t.isAdjusting()&&(t.type===oe.ADJUST_WEIGHTS||t.type===oe.ADJUST_BORDER_SPLIT)){t.type===oe.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)});D(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(V.FLEXLAYOUT__POPUP_MENU_CONTAINER)+",."+this.getClassName(V.FLEXLAYOUT__FLOAT_WINDOW)+",."+this.getClassName(V.FLEXLAYOUT__FLOATING_WINDOW_CONTENT)+",."+this.getClassName(V.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(nt.MAIN_LAYOUT_ID)?.getRect();if(!(!a||!a.contains(n,i)))for(const l of r)l.getContentRect()?.contains(n,i)||this.closeOverlayBorder(l)});D(this,"onOverlayBorderKeyDown",t=>{if(!no(t,this.getKeyMap().closeOverlayBorder))return;const r=this._currentDocument?.activeElement;if(!r)return;const o=this._props.model.getBorderSet().getBorders().filter(n=>n.isOverlay()&&n.getSelected()!==-1);for(const n of o){const i=n.getSelectedNode(),a=this._currentDocument.getElementById(Lt("flexlayout-tab-",i.getId())),l=this._currentDocument.getElementById(Lt("flexlayout-tabbutton-",i.getId()));if(a&&a.contains(r)||r===l){this.closeOverlayBorder(n),t.preventDefault();break}}});D(this,"onTabsetNavKeyDown",t=>{if(t.defaultPrevented)return;const r=this.getKeyMap();let o;if(no(t,r.focusNextTabset))o=1;else if(no(t,r.focusPreviousTabset))o=-1;else return;this.focusAdjacentTabset(o)&&t.preventDefault()});D(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())}});D(this,"getClassName",t=>this._props.classNameMapper===void 0?t:this._props.classNameMapper(t));D(this,"onCloseLayout",t=>{this.doAction(oe.closePopout(t.getLayoutId()))});this._props=t,this._state=r,this._setState=o,this._orderedTabIds=[],this._orderedTabMoveableIds=[],this._supportsPopout=t.supportsPopout!==void 0?t.supportsPopout:eE,this._popoutURL=t.popoutURL?t.popoutURL:"popout.html",this._icons={...Qk,...t.icons},this._layoutId=t.layoutId?t.layoutId:nt.MAIN_LAYOUT_ID,this._mainController=t.mainLayoutController?t.mainLayoutController:this,this._dragDropManager=new Fk(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(pp,{controller:this,rowNode:this._props.model.getRootRow(this._layoutId)},"__row__"),s.jsx(Ex,{controller:this})]})}renderTabContainers(){const t=new Map;return this._props.model.visitLayoutNodes(this._layoutId,r=>{if(r instanceof Ce){const o=r,n=o.isSelected(),i=o.isRendered(),a=o.isEnableRenderOnDemand();(i||n||!a)&&t.set(o.getId(),s.jsx(wx,{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 Ce){const i=n,a=i.isSelected(),l=i.isRendered(),c=i.isEnableRenderOnDemand(),u=i.getParent().getContentRect(),d=a||!c;if(l||d&&u.width>0&&u.height>0){const f=i.getMoveableElement();f.style.overflow=i.isEnableScrollbars()?"auto":"hidden";const p=o.getWindowId()||"",g=i.getId()+(i.isEnableWindowReMount()?p:"");t.set(i.getId(),hr.createPortal(s.jsx(kx,{controller:this,tabNode:i,windowId:p,visible:d,fullRedrawRevision:this._state.fullRedrawRevision,parentRedrawRevision:this._props.parentRedrawRevision},g),f,g)),i.setRendered(!0)}}});return t}renderDragTabButtons(){const t=[];return this._props.model.visitNodes(r=>{if(r instanceof Ce){const o=r;t.push(s.jsx(Mx,{controller:this,tabNode:o,dragging:Zl},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 Ve)){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===te.CENTER&&(r>n.y-a&&rn.x-a&&t=o.getRight()-i?c=te.RIGHT:r<=o.y+i?c=te.TOP:r>=o.getBottom()-i&&(c=te.BOTTOM)),c!==this._state.showHiddenBorder&&this.setState({showHiddenBorder:c})}closeOverlayBorder(t){const r=t.getSelectedNode();if(r===void 0)return;const o=this._currentDocument,n=o?.getElementById(Lt("flexlayout-tab-",r.getId())),i=!!o&&!!n&&n.contains(o.activeElement);this.doAction(oe.selectTab(r.getId())),i&&o.getElementById(Lt("flexlayout-tabbutton-",r.getId()))?.focus()}focusAdjacentTabset(t){const r=this._currentDocument,o=r?.activeElement;if(!r||!o||!this.getRootDiv()?.contains(o))return!1;const n=o.tagName;if(n==="INPUT"||n==="TEXTAREA"||o.isContentEditable||o.closest('[role="menu"]')||this._props.model.getMaximizedTabset(this._layoutId)!==void 0)return!1;const i=[];if(this._props.model.visitLayoutNodes(this._layoutId,u=>{u instanceof 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(Lt("flexlayout-tab-",u.getSelectedNode().getId()))?.contains(o);let l=i.findIndex(a);if(l===-1){const u=this._props.model.getActiveTabset(this._layoutId);l=u!==void 0?i.indexOf(u):0,l===-1&&(l=0)}const c=i[(l+t+i.length)%i.length];return r.getElementById(Lt("flexlayout-tabbutton-",c.getSelectedNode().getId()))?.focus(),this.doAction(oe.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 Nk(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&&!ro.Windows.has(t)&&ro.Windows.set(t,Mn())}getWindowId(){if(this.getCurrentWindow())return ro.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(oe.movePopoutToFront(t))}addTabToTabSet(t,r){if(this._props.model.getNodeById(t)!==void 0)return this.doAction(oe.addTab(r,t,te.CENTER,-1))}addTabToActiveTabSet(t){const r=this._props.model.getActiveTabset(this._layoutId);if(r!==void 0)return this.doAction(oe.addTab(t,r.getId(),te.CENTER,-1))}maximize(t){this.doAction(oe.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}),Jl(!t,this._currentDocument))}showOverlayOnAllWindows(t){for(const[,r]of this._props.model.getLayouts())r.getController()&&r.getController().showOverlay(t)}},D(ro,"Windows",new WeakMap),ro),Qk={close:s.jsx(es,{}),pin:s.jsx(lx,{}),closeTabset:s.jsx(es,{}),closeFloatPopout:s.jsx(es,{}),popout:s.jsx(Rd,{}),popoutFloat:s.jsx(dx,{}),maximize:s.jsx(sx,{}),restore:s.jsx(px,{}),more:s.jsx(cx,{}),edgeArrow:s.jsx(ux,{}),activeTabset:s.jsx(gx,{}),dragToDock:s.jsx(fx,{}),popoutFloatWindow:s.jsx(Rd,{})},eE=tx(),Ax=v.forwardRef((e,t)=>{const r=v.useRef(null),o=v.useRef(e.model),n=v.useRef(0);o.current!==e.model&&(e.model.getAdoptedFromModel()!==o.current&&n.current++,o.current=e.model),Ax.displayName="Layout",v.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 Ce&&l.isEnableRename()&&l.getLayout().getController()?.setEditingTab(l)},getRootDiv:()=>r.current.getRootDiv()}));const i={};return s.jsx(za,{ref:r,...e,parentRedrawRevision:i},n.current)});const Th=20,tE="bv-nodepack:layout-profiles:v1:",gp=new Map,Sd=new Map,ts=new Map,Ld="bv-layout-session-changed",Dx=e=>`${tE}${e}`;function hp(e){try{const t=JSON.parse(localStorage.getItem(Dx(e))??"");if(t?.schemaVersion===1&&Array.isArray(t.profiles))return t}catch{}return{schemaVersion:1,profiles:[]}}function Ix(e,t){localStorage.setItem(Dx(e),JSON.stringify(t))}const rE=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 Rh(e){const t=hp(e.editorType),r=rE(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>Th)throw new Error(`A maximum of ${Th} layouts can be saved for this editor.`);return Ix(e.editorType,{schemaVersion:1,profiles:a,selectedId:o}),i}function oE(e,t){const r=hp(e);Ix(e,{...r,profiles:r.profiles.filter(o=>o.id!==t),selectedId:r.selectedId===t?void 0:r.selectedId})}function jx(e){Sd.set(e,(Sd.get(e)??0)+1);for(const t of ts.get(e)??[])t()}function nE(e){return Sd.get(e)??0}function iE(e,t){const r=ts.get(e)??new Set;return r.add(t),ts.set(e,r),()=>{r.delete(t),r.size||ts.delete(e)}}function rs(e,t,r,o,n=!0){gp.set(e,{layout:structuredClone(t),status:r,profileId:o}),jx(e),n&&window.dispatchEvent(new CustomEvent(Ld,{detail:{key:e}}))}function qi(e){const t=gp.get(e);return t?structuredClone(t):void 0}function aE(e){gp.delete(e),jx(e)}function lE(e,t){return e.editorType===t.editorType&&e.editorVersion===t.editorVersion&&e.library===t.library&&e.signature===t.signature}function sE(e){const t=new Set,r=o=>{if(!(!o||typeof o!="object")){o.type==="tab"&&typeof o.id=="string"&&t.add(o.id);for(const n of o.children??[])r(n)}};r(e?.layout);for(const o of e?.borders??[])r(o);return t}function cE(e,t){const r=sE(e);return t.filter(o=>!r.has(o))}let wo=[];const Cd=new Set,Px=()=>Cd.forEach(e=>e());function Ct(e){const t=e.id??`${e.title}:${e.message??""}`,r=wo.findIndex(n=>n.id===t),o={...e,id:t};return wo=r>=0?[...wo.slice(0,r),o,...wo.slice(r+1)]:[...wo,o].slice(-3),Px(),t}function Bx(e){wo=wo.filter(t=>t.id!==e),Px()}const uE=e=>(Cd.add(e),()=>Cd.delete(e)),Sh=()=>wo;function dE(){const e=v.useSyncExternalStore(uE,Sh,Sh),t=v.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 v.useEffect(()=>{const r=o=>{const n=o.detail;n?.title&&Ct({title:n.title,message:n.message,tone:n.tone??"neutral",duration:n.duration??4500,actionLabel:n.actionLabel,onAction:n.onAction})};return window.addEventListener("bv-show-toast",r),()=>window.removeEventListener("bv-show-toast",r)},[]),v.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?hr.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(k1,{tone:r.tone,title:r.title,duration:r.duration,actionLabel:r.actionLabel,onAction:r.onAction,onClose:()=>Bx(r.id),children:r.message},r.id))}),document.body):null}const Lh="flexlayout-react@0.10.5",zx=v.createContext(new Map);function fE({id:e}){const t=v.useContext(zx);return s.jsx(s.Fragment,{children:t.get(e)??null})}function pE(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.layoutId??t.id,name:t.title,component:t.id,enablePopoutFloatIcon:!0}]}))}}}const gE=new Set([oe.MOVE_NODE,oe.DELETE_TAB,oe.DELETE_TABSET,oe.RENAME_TAB]),hE=e=>gE.has(e.type)?"modified":"adjusted";function Ch(e){aE(e)}function Fx({storageId:e,panels:t,resetSignal:r=0,defaultModel:o,onStatus:n}){const i=JSON.stringify({panels:t.map(f=>`${f.layoutId??f.id}:${f.weight}`),defaultModel:o}),a=v.useMemo(()=>o??pE(t),[i]),[l,c]=v.useState(()=>nt.fromJson(qi(e)?.layout??a)),u=v.useMemo(()=>new Map(t.map(f=>[f.id,f.content])),[t]);v.useEffect(()=>{const f=qi(e),p=f?cE(f.layout,t.map(g=>g.layoutId??g.id)):[];c(nt.fromJson(f?.layout??a)),n?.(f?.status??"saved"),p.length&&Ct({id:`bv-layout-missing:${e}`,title:"Layout has new panels",message:`${p.length} registered panel${p.length===1?" is":"s are"} missing from this saved layout.`,tone:"info",duration:0,actionLabel:"Use Factory layout",onAction:()=>{Ch(e),c(nt.fromJson(a)),n?.("saved")}})},[a,i,e]),v.useEffect(()=>{r&&(Ch(e),c(nt.fromJson(a)),n?.("saved"))},[a,r,e]),v.useEffect(()=>{const f=p=>{if(p.detail?.key!==e)return;const g=qi(e);g&&(c(nt.fromJson(g.layout)),n?.(g.status))};return window.addEventListener(Ld,f),()=>window.removeEventListener(Ld,f)},[n,e]);const d=f=>f.type===oe.POPOUT_TAB&&f.data.type==="float"&&l.getNodeById(f.data.node)?.getLayoutId()!==nt.MAIN_LAYOUT_ID?void 0:f;return s.jsx(zx.Provider,{value:u,children:s.jsx("div",{className:"bv-ui-dock flexlayout__theme_dark",children:s.jsx(Ax,{model:l,factory:f=>s.jsx(fE,{id:f.getComponent()??""}),constrainFloatPanels:!0,onAction:d,onModelChange:(f,p)=>{c(f);const g=qi(e),m=g?.status==="modified"?"modified":hE(p);rs(e,f.toJson(),m,g?.profileId,!1),n?.(m)}})})})}const jr=({children:e,className:t=""})=>s.jsx("svg",{className:t,viewBox:"0 0 24 24","aria-hidden":"true",children:e}),Ux=()=>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"})}),Vx=v.createContext({narrow:!1,minimal:!1,menuOverflow:!1}),Wx=()=>v.useContext(Vx);function bE(e){const t=e.mode==="workspace",r=v.useRef(null),[o,n]=v.useState(1/0),[i,a]=v.useState(!1),l=v.useRef(null);v.useEffect(()=>{const u=r.current;if(!u)return;const d=new ResizeObserver(f=>n(f[0]?.contentRect.width??u.clientWidth));return d.observe(u),()=>d.disconnect()},[]);const c=v.useMemo(()=>({narrow:o<760,minimal:o<620,menuOverflow:o<520}),[o]);return s.jsx(Vx.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(Ux,{})}),s.jsxs("strong",{className:"bv-ui-window-title",children:[s.jsx("span",{className:"bv-ui-window-title-full",children:e.title}),e.shortTitle&&s.jsx("span",{className:"bv-ui-window-title-short",children:e.shortTitle})]}),e.context&&s.jsx("div",{className:"bv-ui-window-context",children:e.context})]}),s.jsx("div",{className:"bv-ui-window-center",children:e.center}),s.jsxs("div",{className:"bv-ui-window-controls",children:[s.jsx("button",{type:"button",className:"bv-ui-window-control",title:"Choose BV window","aria-label":"Choose BV window",onClick:u=>window.dispatchEvent(new CustomEvent(As,{detail:{anchor:u.currentTarget}})),children:s.jsxs(jr,{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($o,{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(jr,{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(jr,{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(jr,{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(jr,{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(jr,{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(jr,{children:s.jsx("path",{d:"m7 7 10 10M17 7 7 17"})})})]})]})})}const Fi=(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 Rn({open:e,title:t,shortTitle:r,context:o,center:n,children:i,status:a,actions:l,activationToken:c=0,allowWorkspace:u=!0,initialMode:d="floating",initialGeometry:f,minSize:p={width:360,height:240},mode:g,className:m="",bodyClassName:_="",menuVisible:k,onMenuVisible:b,onClose:h,onGeometry:x,onModeChange:w}){const y=r??(t==="BV Regional Editor"?"Reg. Editor":t==="Regional Quick Edit"?"Quick Edit":void 0),T=()=>Fi({x:Math.max(16,(window.innerWidth-(f?.width??760))/2),y:Math.max(16,(window.innerHeight-(f?.height??640))/2),width:f?.width??760,height:f?.height??640,...f},p),[L,U]=v.useState(u?d:"floating"),[P,j]=v.useState(!1),[M,O]=v.useState(T),E=g??L,B=v.useRef(null),C=v.useRef(null),S=v.useRef(M),N=v.useRef(f),A=v.useRef();v.useEffect(()=>{S.current=M},[M]),v.useEffect(()=>{e&&j(!1)},[e]),v.useEffect(()=>{const H=B.current;if(!(!e||!H))return C.current=document.activeElement instanceof HTMLElement&&!H.contains(document.activeElement)?document.activeElement:C.current,wk(H)},[e]),v.useEffect(()=>{const H=B.current;if(!H)return;const ee=()=>{j(!1),requestAnimationFrame(()=>H.focus({preventScroll:!0}))},ne=()=>j(!0);return H.addEventListener("bv-ui-activate",ee),H.addEventListener("bv-ui-minimize",ne),()=>{H.removeEventListener("bv-ui-activate",ee),H.removeEventListener("bv-ui-minimize",ne)}},[]),v.useEffect(()=>{const H=B.current;if(!H)return;const ee=ne=>{const le=ne.detail;u&&le?.mode&&(U(le.mode),w?.(le.mode)),le?.mode==="floating"&&le.geometry&&O(Fi(le.geometry,p))};return H.addEventListener("bv-ui-set-window-state",ee),()=>H.removeEventListener("bv-ui-set-window-state",ee)},[u,p.height,p.width,w]),v.useEffect(()=>{e&&(j(!1),requestAnimationFrame(()=>B.current?.focus({preventScroll:!0})))},[c,e]),v.useEffect(()=>{const H=N.current;N.current=f,f&&O(ee=>Fi(vk(ee,H,f),p))},[f?.height,f?.width,f?.x,f?.y,p.height,p.width]),v.useEffect(()=>{if(!e)return;const H=()=>O(ee=>Fi(ee,p));return window.addEventListener("resize",H),()=>window.removeEventListener("resize",H)},[p.height,p.width,e]);const F=H=>{E!=="floating"||H.button!==0||H.target.closest("button,input,select,textarea")||(A.current={pointerId:H.pointerId,startX:H.clientX,startY:H.clientY,kind:"move",x:M.x,y:M.y},H.currentTarget.setPointerCapture(H.pointerId),H.preventDefault())},z=H=>ee=>{E!=="floating"||ee.button!==0||(A.current={pointerId:ee.pointerId,startX:ee.clientX,startY:ee.clientY,kind:"resize",direction:H,geometry:M},ee.currentTarget.setPointerCapture(ee.pointerId),ee.preventDefault(),ee.stopPropagation())},Z=H=>{const ee=A.current;if(!ee||ee.pointerId!==H.pointerId)return;const ne={x:H.clientX-ee.startX,y:H.clientY-ee.startY},le={...p,width:Math.min(p.width,420)};O(Ne=>Fi(ee.kind==="move"?{...Ne,x:ee.x+ne.x,y:ee.y+ne.y}:bk(ee.geometry,ne,ee.direction,le),p))},Y=H=>{A.current?.pointerId===H.pointerId&&(A.current=void 0,requestAnimationFrame(()=>x?.(S.current)))};if(!e)return null;const q=E==="workspace"?void 0:{left:M.x,top:M.y,width:M.width,height:M.height},Q=()=>{h(),requestAnimationFrame(()=>C.current?.focus({preventScroll:!0}))};return s.jsxs(s.Fragment,{children:[P&&s.jsx(xc,{title:t,onRestore:()=>j(!1),onClose:Q}),s.jsxs("div",{ref:B,tabIndex:-1,hidden:P,className:`bv-managed-window ${E} ${m}`.trim(),role:"dialog","aria-modal":E==="workspace","aria-label":t,style:q,onPointerDownCapture:()=>B.current&&xh(B.current),onFocusCapture:()=>B.current&&xh(B.current),onPointerMove:Z,onPointerUp:Y,onPointerCancel:Y,onKeyDown:H=>{if(H.key==="Escape"&&![...document.querySelectorAll(".bv-anchored-popover,[role='listbox'],[role='menu']")].some(ne=>ne.offsetParent!==null)){H.preventDefault(),H.stopPropagation(),Q();return}H.stopPropagation()},children:[s.jsxs("div",{className:"bv-managed-window-surface",children:[s.jsx(bE,{title:t,shortTitle:y,context:o,center:n,mode:E,allowWorkspace:u,menuVisible:k,onMenuVisible:b,onMode:()=>{if(!u)return;const H=E==="workspace"?"floating":"workspace";U(H),w?.(H)},onMinimize:()=>j(!0),onClose:Q,onPointerDown:F}),s.jsx("div",{className:`bv-managed-window-body ${_}`.trim(),children:i}),(a||l)&&s.jsx(vE,{status:a??null,actions:l,stacked:E==="floating"&&M.width<700,minimal:E==="floating"&&M.width<470})]}),E==="floating"&&["n","ne","e","se","s","sw","w","nw"].map(H=>s.jsx("div",{className:`bv-window-resize-handle ${H}`,"aria-hidden":"true",onPointerDown:z(H)},H))]})]})}function vE({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 bp({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(rp,{label:"More",actions:r,intent:"ghost",density:"compact"}),s.jsx("div",{className:"bv-footer-primary-action",children:e})]})}function xc({title:e,onRestore:t,onClose:r}){const o=v.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 bv-ui bv-density-compact",document.body.append(n)),n},[]);return v.useEffect(()=>{const n="#graph-canvas, .graph-canvas-container, nav, aside, [role='navigation'], .side-tool-bar-container, .side-bar-panel",i=()=>{const f=document.querySelector("#graph-canvas, .graph-canvas-container")?.getBoundingClientRect()??null,p=[...document.querySelectorAll("nav, aside, [role='navigation'], .side-tool-bar-container, .side-bar-panel")].map(m=>m.getBoundingClientRect()),g=mk(f,p,{width:window.innerWidth,height:window.innerHeight});o.style.setProperty("--bv-ui-window-shelf-left",`${g.left}px`),o.style.setProperty("--bv-ui-window-shelf-bottom",`${g.bottom}px`)},a=new ResizeObserver(i),l=new Set,c=()=>document.querySelectorAll(n).forEach(d=>{l.has(d)||(l.add(d),a.observe(d))}),u=new MutationObserver(()=>{c(),i()});return c(),u.observe(document.body,{childList:!0,subtree:!0}),window.addEventListener("resize",i),i(),()=>{u.disconnect(),a.disconnect(),window.removeEventListener("resize",i)}},[o]),v.useEffect(()=>()=>{requestAnimationFrame(()=>{o.childElementCount||o.remove()})},[o]),hr.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(Ux,{})}),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(jr,{children:s.jsx("path",{d:"m7 7 10 10M17 7 7 17"})})})]}),o)}function il({label:e,value:t,options:r,onNavigate:o}){const n=v.useSyncExternalStore(fk,di,di),i=n==="keep",a=Wx(),[l,c]=v.useState(!1),u=v.useRef(null),d=r.filter(k=>k.value!==t);if(!d.length)return null;const f=i?"Keep current window when switching. Hold Shift to replace once.":"Replace current window when switching. Hold Shift to keep once.",p=a.minimal,g=a.narrow,m=s.jsx(q1,{className:"bv-window-node-select",label:e,value:"",options:d,onValue:(k,b)=>o(k,b.shiftKey?i:!i)}),_=s.jsxs("button",{type:"button",role:"switch","aria-label":f,"aria-checked":i,className:"bv-window-switch-mode",title:f,onClick:()=>dp(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&&m,!g&&_,g&&s.jsxs("div",{ref:u,className:"bv-window-navigator-overflow",children:[s.jsx("button",{type:"button","aria-label":"More window navigation options","aria-expanded":l,onClick:()=>c(k=>!k),children:"•••"}),s.jsx($o,{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:m}),s.jsxs("div",{className:"bv-window-navigator-panel-row is-mode",children:[s.jsx("span",{children:"Keep current window"}),_]})]})})]})]})}function $x({onClick:e,storageId:t,editorType:r="regional",signature:o=`${r}:v1`}){const[n,i]=v.useState(null),[a,l]=v.useState(""),[c,u]=v.useState(0),d=np(),f=t??"",p=v.useCallback(T=>iE(f,T),[f]),g=v.useCallback(()=>nE(f),[f]);if(v.useSyncExternalStore(p,g,()=>0),!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(jr,{children:s.jsx("path",{d:"M4.9 9A7.5 7.5 0 1 1 5 15M4 4v5h5"})}),s.jsx("span",{children:"Reset layout"})]});const m=hp(r),_=qi(t),k=m.profiles.find(T=>T.id===_?.profileId),b=()=>u(T=>T+1),h=()=>{if(!_)return;const T=Rh({id:n==="rename"?k?.id:void 0,name:a,editorType:r,editorVersion:"1",library:Lh,signature:o,layout:_.layout});rs(t,_.layout,"saved",T.id),i(null),b()},x={editorType:r,editorVersion:"1",library:Lh,signature:o},w=(T,L)=>_?.status==="modified"?d.confirm({title:"Replace modified layout?",message:`Structural panel changes in this session will be discarded when switching to ${T}.`,confirmLabel:"Switch layout",danger:!0,action:L}):L(),y=[{id:"factory",label:"Factory layout",onSelect:()=>w("Factory",e)},...m.profiles.map(T=>{const L=lE(T,x);return{id:T.id,label:`${T.name}${L?"":" · Incompatible"}`,onSelect:()=>w(T.name,()=>{if(!L){e(),Ct({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}rs(t,T.layout,"saved",T.id)})}}),{id:"save-as",label:"Save as new layout…",disabled:!_,onSelect:()=>{l(""),i("save")}},...k?[{id:"update",label:`Update ${k.name}`,onSelect:()=>{_&&(Rh({...k,layout:_.layout}),rs(t,_.layout,"saved",k.id),b())}},{id:"rename",label:"Rename layout…",onSelect:()=>{l(k.name),i("rename")}},{id:"delete",label:"Delete layout",danger:!0,onSelect:()=>{oE(r,k.id),e(),b()}}]:[]];return s.jsxs(s.Fragment,{children:[s.jsx(rp,{label:`${k?.name??"Factory"}${_?.status&&_.status!=="saved"?` · ${_.status[0].toUpperCase()}${_.status.slice(1)}`:""}`,icon:s.jsx(jr,{children:s.jsx("path",{d:"M4 5h16v14H4zM8 5v14M8 10h12"})}),actions:y}),s.jsx(el,{open:!!n,title:n==="rename"?"Rename layout":"Save layout",onClose:()=>i(null),footer:s.jsx(ie,{intent:"primary",onClick:h,children:n==="rename"?"Rename":"Save layout"}),children:s.jsx(Hr,{label:"Layout name",value:a,maxLength:40,onValue:l})}),d.dialog]})}const Hx=new Map;let Yx;function Tr(e,t){const r=String(t);r&&Hx.set(e,r),r&&e!=="quick"&&(Yx=e)}function mE(){return Yx}function xo(e){return Hx.get(e)}function js({label:e,value:t,onImport:r,allowImport:o=!0}){const[n,i]=v.useState(!1),[a,l]=v.useState(""),[c,u]=v.useState(""),d=async()=>{try{await navigator.clipboard.writeText(JSON.stringify(t,null,2)),Ct({title:"Draft copied",message:`${e} draft JSON was copied to the clipboard.`,tone:"success",duration:4e3})}catch{Ct({title:"Clipboard unavailable",message:"Copy the draft from the import/export dialog instead.",tone:"warning",duration:4e3}),l(JSON.stringify(t,null,2)),i(!0)}},f=()=>{try{const g=JSON.parse(a);r(g),i(!1),u("")}catch(g){u(g instanceof Error?g.message:"Invalid draft JSON")}},p=()=>{l(""),u(""),i(!0)};return s.jsxs(s.Fragment,{children:[s.jsx(ie,{intent:"ghost",onClick:d,children:"Copy draft"}),o&&s.jsx(ie,{intent:"ghost",onClick:p,children:"Import draft"}),s.jsx(el,{open:n,title:`Import ${e} draft`,description:"Imported JSON updates only the editor draft. Save explicitly to update the workflow.",onClose:()=>i(!1),footer:s.jsxs(s.Fragment,{children:[s.jsx(ie,{intent:"ghost",iconOnly:!0,"aria-label":"Paste from clipboard",title:"Paste from clipboard",onClick:async()=>{try{l(await navigator.clipboard.readText())}catch{u("Clipboard permission was not granted.")}},children:"⌘"}),s.jsx(ie,{intent:"primary",onClick:f,children:"Import draft"})]}),children:s.jsx(X1,{label:"Draft JSON",value:a,rows:14,resize:"vertical",error:c,onValue:l})})]})}const Xr=(e,t)=>JSON.stringify(e)===JSON.stringify(t),Go=e=>e?.id??e?.key;function Nd(e,t,r,o="draft"){if(Xr(r,e))return{ok:!0,value:structuredClone(t)};if(Xr(t,e))return{ok:!0,value:structuredClone(r)};if(Xr(t,r))return{ok:!0,value:structuredClone(t)};if(Array.isArray(e)&&Array.isArray(t)&&Array.isArray(r)){if(![...e,...t,...r].every(_=>Go(_)!=null))return{ok:!1,reason:`Concurrent list change at ${o}`};const n=e.map(Go),i=t.map(Go),a=r.map(Go),l=!Xr(n,i.filter(_=>n.includes(_))),c=!Xr(n,a.filter(_=>n.includes(_)));if(l&&c&&!Xr(i,a))return{ok:!1,reason:`Concurrent reorder at ${o}`};const u=new Map(e.map(_=>[Go(_),_])),d=new Map(t.map(_=>[Go(_),_])),f=new Map(r.map(_=>[Go(_),_])),p=l?i:a,g=[...p,...i,...a].filter((_,k,b)=>b.indexOf(_)===k),m=[];for(const _ of g){const k=u.get(_),b=d.get(_),h=f.get(_);if(k&&b&&!h&&!Xr(k,b))return{ok:!1,reason:`Edited item ${_} was removed externally`};if(k&&!b&&h&&!Xr(k,h))return{ok:!1,reason:`Removed item ${_} changed externally`};if(!b&&!h)continue;if(!k){if(b&&h&&!Xr(b,h))return{ok:!1,reason:`Item ${_} was added differently`};m.push(structuredClone(b??h));continue}if(!b||!h){m.push(structuredClone(b??h));continue}const x=Nd(k,b,h,`${o}.${_}`);if(!x.ok)return x;m.push(x.value)}return{ok:!0,value:m}}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=Nd(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 xE(){const[e,t]=v.useState(xn);v.useEffect(()=>{const o=n=>t(n.detail);return window.addEventListener(ci,o),()=>window.removeEventListener(ci,o)},[]);const r=(o,n)=>ep({...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.jsxs("div",{className:"bv-control-live-row",children:[s.jsxs("div",{className:"bv-control-live-copy",children:[s.jsx("strong",{children:o.name}),s.jsxs("span",{children:[o.assignments.length," assignment",o.assignments.length===1?"":"s"]})]}),s.jsx(Ei,{className:"bv-control-live-toggle-field",label:`${o.name} state`,value:o.enabled,trueLabel:"Active",falseLabel:"Inactive",onValue:n=>r(o.id,n)})]},o.id))}):s.jsx(Cr,{tone:"info",title:"No controls configured",children:"Create a control in Configuration before using live workflow states."})}const yE=({open:e,onClose:t,hasControlNodes:r=!0})=>{const[o,n]=v.useState(0),i=xn().controls.length>0,a=v.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(Rn,{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 and layout are saved automatically.",actions:s.jsx($x,{onClick:()=>n(l=>l+1)}),children:[!r&&s.jsx(Cr,{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(Fx,{storageId:"control-center",resetSignal:o+(i?0:1),defaultModel:a,panels:[{id:"controls",title:"Controls",weight:1,content:s.jsx(xE,{})},{id:"configuration",title:"Configuration",weight:1,content:s.jsx(ck,{})}]})]})},Xx=()=>globalThis.__bvSmartPipeEditorBridge??{},vp=e=>String(e?.type??e?.comfyClass??""),fu=e=>vp(e)==="BV Smart Pipe Merge"?"merge":"pipe",Ps=()=>ct().rootGraph??ct().graph,Nh=()=>nl(Ps(),e=>["BV Smart Pipe","BV Smart Pipe Merge"].includes(vp(e)));function _E(){const[e,t]=v.useState([]),[r,o]=v.useState(null),[n,i]=v.useState(0),[a,l]=v.useState({}),c=v.useRef(new Map),[u,d]=v.useState(null),f=()=>({mode:"floating",geometry:{x:Math.max(16,(window.innerWidth-860)/2),y:Math.max(16,(window.innerHeight-650)/2),width:860,height:650}}),p=k=>`${k.kind}:${Ia(Ps(),k.node)}`,g=(k,b)=>c.current.get(k)?.dirty?d({key:k,action:b}):b(),m=(k,b)=>{const h=p(k),x=r,w=()=>{Tr(k.kind,Ia(Ps(),k.node)),t(y=>{const T=b&&x&&x!==h?y.filter(L=>L.key!==x):y;return T.some(L=>L.key===h)?T:[...T,{key:h,target:k}]}),l(y=>({...y,[h]:x&&y[x]?structuredClone(y[x]):y[h]??f()})),o(h),i(y=>y+1)};b&&x&&x!==h?g(x,w):w()},_=k=>g(k,()=>{c.current.delete(k),t(b=>b.filter(h=>h.key!==k)),l(b=>{const h={...b};return delete h[k],h}),o(b=>b===k?null:b)});return v.useEffect(()=>{const k=b=>{const h=b.detail;h?.node&&m({node:h.node,kind:h.kind??fu(h.node)},di()==="replace")};return window.addEventListener("bv-open-smart-pipe-editor",k),()=>window.removeEventListener("bv-open-smart-pipe-editor",k)}),s.jsxs(s.Fragment,{children:[e.map(k=>{const b=a[k.key]??f();return s.jsx(wE,{sessionKey:k.key,target:k.target,open:k.key===r,activation:n,presentation:b,onPresentation:h=>l(x=>({...x,[k.key]:h})),onActions:h=>c.current.set(k.key,h),onClose:()=>_(k.key),onRemap:h=>t(x=>x.map(w=>w.key===k.key?{...w,target:{node:h,kind:fu(h)}}:w)),onNavigate:(h,x)=>m({node:h,kind:fu(h)},x)},k.key)}),e.filter(k=>k.key!==r).map(k=>s.jsx(xc,{title:`${k.target.kind==="merge"?"Smart Pipe Merge":"Smart Pipe Editor"} · ${k.target.node.title||`#${k.target.node.id}`}`,onRestore:()=>m(k.target,!1),onClose:()=>_(k.key)},`shelf:${k.key}`)),s.jsx(op,{open:!!u,editorName:"Smart Pipe editor",onKeep:()=>d(null),onDiscard:()=>{const k=u;k&&c.current.get(k.key)?.discard(),d(null),k?.action()},onSave:()=>{const k=u;k&&c.current.get(k.key)?.save(),d(null),k?.action()}})]})}function wE({sessionKey:e,target:t,open:r,activation:o,presentation:n,onPresentation:i,onActions:a,onClose:l,onRemap:c,onNavigate:u}){const d=Xx()[t.kind],f=v.useMemo(()=>d?.read(t.node)??{},[d,t.node]),p=gc(f),g=p.value;hc(p);const m=v.useRef(structuredClone(f)),_=v.useRef(!1),[k,b]=v.useState(null),h=v.useMemo(()=>Ia(Ps(),t.node),[t.node]);v.useEffect(()=>{const M=()=>{const O=Nh().find(C=>C.key===h);if(!O){b("missing");return}if(O.node!==t.node){c(O.node);return}if(_.current)return;const E=d?.read(t.node)??{};if(JSON.stringify(E)===JSON.stringify(m.current))return;if(!p.canUndo){m.current=structuredClone(E),p.replace(E,!0),b(null);return}const B=Nd(m.current,g,E);B.ok?(m.current=structuredClone(E),p.replace(B.value)):b(B.reason)};return to().addEventListener("graphChanged",M),()=>to().removeEventListener("graphChanged",M)},[d,g,p.canUndo,p.replace,c,t.node,h]);const x=Ri(t.node),w=Nh(),y=w.filter(M=>En(M.node)).map(M=>({value:M.key,label:`${M.breadcrumb?`${M.breadcrumb} › `:""}${M.node.title||vp(M.node)} · #${M.node.id}`})),T=M=>p.commit(O=>(M(O),O)),L=t.kind==="pipe"?d?.validation?.(t.node,g)??[]:[],U=()=>{_.current=!0;try{d?.save(t.node,g);const M=d?.read(t.node)??g;m.current=structuredClone(M),p.replace(M,!0),b(null)}finally{_.current=!1}},P=()=>{const M=d?.read(t.node)??{};m.current=structuredClone(M),p.replace(M,!0),b(null)};v.useEffect(()=>{a({dirty:p.canUndo,save:U,discard:P})},[d,g,p.canUndo,p.replace,a,e,t.node]);const j=s.jsx(il,{label:"Smart Pipe node",value:w.find(M=>M.node===t.node)?.key??"",options:y,onNavigate:(M,O)=>{const E=w.find(B=>B.key===M);E&&u(E.node,O)}});return s.jsx(Rn,{open:r,activationToken:o,title:t.kind==="merge"?"Smart Pipe Merge":"Smart Pipe Editor",shortTitle:"Smart Pipe",menuVisible:x,onMenuVisible:M=>Tn(t.node,M),context:j,mode:n.mode,initialGeometry:n.geometry,onModeChange:M=>i({...n,mode:M}),onGeometry:M=>i({...n,geometry:M}),minSize:{width:420,height:360},onClose:l,status:L.length?"Required inputs missing":p.canUndo?"Unsaved changes":"Saved",actions:s.jsx(bp,{primary:s.jsx(ie,{intent:"primary",onClick:U,children:"Save"}),secondary:s.jsxs(s.Fragment,{children:[s.jsx(ie,{disabled:!p.canUndo,onClick:P,children:"Discard"}),s.jsx(js,{label:t.kind==="merge"?"Smart Pipe Merge":"Smart Pipe",value:{schema:"bv.editor-draft",version:1,type:t.kind,data:g},onImport:M=>{if(M?.schema!=="bv.editor-draft"||M?.version!==1||M?.type!==t.kind||!M?.data)throw new Error("Draft type or version does not match this editor.");p.replace(M.data)}})]}),overflow:[{id:"undo",label:"Undo",disabled:!p.canUndo,onSelect:p.undo},{id:"redo",label:"Redo",disabled:!p.canRedo,onSelect:p.redo}]}),children:k?s.jsxs(Cr,{tone:"danger",title:k==="missing"?"Node no longer exists":"Smart Pipe changed externally",children:[k==="missing"?"This draft cannot be saved because its workflow node was removed.":"An external change could not be migrated safely. Reload the editor to discard the incompatible draft.",s.jsxs("div",{className:"bv-callout-actions",children:[s.jsx(js,{label:t.kind==="merge"?"Smart Pipe Merge":"Smart Pipe",value:{schema:"bv.editor-draft",version:1,type:t.kind,data:g},onImport:()=>{},allowImport:!1}),s.jsx(ie,{onClick:()=>{if(k==="missing")l();else{const M=d?.read(t.node)??{};m.current=structuredClone(M),p.replace(M,!0),b(null)}},children:k==="missing"?"Close window":"Reload editor"})]})]}):t.kind==="pipe"?s.jsx(kE,{node:t.node,draft:g,update:T}):s.jsx(EE,{draft:g,update:T})})}function kE({node:e,draft:t,update:r}){const o=Xx().pipe,[n,i]=v.useState(()=>o?.predecessor(e)??{value:"Start new pipe",options:[]}),a=o?.validation?.(e,t)??[];v.useEffect(()=>{const f=()=>i(o?.predecessor(e)??{value:"Start new pipe",options:[]});to().addEventListener("graphChanged",f);const p=window.setInterval(f,750);return()=>{to().removeEventListener("graphChanged",f),window.clearInterval(p)}},[o,e]);const l=t.definition?.localSlots??[],c=t.projection?.inheritedSlots??[],u=[...l.map((f,p)=>({id:f.id,title:f.name||"New slot",description:"Local · input required",summary:f.type||"*",content:s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(Hr,{label:"Name",value:f.name??"",onValue:g=>r(m=>{m.definition.localSlots[p].name=g})}),s.jsx(Hr,{label:"Type",value:f.type??"*",onValue:g=>r(m=>{m.definition.localSlots[p].type=g||"*"})}),s.jsx(un,{label:"Expose output",checked:!!f.showOutput,onValue:g=>r(m=>{m.definition.localSlots[p].showOutput=g})})]})})),...c.map((f,p)=>({id:f.id,title:f.name||f.id,description:"Inherited override",content:s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(un,{label:"Expose input",checked:!!f.showInput,onValue:g=>r(m=>{m.projection.inheritedSlots[p].showInput=g})}),s.jsx(un,{label:"Expose output",checked:!!f.showOutput,onValue:g=>r(m=>{m.projection.inheritedSlots[p].showOutput=g})})]})}))],d=()=>r(f=>{f.definition.localSlots.push({id:crypto.randomUUID(),name:"new_slot",ordinal:f.definition.nextOrdinal++,type:"*",showInput:!0,showOutput:!1})});return s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(at,{label:"Pipe predecessor",value:n.value,options:n.options.length?n.options:[{value:n.value,label:n.value}],onValue:f=>{o?.setPredecessor(e,f),i(o?.predecessor(e)??{value:f,options:n.options})}}),a.length>0&&s.jsx(Cr,{tone:"danger",title:"Required Smart Pipe inputs are missing",children:a.map(f=>s.jsx("div",{children:f.message},f.id))}),s.jsx(ie,{onClick:d,children:"Add slot"}),u.length?s.jsx(tl,{items:u,onReorder:f=>r(p=>{const g=new Map(p.definition.localSlots.map(m=>[m.id,m]));p.definition.localSlots=f.map(m=>g.get(m.id)).filter(Boolean)}),onRemove:f=>r(p=>{p.definition.localSlots=p.definition.localSlots.filter(g=>g.id!==f),p.projection.inheritedSlots=p.projection.inheritedSlots.filter(g=>g.id!==f)})}):s.jsx(pc,{title:"No slots",description:"Add a local slot or connect a predecessor."})]})}function EE({draft:e,update:t}){const r=e.sources??[],[o,n]=v.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(at,{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(tl,{items:i,onReorder:c=>t(u=>{const d=new Map(u.sources.map(f=>[f.key,f]));u.sources=c.map(f=>d.get(f.id)).filter(Boolean)}),onRemove:c=>t(u=>{u.sources=u.sources.filter(d=>d.key!==c)})}):s.jsx(pc,{title:"No merge sources",description:"Connect a pipe or add a wireless source."})]})}const TE=`: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{color-scheme:dark;--bv-ui-bg:#0f1217;--bv-ui-surface:#171b22;--bv-ui-surface-raised:#1d222a;--bv-ui-surface-subtle:#13171d;--bv-ui-surface-hover:#252c36;--bv-ui-surface-active:#2d3541;--bv-ui-input:#12161c;--bv-ui-text:#edf2f7;--bv-ui-text-on-accent:#f8faff;--bv-ui-muted:#9ba6b4;--bv-ui-disabled:#697482;--bv-ui-border:#303945;--bv-ui-border-hover:#424d5c;--bv-ui-border-strong:#424d5c;--bv-ui-action:#2d518f;--bv-ui-action-hover:#3760a4;--bv-ui-action-active:#254477;--bv-ui-brand:#1345b7;--bv-ui-accent:var(--bv-ui-brand);--bv-ui-accent-hover:#2858c2;--bv-ui-accent-light:#6688d2;--bv-ui-accent-soft:#a9bce8;--bv-ui-accent-rgb:19,69,183;--bv-ui-selection-bg:rgba(19,69,183,.18);--bv-ui-selection-border:rgba(19,69,183,.46);--bv-ui-focus-ring:rgba(19,69,183,.3);--bv-ui-success:#356f59;--bv-ui-success-fg:#83c7aa;--bv-ui-success-bg:rgba(53,111,89,.2);--bv-ui-warning:#80612e;--bv-ui-warning-fg:#dfbd7a;--bv-ui-warning-bg:rgba(128,97,46,.22);--bv-ui-danger:#7b3f4b;--bv-ui-danger-fg:#e4a3af;--bv-ui-danger-bg:rgba(123,63,75,.22);--bv-ui-info:#355f78;--bv-ui-info-fg:#9cc7dd;--bv-ui-info-bg:rgba(53,95,120,.22);--bv-ui-overlay:rgba(5,8,12,.72);--bv-ui-shadow:rgba(0,0,0,.52);--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}:root[data-bv-theme=cool-graphite][data-bv-appearance=light] :is(.bv-ui,#bv-root,.bv-ui-portal,.bv-completion-popup),:root[data-bv-theme=cool-graphite][data-bv-appearance=auto].comfy-theme-light :is(.bv-ui,#bv-root,.bv-ui-portal,.bv-completion-popup){color-scheme:light;--bv-ui-bg:#f2f5f8;--bv-ui-surface:#ffffff;--bv-ui-surface-raised:#e7ecf2;--bv-ui-surface-subtle:#eef2f6;--bv-ui-surface-hover:#dce3eb;--bv-ui-surface-active:#cfd8e2;--bv-ui-input:#f8fafc;--bv-ui-text:#1b2530;--bv-ui-text-on-accent:#f8faff;--bv-ui-muted:#5f6d7c;--bv-ui-disabled:#8d98a4;--bv-ui-border:#c4ced9;--bv-ui-border-hover:#8e9baa;--bv-ui-border-strong:#6f7e8f;--bv-ui-action:#2d518f;--bv-ui-action-hover:#244477;--bv-ui-action-active:#1d3864;--bv-ui-accent-light:#315fc3;--bv-ui-accent-soft:#274ea7;--bv-ui-selection-bg:rgba(19,69,183,.12);--bv-ui-selection-border:rgba(19,69,183,.42);--bv-ui-focus-ring:rgba(19,69,183,.24);--bv-ui-success-fg:#285946;--bv-ui-success-bg:rgba(53,111,89,.13);--bv-ui-warning-fg:#684c1f;--bv-ui-warning-bg:rgba(128,97,46,.14);--bv-ui-danger-fg:#713744;--bv-ui-danger-bg:rgba(123,63,75,.13);--bv-ui-info-fg:#284f68;--bv-ui-info-bg:rgba(53,95,120,.13);--bv-ui-overlay:rgba(15,18,23,.48);--bv-ui-shadow:rgba(39,50,64,.22)}.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{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-control-editor{container:bv-control-editor / inline-size;display:grid;grid-template-rows:auto minmax(0,1fr) auto;gap:calc(12px * var(--bv-ui-scale));width:100%;height:100%;min-width:0;min-height:0;padding:calc(12px * var(--bv-ui-scale));overflow:hidden}.bv-control-editor-settings{display:grid;grid-template-columns:minmax(0,1fr) minmax(260px,auto);align-items:center;gap:calc(16px * var(--bv-ui-scale));padding:calc(12px * var(--bv-ui-scale));background:#ffffff08;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius-lg)}.bv-control-editor-settings>div{display:grid;gap:3px}.bv-control-editor-settings>div>span{color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale))}.bv-controls{min-height:0;overflow:auto;padding-right:4px}.bv-control-card{display:grid;gap:calc(12px * var(--bv-ui-scale));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-card-header{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:calc(12px * var(--bv-ui-scale))}.bv-control-card-header>span{align-self:center;color:var(--bv-ui-muted);white-space:nowrap}.bv-assignments{display:grid;gap:calc(8px * var(--bv-ui-scale))}.bv-control-assignment-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(150px,220px) auto;align-items:end;gap:calc(10px * var(--bv-ui-scale));padding:calc(9px * var(--bv-ui-scale));background:#0000001f;border:1px solid transparent;border-radius:var(--bv-ui-radius)}.bv-control-assignment-target{display:grid;align-self:center;gap:3px;min-width:0}.bv-control-assignment-target strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-control-assignment-target small{color:#ffbd66}.bv-control-assignment-row.conflict{border-left-color:#ffbd66}.bv-control-assignment-row.unresolved{color:#ff9f7a;border-left-color:#ff9f7a}.bv-control-add-group{padding-top:calc(10px * var(--bv-ui-scale));border-top:1px solid var(--bv-ui-border)}.bv-control-editor-footer{padding-top:calc(10px * var(--bv-ui-scale))}.bv-control-live-list{container:bv-control-live-list / inline-size;display:grid;align-content:start;gap:calc(9px * var(--bv-ui-scale));width:100%;height:100%;min-width:0;min-height:0;padding:calc(12px * var(--bv-ui-scale));overflow:auto}.bv-control-live-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:calc(16px * var(--bv-ui-scale));padding:calc(12px * var(--bv-ui-scale));background:#ffffff09;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius-lg)}.bv-control-live-copy{display:grid;gap:3px;min-width:0}.bv-control-live-copy strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-control-live-copy span{color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale))}.bv-control-live-toggle-field{width:max-content;max-width:100%;justify-self:end}.bv-control-live-toggle-field>.bv-control-label{display:none}.bv-control-live-toggle-field>.bv-toggle{max-width:100%;white-space:nowrap}.bv-legacy-shortcut-info{display:flex;align-items:center;justify-content:flex-end;gap:6px;min-width:0;color:var(--bv-ui-muted)}.bv-legacy-shortcut-info kbd{padding:3px 7px;color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius-sm);box-shadow:inset 0 -1px #ffffff0d}.bv-legacy-shortcut-info small{margin-left:6px}@container bv-control-editor (max-width:560px){.bv-control-editor-settings,.bv-control-card-header{grid-template-columns:1fr;align-items:stretch}.bv-control-assignment-row{grid-template-columns:minmax(0,1fr) auto}.bv-control-assignment-target{grid-column:1/-1}.bv-control-editor-footer{justify-content:flex-start}}@container bv-control-live-list (max-width:420px){.bv-control-live-row{grid-template-columns:1fr}.bv-control-live-toggle-field{justify-self:start}}.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}.bv-anchored-popover.bv-popover{min-width:260px}.bv-anchored-popover.bv-popover:has(.bv-menu-stack){width:min(320px,calc(100vw - 16px))}.bv-anchored-popover.bv-popover:has(.help-menu){width:min(560px,calc(100vw - 16px))}.bv-menu-stack{display:grid;gap:8px;width:100%}.bv-menu-stack>.bv-button{justify-content:space-between;width:100%;text-align:left}.bv-menu-stack>hr{width:100%;margin:2px 0;border:0;border-top:1px solid var(--bv-ui-border)}.bv-menu-stack>small{color:var(--bv-ui-muted)}.bv-anchored-popover.bv-popover:has(.editor-menus-overflow-panel){width:min(320px,calc(100vw - 16px))}.editor-menus-overflow-panel{display:grid;gap:3px}.menu-item{position:relative}.editor-menus>.menu-item>button{padding:4px 7px;border-color:transparent;background:transparent}.menu-popover,.toolbar-popover{position:absolute;z-index:20;top:calc(100% + 5px);left:0;display:grid;min-width:230px;padding:7px;border:1px solid var(--bv-border-color);border-radius:var(--bv-ui-radius);background:var(--comfy-menu-bg, #20242a);box-shadow:0 12px 35px #000b}.menu-popover button{display:flex;justify-content:space-between;border-color:transparent;background:transparent;text-align:left}.menu-popover button:hover{background:#ffffff12}.menu-popover hr{width:100%;border:0;border-top:1px solid #ffffff18}.menu-popover kbd{color:var(--bv-muted-text-color)}.view-menu label{display:grid;grid-template-columns:1fr auto;gap:7px}.view-menu input{grid-column:1 / -1;width:100%;padding:0}.view-menu small{padding:5px 7px;color:var(--bv-muted-text-color)}.help-menu{width:min(680px,calc(100vw - 40px));grid-template-columns:repeat(2,minmax(280px,1fr));gap:18px}.help-section{min-width:0}.help-section strong{display:block;margin-bottom:8px}.help-section dl{display:grid;grid-template-columns:minmax(135px,auto) minmax(110px,1fr);gap:5px 12px;margin:0}.help-section dt{color:#8fd2ff;white-space:nowrap}.help-section dd{min-width:0;margin:0;color:var(--bv-muted-text-color)}@media (max-width: 720px){.help-menu{width:calc(100vw - 40px);grid-template-columns:1fr;max-height:calc(100vh - 90px);overflow:auto}}.help-button{width:29px;border-radius:50%!important}.toolbar-popover-anchor{position:relative}.toolbar-popover{right:0;left:auto;gap:7px}.toolbar-popover label{display:grid;grid-template-columns:65px 1fr;align-items:center}.toolbar-popover input{width:120px!important}.panel-splitter{position:relative;cursor:col-resize;background:#ffffff0b;border-left:1px solid #ffffff12;border-right:1px solid #0008}.panel-splitter:hover,.panel-splitter:active{background:var(--bv-primary-color)}.bv-regional-shell main>aside{min-width:0}.bv-regional-shell .layers{display:flex;flex-direction:column;padding:8px}.panel-toolbar{display:flex;align-items:center;gap:3px;margin-bottom:7px;padding:4px;background:#ffffff06;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.panel-toolbar-spacer{flex:1}.panel-toolbar .panel-tool{display:flex;align-items:center;justify-content:center;gap:5px;min-width:28px;height:28px;min-height:28px;padding:0 6px;color:var(--bv-ui-muted);background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius-sm)}.panel-toolbar .panel-tool.primary{color:var(--bv-ui-accent-soft);background:rgba(var(--bv-ui-accent-rgb),.11);border-color:rgba(var(--bv-ui-accent-rgb),.2)}.panel-toolbar .panel-tool:hover:not(:disabled){color:var(--bv-ui-text);background:#fff1;border-color:#ffffff14}.panel-toolbar .panel-tool.danger:not(:disabled){color:#e68f8a}.panel-toolbar .panel-tool:disabled{opacity:.35;cursor:default}.panel-toolbar .panel-tool .tree-control-icon{width:15px;height:15px}.panel-toolbar .panel-tool span{flex:none}.region-row{position:relative;display:grid;grid-template-columns:18px 20px 14px minmax(55px,1fr) auto auto 25px 27px 20px}.region-row .region-expand{display:grid;place-items:center;width:20px;min-width:20px;height:24px;min-height:24px;padding:0;color:var(--bv-ui-muted)}.region-row .region-usage{flex:none;color:var(--bv-muted-text-color);font-size:10px;letter-spacing:.03em}.region-row .priority{flex:none;color:var(--bv-muted-text-color);font-size:11px}.layer-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.inline-name{min-width:0;width:100%;padding:2px 4px!important}.geometry-row{position:relative;margin-bottom:3px}.geometry-tree-item{margin-bottom:4px}.geometry-row{grid-template-columns:18px 20px 22px minmax(0,1fr) 25px 27px 20px 24px;margin-bottom:0}.geometry-row .layer-expand{display:grid;place-items:center;width:20px;min-width:20px;height:24px;min-height:24px;padding:0;color:var(--bv-ui-muted)}.bv-regional-shell .tree-control-icon{display:block;width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round;pointer-events:none}.bv-regional-shell .tree-control-icon circle[r="1"]{fill:currentColor;stroke:none}.bv-regional-shell .tree-icon-button{display:grid;place-items:center;width:24px;min-width:24px;height:24px;min-height:24px;padding:0;color:var(--bv-ui-muted);background:transparent;border:0;border-radius:var(--bv-ui-radius-sm)}.bv-regional-shell .tree-icon-button:hover{color:var(--bv-ui-text);background:#ffffff0e}.bv-regional-shell .tree-icon-button.deviant{color:#e2b96e;background:#e2b96e13}.bv-regional-shell .tree-icon-button.deviant:hover{color:#f0cc88;background:#e2b96e21}.bv-regional-shell .tree-check{display:grid;place-items:center;align-self:center;width:16px;min-width:16px;height:16px;min-height:16px;padding:0;color:var(--bv-ui-muted);background:transparent;border:1px solid color-mix(in srgb,var(--bv-ui-muted) 72%,transparent);border-radius:var(--bv-ui-radius-sm);box-shadow:none}.bv-regional-shell .tree-check[aria-checked=true]{color:var(--bv-ui-muted);border-color:color-mix(in srgb,var(--bv-ui-muted) 72%,transparent);background:transparent}.bv-regional-shell .tree-check.deviant{color:#e2b96e;border-color:#e2b96eb8;background:#e2b96e13}.bv-regional-shell .tree-check:hover{color:var(--bv-ui-text);border-color:var(--bv-ui-text);background:#ffffff09}.bv-regional-shell .tree-check.deviant:hover{color:#f0cc88;border-color:#e2b96e;background:#e2b96e21}.bv-regional-shell .tree-check .tree-control-icon{width:13px;height:13px;stroke-width:2.2}.bv-regional-shell .layer-overflow{position:relative;margin:0;padding:0!important;border:0!important;border-radius:0}.bv-regional-shell .layer-overflow>summary{display:grid;place-items:center;width:24px;height:24px;margin:0!important;padding:0;color:var(--bv-ui-muted);border-radius:var(--bv-ui-radius-sm);cursor:pointer;list-style:none}.bv-regional-shell .layer-overflow>summary::-webkit-details-marker{display:none}.bv-regional-shell .layer-overflow>summary:hover,.bv-regional-shell .layer-overflow[open]>summary{color:var(--bv-ui-text);background:#ffffff12}.bv-regional-shell .layer-overflow>div{position:absolute;z-index:30;top:calc(100% + 4px);right:0;display:grid;gap:2px;min-width:142px;padding:4px;background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius);box-shadow:0 10px 28px #00000061}.bv-regional-shell .layer-overflow>div>button{width:100%;min-height:28px;padding:4px 8px;text-align:left;white-space:nowrap}.geometry-operations{position:relative;display:grid;gap:2px;margin:2px 0 5px 20px;padding-left:12px;border-left:1px solid rgba(var(--bv-ui-accent-rgb),.28)}.geometry-operation{position:relative;display:grid;grid-template-columns:18px minmax(0,1fr) 24px 24px;align-items:center;gap:3px;min-height:32px;padding:3px 4px;color:var(--bv-ui-muted);border:1px solid transparent;border-radius:var(--bv-ui-radius-sm)}.geometry-operation:hover{color:var(--bv-ui-text);background:#ffffff0b}.geometry-operation.selected{color:var(--bv-ui-text);background:rgba(var(--bv-ui-accent-rgb),.14);border-color:rgba(var(--bv-ui-accent-rgb),.36);box-shadow:inset 2px 0 0 var(--bv-ui-accent)}.geometry-operation-select{display:grid!important;grid-template-columns:22px minmax(0,1fr) auto;align-items:center;gap:5px;min-width:0;min-height:24px;padding:0!important;color:inherit;text-align:left;background:transparent!important;border:0!important;box-shadow:none!important}.geometry-operation-select>span:nth-child(2){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.geometry-operation small{color:var(--bv-ui-muted);font-size:calc(9px * var(--bv-ui-scale));text-transform:capitalize}.geometry-operation>button:not(.geometry-operation-select){display:grid;place-items:center;min-width:24px;min-height:24px;padding:0;background:transparent;border:0}.operation-kind{display:grid;place-items:center;width:20px;height:20px;border-radius:var(--bv-ui-radius-sm);font-weight:800}.operation-kind.add{color:var(--bv-ui-accent-soft);background:rgba(var(--bv-ui-accent-rgb),.16)}.operation-kind.subtract{color:#f0c275;background:#e9b65f21}.bv-regional-shell .tree-drag-handle{display:grid;place-items:center;width:18px;min-width:18px;height:24px;min-height:24px;padding:0;color:var(--bv-ui-muted);background:transparent;border:0;border-radius:var(--bv-ui-radius-sm);cursor:grab;opacity:.62}.bv-regional-shell .tree-drag-handle:hover{color:var(--bv-ui-text);background:#ffffff12;opacity:1}.bv-regional-shell .tree-drag-handle:active{cursor:grabbing}.drop-target.drop-inside{background:rgba(var(--bv-ui-accent-rgb),.14)!important;outline:1px solid rgba(var(--bv-ui-accent-rgb),.7)!important}.drop-target.drop-before:before,.drop-target.drop-after:after{content:"";position:absolute;z-index:4;left:4px;right:4px;height:2px;background:var(--bv-ui-accent);border-radius:var(--bv-ui-radius-sm);box-shadow:0 0 0 2px rgba(var(--bv-ui-accent-rgb),.12)}.drop-target.drop-before:before{top:-2px}.drop-target.drop-after:after{bottom:-2px}.option-section{display:grid;gap:8px;padding:10px 0;border-bottom:1px solid #ffffff18}.option-section:first-child{padding-top:0}.option-section h3{margin:0;font-size:14px}.option-hint{padding:10px;border:1px dashed #ffffff22;border-radius:var(--bv-ui-radius-sm);color:var(--bv-muted-text-color)}.inspector details textarea{min-height:90px}.stroke-width-meta{color:var(--bv-muted-text-color);font-variant-numeric:tabular-nums}.inspector-density{width:100%;height:100%;min-height:0}.region-color-control{display:block;padding:8px;border:1px solid #ffffff18;border-radius:var(--bv-ui-radius)}.region-color-split{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end}.region-color-split>.bv-button{width:30px;min-width:30px;margin-bottom:1px;margin-left:-1px;border-radius:0 var(--bv-ui-radius) var(--bv-ui-radius) 0}.region-color-split>.bv-control-field .bv-color-field{border-radius:var(--bv-ui-radius) 0 0 var(--bv-ui-radius)}.region-color-control>.bv-control-field{min-width:0}.region-color-control>.bv-button{align-self:center}.bv-regional-shell header{min-height:38px;padding:5px 8px;gap:7px}.bv-regional-shell header strong{font-size:13px;white-space:nowrap}.menu-popover{font-size:13px;line-height:1.25}.menu-popover button{min-height:27px;padding:5px 7px}.menu-popover small{padding:5px 7px;color:var(--bv-muted-text-color)}.artboard-menu{gap:7px}.artboard-menu label{display:grid;grid-template-columns:65px 1fr;align-items:center}.artboard-menu input{width:130px}.bv-regional-shell[hidden]{display:none!important}.bv-managed-window{position:fixed;z-index:var(--bv-layer-window);min-width:0;min-height:0;overflow:visible;color:var(--bv-ui-text);border-radius:var(--bv-ui-radius);box-shadow:0 20px 70px #000b;outline:0}.bv-managed-window-surface{display:grid;grid-template-rows:auto minmax(0,1fr) auto;width:100%;height:100%;overflow:hidden;background:var(--bv-ui-surface);border:1px solid var(--bv-ui-border-hover);border-radius:inherit}.bv-managed-window[hidden]{display:none!important}.bv-managed-window.floating{resize:none}.bv-managed-window.workspace{left:24px;top:58px;width:calc(100vw - 48px);height:calc(100vh - 82px);border-radius:var(--bv-ui-radius);resize:none}.bv-managed-window-body{min-width:0;min-height:0;padding:var(--bv-ui-content-padding);overflow:auto}.bv-managed-window.floating>.bv-ui-window-header{cursor:move;user-select:none;touch-action:none}.bv-managed-window .bv-ui-window-header button,.bv-managed-window .bv-ui-window-header select{cursor:pointer;user-select:auto}.bv-window-resize-handle{position:absolute;z-index:8;touch-action:none}.bv-window-resize-handle.n,.bv-window-resize-handle.s{right:10px;left:10px;height:5px;cursor:ns-resize}.bv-window-resize-handle.n{top:0}.bv-window-resize-handle.s{bottom:0}.bv-window-resize-handle.e,.bv-window-resize-handle.w{top:10px;bottom:10px;width:5px;cursor:ew-resize}.bv-window-resize-handle.e{right:0}.bv-window-resize-handle.w{left:0}.bv-window-resize-handle.ne,.bv-window-resize-handle.nw,.bv-window-resize-handle.se,.bv-window-resize-handle.sw{width:10px;height:10px}.bv-window-resize-handle.ne,.bv-window-resize-handle.sw{cursor:nesw-resize}.bv-window-resize-handle.nw,.bv-window-resize-handle.se{cursor:nwse-resize}.bv-window-resize-handle.n,.bv-window-resize-handle.ne,.bv-window-resize-handle.nw{top:0}.bv-window-resize-handle.s,.bv-window-resize-handle.se,.bv-window-resize-handle.sw{bottom:0}.bv-window-resize-handle.e,.bv-window-resize-handle.ne,.bv-window-resize-handle.se{right:0}.bv-window-resize-handle.w,.bv-window-resize-handle.nw,.bv-window-resize-handle.sw{left:0}.bv-ui-window-header{display:grid!important;grid-template-columns:minmax(320px,1fr) auto minmax(180px,1fr);align-items:center;gap:calc(8px * var(--bv-ui-scale));min-height:calc(34px * var(--bv-ui-scale))!important;padding:calc(2px * var(--bv-ui-scale)) calc(6px * var(--bv-ui-scale))!important;background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)!important}.bv-managed-window .bv-ui-window-header{grid-template-columns:minmax(0,1fr) auto}.bv-managed-window .bv-ui-window-center:empty{display:none}.bv-managed-window .bv-ui-window-header:has(.bv-ui-window-center:not(:empty)){grid-template-columns:minmax(250px,1fr) auto minmax(78px,1fr)}.bv-regional-window-body{display:flex;flex-direction:column;min-width:0;min-height:0;padding:0;overflow:hidden}.bv-regional-window-body>.bv-regional-dock-host{flex:1;min-height:0}.bv-ui-window-identity{display:flex;align-items:center;gap:calc(7px * var(--bv-ui-scale));min-width:0;overflow:visible}.bv-ui-window-icon{display:grid;place-items:center;width:calc(25px * var(--bv-ui-scale));height:calc(25px * var(--bv-ui-scale));flex:0 0 calc(25px * var(--bv-ui-scale));color:var(--bv-ui-accent-soft);background:rgba(var(--bv-ui-accent-rgb),.13);border:1px solid rgba(var(--bv-ui-accent-rgb),.22);border-radius:var(--bv-ui-radius-sm)}.bv-ui-window-icon svg,.bv-ui-window-reset svg,.bv-ui-window-shelf-icon svg{width:calc(16px * var(--bv-ui-scale));height:calc(16px * var(--bv-ui-scale));fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.bv-ui-window-icon .bv-brand-cyclone,.bv-ui-window-shelf-icon .bv-brand-cyclone{color:var(--bv-ui-accent-light);fill:currentColor;stroke:none}.bv-ui-window-title{flex:0 1 auto;min-width:0;overflow:hidden;font-size:calc(13px * var(--bv-ui-scale));text-overflow:ellipsis;white-space:nowrap}.bv-ui-window-title-short{display:none}@container bv-window-header (max-width:900px){.bv-ui-window-title:has(.bv-ui-window-title-short) .bv-ui-window-title-full{display:none}.bv-ui-window-title-short{display:inline}}.bv-ui-window-context{display:flex;align-items:center;gap:calc(5px * var(--bv-ui-scale));min-width:0;overflow:visible;color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale))}.bv-regional-shell .bv-ui-window-context select{width:min(240px,100%);min-width:0;height:auto;padding:0 18px 0 calc(5px * var(--bv-ui-scale));color:var(--bv-ui-muted);background-color:transparent;border:0;border-radius:0;font:inherit;text-overflow:ellipsis}.bv-regional-shell .bv-ui-window-context .bv-select-shell{width:min(240px,100%);min-height:calc(22px * var(--bv-ui-scale));overflow:visible;background:#ffffff06;border-color:var(--bv-ui-border);border-radius:var(--bv-ui-radius-sm);box-shadow:none}.bv-regional-shell .bv-ui-window-context .bv-select-shell:hover{background:#ffffff0b;border-color:var(--bv-ui-border)}.bv-regional-shell .bv-ui-window-context .bv-select-shell:focus-within{background:rgba(var(--bv-ui-accent-rgb),.07);border-color:rgba(var(--bv-ui-accent-rgb),.34);box-shadow:none}.bv-regional-shell .bv-ui-window-context .bv-select-shell:focus-within select{border-color:transparent;box-shadow:none;outline:0}.bv-regional-shell .bv-ui-window-context .bv-select-shell>.bv-chevron{right:calc(7px * var(--bv-ui-scale));color:var(--bv-ui-muted)}.bv-ui-window-center{display:flex;align-self:stretch;align-items:center;justify-content:center;min-width:0}.bv-ui-window-center .editor-menus{justify-content:center}.editor-menu-label-short{display:none}@container bv-window-header (max-width:560px){.editor-menu-label-full{display:none}.editor-menu-label-short{display:inline}.bv-ui-window-center .editor-menus .bv-button{min-width:22px;padding-inline:5px}}.bv-ui-window-controls{display:flex;align-items:center;justify-content:flex-end;gap:2px}.bv-ui-window-control{display:grid;place-items:center;width:calc(24px * var(--bv-ui-scale));height:calc(24px * var(--bv-ui-scale));min-height:0;padding:0;color:var(--bv-ui-muted);background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius-sm);font-size:inherit}.bv-ui-window-control svg{width:calc(14px * var(--bv-ui-scale));height:calc(14px * var(--bv-ui-scale));fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.bv-ui-window-control:hover{color:var(--bv-ui-text);background:#ffffff12;border-color:#e7e1f714}.bv-ui-window-control--close:hover{color:#ffd8df;background:#ee6f8321;border-color:#ee6f8333}.bv-regional-shell.floating .bv-ui-window-header{cursor:move;user-select:none;touch-action:none}.bv-regional-shell .bv-ui-window-header button,.bv-regional-shell .bv-ui-window-header select{cursor:pointer;user-select:auto}.bv-ui-window-footer{container:bv-window-footer / inline-size;display:grid!important;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:calc(10px * var(--bv-ui-scale));min-height:calc(38px * var(--bv-ui-scale));padding:calc(4px * var(--bv-ui-scale)) calc(7px * var(--bv-ui-scale)) calc(4px * var(--bv-ui-scale)) calc(9px * var(--bv-ui-scale))!important;background:#211f27;border-top:1px solid var(--bv-ui-border)!important;border-bottom:0!important}.bv-ui-window-status{display:flex;align-items:center;gap:var(--bv-ui-field-gap);min-width:0;overflow:hidden;color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale));white-space:nowrap;text-overflow:ellipsis}.bv-ui-window-status>span:first-child{overflow:hidden;min-width:0;text-overflow:ellipsis;white-space:nowrap}.bv-ui-window-footer.has-warning .bv-ui-window-status{color:#e9b65f}.bv-ui-window-footer-actions{display:flex;align-items:center;gap:calc(7px * var(--bv-ui-scale));margin-left:auto}.bv-ui-window-footer-actions .bv-button{white-space:nowrap}.bv-ui-window-footer-actions .bv-button>svg{width:calc(16px * var(--bv-ui-scale));height:calc(16px * var(--bv-ui-scale));flex:none;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.bv-footer-action-set,.bv-footer-secondary-actions{display:flex;align-items:center;gap:5px}.bv-footer-action-set>.bv-menu-button{display:none}.bv-ui-window-footer.is-stacked{grid-template-columns:1fr}.bv-ui-window-footer.is-stacked .bv-ui-window-footer-actions{width:100%;margin-left:0;justify-content:flex-end}.bv-ui-window-footer.is-minimal .bv-footer-secondary-actions{display:none}.bv-ui-window-footer.is-minimal .bv-footer-action-set>.bv-menu-button{display:block}.bv-ui-window-footer.is-minimal .bv-ui-window-footer-actions>.bv-button:not(:last-child){display:none}.bv-regional-shell .bv-ui-window-reset{min-height:calc(29px * var(--bv-ui-scale));padding:0 calc(9px * var(--bv-ui-scale));font-size:calc(10px * var(--bv-ui-scale))}.bv-ui-window-shelf{position:fixed;z-index:var(--bv-layer-shelf);left:var(--bv-ui-window-shelf-left,calc(14px * var(--bv-ui-scale)));bottom:var(--bv-ui-window-shelf-bottom,calc(14px * var(--bv-ui-scale)));display:flex;align-items:flex-end;gap:calc(7px * var(--bv-ui-scale));pointer-events:none}.bv-ui-window-shelf-item{display:inline-flex;align-items:center;height:calc(36px * var(--bv-ui-scale));color:var(--bv-ui-muted);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 8px 24px #0006;font:calc(10px * var(--bv-ui-scale))/1.2 system-ui,-apple-system,"Segoe UI",sans-serif;pointer-events:auto;overflow:hidden}.bv-ui-window-shelf-restore,.bv-ui-window-shelf-close{align-self:stretch;display:inline-flex;align-items:center;color:inherit;background:transparent;border:0}.bv-ui-window-shelf-restore{gap:calc(7px * var(--bv-ui-scale));padding:0 calc(8px * var(--bv-ui-scale)) 0 calc(6px * var(--bv-ui-scale))}.bv-ui-window-shelf-close{padding:0 calc(7px * var(--bv-ui-scale));border-left:1px solid var(--bv-ui-border)}.bv-ui-window-shelf-close svg{width:calc(14px * var(--bv-ui-scale));fill:none;stroke:currentColor;stroke-width:1.7}.bv-ui-window-shelf-item:hover{color:var(--bv-ui-text);background:#2b2832;border-color:rgba(var(--bv-ui-accent-rgb),.3)}.bv-window-navigator{display:flex;align-items:center;gap:3px;min-width:0}.bv-window-navigator .bv-select-popover{width:clamp(112px,18vw,180px)}.bv-window-navigator .bv-select-trigger{min-height:22px;height:22px;padding:0 7px;gap:5px;color:var(--bv-ui-muted);background:#ffffff05;border-color:#e7e1f71a;border-radius:var(--bv-ui-radius-sm);font-size:10px;box-shadow:none}.bv-window-navigator .bv-select-trigger:hover:not(:disabled),.bv-window-navigator .bv-select-trigger[aria-expanded=true]{color:var(--bv-ui-text);background:#ffffff0b;border-color:#e7e1f72e;box-shadow:none}.bv-window-navigator .bv-select-trigger>span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-window-navigator .bv-chevron{width:6px;height:6px}.bv-window-switch-mode{display:inline-flex;align-items:center;height:22px;padding:0 4px;color:var(--bv-ui-muted);background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius-sm);font:inherit}.bv-window-switch-mode:hover{background:#ffffff0b;border-color:#e7e1f71a}.bv-window-switch-mode>span:last-child{display:none}.bv-window-switch-mode .bv-toggle-track{width:26px;height:14px;padding:1px}.bv-window-switch-mode .bv-toggle-track>span{width:10px;height:10px}.bv-window-switch-mode[aria-checked=true] .bv-toggle-track{background:rgba(var(--bv-ui-accent-rgb),.35);border-color:var(--bv-ui-accent)}.bv-window-switch-mode .bv-toggle-track>span{margin-left:0;transition:margin-left .15s}.bv-window-switch-mode[aria-checked=true] .bv-toggle-track>span{margin-left:auto;translate:0;transform:none;background:var(--bv-ui-accent-soft)}.bv-ui-window-header{container:bv-window-header / inline-size}.bv-window-navigator-overflow{position:relative}.bv-window-navigator-overflow>button{display:grid;place-items:center;width:22px;height:22px;padding:0;color:var(--bv-ui-muted);cursor:pointer;background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius-sm)}.bv-window-navigator-overflow>button:hover,.bv-window-navigator-overflow>button[aria-expanded=true]{color:var(--bv-ui-text);background:#ffffff0b;border-color:var(--bv-ui-border)}.bv-window-navigator-menu{color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 14px 42px #000b}.bv-window-navigator-panel{display:grid;gap:7px;width:min(260px,calc(100vw - 24px));padding:8px}.bv-window-navigator-panel-row{display:flex;align-items:center;justify-content:space-between;gap:12px;min-width:0;color:var(--bv-ui-muted)}.bv-window-navigator-panel-row.is-node>.bv-select-popover{width:100%}.bv-ui-window-header.is-menu-overflow .bv-ui-window-title-full{display:none}.bv-ui-window-header.is-menu-overflow .bv-ui-window-title-short{display:inline}.bv-ui-window-shelf-icon{display:grid;place-items:center;width:calc(24px * var(--bv-ui-scale));height:calc(24px * var(--bv-ui-scale));color:var(--bv-ui-accent-soft);background:rgba(var(--bv-ui-accent-rgb),.14);border-radius:var(--bv-ui-radius-sm)}.artboard-tools{position:absolute;z-index:12;top:12px;left:12px;display:flex;align-items:flex-start;gap:7px;pointer-events:none}.artboard-tools .bv-toolbar{pointer-events:auto}.zoom-controls{position:absolute;z-index:12;bottom:12px;left:50%;display:flex;gap:3px;padding:4px;border:1px solid #ffffff2b;border-radius:var(--bv-ui-radius);background:color-mix(in srgb,var(--comfy-menu-bg, #20242a) 92%,transparent);box-shadow:0 8px 25px #0009;backdrop-filter:blur(8px);transform:translate(-50%)}.zoom-controls button{min-width:32px;height:28px;padding:3px 8px;border-color:transparent;background:transparent}.zoom-controls button:nth-child(2){min-width:66px}.zoom-controls button:hover{background:#ffffff15}.tool-palette,.brush-flyout{pointer-events:auto;border:1px solid #ffffff2b;border-radius:var(--bv-ui-radius);background:color-mix(in srgb,var(--comfy-menu-bg, #20242a) 92%,transparent);box-shadow:0 8px 25px #0009;backdrop-filter:blur(8px)}.tool-palette{display:grid;gap:3px;padding:4px}.tool-palette button{display:grid;place-items:center;width:34px;height:34px;padding:6px;border-color:transparent;background:transparent}.tool-palette button:hover:not(:disabled){background:#ffffff15}.tool-palette button.active{background:var(--bv-primary-color)}.tool-palette button:disabled{opacity:.3;cursor:not-allowed}.tool-palette svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.brush-flyout{display:grid;width:235px;gap:8px;padding:10px}.brush-flyout header{min-height:0;padding:0 0 5px;border-bottom:1px solid #ffffff18}.brush-flyout header button{margin-left:auto}.brush-flyout label{display:grid;grid-template-columns:1fr auto;align-items:center;gap:4px 8px}.brush-flyout output{color:var(--bv-muted-text-color)}.brush-flyout input[type=range]{grid-column:1 / -1;width:100%;padding:0}.brush-flyout select{grid-column:1 / -1}.fixed-inspector .inspector-tabs{display:none}.bv-ui-dock .flexlayout__float_window{border:1px solid rgba(var(--bv-ui-accent-rgb),.36);border-radius:var(--bv-ui-radius);background:var(--bv-ui-surface);box-shadow:0 18px 48px #00000094,0 0 0 1px #ffffff09}.bv-ui-dock .flexlayout__float_window_header{min-height:31px;padding:6px 8px;color:var(--bv-ui-text);font-family:system-ui,-apple-system,Segoe UI,sans-serif;font-size:calc(12px * var(--bv-ui-scale));line-height:1.35;background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-ui-dock .flexlayout__float_window_drag_handle{min-width:22px;min-height:22px;padding:0 5px;color:var(--bv-ui-muted);border-radius:var(--bv-ui-radius-sm)}.bv-ui-dock .flexlayout__float_window_drag_handle:hover{color:var(--bv-ui-text);background:rgba(var(--bv-ui-accent-rgb),.14)}.bv-ui-dock .flexlayout__float_window_content{margin:0;background:var(--bv-ui-surface);border-radius:0 0 var(--bv-ui-radius) var(--bv-ui-radius)}.bv-detector-card{display:grid;gap:12px}.bv-detector-card-title{display:grid;min-width:0;gap:2px;margin-right:auto}.bv-detector-card-title strong,.bv-detector-card-title small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-detector-card-title small,.bv-detector-impact{color:var(--bv-ui-muted)}.bv-detector-impact{display:block;padding:8px 10px;border-left:2px solid rgba(var(--bv-ui-accent-rgb),.55);background:rgba(var(--bv-ui-accent-rgb),.07)}.bv-ui-empty-state{display:grid;place-items:center;min-height:160px;padding:28px;color:var(--bv-ui-muted);text-align:center;border:1px dashed var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-ui-empty-state strong{color:var(--bv-ui-text)}.bv-ui-empty-state p{margin:4px 0 0}.bv-inspector-section{display:grid;align-content:start;gap:calc(12px * var(--bv-ui-scale));min-width:0;padding:calc(10px * var(--bv-ui-scale))}.bv-inspector-section>h3{margin:0;font-size:calc(13px * var(--bv-ui-scale))}.inspector-tab-panel>.bv-inspector-section+.bv-inspector-section{border-top:1px solid var(--bv-ui-border)}.bv-compact-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,125px),1fr));gap:calc(10px * var(--bv-ui-scale));min-width:0}.bv-inspector-section{container:bv-inspector-section / inline-size}.bv-layer-bounds-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--bv-ui-field-gap);min-width:0}@container bv-inspector-section (max-width:220px){.bv-layer-bounds-grid{grid-template-columns:1fr}}.bv-control-field,.bv-number-field{display:grid;gap:var(--bv-ui-field-gap);min-width:0;color:var(--bv-ui-muted);font-size:calc(11px * var(--bv-ui-scale))}.bv-control-label,.bv-number-field>label{color:var(--bv-ui-muted)}.bv-control-help{color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale));line-height:1.4}.bv-select-shell{position:relative;display:block;min-width:0}.bv-select-shell select{width:100%;height:var(--bv-ui-control-height);padding:0 calc(36px * var(--bv-ui-scale)) 0 calc(11px * var(--bv-ui-scale));appearance:none;color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius);outline:0}.bv-select-shell>svg{position:absolute;top:50%;right:calc(10px * var(--bv-ui-scale));width:calc(16px * var(--bv-ui-scale));height:calc(16px * var(--bv-ui-scale));translate:0 -50%;fill:none;stroke:var(--bv-ui-muted);stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;pointer-events:none}.bv-select-shell:hover{border-color:var(--bv-ui-border-hover)}.bv-number-field{grid-template-columns:minmax(0,1fr)}.bv-number-slider{position:relative;min-width:0;padding-top:calc(9px * var(--bv-ui-scale))}.bv-number-slider output{position:absolute;z-index:2;left:var(--bubble-left,50%);bottom:calc(100% + 4px);translate:-50% 2px;padding:3px 6px;color:var(--bv-ui-text);white-space:nowrap;background:#302c3a;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius-sm);font-size:calc(10px * var(--bv-ui-scale));opacity:0;pointer-events:none}.bv-number-slider:hover output,.bv-number-slider:focus-within output{opacity:1;translate:-50% 0}.bv-number-track{width:100%;height:18px;margin:0;padding:0!important;appearance:none;background:transparent!important;border:0!important;cursor:pointer}.bv-number-track::-webkit-slider-runnable-track{height:4px;border-radius:999px;background:linear-gradient(90deg,var(--bv-ui-accent) 0 var(--range-fill),rgba(168,161,179,.18) var(--range-fill) 100%)}.bv-number-track::-webkit-slider-thumb{width:16px;height:16px;margin-top:-6px;appearance:none;border:2px solid var(--bv-ui-surface);border-radius:50%;background:var(--bv-ui-accent);box-shadow:0 0 0 1px rgba(var(--bv-ui-accent-rgb),.38)}.bv-number-box{display:flex;min-width:0;height:var(--bv-ui-control-height);overflow:hidden;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-number-box:focus-within{border-color:var(--bv-ui-accent);box-shadow:0 0 0 3px rgba(var(--bv-ui-accent-rgb),.18)}.bv-number-box input{min-width:0;width:100%;padding:0 calc(10px * var(--bv-ui-scale));color:var(--bv-ui-text);text-align:right;background:transparent;border:0;outline:0;font-variant-numeric:tabular-nums}.bv-number-box>span{display:grid;place-items:center;min-width:calc(34px * var(--bv-ui-scale));padding:0 7px;border-left:1px solid var(--bv-ui-border);background:#ffffff08}.bv-number-ticks{display:flex;justify-content:space-between;color:var(--bv-ui-muted);font-size:calc(9px * var(--bv-ui-scale))}.bv-textarea-shell{display:flex;min-width:0;max-width:100%;min-height:calc(100px * var(--bv-ui-scale));overflow:hidden;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-textarea-shell:hover{border-color:var(--bv-ui-border-hover)}.bv-textarea-shell:focus-within{border-color:var(--bv-ui-accent);box-shadow:0 0 0 3px rgba(var(--bv-ui-accent-rgb),.18)}.bv-textarea-shell textarea{width:100%;min-width:0;min-height:calc(98px * var(--bv-ui-scale));max-height:360px;padding:calc(9px * var(--bv-ui-scale)) calc(10px * var(--bv-ui-scale));color:var(--bv-ui-text);background:transparent;border:0;outline:0;resize:vertical;font:inherit;line-height:1.45}.bv-control-disclosure{margin:0;padding:0!important;overflow:hidden;border:1px solid var(--bv-ui-border)!important;border-radius:var(--bv-ui-radius)!important}.bv-control-disclosure>summary{position:relative;margin:0!important;padding:calc(9px * var(--bv-ui-scale)) calc(12px * var(--bv-ui-scale));list-style:none}.bv-control-disclosure>summary::-webkit-details-marker{display:none}.bv-control-disclosure>summary:after{content:"›";position:absolute;right:12px;font-size:18px;line-height:1}.bv-control-disclosure[open]>summary:after{transform:rotate(90deg)}.bv-control-disclosure-body{display:grid;gap:calc(10px * var(--bv-ui-scale));padding:calc(10px * var(--bv-ui-scale));border-top:1px solid var(--bv-ui-border)}.bv-control-field{container:bv-control-field / inline-size;display:grid;align-self:start;gap:var(--bv-ui-field-gap);min-width:0;color:var(--bv-ui-muted)}.bv-field-grid,.bv-choice-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,var(--bv-field-grid-min,165px)),1fr));gap:calc(9px * var(--bv-ui-scale));min-width:0}.bv-choice-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,var(--bv-choice-grid-min,145px)),1fr));gap:var(--bv-ui-field-gap)}.bv-editor-dialog,.bv-card-list,.bv-editor-item-summary{display:grid;gap:calc(10px * var(--bv-ui-scale));min-width:0}.bv-editor-item-compact-summary,.bv-detector-summary{display:flex;align-items:center;gap:calc(6px * var(--bv-ui-scale));min-width:0;color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale))}.bv-editor-item-compact-summary>span,.bv-detector-summary>span{max-width:220px;overflow:hidden;padding:2px 6px;text-overflow:ellipsis;white-space:nowrap;background:#ffffff09;border:1px solid var(--bv-ui-border);border-radius:999px}.bv-detector-summary{width:100%}.bv-detector-summary>strong{min-width:90px;color:var(--bv-ui-text)}.bv-detector-summary>span:nth-last-child(1){margin-left:auto}.bv-editor-item-details,.bv-detector-details{display:grid;gap:calc(10px * var(--bv-ui-scale))}.bv-editor-item-actions{display:flex;justify-content:flex-end;gap:var(--bv-ui-field-gap)}.bv-subtle-danger:hover:not(:disabled){color:#f19aa8;background:#d35d711a;border-color:#d35d7129}.bv-editor-impact{color:var(--bv-ui-muted)}.bv-control-label{display:flex;align-items:center;gap:6px;font-size:calc(11px * var(--bv-ui-scale))}.bv-control-help,.bv-control-message{color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale));line-height:1.4}.bv-control-message.is-error,.bv-control-field.is-error{color:#f19aa8}.bv-density-compact .bv-control-field,.bv-density-compact .bv-number-field{position:relative}.bv-density-compact .bv-control-help-overlay{position:absolute;z-index:30;top:calc(100% + 4px);left:0;width:max-content;max-width:min(280px,calc(100vw - 24px));padding:5px 7px;opacity:0;color:var(--bv-ui-text);background:#0d0c12;border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius-sm);box-shadow:0 8px 20px #0009;pointer-events:none;transition:opacity .12s ease}.bv-density-compact .bv-control-field:hover>.bv-control-help-overlay,.bv-density-compact .bv-control-field:focus-within>.bv-control-help-overlay,.bv-density-compact .bv-number-field:hover>.bv-control-help-overlay,.bv-density-compact .bv-number-field:focus-within>.bv-control-help-overlay{opacity:1}.bv-input-shell,.bv-select-shell{position:relative;display:flex;align-items:stretch;min-width:0;min-height:var(--bv-ui-control-height);overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-input-shell:focus-within,.bv-select-shell:focus-within,.bv-number-box:focus-within,.bv-textarea-shell:focus-within{border-color:var(--bv-ui-accent);box-shadow:0 0 0 3px rgba(var(--bv-ui-accent-rgb),.18)}.bv-input-shell>input,.bv-select-shell>select{width:100%;min-width:0;min-height:0;padding:0 calc(11px * var(--bv-ui-scale));color:inherit;background:transparent;border:0;outline:0}.bv-select-shell>select{appearance:none;padding-right:36px}.bv-field-icon,.bv-field-suffix,.bv-number-unit{display:grid;place-items:center;flex:0 0 auto;min-width:calc(34px * var(--bv-ui-scale));padding:0 7px;color:var(--bv-ui-muted);background:#ffffff06}.bv-input-shell>.bv-field-icon{border-right:1px solid var(--bv-ui-border)}.bv-field-suffix,.bv-number-unit{border-left:1px solid var(--bv-ui-border)}.bv-chevron{display:inline-block;width:8px;height:8px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg) translateY(-2px)}.bv-select-shell>.bv-chevron{position:absolute;top:50%;right:13px;transform:translateY(-65%) rotate(45deg);pointer-events:none}.bv-select-popover{position:relative;min-width:0}.bv-select-trigger{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:var(--bv-ui-field-gap);width:100%;min-height:var(--bv-ui-control-height);padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-select-trigger:hover:not(:disabled){border-color:var(--bv-ui-border-hover)}.bv-select-trigger:focus-visible,.bv-select-trigger[aria-expanded=true]{outline:0;border-color:var(--bv-ui-accent);box-shadow:0 0 0 3px rgba(var(--bv-ui-accent-rgb),.18)}.bv-select-trigger>.bv-chevron{justify-self:end}.bv-select-menu{z-index:120;display:grid;gap:2px;max-width:min(360px,calc(100vw - 24px));max-height:min(280px,50vh);padding:var(--bv-ui-field-gap);overflow:auto;color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 14px 42px #000b}.bv-select-menu>button{display:flex;align-items:center;gap:var(--bv-ui-field-gap);min-width:100%;min-height:var(--bv-ui-control-height);padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;white-space:nowrap;background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius)}.bv-select-menu>button:hover:not(:disabled),.bv-select-menu>button[aria-selected=true]{background:rgba(var(--bv-ui-accent-rgb),.14);border-color:rgba(var(--bv-ui-accent-rgb),.22)}.bv-select-menu>button:disabled{color:var(--bv-ui-muted);opacity:.45}.bv-input-shell>.bv-field-action{align-self:stretch;flex:0 0 auto;min-height:0;padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-muted);background:#ffffff06;border:0;border-left:1px solid var(--bv-ui-border);border-radius:0}.bv-input-shell>.bv-field-action:hover:not(:disabled){color:var(--bv-ui-text);background:rgba(var(--bv-ui-accent-rgb),.12)}@container bv-control-field (max-width:220px){.bv-input-shell:has(.bv-field-action){flex-wrap:wrap;overflow:visible}.bv-input-shell:has(.bv-field-action)>input{flex-basis:100%;min-height:var(--bv-ui-control-height)}.bv-input-shell:has(.bv-field-action)>.bv-field-action{flex:1 1 auto;min-height:var(--bv-ui-control-height);border-top:1px solid var(--bv-ui-border)}.bv-input-shell:has(.bv-field-action)>.bv-field-action:first-of-type{border-left:0}.bv-keybinding{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.bv-keybinding>button:first-child{grid-column:1/-1}}.bv-number-field{container:bv-number-field / inline-size;display:grid;gap:var(--bv-ui-field-gap);min-width:0;color:var(--bv-ui-muted);font-size:calc(11px * var(--bv-ui-scale))}.bv-number-value-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(calc(148px * var(--bv-ui-scale)),38%);align-items:center;gap:calc(11px * var(--bv-ui-scale));min-width:0}.bv-number-field.direct-only .bv-number-value-row{grid-template-columns:1fr}.bv-number-box{display:flex;min-width:0;height:var(--bv-ui-control-height);overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-number-box>input{width:100%;min-width:0;min-height:0;padding:0 10px;text-align:right;background:transparent;border:0;outline:0;font-variant-numeric:tabular-nums}.bv-number-ticks{display:flex;justify-content:space-between;width:calc(62% - 6px);font-size:calc(9px * var(--bv-ui-scale))}@container bv-number-field (max-width:380px){.bv-number-field.has-slider .bv-number-value-row{grid-template-columns:1fr}.bv-number-field.has-slider .bv-number-box{grid-row:1;width:min(calc(292px * var(--bv-ui-scale)),100%);justify-self:center}.bv-number-field.has-slider .bv-number-slider{grid-row:2;width:100%}.bv-number-field.has-slider .bv-number-ticks{width:100%}}.bv-textarea-shell{display:flex;min-width:0;max-width:100%;min-height:var(--bv-ui-textarea-height);overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-textarea-shell>textarea{width:100%;min-width:0;min-height:calc(var(--bv-ui-textarea-height) - 2px);max-height:360px;padding:9px 10px;line-height:1.45;background:transparent;border:0;outline:0;resize:vertical;scrollbar-color:rgba(170,162,181,.55) transparent;scrollbar-width:thin}.bv-textarea-shell>textarea::-webkit-scrollbar{width:10px;height:10px}.bv-textarea-shell>textarea::-webkit-scrollbar-track{background:transparent}.bv-textarea-shell>textarea::-webkit-scrollbar-thumb{background:#aaa2b57a;border:2px solid var(--bv-ui-input);border-radius:999px}.bv-textarea-shell>textarea::-webkit-scrollbar-corner{background:var(--bv-ui-input)}.bv-textarea-shell>textarea::-webkit-resizer{background-color:var(--bv-ui-input);background-image:linear-gradient(135deg,transparent 0 48%,rgba(170,162,181,.3) 49% 56%,transparent 57% 65%,rgba(170,162,181,.55) 66% 73%,transparent 74%)}.bv-textarea-shell.resize-none>textarea{resize:none}.bv-textarea-shell.resize-both{max-width:100%;overflow:auto}.bv-textarea-shell.resize-both>textarea{resize:both;max-width:100%}.bv-button{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:var(--bv-ui-control-height);padding:0 calc(13px * var(--bv-ui-scale));color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius);cursor:pointer}.bv-button:hover:not(:disabled){border-color:var(--bv-ui-border-hover);background:#302d39}.bv-button.primary{background:var(--bv-ui-accent);border-color:var(--bv-ui-accent-hover)}.bv-button.ghost{color:var(--bv-ui-muted);background:transparent;border-color:transparent}.bv-button.danger{color:#f19aa8;background:#d35d7121}.bv-button.warning{color:#f0c275;background:#e9b65f1f}.bv-button.success{color:#83deb6;background:#55c9941f}.bv-button.icon-only{width:var(--bv-ui-control-height);padding:0}.bv-button:disabled{opacity:.42;cursor:not-allowed}.bv-menu-button,.bv-split-button,.bv-popover-host,.bv-rich-select,.bv-search-field,.bv-image-picker{position:relative}.bv-menu,.bv-rich-select-menu,.bv-search-results,.bv-image-picker-menu,.bv-popover{position:absolute;z-index:100;top:calc(100% + 6px);right:0;min-width:220px;padding:5px;color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 14px 42px #000b}.bv-menu-content>button,.bv-rich-select-menu>button,.bv-search-results>button,.bv-image-picker-menu>button{display:flex;align-items:center;gap:var(--bv-ui-field-gap);width:100%;padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);text-align:left;background:transparent;border:0;border-radius:var(--bv-ui-radius)}.bv-menu-content>button:hover,.bv-rich-select-menu>button:hover,.bv-search-results>button:hover,.bv-image-picker-menu>button:hover{background:rgba(var(--bv-ui-accent-rgb),.12)}.bv-menu-content kbd{margin-left:auto}.bv-split-button{display:inline-flex}.bv-split-button>.bv-button:first-child{border-radius:var(--bv-ui-radius) 0 0 var(--bv-ui-radius)}.bv-split-button>.bv-button:nth-child(2){border-radius:0 var(--bv-ui-radius) var(--bv-ui-radius) 0;border-left-color:#fff3}.bv-toggle{display:flex;align-items:center;gap:10px;padding:0;color:var(--bv-ui-text);background:transparent;border:0}.bv-toggle-track{width:42px;height:23px;padding:3px;background:#35313f;border:1px solid var(--bv-ui-border);border-radius:999px}.bv-toggle-track>span{display:block;width:15px;height:15px;background:var(--bv-ui-muted);border-radius:50%;transition:translate .15s}.bv-toggle[aria-checked=true] .bv-toggle-track{background:rgba(var(--bv-ui-accent-rgb),.35);border-color:var(--bv-ui-accent)}.bv-toggle[aria-checked=true] .bv-toggle-track>span{translate:19px;background:var(--bv-ui-accent-soft)}.bv-checkbox-field{display:flex;align-items:flex-start;gap:9px;color:var(--bv-ui-text)}.bv-checkbox-field>input{position:absolute;opacity:0}.bv-checkbox-mark{display:grid;width:var(--bv-ui-check-size);height:var(--bv-ui-check-size);flex:none;border:1px solid var(--bv-ui-muted);border-radius:var(--bv-ui-radius-sm)}.bv-checkbox-field>input:checked+.bv-checkbox-mark{border-color:var(--bv-ui-accent)}.bv-checkbox-field>input:checked+.bv-checkbox-mark:after{content:"";width:8px;height:4px;margin:4px 3px;border-left:2px solid var(--bv-ui-accent);border-bottom:2px solid var(--bv-ui-accent);transform:rotate(-45deg)}.bv-checkbox-field small{display:block;color:var(--bv-ui-muted)}.bv-option-set{display:flex}.bv-option-set>button{min-height:var(--bv-ui-control-height);padding:0 12px;color:var(--bv-ui-muted);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border)}.bv-option-set>button+button{border-left:0}.bv-option-set>button:first-child{border-radius:var(--bv-ui-radius) 0 0 var(--bv-ui-radius)}.bv-option-set>button:last-child{border-radius:0 var(--bv-ui-radius) var(--bv-ui-radius) 0}.bv-option-set>button[aria-checked=true]{z-index:1;color:var(--bv-ui-text);background:rgba(var(--bv-ui-accent-rgb),.2);border-color:var(--bv-ui-accent);box-shadow:inset 0 0 0 1px var(--bv-ui-accent)}.bv-tag-input,.bv-multi-select{padding:var(--bv-ui-field-gap);color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-tag-values{display:flex;flex-wrap:wrap;gap:var(--bv-ui-field-gap)}.bv-tag{display:inline-flex;align-items:center;gap:4px;padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);background:rgba(var(--bv-ui-accent-rgb),.16);border:1px solid rgba(var(--bv-ui-accent-rgb),.28);border-radius:var(--bv-ui-radius)}.bv-tag>button{padding:0 2px;color:var(--bv-ui-muted);background:transparent;border:0}.bv-tag-input>input,.bv-multi-select>input{width:100%;min-height:var(--bv-ui-control-height);background:transparent;border:0;outline:0}.bv-tag-select{position:relative;min-width:0}.bv-tag-select-trigger{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:var(--bv-ui-field-gap);width:100%;min-height:var(--bv-ui-control-height);padding:3px var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-tag-select-trigger:hover{border-color:var(--bv-ui-border-hover)}.bv-tag-select-trigger:focus-visible,.bv-tag-select-trigger[aria-expanded=true]{outline:0;border-color:var(--bv-ui-accent);box-shadow:0 0 0 3px #8d70ff2e}.bv-tag-select-trigger>.bv-tag-values{min-width:0;overflow:hidden;flex-wrap:nowrap}.bv-tag-select-trigger .bv-tag{max-width:180px;padding:2px 6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-tag-select-trigger>.bv-chevron{justify-self:end}.bv-tag-select-menu>div>button{grid-template-columns:18px minmax(0,1fr)}.bv-tag-select-menu>div>button>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-tag-select-check{display:grid;place-items:center;width:16px;height:16px;color:var(--bv-ui-accent-soft);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius-sm)}.bv-tag-select-menu button[aria-selected=true] .bv-tag-select-check{background:#8d70ff33;border-color:var(--bv-ui-accent)}.bv-tag-select-menu button:disabled{opacity:.7;cursor:not-allowed}.bv-color-field,.bv-keybinding{position:relative;display:flex;gap:7px}.bv-color-swatch{width:var(--bv-ui-control-height);flex:0 0 var(--bv-ui-control-height);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius)}.bv-color-field>input{flex:1;min-width:0;padding:0 10px;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-anchored-popover{position:fixed;right:auto;bottom:auto;min-width:0;z-index:var(--bv-layer-flyout)}.bv-color-popover{padding:10px;background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 14px 34px #0000006b}.bv-color-popover .react-colorful{width:min(240px,calc(100vw - 36px))}.bv-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--bv-ui-field-gap);padding:var(--bv-ui-field-gap);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-toolbar.vertical{width:max-content;flex-direction:column}.bv-toolbar-divider{align-self:stretch;border-left:1px solid var(--bv-ui-border)}.bv-toolbar.vertical .bv-toolbar-divider{border-left:0;border-top:1px solid var(--bv-ui-border)}.bv-toolbar .active{color:var(--bv-ui-accent-soft);background:rgba(var(--bv-ui-accent-rgb),.18)}.bv-toolbar .bv-button>svg{width:calc(18px * var(--bv-ui-scale));height:calc(18px * var(--bv-ui-scale));fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.bv-section,.bv-card{min-width:0;color:var(--bv-ui-text)}.bv-section.outlined,.bv-card{border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-section.raised{background:var(--bv-ui-surface-raised);border-radius:var(--bv-ui-radius)}.bv-section>header,.bv-card>header{display:flex;align-items:center;gap:var(--bv-ui-field-gap);padding:var(--bv-ui-content-padding)}.bv-section>header>div,.bv-card>header>div{flex:1;min-width:0}.bv-section h3,.bv-section p{margin:0}.bv-section p,.bv-card small{color:var(--bv-ui-muted)}.bv-section-body,.bv-card>div{padding:var(--bv-ui-content-padding)}.bv-card.interactive{display:block;width:100%;text-align:left;background:transparent}.bv-callout{display:flex;gap:var(--bv-ui-field-gap);padding:var(--bv-ui-content-padding);color:var(--bv-ui-text);background:#ffffff09;border:1px solid var(--bv-ui-border);border-left:3px solid var(--bv-ui-muted);border-radius:var(--bv-ui-radius-sm)}.bv-callout.info{border-left-color:#72a7ff}.bv-callout.success{border-left-color:var(--bv-ui-success)}.bv-callout.warning{border-left-color:var(--bv-ui-warning)}.bv-callout.danger{border-left-color:var(--bv-ui-danger)}.bv-callout>div{flex:1}.bv-badge{display:inline-flex;align-items:center;padding:3px 7px;color:var(--bv-ui-muted);background:#ffffff0f;border-radius:999px;font-size:.85em}.bv-badge.success{color:#83deb6}.bv-badge.warning{color:#f0c275}.bv-badge.danger{color:#f19aa8}.bv-dialog-layer{position:fixed;z-index:var(--bv-layer-modal);inset:0;display:grid;place-items:center;padding:16px}.bv-dialog-layer.modal{background:#08070a9e}.bv-dialog-layer.modeless{place-items:start end;pointer-events:none}.bv-dialog{display:grid;grid-template-rows:auto minmax(0,1fr) auto;width:min(680px,calc(100vw - 32px));max-height:86vh;overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-surface);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius-lg);box-shadow:0 28px 90px #000c;pointer-events:auto}.bv-dialog.small{width:min(480px,calc(100vw - 32px))}.bv-dialog.large{width:min(1040px,calc(100vw - 32px))}.bv-dialog>header,.bv-dialog>footer{display:flex;align-items:flex-start;gap:var(--bv-ui-field-gap);padding:var(--bv-ui-content-padding);background:var(--bv-ui-surface-raised)}.bv-dialog>header>div{flex:1}.bv-dialog h2,.bv-dialog p{margin:0}.bv-dialog-body{min-height:0;overflow:auto;padding:var(--bv-ui-content-padding)}.bv-tree{color:var(--bv-ui-text)}.bv-tree-row{display:grid;grid-template-columns:22px auto minmax(0,1fr) auto auto;align-items:center;gap:var(--bv-ui-field-gap);min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap);border:1px solid transparent;border-radius:var(--bv-ui-radius)}.bv-tree [role=treeitem][aria-selected=true]>.bv-tree-row{background:rgba(var(--bv-ui-accent-rgb),.15);border-color:rgba(var(--bv-ui-accent-rgb),.42)}.bv-tree [role=group]{margin-left:17px;padding-left:8px;border-left:1px solid rgba(var(--bv-ui-accent-rgb),.25)}.bv-tree-expander{display:grid;place-items:center;padding:0;color:var(--bv-ui-muted);background:transparent;border:0}.bv-tree [aria-expanded=false]>.bv-tree-row .bv-chevron{transform:rotate(-45deg)}.bv-tree-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-tree-meta{color:var(--bv-ui-muted);font-size:.85em}.bv-showcase{display:grid;grid-template-columns:240px minmax(0,1fr);min-height:100vh;color:var(--bv-ui-text);background:var(--bv-ui-bg)}.bv-showcase>aside{position:sticky;top:0;height:100vh;display:grid;align-content:start;gap:4px;padding:24px 16px;background:var(--bv-ui-surface);border-right:1px solid var(--bv-ui-border)}.bv-showcase>aside a{padding:8px 10px;color:var(--bv-ui-muted);text-decoration:none;border-radius:var(--bv-ui-radius)}.bv-showcase>aside a:hover{color:var(--bv-ui-text);background:#8d70ff1f}.bv-showcase>main{display:grid;gap:22px;width:min(1180px,100%);padding:32px}.bv-showcase>main>header{display:flex;align-items:end;justify-content:space-between;gap:18px}.bv-showcase>main>header>div{min-width:0}.bv-showcase>main>header>.bv-control-field{width:min(320px,100%)}.bv-showcase>main>header h1,.bv-showcase>main>header p{margin:0}.bv-demo-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:14px}.bv-showcase .bv-section-body{display:grid;gap:14px}.bv-window-contract-demo{container:bv-window-header / inline-size;display:grid;grid-template-rows:auto minmax(100px,1fr) auto;min-width:0;overflow:hidden;background:var(--bv-ui-surface);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius)}.bv-window-contract-demo>.bv-ui-window-header{position:relative}.bv-window-contract-body{display:grid;align-content:center;gap:4px;padding:var(--bv-ui-content-padding);color:var(--bv-ui-muted)}.bv-window-contract-body strong{color:var(--bv-ui-text)}.bv-demo-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.bv-panel-demo{overflow:hidden;background:var(--bv-ui-surface);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-panel-demo>div{padding:var(--bv-ui-content-padding);color:var(--bv-ui-muted)}@media (max-width:760px){.bv-showcase{grid-template-columns:1fr}.bv-showcase>aside{position:relative;display:flex;height:auto;padding:10px;overflow-x:auto}.bv-showcase>aside h2{margin:0 8px 0 0}.bv-showcase>aside a{white-space:nowrap}.bv-showcase>main{padding:12px}.bv-showcase>main>header{align-items:stretch;flex-direction:column}.bv-showcase>main>header>.bv-control-field{width:100%}.bv-toast-stack{right:12px;bottom:12px;left:12px}.bv-toast{width:100%}}.bv-density-compact .bv-toggle-track{width:36px;height:20px;padding:2px}.bv-density-compact .bv-toggle-track>span{width:14px;height:14px}.bv-density-compact .bv-toggle[aria-checked=true] .bv-toggle-track>span{translate:16px}.bv-density-compact .bv-badge{padding:2px 6px}.bv-density-compact .bv-tooltip{padding:4px 7px}.bv-density-compact .bv-menu,.bv-density-compact .bv-rich-select-menu,.bv-density-compact .bv-search-results,.bv-density-compact .bv-image-picker-menu,.bv-density-compact .bv-popover{padding:var(--bv-ui-field-gap)}.bv-card>header>div,.bv-rich-select-trigger>span,.bv-rich-select-menu button>span,.bv-search-results button>span,.bv-image-picker button>span{display:grid;gap:2px}.bv-card>header>div small,.bv-rich-select small,.bv-search-results small,.bv-image-picker small{color:var(--bv-ui-muted);font-size:.84em}.bv-rich-select-trigger,.bv-image-picker-trigger{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--bv-ui-field-gap);width:100%;min-height:var(--bv-ui-control-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-rich-select-trigger>.bv-chevron,.bv-image-picker-trigger>.bv-chevron{justify-self:end}.bv-image-picker-control{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:stretch;min-width:0;overflow:hidden;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-image-picker-control:focus-within{border-color:var(--bv-ui-accent);box-shadow:0 0 0 3px #8d70ff2e}.bv-image-picker-control .bv-image-picker-trigger{min-width:0;padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);background:transparent;border:0;border-radius:0}.bv-image-preview-action,.bv-image-picker-toggle{align-self:stretch;width:28px!important;min-height:0;padding:0;color:var(--bv-ui-muted);background:transparent;border:0;border-left:1px solid transparent;border-radius:0}.bv-image-preview-action:hover:not(:disabled),.bv-image-picker-toggle:hover:not(:disabled){color:var(--bv-ui-text);background:#8d70ff21;border-left-color:var(--bv-ui-border)}.bv-image-preview-action svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}.bv-image-picker-toggle .bv-chevron{width:7px;height:7px}.bv-search-field .bv-input-shell>span:first-child{display:grid;place-items:center;width:34px;color:var(--bv-ui-muted)}.bv-search-results{left:0;right:auto;width:100%}.bv-keybinding{align-items:stretch}.bv-keybinding>button{min-height:var(--bv-ui-control-height);padding:0 10px;color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-keybinding>button:first-child{flex:1;text-align:left}.bv-compound-field{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,calc(132px * var(--bv-ui-scale))),1fr));align-self:start;gap:var(--bv-ui-field-gap);min-width:0;margin:0;padding:0;border:0}.bv-compound-field>legend{grid-column:1/-1;margin:0 0 1px;padding:0;color:var(--bv-ui-muted);font-size:calc(11px * var(--bv-ui-scale))}.bv-json-editor{overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-json-toolbar{display:flex;justify-content:flex-end;padding:var(--bv-ui-field-gap);background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-json-toolbar>button{min-height:28px;padding:0 9px;color:var(--bv-ui-text);background:transparent;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-json-editor textarea,.bv-json-editor pre{outline:0!important;font:calc(11px * var(--bv-ui-scale))/1.45 var(--bv-ui-font-mono)!important}.bv-progress{display:grid;gap:var(--bv-ui-field-gap)}.bv-progress>div:first-child{display:flex;justify-content:space-between}.bv-progress [role=progressbar]{height:7px;overflow:hidden;background:var(--bv-ui-input);border-radius:999px}.bv-progress [role=progressbar]>span{display:block;height:100%;background:linear-gradient(90deg,var(--bv-ui-accent),var(--bv-ui-accent-light));border-radius:inherit}.bv-empty-state{display:grid;justify-items:center;gap:var(--bv-ui-field-gap);padding:calc(var(--bv-ui-content-padding) * 2);color:var(--bv-ui-muted);text-align:center;border:1px dashed var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-empty-state strong{color:var(--bv-ui-text)}.bv-empty-state p{margin:0}.bv-toast-stack{position:fixed;z-index:1000;right:18px;bottom:18px;display:grid;justify-items:end;gap:8px;max-width:calc(100vw - 24px)}.bv-toast{display:flex;align-items:flex-start;gap:10px;width:min(360px,calc(100vw - 24px));max-width:calc(100vw - 24px);min-width:0;padding:10px 10px 10px 12px;color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 12px 30px #0008}.bv-toast>div{flex:1 1 auto;min-width:0}.bv-toast strong{display:block;line-height:1.3}.bv-toast p{margin:4px 0 0;color:var(--bv-ui-muted);line-height:1.4;overflow-wrap:anywhere}.bv-toast>.bv-button{flex:0 0 auto;width:26px;min-width:26px;height:26px;padding:0;margin-top:-3px}.bv-breadcrumbs{display:flex;align-items:center;gap:var(--bv-ui-field-gap);color:var(--bv-ui-muted)}.bv-breadcrumbs button{padding:0;color:var(--bv-ui-accent-soft);background:transparent;border:0}.bv-tabs{container:bv-tabs / inline-size;min-width:0}.bv-tabs>div[role=tablist]{display:flex;align-items:end;min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding) 0;background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-tabs>div[role=tablist]>button{position:relative;min-height:var(--bv-ui-control-height);padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-muted);background:transparent;border:0}.bv-tabs>div[role=tablist]>button[aria-selected=true]{color:var(--bv-ui-text)}.bv-tabs>div[role=tablist]>button[aria-selected=true]:after{content:"";position:absolute;right:0;bottom:0;left:0;height:2px;background:var(--bv-ui-accent)}.bv-tabs>[role=tabpanel]{padding:var(--bv-ui-content-padding)}.bv-tabs.vertical{display:grid;grid-template-columns:auto 1fr}.bv-tabs.vertical>div[role=tablist]{display:flex;flex-direction:column;align-items:stretch;padding:6px 0 6px 6px;border-right:1px solid var(--bv-ui-border);border-bottom:0}.bv-accordion{overflow:hidden;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-accordion>section+section{border-top:1px solid var(--bv-ui-border)}.bv-accordion>section>button{display:flex;justify-content:space-between;align-items:center;width:100%;min-height:var(--bv-ui-row-height);padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;background:var(--bv-ui-surface-raised);border:0}.bv-accordion>section>button .bv-chevron{flex:none;align-self:center;transform-origin:center}.bv-accordion>section>button[aria-expanded=true] .bv-chevron{transform:rotate(225deg)}.bv-accordion>section>div{padding:var(--bv-ui-content-padding)}.bv-pagination{display:flex;align-items:center;gap:3px}.bv-pagination button{min-width:var(--bv-ui-control-height);min-height:var(--bv-ui-control-height);padding:0 8px;color:var(--bv-ui-muted);background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius)}.bv-pagination button[aria-current=page]{color:var(--bv-ui-text);background:var(--bv-ui-accent)}.bv-pagination button:hover{border-color:var(--bv-ui-border)}.bv-steps{display:flex;min-width:0;overflow-x:auto;counter-reset:steps;margin:0;padding:0;list-style:none}.bv-steps li{position:relative;display:grid;justify-items:center;gap:5px;flex:1;color:var(--bv-ui-muted)}.bv-steps li:not(:last-child):after{content:"";position:absolute;top:14px;left:calc(50% + 18px);width:calc(100% - 36px);border-top:1px solid var(--bv-ui-border)}.bv-steps li>span{z-index:1;display:grid;place-items:center;width:28px;height:28px;background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border);border-radius:50%}.bv-steps li.current,.bv-steps li.complete{color:var(--bv-ui-text)}.bv-steps li.current>span,.bv-steps li.complete>span{border-color:var(--bv-ui-accent)}.bv-tooltip-host{position:relative;display:inline-flex}.bv-tooltip-host>.bv-tooltip{position:absolute;z-index:110;bottom:calc(100% + 7px);left:50%;width:max-content;max-width:260px;padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-text);background:#0d0c12;border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius-sm);box-shadow:0 8px 20px #0009;translate:-50%;opacity:0;pointer-events:none}.bv-tooltip-host:hover>.bv-tooltip,.bv-tooltip-host:focus-within>.bv-tooltip{opacity:1}.bv-divider{display:flex;align-items:center;gap:9px;color:var(--bv-ui-muted)}.bv-divider:before,.bv-divider:after{content:"";flex:1;border-top:1px solid var(--bv-ui-border)}.bv-divider.vertical{flex-direction:column;align-self:stretch}.bv-divider.vertical:before,.bv-divider.vertical:after{border-top:0;border-left:1px solid var(--bv-ui-border)}.bv-code-block{overflow:hidden;background:#100f16;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-code-block>header{display:flex;justify-content:space-between;align-items:center;min-height:var(--bv-ui-row-height);padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-muted);background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-code-block pre{margin:0;padding:var(--bv-ui-content-padding);overflow:auto;font:calc(11px * var(--bv-ui-scale))/1.55 var(--bv-ui-font-mono)}.bv-code-line{display:block;min-height:1.55em}.bv-code-block.line-numbers pre{counter-reset:line}.bv-code-block.line-numbers .bv-code-line:before{counter-increment:line;content:counter(line);display:inline-block;width:2.5em;margin-right:1em;color:#6f6a7b;text-align:right}.bv-definition-list{container:bv-definition-list / inline-size;display:grid;gap:7px;margin:0}.bv-definition-row{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:18px}.bv-definition-list dt{color:var(--bv-ui-muted)}.bv-definition-list dd{margin:0}.bv-table-scroll{overflow:auto;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-table-scroll table{width:100%;border-collapse:collapse}.bv-table-scroll th,.bv-table-scroll td{padding:var(--bv-ui-content-padding);text-align:left;border-bottom:1px solid var(--bv-ui-border)}.bv-table-scroll th{color:var(--bv-ui-muted);background:var(--bv-ui-surface-raised)}.bv-table-scroll tbody tr:last-child td{border-bottom:0}.bv-table-scroll .numeric{text-align:right}.bv-sortable-list{display:grid;gap:7px}.bv-sortable-list>article{container:bv-sortable-item / inline-size;overflow:hidden;background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-sortable-list article>header{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:5px;min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap)}.bv-sortable-list>article>header>div{display:grid}.bv-sortable-list>article>header small{color:var(--bv-ui-muted)}.bv-drag-handle{width:30px;height:30px;color:var(--bv-ui-muted);background:transparent;border:0;cursor:grab}.bv-segmented-actions{display:inline-flex;align-items:stretch;overflow:hidden;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-segmented-actions>.bv-button{width:30px;min-width:30px;border:0;border-radius:0}.bv-segmented-actions>.bv-button+.bv-button{border-left:1px solid var(--bv-ui-border)}.bv-segmented-actions .bv-chevron{transition:transform .15s}.bv-segmented-actions .bv-button[aria-expanded=true] .bv-chevron{transform:rotate(225deg)}.bv-sortable-summary,.bv-sortable-content{padding:var(--bv-ui-content-padding);border-top:1px solid var(--bv-ui-border)}.bv-sortable-content{background:#ffffff05}.bv-image-picker-trigger img,.bv-image-picker-menu img{width:42px;height:32px;object-fit:cover;border-radius:var(--bv-ui-radius-sm)}.bv-image-picker-menu{left:0;right:auto;width:100%}.bv-image-preview{position:fixed;z-index:var(--bv-layer-modal);inset:0;display:grid;place-items:center;padding:24px;background:radial-gradient(circle at 50% 42%,#221e2db3,#07060af0 70%);backdrop-filter:blur(3px)}.bv-image-preview-dialog{display:grid;grid-template-rows:auto minmax(0,1fr) auto;width:min(94vw,1600px);max-height:calc(100vh - 48px);overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-surface);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius-lg);box-shadow:0 28px 90px #000d}.bv-image-preview-dialog>header{display:flex;align-items:center;gap:var(--bv-ui-content-padding);min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-image-preview-dialog>header>div{flex:1;min-width:0}.bv-image-preview-dialog h2{margin:0;overflow:hidden;font-size:calc(13px * var(--bv-ui-scale));text-overflow:ellipsis;white-space:nowrap}.bv-image-preview-dialog header small{color:var(--bv-ui-muted)}.bv-image-preview-icon{display:grid;place-items:center;width:26px;height:26px;color:#c7baff;background:#8d70ff21;border:1px solid rgba(141,112,255,.25);border-radius:var(--bv-ui-radius)}.bv-image-preview-icon svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}.bv-image-preview-stage{display:grid;place-items:center;min-height:220px;max-height:calc(100vh - 140px);padding:18px;overflow:auto;background-color:#0d0c11;background-image:linear-gradient(45deg,rgba(255,255,255,.025) 25%,transparent 25%),linear-gradient(-45deg,rgba(255,255,255,.025) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,rgba(255,255,255,.025) 75%),linear-gradient(-45deg,transparent 75%,rgba(255,255,255,.025) 75%);background-position:0 0,0 8px,8px -8px,-8px 0;background-size:16px 16px}.bv-image-preview-stage>img{display:block;max-width:100%;max-height:calc(100vh - 176px);object-fit:contain;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius);box-shadow:0 18px 50px #000a;transform-origin:center;user-select:none;will-change:transform}.bv-image-preview-stage.is-pannable{cursor:grab}.bv-image-preview-stage.is-dragging{cursor:grabbing}.bv-image-preview-stage:not(.is-dragging)>img{transition:transform .12s ease-out}.bv-image-preview-stage>span{color:var(--bv-ui-muted)}.bv-image-preview-dialog>footer{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--bv-ui-content-padding);min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-muted);background:var(--bv-ui-surface-raised);border-top:1px solid var(--bv-ui-border);font-size:calc(10px * var(--bv-ui-scale))}.bv-image-preview-help{overflow:hidden;text-align:center;text-overflow:ellipsis;white-space:nowrap}.bv-image-preview-controls{display:flex;align-items:center;gap:2px}.bv-image-preview-controls .bv-button{min-height:24px}.bv-image-preview-controls .icon-only{width:24px}.bv-image-preview-controls output{width:48px;color:var(--bv-ui-text);text-align:center;font-variant-numeric:tabular-nums}@media (max-width:720px){.bv-image-preview-help{display:none}.bv-image-preview-dialog>footer{grid-template-columns:1fr auto}}.bv-command-palette{display:grid;gap:var(--bv-ui-field-gap)}.bv-command-input>span{display:grid;place-items:center;width:var(--bv-ui-control-height);color:var(--bv-ui-muted)}.bv-command-results{display:grid;gap:2px;max-height:min(420px,60vh);overflow:auto}.bv-command-option{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--bv-ui-content-padding);width:100%;min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius)}.bv-command-option>span{display:grid;min-width:0}.bv-command-option small,.bv-command-option kbd{color:var(--bv-ui-muted)}.bv-command-option:hover,.bv-command-option[aria-selected=true]{background:rgba(var(--bv-ui-accent-rgb),.14);border-color:rgba(var(--bv-ui-accent-rgb),.25)}.bv-command-empty{margin:0;padding:calc(var(--bv-ui-content-padding) * 2);color:var(--bv-ui-muted);text-align:center}.bv-adaptive-field{container:bv-adaptive-field / inline-size;min-width:0}.bv-adaptive-inline{min-width:0}.bv-adaptive-trigger{display:none;width:100%;min-width:0;grid-template-columns:auto minmax(0,1fr) auto;text-align:left}.bv-adaptive-summary{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-adaptive-popover{width:min(calc(420px * var(--bv-ui-scale)),calc(100vw - 16px));padding:0;overflow:hidden;background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius);box-shadow:0 18px 48px #000c}.bv-adaptive-popover>header{display:flex;align-items:center;gap:var(--bv-ui-field-gap);min-height:var(--bv-ui-row-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);border-bottom:1px solid var(--bv-ui-border)}.bv-adaptive-popover>header>strong{flex:1}.bv-adaptive-popover>div{display:grid;gap:var(--bv-ui-field-gap);padding:var(--bv-ui-content-padding)}.bv-number-popup{display:grid;gap:var(--bv-ui-field-gap)}.bv-number-popup .bv-number-ticks,.bv-number-popup .bv-number-slider{width:100%}.bv-number-popup .bv-number-box{width:min(calc(292px * var(--bv-ui-scale)),100%);justify-self:center}.bv-color-dot{width:14px;height:14px;border:1px solid var(--bv-ui-border-hover);border-radius:50%}.bv-color-expanded{display:grid;gap:var(--bv-ui-content-padding)}.bv-color-expanded>input{width:100%;min-height:var(--bv-ui-control-height);padding:0 var(--bv-ui-content-padding);color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.bv-color-expanded .react-colorful{width:100%}@container bv-adaptive-field (max-width:220px){.bv-adaptive-inline{display:none}.bv-adaptive-trigger{display:grid}}.bv-select-menu>div,.bv-rich-select-menu>div,.bv-search-results>div,.bv-image-picker-menu>div{display:grid;gap:2px}.bv-select-menu>div>button,.bv-rich-select-menu>div>button,.bv-search-results>div>button,.bv-image-picker-menu>div>button{display:flex;align-items:center;gap:var(--bv-ui-field-gap);width:100%;min-height:var(--bv-ui-control-height);padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-text);text-align:left;background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius)}.bv-select-menu>div>button:hover:not(:disabled),.bv-rich-select-menu>div>button:hover:not(:disabled),.bv-search-results>div>button:hover:not(:disabled),.bv-image-picker-menu>div>button:hover:not(:disabled),.bv-select-menu>div>button[aria-selected=true],.bv-rich-select-menu>div>button[aria-selected=true],.bv-image-picker-menu>div>button[aria-selected=true]{background:rgba(var(--bv-ui-accent-rgb),.14);border-color:rgba(var(--bv-ui-accent-rgb),.24)}.bv-select-menu.bv-tag-select-menu>div>button{display:grid;grid-template-columns:18px minmax(0,1fr)}@container bv-tabs (max-width:280px){.bv-tabs:not(.vertical)>div[role=tablist]{align-items:stretch;overflow-x:auto}.bv-tabs:not(.vertical)>div[role=tablist]>button{flex:0 0 auto}.bv-tabs>[role=tabpanel]{min-width:0}}.bv-steps>li{min-width:88px}@container bv-definition-list (max-width:280px){.bv-definition-row{grid-template-columns:1fr;gap:2px}.bv-definition-row+.bv-definition-row{padding-top:var(--bv-ui-field-gap);border-top:1px solid var(--bv-ui-border)}}@container bv-sortable-item (max-width:280px){.bv-sortable-list>article>header{grid-template-columns:auto minmax(0,1fr) repeat(2,auto)}.bv-sortable-list>article>header>.bv-button{grid-row:2}.bv-sortable-list>article>header>div{grid-column:2/-1}}.bv-responsive-lab{display:grid;gap:18px}.bv-resizable-demo{width:min(100%,420px);min-width:150px;max-width:100%;resize:horizontal;overflow:auto;background:#12111680;border:1px dashed var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius)}.bv-resizable-demo>header{display:flex;justify-content:space-between;gap:10px;padding:var(--bv-ui-field-gap) var(--bv-ui-content-padding);color:var(--bv-ui-muted);background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-resizable-demo>header strong{color:var(--bv-ui-text)}.bv-responsive-state:before{content:"Wide";color:var(--bv-ui-success)}@container (max-width:380px){.bv-responsive-state:before{content:"Medium";color:var(--bv-ui-warning)}}@container (max-width:220px){.bv-responsive-state:before{content:"Minimal";color:var(--bv-ui-accent-soft)}}.bv-resizable-demo>div{display:grid;gap:var(--bv-ui-content-padding);min-width:0;padding:var(--bv-ui-content-padding)}.bv-global-toast-stack{z-index:var(--bv-layer-toast);bottom:var(--bv-toast-bottom,18px)}.bv-window-header-utility{position:relative;display:inline-flex}.bv-window-visibility-menu-action{min-width:190px;padding:7px 9px;color:var(--bv-ui-text);background:transparent;border:0;text-align:left;cursor:pointer}.bv-window-visibility-menu-action:hover{background:var(--bv-ui-surface-hover)}.bv-toolbar-launcher-secondary{width:26px;height:26px;padding:0;color:var(--bv-ui-muted);background:transparent;border:0;border-radius:var(--bv-ui-radius-xs);cursor:pointer}.bv-toolbar-launcher-secondary:hover{color:var(--bv-ui-text);background:var(--bv-ui-surface-hover)}.bv-regional-action-control:before{mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M4 6h10v2H4V6Zm14-2h2v6h-2V4ZM4 16h4v2H4v-2Zm8-2h2v6h-2v-6Zm6 2h2v2h-2v-2ZM4 11h2v2H4v-2Zm6-2h2v6h-2V9Zm6 2h4v2h-4v-2Z'/%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M4 6h10v2H4V6Zm14-2h2v6h-2V4ZM4 16h4v2H4v-2Zm8-2h2v6h-2v-6Zm6 2h2v2h-2v-2ZM4 11h2v2H4v-2Zm6-2h2v6h-2V9Zm6 2h4v2h-4v-2Z'/%3E%3C/svg%3E")}.bv-toolbar-no-control .bv-regional-action-control,.bv-toolbar-no-editor .bv-regional-action-editor,.bv-toolbar-no-quick .bv-regional-action-quick,.bv-toolbar-no-overview .bv-regional-action-menu{display:none!important}.bv-tag-select-trigger:focus-visible,.bv-tag-select-trigger[aria-expanded=true],.bv-image-picker-control:focus-within{box-shadow:0 0 0 3px rgba(var(--bv-ui-accent-rgb),.18)}.bv-tag-select-menu button[aria-selected=true] .bv-tag-select-check{background:rgba(var(--bv-ui-accent-rgb),.2)}.bv-showcase>aside a:hover{background:rgba(var(--bv-ui-accent-rgb),.12)}.bv-image-preview-action:hover:not(:disabled),.bv-image-picker-toggle:hover:not(:disabled){background:rgba(var(--bv-ui-accent-rgb),.13)}.bv-image-preview-icon{color:var(--bv-ui-accent-soft);background:rgba(var(--bv-ui-accent-rgb),.13);border-color:rgba(var(--bv-ui-accent-rgb),.25)}.bv-m0-picker-host{position:relative;z-index:1;padding:6px}.bv-m0-picker-panel{display:grid;gap:7px}.bv-m0-picker-panel>.bv-control-field{grid-template-columns:1fr auto;align-items:center}.bv-m0-picker-panel>.bv-control-field>.bv-toggle{justify-self:end}.bv-resource-picker{display:grid;gap:5px}.bv-resource-picker.is-unresolved .bv-select-trigger{border-color:var(--bv-ui-danger)}.bv-resource-picker .bv-field-grid{align-items:end}.bv-resource-picker .bv-select-trigger{width:100%}.lg-node:has([node-type="BV M0 Fake Resource Collector"]) [node-type="BV M0 Fake Resource Collector"]:has(input[aria-label=collector_id]),.lg-node:has([node-type="BV M0 Fake Resource Collector"]) [node-type="BV M0 Fake Resource Collector"]:has(input[aria-label=resource_a_id]),.lg-node:has([node-type="BV M0 Fake Resource Collector"]) [node-type="BV M0 Fake Resource Collector"]:has(input[aria-label=resource_b_id]),.lg-node:has([node-type="BV M0 Fake Resource Consumer"]) [node-type="BV M0 Fake Resource Consumer"]:has(input[aria-label=collector_id]),.lg-node:has([node-type="BV M0 Fake Resource Consumer"]) [node-type="BV M0 Fake Resource Consumer"]:has(input[aria-label=resource_id]){display:none}.lg-slot:has(circle[fill*=BV_RUNTIME_RESOURCE_PROVIDER_M0],[style*=BV_RUNTIME_RESOURCE_PROVIDER_M0]){display:none!important}.lg-slot:has(circle[fill*=BV_RUNTIME_RESOURCE_PROVIDER],[style*=BV_RUNTIME_RESOURCE_PROVIDER]){display:none!important}.bv-lora-v3-picker-host{position:relative;z-index:1;padding:6px}.bv-lora-v3-picker-panel{display:grid;gap:10px}.bv-lora-v3-target{display:grid;gap:8px;padding:9px;border:1px solid var(--bv-ui-border);border-radius:4px}.bv-lora-v3-target>h3{margin:0}.bv-optional-lora-scope{display:grid;gap:7px}.bv-lora-v3-enable-row{display:grid;grid-template-columns:minmax(0,1fr);align-items:start;gap:8px}.bv-lora-v3-enable-row>.bv-control-field>.bv-control-label{display:none}.bv-lora-v3-enable-row>.bv-control-field .bv-toggle{white-space:nowrap}.bv-lora-v3-scope-picker{display:grid;gap:8px}.bv-lora-v3-stack-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 8px;align-items:end;padding:7px;border:1px solid var(--bv-ui-border);border-radius:4px}.bv-lora-v3-stack-row>strong,.bv-lora-v3-stack-row>.bv-resource-picker{grid-column:1}.bv-lora-v3-stack-row>.bv-button{grid-column:2;grid-row:2}.bv-trash-icon{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.bv-lora-v3-window{display:grid;gap:10px;padding:10px;overflow:auto}.lg-node:has([node-type="BV M0 Fake Multi Resource Consumer"]) [node-type="BV M0 Fake Multi Resource Consumer"]:has(input[aria-label=resource_bindings]){display:none}.bv-m0-multi-picker{max-height:520px;overflow:auto}.bv-m0-binding{display:grid;gap:5px;padding:6px;border:1px solid var(--bv-ui-border);border-radius:4px}.bv-m0-binding>header{display:flex;align-items:center;justify-content:space-between}.bv-m0-binding>header button,.bv-m0-add-binding{color:var(--bv-ui-text);background:var(--bv-ui-input);border:1px solid var(--bv-ui-border);border-radius:4px}.bv-m0-binding>header button{width:24px;height:24px}.bv-m0-add-binding{min-height:28px}:is(.bv-ui,#bv-root,.bv-ui-portal,.bv-completion-popup) :where(button,input,select,textarea):focus-visible{outline:3px solid var(--bv-ui-focus-ring);outline-offset:2px}:is(.bv-ui,#bv-root,.bv-ui-portal,.bv-completion-popup) :where(input,select,textarea):focus{border-color:var(--bv-ui-brand);box-shadow:0 0 0 3px var(--bv-ui-focus-ring)}.bv-button,.bv-ui-button{color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border-color:var(--bv-ui-border)}.bv-button:hover:not(:disabled),.bv-ui-button:hover:not(:disabled){color:var(--bv-ui-text);background:var(--bv-ui-surface-hover);border-color:var(--bv-ui-border-hover)}.bv-button:active:not(:disabled),.bv-ui-button:active:not(:disabled){background:var(--bv-ui-surface-active);border-color:var(--bv-ui-border-strong)}.bv-button:disabled,.bv-ui-button:disabled{color:var(--bv-ui-disabled);opacity:.62}.bv-button.primary,.bv-ui-button--primary{color:var(--bv-ui-text-on-accent);background:var(--bv-ui-action);border-color:var(--bv-ui-action)}.bv-button.primary:hover:not(:disabled),.bv-ui-button--primary:hover:not(:disabled){background:var(--bv-ui-action-hover);border-color:var(--bv-ui-action-hover)}.bv-button.primary:active:not(:disabled),.bv-ui-button--primary:active:not(:disabled){background:var(--bv-ui-action-active);border-color:var(--bv-ui-action-active)}.bv-button.ghost,.bv-ui-button--ghost{color:var(--bv-ui-muted);background:transparent;border-color:transparent}.bv-button.ghost:hover:not(:disabled),.bv-ui-button--ghost:hover:not(:disabled){color:var(--bv-ui-text);background:var(--bv-ui-surface-hover)}.bv-button.danger,.bv-ui-button--danger{color:var(--bv-ui-danger-fg);background:var(--bv-ui-danger-bg);border-color:var(--bv-ui-danger)}.bv-button.warning{color:var(--bv-ui-warning-fg);background:var(--bv-ui-warning-bg);border-color:var(--bv-ui-warning)}.bv-button.success{color:var(--bv-ui-success-fg);background:var(--bv-ui-success-bg);border-color:var(--bv-ui-success)}.bv-button.info{color:var(--bv-ui-info-fg);background:var(--bv-ui-info-bg);border-color:var(--bv-ui-info)}.bv-badge.success{color:var(--bv-ui-success-fg)}.bv-badge.warning{color:var(--bv-ui-warning-fg)}.bv-badge.danger{color:var(--bv-ui-danger-fg)}.bv-callout.info{border-left-color:var(--bv-ui-info)}.bv-ui-dialog,.bv-menu,.bv-rich-select-menu,.bv-search-results,.bv-image-picker-menu,.bv-popover,.bv-toolbar-window-launcher,.bv-toast,.bv-managed-window,.bv-ui-window-shelf-item,.bv-adaptive-popover{color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border-color:var(--bv-ui-border-hover);box-shadow:0 18px 48px var(--bv-ui-shadow)}.bv-ui-dialog::backdrop,.bv-ui-overlay{background:var(--bv-ui-overlay)}.bv-ui-window-header,.bv-ui-dialog__header,.bv-ui-dialog__footer,.bv-ui-window-footer,.bv-toolbar-window-launcher>footer{background:var(--bv-ui-surface-raised)}.bv-ui-window-control:hover,.bv-ui-window-shelf-item:hover,.bv-toolbar-launcher-secondary:hover,.bv-toolbar-launcher-reveal:hover{color:var(--bv-ui-text);background:var(--bv-ui-surface-hover);border-color:var(--bv-ui-border)}.bv-ui-window-control--close:hover{color:var(--bv-ui-danger-fg);background:var(--bv-ui-danger-bg);border-color:var(--bv-ui-danger)}.bv-ui-window-footer.has-warning .bv-ui-window-status{color:var(--bv-ui-warning-fg)}.bv-toolbar .active,.bv-command-option[aria-selected=true],.bv-select-menu button[aria-selected=true],.bv-rich-select-menu button[aria-selected=true],.bv-image-picker-menu button[aria-selected=true]{color:var(--bv-ui-accent-soft);background:var(--bv-ui-selection-bg);border-color:var(--bv-ui-selection-border)}.bv-menu-content>button:hover,.bv-rich-select-menu>button:hover,.bv-search-results>button:hover,.bv-image-picker-menu>button:hover,.bv-command-option:hover{background:var(--bv-ui-selection-bg);border-color:var(--bv-ui-selection-border)}.bv-showcase,.bv-showcase>aside{color:var(--bv-ui-text);background:var(--bv-ui-bg)}.bv-showcase>aside{background:var(--bv-ui-surface)}.bv-resizable-demo,.bv-ui-card-list>.bv-detailer-card,.bv-sortable-content{background:var(--bv-ui-surface-subtle)}.bv-showcase>aside a:hover,.bv-image-preview-action:hover:not(:disabled),.bv-image-picker-toggle:hover:not(:disabled){background:var(--bv-ui-selection-bg)}.bv-ui-window-icon,.bv-ui-window-shelf-icon,.bv-image-preview-icon{color:var(--bv-ui-accent-soft);background:var(--bv-ui-selection-bg);border-color:var(--bv-ui-selection-border)}`,RE='.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 SE(e){return!e||!e.enabled||e.authoring.locked?null:e.id}function LE(e,t,r=3){return Math.hypot(t.x-e.x,t.y-e.y)>=r}function CE(e,t,r,o=12){return e>=3&&Math.hypot(r.x-t.x,r.y-t.y)<=o}function NE(e){return[...e].sort((t,r)=>r.priority-t.priority)}function OE(e){e.forEach((t,r)=>{t.priority=r})}function ME(e){return e==="draw-brush"}function Oh(e){return[...e].sort((t,r)=>t.priority-r.priority)}const AE=[{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 DE({geometry:e,canvas:t}){const r=e.operation==="add"?"white":"black";if(e.type==="rect")return s.jsx("rect",{x:e.x*t.width,y:e.y*t.height,width:e.width*t.width,height:e.height*t.height,fill:r});if(e.type==="ellipse")return s.jsx("ellipse",{cx:(e.x+e.width/2)*t.width,cy:(e.y+e.height/2)*t.height,rx:e.width*t.width/2,ry:e.height*t.height/2,fill:r});if(e.type==="polygon")return s.jsx("polygon",{points:e.points.map(c=>`${c.x*t.width},${c.y*t.height}`).join(" "),fill:r});if(e.type==="raster_mask"){const c=`raster-${e.id}`;return s.jsxs(s.Fragment,{children:[s.jsx("defs",{children:s.jsx("mask",{id:c,maskUnits:"userSpaceOnUse",x:"0",y:"0",width:t.width,height:t.height,children:s.jsx("image",{href:e.data_url,x:e.x*t.width,y:e.y*t.height,width:e.width*t.width,height:e.height*t.height,preserveAspectRatio:"none"})})}),s.jsx("rect",{width:t.width,height:t.height,fill:r,mask:`url(#${c})`})]})}const o=e.shape==="square"?"square":"round",n=e.size*Math.min(t.width,t.height),i=`bv-brush-soft-${e.id}`,a=(1-e.hardness)*n/6,l=a>.05?`url(#${i})`:void 0;if(e.points.length===1){const c=e.points[0],u=n*c.pressure,d=e.shape==="square"?s.jsx("rect",{x:c.x*t.width-u/2,y:c.y*t.height-u/2,width:u,height:u,fill:r,fillOpacity:e.opacity,filter:l}):s.jsx("circle",{cx:c.x*t.width,cy:c.y*t.height,r:u/2,fill:r,fillOpacity:e.opacity,filter:l}),f=u*e.hardness;return s.jsxs(s.Fragment,{children:[s.jsx("defs",{children:l&&s.jsx("filter",{id:i,filterUnits:"userSpaceOnUse",x:"0",y:"0",width:t.width,height:t.height,children:s.jsx("feGaussianBlur",{stdDeviation:a})})}),d,f>0&&(e.shape==="square"?s.jsx("rect",{x:c.x*t.width-f/2,y:c.y*t.height-f/2,width:f,height:f,fill:r,fillOpacity:e.opacity}):s.jsx("circle",{cx:c.x*t.width,cy:c.y*t.height,r:f/2,fill:r,fillOpacity:e.opacity}))]})}if((e.pressure_mode??"constant")==="constant"){const c=e.points.map((u,d)=>`${d?"L":"M"}${u.x*t.width},${u.y*t.height}`).join(" ");return s.jsxs(s.Fragment,{children:[s.jsx("defs",{children:l&&s.jsx("filter",{id:i,filterUnits:"userSpaceOnUse",x:"0",y:"0",width:t.width,height:t.height,children:s.jsx("feGaussianBlur",{stdDeviation:a})})}),s.jsx("path",{d:c,fill:"none",stroke:r,strokeOpacity:e.opacity,strokeWidth:n,strokeLinecap:o,strokeLinejoin:o==="round"?"round":"miter",filter:l}),e.hardness>0&&s.jsx("path",{d:c,fill:"none",stroke:r,strokeOpacity:e.opacity,strokeWidth:n*e.hardness,strokeLinecap:o,strokeLinejoin:o==="round"?"round":"miter"})]})}return s.jsx(s.Fragment,{children:e.points.slice(1).map((c,u)=>{const d=e.points[u],f=(d.pressure+c.pressure)/2;return s.jsx("line",{x1:d.x*t.width,y1:d.y*t.height,x2:c.x*t.width,y2:c.y*t.height,stroke:r,strokeOpacity:e.opacity,strokeWidth:n*f,strokeLinecap:o},u)})})}function IE({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 jE({region:e,geometries:t,canvas:r,opacity:o,resolved:n}){const i=rk(t).filter(u=>u.enabled&&(n||u.geometries.some((d,f)=>dr(d,f).visible))),a=`bv-feather-${e.id}`,l=Math.min(64,Math.round(e.mask.feather*Math.min(r.width,r.height))),c=l/3;return s.jsxs("g",{opacity:o,children:[n&&l>0&&s.jsx("defs",{children:s.jsx("filter",{id:a,filterUnits:"userSpaceOnUse",x:"0",y:"0",width:r.width,height:r.height,children:s.jsx("feGaussianBlur",{stdDeviation:c})})}),s.jsx("g",{filter:n&&l>0?`url(#${a})`:void 0,children:i.map(u=>{const d=`bv-mask-${e.id}-${u.id}`;return s.jsxs("g",{children:[s.jsx("defs",{children:s.jsxs("mask",{id:d,maskUnits:"userSpaceOnUse",x:"0",y:"0",width:r.width,height:r.height,children:[s.jsx("rect",{width:r.width,height:r.height,fill:"black"}),u.geometries.filter((f,p)=>f.enabled!==!1&&(n||dr(f,p).visible)).map(f=>s.jsx(DE,{geometry:f,canvas:r},f.id))]})}),s.jsx("rect",{width:r.width,height:r.height,fill:e.authoring.color,mask:`url(#${d})`})]},u.id)})})]})}function PE(e){const{document:t,selectedLayerId:r,selectedRegionId:o}=e,n=v.useRef(null),i=v.useRef(null),[a,l]=v.useState({width:1,height:1}),[c,u]=v.useState(e.initialView.zoom),[d,f]=v.useState({x:e.initialView.panX,y:e.initialView.panY}),[p,g]=v.useState(e.initialView.fit),[m,_]=v.useState(!1),k=v.useCallback((O=a)=>Math.max(.02,Math.min(1,(O.width-40)/t.canvas.width,(O.height-40)/t.canvas.height)),[t.canvas.height,t.canvas.width,a]),b=v.useCallback(()=>{u(k()),f({x:0,y:0}),g(!0)},[k]);v.useEffect(()=>{const O=n.current;if(!O)return;const E=new ResizeObserver(B=>{const C=B[0].contentRect,S={width:C.width,height:C.height};l(S),p&&(u(Math.max(.02,Math.min(1,(S.width-40)/t.canvas.width,(S.height-40)/t.canvas.height))),f({x:0,y:0}))});return E.observe(O),()=>E.disconnect()},[t.canvas.height,t.canvas.width,p]),v.useEffect(()=>e.onView({zoom:c,panX:d.x,panY:d.y,fit:p}),[p,d.x,d.y,e.onView,c]),v.useEffect(()=>{const O=B=>{const C=B.target;B.code!=="Space"||C instanceof HTMLInputElement||C instanceof HTMLTextAreaElement||C instanceof HTMLSelectElement||C?.isContentEditable||(B.preventDefault(),B.stopImmediatePropagation(),_(!0))},E=B=>{B.code==="Space"&&(B.preventDefault(),B.stopImmediatePropagation(),_(!1),i.current=null)};return window.addEventListener("keydown",O,!0),window.addEventListener("keyup",E,!0),()=>{window.removeEventListener("keydown",O,!0),window.removeEventListener("keyup",E,!0)}},[]);const h=O=>{let E=[...O.geometry];if(e.draft&&O.id===o){const B=new Set(e.draft.map(C=>C.id));E=E.map(C=>B.has(C.id)?e.draft.find(S=>S.id===C.id):C);for(const C of e.draft)E.some(S=>S.id===C.id)||E.push(C)}return!e.binaryMaskPreview&&e.isolate&&r&&(E=E.filter(B=>Ut(B)===r)),E},x=e.brush.size*Math.min(t.canvas.width,t.canvas.height)/t.canvas.width*100,w=O=>{O.preventDefault();const E=O.currentTarget.getBoundingClientRect(),B=O.clientX-E.left,C=O.clientY-E.top,S=Math.max(.02,Math.min(8,c*Math.exp(-O.deltaY*.0015))),N=S/c;f(A=>({x:B-E.width/2-(B-E.width/2-A.x)*N,y:C-E.height/2-(C-E.height/2-A.y)*N})),u(S),g(!1)},y=O=>{O.button!==1&&!(O.button===0&&m)||(O.preventDefault(),O.stopPropagation(),O.currentTarget.setPointerCapture(O.pointerId),i.current={x:O.clientX,y:O.clientY,panX:d.x,panY:d.y},g(!1))},T=O=>{i.current&&(O.preventDefault(),O.stopPropagation(),f({x:i.current.panX+O.clientX-i.current.x,y:i.current.panY+O.clientY-i.current.y}))},L=O=>{i.current&&(O.preventDefault(),O.stopPropagation(),i.current=null)},U=a.width/2-t.canvas.width*c/2+d.x,P=a.height/2-t.canvas.height*c/2+d.y,j=10/c,M=24/c;return s.jsx("section",{className:"bv-regional-work",children:s.jsxs("div",{ref:n,className:`artboard-viewport ${m?"pan-ready":""}`,onWheel:w,onPointerDownCapture:y,onPointerMoveCapture:T,onPointerUpCapture:L,onPointerCancelCapture:L,children:[s.jsx(nk,{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(${U}px, ${P}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:NE(t.regions.filter(O=>O.enabled&&(e.binaryMaskPreview||O.authoring.visible))).map(O=>s.jsx(jE,{region:e.binaryMaskPreview?{...O,authoring:{...O.authoring,color:"#FFFFFF"}}:O,geometries:h(O),canvas:t.canvas,opacity:e.binaryMaskPreview?1:e.displayOpacity,resolved:e.binaryMaskPreview},O.id))}),!e.binaryMaskPreview&&e.draft&&s.jsx("svg",{className:"bv-tool-preview",viewBox:`0 0 ${t.canvas.width} ${t.canvas.height}`,preserveAspectRatio:"none",children:e.draft.map(O=>s.jsx(IE,{geometry:O,canvas:t.canvas,cursor:e.cursor,activePolygon:e.tool.startsWith("polygon")},O.id))}),!e.binaryMaskPreview&&e.selectionBounds&&s.jsxs("svg",{className:"bv-selection-overlay",viewBox:`0 0 ${t.canvas.width} ${t.canvas.height}`,preserveAspectRatio:"none",children:[s.jsx("rect",{className:"brush-bounds",x:e.selectionBounds.x*t.canvas.width,y:e.selectionBounds.y*t.canvas.height,width:e.selectionBounds.width*t.canvas.width,height:e.selectionBounds.height*t.canvas.height}),AE.map(O=>{const E=(e.selectionBounds.x+e.selectionBounds.width*O.x)*t.canvas.width,B=(e.selectionBounds.y+e.selectionBounds.height*O.y)*t.canvas.height;return s.jsxs("g",{"data-handle":O.id,className:`resize-handle resize-handle-${O.id}`,children:[s.jsx("rect",{className:"resize-handle-hit",x:E-M/2,y:B-M/2,width:M,height:M}),s.jsx("rect",{className:"resize-handle-visible",x:E-j/2,y:B-j/2,width:j,height:j,rx:2/c})]},O.id)}),e.draft&&s.jsxs("text",{className:"tool-preview-size",style:{fontSize:12/c},x:(e.selectionBounds.x+e.selectionBounds.width)*t.canvas.width-4/c,y:(e.selectionBounds.y+e.selectionBounds.height)*t.canvas.height-7/c,children:[Math.round(e.selectionBounds.width*t.canvas.width)," × ",Math.round(e.selectionBounds.height*t.canvas.height)," px"]})]}),!e.binaryMaskPreview&&e.cursor&&e.tool.startsWith("brush")&&s.jsx("div",{className:`brush-cursor ${e.brush.shape}`,style:{left:`${e.cursor.x*100}%`,top:`${e.cursor.y*100}%`,width:`${x}%`,aspectRatio:"1"},children:s.jsx("i",{style:{width:`${e.brush.hardness*100}%`,height:`${e.brush.hardness*100}%`}})})]})}),s.jsxs("div",{className:"zoom-controls",onWheel:O=>O.stopPropagation(),children:[s.jsx(ie,{intent:"ghost",title:"Zoom out",onClick:()=>{u(O=>Math.max(.02,O/1.25)),g(!1)},children:"−"}),s.jsxs(ie,{intent:"ghost",title:"100%",onClick:()=>{u(1),f({x:0,y:0}),g(!1)},children:[Math.round(c*100)," %"]}),s.jsx(ie,{intent:"ghost",title:"Zoom in",onClick:()=>{u(O=>Math.min(8,O*1.25)),g(!1)},children:"+"}),s.jsx(ie,{intent:"ghost",title:"Fit to view",onClick:b,children:"Fit"})]})]})})}const Gx="BV.NodePack.Completion.Enabled",qx="BV.NodePack.Completion.Datasets",Kx="BV.NodePack.Completion.Placement",Jx="bv-nodepack:completion-enabled",Fa="bv-completion-enabled-changed",Ua="bv-completion-placement-changed",mp="bv-nodepack:completion-datasets",Zx="bv-nodepack:completion-placement",Bs="bv-completion-datasets-changed";let Qx=null,ey=null,ty=null;function Od(){try{return localStorage.getItem(Zx)==="field"?"field":"caret"}catch{return"caret"}}function BE(e){ty=e}function ry(e,t=!1){const r=e==="field"?"field":"caret";try{localStorage.setItem(Zx,r)}catch{}t&&ty?.(r),window.dispatchEvent(new CustomEvent(Ua,{detail:{placement:r}}))}function oy(){const[e,t]=v.useState(Od);return v.useEffect(()=>{const r=o=>t(o.detail?.placement==="field"?"field":"caret");return window.addEventListener(Ua,r),()=>window.removeEventListener(Ua,r)},[]),e}function xp(){try{return localStorage.getItem(Jx)!=="false"}catch{return!0}}function zE(e){Qx=e}function ny(e,t=!1){try{localStorage.setItem(Jx,String(e))}catch{}t&&Qx?.(e),window.dispatchEvent(new CustomEvent(Fa,{detail:{enabled:e}}))}function iy(){const[e,t]=v.useState(xp);return v.useEffect(()=>{const r=o=>t(!!o.detail?.enabled);return window.addEventListener(Fa,r),()=>window.removeEventListener(Fa,r)},[]),e}function ay(){try{const e=localStorage.getItem(mp);if(e==null)return null;const t=JSON.parse(e);return Array.isArray(t)?t.map(String):null}catch{return null}}function FE(e){ey=e}function ly(e,t=!1){const r=[...new Set(e.map(String))];try{localStorage.setItem(mp,JSON.stringify(r))}catch{}t&&ey?.(JSON.stringify(r)),window.dispatchEvent(new CustomEvent(Bs,{detail:{datasets:r}}))}function sy(e){if(e==null||e===""){try{localStorage.removeItem(mp)}catch{}window.dispatchEvent(new CustomEvent(Bs,{detail:{datasets:null}}));return}try{const t=typeof e=="string"?JSON.parse(e):e;Array.isArray(t)&&ly(t.map(String))}catch{}}function UE(){const[e,t]=v.useState(ay);return v.useEffect(()=>{const r=o=>t(o.detail?.datasets??null);return window.addEventListener(Bs,r),()=>window.removeEventListener(Bs,r)},[]),e}function cy({onSelectionChange:e}={}){const t=UE(),[r,o]=v.useState([]),[n,i]=v.useState(""),a=async()=>{try{const g=await fetch("/bv_nodepack/completion/status");if(!g.ok)throw new Error(`HTTP ${g.status}`);const m=await g.json();o(Array.isArray(m?.datasets)?m.datasets:[]),i("")}catch(g){i(g instanceof Error?g.message:String(g))}};v.useEffect(()=>{a()},[]);const l=t??r.map(g=>g.id),c=g=>{ly(g,!0),e?.(g)},u=g=>c(l.includes(g)?l.filter(m=>m!==g):[...l,g]),d=(g,m)=>{const _=l.indexOf(g),k=_+m;if(_<0||k<0||k>=l.length)return;const b=[...l];[b[_],b[k]]=[b[k],b[_]],c(b)},f=new Map(r.map(g=>[g.id,g])),p=[...l.map(g=>f.get(g)).filter(g=>!!g),...r.filter(g=>!l.includes(g.id))];return s.jsxs("div",{className:"completion-dataset-picker",children:[s.jsx("strong",{children:"Completion Data"}),s.jsx("small",{children:"Topmost enabled dataset wins when tags are duplicated."}),p.map(g=>{const m=l.indexOf(g.id),_=m>=0;return s.jsxs("div",{children:[s.jsx(un,{label:g.name,help:`${(g.bytes/1048576).toFixed(1)} MiB`,checked:_,onValue:()=>u(g.id)}),s.jsxs("span",{className:"dataset-order",children:[s.jsx(ie,{intent:"ghost",iconOnly:!0,disabled:!_||m===0,title:"Move up",onClick:()=>d(g.id,-1),children:"↑"}),s.jsx(ie,{intent:"ghost",iconOnly:!0,disabled:!_||m===l.length-1,title:"Move down",onClick:()=>d(g.id,1),children:"↓"})]})]},g.id)}),!r.length&&!n&&s.jsx("small",{children:"No local CSV/TSV dataset found."}),n&&s.jsxs("small",{className:"dataset-error",children:["Could not load datasets: ",n]}),s.jsx(ie,{onClick:()=>void a(),children:"Reload List"})]})}function VE(e){const t=iy(),r=oy(),o=e.openMenu,{menuOverflow:n}=Wx(),i=v.useRef(null),a=v.useRef(null),l=(u,d,f)=>s.jsx(ih,{open:o===u,onOpen:p=>e.onOpenMenu(p?u:null),trigger:({toggle:p})=>s.jsxs(ie,{intent:"ghost",density:"compact","aria-label":d,title:d,"aria-expanded":o===u,onClick:p,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:f}),c=s.jsxs(s.Fragment,{children:[l("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:()=>i.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:()=>a.current?.click(),children:"Add Regions"})]})),l("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(un,{label:"Prompt Autocomplete",help:"Optional. Disable it when using another completion extension.",checked:t,onValue:u=>ny(u,!0)}),s.jsx(at,{label:"Popup Position",value:r,onValue:u=>ry(u,!0),options:[{value:"caret",label:"At Caret"},{value:"field",label:"Below Text Field"}]}),s.jsx(cy,{})]})),l("view","View",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsx(Ur,{label:"Mask Display",value:e.displayOpacity,min:.05,max:1,step:.05,unit:"×",onValue:e.onDisplayOpacity}),s.jsx(Ur,{label:"Background Image",value:e.backgroundOpacity,min:0,max:1,step:.05,unit:"×",onValue:e.onBackgroundOpacity}),s.jsx(un,{label:"Binary Mask Preview",checked:e.binaryMaskPreview,onValue:e.onToggleBinaryMaskPreview}),s.jsx(un,{label:"Isolate Selection",checked:e.isolate,disabled:!e.hasSelection,onValue:e.onToggleIsolate}),s.jsx("small",{children:"Affects the editor display only."})]})),l("artboard","Artboard",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsx(Ur,{label:"Width",value:e.canvas.width,min:1,max:32768,step:1,unit:"px",slider:!1,onValue:u=>e.onCanvas({...e.canvas,width:u})}),s.jsx(Ur,{label:"Height",value:e.canvas.height,min:1,max:32768,step:1,unit:"px",slider:!1,onValue:u=>e.onCanvas({...e.canvas,height:u})})]})),l("help","?",s.jsxs("div",{className:"help-menu",children:[s.jsx(nh,{items:[{term:"Ctrl Z",description:"Undo"},{term:"Ctrl Shift Z",description:"Redo"},{term:"Ctrl E",description:"Merge selected layers"},{term:"Escape",description:"Cancel action"},{term:"Delete",description:"Delete layer"},{term:"Shift + Resize",description:"Scale proportionally"},{term:"Space + Drag",description:"Pan artboard"}]}),s.jsx(nh,{items:[{term:"Click",description:"Select layer"},{term:"Ctrl + Click",description:"Add/remove layer selection"},{term:"Shift + Click",description:"Select layer range"},{term:"Drag",description:"Draw or move"},{term:"Mouse wheel",description:"Zoom under cursor"}]})]}))]});return s.jsxs("div",{className:"editor-menus",children:[n?s.jsx(ih,{trigger:({toggle:u})=>s.jsx(ie,{intent:"ghost",density:"compact","aria-label":"Editor menus",onClick:u,children:"•••"}),children:s.jsx("div",{className:"editor-menus-overflow-panel",children:c})}):c,s.jsx("input",{hidden:!0,ref:i,type:"file",accept:"application/json,.json",onChange:u=>{const d=u.target.files?.[0];d&&e.onImportDocument(d),u.target.value=""}}),s.jsx("input",{hidden:!0,ref:a,type:"file",accept:"application/json,.json",onChange:u=>{const d=u.target.files?.[0];d&&e.onImportRegions(d),u.target.value=""}})]})}function uy(e,t,r,o=20){const n=Math.max(0,Math.min(e.length,t)),l=e.slice(0,n).match(/(?:^|[,\n;])\s*([^,\n;]*)$/)?.[1]??"",c=l.match(/^\s*/)?.[0].length??0,u=l.slice(c);if(u.trim().length<2)return null;const d=n-l.length+c;return{...r,text:e,caret:n,term:u,start:d,end:n,limit:o}}function dy(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 fy(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 py={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:ay()}),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:{}}]:[]})}},WE=["fontFamily","fontSize","fontStyle","fontWeight","letterSpacing","lineHeight","textTransform","textIndent","textAlign","wordSpacing","paddingTop","paddingRight","paddingBottom","paddingLeft","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth"];function $E(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"}),WE.forEach(_=>{c.style[_]=o[_]}),c.textContent=e.value.slice(0,t);const u=document.createElement("span");u.textContent=e.value.slice(t,t+1)||"​",c.append(u),document.body.append(c),c.scrollTop=e.scrollTop,c.scrollLeft=e.scrollLeft;const d=c.getBoundingClientRect(),f=u.getBoundingClientRect(),p=Number.parseFloat(o.lineHeight)||Number.parseFloat(o.fontSize)*1.2||16;c.remove();const g=r.left+(f.left-d.left)*a,m=r.top+(f.top-d.top)*l;return{left:g,top:m,bottom:m+p*l}}function zs(e,t,r=210){const i=e.getBoundingClientRect(),a=t==="caret"?$E(e):{left:i.left,top:i.top,bottom:i.bottom},l=t==="caret"?Math.min(460,Math.max(320,i.width*.8)):i.width,c=Math.max(180,Math.min(l,window.innerWidth-4*2)),u=Math.max(4,Math.min(a.left,window.innerWidth-c-4)),d=a.bottom+4,f=d+r<=window.innerHeight-4?d:Math.max(4,a.top-r-4);return{left:u,top:f,width:c}}function gy({suggestions:e,selected:t,position:r,onAccept:o,onHeight:n}){const i=v.useRef(null);return v.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 Fs({value:e,onValue:t,completionContext:r,onKeyDown:o,onBlur:n,onSelect:i,...a}){const l=iy(),c=oy(),u=v.useRef(null),[d,f]=v.useState([]),[p,g]=v.useState(0),[m,_]=v.useState(null),k=v.useRef(null),b=v.useRef(null),h=v.useRef(null),x=v.useRef(210),w=v.useRef(()=>{}),y=()=>{b.current?.abort(),f([]),_(null)},T=()=>{const P=u.current;P&&_(zs(P,c,x.current))},L=(P,j,M=j)=>{if(!l||j!==M)return y();h.current!=null&&window.clearTimeout(h.current),b.current?.abort();const O=uy(P,j,r);if(k.current=O,!O)return y();const E=new AbortController;b.current=E,h.current=window.setTimeout(async()=>{const B=await fy(O,[py],E.signal);if(E.signal.aborted)return;const C=u.current;f(B),g(0),_(B.length&&C?zs(C,c):null)},120)};w.current=L;const U=(P=p)=>{const j=k.current,M=d[P];if(!j||!M)return;const O=dy(e,j,M);t(O.text),y(),requestAnimationFrame(()=>{u.current?.focus(),u.current?.setSelectionRange(O.caret,O.caret)})};return v.useEffect(()=>{l||y()},[l]),v.useEffect(()=>{const P=()=>{const j=u.current;j&&document.activeElement===j&&w.current(j.value,j.selectionStart,j.selectionEnd)};return document.addEventListener("selectionchange",P),()=>document.removeEventListener("selectionchange",P)},[]),v.useEffect(()=>{m&&T()},[c]),v.useEffect(()=>{if(m)return window.addEventListener("scroll",T,!0),window.addEventListener("resize",T),()=>{window.removeEventListener("scroll",T,!0),window.removeEventListener("resize",T)}},[!!m,c]),v.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(G1,{...a,ref:u,value:e,onChange:P=>{t(P.target.value),L(P.target.value,P.target.selectionStart,P.target.selectionEnd)},onSelect:P=>{L(P.currentTarget.value,P.currentTarget.selectionStart,P.currentTarget.selectionEnd),i?.(P)},onKeyDown:P=>{if(d.length){if(P.key==="ArrowDown"||P.key==="ArrowUp"){P.preventDefault(),P.stopPropagation(),g(j=>(j+(P.key==="ArrowDown"?1:-1)+d.length)%d.length);return}if(P.key==="Enter"||P.key==="Tab"){P.preventDefault(),P.stopPropagation(),U();return}if(P.key==="Escape"){P.preventDefault(),P.stopPropagation(),y();return}}o?.(P)},onBlur:P=>{window.setTimeout(y,120),n?.(P)}})}),l&&m&&s.jsx(gy,{suggestions:d,selected:p,position:m,onAccept:U,onHeight:P=>{Math.abs(P-x.current)<1||(x.current=P,T())}})]})}function On({label:e,help:t,value:r,onChange:o,children:n,disabled:i,className:a=""}){const l=Re.Children.toArray(n).flatMap(c=>Re.isValidElement(c)?[{value:String(c.props.value??c.props.children??""),label:String(c.props.children??c.props.value??""),disabled:c.props.disabled}]:[]);return s.jsx("div",{className:a,children:s.jsx(at,{label:e,help:t,value:r,onValue:o,options:l,disabled:i})})}function An({onChange:e,...t}){return s.jsx(Ur,{...t,onValue:e})}const Mh=({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))]}),pu=({title:e,scope:t,value:r,open:o,onOpen:n,onChange:i})=>s.jsx(Os,{value:o?[t]:[],onValue:a=>n(a.includes(t)),items:[{id:t,title:e,content:s.jsxs("div",{className:"bv-prompt-editor-fields",children:[s.jsx(Nr,{label:"Positive",children:s.jsx(Fs,{value:r.positive_source,onValue:a=>i({...r,positive_source:a}),completionContext:{scope:t,polarity:"positive"}})}),s.jsx(Nr,{label:"Negative",children:s.jsx(Fs,{value:r.negative_source,onValue:a=>i({...r,negative_source:a}),completionContext:{scope:t,polarity:"negative"}})})]})}]}),HE=({region:e,automaticColor:t,onRegion:r})=>s.jsxs("section",{className:"bv-inspector-section",children:[s.jsx("h3",{children:"Mask & appearance"}),s.jsx(An,{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(Z1,{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 YE(e){const t=e.layer?.geometries.find(n=>n.type==="brush_stroke"),[r,o]=v.useState(e.mode??(e.layer?"selection":e.region?"region":"document"));return v.useEffect(()=>o(e.mode??(e.layer?"selection":e.region?"region":"document")),[e.layer?.id,e.mode,e.region?.id]),s.jsx(tp,{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(HE,{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(An,{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(An,{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(An,{label:"Hardness",value:t.hardness,min:0,max:1,step:.05,onChange:n=>e.onBrushSetting("hardness",n)}),s.jsx(An,{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(On,{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(On,{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(On,{label:"Usage",help:"Controls whether this region participates in the main render, Detailer output, or both.",value:e.region.usage,onChange:n=>e.onRegion(i=>{i.usage=n}),children:[s.jsx("option",{value:"generation",children:"Generation"}),s.jsx("option",{value:"detailer",children:"Detailer only"}),s.jsx("option",{value:"both",children:"Generation + Detailer"})]}),e.detailerEasyRegionEditor,e.loraV3RegionEditor??s.jsx(On,{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(Mh,{stacks:e.loraStacks})}),s.jsx(An,{label:"Strength",value:e.region.strength,min:0,max:10,step:.05,onChange:n=>e.onRegion(i=>{i.strength=n})}),s.jsx(pu,{title:"Region Prompt",scope:"region",value:e.region.prompts,open:e.promptSections.region,onOpen:n=>e.onPromptSection("region",n),onChange:n=>e.onRegion(i=>{i.prompts=n})})]})}),s.jsx("div",{className:"inspector-tab-panel",role:"tabpanel",hidden:r!=="document",children:s.jsxs("section",{className:"bv-inspector-section",children:[s.jsx("h3",{children:"Document Prompts"}),e.loraV3GlobalEditor??s.jsx(On,{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(Mh,{stacks:e.loraStacks})}),s.jsxs(On,{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(pu,{title:"Global",scope:"global",value:e.globalPrompts,open:e.promptSections.global,onOpen:n=>e.onPromptSection("global",n),onChange:e.onGlobalPrompts}),s.jsx(pu,{title:"Background",scope:"background",value:e.backgroundPrompts,open:e.promptSections.background,onOpen:n=>e.onPromptSection("background",n),onChange:e.onBackgroundPrompts})]})})]})})}const ot=(e,t=0,r=1)=>Math.max(t,Math.min(r,e));function XE(e,t={width:1,height:1}){if(e.type==="rect"||e.type==="ellipse"||e.type==="raster_mask")return{x:e.x,y:e.y,width:e.width,height:e.height};const r=e.points.map(f=>f.x),o=e.points.map(f=>f.y);if(e.type==="polygon")return{x:Math.min(...r),y:Math.min(...o),width:Math.max(...r)-Math.min(...r),height:Math.max(...o)-Math.min(...o)};const n=Math.min(t.width,t.height),i=e.size*n/t.width/2,a=e.size*n/t.height/2,l=ot(Math.min(...r)-i),c=ot(Math.min(...o)-a),u=ot(Math.max(...r)+i),d=ot(Math.max(...o)+a);return{x:l,y:c,width:u-l,height:d-c}}function hy(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=ot(((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 GE(e,t,r={width:1,height:1}){if(e.type==="rect"||e.type==="raster_mask")return t.x>=e.x&&t.x<=e.x+e.width&&t.y>=e.y&&t.y<=e.y+e.height;if(e.type==="ellipse"){const a=e.width/2,l=e.height/2;return((t.x-e.x-a)/a)**2+((t.y-e.y-l)/l)**2<=1}if(e.type==="polygon"){let a=!1;for(let l=0,c=e.points.length-1;lt.y!=d.y>t.y&&t.x<(d.x-u.x)*(t.y-u.y)/(d.y-u.y)+u.x&&(a=!a)}return a}const o=a=>({...a,x:a.x*r.width,y:a.y*r.height}),n=e.size*Math.min(r.width,r.height)/2,i=o(t);return e.points.length===1?Math.hypot(i.x-e.points[0].x*r.width,i.y-e.points[0].y*r.height)<=n:e.points.slice(1).some((a,l)=>hy(i,o(e.points[l]),o(a))<=n)}function yc(e,t){const r=e.map(l=>XE(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 Ah(e,t,r,o){const n=yc(e,o);return t=ot(t,-n.x,1-n.x-n.width),r=ot(r,-n.y,1-n.y-n.height),e.map(i=>{const a=qt(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 by(e,t,r){const o=yc(e,r);t={x:ot(t.x,0,.998),y:ot(t.y,0,.998),width:ot(t.width,.002,1),height:ot(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=qt(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=ot(l.size*Math.sqrt(n*i),.001,1))),l})}function qE(e,t,r,o,n=!1,i){const a=yc(e,i);let l=a.x,c=a.y,u=l+a.width,d=c+a.height;if(t.includes("w")&&(l=ot(l+r,0,u-.002)),t.includes("e")&&(u=ot(u+r,l+.002,1)),t.includes("n")&&(c=ot(c+o,0,d-.002)),t.includes("s")&&(d=ot(d+o,c+.002,1)),n&&t.length===2){const f=a.width/Math.max(a.height,1e-4),p=u-l,g=d-c;if(p/g>f){const m=p/f;t.includes("n")?c=ot(d-m):d=ot(c+m)}else{const m=g*f;t.includes("w")?l=ot(u-m):u=ot(l+m)}}return by(e,{x:l,y:c,width:u-l,height:d-c},i)}function KE(e,t,r){return hy(e,t,r)}function JE(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 Dh=e=>e.layer_id??e.id,ZE=e=>e.authoring??{name:"Layer",visible:!0,locked:!1};function QE(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 eT(e,t,r){const o=new Set(t);if(o.size<2||!o.has(r))return!1;const n=e.geometry.find(l=>Dh(l)===r);if(!n)return!1;const i=ZE(n);let a=!1;return e.geometry.forEach(l=>{const c=Dh(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 vy(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 tT="bv-regional-editor-state-v1:",rt=(e,t)=>typeof e=="number"&&Number.isFinite(e)?e:t,Tt=(e,t,r)=>Math.max(t,Math.min(r,e)),rT=["select","rect-add","rect-subtract","ellipse-add","ellipse-subtract","polygon-add","polygon-subtract","brush-add","brush-subtract"];function my(e){return`${tT}${e}`}function oT(e,t,r={width:520,height:560}){return{x:Tt(rt(e.x,t.width-r.width-24),-r.width+52,t.width-52),y:Tt(rt(e.y,84),72,Math.max(72,t.height-52))}}function Us(e,t){const r=Tt(rt(e.width,520),Math.min(360,t.width),Math.max(360,t.width-32)),o=Tt(rt(e.height,640),Math.min(320,t.height),Math.max(320,t.height-32));return{...oT({x:rt(e.x,t.width-r-24),y:rt(e.y,84)},t,{width:r}),width:r,height:o}}function Ih(e,t){return e.mode==="workspace"?yn({x:24,y:58,width:t.width-48,height:t.height-82},t,"workspace"):e.windows.floating}function yn(e,t,r){const o=Math.min(780,Math.max(320,t.width-16)),n=Math.min(520,Math.max(300,t.height-16)),i=Math.max(o,t.width),a=Math.max(n,t.height),l=Tt(rt(e.width,o),o,i),c=Tt(rt(e.height,n),n,a),u=r==="workspace"?8:0;return{x:Tt(rt(e.x,u),u-l+80,t.width-u-80),y:Tt(rt(e.y,58),0,t.height-42),width:l,height:c}}function yp(e={width:window.innerWidth,height:window.innerHeight}){const t=yn({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=yn({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:Us({x:e.width-544,y:84,width:520,height:640},e)}}function nT(e,t={width:window.innerWidth,height:window.innerHeight}){const r=yp(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:yn(i.workspace??r.windows.workspace,t,"workspace"),floating:yn(i.floating??r.windows.floating,t,"floating")},panels:{left:Tt(rt(a.left,290),210,620),right:Tt(rt(a.right,340),210,620)},artboard:{zoom:Tt(rt(l.zoom,1),.02,8),panX:rt(l.panX,0),panY:rt(l.panY,0),fit:typeof l.fit=="boolean"?l.fit:!0},selectedRegionId:typeof o.selectedRegionId=="string"?o.selectedRegionId:null,selectedLayerId:typeof o.selectedLayerId=="string"?o.selectedLayerId:null,displayOpacity:Tt(rt(o.displayOpacity,.5),.05,1),backgroundOpacity:Tt(rt(o.backgroundOpacity,1),0,1),isolate:o.isolate===!0,tool:o.tool==="rect"?"rect-add":rT.includes(o.tool)?o.tool:"select",binaryMaskPreview:o.binaryMaskPreview===!0,brush:{size:Tt(rt(c.size,.04),.001,1),hardness:Tt(rt(c.hardness,.75),0,1),opacity:Tt(rt(c.opacity,1),0,1),shape:c.shape==="square"?"square":"round",pressureMode:c.pressureMode==="stylus"?"stylus":"constant"},openMenu:["file","edit","view","artboard","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:Us(o.quickPromptWindow??r.quickPromptWindow,t)}}function os(e,t=localStorage,r={width:window.innerWidth,height:window.innerHeight}){try{return nT(JSON.parse(t.getItem(my(e))||"null"),r)}catch{return yp(r)}}function Md(e,t,r=localStorage){try{return r.setItem(my(e),JSON.stringify(t)),!0}catch{return!1}}function iT(e,t,r,o=8){if(e.length!==t*r)throw new Error("Alpha buffer size does not match its dimensions");const n=new Int32Array(e.length),i=[];let a=0;const l=new Int32Array(e.length);for(let c=0;c=o&&(n[y]=a,l[d++]=y)}}i.push({label:a,x:f,y:p,width:g-f+1,height:m-p+1,pixels:_})}return{labels:n,areas:i}}const Ad=(e,t)=>{const r=document.createElement("canvas");return r.width=e,r.height=t,r},aT=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 lT(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 aT(t.data_url),t.x*r,t.y*o,t.width*r,t.height*o);else{const n=Math.min(r,o),i=t.points,a=t.size*n,l=t.shape==="square"?"square":"round",c=(f,p,g=0)=>{const m=a*f.pressure*p;e.filter=g>0?`blur(${g}px)`:"none",e.beginPath(),t.shape==="square"?e.rect(f.x*r-m/2,f.y*o-m/2,m,m):e.arc(f.x*r,f.y*o,m/2,0,Math.PI*2),e.fill()},u=(f,p=0)=>{e.filter=p>0?`blur(${p}px)`:"none",e.lineCap=l,e.lineJoin=l==="round"?"round":"miter";for(let g=1;g0&&c(i[0],t.hardness)):(u(1,d),t.hardness>0&&u(t.hardness))}e.restore()}async function sT(e,t,r){const o=Ad(t,r),n=o.getContext("2d",{willReadFrequently:!0}),i=new Map;e.filter(a=>a.enabled!==!1).forEach(a=>{const l=ol(a),c=i.get(l);c?c.push(a):i.set(l,[a])});for(const a of i.values()){const l=Ad(t,r),c=l.getContext("2d");for(const u of a)await lT(c,u,t,r);n.drawImage(l,0,0)}return o}async function cT(e,t,r){const i=(await sT(e,t.width,t.height)).getContext("2d",{willReadFrequently:!0}).getImageData(0,0,t.width,t.height),a=new Uint8ClampedArray(t.width*t.height);for(let f=0;ff.pixels>1);if(u.length<2)return[];const d={...e[0].authoring??{name:"Layer",visible:!0,locked:!1}};return u.map((f,p)=>{const g=Ad(f.width,f.height),m=g.getContext("2d"),_=m.createImageData(f.width,f.height);for(let b=0;b({schema:"bv.regional.lora_bindings",version:1,document_id:e,global_stack_id:null,regions:{}});function uT(e,t,r){if(!t)return!1;const o=r.filter(n=>n.id===t);return o.length>1&&o[0].nodeId!==e}function _p(e,t){if(e==null||e==="")return _c(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 Qn(e,t){const r=Object.fromEntries(Object.entries(e.regions).filter(([o])=>t.has(o)));return{...e,regions:r}}function gu(e,t){const r=structuredClone(e);return{document:r,loraBindings:structuredClone(Qn(t,new Set(r.regions.map(o=>o.id))))}}function dT(e,t,r){const o=t.find((c,u)=>t.findIndex(d=>d.id===c.id)!==u);if(o)return[`Duplicate LoRA stack ID: ${o.id}`];const n=t.find((c,u)=>t.findIndex(d=>d.name.localeCompare(c.name,void 0,{sensitivity:"accent"})===0)!==u);if(n)return[`Duplicate LoRA stack name: ${n.name}`];const i=r&&Object.keys(e.regions).find(c=>!r.has(c));if(i)return[`LoRA assignment targets a missing region: ${i}`];const a=new Set(t.map(c=>c.id)),l=[e.global_stack_id,...Object.values(e.regions)].filter(c=>!!c);return l.length?t.length?[...new Set(l.filter(c=>!a.has(c)))].map(c=>`Assigned LoRA stack is missing: ${c}`):["LoRA stacks are assigned, but no BV Named LoRA Stack sources exist in this workflow."]:[]}function fT(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 Vs=(e,t)=>e.regions.find(r=>r.id===t)??null,Dd=(e,t)=>e?Ir(e).find(r=>r.id===t)??null:null,Id=e=>e.kind==="layer"||e.kind==="geometry"?e.layerId:null;function pT(e,t){const r=Vs(e,t.source.regionId),o=Vs(e,t.target.regionId);if(!r||!o||r.authoring.locked||o.authoring.locked||t.source.kind!=="region"&&Dd(r,t.source.layerId)?.authoring.locked)return!1;const n=Id(t.target);return!(n&&Dd(o,n)?.authoring.locked)}function gT(e,t,r,o){if(!r||o==="inside"){e.geometry.push(...t);return}const n=e.geometry.map((a,l)=>Ut(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 hT(e,t,r){if(!pT(e,t))return!1;const o=structuredClone(e.regions),n=()=>e.regions.every(f=>Ym(f.geometry))?!0:(e.regions=o,!1);if(t.source.kind==="region"){if(t.target.kind!=="region"||t.position==="inside"||t.source.regionId===t.target.regionId)return!1;const f=e.regions.findIndex(m=>m.id===t.source.regionId),[p]=e.regions.splice(f,1),g=e.regions.findIndex(m=>m.id===t.target.regionId);return e.regions.splice(t.position==="before"?g:g+1,0,p),e.regions.forEach((m,_)=>{m.priority=_}),n()}const i=Vs(e,t.source.regionId),a=Vs(e,t.target.regionId);if(t.source.kind==="layer"){const f=t.source;if(t.target.kind==="geometry"||f.layerId===Id(t.target))return!1;const p=i.geometry.filter(g=>Ut(g)===f.layerId);return p.length?(i.geometry=i.geometry.filter(g=>Ut(g)!==f.layerId),gT(a,p,Id(t.target),t.position),n()):!1}const l=t.source,c=i.geometry.findIndex(f=>f.id===l.geometryId);if(c<0||t.target.kind==="region"&&t.position!=="inside")return!1;const[u]=i.geometry.splice(c,1);if(t.target.kind==="region")return u.layer_id=r(),delete u.mask_group_id,u.authoring={...dr(u)},a.geometry.push(u),n();const d=t.target.layerId;if((d!==l.layerId||a!==i)&&(u.mask_group_id??(u.mask_group_id=l.layerId),u.layer_id=d,u.authoring={...Dd(a,d).authoring}),t.target.kind==="layer"||t.position==="inside"){const f=a.geometry.map((p,g)=>Ut(p)===d?g:-1).filter(p=>p>=0);a.geometry.splice(f.length?f[f.length-1]+1:a.geometry.length,0,u)}else{const f=t.target,p=a.geometry.findIndex(g=>g.id===f.geometryId);a.geometry.splice(t.position==="before"?p:p+1,0,u)}return n()}const bT=e=>e.scope==="global"?"global":`region:${e.document_id}:${e.region_id}`;function xy(e,t){return e.scope===t.scope&&(t.scope==="global"||e.document_id===t.document_id&&e.region_id===t.region_id)}function yy(e,t,r){const o=e.entries.flatMap(n=>{if(r&&n.id!==r)return[n];const i=n.targets.filter(a=>!xy(a,t));return i.length?[{...n,targets:i}]:[]});return{...e,entries:o}}const _y=(e,t)=>e.entries.filter(r=>r.source.kind==="external"&&r.targets.some(o=>xy(o,t)));function vT({collectors:e,config:t,target:r,resolved:o,onSelection:n,onAdd:i,onRemove:a}){const l=_y(t,r);return s.jsxs("div",{className:"bv-lora-v3-scope-picker",children:[l.map((c,u)=>s.jsxs("section",{className:"bv-lora-v3-stack-row",children:[s.jsxs("strong",{children:["LoRA Stack ",u+1]}),s.jsx(Ti,{collectors:e,collectorId:c.source.collector_id,resourceId:c.source.resource_id,resolved:typeof o=="function"?o(c):o,label:"LoRA stack",emptyLabel:"Select LoRA stack",onSelection:(d,f)=>n(c.id,d,f)}),s.jsx(ie,{density:"compact",intent:"ghost",iconOnly:!0,"aria-label":`Remove LoRA Stack ${u+1}`,title:"Remove LoRA stack",onClick:()=>a(c.id,r),children:s.jsx("svg",{className:"bv-trash-icon",viewBox:"0 0 24 24","aria-hidden":"true",children:s.jsx("path",{d:"M4 7h16M9 7V4h6v3M7 7l1 13h8l1-13M10 11v5M14 11v5"})})})]},c.id)),s.jsx(ie,{intent:"secondary",disabled:!e.some(c=>c.resources.length>0),onClick:()=>i(r),children:"Add LoRA stack"})]})}function jh(e){const t=_y(e.config,e.target).length>0;return s.jsx("div",{className:"bv-optional-lora-scope",children:s.jsxs("div",{className:"bv-lora-v3-enable-row",children:[s.jsx(Ei,{label:"",value:t,trueLabel:"LoRA enabled",falseLabel:"LoRA disabled",onValue:r=>{r?e.onAdd(e.target):e.onClear(e.target)}}),t&&s.jsx(vT,{...e})]})})}const mT=()=>({version:3,entries:[],steps:[]}),Ph=(e,t)=>e?.source?.kind==="external"?{...e,source:{...e.source,collector_id:String(e.source.collector_id??t??"")}}:e;function wy(e){const t=typeof e=="string"?JSON.parse(e):e;if(!t||typeof t!="object"||![1,2,3].includes(t.version)||!Array.isArray(t.entries)||t.version>=2&&!Array.isArray(t.steps))throw new Error("Invalid BV Regional LoRA v3 configuration");const r=structuredClone(t),o=r.collector_id??null;return{version:3,entries:r.entries.map(n=>Ph(n,o)),steps:(r.steps??[]).map(n=>({...n,entries:n.entries.map(i=>Ph(i,o))}))}}const ky=e=>JSON.stringify(e);function xT(e,t,r,o){const n=i=>i.id===t&&i.source.kind==="external"?{...i,source:{...i.source,collector_id:r,resource_id:o}}:i;return{...e,entries:e.entries.map(n),steps:e.steps?.map(i=>({...i,entries:i.entries.map(n)}))}}const co="BV_RUNTIME_RESOURCE_PROVIDER",Va="resource_provider",jd="BV LoRA Stack Collector",wp=20,Ey=e=>`${Va}_${e}`,yT=20,wc=(e,t)=>t==null?null:e?._links?.get?.(t)??e?.links?.get?.(t)??e?.links?.[t]??null,Bh=e=>e?.findIndex(t=>t?.name===Va||t?.type===co)??-1;function Ty(e){let t=Bh(e.outputs);t<0&&e.addOutput&&(e.addOutput(Va,co),t=Bh(e.outputs));const r=e.outputs?.[t];return r&&(r.name=Va,r.type=co,r.hidden=!0,r.__bvResourceSlot=!0),t}function Ry(e,t=wp){const r=[];for(let o=1;o<=t;o++){const n=Ey(o);let i=e.inputs?.findIndex(l=>l?.name===n)??-1;i<0&&e.addInput&&(e.addInput(n,co),i=e.inputs?.findIndex(l=>l?.name===n)??-1);const a=e.inputs?.[i];a&&(a.name=n,a.type=co,a.hidden=!0,a.__bvResourceSlot=!0,a.__bvLoraProviderOrdinal=o),r.push(i)}return r}function Sy(e,t=0){const r=(e.inputs??[]).map((o,n)=>({slot:o,index:n,ordinal:Number(o?.__bvLoraProviderOrdinal??String(o?.name??"").match(/^resource_provider_(\d+)$/)?.[1]??0)})).filter(o=>o.ordinal>t&&o.slot?.type===co&&o.slot?.link==null).sort((o,n)=>n.index-o.index);for(const o of r)e.removeInput?.(o.index)}function _T(e){if(e.__bvLoraOriginalComputeSize||typeof e.computeSize!="function")return;const t=e.computeSize;e.__bvLoraOriginalComputeSize=t,e.computeSize=function(){const r=t.apply(this,arguments),o=(this.inputs??[]).filter(n=>n?.type===co).length;return[Number(r?.[0]??this.size?.[0]??220),Math.max(60,Number(r?.[1]??this.size?.[1]??60)-o*yT)]}}function Wa(e){if(_T(e),!e.setSize)return;const t=e.size??[220,60],r=Math.max(Number(t[0]??0),220);e.setSize([r,60]);const o=e.computeSize?.()??e.size??[220,60],n=Math.max(60,Number(o[1]??60)),i=Math.max(r,Number(o[0]??0),220);Math.abs(Number(e.size?.[0]??0)-i)<.5&&Math.abs(Number(e.size?.[1]??0)-n)<.5||e.setSize([i,n])}function kc(e){if(!e.__bvLoraCompactScheduled){e.__bvLoraCompactScheduled=!0,Wa(e);for(const t of[0,50,150])setTimeout(()=>{Wa(e),t===150&&(e.__bvLoraCompactScheduled=!1)},t)}}function pi(e){return Array.from({length:wp},(t,r)=>{const o=e.inputs?.find(l=>l?.name===Ey(r+1)),n=wc(e.graph,o?.link);if(!n||String(n.target_id)!==String(e.id))return null;const i=e.graph?.getNodeById?.(n.origin_id),a=i?.outputs?.[Number(n.origin_slot)];return i?.graph===e.graph&&(i?.type===jd||i?.comfyClass===jd||a?.type===co)?i:null})}function Ly(e,t){if(t.length>wp)return!1;const r=Ry(e,t.length);for(let o=0;o({slot:a,index:l,ordinal:Number(a?.__bvLoraProviderOrdinal??String(a?.name??"").match(/^resource_provider_(\d+)$/)?.[1]??0)})))i>t.length&&o?.type===co&&o.link!=null&&e.disconnectInput?.(n);return Sy(e,t.length),pi(e).slice(0,t.length).every((o,n)=>o===t[n])}function wT(e){const t=e.inputs?.findIndex(n=>n.name===Va)??-1;if(t<0||e.inputs?.[t]?.link==null)return!1;const r=wc(e.graph,e.inputs[t].link),o=r&&e.graph?.getNodeById?.(r.origin_id);return!o||o.graph!==e.graph||!Ly(e,[o])?!1:(e.disconnectInput?.(t),!0)}function kT(e){return(e.graph?._nodes??[]).filter(t=>t!==e&&t.graph===e.graph&&String(t.comfyClass??t.type)===jd)}const ET=new Set(["BV Regional LoRA"]);function TT(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=wc(t,l),u=c&&t?.getNodeById?.(c.target_id);!u||u.graph!==t||o.has(u)||(o.add(u),ET.has(String(u.comfyClass??u.type))&&n.push(u),(u.outputs??[]).some(d=>d.type==="BV_REGIONAL")&&r.push(u))}}return n}function RT(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=wc(t,i.link),l=a&&t?.getNodeById?.(a.origin_id);if(!(!l||l.graph!==t||o.has(l))){if(["BV Regional LoRA","BV Regional Prompt"].includes(String(l.comfyClass??l.type)))return l;o.add(l),r.push(l)}}}return null}function Cy(e,t){const r=RT(e),o=r?pi(r).filter(Boolean):[];for(const i of t)i&&!o.includes(i)&&o.push(i);const n=pi(e);return!n.slice(o.length).some(Boolean)&&o.every((i,a)=>n[a]===i)||Ly(e,o),o}function ST(e,t){return TT(e).map(r=>Cy(r,t(r)))}const Pd="BV.Regional.LegacyDebugMode",zh="bv.regional.toggleDebugWiring";let ua=!1;const kp=(e,t)=>t==="input"?e.link!=null:!!e.links?.length,Ny=(e,t)=>{for(const r of e?._nodes??[])t(r),r.subgraph&&Ny(r.subgraph,t)},LT=new Set(["BV Regional Native Conditioning","BV Regional SDXL Attention","BV Regional Z-Image Attention","BV Regional FLUX.2 Klein 9B Attention","BV Regional Krea 2 Attention","BV Regional Anima Conditioning"]);function CT(e){return LT.has(e)?[{direction:"input",name:"lora_registry",type:"BV_LORA_STACK_REGISTRY",guidance:"Use Regional V3 resource providers."},{direction:"input",name:"lora_bindings",type:"BV_REGIONAL_LORA_BINDINGS",guidance:"Use the BV_REGIONAL context input."}]:e==="BV Regional Detailer Plan"?[{direction:"input",name:"detector_registry",type:"BV_DETECTOR_REGISTRY",guidance:"Use Regional V3 detector resource providers."}]:[]}function Bd(e,t){return ua=!!e,typeof document<"u"&&document.documentElement.classList.toggle("bv-regional-debug-wiring-active",ua),Ny(t,gi),t?.setDirtyCanvas?.(!0,!0),ua}function Ep(){return ua}function NT(e,t,r){return ua||kp(e,t)||e.__bvLegacySticky===!0||!!(r&&e.type===r)}function zd(e){const t=e?.connecting_output?.type??e?.connecting_input?.type;if(t)return String(t);const r=e?.linkConnector?.renderLinks?.[0]?.fromSlot?.type;return r==null?null:String(r)}function Ml(e,t){for(const r of t){const o=r.direction==="input"?e.inputs:e.outputs,n=o?.find(i=>i.name===r.name);n&&(n.__bvLegacyPort=!0,n.__bvLegacyWasConnected=kp(n,r.direction),n.__bvLegacyGuidance=r.guidance)}gi(e)}function gi(e,t){for(const[r,o]of[["input",e.inputs],["output",e.outputs]])for(const n of o??[]){if(!n.__bvLegacyPort)continue;const i=kp(n,r);n.__bvLegacyWasConnected&&!i&&(n.__bvLegacySticky=!0),n.__bvLegacyWasConnected=i;const a=NT(n,r,t);n.hidden=!a,n.__bvM0PortHidden=!a,n.__bvM0VisualHidden=!a}e.setDirtyCanvas?.(!0,!0)}function OT(e){const t=zd(e);for(const r of e?.graph?._nodes??[])gi(r,t);return t}function Fh(e){for(const t of[...e.inputs??[],...e.outputs??[]])t.__bvLegacyPort&&(t.__bvLegacySticky=!1);gi(e)}function MT(e){return[...e.inputs??[],...e.outputs??[]].filter(t=>t.__bvLegacyPort&&(t.link!=null||!!t.links?.length))}const AT="BV_RUNTIME_RESOURCE_PROVIDER_M0",Fd="BV_RUNTIME_RESOURCE_PROVIDER",Ud=e=>e===AT||e===Fd;function Tp(e){return Ep()||(e?._nodes??[]).some(t=>t.__bvM0ResourceConsumer===!0&&!!t.properties?.bvM0DebugVisible)}function DT(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===Fd||o?.inputs?.[t.target_slot]?.type===Fd?!Ep():Oy(e,t)?!Tp(e.graph):!!(r?.outputs?.[t.origin_slot]?.__bvM0VisualHidden||o?.inputs?.[t.target_slot]?.__bvM0VisualHidden)}function Oy(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||Ud(n?.type))&&(i?.__bvM0ResourceSlot||Ud(i?.type)))}function Rp(e){if(!e||e.__bvM0DebugAnimation)return;e.__bvM0DebugAnimation=!0;const t=()=>{const r=Tp(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 My(e){if(typeof document>"u")return;const t=Tp(e);document.documentElement.classList.toggle("bv-m0-debug-active",t)}function Sp(e){if(!e||e.__bvM0VisibilityInstalled)return;e.__bvM0VisibilityInstalled=!0;let t=null,r=0;const o=()=>{r=0;const c=zd(e);c!==t&&(t=c,OT(e))},n=()=>{r||(r=requestAnimationFrame(o))},i=()=>requestAnimationFrame(n);typeof window<"u"&&(window.addEventListener("pointermove",n,!0),window.addEventListener("pointerup",i,!0),window.addEventListener("pointercancel",i,!0));const a=e.drawNode,l=e.renderLink;e.renderLink=function(...c){if(DT(this,c[3]))return;if(!Oy(this,c[3]))return l.apply(this,c);const u=this.graph?.getNodeById?.(c[3]?.target_id),d=u?.inputs?.map((g,m)=>({slot:g,index:m})).filter(({slot:g})=>g.__bvM0ResourceSlot)??[],f=u?.__bvM0FanInAnchorSlot??(d.length>1?d[0].index:void 0);f!=null&&u&&((c[3]?.target_slot===f||!u.__bvM0FanInPoint)&&(u.__bvM0FanInPoint=c[2]),c[2]=u.__bvM0FanInPoint);const p=c[0];p.save();try{return p.setLineDash([7,5]),p.lineDashOffset=-((typeof performance>"u"?0:performance.now())/45%12),c[5]=typeof performance>"u"?0:performance.now()/1e3,l.apply(this,c)}finally{p.restore()}},e.drawNode=function(c,u){const d=[],f=zd(this)??"";for(const p of[...c.inputs??[],...c.outputs??[]])if(!(p.__bvLegacyPort&&f&&p.type===f)&&!(!Ud(p.type)&&!p.__bvM0PortHidden)){for(const g of["name","label","localized_name"]){const m=Object.prototype.hasOwnProperty.call(p,g),_=p[g];Object.defineProperty(p,g,{configurable:!0,writable:!0,value:""}),d.push(()=>m?Object.defineProperty(p,g,{configurable:!0,writable:!0,value:_}):delete p[g])}for(const g of["draw","drawCollapsed"]){if(typeof p[g]!="function")continue;const m=Object.prototype.hasOwnProperty.call(p,g),_=p[g];Object.defineProperty(p,g,{configurable:!0,writable:!0,value:()=>{}}),d.push(()=>m?Object.defineProperty(p,g,{configurable:!0,writable:!0,value:_}):delete p[g])}}try{return a.call(this,c,u)}finally{for(let p=d.length-1;p>=0;p--)d[p]()}}}function Lp(e,t,r){let o=0;const n=(e.__bvM0ElementMarkRevision??0)+1;e.__bvM0ElementMarkRevision=n;const i=()=>{if(e.__bvM0ElementMarkRevision!==n)return;const a=CSS.escape(String(e.id)),l=document.querySelector(`.lg-node[data-node-id="${a}"]`);if(!l){o++<40&&setTimeout(i,50);return}l.classList.add(`bv-m0-${t}`),l.classList.toggle("bv-m0-debug",r);const c=l.querySelectorAll(".lg-slot--input"),u=e.inputs?.map((f,p)=>({slot:f,index:p})).filter(({slot:f})=>f.__bvM0ResourceSlot)??[],d=u.length>1?u[0].index:void 0;c.forEach((f,p)=>f.classList.toggle("bv-m0-port-hidden",!!e.inputs?.[p]?.__bvM0PortHidden||d!=null&&p!==d)),l.classList.toggle("bv-m0-fan-in",d!=null),o++<4&&setTimeout(i,75*o)};i()}const IT=new Map,jT={regional:"bv-open-regional-editor",quick:"bv-open-regional-quick-edit",lora:"bv-open-regional-lora-editor"};function zr(e,t=null){for(const r of IT.get(e)??[])r(t);typeof window<"u"&&window.dispatchEvent(new CustomEvent(jT[e],{detail:{node:t}}))}const Vd="bvRegionalEditorDraftV1",Wd="bv-regional-migration-report",$d="bv-regional-validation-changed",hu=(e,t)=>e.widgets?.find(r=>r.name===t),PT=e=>String(e.comfyClass??e.type??"");function BT(e){if(e==null||typeof e!="object"||Array.isArray(e))return null;const t=e;return t.schema!=="bv.regional.editor-draft"||t.version!==1||!t.raw||typeof t.raw!="object"||Array.isArray(t.raw)?null:{schema:"bv.regional.editor-draft",version:1,raw:structuredClone(t.raw),issues:Array.isArray(t.issues)?structuredClone(t.issues):[]}}function zT(e,t){e.properties??(e.properties={}),t?e.properties[Vd]=structuredClone(t):delete e.properties[Vd],e.graph?.change?.(),e.graph?.setDirtyCanvas?.(!0,!0),typeof window<"u"&&window.dispatchEvent(new CustomEvent($d,{detail:{node:e}}))}function Hd(e){return BT(e.properties?.[Vd])}function FT(e,t){const r=structuredClone(e),o=[];if(Object.prototype.hasOwnProperty.call(t,"title")){const n=typeof t.title=="string"?t.title.trim():"";n?r.title=n:o.push({field:"title",section:"document",message:"Title is required.",fallback:r.title})}for(const[n,i,a]of[["canvas.width",64,16384],["canvas.height",64,16384]]){if(!Object.prototype.hasOwnProperty.call(t,n))continue;const l=typeof t[n]=="number"?t[n]:Number(t[n]);Number.isInteger(l)&&l>=i&&l<=a?r.canvas[n.endsWith("width")?"width":"height"]=l:o.push({field:n,section:"canvas",message:`${n} must be an integer from ${i} to ${a}.`,fallback:r.canvas[n.endsWith("width")?"width":"height"]})}return{canonical:r,draft:{schema:"bv.regional.editor-draft",version:1,raw:structuredClone(t),issues:o}}}function Yd(e){const t={nodeId:String(e.id??""),nodeTitle:e.title||"BV Regional node",migrated:!1,assumedDefaults:[]},r=[];try{const o=hu(e,"regional_json");if(o){const i=typeof o.value=="string"?JSON.parse(o.value):structuredClone(o.value),a=Fo(i),l=JSON.stringify(a);i?.version===1&&t.assumedDefaults.push("region usage = generation"),String(o.value??"")!==l&&r.push({target:o,value:l})}const n=hu(e,"lora_v3_config_json")??(PT(e)==="BV Regional LoRA"?hu(e,"config_json"):void 0);if(n&&String(n.value??"").trim()){const i=wy(n.value),a=ky(i);String(n.value??"")!==a&&r.push({target:n,value:a})}}catch(o){return t.error=o instanceof Error?o.message:String(o),t}for(const o of r)o.target.value=o.value,o.target.callback?.(o.value);return t.migrated=r.length>0,t.migrated&&(e.graph?.change?.(),e.graph?.setDirtyCanvas?.(!0,!0)),t}let Al=[],bu=!1;function Xd(e){if(!e.migrated&&!e.error)return;const t=`${e.nodeId}:${e.nodeTitle}`;Al=[...Al.filter(r=>`${r.nodeId}:${r.nodeTitle}`!==t),e],!(bu||typeof window>"u")&&(bu=!0,queueMicrotask(()=>{bu=!1;const r=Al;Al=[],window.dispatchEvent(new CustomEvent(Wd,{detail:{reports:r}}))}))}function UT(e){const t=e.filter(n=>n.migrated),r=e.filter(n=>n.error),o=[...new Set(t.flatMap(n=>n.assumedDefaults))];return{title:r.length?"Regional migration needs attention":"Regional configuration migrated",message:`${t.length} migrated, ${r.length} failed${o.length?` · Defaults: ${o.join(", ")}`:""}.`,tone:r.length?"warning":"info"}}const Uh="bv-open-regional-lora-editor",uo="bv-regional-lora-inventory-changed",er=(e,t)=>e?.widgets?.find(r=>r.name===t),Li=e=>String(e?.comfyClass??e?.type??""),Ay=(e,t)=>t==null?null:e?._links?.get?.(t)??e?.links?.get?.(t)??e?.links?.[t]??null,an=e=>{e&&(e.type="converted-widget",e.hidden=!0,e.computeSize=()=>[0,-4],e.element&&(e.element.style.display="none"),e.serializeValue=e.serializeValue??function(){return this.value})},VT=e=>{e&&!String(e.value??"").trim()&&(e.value=crypto.randomUUID())},Dy=()=>{let e=0;const t=()=>{const r=ct().canvas;r?Sp(r):e++<40&&setTimeout(t,50)};t()};function Iy(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=Ay(n.graph,i.link),l=a&&n.graph?.getNodeById?.(a.origin_id);if(!(!l||l.graph!==n.graph)){if(Li(l)==="BV Named LoRA Stack"){const c=String(er(l,"stack_id")?.value??"").trim(),u=String(er(l,"name")?.value??"").trim();c&&u&&t.push({id:c,label:u,node:l})}o.push(l)}}}}return t.reverse()}function al(e){return kT(e).map(t=>({id:String(er(t,"collector_id")?.value??"").trim(),nodeId:String(t.id),label:String(t.title||"BV LoRA Stack Collector"),resources:Iy(t),node:t})).filter(t=>t.id)}function Cp(e){const t=[];for(const r of[...e.entries,...(e.steps??[]).flatMap(o=>o.entries)])r.source.kind==="external"&&r.source.collector_id&&!t.includes(r.source.collector_id)&&t.push(r.source.collector_id);return t}function Po(e,t=Li(e)==="BV Regional Prompt"?"lora_v3_config_json":"config_json"){try{let r=wy(er(e,t)?.value),o=pi(e),n=!1;const i=a=>{if(a.source.kind!=="external")return a;const l=o.find(f=>f?.__bvLoraCollectorIdRemap?.[a.source.collector_id]||String(er(f,"collector_id")?.value??"")===a.source.collector_id),c=l?.__bvLoraCollectorIdRemap?.[a.source.collector_id]??a.source.collector_id,u=Object.assign({},...Iy(l).map(f=>f.node?.__bvLoraResourceIdRemap??{})),d=u[a.source.resource_id]??a.source.resource_id;return n||(n=c!==a.source.collector_id||d!==a.source.resource_id),{...a,source:{...a.source,collector_id:c,resource_id:d}}};return r={...r,entries:r.entries.map(i),steps:r.steps?.map(a=>({...a,entries:a.entries.map(i)}))},n&&jy(e,r,t),r}catch{return mT()}}function jy(e,t,r=Li(e)==="BV Regional Prompt"?"lora_v3_config_json":"config_json"){const o=er(e,r);o&&(o.value=ky(t),o.callback?.(o.value),e.setDirtyCanvas?.(!0,!0))}function WT(e){const t=e?.graph,r=[e],o=new Set;let n=null;for(;r.length&&!n;){const i=r.shift();if(!(!i||o.has(i))){if(o.add(i),Li(i)==="BV Regional Prompt"){try{const a=JSON.parse(String(er(i,"regional_json")?.value??"{}"));n=a.version===3?a.core:a}catch{}break}for(const a of i.inputs??[]){if(a.type!=="BV_REGIONAL")continue;const l=Ay(t,a.link),c=l&&t?.getNodeById?.(l.origin_id);c?.graph===t&&r.push(c)}}}return n?.document_id?[{value:"global",label:"Global",target:{scope:"global"}},...(n.regions??[]).map(i=>({value:`region:${n.document_id}:${i.id}`,label:String(i.name||i.id),target:{scope:"region",document_id:String(n.document_id),region_id:String(i.id)}}))]:[{value:"global",label:"Global",target:{scope:"global"}}]}const Py=e=>new Set(pi(e).map(t=>String(er(t,"collector_id")?.value??"")).filter(Boolean));function Vh(e,t){const r=Py(e);return Cp(t).every(o=>r.has(o))}function By(e,t,r){return r.source.kind!=="external"||Py(e).has(r.source.collector_id)}function ll(e,t){return jy(e,t),Fy(e,t),t}function zy(e,t,r,o,n){return ll(e,xT(t,r,o,n))}function $T(e,t,r){const o=al(e)[0],n=o?.resources[0];return!o||!n?t:ll(e,{...t,entries:[...t.entries,{id:crypto.randomUUID(),source:{kind:"external",collector_id:o.id,resource_id:n.id},targets:[r]}]})}function HT(e,t,r,o){return ll(e,yy(t,o,r))}function YT(e,t,r){return ll(e,yy(t,r))}function XT(e){Dy();const t=er(e,"collector_id");VT(t);const r=String(t?.value??"").trim(),o=(e.graph?._nodes??[]).find(n=>n!==e&&Li(n)==="BV LoRA Stack Collector"&&String(er(n,"collector_id")?.value??"").trim()===r);if(t&&r&&o){const n=crypto.randomUUID();t.value=n,e.__bvLoraCollectorIdRemap={[r]:n}}an(t),Ty(e),e.__bvRuntimeResourceProvider=!0}function GT(e){try{const t=Li(e)==="BV Regional Prompt"?"lora_v3_config_json":"config_json",r=JSON.parse(String(er(e,t)?.value??"{}")),o=[...r.entries??[],...(r.steps??[]).flatMap(i=>i.entries??[])],n=[];for(const i of o)i?.source?.kind==="external"&&i.source.collector_id&&!n.includes(i.source.collector_id)&&n.push(i.source.collector_id);return n.length}catch{return 0}}function qT(e,t){const r=t??Po(e),o=al(e),n=Cp(r).map(i=>o.find(a=>a.id===i)?.node??null);return Cy(e,n)}function KT(e){const t=Po(e),r=al(e);return Cp(t).map(o=>r.find(n=>n.id===o)?.node??null)}function JT(e,t){const r=qT(e,t);return ST(e,KT),r}function Fy(e,t){e.__bvLoraPendingConfig=t??e.__bvLoraPendingConfig,!e.__bvLoraReconcileScheduled&&(e.__bvLoraReconcileScheduled=!0,setTimeout(()=>{const r=e.__bvLoraPendingConfig;delete e.__bvLoraPendingConfig,e.__bvLoraReconcileScheduled=!1,JT(e,r),window.dispatchEvent(new CustomEvent(uo,{detail:{node:e}}))},0))}function Ws(e){Dy(),wT(e),Fy(e);const t=pi(e),r=t.reduce((n,i,a)=>i?a+1:n,0),o=Math.max(GT(e),r);Sy(e,o);for(const n of Ry(e,o)){const i=e.inputs?.[n];i&&(i.hidden=!0,i.label="",i.__bvM0VisualHidden=!0,i.__bvM0PortHidden=!0,i.__bvM0ResourceSlot=!0)}kc(e)}function ZT(e){if(Ws(e),an(er(e,"operation")),an(er(e,"config_json")),!e.widgets?.find(t=>t.name==="open_lora_editor")){const t=e.addWidget?.("button","open_lora_editor",null,()=>zr("lora",e),{serialize:!1});t&&(t.label="Open LoRA Editor",t.serialize=!1)}Wa(e)}function QT(e,t){const r=t.name==="BV LoRA Stack Collector",o=t.name==="BV Regional LoRA",n=t.name==="BV Regional Prompt";if(!r&&!o&&!n)return!1;const i=e.prototype.onNodeCreated,a=e.prototype.onConfigure,l=e.prototype.onConnectionsChange,c=e.prototype.onRemoved,u=function(){r&&XT(this),o&&ZT(this),n&&Ws(this),o&&window.dispatchEvent(new CustomEvent(uo))};return e.prototype.onNodeCreated=function(){const d=i?.apply(this,arguments);return queueMicrotask(()=>u.call(this)),d},e.prototype.onConfigure=function(){const d=a?.apply(this,arguments);return queueMicrotask(()=>{(o||n)&&Xd(Yd(this)),u.call(this)}),d},e.prototype.onConnectionsChange=function(){const d=l?.apply(this,arguments);return queueMicrotask(()=>u.call(this)),d},e.prototype.onRemoved=function(){const d=c?.apply(this,arguments);return o&&queueMicrotask(()=>window.dispatchEvent(new CustomEvent(uo))),d},!0}const Gr=(e,t,r,o)=>{const n=Number(e);return Number.isFinite(n)?Math.max(r,Math.min(o,n)):t},Np=()=>({global_influence:1,background_influence:.35,primary_region_influence:1,context_region_influence:1}),Uy=()=>({roi_padding:.15,threshold:.5,dilation:0,crop_factor:1.5,drop_size:10}),Op=e=>e.filter(t=>t.enabled!==!1&&(t.usage==="detailer"||t.usage==="both")).sort((t,r)=>(t.priority??0)-(r.priority??0)),Gd=e=>({version:1,jobs:Op(e).map(t=>({id:crypto.randomUUID(),region_ids:[t.id],primary_region_id:t.id,mask_composition:"union",prompt_composition:"context",conditioning:Np(),detector_assignments:[]}))}),da=(e,t,r=[])=>{const o=new Set(Op(t).map(a=>a.id));let n;try{n=String(e??"").trim()?JSON.parse(String(e)):Gd(t)}catch{n=Gd(t)}return{version:1,jobs:Array.isArray(n?.jobs)?n.jobs.flatMap(a=>{const l=Array.isArray(a?.region_ids)?[...new Set(a.region_ids.map(String).filter(m=>o.has(m)))]:[];if(!l.length)return[];const c=a.conditioning??{},u=a.detector??{},d=Array.isArray(a.detector_assignments)?a.detector_assignments.slice(0,1):[],f=String(a.detector_id??"").trim(),p=r.flatMap(m=>m.resources.filter(_=>_.id===f).map(_=>({collector:m,resource:_}))),g=d.length?d:f?[{id:crypto.randomUUID(),source:{collector_id:p.length===1?p[0].collector.id:"",resource_id:f},options:u}]:[];return[{id:String(a.id??"").trim()||crypto.randomUUID(),region_ids:l,primary_region_id:l.includes(String(a.primary_region_id))?String(a.primary_region_id):l[0],mask_composition:["union","intersection","subtract"].includes(a.mask_composition)?a.mask_composition:"union",prompt_composition:a.prompt_composition==="primary"?"primary":"context",conditioning:{global_influence:Gr(c.global_influence,1,0,2),background_influence:Gr(c.background_influence,.35,0,2),primary_region_influence:Gr(c.primary_region_influence,1,0,2),context_region_influence:Gr(c.context_region_influence,1,0,2)},detector_assignments:g.map(m=>{const _=m.options??{};return{id:String(m.id??"").trim()||crypto.randomUUID(),source:{collector_id:String(m.source?.collector_id??""),resource_id:String(m.source?.resource_id??"")},options:{roi_padding:Gr(_.roi_padding,.15,0,2),threshold:Gr(_.threshold,.5,0,1),dilation:Math.round(Gr(_.dilation,0,-512,512)),crop_factor:Gr(_.crop_factor,1.5,1,20),drop_size:Math.round(Gr(_.drop_size,10,1,8192)),...String(_.query??"").trim()?{query:String(_.query).trim()}:{},...Array.isArray(_.labels)?{labels:_.labels.map(String).map(k=>k.trim()).filter(Boolean)}:{}}}})}]}):[]}},fa=e=>JSON.stringify(e),$s=()=>({schema:"bv.detector_registry_config",version:2,collector_id:crypto.randomUUID(),detectors:[]}),pa=e=>{try{const t=String(e??"").trim()?JSON.parse(String(e)):$s(),r=String(t?.collector_id??"").trim()||crypto.randomUUID(),o=Array.isArray(t?.detectors)?t.detectors.flatMap(n=>{const i=String(n?.id??"").trim(),a=String(n?.model_name??"").trim();if(!i||!a)return[];const l=n.provider==="onnx"?"onnx":"ultralytics",c=String(n.sam_model_name??"").trim();return[{id:i,provider:l,model_name:a,...c?{sam_model_name:c,sam_device_mode:["Prefer GPU","CPU"].includes(n.sam_device_mode)?n.sam_device_mode:"AUTO"}:{}}]}):[];return{schema:"bv.detector_registry_config",version:2,collector_id:r,detectors:o}}catch{return $s()}},ga=e=>JSON.stringify(e),hi="bv-regional-detailer-inventory-changed",Vr="BV_RUNTIME_RESOURCE_PROVIDER",Vy="BV Detector Registry",Ec=20,Sn=(e,t)=>e?.widgets?.find(r=>r.name===t),Mp=e=>String(e?.comfyClass??e?.type??""),Ap=e=>e===0?"resource_provider":`resource_provider_${e}`,Wy=e=>`detailer_resource_provider_${e+1}`,sl=(e,t)=>t==null?null:e?._links?.get?.(t)??e?.links?.get?.(t)??e?.links?.[t]??null,tr=e=>e?.graph??e?.__bvConcreteGraph??null;function $a(e,t){return e&&t&&(e.__bvConcreteGraph=t),t}const Ha=e=>pa(Sn(e,"config_json")?.value),$y=e=>{try{const t=JSON.parse(String(Sn(e,"config_json")?.value??"{}"));return t?.version===1&&Array.isArray(t.jobs)?t:{version:1,jobs:[]}}catch{return{version:1,jobs:[]}}};function Dp(e){let t=e.outputs?.findIndex(o=>o?.type===Vr)??-1;t<0&&e.addOutput&&(e.addOutput("resource_provider",Vr),t=e.outputs?.findIndex(o=>o?.type===Vr)??-1);const r=e.outputs?.[t];return r&&(r.name="resource_provider",r.type=Vr,r.hidden=!0,r.__bvResourceSlot=!0),t}function Hy(e,t){const r=[];for(let o=0;ol.name===n)??-1;i<0&&e.addInput&&(e.addInput(n,Vr),i=e.inputs?.findIndex(l=>l.name===n)??-1);const a=e.inputs?.[i];a&&(a.type=Vr,a.hidden=!0,a.label="",a.__bvResourceSlot=!0,a.__bvM0PortHidden=!0),r.push(i)}return r}const eR=e=>e?.name==="resource_provider"?0:Number(String(e?.name??"").match(/^resource_provider_(\d+)$/)?.[1]??-1);function Yy(e,t){const r=(e.inputs??[]).map((o,n)=>({slot:o,index:n,ordinal:eR(o)})).filter(o=>o.slot?.type===Vr&&o.ordinal>=t&&o.slot?.link==null).sort((o,n)=>n.index-o.index);for(const o of r)e.removeInput?.(o.index)}function Ip(e,t){const r=tr(e),o=e.inputs?.find(l=>l.name===Ap(t)),n=sl(r,o?.link);if(!n)return null;const i=r?.getNodeById?.(n.origin_id),a=i?.outputs?.[Number(n.origin_slot)];return tr(i)===r&&a?.type===Vr?i:null}function Tc(e){const t=tr(e);return(t?._nodes??t?.nodes??[]).filter(r=>r!==e&&tr(r)===t&&Mp(r)===Vy)}function ns(e){const t=[];for(const r of e.jobs??[])for(const o of r.detector_assignments??[]){const n=String(o?.source?.collector_id??"");n&&!t.includes(n)&&t.push(n)}return t}const Xy=e=>{try{const t=JSON.parse(String(Sn(e,"detailer_v3_config_json")?.value??"{}"));return t?.version===1&&Array.isArray(t.jobs)?t:{version:1,jobs:[]}}catch{return{version:1,jobs:[]}}};function tR(e){const t=tr(e),r=[e],o=new Set(r);for(;r.length;){const n=r.shift();for(const i of n?.inputs??[]){if(i?.type!=="BV_REGIONAL")continue;const a=sl(t,i.link),l=a&&t?.getNodeById?.(a.origin_id);if(!(!l||tr(l)!==t||o.has(l))){if(Mp(l)==="BV Regional Prompt")return l;o.add(l),r.push(l)}}}return null}function Gy(e,t){if(String(Sn(e,"config_json")?.value??"").trim())return ns(t);const r=tR(e);return ns(r?Xy(r):t)}function rR(e,t){$a(e,t);const r=Sn(e,"config_json");if(!r)return;let o=Ha(e);if(Tc(e).find(i=>Ha(i).collector_id===o.collector_id)){const i=o.collector_id;o={...o,collector_id:crypto.randomUUID()},r.value=ga(o),r.callback?.(r.value),e.__bvDetectorCollectorIdRemap={[i]:o.collector_id}}Dp(e),e.__bvRuntimeResourceProvider=!0,window.dispatchEvent(new CustomEvent(hi,{detail:{node:e}}))}function Rc(e){return Tc(e).map(t=>{const r=tr(t),o=Ha(t),n=o.detectors.map(i=>({id:i.id,label:i.id}));for(const i of t.inputs??[]){if(!String(i.name).startsWith("external_detector_")||i.link==null)continue;const a=sl(r,i.link),l=a&&r?.getNodeById?.(a.origin_id),c=String(Sn(l,"detector_id")?.value??"").trim();c&&!n.some(u=>u.id===c)&&n.push({id:c,label:c})}return{id:o.collector_id,label:`${String(t.title||Vy)} · #${t.id}`,resources:n}}).filter(t=>t.id)}function oR(e,t){let r=!1;const o=t.jobs.map(n=>({...n,detector_assignments:n.detector_assignments.map(i=>{const l=Array.from({length:Ec+1},(c,u)=>Ip(e,u)).find(c=>c?.__bvDetectorCollectorIdRemap?.[i.source.collector_id])?.__bvDetectorCollectorIdRemap?.[i.source.collector_id];return l?(r=!0,{...i,source:{...i.source,collector_id:l}}):i})}));return{config:r?{...t,jobs:o}:t,changed:r}}function qy(e){const t=tr(e),r=Sn(e,"config_json");if(!r)return;let o=$y(e),n=oR(e,o);o=n.config,n.changed&&(r.value=fa(o),r.callback?.(r.value));const i=Tc(e),a=Gy(e,o).map(c=>i.find(u=>Ha(u).collector_id===c)??null),l=Hy(e,a.length);a.forEach((c,u)=>{const d=l[u];if(Ip(e,u)!==c&&(e.inputs?.[d]?.link!=null&&e.disconnectInput?.(d),c&&tr(c)===t)){const p=Dp(c);c.connect?.(p,e,d)}});for(let c=a.length;c<=Ec;c++){const u=e.inputs?.findIndex(d=>d.name===Ap(c))??-1;u>=0&&e.inputs[u].link!=null&&e.disconnectInput?.(u)}Yy(e,a.length),kc(e),window.dispatchEvent(new CustomEvent(hi,{detail:{node:e}}))}function nR(e){e.__bvDetailerV3Scheduled||(e.__bvDetailerV3Scheduled=!0,setTimeout(()=>{e.__bvDetailerV3Scheduled=!1,qy(e)},0))}function qd(e,t){$a(e,t),nR(e);const r=Math.max(Gy(e,$y(e)).length,Array.from({length:Ec+1},(o,n)=>Ip(e,n)).filter(Boolean).length);for(const o of Hy(e,r)){const n=e.inputs?.[o];n&&(n.hidden=!0,n.label="",n.__bvM0PortHidden=!0)}Yy(e,r),kc(e)}function iR(e){const t=tr(e),r=[e],o=new Set(r),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=sl(t,l),u=c&&t?.getNodeById?.(c.target_id);!u||tr(u)!==t||o.has(u)||(o.add(u),Mp(u)==="BV Regional Detailer Plan"&&n.push(u),(u.outputs??[]).some(d=>d.type==="BV_REGIONAL")&&r.push(u))}}return n}function aR(e,t){const r=[];for(let o=0;ol.name===n)??-1;i<0&&e.addInput&&(e.addInput(n,Vr),i=e.inputs?.findIndex(l=>l.name===n)??-1);const a=e.inputs?.[i];a&&(a.type=Vr,a.hidden=!0,a.label="",a.__bvResourceSlot=!0,a.__bvM0PortHidden=!0),r.push(i)}return r}function lR(e){const t=tr(e),r=ns(Xy(e)),o=Tc(e),n=r.map(a=>o.find(l=>Ha(l).collector_id===a)??null),i=aR(e,n.length);n.forEach((a,l)=>{const c=i[l],u=e.inputs?.[c],d=sl(t,u?.link);(d&&t?.getNodeById?.(d.origin_id))!==a&&(u?.link!=null&&e.disconnectInput?.(c),a&&tr(a)===t&&a.connect?.(Dp(a),e,c))});for(let a=n.length;ac.name===Wy(a))??-1;l>=0&&e.inputs[l].link!=null&&e.disconnectInput?.(l),l>=0&&e.inputs[l].link==null&&e.removeInput?.(l)}for(const a of iR(e))qy(a);kc(e)}function Ky(e){!e||e.__bvDetailerPromptV3Scheduled||(e.__bvDetailerPromptV3Scheduled=!0,setTimeout(()=>{e.__bvDetailerPromptV3Scheduled=!1,lR(e)},0))}function Wh(e,t){$a(e,t),Ky(e)}const Jy=(e,t)=>e?.widgets?.find(r=>r.name===t),sR=()=>({version:1,jobs:[]}),$h=(e,t)=>da(Jy(e,"detailer_v3_config_json")?.value,t,Rc(e));function cR(e,t){const r=t.filter(i=>i.enabled!==!1&&(i.usage==="detailer"||i.usage==="both")),o=new Map(e.jobs.filter(i=>i.region_ids.length===1).map(i=>[i.region_ids[0],i])),n=r.map(i=>o.get(i.id)??{id:crypto.randomUUID(),region_ids:[i.id],primary_region_id:i.id,mask_composition:"union",prompt_composition:"context",conditioning:Np(),detector_assignments:[]});return{...e,jobs:n}}function Zy(e,t){const r=Jy(e,"detailer_v3_config_json");if(!r)return t;const o=fa(t);return String(r.value??"")!==o&&(r.value=o,r.callback?.(o),e.setDirtyCanvas?.(!0,!0)),Ky(e),t}function uR({node:e,config:t,regionId:r,collectors:o,onConfig:n}){const i=t.jobs.find(l=>l.region_ids.length===1&&l.region_ids[0]===r),a=i?.detector_assignments[0];return i?s.jsx(Ti,{label:"Detailer detector",emptyLabel:"No detector · use composed region mask",collectors:o,collectorId:a?.source.collector_id??"",resourceId:a?.source.resource_id??"",onSelection:(l,c)=>{const u={...t,jobs:t.jobs.map(d=>d.id!==i.id?d:{...d,detector_assignments:l&&c?[{id:a?.id??crypto.randomUUID(),source:{collector_id:l,resource_id:c},options:a?.options??Uy()}]:[]})};n(Zy(e,u))}}):null}const qo=e=>Ia(ct().rootGraph??ct().graph,e),Hh=e=>e?.widgets?.find(t=>t.name==="regional_json"),Dl=e=>e?.widgets?.find(t=>t.name==="lora_bindings_json"),Yh=(e,t)=>e&&t?e.geometry.filter(r=>Ut(r)===t):[],Ko=OE,vu=(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 Xh(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 dR(e){const t=new Map(e.map(r=>[r.id,Dt()]));return qt(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,vy(r.geometry,Dt);const o=new Map;return r.geometry.forEach(n=>{const i=Ut(n);o.has(i)||o.set(i,Dt()),n.id=Dt(),n.layer_id=o.get(i)}),r})}function fR({open:e,activationToken:t=0,nodes:r,initialNode:o,backgrounds:n,loraStacks:i,onClose:a}){const[l,c]=v.useState(o),[u,d]=v.useState(null),[f,p]=v.useState(null),[g,m]=v.useState(null),[_,k]=v.useState([]),[b,h]=v.useState(null),[x,w]=v.useState(null),[y,T]=v.useState("select"),[L,U]=v.useState({size:.04,hardness:.75,opacity:1,shape:"round",pressureMode:"constant"}),[P,j]=v.useState(.5),[M,O]=v.useState(1),[E,B]=v.useState(!1),[C,S]=v.useState([]),[N,A]=v.useState([]),[F,z]=v.useState(null),[Z,Y]=v.useState(null),[q,Q]=v.useState(""),[H,ee]=v.useState(()=>yp()),[ne,le]=v.useState(0),[Ne,Ee]=v.useState([]),[ve,Bt]=v.useState(()=>_c("")),[X,ue]=v.useState(()=>Po(o)),[se,G]=v.useState(()=>sR()),[fe,pe]=v.useState(()=>o?Hd(o):null),ge=np(),xe=v.useRef(null),Qe=v.useRef(!1),He=v.useRef(t),Be=v.useRef(null),_e=v.useCallback(R=>ee(I=>{const W=I.artboard;return W.zoom===R.zoom&&W.panX===R.panX&&W.panY===R.panY&&W.fit===R.fit?I:{...I,artboard:R}}),[]),qe=v.useCallback(R=>ee(I=>I.openMenu===R?I:{...I,openMenu:R}),[]);v.useEffect(()=>{const R=Qe.current,I=He.current!==t;if(Qe.current=e,He.current=t,!e||!I)return;const W=o??r[0]??null,$=qo(l),J=qo(W);R&&$&&J!==$&&di()==="keep"?Ee(de=>[...new Set([...de,$])].filter(Se=>Se!==J)):J&&Ee(de=>de.filter(Se=>Se!==J)),Be.current=R?{mode:H.mode,geometry:Ih(H,{width:window.innerWidth,height:window.innerHeight})}:null,c(W)},[t,o,r,e]),v.useEffect(()=>{h(null)},[l,e]),v.useEffect(()=>{if(!e||!l)return;const R=()=>ue(Po(l));return window.addEventListener(uo,R),()=>window.removeEventListener(uo,R)},[l,e]),v.useEffect(()=>{if(!e||!l||!u)return;const R=()=>G($h(l,u.regions));return window.addEventListener(hi,R),()=>window.removeEventListener(hi,R)},[l,e,u]),v.useEffect(()=>{if(!(!e||!l))try{const R=Fo(Hh(l)?.value);R.regions=Oh(R.regions),Ko(R.regions);const I=_p(Dl(l)?.value,R.document_id),W=Qn(I,new Set(R.regions.map(yr=>yr.id))),$=Dl(l);$&&JSON.stringify(I)!==JSON.stringify(W)&&($.value=JSON.stringify(W),$.callback?.($.value),l.graph?.setDirtyCanvas?.(!0,!0));const J=os(R.document_id),de=R.regions.some(yr=>yr.id===J.selectedRegionId)?J.selectedRegionId:R.regions[0]?.id??null,Se=Be.current;Be.current=null,Se&&(J.mode=Se.mode,J.windows[Se.mode]=Se.geometry);const dt=R.regions.find(yr=>yr.id===de),Yt=dt&&Ir(dt).some(yr=>yr.id===J.selectedLayerId)?J.selectedLayerId:null;ee(J),d(R),pe(Hd(l)),Bt(W),ue(Po(l)),G($h(l,R.regions)),p(de),m(Yt),k(Yt?[Yt]:[]),w(Yt),T(J.tool),U(J.brush),j(J.displayOpacity),O(J.backgroundOpacity),B(J.isolate&&!!Yt),S([]),A([]),Q("")}catch(R){Q(R instanceof Error?R.message:String(R))}},[l,e]),v.useEffect(()=>{u&&Md(u.document_id,{...H,selectedRegionId:f,selectedLayerId:g,displayOpacity:P,backgroundOpacity:M,isolate:E,tool:y,brush:L})},[M,L,P,u,E,g,f,y,H]),v.useEffect(()=>{if(!l||!u)return;const R=cR(se,u.regions);JSON.stringify(R)!==JSON.stringify(se)&&G(Zy(l,R))},[l,u?.regions,se]),v.useEffect(()=>{if(!e)return;const R=()=>ee(I=>({...I,windows:{workspace:yn(I.windows.workspace,{width:window.innerWidth,height:window.innerHeight},"workspace"),floating:yn(I.windows.floating,{width:window.innerWidth,height:window.innerHeight},"floating")}}));return window.addEventListener("resize",R),()=>window.removeEventListener("resize",R)},[e]);const me=u?.regions.find(R=>R.id===f)??null,Mt=Yh(me,g),nr=b?Mt.filter(R=>R.id===b):Mt,yt=me&&g?Ir(me).find(R=>R.id===g)??null:null,Ho=me?Ir(me).filter(R=>_.includes(R.id)):[],Yo=Ho.length>1&&Ho.every(R=>!R.authoring.locked),ir=!!yt&&!yt.authoring.locked,ut=R=>{m(R),k(R?[R]:[]),w(R),h(null)},ul=(R,I,W)=>{const $=u?.regions.find(Yt=>Yt.id===R);if(!$)return;const J=R===f,de=[...Ir($)].reverse().map(Yt=>Yt.id),dt=QE(J?{ids:_,primary:g,anchor:x}:{ids:[],primary:null,anchor:null},I,de,W);p(R),k(dt.ids),m(dt.primary),w(dt.anchor),B(!1),h(null)},Ci=F&&g&&F.every(R=>Ut(R)===g)?xe.current&&"commit"in xe.current&&xe.current.commit==="subtract"?[...nr,...F]:F:nr,Ni=Ci.length&&u?yc(Ci,u.canvas):null,go=v.useCallback((R,I=!0,W=ve)=>{if(!l)return;I&&u&&(S(Se=>[...Se.slice(-99),gu(u,ve)]),A([]));const $=Qn(W,new Set(R.regions.map(Se=>Se.id)));d(R);const J=Hh(l);J&&(J.value=JSON.stringify(R),J.callback?.(J.value)),Bt($);const de=Dl(l);de&&(de.value=JSON.stringify($),de.callback?.(de.value)),l.graph?.setDirtyCanvas?.(!0,!0)},[u,ve,l]),et=v.useCallback((R,I=!0)=>{if(!u)return;const W=qt(u);R(W),go(W,I)},[u,go]),Oc=(R,I)=>{if(!l||!u)return;const W={title:u.title,"canvas.width":String(u.canvas.width),"canvas.height":String(u.canvas.height),...fe?.raw??{},[R]:I},$=FT(u,W);pe($.draft),zT(l,$.draft),go($.canonical)},Up=v.useCallback(R=>{if(!l)return;const I=u?Qn(R,new Set(u.regions.map($=>$.id))):R;Bt(I);const W=Dl(l);W&&(W.value=JSON.stringify(I),W.callback?.(W.value)),l.graph?.setDirtyCanvas?.(!0,!0)},[u,l]),f_=R=>Up({...ve,global_stack_id:R}),p_=(R,I)=>{const W={...ve.regions};I?W[R]=I:delete W[R],Up({...ve,regions:W})},g_=R=>et(I=>{const W=I.regions.find($=>$.id===f);W&&R(W)}),Xo=(R,I)=>et(W=>{const $=W.regions.find(J=>J.id===f);$&&I(Yh($,R),$)}),xr=v.useCallback(()=>{xe.current=null,z(null)},[]),dl=v.useCallback(()=>{if(xe.current?.mode!=="draw-polygon"||!F?.length)return;const R=F.map(I=>I.type==="polygon"?{...I,points:I.points.filter((W,$,J)=>$===0||Math.hypot(W.x-J[$-1].x,W.y-J[$-1].y)>.001)}:I);if(R.some(I=>I.type!=="polygon"||I.points.length<3))return xr();et(I=>{const W=I.regions.find($=>$.id===f);W&&W.geometry.push(...R)}),xr()},[xr,F,et,f]),Mc=v.useCallback(()=>{if(!u||!C.length)return;const R=C[C.length-1];S(C.slice(0,-1)),A([gu(u,ve),...N]),go(qt(R.document),!1,qt(R.loraBindings))},[u,N,C,ve,go]),Ac=v.useCallback(()=>{if(!u||!N.length)return;const R=N[0];A(N.slice(1)),S([...C,gu(u,ve)]),go(qt(R.document),!1,qt(R.loraBindings))},[u,N,C,ve,go]),Dc=R=>{Xo(R,(I,W)=>{W.geometry=W.geometry.filter($=>Ut($)!==R)}),_.includes(R)&&ut(null)},h_=R=>et(I=>{const W=I.regions.find(J=>J.id===f),$=W?.geometry.find(J=>J.id===R);$&&($.enabled=$.enabled===!1)}),b_=R=>{const I=u?.regions.find(W=>W.id===f);if(!I||!kd(I.geometry,R)){Ct({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}et(W=>{const $=W.regions.find(J=>J.id===f);$&&($.geometry=$.geometry.filter(J=>J.id!==R))}),b===R&&h(null)},Vp=()=>{if(!f||!g||!Yo)return;const R=g;et(I=>{const W=I.regions.find($=>$.id===f);W&&eT(W,_,R)}),ut(R)},v_=async()=>{if(!(!u||!f||!g||!yt||!ir))try{const R=await cT(yt.geometries,u.canvas,Dt);if(R.length<2){Ct({title:"Layer was not split",message:"The selected layer contains fewer than two disconnected visible areas.",tone:"info",duration:4500});return}et(W=>{const $=W.regions.find(de=>de.id===f);if(!$)return;const J=$.geometry.findIndex(de=>Ut(de)===g);$.geometry=$.geometry.filter(de=>Ut(de)!==g),$.geometry.splice(Math.max(0,J),0,...R)});const I=R.map(W=>Ut(W));k(I),m(I[0]),w(I[0])}catch(R){Ct({title:"Split failed",message:String(R),tone:"danger",duration:6e3})}};v.useEffect(()=>{if(!e)return;const R=I=>{if(I.key==="Escape"&&xe.current){I.preventDefault(),I.stopImmediatePropagation(),xr();return}if(I.key==="Enter"&&xe.current?.mode==="draw-polygon"){I.preventDefault(),I.stopImmediatePropagation(),dl();return}if((I.ctrlKey||I.metaKey)&&I.key.toLowerCase()==="e"&&Yo){I.preventDefault(),I.stopImmediatePropagation(),Vp();return}if((I.key==="Delete"||I.key==="Backspace")&&g&&!(I.target instanceof HTMLInputElement||I.target instanceof HTMLTextAreaElement)){I.preventDefault(),I.stopImmediatePropagation(),Dc(g);return}!(I.ctrlKey||I.metaKey)||I.key.toLowerCase()!=="z"||(I.preventDefault(),I.stopImmediatePropagation(),I.shiftKey?Ac():Mc())};return window.addEventListener("keydown",R,!0),()=>window.removeEventListener("keydown",R,!0)},[xr,Yo,Dc,dl,e,Ac,g,_,Mc]);const m_=R=>{if(!u||!me||me.authoring.locked)return;const I=vu(R,L.pressureMode),W=R.target.closest?.("[data-handle]")?.getAttribute("data-handle");if(y==="select"){if(R.currentTarget.setPointerCapture(R.pointerId),z(null),W&&yt&&!yt.authoring.locked){xe.current={mode:"resize",start:I,original:qt(nr),handle:W};return}const ar=[...Ir(me)].reverse().find(Xt=>Xt.enabled&&Xt.authoring.visible&&Xt.geometries.filter(Or=>Or.operation==="add").some(Or=>GE(Or,I,u.canvas)));ut(ar?.id??null),ar&&!ar.authoring.locked&&(xe.current={mode:"move",start:I,startScreen:{x:R.clientX,y:R.clientY},original:qt(ar.geometries),started:!1});return}const $=y.endsWith("subtract");if($&&(!g||yt?.authoring.locked))return;if(y.startsWith("polygon")&&xe.current?.mode==="draw-polygon"){const ar=F?.find(Xt=>Xt.type==="polygon")?.points.length??0;if(CE(ar,xe.current.startScreen,{x:R.clientX,y:R.clientY})){dl();return}z(Xt=>Xt?.map(Or=>Or.type==="polygon"?{...Or,points:[...Or.points,I]}:Or)??null);return}const J=Dt(),de=$?null:SE(yt),Se=$?g:de??J,dt=y.startsWith("rect")?"Rectangle":y.startsWith("ellipse")?"Ellipse":y.startsWith("polygon")?"Polygon":"Brush",Yt=$||de?yt?.authoring:{name:`${dt} ${Ir(me).length+1}`,visible:!0,locked:!1},yr=$?[...new Set(nr.map(ol))]:[void 0];if(y.startsWith("rect")||y.startsWith("ellipse")){R.currentTarget.setPointerCapture(R.pointerId);const ar=y.startsWith("rect")?"rect":"ellipse";z(yr.map((Xt,Or)=>({id:Or?Dt():J,layer_id:Se,mask_group_id:Xt,type:ar,operation:$?"subtract":"add",enabled:!0,authoring:Yt,x:I.x,y:I.y,width:.001,height:.001}))),xe.current={mode:"draw-box",start:I,commit:$?"subtract":"add"},$||ut(Se)}else y.startsWith("polygon")?(z(yr.map((ar,Xt)=>({id:Xt?Dt():J,layer_id:Se,mask_group_id:ar,type:"polygon",operation:$?"subtract":"add",enabled:!0,authoring:Yt,points:[I]}))),xe.current={mode:"draw-polygon",start:I,startScreen:{x:R.clientX,y:R.clientY},commit:$?"subtract":"add"},$||ut(Se)):(R.currentTarget.setPointerCapture(R.pointerId),z(yr.map((ar,Xt)=>({id:Xt?Dt():J,layer_id:Se,mask_group_id:ar,type:"brush_stroke",operation:y==="brush-add"?"add":"subtract",enabled:!0,authoring:Yt,size:L.size,hardness:L.hardness,opacity:L.opacity,shape:L.shape,pressure_mode:L.pressureMode,points:[I]}))),xe.current={mode:"draw-brush",start:I,commit:y==="brush-add"?"add":"subtract"},y==="brush-add"&&ut(Se))},x_=R=>{if(!u)return;const I=vu(R,L.pressureMode);Y(I);const W=xe.current;if(W)if(W.mode==="draw-box"&&(F?.[0]?.type==="rect"||F?.[0]?.type==="ellipse"))z(F.map($=>$.type==="rect"||$.type==="ellipse"?{...$,x:Math.min(W.start.x,I.x),y:Math.min(W.start.y,I.y),width:Math.max(.001,Math.abs(I.x-W.start.x)),height:Math.max(.001,Math.abs(I.y-W.start.y))}:$));else if(W.mode==="draw-brush"&&F?.[0]?.type==="brush_stroke")z(F.map($=>$.type==="brush_stroke"?{...$,points:[...$.points,I]}:$));else if(W.mode==="move"){if(!W.started&&!LE(W.startScreen,{x:R.clientX,y:R.clientY}))return;W.started=!0,z(Ah(W.original,I.x-W.start.x,I.y-W.start.y,u.canvas))}else W.mode==="resize"&&z(qE(W.original,W.handle,I.x-W.start.x,I.y-W.start.y,R.shiftKey,u.canvas))},y_=R=>{if(!u||!xe.current||!F)return xr();const I=xe.current,W=vu(R,L.pressureMode);if(I.mode==="draw-polygon")return;let $=ME(I.mode)?F.map(J=>J.type==="brush_stroke"?{...J,points:JE([...J.points,W])}:J):F;if(I.mode==="draw-box"&&($[0].type==="rect"||$[0].type==="ellipse")&&($[0].width<=.002||$[0].height<=.002))return xr();et(J=>{const de=J.regions.find(Se=>Se.id===f);if(de)if(I.mode.startsWith("draw"))de.geometry.push(...$);else{const Se=new Map($.map(dt=>[dt.id,dt]));de.geometry=de.geometry.map(dt=>Se.get(dt.id)??dt)}}),xr()},__=R=>{xe.current?.mode==="draw-polygon"&&(R.preventDefault(),dl())},w_=(R,I)=>et(W=>{const $=W.regions.findIndex(de=>de.id===R),J=$+I;J<0||J>=W.regions.length||([W.regions[$],W.regions[J]]=[W.regions[J],W.regions[$]],Ko(W.regions))}),k_=(R,I)=>Xo(R,(W,$)=>{const J=Ir($),de=J.findIndex(dt=>dt.id===R),Se=de+I;Se<0||Se>=J.length||([J[de],J[Se]]=[J[Se],J[de]],$.geometry=J.flatMap(dt=>dt.geometries))}),E_=R=>{let I=!1,W=null;if(et(J=>{I=hT(J,R,()=>W=Dt()),Ko(J.regions)}),!I)return;if(p(R.target.regionId),R.source.kind==="region"){ut(null);return}const $=R.source.kind==="layer"?R.source.layerId:R.target.kind==="region"?W:R.target.layerId;m($),k($?[$]:[]),w($),h(R.source.kind==="geometry"?R.source.geometryId:null),B(!1)},T_=(R,I)=>Xo(R,W=>{if(W.length)if(I==="enabled"){const $=!W.some(J=>J.enabled!==!1);W.forEach(J=>{J.enabled=$})}else{const $=!dr(W[0])[I];W.forEach(J=>{J.authoring={...dr(J),[I]:$}})}}),R_=R=>Xo(R,(I,W)=>{const $=Dt(),J=Ah(qt(I),.02,.02,u.canvas);vy(J,Dt),J.forEach((de,Se)=>{de.id=Dt(),de.layer_id=$,de.authoring={...dr(de),name:`${dr(de).name} Copy`,visible:!0,locked:!1},Se&&(de.authoring=J[0].authoring)}),W.geometry.push(...J),ut($)}),S_=R=>{const I=u?.regions.find(W=>W.id===R);I&&ge.confirm({title:`Delete region “${I.name}”?`,message:`This removes ${Ir(I).length} layer(s) and clears child-region parent references.`,confirmLabel:"Delete region",danger:!0,action:()=>{et(W=>{W.regions=W.regions.filter($=>$.id!==R),W.regions.forEach($=>{$.parent_region_id===R&&($.parent_region_id=null)}),Ko(W.regions)}),p(u?.regions.find(W=>W.id!==R)?.id??null),ut(null)}})},L_=async R=>{try{if(!u)return;const I=tk(Fo(await R.text()),u.document_id);I.regions=Oh(I.regions),Ko(I.regions),go(I),p(I.regions[0]?.id??null),ut(null)}catch(I){Ct({title:"Document import failed",message:String(I),tone:"danger",duration:6e3})}},C_=async R=>{try{const I=JSON.parse(await R.text());if(I?.schema!=="bv.regions"||![1,2].includes(I?.version)||!Array.isArray(I.regions))throw new Error("Not a BV Regions v1/v2 export");const W=I.version===1?I.regions.map($=>({...$,usage:"generation"})):I.regions;et($=>{$.regions.push(...dR(W)),Ko($.regions)})}catch(I){Ct({title:"Region import failed",message:String(I),tone:"danger",duration:6e3})}},N_=Ri(l);if(!e)return null;const Wp=Ih(H,{width:window.innerWidth,height:window.innerHeight}),$p=(R,I,W=!0)=>{const $=qo(l);Tr("regional",R),R!==$&&(Ee(J=>I?J.filter(de=>de!==R):[...new Set([...J,$])].filter(de=>de&&de!==R)),W&&(Be.current={mode:H.mode,geometry:Wp}),c(r.find(J=>qo(J)===R)??null))},O_=u?dT(ve,i,new Set(u.regions.map(R=>R.id))):[],Hp=X.entries.length&&(!l||!Vh(l,X))?["V3 LoRA collector link is unresolved"]:O_,M_=X.entries.length?`${X.entries.length} V3 LoRA assignment${X.entries.length===1?"":"s"}`:u?fT(ve,i,Object.fromEntries(u.regions.map(R=>[R.id,R.name]))):"",A_=l?al(l).filter(R=>R.resources.length>0):[];l&&Vh(l,X);const Yp={collectors:A_,config:X,resolved:R=>!!l&&By(l,X,R),onSelection:(R,I,W)=>l&&ue(zy(l,X,R,I,W)),onAdd:R=>l&&ue($T(l,X,R)),onRemove:(R,I)=>l&&ue(HT(l,X,R,I)),onClear:R=>l&&ue(YT(l,X,R))},Ic=R=>fe?.issues.find(I=>I.field===R)?.message,D_=u?s.jsxs("div",{className:"bv-ui-stack","data-bv-regional-section":"document",children:[s.jsx("div",{"data-bv-regional-field":"title",children:s.jsx(Hr,{label:"Title",value:String(fe?.raw.title??u.title),error:Ic("title"),onValue:R=>Oc("title",R)})}),s.jsx("div",{"data-bv-regional-field":"canvas.width",children:s.jsx(Hr,{label:"Canvas width",value:String(fe?.raw["canvas.width"]??u.canvas.width),error:Ic("canvas.width"),onValue:R=>Oc("canvas.width",R)})}),s.jsx("div",{"data-bv-regional-field":"canvas.height",children:s.jsx(Hr,{label:"Canvas height",value:String(fe?.raw["canvas.height"]??u.canvas.height),error:Ic("canvas.height"),onValue:R=>Oc("canvas.height",R)})})]}):null,jc=R=>u?s.jsx(YE,{mode:R,region:me,layer:yt,bounds:Ni,canvas:u.canvas,automaticRegionColor:me?$m(u.regions.indexOf(me)):null,globalPrompts:u.prompts.global,backgroundPrompts:u.prompts.background,negativeMode:u.negative_mode,promptSections:H.promptSections,loraBindings:ve,loraStacks:i,loraV3GlobalEditor:s.jsx(jh,{...Yp,target:{scope:"global"}}),loraV3RegionEditor:me?s.jsx(jh,{...Yp,target:{scope:"region",document_id:u.document_id,region_id:me.id}},me.id):null,detailerEasyRegionEditor:me&&(me.usage==="detailer"||me.usage==="both")?s.jsx(uR,{node:l,config:se,regionId:me.id,collectors:l?Rc(l):[],onConfig:G}):null,onGlobalLoraStack:f_,onRegionLoraStack:p_,onPromptSection:(I,W)=>ee($=>({...$,promptSections:{...$.promptSections,[I]:W}})),onNegativeMode:I=>et(W=>{W.negative_mode=I}),onGlobalPrompts:I=>et(W=>{W.prompts.global=I}),onBackgroundPrompts:I=>et(W=>{W.prompts.background=I}),onRegion:g_,onLayerBounds:I=>g&&Xo(g,(W,$)=>{const J=new Map(by(W,I,u.canvas).map(de=>[de.id,de]));$.geometry=$.geometry.map(de=>J.get(de.id)??de)}),onBrushSetting:(I,W)=>g&&Xo(g,$=>$.forEach(J=>{J.type==="brush_stroke"&&Object.assign(J,{[I]:W})}))}):null;return s.jsxs(s.Fragment,{children:[Ne.map(R=>{const I=r.find(W=>qo(W)===R);return I?s.jsx(xc,{title:`Regional Editor · ${I.title||"BV Regional Prompt"} · #${I.id}`,onRestore:()=>$p(R,!1,!1),onClose:()=>Ee(W=>W.filter($=>$!==R))},R):null}),s.jsx(Rn,{open:e,activationToken:t,title:"BV Regional Editor",menuVisible:N_,onMenuVisible:R=>Tn(l,R),context:s.jsx(il,{label:"Regional prompt document",value:qo(l),onNavigate:$p,options:r.filter(R=>En(R)).map(R=>({value:qo(R),label:`${R.title||"BV Regional Prompt"} · #${R.id}`}))}),center:s.jsx(VE,{openMenu:H.openMenu,onOpenMenu:qe,displayOpacity:P,backgroundOpacity:M,isolate:E,binaryMaskPreview:H.binaryMaskPreview,hasSelection:!!g,onDisplayOpacity:j,onBackgroundOpacity:O,onToggleIsolate:()=>B(R=>!R),onToggleBinaryMaskPreview:()=>{xr(),ee(R=>({...R,binaryMaskPreview:!R.binaryMaskPreview}))},onExportDocument:()=>u&&Xh(`${u.title||"bv-regional"}.json`,u),onExportRegions:()=>u&&Xh(`${u.title||"bv-regions"}.regions.json`,{schema:"bv.regions",version:2,canvas:u.canvas,regions:u.regions}),onImportDocument:L_,onImportRegions:C_,onUndo:Mc,onRedo:Ac,canUndo:!!C.length,canRedo:!!N.length,canvas:u?.canvas??{width:1024,height:1024},onCanvas:R=>et(I=>{I.canvas=R})}),mode:H.mode,initialGeometry:Wp,minSize:{width:780,height:520},className:"bv-regional-shell",bodyClassName:"bv-regional-window-body",onModeChange:R=>ee(I=>({...I,mode:R})),onGeometry:R=>ee(I=>({...I,windows:{...I.windows,floating:R}})),onClose:a,status:u?s.jsxs(s.Fragment,{children:[s.jsx("span",{children:Hp[0]?`⚠ ${Hp[0]}`:`✓ ${M_}`}),s.jsxs("span",{children:[u.regions.length," regions · layout adjusted for this session"]})]}):null,actions:u?s.jsx($x,{storageId:`regional-editor:${u.document_id}`,editorType:"regional",signature:"regional:v2:bv.regional.regions,bv.regional.selection,bv.regional.canvas,bv.regional.global,bv.regional.region,bv.regional.document",onClick:()=>le(R=>R+1)}):null,children:q?s.jsx("div",{className:"bv-regional-error",children:q}):u&&s.jsx(s.Fragment,{children:s.jsx("main",{className:"bv-regional-dock-host",children:s.jsx(Fx,{storageId:`regional-editor:${u.document_id}`,resetSignal:ne,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:"bv.regional.regions",name:"Regions",component:"regions",enablePopoutFloatIcon:!0}]},{type:"tabset",weight:45,children:[{type:"tab",id:"bv.regional.selection",name:"Selection",component:"selection",enablePopoutFloatIcon:!0}]}]},{type:"tabset",weight:54,minWidth:320,children:[{type:"tab",id:"bv.regional.canvas",name:"Canvas",component:"canvas",enablePopoutFloatIcon:!0}]},{type:"row",weight:24,minWidth:260,children:[{type:"tabset",weight:75,selected:0,children:[{type:"tab",id:"bv.regional.global",name:"Global",component:"global",enablePopoutFloatIcon:!0},{type:"tab",id:"bv.regional.document",name:"Document",component:"document",enablePopoutFloatIcon:!0}]},{type:"tabset",weight:25,children:[{type:"tab",id:"bv.regional.region",name:"Region",component:"region",enablePopoutFloatIcon:!0}]}]}]}},panels:[{id:"regions",layoutId:"bv.regional.regions",title:"Regions",weight:22,minWidth:220,content:s.jsx(ok,{regions:u.regions,selectedRegionId:f,selectedLayerId:g,selectedLayerIds:_,selectedGeometryId:b,onSelectRegion:R=>{p(R),ut(null),B(!1)},onSelectLayer:ul,onSelectGeometry:(R,I,W)=>{p(R),m(I),k([I]),w(I),h(W),B(!1)},onToggleGeometry:h_,onDeleteGeometry:b_,onAddRegion:()=>et(R=>{const I=ek(R.regions.length);R.regions.unshift(I),Ko(R.regions),p(I.id),ut(null)}),onRenameRegion:(R,I)=>et(W=>{W.regions.find($=>$.id===R).name=I}),onRenameLayer:(R,I)=>Xo(R,W=>W.forEach($=>{$.authoring={...dr($),name:I}})),onToggleRegion:(R,I)=>et(W=>{const $=W.regions.find(J=>J.id===R);I==="enabled"?$.enabled=!$.enabled:I==="visible"?$.authoring.visible=!$.authoring.visible:$.authoring.locked=!$.authoring.locked}),onToggleLayer:T_,onMoveRegion:w_,onMoveLayer:k_,onTreeMove:E_,onDeleteRegion:S_,onDeleteLayer:Dc,onDuplicateLayer:R_,canSplitDisconnectedAreas:ir,onSplitDisconnectedAreas:v_,canMergeLayers:Yo,onMergeLayers:Vp})},{id:"canvas",layoutId:"bv.regional.canvas",title:"Canvas",weight:54,minWidth:320,content:s.jsx(PE,{document:u,background:n[u.document_id],selectedRegionId:f,selectedLayerId:g,draft:F,selectionBounds:Ni,cursor:Z,tool:y,brush:L,canSubtract:!!yt&&!yt.authoring.locked,displayOpacity:P,backgroundOpacity:M,isolate:E,binaryMaskPreview:H.binaryMaskPreview,initialView:H.artboard,onView:_e,onTool:R=>{T(R),xr()},onBrush:U,onPointerDown:m_,onPointerMove:x_,onPointerUp:y_,onPointerCancel:xr,onPointerLeave:()=>{xe.current||Y(null)},onDoubleClick:__},u.document_id)},{id:"global",layoutId:"bv.regional.global",title:"Global",weight:12,minWidth:240,content:jc("document")},{id:"selection",layoutId:"bv.regional.selection",title:"Selection",weight:12,minWidth:240,content:jc("selection")},{id:"region",layoutId:"bv.regional.region",title:"Region",weight:12,minWidth:240,content:jc("region")},{id:"document",layoutId:"bv.regional.document",title:"Document",weight:12,minWidth:240,content:D_}]})})})}),ge.dialog]})}const Jo=e=>Ia(ct().rootGraph??ct().graph,e),Gh=e=>e?.widgets?.find(t=>t.name==="regional_json"),mu=e=>e?.widgets?.find(t=>t.name==="lora_bindings_json"),pR=(e,t)=>t==="global"||t==="background"||e.regions.some(r=>r.id===t),gR=(e,t)=>t==="global"?e.prompts.global:t==="background"?e.prompts.background:e.regions.find(r=>r.id===t)?.prompts??e.prompts.global;function hR({open:e,activationToken:t=0,nodes:r,initialNode:o,loraStacks:n,onClose:i,onOpenEditor:a}){const[l,c]=v.useState(o),[u,d]=v.useState(null),[f,p]=v.useState(()=>_c("")),[g,m]=v.useState("global"),[_,k]=v.useState(()=>Us({x:window.innerWidth-544,y:84,width:520,height:640},{width:window.innerWidth,height:window.innerHeight})),[b,h]=v.useState(""),[x,w]=v.useState([]),y=v.useRef(null),T=v.useRef(!1),L=v.useRef(t);v.useEffect(()=>{const S=T.current,N=L.current!==t;if(T.current=e,L.current=t,!e||!N)return;const A=o??r[0]??null,F=Jo(l),z=Jo(A);S&&F&&z!==F&&di()==="keep"?w(Z=>[...new Set([...Z,F])].filter(Y=>Y!==z)):z&&w(Z=>Z.filter(Y=>Y!==z)),y.current=S?_:null,c(A)},[t,o,r,e]),v.useEffect(()=>{if(l)try{const S=Fo(Gh(l)?.value),N=_p(mu(l)?.value,S.document_id),A=Qn(N,new Set(S.regions.map(Y=>Y.id))),F=mu(l);F&&JSON.stringify(N)!==JSON.stringify(A)&&(F.value=JSON.stringify(A),F.callback?.(F.value),l.graph?.setDirtyCanvas?.(!0,!0));const z=os(S.document_id),Z=pR(S,z.quickPromptTarget)?z.quickPromptTarget:"global";d(S),p(A),m(Z),k(y.current??z.quickPromptWindow),y.current=null,h("")}catch(S){d(null),h(S instanceof Error?S.message:String(S))}},[l,e]);const U=v.useMemo(()=>u?gR(u,g):null,[u,g]),P=S=>{if(m(S),!u)return;const N=os(u.document_id);Md(u.document_id,{...N,quickPromptTarget:S})},j=S=>{if(!u)return;const N=os(u.document_id);Md(u.document_id,{...N,quickPromptWindow:S})},M=S=>{if(!u||!l)return;const N=qt(u);if(g==="global")N.prompts.global=S;else if(g==="background")N.prompts.background=S;else{const F=N.regions.find(z=>z.id===g);if(!F)return;F.prompts=S}d(N);const A=Gh(l);A&&(A.value=JSON.stringify(N),A.callback?.(A.value)),l.graph?.setDirtyCanvas?.(!0,!0)},O=S=>{if(!u||!l)return;let N;if(g==="global"||g==="background")N={...f,global_stack_id:S};else{const F={...f.regions};S?F[g]=S:delete F[g],N={...f,regions:F}}p(N);const A=mu(l);A&&(A.value=JSON.stringify(N),A.callback?.(A.value)),l.graph?.setDirtyCanvas?.(!0,!0)},E=g==="global"||g==="background"?f.global_stack_id??"":f.regions[g]??"",B=(S,N,A=!0)=>{const F=Jo(l);Tr("quick",S),S!==F&&(w(z=>N?z.filter(Z=>Z!==S):[...new Set([...z,F])].filter(Z=>Z&&Z!==S)),y.current=A?_:null,c(r.find(z=>Jo(z)===S)??null))},C=Ri(l);return s.jsxs(s.Fragment,{children:[x.map(S=>{const N=r.find(A=>Jo(A)===S);return N?s.jsx(xc,{title:`Quick Edit · ${N.title||"BV Regional Prompt"} · #${N.id}`,onRestore:()=>B(S,!1,!1),onClose:()=>w(A=>A.filter(F=>F!==S))},S):null}),s.jsx(Rn,{open:e,activationToken:t,title:"Regional Quick Edit",menuVisible:C,onMenuVisible:S=>Tn(l,S),context:s.jsx(il,{label:"Regional Prompt Node",value:Jo(l),options:r.filter(S=>En(S)).map(S=>({value:Jo(S),label:`${S.title||"BV Regional Prompt"} · #${S.id}`})),onNavigate:B}),allowWorkspace:!1,initialGeometry:_,minSize:{width:360,height:320},className:"bv-quick-prompt-window bv-density-compact",onClose:i,onGeometry:S=>{const N=Us(S,{width:window.innerWidth,height:window.innerHeight});k(N),j(N)},status:s.jsx(Om,{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(Cr,{tone:"danger",title:"Prompt document unavailable",children:b}):u&&U&&s.jsxs(s.Fragment,{children:[s.jsx(at,{label:"Prompt Target",value:g,onValue:P,options:[{value:"global",label:"Global"},{value:"background",label:"Background"},...u.regions.map(S=>({value:S.id,label:S.name}))]}),s.jsx(at,{label:g==="global"||g==="background"?"Global LoRA Stack":"Additional LoRA Stack",help:g==="global"||g==="background"?"Applied globally and inherited by every region.":"Added to the global stack for this region.",value:E,onValue:S=>O(S||null),options:[{value:"",label:"None"},...n.map(S=>({value:S.id,label:S.name}))]}),s.jsxs("div",{className:"bv-prompt-editor-fields",children:[s.jsx(Nr,{label:"Positive",children:s.jsx(Fs,{autoFocus:!0,value:U.positive_source,onValue:S=>M({...U,positive_source:S}),completionContext:{scope:g==="global"||g==="background"?g:"region",polarity:"positive"}})}),s.jsx(Nr,{label:"Negative",children:s.jsx(Fs,{value:U.negative_source,onValue:S=>M({...U,negative_source:S}),completionContext:{scope:g==="global"||g==="background"?g:"region",polarity:"negative"}})})]})]})})})]})}function Qy(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 bR(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 vR(e,t,r){const o=typeof e=="string"?e:"";return t.some(n=>n.documentId===o)?o:r?t[0]?.documentId??"":""}function mR(e,t,r){sy(r);const o=document.createElement("div");o.className="bv-ui bv-settings-datasets";const n=wi(o),i=cy;return n.render(v.createElement(i,{onSelectionChange:a=>t(JSON.stringify(a))})),o}const To=new Map;let Ui=null;function xR(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 qh(e){if(To.has(e)||!xR(e))return;let t=[],r=0,o=null,n=null,i=null,a=null,l=null,c=210;const u=()=>{n?.abort(),n=null,t=[],o=null,l?.unmount(),l=null,a?.remove(),a=null},d=()=>{if(!a)return;const h=zs(e,Od(),c);f(h)},f=(h=zs(e,Od(),c))=>{a||(a=document.createElement("div"),a.className="bv-ui bv-ui-portal",document.body.append(a),l=wi(a)),l.render(v.createElement(gy,{suggestions:t,selected:r,position:h,onAccept:g,onHeight:x=>{Math.abs(x-c)<1||(c=x,d())}}))},p=()=>f(),g=(h=r)=>{const x=t[h];if(!o||!x)return;const w=dy(e.value,o,x);e.value=w.text,e.dispatchEvent(new InputEvent("input",{bubbles:!0,inputType:"insertText",data:x.insertText})),e.dispatchEvent(new Event("change",{bubbles:!0})),u(),requestAnimationFrame(()=>{e.focus(),e.setSelectionRange(w.caret,w.caret)})},m=()=>{if(!xp()||e.selectionStart!==e.selectionEnd||(i!=null&&window.clearTimeout(i),n?.abort(),o=uy(e.value,e.selectionStart??e.value.length,{scope:"generic",polarity:"positive"}),!o))return u();const h=o;n=new AbortController;const x=n;i=window.setTimeout(async()=>{const w=await fy(h,[py],x.signal);x.signal.aborted||document.activeElement!==e||(t=w,r=0,w.length?p():u())},120)},_=h=>{t.length&&(h.key==="ArrowDown"||h.key==="ArrowUp"?(h.preventDefault(),h.stopPropagation(),h.stopImmediatePropagation(),r=(r+(h.key==="ArrowDown"?1:-1)+t.length)%t.length,p()):h.key==="Enter"||h.key==="Tab"?(h.preventDefault(),h.stopPropagation(),h.stopImmediatePropagation(),g()):h.key==="Escape"&&(h.preventDefault(),h.stopPropagation(),h.stopImmediatePropagation(),u()))},k=()=>window.setTimeout(()=>{a?.contains(document.activeElement)||u()},120),b=()=>{document.activeElement===e&&m()};e.addEventListener("input",m),e.addEventListener("select",m),document.addEventListener("selectionchange",b),e.addEventListener("keydown",_,!0),e.addEventListener("blur",k),window.addEventListener("resize",d),window.addEventListener("scroll",d,!0),To.set(e,{close:u,destroy:()=>{u(),e.removeEventListener("input",m),e.removeEventListener("select",m),document.removeEventListener("selectionchange",b),e.removeEventListener("keydown",_,!0),e.removeEventListener("blur",k),window.removeEventListener("resize",d),window.removeEventListener("scroll",d,!0)}})}function Kh(e){e instanceof HTMLTextAreaElement&&qh(e),e.querySelectorAll?.("textarea").forEach(t=>qh(t))}function yR(e){(e instanceof HTMLTextAreaElement?[e]:[...e.querySelectorAll?.("textarea")??[]]).forEach(r=>{To.get(r)?.destroy(),To.delete(r)})}function _R(){if(Ui)return Ui;Kh(document);const e=new MutationObserver(o=>o.forEach(n=>{n.addedNodes.forEach(i=>{i instanceof Element&&Kh(i)}),n.removedNodes.forEach(i=>{i instanceof Element&&yR(i)})}));e.observe(document.body,{childList:!0,subtree:!0});const t=()=>{xp()||To.forEach(o=>o.close())},r=()=>To.forEach(o=>o.close());return window.addEventListener(Fa,t),window.addEventListener(Ua,r),Ui=()=>{e.disconnect(),window.removeEventListener(Fa,t),window.removeEventListener(Ua,r),To.forEach(o=>o.destroy()),To.clear(),Ui=null},Ui}function ha(e){const t=e?.extensionManager?.workflow?.activeWorkflow??e?.workflowManager?.activeWorkflow??null;if(t&&typeof t=="object"){for(const r of["key","id","workflowId","workflow_id","uuid","path"]){const o=t[r];if(o!=null&&String(o))return`${r}:${String(o)}`}return t}return e?.canvas?.graph??e?.graph??t}function wR(e,t,r,o=(a,l)=>globalThis.setInterval(a,l),n=a=>globalThis.clearInterval(a),i=ha(e)){let a=!1;const l=()=>{a||ha(e)===i||(a=!0,r())};t.addEventListener("graphChanged",l);const c=o(l,250);return()=>{t.removeEventListener("graphChanged",l),n(c)}}const e_=["region","global_influence","background_influence","primary_region_influence","context_regions_json"],kR=e=>e_.map(t=>e?.find(r=>r.name===t)?.value),ER=e=>Array.isArray(e)&&e.length===e_.length+1&&e[3]==null&&typeof e[4]=="number"&&typeof e[5]=="string"?[...e.slice(0,3),...e.slice(4)]:e,TR=new Set(["BV Regional LoRA"]),RR=e=>String(e?.comfyClass??e?.type??""),SR=(e,t)=>t==null?null:e?.links?.[t]??e?._links?.get?.(t);function LR(e,t=null){let r=e,o=e?.__bvConcreteGraph??e?.graph??t;const n=new Set;for(;r&&!n.has(r);){n.add(r),o=r.__bvConcreteGraph??r.graph??o;const i=r.inputs?.find(u=>u.name==="regional"||u.name==="regional_prompt"),a=SR(o,i?.link),l=a?o?.getNodeById?.(a.origin_id):null,c=RR(l);if(c==="BV Regional Prompt"){const u=l.widgets?.find(d=>d.name==="regional_json")?.value;try{return Fo(u)}catch{return null}}if(!TR.has(c))return null;r=l}return null}const CR=e=>structuredClone(e);function NR({regions:e,collectors:t=[],stored:r,save:o,close:n,nodeId:i="",nodes:a=[],onNavigate:l=()=>{},currentNode:c}){const[u,d]=v.useState(t);v.useEffect(()=>{const E=()=>d(Rc(c));return window.addEventListener(hi,E),()=>window.removeEventListener(hi,E)},[c]),t=u;const f=Op(e),p=v.useMemo(()=>da(r,e,t),[e,r,t]),g=gc(p),m=g.value,[_,k]=v.useState(()=>fa(p));hc(g);const b=fa(m)!==_,[h,x]=v.useState(null),w=()=>{const E=fa(m);o(E),k(E),g.clear()},y=E=>b?x(()=>E):E(),T=()=>y(n),L=Ri(c),[U,P]=v.useState([]),j=E=>g.commit(B=>{const C=CR(B);return E(C),C}),M=()=>j(E=>{const B=f[0];B&&E.jobs.push({id:crypto.randomUUID(),region_ids:[B.id],primary_region_id:B.id,mask_composition:"union",prompt_composition:"context",conditioning:Np(),detector_assignments:[]})}),O=m.jobs.map((E,B)=>({id:E.id,title:`Job ${B+1}`,description:E.region_ids.map(C=>f.find(S=>S.id===C)?.name??C).join(" + ")||"No region",summary:s.jsxs("div",{className:"bv-editor-item-compact-summary",children:[s.jsxs("span",{children:[E.region_ids.length," region",E.region_ids.length===1?"":"s"]}),s.jsx("span",{children:E.detector_assignments[0]?.source.resource_id||"Composed mask"}),s.jsx("span",{children:E.region_ids.length?"Ready":"Needs region"})]}),content:s.jsxs("div",{className:"bv-editor-item-details",children:[s.jsxs("div",{className:"bv-editor-item-summary",children:[s.jsx(K1,{label:"Regions",value:E.region_ids,minSelected:1,options:f.map(C=>({value:C.id,label:C.name})),onValue:C=>j(S=>{const N=S.jobs[B];N.region_ids=C,C.includes(N.primary_region_id)||(N.primary_region_id=C[0]??"")})}),s.jsx(Ti,{label:"Detector",emptyLabel:"No detector · use composed region mask",collectors:t,collectorId:E.detector_assignments[0]?.source.collector_id??"",resourceId:E.detector_assignments[0]?.source.resource_id??"",onSelection:(C,S)=>j(N=>{N.jobs[B].detector_assignments=C&&S?[{id:N.jobs[B].detector_assignments[0]?.id??crypto.randomUUID(),source:{collector_id:C,resource_id:S},options:N.jobs[B].detector_assignments[0]?.options??Uy()}]:[]})}),s.jsx(Yn,{children:E.region_ids.length>1&&s.jsx(at,{label:"Primary region",value:E.primary_region_id,options:E.region_ids.map(C=>({value:C,label:f.find(S=>S.id===C)?.name??C})),onValue:C=>j(S=>{S.jobs[B].primary_region_id=C})})})]}),s.jsx(Os,{value:U,onValue:P,items:[{id:`composition-${B}`,title:"Mask and prompt composition",content:s.jsxs(Yn,{children:[s.jsx(at,{label:"Mask composition",value:E.mask_composition,options:[{value:"union",label:"Union"},{value:"intersection",label:"Intersection"},{value:"subtract",label:"Subtract in listed order"}],onValue:C=>j(S=>{S.jobs[B].mask_composition=C})}),s.jsx(at,{label:"Prompt composition",value:E.prompt_composition,options:[{value:"context",label:"Primary and context regions"},{value:"primary",label:"Primary region only"}],onValue:C=>j(S=>{S.jobs[B].prompt_composition=C})})]})},{id:`conditioning-${B}`,title:"Conditioning strengths",content:s.jsx(Yn,{minimum:150,children:[["Global influence","global_influence"],["Background influence","background_influence"],["Primary region influence","primary_region_influence"],["Context region influence","context_region_influence"]].map(([C,S])=>s.jsx(Ur,{label:C,value:E.conditioning[S],min:0,max:2,step:.05,onValue:N=>j(A=>{A.jobs[B].conditioning[S]=N})},S))})},{id:`detection-${B}`,title:"Detector and ROI settings",content:E.detector_assignments[0]?s.jsxs(Yn,{minimum:150,children:[Object.entries(E.detector_assignments[0].options).slice(0,5).map(([C,S])=>s.jsx(Ur,{label:C.replaceAll("_"," "),value:Number(S),min:C==="dilation"?-512:C==="crop_factor"||C==="drop_size"?1:0,max:C==="threshold"?1:C==="crop_factor"?20:C==="drop_size"?8192:C==="dilation"?512:2,step:["dilation","drop_size"].includes(C)?1:.01,onValue:N=>j(A=>{A.jobs[B].detector_assignments[0].options[C]=N})},C)),s.jsx(Hr,{label:"Detector query",value:E.detector_assignments[0].options.query??"",onValue:C=>j(S=>{S.jobs[B].detector_assignments[0].options.query=C.trim()||void 0})}),s.jsx(Hr,{label:"Accepted labels",value:(E.detector_assignments[0].options.labels??[]).join(", "),onValue:C=>j(S=>{S.jobs[B].detector_assignments[0].options.labels=C.split(",").map(N=>N.trim()).filter(Boolean)})})]}):s.jsx(Cr,{tone:"info",title:"Composed mask",children:"This job has no detector assignment."})}]})]})}));return s.jsxs(s.Fragment,{children:[s.jsx(Rn,{open:!0,title:"Regional Detailer Plan",shortTitle:"Detailer Plan",menuVisible:L,onMenuVisible:E=>Tn(c,E),context:s.jsx(il,{label:"Detailer Plan Node",value:i,options:a.map(E=>({value:E.id,label:E.label})),onNavigate:(E,B)=>B?y(()=>l(E,!0)):l(E,!1)}),initialGeometry:{width:1040,height:720},minSize:{width:420,height:360},onClose:T,status:b?"Unsaved plan changes":"Plan saved",actions:s.jsx(bp,{primary:s.jsx(ie,{intent:"primary",disabled:m.jobs.some(E=>!E.region_ids.length),onClick:w,children:"Save plan"}),secondary:s.jsxs(s.Fragment,{children:[s.jsx(ie,{onClick:M,disabled:!f.length,children:"Add job"}),s.jsx(js,{label:"Detailer Plan",value:{schema:"bv.editor-draft",version:1,type:"detailer-plan",data:m},onImport:E=>{if(E?.schema!=="bv.editor-draft"||E?.version!==1||E?.type!=="detailer-plan"||!E?.data)throw new Error("Draft type or version does not match this editor.");g.replace(da(E.data,e,t))}})]}),overflow:[{id:"undo",label:"Undo",disabled:!g.canUndo,onSelect:g.undo},{id:"redo",label:"Redo",disabled:!g.canRedo,onSelect:g.redo},{id:"discard",label:"Discard changes",disabled:!b,onSelect:()=>g.replace(da(_,e,t),!0)},{id:"restore",label:"Restore defaults",onSelect:()=>g.commit(Gd(e))}]}),children:s.jsxs(tp,{density:"compact",className:"bv-editor-dialog",children:[!t.length&&m.jobs.length>0&&s.jsx(Cr,{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."}),f.length?s.jsx(tl,{items:O,onReorder:E=>j(B=>{const C=new Map(B.jobs.map(S=>[S.id,S]));B.jobs=E.map(S=>C.get(S.id)).filter(Boolean)}),onRemove:E=>j(B=>{B.jobs=B.jobs.filter(C=>C.id!==E)})}):s.jsx(pc,{title:"No eligible regions",description:"Enable a region with Detailer or Both usage first."})]})}),s.jsx(op,{open:!!h,editorName:"Detailer Plan",onKeep:()=>x(null),onDiscard:()=>{const E=h;x(null),E?.()},onSave:()=>{w();const E=h;x(null),E?.()}})]})}const OR=(e,t,r,o,n,i,a,l)=>{sp((c,u)=>v.createElement(NR,{regions:e,collectors:t,stored:r,save:o,close:c,activationToken:u,nodeId:n.split(":").slice(1).join(":"),nodes:i,onNavigate:a,currentNode:l}),{key:n})};function MR({catalog:e,stored:t,save:r,close:o,nodeId:n="",nodes:i=[],onNavigate:a=()=>{},currentNode:l}){const c=v.useMemo(()=>pa(t),[t]),u=v.useMemo(()=>new Set(c.detectors.map(S=>S.id)),[c]),d=gc(c),f=d.value,[p,g]=v.useState(()=>ga(c));hc(d);const m=ga(f)!==p,_=np(),[k,b]=v.useState(null),h=()=>{const S=ga(f);r(S),g(S),d.clear()},x=S=>m?b(()=>S):S(),w=()=>x(o),y=Ri(l),T=v.useMemo(()=>S=>s.jsx(Rn,{...S,title:S.title,shortTitle:"Registry",menuVisible:y,onMenuVisible:N=>Tn(l,N),onClose:w,context:s.jsx(il,{label:"Detector Registry Node",value:n,options:i.map(N=>({value:N.id,label:N.label})),onNavigate:(N,A)=>A?x(()=>a(N,!0)):a(N,!1)})}),[l,m,y,n,i,a]),[L,U]=v.useState([]),P=S=>d.commit(N=>{const A=structuredClone(N);return S(A),A}),j=()=>{let S=f.detectors.length+1,N=`detector-${S}`;for(;f.detectors.some(A=>A.id===N);)N=`detector-${++S}`;return N},M=f.detectors.map(S=>S.id.trim()),O=M.find((S,N)=>S&&M.indexOf(S)!==N),E=f.detectors.some(S=>!S.id.trim()||!S.model_name),B=()=>P(S=>{const N=e.ultralytics.length?"ultralytics":"onnx";S.detectors.push({id:j(),provider:N,model_name:e[N][0]??""})}),C=()=>{f.detectors.length?_.confirm({title:"Clear Detector Registry?",message:"Existing Detailer jobs will keep missing references until reassigned.",confirmLabel:"Clear registry",danger:!0,action:()=>d.commit($s())}):d.commit($s())};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:m?"Unsaved registry changes":"Registry saved",actions:s.jsx(bp,{primary:s.jsx(ie,{intent:"primary",disabled:!!(O||E),onClick:h,children:"Save registry"}),secondary:s.jsxs(s.Fragment,{children:[s.jsx(ie,{onClick:B,children:"Add detector"}),s.jsx(js,{label:"Detector Registry",value:{schema:"bv.editor-draft",version:1,type:"detector-registry",data:f},onImport:S=>{if(S?.schema!=="bv.editor-draft"||S?.version!==1||S?.type!=="detector-registry"||!S?.data)throw new Error("Draft type or version does not match this editor.");d.replace(pa(S.data))}})]}),overflow:[{id:"undo",label:"Undo",disabled:!d.canUndo,onSelect:d.undo},{id:"redo",label:"Redo",disabled:!d.canRedo,onSelect:d.redo},{id:"discard",label:"Discard changes",disabled:!m,onSelect:()=>d.replace(pa(p),!0)},{id:"clear",label:"Clear registry…",onSelect:C}]}),children:s.jsxs(tp,{density:"compact",className:"bv-editor-dialog",children:[O||E?s.jsx(Cr,{tone:"danger",title:"Registry needs attention",children:O?`Detector ID “${O}” is used more than once.`:"Every detector needs a unique ID and a detection model."}):s.jsxs(Cr,{tone:"success",title:"Registry valid",children:[f.detectors.length," detector",f.detectors.length===1?"":"s"," ready to save."]}),s.jsxs("div",{className:"bv-card-list",children:[!f.detectors.length&&s.jsx(pc,{title:"No detectors configured",description:"Add a detector to make it selectable in Regional Detailer jobs."}),s.jsx(Os,{value:L,onValue:U,items:f.detectors.map((S,N)=>({id:`detector-${N}`,title:s.jsxs("span",{className:"bv-detector-summary",children:[s.jsx("strong",{children:S.id||"New detector"}),s.jsx("span",{children:S.provider==="onnx"?"ONNX":"Ultralytics"}),s.jsx("span",{children:S.model_name||"No model selected"}),s.jsx("span",{children:S.id.trim()&&S.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:()=>P(A=>{A.detectors.splice(N+1,0,{...A.detectors[N],id:j()})}),children:"Duplicate"}),s.jsx(ie,{intent:"ghost",className:"bv-subtle-danger",onClick:()=>{const A=()=>P(F=>{F.detectors.splice(N,1)});u.has(S.id)?_.confirm({title:`Remove detector “${S.id}”?`,message:"Existing Detailer jobs will show it as missing until reassigned.",confirmLabel:"Remove detector",danger:!0,action:A}):A()},children:"Remove"})]}),s.jsxs(Yn,{children:[s.jsx(Hr,{label:"Detector ID",value:S.id,readOnly:u.has(S.id),help:u.has(S.id)?"Stable job reference. Create a new detector instead of renaming it.":"Choose once; the ID becomes immutable after saving.",onValue:A=>P(F=>{F.detectors[N].id=A.trim()})}),s.jsx(at,{label:"Provider",value:S.provider,options:[{value:"ultralytics",label:"Ultralytics"},{value:"onnx",label:"ONNX"}],onValue:A=>P(F=>{const z=F.detectors[N];z.provider=A,z.model_name=e[z.provider][0]??""})}),s.jsx(at,{label:"Detection model",value:S.model_name,options:e[S.provider].map(A=>({value:A,label:A})),onValue:A=>P(F=>{F.detectors[N].model_name=A})})]}),s.jsx(Os,{value:L,onValue:U,items:[{id:`sam-${N}`,title:S.sam_model_name?"SAM refinement enabled":"Optional SAM refinement",content:s.jsxs(Yn,{children:[s.jsx(at,{label:"SAM model",value:S.sam_model_name??"",options:[{value:"",label:"No SAM refinement"},...e.sam.map(A=>({value:A,label:A}))],onValue:A=>P(F=>{const z=F.detectors[N];z.sam_model_name=A||void 0,A||delete z.sam_device_mode})}),S.sam_model_name&&s.jsx(at,{label:"Execution device",value:S.sam_device_mode??"AUTO",options:["AUTO","Prefer GPU","CPU"].map(A=>({value:A,label:A})),onValue:A=>P(F=>{F.detectors[N].sam_device_mode=A})})]})}]})]})}))})]})]})}),_.dialog,s.jsx(op,{open:!!k,editorName:"Detector Registry",onKeep:()=>b(null),onDiscard:()=>{const S=k;b(null),S?.()},onSave:()=>{h();const S=k;b(null),S?.()}})]})}const AR=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();sp((u,d)=>v.createElement(MR,{catalog:c,stored:t,save:r,close:u,activationToken:d,nodeId:o.split(":").slice(1).join(":"),nodes:n,onNavigate:i,currentNode:a}),{key:o})},DR=10,IR=(e,t=DR)=>{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)};function jR(e,t=220,r=60){if(!e?.setSize)return;const o=Math.max(Number(e.size?.[0]??0),t);e.setSize([o,r]);const n=e.computeSize?.()??e.size??[t,r];e.setSize([Math.max(o,Number(n[0]??0),t),Math.max(r,Number(n[1]??r))])}const PR=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"]),BR={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"},zR={"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"}},xu=(e,t)=>zR[e]?.[t]??BR[t]??t.split("_").join(" ");function FR({label:e,configured:t,close:r,onSave:o,onDelete:n}){const[i,a]=v.useState(""),[l,c]=v.useState(""),[u,d]=v.useState(!1),f=async p=>{d(!0),c("");try{const g=await p();g?c(g):r()}finally{d(!1)}};return s.jsxs(el,{open:!0,title:`${e} API Key`,description:"Credentials are stored by the local BV Nodepack backend and are never written into the workflow.",size:"small",onClose:r,footer:s.jsxs(s.Fragment,{children:[s.jsx(ie,{intent:"danger",disabled:!t||u,onClick:()=>f(n),children:"Delete key"}),s.jsx(ie,{intent:"ghost",disabled:u,onClick:r,children:"Cancel"}),s.jsx(ie,{intent:"primary",loading:u,disabled:!i.trim(),onClick:()=>f(()=>o(i)),children:"Save key"})]}),children:[s.jsx(Cr,{tone:t?"info":"warning",children:t?"A key is configured. Enter a new key to replace it.":"No key is configured."}),s.jsx(J1,{label:"API key",value:i,onValue:a}),l&&s.jsx(Cr,{tone:"danger",children:l})]})}let yu=null;const Kd=(e,t=!1)=>((t||!yu)&&(yu=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:[]})),yu),Zr=(e,t)=>e.widgets?.find(r=>r.name===t),Hs=(e,t,r)=>{const o=t.find(l=>l.label===String(Zr(e,"provider_profile")?.value??""));if(!o)return;const n=Zr(e,"custom_endpoint"),i=Zr(e,"model");if(n&&((!o.allow_custom_endpoint||!String(n.value??"").trim())&&(n.value=o.endpoint),n.disabled=!1,n.element&&(n.element.readOnly=!o.allow_custom_endpoint),n.label=o.allow_custom_endpoint?"custom endpoint":"endpoint (managed)",!n.__bvRemoteEndpointHooked)){n.__bvRemoteEndpointHooked=!0;const l=n.callback;n.callback=function(){const c=l?.apply(this,arguments),u=t.find(d=>d.label===String(Zr(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=Zr(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)},UR=(e,t,r)=>{const o=r.find(n=>n.label===String(Zr(t,"provider_profile")?.value??""))??r[0];o&&o.auth_mode!=="none"&&sp(n=>v.createElement(FR,{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,Hs(t,r),Kd(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,Hs(t,r),Kd(e,!0)}}))},Jh=(e,t)=>{Kd(t).then(r=>{let o=String(Zr(e,"provider_profile")?.value??"");const n=Zr(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 Hs(e,r,o),o=l,c}}let i=Zr(e,"configure_api_key");i||(i=e.addWidget("button","configure_api_key",null,()=>UR(t,e,r),{serialize:!1}),i.serialize=!1),Hs(e,r)}).catch(r=>console.error("BV Remote LLM settings unavailable",r))};function VR({collectors:e,collectorId:t,resourceId:r,resolved:o,debugVisible:n,onSelection:i,onDebug:a}){return s.jsxs("div",{className:"bv-m0-picker-panel",children:[s.jsx(Ei,{label:"Hidden link debug",value:n,trueLabel:"Visible",falseLabel:"Hidden",onValue:a}),s.jsx(Ti,{collectors:e,collectorId:t,resourceId:r,resolved:o,onSelection:i})]})}function WR({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(Ei,{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(Ti,{collectors:e,collectorId:l.collector_id,resourceId:l.resource_id,resolved:l.resolved,onSelection:(u,d)=>o(c,u,d)})]},l.binding_id)),s.jsx(ie,{type:"button",className:"bv-m0-add-binding",disabled:t.length>=20,onClick:n,children:"Add collector binding"})]})}const Yr="BV_RUNTIME_RESOURCE_PROVIDER_M0",bi="resource_provider",vi=20,$R=20;function Ys(e){return e?.findIndex(t=>t?.name===bi||t?.type===Yr)??-1}function jp(e){let t=Ys(e.outputs);t<0&&e.addOutput&&(e.addOutput(bi,Yr),t=Ys(e.outputs));const r=e.outputs?.[t];return r&&(r.name=bi,r.type=Yr),t}function t_(e){let t=Ys(e.inputs);t<0&&e.addInput&&(e.addInput(bi,Yr),t=Ys(e.inputs));const r=e.inputs?.[t];return r&&(r.name=bi,r.type=Yr),t}function HR(e){return`${bi}_${e}`}function Sc(e,t=vi){const r=[];for(let o=1;o<=t;o++){const n=HR(o);let i=e.inputs?.findIndex(l=>l?.name===n)??-1;i<0&&e.addInput&&(e.addInput(n,Yr),i=e.inputs?.findIndex(l=>l?.name===n)??-1);const a=e.inputs?.[i];a&&(a.name=n,a.type=Yr,a.__bvM0ProviderOrdinal=o),r.push(i)}return r}function YR(e,t){const r=e.computeSize?.(),o=e.size??[0,0];!r||!e.setSize||e.setSize([Math.max(Number(o[0]??0),Number(r[0]??0),220),Math.max(60,Number(r[1]??0)-t*$R)])}const XR=(e,t)=>t==null?null:e?._links?.get?.(t)??e?.links?.get?.(t)??e?.links?.[t]??null,GR=e=>[...e?._links?.values?.()??[],...e?.links?.values?.()??Object.values(e?.links??{})],Zh=(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===Yr||o?.type===Yr)?r:null};function Pp(e,t,r){const o=e.inputs?.find(a=>a.name===t),n=XR(e.graph,o?.link),i=Zh(e,n);if(i&&(!r||r(i)))return i;if(!r)return null;for(const a of GR(e.graph)){const l=Zh(e,a);if(l&&r(l))return l}return null}const ei=(e,t)=>e?.widgets?.find(r=>r.name===t),qR=e=>{try{const t=JSON.parse(String(ei(e,"resource_bindings")?.value??"[]"));return Array.isArray(t)?t.slice(0,vi).map(r=>({binding_id:String(r.binding_id??""),collector_id:String(r.collector_id??""),resource_id:String(r.resource_id??"")})):[]}catch{return[]}},r_=(e,t)=>["resource_a_id","resource_b_id"].some(r=>String(ei(e,r)?.value??"")===t);function Qh(e){const t=ei(e,"collector_id"),r=ei(e,"resource_id");if(!t||!r)return!1;const o=Pp(e,"resource_provider",n=>String(ei(n,"collector_id")?.value??"")===String(t.value??""));return!!o&&r_(o,String(r.value??""))}function _u(e){const t=qR(e);return Sc(e),t.every((r,o)=>{const n=Pp(e,`resource_provider_${o+1}`,i=>String(ei(i,"collector_id")?.value??"")===r.collector_id);return!!n&&r_(n,r.resource_id)})}const KR="BV M0 Fake Resource Collector",JR="BV M0 Fake Resource Consumer",o_="BV M0 Fake Multi Resource Consumer",n_=Yr,ZR="a1bdeceb-76ae-4e45-ae36-e5c2664819ce",QR="d97a4268-c02c-42a3-8793-8e578e12e12c",$e=(e,t)=>e?.widgets?.find(r=>r.name===t),wu=e=>{e&&(e.type="converted-widget",e.hidden=!0,e.computeSize=()=>[0,-4],e.serializeValue=()=>e.value)},ku=(e,t)=>(e&&!String(e.value??"").trim()&&(e.value=t??crypto.randomUUID()),String(e?.value??"")),Eu=()=>{let e=0;const t=()=>{const r=ct().canvas;r?Sp(r):e++<40&&setTimeout(t,50)};t()};function eS(e){const t=$e(e,"collector_id"),r=$e(e,"resource_a_id"),o=$e(e,"resource_b_id");if(!t||!r||!o||!e.graph||!(e.graph._nodes??[]).find(a=>a!==e&&a.__bvM0ResourceProvider===!0&&String($e(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 i_(e,t,r=""){return Pp(e,t,r?o=>String($e(o,"collector_id")?.value??"")===r:void 0)}function _n(e){return i_(e,"resource_provider",String($e(e,"collector_id")?.value??""))}function cl(e,t){const r=mi(e)[t];return i_(e,`resource_provider_${t+1}`,r?.collector_id??"")}function eb(e){const t=_n(e),r=t?.__bvM0IdRemap;if(!r)return;const o=$e(e,"collector_id"),n=$e(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 Lc(e){return(e.graph?._nodes??[]).filter(t=>t.__bvM0ResourceProvider===!0&&t.graph===e.graph).map(t=>({id:String($e(t,"collector_id")?.value??""),label:String(t.title||`Collector #${t.id}`),resources:[{id:String($e(t,"resource_a_id")?.value??""),label:"Alpha"},{id:String($e(t,"resource_b_id")?.value??""),label:"Beta"}],node:t})).filter((t,r,o)=>t.id&&o.findIndex(n=>n.id===t.id)===r)}function Ro(e){if(!e?.__bvM0ResourceProvider)return;const t=e.graph?._nodes??[],r=e.outputs?.find(n=>n.type===n_),o=t.some(n=>!!n.properties?.bvM0DebugVisible&&(_n(n)===e||n.inputs?.some((i,a)=>cl(n,a)===e)));r&&(r.hidden=!0,r.__bvM0VisualHidden=!o,r.__bvM0PortHidden=!0,r.__bvM0ResourceSlot=!0),Lp(e,"collector",o)}function mi(e){const t=$e(e,"resource_bindings");if(!t)return[];try{const r=JSON.parse(String(t.value??"[]"));return Array.isArray(r)?r.slice(0,vi).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 ba(e,t){const r=$e(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 tS(e){const t=mi(e),r=new Set(t.map(n=>n.binding_id));if((e.graph?._nodes??[]).some(n=>n!==e&&n.type===o_&&mi(n).some(i=>r.has(i.binding_id)))){for(const n of t)n.binding_id=crypto.randomUUID();ba(e,t)}}function Il(e){const t=mi(e);let r=!1;t.forEach((o,n)=>{const i=cl(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&&ba(e,t)}function Xs(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="";Lp(e,"consumer",t);for(let n=0;n=0&&e.inputs?.[n]?.link!=null&&e.disconnectInput?.(n);const a=Lc(e).find(c=>c.id===r)?.node,l=a?jp(a):-1;a&&n>=0&&l>=0&&a.connect(l,e,n),Xs(e,!!e.properties?.bvM0DebugVisible),Ro(i)}function Ya(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===n_).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 a_(e,t){[0,50,150,300].forEach(r=>setTimeout(()=>Ya(e,t),r))}function jl(e){if(!$e(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+mi(e).length*124),onDraw:()=>Ya(e,r),afterResize:()=>Ya(e,r)});n&&(n.serialize=!1)}e.__bvM0PickerRoot??(e.__bvM0PickerRoot=va.createRoot(r));const o=()=>{const n=Lc(e),i=mi(e).map((a,l)=>{const c=cl(e,l);return{...a,resolved:!!c&&String($e(c,"collector_id")?.value??"")===a.collector_id}});e.__bvM0PickerRoot.render(s.jsx(WR,{collectors:n,bindings:i,debugVisible:!!e.properties?.bvM0DebugVisible,onDebug:a=>{Xs(e,a),o()},onBinding:(a,l,c)=>{i[a]={...i[a],collector_id:l,resource_id:c},ba(e,i),tb(e,a,l),o()},onAdd:()=>{i.length>=vi||(i.push({binding_id:crypto.randomUUID(),collector_id:"",resource_id:"",resolved:!1}),ba(e,i),o())},onRemove:a=>{const l=Sc(e),c=l[a];c>=0&&e.inputs?.[c]?.link!=null&&e.disconnectInput?.(c),i.splice(a,1),ba(e,i);for(let d=a;d=0&&e.inputs?.[u]?.link!=null&&e.disconnectInput?.(u),o()}}))};o(),Xs(e,!!e.properties?.bvM0DebugVisible,!1),YR(e,vi),a_(e,r)}function Tu(e,t){if(e.__bvM0DomRefresh)return;const r=()=>{setTimeout(t,0),setTimeout(t,100)};e.__bvM0DomRefresh=r,to().addEventListener("executed",r),to().addEventListener("graphChanged",r);const o=e.onRemoved;e.onRemoved=function(){return to().removeEventListener("executed",r),to().removeEventListener("graphChanged",r),o?.apply(this,arguments)}}function Jd(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=""),Lp(e,"consumer",t),Ro(_n(e)),My(e.graph),t&&Rp(e.graph?.list_of_graphcanvas?.[0]??ct().canvas),r&&e.setDirtyCanvas?.(!0,!0)}function rS(e,t){const r=_n(e),o=t_(e);o>=0&&e.inputs?.[o]?.link!=null&&e.disconnectInput?.(o);const n=Lc(e).find(a=>a.id===t)?.node,i=n?jp(n):-1;n&&o>=0&&i>=0&&n.connect(i,e,o),Jd(e,!!e.properties?.bvM0DebugVisible),Ro(r)}function Pl(e){const t=$e(e,"collector_id"),r=$e(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:()=>Ya(e,o),afterResize:()=>Ya(e,o)});i&&(i.serialize=!1)}e.__bvM0PickerRoot??(e.__bvM0PickerRoot=va.createRoot(o));const n=()=>{const i=_n(e),a=String($e(i,"collector_id")?.value??"");e.__bvM0PickerRoot.render(s.jsx(VR,{collectors:Lc(e),collectorId:String(t.value??""),resourceId:String(r.value??""),resolved:!!i&&a===String(t.value??""),debugVisible:!!e.properties?.bvM0DebugVisible,onDebug:l=>{Jd(e,l),n()},onSelection:(l,c)=>{t.value=l,r.value=c,rS(e,l),n()}}))};n(),Jd(e,!!e.properties?.bvM0DebugVisible,!1),a_(e,o)}function oS(e,t){if(t.name===KR){const r=e.prototype.onNodeCreated,o=e.prototype.onConfigure,n=function(){Eu(),this.__bvM0ResourceProvider=!0,jp(this),ku($e(this,"collector_id")),ku($e(this,"resource_a_id"),ZR),ku($e(this,"resource_b_id"),QR),eS(this),["collector_id","resource_a_id","resource_b_id"].forEach(i=>wu($e(this,i))),Tu(this,()=>Ro(this)),Ro(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===JR){const r=e.prototype.onNodeCreated,o=e.prototype.onConfigure,n=e.prototype.onConnectionsChange,i=function(){Eu(),this.__bvM0ResourceConsumer=!0,t_(this),eb(this),Qh(this),["collector_id","resource_id"].forEach(a=>wu($e(this,a))),Tu(this,()=>Pl(this)),Pl(this),setTimeout(()=>Pl(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=_n(this),l=n?.apply(this,arguments);return queueMicrotask(()=>{eb(this),Qh(this),Pl(this),Ro(a),Ro(_n(this))}),l},!0}if(t.name===o_){const r=e.prototype.onNodeCreated,o=e.prototype.onConfigure,n=e.prototype.onConnectionsChange,i=function(){Eu(),this.__bvM0ResourceConsumer=!0,Sc(this),tS(this),Il(this),_u(this),wu($e(this,"resource_bindings")),Tu(this,()=>{Il(this),jl(this)}),jl(this),[0,50,150].forEach(a=>setTimeout(()=>{Il(this),_u(this),jl(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(()=>{Il(this),_u(this),Xs(this,!!this.properties?.bvM0DebugVisible,!1),jl(this)}),a},!0}return!1}const nS=(e,t)=>e?.widgets?.find(r=>r.name===t),iS=["replace","merge","subtract","clear"].map(e=>({value:e,label:e[0].toUpperCase()+e.slice(1)}));function aS({open:e,node:t,onClose:r}){const[o,n]=v.useState(()=>Po(t)),i=Ri(t);if(v.useEffect(()=>{e&&t&&n(Po(t))},[t,e]),v.useEffect(()=>{if(!e||!t)return;const p=()=>n(Po(t));return window.addEventListener(uo,p),()=>window.removeEventListener(uo,p)},[t,e]),!t)return null;const a=al(t).filter(p=>p.resources.length>0),l=WT(t),c=String(nS(t,"operation")?.value??"replace"),u=o.steps??o.entries.flatMap(p=>p.targets.map(g=>({id:crypto.randomUUID(),operation:c,target:g,entries:[{...p,targets:[g]}]}))),d=p=>{n(ll(t,{version:3,entries:[],steps:p}))},f=u.map((p,g)=>{const m=bT(p.target),_=l.find(k=>k.value===m)?.label??"Missing region";return{id:p.id,title:`Step ${g+1}: ${_}`,description:p.operation,content:s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(at,{label:"Target",value:m,options:l,onValue:k=>{const b=l.find(h=>h.value===k)?.target;b&&d(u.map(h=>h.id===p.id?{...h,target:b,entries:h.entries.map(x=>({...x,targets:[b]}))}:h))}}),s.jsx(at,{label:"Operation",value:p.operation,options:iS,onValue:k=>d(u.map(b=>b.id===p.id?{...b,operation:k}:b))}),p.operation!=="clear"&&p.entries.map((k,b)=>k.source.kind==="external"?s.jsxs("section",{className:"bv-lora-v3-stack-row",children:[s.jsxs("strong",{children:["LoRA Stack ",b+1]}),s.jsx(Ti,{collectors:a,collectorId:k.source.collector_id,resourceId:k.source.resource_id,resolved:By(t,o,k),label:"LoRA stack",emptyLabel:"Select LoRA stack",onSelection:(h,x)=>n(zy(t,o,k.id,h,x))}),s.jsx(ie,{intent:"ghost",iconOnly:!0,"aria-label":`Remove LoRA Stack ${b+1}`,onClick:()=>d(u.map(h=>h.id===p.id?{...h,entries:h.entries.filter(x=>x.id!==k.id)}:h)),children:"×"})]},k.id):null),p.operation!=="clear"&&s.jsx(ie,{intent:"secondary",disabled:!a.length,onClick:()=>{const k=a[0],b=k?.resources[0];b&&d(u.map(h=>h.id===p.id?{...h,entries:[...h.entries,{id:crypto.randomUUID(),source:{kind:"external",collector_id:k.id,resource_id:b.id},targets:[h.target]}]}:h))},children:"Add LoRA stack"})]})}});return s.jsx(Rn,{open:e,title:"BV Regional LoRA Editor",shortTitle:"Regional LoRA",menuVisible:i,onMenuVisible:p=>Tn(t,p),initialGeometry:{width:620,height:520},minSize:{width:420,height:320},onClose:r,children:s.jsxs("div",{className:"bv-ui bv-lora-v3-window",children:[s.jsx(ie,{intent:"secondary",disabled:!l.length,onClick:()=>d([...u,{id:crypto.randomUUID(),operation:"merge",target:l[0].target,entries:[]}]),children:"Add step"}),s.jsx(tl,{items:f,initialExpanded:f.map(p=>p.id),onReorder:p=>{const g=new Map(u.map(m=>[m.id,m]));d(p.map(m=>g.get(m.id)).filter(Boolean))},onRemove:p=>d(u.filter(g=>g.id!==p))})]})})}const Bp="BV Control Center",Gs=0,lS=2,sS=4,Ki="bvControlBaseMode",cS="bv-open-control-rack",l_=320,uS=48,Zd="bv_control_conflict_status",Ru=new Set;function dS(e){return e==="activate"?{mode:Gs,priority:3}:e==="mute"?{mode:lS,priority:2}:{mode:sS,priority:1}}function rb(e){const t=new Set(Ns(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 fS(e){return m1(e,t=>Lm(t,Bp))}function pS(e){for(const o of Ru){const n=o.properties?.[Ki];o.mode=e.forceActive?Gs:typeof n=="number"?n:o.mode,o.properties&&delete o.properties[Ki],o.setDirtyCanvas?.(!0,!0)}Ru.clear();const t=new Map(Ns(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 fS(i)){const l=dS(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[Ki]!="number"&&(o.properties[Ki]=typeof o.mode=="number"?o.mode:Gs),o.mode=n.mode,Ru.add(o),o.setDirtyCanvas?.(!0,!0)}function gS(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 hS(e,t){const r=Cm(t),o=x1(r);let n=e.widgets?.find(i=>i.name===Zd);n||(n=e.addCustomWidget({name:Zd,type:"custom",value:o,y:0,options:{},serialize:!1,computeSize:()=>[0,24],computeLayoutSize:()=>({minHeight:24,maxHeight:24,minWidth:l_}),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 bS(e,t){const r=e.widgets;if(!Array.isArray(r))return;const o=r.findIndex(i=>i.name===t);if(o<0||o===r.length-1)return;const[n]=r.splice(o,1);r.push(n)}function s_(e,t){e.mode=Gs,e.properties&&delete e.properties[Ki];let r=e.widgets?.find(c=>c.name==="configure_control_center");r||(r=e.addWidget("button","configure_control_center",null,()=>window.dispatchEvent(new Event(cS)),{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)&&gS(e,c)}for(const c of t.controls){const u=`bvcc_${c.id}`,d=g=>{const m=xn(),_={...m,controls:m.controls.map(k=>k.id===c.id?{...k,enabled:!!g}:k)};ep(_)};let f=e.inputs.find(g=>g.name===u);f||(f=e.addInput(u,"BOOLEAN",{label:c.name,nameLocked:!0,widget:{name:u}})),f.label=c.name;let p=e.widgets?.find(g=>g.name===u);p&&!p.__bvControlCallbackBound&&(e.removeWidget?.(p),p=null),p||(p=e.addWidget("toggle",u,c.enabled,d,{on:"ACTIVE",off:"INACTIVE"})),p.__bvControlCallbackBound=!0,p.label=c.name,p.value=c.enabled,p.serialize=!0,p.options??(p.options={}),p.options.on="ACTIVE",p.options.off="INACTIVE",p.callback=d,f.widget={name:u}}hS(e,t);const n=e.widgets?.find(c=>c.name==="bv_control_config_json");n&&(n.value=JSON.stringify(rb(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(rb(xn()))),bS(e,Zd),e.serialize_widgets=!0;const i=e.size??[0,0],a=e.computeSize?.()??i,l=Math.max(l_,(a[0]??0)+uS);e.setSize?.([Math.max(i[0]??0,l),a[1]??i[1]??0]),e.setDirtyCanvas?.(!0,!0)}function c_(e=xn()){for(const{node:t}of b1(ct(),Bp))s_(t,e);pS(e)}window.addEventListener(ci,e=>c_(e.detail));ct().registerExtension({name:"bv_nodepack.control_center",async beforeRegisterNodeDef(e,t){if(t.name!==Bp)return;const r=e.prototype.onNodeCreated;e.prototype.onNodeCreated=function(){const o=r?.apply(this,arguments);return s_(this,xn()),o}},afterConfigureGraph(){c_()}});const Me=ct(),Pr=to();zE(e=>Me.ui?.settings?.setSettingValue?.(Gx,e));FE(e=>Me.ui?.settings?.setSettingValue?.(qx,e));BE(e=>Me.ui?.settings?.setSettingValue?.(Kx,e));dk(e=>Me.ui?.settings?.setSettingValue?.(up,e));const Qd="bv-open-control-rack",ef="bv-open-regional-editor",tf="bv-open-regional-quick-edit",So="bv-regional-document-changed",ob="bv-nodepack-styles",Fr=e=>{e.type="converted-widget",e.hidden=!0,e.computeSize=()=>[0,-4],e.element&&(e.element.style.display="none")},vS=(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)},mS=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=[]},Cc=e=>LR(e,Me.graph),ln=e=>{const t=Me.canvas?.graph??Me.graph;return nl(t,r=>r===e)[0]?.graph??e?.graph??null},xS=e=>{const t=Me.canvas?.graph??Me.graph,r=ln(e);$a(e,r);for(const o of nl(t,n=>String(n?.comfyClass??n?.type)==="BV Detector Registry"))o.graph===r&&$a(o.node,r);return Rc(e)},Su=e=>{const t=/^external_detector_(\d+)$/,r=(e.inputs??[]).flatMap(i=>{const a=t.exec(String(i.name));return a&&i.link!=null?[Number(a[1])]:[]}),o=new Set(IR(r));for(let i=(e.inputs?.length??0)-1;i>=0;i--){const a=e.inputs[i],l=t.exec(String(a.name));l&&a.link==null&&!o.has(Number(l[1]))&&e.removeInput(i)}for(const i of[...o].sort((a,l)=>a-l)){const a=`external_detector_${i}`;e.inputs?.some(l=>l.name===a)||e.addInput(a,"BV_DETECTOR_BINDING",{label:`external detector ${i}`,nameLocked:!0})}const n=()=>{jR(e)};n(),setTimeout(n,0),e.setDirtyCanvas?.(!0,!0)},nb=(e,t)=>{for(const r of e.inputs??[])r.label=xu(t,String(r.name));for(const r of e.outputs??[])r.label=xu(t,String(r.name));for(const r of e.widgets??[])String(r.name).startsWith("configure_")||(r.label=xu(t,String(r.name)));e.setDirtyCanvas?.(!0,!0)},rf=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;Fr(t);const o=Cc(e),n=o?da(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)},ib=e=>{qd(e,ln(e));const t=e.widgets?.find(o=>o.name==="config_json");if(!t)return;Fr(t);let r=e.widgets?.find(o=>o.name==="configure_detailer_plan");r||(r=e.addWidget("button","configure_detailer_plan",null,()=>{const o=Cc(e);o&&(Tr("detailer",Le(e)),OR(o.regions,xS(e),t.value,n=>{t.value=n,qd(e,ln(e)),rf(e),e.graph?.setDirtyCanvas?.(!0,!0)},`detailer-plan:${Le(e)}`,Nt("BV Regional Detailer Plan").filter(En).map(n=>({id:Le(n),label:`${n.title||"BV Regional Detailer Plan"} · #${n.id}`})),(n,i)=>{const a=Nt("BV Regional Detailer Plan").find(c=>Le(c)===n),l=a?.widgets?.find(c=>c.name==="configure_detailer_plan");l&&cp(`detailer-plan:${Le(e)}`,`detailer-plan:${Le(a)}`,()=>l.callback?.(),i)},e))},{serialize:!1}),r.serialize=!1),rf(e)},ab=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[]}},zp=e=>{if(e.comfyClass!=="BV Regional Detailer Mask"&&e.type!=="BV Regional Detailer Mask")return;const t=e.widgets?.find(d=>d.name==="context_regions_json");if(!t)return;Fr(t);const r=Cc(e);if(!r)return;for(const d of e.__bvDetailerContextWidgets??[]){const f=e.widgets?.indexOf(d)??-1;f>=0&&e.widgets.splice(f,1),d.onRemove?.()}const o=String(e.widgets?.find(d=>d.name==="region")?.value??""),n=(r?.regions??[]).filter(d=>d.enabled!==!1&&d.id!==o),i=new Set,a=ab(t.value).filter(d=>d.region_id!==o&&!i.has(d.region_id)&&!!i.add(d.region_id));t.value=JSON.stringify(a);const l=[],c=d=>{t.value=JSON.stringify(d),queueMicrotask(()=>zp(e))};for(let d=0;d<=a.length;d++){const f=a[d],p=new Set(a.filter((k,b)=>b!==d).map(k=>k.region_id)),g=Qy(n.filter(k=>!p.has(k.id))),m=f&&!g.some(k=>k.id===f.region_id)?`Missing region · ${f.region_id.slice(0,8)}`:null,_=e.addWidget("combo",`context_region_${d+1}`,f?g.find(k=>k.id===f.region_id)?.label??m??"None":"None",k=>{if(k==="None")return c(a.slice(0,d));const b=g.find(x=>x.label===k);if(!b)return;const h=a.slice();h[d]={region_id:b.id,influence:f?.influence??1},c(h)},{values:["None",...m?[m]:[],...g.map(k=>k.label)],serialize:!1});if(_.label=`context region ${d+1}`,_.serialize=!1,l.push(_),f){const k=e.addWidget("number",`context_influence_${d+1}`,f.influence,b=>{const h=ab(t.value);h[d]&&(h[d].influence=Math.max(0,Math.min(2,+b))),t.value=JSON.stringify(h)},{min:0,max:2,step:.05,precision:2,serialize:!1});k.label=`context influence ${d+1}`,k.serialize=!1,l.push(k)}}e.__bvDetailerContextWidgets=l;const u=e.computeSize?.();u&&e.setSize&&e.setSize([Math.max(e.size?.[0]??0,u[0]),u[1]]),e.setDirtyCanvas?.(!0,!0),e.graph?.setDirtyCanvas?.(!0,!0)},is=e=>{const t=e.widgets?.find(d=>d.name==="region"),r=e.widgets?.find(d=>d.name==="region_selector");if(!t||!r)return;const o=Cc(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=Qy(o.regions,n),a=String(t.value??""),l=i.some(d=>d.id===a)?a:a||i[0]?.id||"";t.value=l,e.__bvRegionChoices=i,r.options??(r.options={});const c=l&&!i.some(d=>d.id===l)?`Missing region · ${l.slice(0,8)}`:null;r.options.values=i.length||c?[...c?[c]:[],...i.map(d=>d.label)]:["Connect a BV Regional Prompt"],r.value=i.find(d=>d.id===l)?.label??c??r.options.values[0];const u=e.widgets?.find(d=>d.name==="scope");r.disabled=u&&u.value!=="region"||!i.length,zp(e),e.setDirtyCanvas?.(!0,!0)},lb=e=>{const t=e.widgets?.find(n=>n.name==="region");if(!t)return;Fr(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,zp(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")&&vS(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 is(e),i}}if(!e.__bvRegionDocumentListener){e.__bvRegionDocumentListener=()=>is(e),window.addEventListener(So,e.__bvRegionDocumentListener);const n=e.onRemoved;e.onRemoved=function(){return window.removeEventListener(So,e.__bvRegionDocumentListener),n?.apply(this,arguments)}}is(e)},Nc=()=>Me.canvas?.graph??Me.graph,Nt=e=>{const t=[],r=o=>{for(const n of o?._nodes??[])n.type===e&&t.push(n),n.subgraph&&r(n.subgraph)};return r(Nc()),t},pn=()=>{const e=Nc(),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},ti=()=>{const e=Nt("BV Control Center").length>0,t=pn().length>0,r=t||["BV Regional LoRA","BV Regional Detailer Plan","BV Detector Registry","BV Smart Pipe","BV Smart Pipe Merge"].some(n=>Nt(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}}))},u_=e=>nl(Nc(),t=>t===e)[0],Le=e=>u_(e)?.key??String(e.id),Vi=(e,t)=>{const r=u_(e);return{label:String(e.title||t),meta:`${r?.breadcrumb?`${r.breadcrumb} · `:""}#${e.id}`}},qs=(e,t,r,o)=>{const n=o.widgets?.find(c=>c.name===r);if(!n||n.disabled)return;const i=Le(o),a=xo(e),l=()=>n.callback?.();a&&a!==i?cp(`${t}:${a}`,`${t}:${i}`,l,di()==="replace"):l(),Tr(e,i)},sb=(e,t)=>{e==="regional"?zr("regional",t):e==="lora"?zr("lora",t):e==="detailer"?qs("detailer","detailer-plan","configure_detailer_plan",t):e==="detector"?qs("detector","detector-registry","configure_detector_registry",t):window.dispatchEvent(new CustomEvent("bv-open-smart-pipe-editor",{detail:{node:t,kind:e}}))},yS=()=>{const e=[{type:"regional",nodes:pn()},{type:"lora",nodes:Nt("BV Regional LoRA")},{type:"detailer",nodes:Nt("BV Regional Detailer Plan")},{type:"detector",nodes:Nt("BV Detector Registry")},{type:"pipe",nodes:Nt("BV Smart Pipe")},{type:"merge",nodes:Nt("BV Smart Pipe Merge")}],t=mE(),r=t&&xo(t),o=e.find(i=>i.type===t)?.nodes.find(i=>Le(i)===r);if(o){sb(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&&(sb(n.type,n.node),t&&Ct({title:"Previous editor unavailable",message:"Opened the first available BV editor instead.",tone:"warning",duration:4e3}))},of=()=>{const e=Nc(),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))},_S=()=>bR(pn().flatMap(e=>{try{const t=Fo(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[]}})),cb=(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=_S(),i=vR(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)},ub=(e,t=!1)=>{const r=e.widgets?.find(n=>n.name==="document_id");if(!r)return;Fr(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=()=>cb(e,!1),window.addEventListener(So,e.__bvDocumentTargetListener);const n=e.onRemoved;e.onRemoved=function(){return window.removeEventListener(So,e.__bvDocumentTargetListener),n?.apply(this,arguments)}}cb(e,t)},db=(e,t=!1)=>{const r=e.widgets?.find(o=>o.name==="regional_json");if(r)try{const o=t?hh():Fo(r.value);!t&&pn().some(a=>{if(a===e)return!1;try{return Fo(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={..._p(i.value,t?"":o.document_id),document_id:o.document_id};i.value=JSON.stringify(Qn(a,new Set(o.regions.map(l=>l.id))))}catch{i.value=JSON.stringify(_c(o.document_id))}}catch{r.value=JSON.stringify(hh())}};function wS(){const[e,t]=v.useState(!1),[r,o]=v.useState(!1),[n,i]=v.useState(!1),[a,l]=v.useState(0),[c,u]=v.useState(!1),[d,f]=v.useState(0),[p,g]=v.useState(null),m=v.useRef(null),[_,k]=v.useState([]),[b,h]=v.useState({}),[x,w]=v.useState([]),[y,T]=v.useState(null),L=v.useRef(!1);m.current=p,L.current=c;const U=v.useRef(ha(Me)),P=()=>{const M=ha(Me);return U.current=M,M},j=v.useCallback((M=!1)=>{const O=pn(),E=Nt("BV Regional LoRA"),B=Nt("BV Regional Detailer Plan"),C=Nt("BV Detector Registry"),S=[...Nt("BV Smart Pipe"),...Nt("BV Smart Pipe Merge")],N=(F,z)=>{const Z=!En(F);return Z&&!M?null:{...z,hidden:Z,onReveal:Z?()=>Tn(F,!0):void 0}};return[{id:"regional",label:"Regional Prompts",items:O.map(F=>{const z=Vi(F,"BV Regional Prompt"),Z=xo("regional")===Le(F);return N(F,{id:Le(F),...z,meta:`${z.meta}${Z?" · Last active":""}`,onSelect:()=>zr("regional",F),secondary:{label:`Quick edit ${z.label}`,onSelect:()=>zr("quick",F)}})}).filter(Boolean)},{id:"lora",label:"Regional LoRA",items:E.map(F=>{const z=Vi(F,"BV Regional LoRA"),Z=xo("lora")===Le(F);return N(F,{id:Le(F),...z,meta:`${z.meta}${Z?" · Last active":""}`,onSelect:()=>{Tr("lora",Le(F)),zr("lora",F)}})}).filter(Boolean)},{id:"detailer",label:"Detailer Plan",items:B.map(F=>{const z=Vi(F,"BV Regional Detailer Plan"),Z=F.widgets?.find(q=>q.name==="configure_detailer_plan"),Y=xo("detailer")===Le(F);return N(F,{id:Le(F),...z,disabled:!Z||Z.disabled,meta:`${z.meta}${Z?.disabled?" · Connect Regional Prompt":Y?" · Last active":""}`,onSelect:()=>qs("detailer","detailer-plan","configure_detailer_plan",F)})}).filter(Boolean)},{id:"detector",label:"Detector Registry",items:C.map(F=>{const z=Vi(F,"BV Detector Registry"),Z=xo("detector")===Le(F);return N(F,{id:Le(F),...z,meta:`${z.meta}${Z?" · Last active":""}`,onSelect:()=>qs("detector","detector-registry","configure_detector_registry",F)})}).filter(Boolean)},{id:"smart-pipe",label:"Smart Pipes",items:S.map(F=>{const z=String(F.type??F.comfyClass)==="BV Smart Pipe Merge"?"merge":"pipe",Z=Vi(F,z==="merge"?"Smart Pipe Merge":"Smart Pipe");return N(F,{id:Le(F),...Z,meta:`${Z.meta} · ${z==="merge"?"Merge":"Pipe"}`,onSelect:()=>window.dispatchEvent(new CustomEvent("bv-open-smart-pipe-editor",{detail:{node:F,kind:z}}))})}).filter(Boolean)}]},[]);return v.useEffect(()=>{const M=()=>t(!0);return window.addEventListener(Qd,M),()=>window.removeEventListener(Qd,M)},[]),v.useEffect(()=>wR(Me,Pr,()=>window.setTimeout(kS,0),void 0,void 0,U.current),[]),v.useEffect(()=>{const M=E=>{E&&(P(),Tr("lora",Le(E))),T(E)},O=E=>M(E.detail?.node??null);return window.addEventListener(Uh,O),()=>window.removeEventListener(Uh,O)},[]),v.useEffect(()=>{const M=O=>o(!!O.detail?.control);return window.addEventListener("bv-toolbar-capabilities-changed",M),ti(),()=>window.removeEventListener("bv-toolbar-capabilities-changed",M)},[]),v.useEffect(()=>{const M=()=>ti();return window.addEventListener(uo,M),()=>window.removeEventListener(uo,M)},[]),v.useEffect(()=>{const M=O=>{const E=O.detail?.reports??[];if(!E.length)return;const B=UT(E);Ct({...B,id:"bv-regional-migration-report",duration:1e4})};return window.addEventListener(Wd,M),()=>window.removeEventListener(Wd,M)},[]),v.useEffect(()=>{const M=O=>{const E=O.detail?.node,B=E&&Hd(E),C=`bv-regional-validation:${Le(E)}`;if(!B?.issues.length){Bx(C);return}const S=B.issues[0];Ct({id:C,title:"Regional fallbacks are active",message:`${B.issues.length} invalid field${B.issues.length===1?"":"s"}. ${S.message}`,tone:"warning",duration:0,actionLabel:"Open field",onAction:()=>{zr("regional",E),window.setTimeout(()=>{const N=document.querySelector(`[data-bv-regional-field="${CSS.escape(S.field)}"]`);N?.scrollIntoView({block:"center"}),N?.querySelector("input,textarea,button")?.focus()},100)}})};return window.addEventListener($d,M),()=>window.removeEventListener($d,M)},[]),v.useEffect(()=>{const M=new Set,O=()=>{const E=ha(Me);if(M.has(E))return;const B=Me.graph?._nodes?.filter(S=>MT(S).length)??[];if(!B.length)return;M.add(E);const C=B[0];Ct({id:"bv-regional-legacy-usage",title:"Legacy Regional wiring detected",message:`${B.length} node${B.length===1?"":"s"} still use deprecated Regional ports. Existing execution remains active; migrate the wiring manually.`,tone:"warning",duration:0,actionLabel:"Open migration target",onAction:()=>{String(C?.comfyClass??C?.type)==="BV Regional Prompt"?zr("regional",C):(Me.canvas?.selectNode?.(C),Me.canvas?.centerOnNode?.(C))}})};return Pr.addEventListener("execution_start",O),()=>Pr.removeEventListener("execution_start",O)},[]),v.useEffect(()=>{const M=O=>{P();const E=O.detail?.node??null,B=pn();w(of()),k(B);const C=E??B.find(S=>Le(S)===xo("quick"))??B[0]??null;C&&Tr("quick",Le(C)),g(C),i(!1),u(!0),f(S=>S+1)};return window.addEventListener(tf,M),()=>window.removeEventListener(tf,M)},[]),v.useEffect(()=>{const M=O=>{const E=O.detail?.output,B=E?.bv_regional_background?.[0]?.document_id,C=E?.images?.[E.images.length-1];if(!B||!C)return;const S=new URLSearchParams({filename:C.filename,type:C.type,subfolder:C.subfolder||""});h(N=>({...N,[B]:Pr.apiURL(`/view?${S}`)}))};return Pr.addEventListener("executed",M),()=>Pr.removeEventListener("executed",M)},[]),v.useEffect(()=>{const M=O=>{try{P();const E=O.detail?.node??null,B=pn();w(of()),k(B);const C=E??B.find(S=>Le(S)===xo("regional"))??B[0]??null;C&&Tr("regional",Le(C)),g(C),C&&L.current&&String(m.current?.id)===String(C.id)&&u(!1),i(!0),l(S=>S+1)}catch(E){throw Ct({title:"Regional editor failed to open",message:E instanceof Error?E.message:String(E),tone:"danger",duration:1e4}),E}};return window.addEventListener(ef,M),()=>window.removeEventListener(ef,M)},[]),s.jsxs(s.Fragment,{children:[s.jsx(dE,{}),s.jsx(Lk,{getColumns:j}),s.jsx(_E,{}),s.jsx(yE,{open:e,hasControlNodes:r,onClose:()=>t(!1)}),s.jsx(aS,{open:!!y,node:y,onClose:()=>T(null)}),s.jsx(fR,{open:n,activationToken:a,nodes:_,initialNode:p,backgrounds:b,loraStacks:x,onClose:()=>i(!1)}),s.jsx(hR,{open:c,activationToken:d,nodes:_,initialNode:p,loraStacks:x,onClose:()=>u(!1),onOpenEditor:M=>{Tr("regional",Le(M)),g(M),u(!1),i(!0),l(O=>O+1)}})]})}const nf="bv-root";let Xa=null,Ga=null;function d_(){Xa&&(Ga=va.createRoot(Xa),Ga.render(s.jsx(Re.StrictMode,{children:s.jsx(wS,{})})))}function kS(){if(!Xa?.isConnected){Fp();return}Ga?.unmount(),Ga=null,d_()}function Fp(){if(d1(),!document.getElementById(ob)){const t=document.createElement("style");t.id=ob,t.textContent=`${RE} +${TE}`,document.head.appendChild(t)}let e=document.getElementById(nf);e||(e=Xa??document.createElement("div"),e.id=nf,document.body.appendChild(e)),Xa=e,Ga||d_()}new MutationObserver(()=>{document.getElementById(nf)||Fp()}).observe(document.body,{childList:!0});Me.registerExtension({name:"bv_nodepack.control_rack_portal",setup(){Fp(),Sp(Me.canvas),hk(Me.ui?.settings),Bd(!!Me.ui?.settings?.getSettingValue?.(Pd,!1),Me.graph),_R(),Pr.addEventListener("graphChanged",ti)}});Me.registerExtension({name:"bv_nodepack.regional_editor",settings:[{id:Xm,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=>Km(e)},{id:Gm,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=>Jm(e)},{id:up,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=>dp(e,!1)},{id:Pd,name:"Enable BV Regional Legacy Debug Mode",type:"boolean",defaultValue:!1,category:["BV Node Pack","Regional","Legacy debug mode"],tooltip:"Reveal deprecated Regional ports, legacy nodes and hidden provider wiring for debugging.",onChange:e=>{const t=Me.canvas;Bd(!!e,t?.graph??Me.graph),e&&Rp(t)}},{id:"BV.Regional.LegacyDebugShortcutInfo",name:"Legacy Debug Shortcut",type:e=>{const t=document.createElement("div");return t.className="bv-legacy-shortcut-info",t.innerHTML="Ctrl+Alt+BDefault shortcut · change it in ComfyUI Settings → Shortcuts",t},defaultValue:"Ctrl+Alt+B",category:["BV Node Pack","Regional","Legacy debug shortcut"],tooltip:"The effective binding is managed by ComfyUI's native Shortcuts menu."},{id:Gx,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=>ny(!!e)},{id:Kx,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=>ry(e)},{id:qx,name:"Completion Datasets",type:mR,defaultValue:"",category:["BV Node Pack","Prompting","Completion datasets"],tooltip:"Choose one or more local CSV/TSV datasets for BV Prompt Autocomplete.",onChange:e=>sy(e)}],keybindings:[{commandId:zh,combo:{key:"b",ctrl:!0,alt:!0}}],commands:[{id:"bv.regional.openEditor",label:"Open BV Regional Editor",icon:"icon-[lucide--layers]",function:()=>{window.dispatchEvent(new CustomEvent(ef))}},{id:zh,label:"Toggle BV Regional Legacy wiring debug",icon:"icon-[lucide--workflow]",function:()=>{const e=Me.canvas,t=!Ep(),r=Me.ui?.settings;r?.setSettingValue?.(Pd,t),r?.setSettingValue||Bd(t,e?.graph??Me.graph),Ct({id:"bv-regional-debug-wiring",title:`Regional wiring debug ${t?"enabled":"disabled"}`,message:t?"Legacy ports and hidden V3 provider links are visible for this UI session.":"Legacy ports and V3 provider links returned to their normal presentation.",tone:"info",duration:3500})}}],actionBarButtons:[{icon:"icon-[lucide--sliders-horizontal]",class:"bv-regional-action bv-regional-action-control",tooltip:"Open BV Control Center",onClick:()=>window.dispatchEvent(new Event(Qd))},{icon:"icon-[lucide--scan-search]",class:"bv-regional-action bv-regional-action-editor",tooltip:"Open last BV editor",onClick:yS},{icon:"icon-[lucide--layers]",class:"bv-regional-action bv-regional-action-quick",tooltip:"Quick edit BV Regional prompts",onClick:()=>window.dispatchEvent(new CustomEvent(tf))},{icon:"icon-[lucide--chevron-down]",class:"bv-regional-action bv-regional-action-menu",tooltip:"Choose BV window",onClick:e=>Sk(e?.currentTarget instanceof HTMLElement?e.currentTarget:void 0)}],beforeRegisterNodeDef(e,t){if(oS(e,t))return;const r=CT(t.name);if(r.length){const u=e.prototype.onNodeCreated,d=e.prototype.onConfigure,f=e.prototype.onConnectionsChange,p=e.prototype.onDeselected;e.prototype.onNodeCreated=function(){const g=u?.apply(this,arguments);return queueMicrotask(()=>Ml(this,r)),g},e.prototype.onConfigure=function(){const g=d?.apply(this,arguments);return queueMicrotask(()=>Ml(this,r)),g},e.prototype.onConnectionsChange=function(){const g=f?.apply(this,arguments);return queueMicrotask(()=>gi(this)),g},e.prototype.onDeselected=function(){const g=p?.apply(this,arguments);return Fh(this),g}}if(QT(e,t)&&t.name!=="BV Regional Prompt")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 u=e.prototype.onNodeCreated,d=e.prototype.onRemoved;e.prototype.onNodeCreated=function(){const f=u?.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(ti),f},e.prototype.onRemoved=function(){const f=d?.apply(this,arguments);return queueMicrotask(ti),f}}if(PR.has(t.name)){const u=e.prototype.onNodeCreated,d=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const f=u?.apply(this,arguments);return queueMicrotask(()=>nb(this,t.name)),f},e.prototype.onConfigure=function(f){const p=d?.call(this,f);return queueMicrotask(()=>nb(this,t.name)),p}}if(t.name==="BV Detector Registry"){const u=g=>{const m=g.widgets?.find(x=>x.name==="config_json");if(!m)return;Fr(m);const _=pa(m.value),k=ga(_);String(m.value??"")!==k&&(m.value=k,m.callback?.(k)),rR(g,ln(g));let b=g.widgets?.find(x=>x.name==="configure_detector_registry");b||(b=g.addWidget("button","configure_detector_registry",null,()=>{Tr("detector",Le(g)),AR(Pr,m.value,x=>{m.value=x,u(g),g.graph?.setDirtyCanvas?.(!0,!0)},`detector-registry:${Le(g)}`,Nt("BV Detector Registry").filter(En).map(x=>({id:Le(x),label:`${x.title||"BV Detector Registry"} · #${x.id}`})),(x,w)=>{const y=Nt("BV Detector Registry").find(L=>Le(L)===x),T=y?.widgets?.find(L=>L.name==="configure_detector_registry");T&&cp(`detector-registry:${Le(g)}`,`detector-registry:${Le(y)}`,()=>T.callback?.(),w)},g).catch(x=>console.error(x))},{serialize:!1}),b.serialize=!1);const h=_.detectors.length;b.label=`Configure Detector Registry · ${h} Detector${h===1?"":"s"}`,g.setDirtyCanvas?.(!0,!0)},d=e.prototype.onNodeCreated,f=e.prototype.onConfigure,p=e.prototype.onConnectionsChange;e.prototype.onNodeCreated=function(){const g=d?.apply(this,arguments);return queueMicrotask(()=>{u(this),Su(this)}),g},e.prototype.onConfigure=function(){const g=f?.apply(this,arguments);return queueMicrotask(()=>{u(this),Su(this)}),g},e.prototype.onConnectionsChange=function(){const g=p?.apply(this,arguments);return queueMicrotask(()=>Su(this)),g};return}if(t.name==="BV Regional Detailer Plan"){const u=e.prototype.onNodeCreated,d=e.prototype.onConfigure,f=e.prototype.onConnectionsChange;e.prototype.onNodeCreated=function(){const p=u?.apply(this,arguments);return queueMicrotask(()=>ib(this)),p},e.prototype.onConfigure=function(){const p=d?.apply(this,arguments);return queueMicrotask(()=>{Xd(Yd(this)),ib(this)}),p},e.prototype.onConnectionsChange=function(){const p=f?.apply(this,arguments);return queueMicrotask(()=>{qd(this,ln(this)),rf(this)}),p};return}if(t.name==="BV Remote LLM Provider"){const u=e.prototype.onNodeCreated,d=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const f=u?.apply(this,arguments);return queueMicrotask(()=>Jh(this,Pr)),f},e.prototype.onConfigure=function(f){Array.isArray(f?.widgets_values)&&f.widgets_values.length>=6&&/^[A-Za-z_][A-Za-z0-9_]*$/.test(String(f.widgets_values[3]??""))&&(f={...f,widgets_values:[...f.widgets_values.slice(0,3),...f.widgets_values.slice(4)]});const p=d?.call(this,f);return queueMicrotask(()=>Jh(this,Pr)),p};return}if(t.name==="BV Named LoRA Stack"){const u=p=>{const g=p.widgets?.find(_=>_.name==="stack_id");if(!g)return;const m=String(g.value??"").trim();if(!m||uT(String(p.id),m,of())){const _=crypto.randomUUID();m&&(p.__bvLoraResourceIdRemap={[m]:_}),g.value=_,p.setDirtyCanvas?.(!0,!0)}Fr(g)},d=e.prototype.onNodeCreated,f=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const p=d?.apply(this,arguments);return u(this),p},e.prototype.onConfigure=function(){const p=f?.apply(this,arguments);return queueMicrotask(()=>u(this)),p};return}if(t.name==="BV Regional Image Send"||t.name==="BV Regional Image Save"){const u=e.prototype.onNodeCreated,d=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const f=u?.apply(this,arguments);return queueMicrotask(()=>ub(this,!0)),f},e.prototype.onConfigure=function(){const f=d?.apply(this,arguments);return queueMicrotask(()=>ub(this,!1)),f};return}if(["BV Regional Select","BV Regional Deconstructor","BV Regional Detailer Mask"].includes(t.name)){const u=e.prototype.onNodeCreated,d=e.prototype.onConfigure,f=e.prototype.onConnectionsChange;e.prototype.onNodeCreated=function(){const g=u?.apply(this,arguments);return lb(this),g};const p=e.prototype.onSerialize;e.prototype.onConfigure=function(g){t.name==="BV Regional Detailer Mask"&&(mS(this),g?.widgets_values&&(g={...g,widgets_values:ER(g.widgets_values)}));const m=d?.call(this,g);return queueMicrotask(()=>lb(this)),m},e.prototype.onSerialize=function(g){const m=p?.apply(this,arguments);return t.name==="BV Regional Detailer Mask"&&(g.widgets_values=kR(this.widgets)),m},e.prototype.onConnectionsChange=function(){const g=f?.apply(this,arguments);return queueMicrotask(()=>is(this)),g};return}if(t.name!=="BV Regional Prompt")return;const n=e.prototype.onNodeCreated,i=e.prototype.onConfigure,a=e.prototype.onConnectionsChange,l=e.prototype.onDeselected;e.prototype.onNodeCreated=function(){const u=n?.apply(this,arguments);db(this,!0);const d=this.widgets?.find(m=>m.name==="regional_json"),f=this.widgets?.find(m=>m.name==="lora_bindings_json"),p=this.widgets?.find(m=>m.name==="lora_v3_config_json"),g=this.widgets?.find(m=>m.name==="detailer_v3_config_json");if(f&&Fr(f),p&&an(p),g&&an(g),Ws(this),Wh(this,ln(this)),d&&(Fr(d),!d.__bvRegionalDocumentHooked)){d.__bvRegionalDocumentHooked=!0;const m=d.callback;d.callback=function(){const _=m?.apply(this,arguments);return window.dispatchEvent(new CustomEvent(So)),_}}if(!this.widgets?.find(m=>m.name==="open_regional_editor")){const m=this.addWidget("button","open_regional_editor",null,()=>zr("regional",this),{serialize:!1});m.label="Open Regional Editor",m.serialize=!1}if(!this.widgets?.find(m=>m.name==="quick_edit_regional_prompts")){const m=this.addWidget("button","quick_edit_regional_prompts",null,()=>zr("quick",this),{serialize:!1});m.label="Quick Edit Prompts",m.serialize=!1}return Wa(this),Ml(this,[{direction:"output",name:"lora_bindings",type:"BV_REGIONAL_LORA_BINDINGS",guidance:"Use the BV_REGIONAL context output and v3 capability editors."}]),window.dispatchEvent(new CustomEvent(So)),u},e.prototype.onConfigure=function(){const u=i?.apply(this,arguments);Xd(Yd(this)),db(this,!1);const d=this.widgets?.find(g=>g.name==="lora_bindings_json"),f=this.widgets?.find(g=>g.name==="lora_v3_config_json"),p=this.widgets?.find(g=>g.name==="detailer_v3_config_json");return d&&Fr(d),f&&an(f),p&&an(p),Ws(this),Wh(this,ln(this)),Wa(this),Ml(this,[{direction:"output",name:"lora_bindings",type:"BV_REGIONAL_LORA_BINDINGS",guidance:"Use the BV_REGIONAL context output and v3 capability editors."}]),window.dispatchEvent(new CustomEvent(So)),u},e.prototype.onConnectionsChange=function(){const u=a?.apply(this,arguments);return queueMicrotask(()=>gi(this)),u},e.prototype.onDeselected=function(){const u=l?.apply(this,arguments);return Fh(this),u};const c=e.prototype.onRemoved;e.prototype.onRemoved=function(){const u=c?.apply(this,arguments);return window.dispatchEvent(new CustomEvent(So)),u}},afterConfigureGraph(){queueMicrotask(ti)}}); diff --git a/py/util/debug_bridge/__init__.py b/py/util/debug_bridge/__init__.py deleted file mode 100644 index 70e548d..0000000 --- a/py/util/debug_bridge/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from .service import DebugBridge, DebugBridgeError, debug_bridge - -__all__ = ["DebugBridge", "DebugBridgeError", "debug_bridge"] diff --git a/py/util/debug_bridge/routes.py b/py/util/debug_bridge/routes.py deleted file mode 100644 index 234058a..0000000 --- a/py/util/debug_bridge/routes.py +++ /dev/null @@ -1,65 +0,0 @@ -from __future__ import annotations - -import json - -from aiohttp import web -from server import PromptServer - -from .service import DebugBridgeError, debug_bridge - - -routes = PromptServer.instance.routes -_LOOPBACK_ADDRESSES = frozenset({"127.0.0.1", "::1", "localhost"}) - - -def _loopback_only(request: web.Request) -> None: - if request.remote not in _LOOPBACK_ADDRESSES: - raise web.HTTPForbidden(text="BV Debug Bridge accepts loopback requests only") - - -async def _json_body(request: web.Request) -> dict: - try: - body = await request.json() - except (json.JSONDecodeError, ValueError) as error: - raise web.HTTPBadRequest(text="Request body must be valid JSON") from error - if not isinstance(body, dict): - raise web.HTTPBadRequest(text="Request body must be a JSON object") - return body - - -@routes.get("/bv_nodepack/debug/status") -async def debug_status(request): - _loopback_only(request) - return web.json_response(debug_bridge.status()) - - -@routes.post("/bv_nodepack/debug/session") -async def debug_session(request): - _loopback_only(request) - body = await _json_body(request) - if set(body) != {"enabled"} or not isinstance(body["enabled"], bool): - raise web.HTTPBadRequest(text="Body must contain exactly one boolean enabled field") - return web.json_response(debug_bridge.set_enabled(body["enabled"])) - - -@routes.put("/bv_nodepack/debug/snapshot") -async def debug_snapshot_put(request): - _loopback_only(request) - body = await _json_body(request) - if not set(body).issubset({"prompt", "workflow_name"}) or "prompt" not in body: - raise web.HTTPBadRequest(text="Body must contain prompt and may contain workflow_name") - try: - result = debug_bridge.publish(body["prompt"], body.get("workflow_name", "")) - except DebugBridgeError as error: - raise web.HTTPConflict(text=str(error)) from error - return web.json_response(result) - - -@routes.get("/bv_nodepack/debug/snapshot") -async def debug_snapshot_get(request): - _loopback_only(request) - try: - result = debug_bridge.snapshot() - except DebugBridgeError as error: - raise web.HTTPConflict(text=str(error)) from error - return web.json_response(result) diff --git a/py/util/debug_bridge/service.py b/py/util/debug_bridge/service.py deleted file mode 100644 index 0761aa3..0000000 --- a/py/util/debug_bridge/service.py +++ /dev/null @@ -1,83 +0,0 @@ -from __future__ import annotations - -import copy -import hashlib -import json -from dataclasses import dataclass -from datetime import datetime, timezone -from typing import Any - - -MAX_SNAPSHOT_BYTES = 33_554_432 - - -class DebugBridgeError(ValueError): - pass - - -@dataclass(frozen=True) -class DebugSnapshot: - prompt: dict[str, Any] - revision: str - updated_at: str - workflow_name: str - - -class DebugBridge: - def __init__(self): - self._enabled = False - self._snapshot: DebugSnapshot | None = None - - def set_enabled(self, enabled: bool) -> dict[str, Any]: - self._enabled = bool(enabled) - if not self._enabled: - self._snapshot = None - return self.status() - - def publish(self, prompt: Any, workflow_name: Any = "") -> dict[str, Any]: - if not self._enabled: - raise DebugBridgeError("BV Debug Bridge is disabled") - if not isinstance(prompt, dict) or not prompt: - raise DebugBridgeError("prompt must be a non-empty object") - if any(not isinstance(node_id, str) or not isinstance(node, dict) for node_id, node in prompt.items()): - raise DebugBridgeError("prompt must map string node IDs to objects") - encoded = json.dumps(prompt, ensure_ascii=False, sort_keys=True, separators=(",", ":")).encode("utf-8") - if len(encoded) > MAX_SNAPSHOT_BYTES: - raise DebugBridgeError(f"prompt exceeds {MAX_SNAPSHOT_BYTES} bytes") - clean_prompt = json.loads(encoded.decode("utf-8")) - revision = hashlib.sha256(encoded).hexdigest() - name = str(workflow_name).strip()[:256] - self._snapshot = DebugSnapshot( - prompt=clean_prompt, - revision=revision, - updated_at=datetime.now(timezone.utc).isoformat(), - workflow_name=name, - ) - return self.status() - - def status(self) -> dict[str, Any]: - snapshot = self._snapshot - return { - "schema": "bv.debug_bridge.status", - "version": 1, - "enabled": self._enabled, - "snapshot_available": snapshot is not None, - "revision": snapshot.revision if snapshot else None, - "updated_at": snapshot.updated_at if snapshot else None, - "workflow_name": snapshot.workflow_name if snapshot else "", - "node_count": len(snapshot.prompt) if snapshot else 0, - } - - def snapshot(self) -> dict[str, Any]: - if not self._enabled: - raise DebugBridgeError("BV Debug Bridge is disabled") - if self._snapshot is None: - raise DebugBridgeError("No BV Debug Bridge snapshot is available") - return { - **self.status(), - "schema": "bv.debug_bridge.snapshot", - "prompt": copy.deepcopy(self._snapshot.prompt), - } - - -debug_bridge = DebugBridge() diff --git a/tests/control_center_layout.test.mjs b/tests/control_center_layout.test.mjs new file mode 100644 index 0000000..77335f9 --- /dev/null +++ b/tests/control_center_layout.test.mjs @@ -0,0 +1,48 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import {readFileSync} from "node:fs"; + +const portal=readFileSync(new URL("../ui/src/components/BVPortal.tsx",import.meta.url),"utf8"); +const editor=readFileSync(new URL("../ui/src/components/control/BVControlComponent.tsx",import.meta.url),"utf8"); +const row=readFileSync(new URL("../ui/src/components/control/BVControlRowComponent.tsx",import.meta.url),"utf8"); +const styles=readFileSync(new URL("../ui/src/index.css",import.meta.url),"utf8"); +const nodeIntegration=readFileSync(new URL("../ui/src/components/control/bv_control_center.ts",import.meta.url),"utf8"); +const entrypoint=readFileSync(new URL("../ui/src/index.tsx",import.meta.url),"utf8"); + +test("Control Center live controls use switch rows instead of bare checkboxes",()=>{ + assert.match(portal,/className="bv-control-live-row"/); + assert.match(portal,/{ + assert.match(portal,/]+storageId=/); + assert.match(portal,/selected:hasControls\?0:1/); +}); + +test("Control Center configuration owns a responsive editor layout",()=>{ + assert.match(editor,/className="bv-control-editor"/); + assert.match(editor,/]+label="Force active after releasing restrictions"/); + assert.match(row,/className="bv-control-card-header"/); + assert.match(row,/bv-control-assignment-row/); + assert.match(styles,/\.bv-control-editor\s*\{[^}]*grid-template-rows:auto minmax\(0,1fr\) auto/); + assert.match(styles,/@container bv-control-editor \(max-width:560px\)/); +}); + +test("Control Center node keeps conflict status after dynamic controls",()=>{ + assert.match(nodeIntegration,/function moveWidgetToEnd/); + assert.match(nodeIntegration,/moveWidgetToEnd\(node, CONTROL_STATUS_WIDGET\);/); +}); + +test("Regional legacy debug uses one setting and the native Ctrl Alt B command binding",()=>{ + assert.match(entrypoint,/name: "Enable BV Regional Legacy Debug Mode"/); + assert.match(entrypoint,/keybindings: \[\{commandId:LEGACY_DEBUG_COMMAND_ID,combo:\{key:"b",ctrl:true,alt:true\}\}\]/); + assert.match(entrypoint,/Default shortcut · change it in ComfyUI Settings → Shortcuts/); + assert.doesNotMatch(entrypoint,/name: "Show BV Regional Legacy Ports"/); +}); + +test("retired HTTP debug bridge is absent from the frontend",()=>{ + assert.doesNotMatch(entrypoint,/Debug Bridge|debug\/snapshot|debug\/session|publishDebugSnapshot/); +}); diff --git a/tests/test_debug_bridge.py b/tests/test_debug_bridge.py deleted file mode 100644 index 1139173..0000000 --- a/tests/test_debug_bridge.py +++ /dev/null @@ -1,38 +0,0 @@ -import unittest - -from py.util.debug_bridge.service import DebugBridge, DebugBridgeError - - -class DebugBridgeTests(unittest.TestCase): - def test_disabled_bridge_rejects_and_clears_snapshot(self): - bridge = DebugBridge() - with self.assertRaisesRegex(DebugBridgeError, "disabled"): - bridge.publish({"1": {"class_type": "Test"}}) - bridge.set_enabled(True) - bridge.publish({"1": {"class_type": "Test"}}, "Workflow") - self.assertTrue(bridge.status()["snapshot_available"]) - bridge.set_enabled(False) - self.assertFalse(bridge.status()["snapshot_available"]) - - def test_snapshot_is_validated_copied_and_fingerprinted(self): - bridge = DebugBridge() - bridge.set_enabled(True) - prompt = {"1": {"class_type": "Test", "inputs": {"text": "hello"}}} - status = bridge.publish(prompt, " Debug ") - prompt["1"]["inputs"]["text"] = "mutated" - snapshot = bridge.snapshot() - self.assertEqual(snapshot["prompt"]["1"]["inputs"]["text"], "hello") - self.assertEqual(status["workflow_name"], "Debug") - self.assertEqual(len(status["revision"]), 64) - - def test_snapshot_requires_string_node_ids_and_object_nodes(self): - bridge = DebugBridge() - bridge.set_enabled(True) - for invalid in ({}, {1: {}}, {"1": "node"}): - with self.subTest(invalid=invalid): - with self.assertRaises(DebugBridgeError): - bridge.publish(invalid) - - -if __name__ == "__main__": - unittest.main() diff --git a/ui/src/components/BVPortal.tsx b/ui/src/components/BVPortal.tsx index ea79290..ca14e77 100644 --- a/ui/src/components/BVPortal.tsx +++ b/ui/src/components/BVPortal.tsx @@ -1,6 +1,6 @@ import { FC, useEffect, useMemo, useState } from "react"; import BVControl from "./control/BVControlComponent"; -import { BvDockLayout, BvManagedWindow, Callout, CheckboxField, ResetLayoutButton } from "../ui"; +import { BvDockLayout, BvManagedWindow, Callout, ResetLayoutButton, ToggleField } from "../ui"; import { BVControlConfig, CONFIG_CHANGED_EVENT, readConfig, writeConfig } from "../util/control/configHandler"; interface IBVPortalProps { open:boolean; onClose:()=>void; hasControlNodes?:boolean } @@ -10,13 +10,16 @@ function ControlCenterLiveView(){ useEffect(()=>{const update=(event:Event)=>setConfig((event as CustomEvent).detail);window.addEventListener(CONFIG_CHANGED_EVENT,update);return()=>window.removeEventListener(CONFIG_CHANGED_EVENT,update)},[]); const toggle=(id:string,enabled:boolean)=>writeConfig({...config,controls:config.controls.map(control=>control.id===id?{...control,enabled}:control)}); if(!config.controls.length)return Create a control in Configuration before using live workflow states.; - return
{config.controls.map(control=>toggle(control.id,value)} />)}
; + return
{config.controls.map(control=>
+
{control.name}{control.assignments.length} assignment{control.assignments.length===1?"":"s"}
+ toggle(control.id,value)}/> +
)}
; } const BvPortal: FC = ({open,onClose,hasControlNodes=true}) => { const [layoutReset,setLayoutReset]=useState(0); const hasControls=readConfig().controls.length>0,defaultModel=useMemo(()=>({global:{tabEnableClose:false,tabEnableDrag:false,tabEnablePopout:false,tabEnablePopoutIcon:false,tabEnableFloat:false},borders:[],layout:{type:"row" as const,children:[{type:"tabset" as const,selected:hasControls?0:1,children:[{type:"tab" as const,id:"control-center-controls",name:"Controls",component:"controls",enableClose:false,enableDrag:false},{type:"tab" as const,id:"control-center-configuration",name:"Configuration",component:"configuration",enableClose:false,enableDrag:false}]}]}}),[hasControls]); - return setLayoutReset(value=>value+1)}/>}> + return setLayoutReset(value=>value+1)}/>}> {!hasControlNodes&&The workflow configuration is still available. Closing this window makes it unavailable until a Control Center node is added.} },{id:"configuration",title:"Configuration",weight:1,content:}]}/> ; diff --git a/ui/src/components/control/BVControlComponent.tsx b/ui/src/components/control/BVControlComponent.tsx index ed132b7..2ded9c6 100644 --- a/ui/src/components/control/BVControlComponent.tsx +++ b/ui/src/components/control/BVControlComponent.tsx @@ -5,7 +5,7 @@ import { collectAllGroups } from "../../util/control/collector"; import { BVControl, BVControlConfig, CONFIG_CHANGED_EVENT, readConfig, writeConfig } from "../../util/control/configHandler"; import { findActiveControlConflicts } from "../../util/control/controlCenterModel.js"; import BVControlRowComponent from "./BVControlRowComponent"; -import { Badge, Button, CheckboxField, SortableList, type SortableItem } from "../../ui/components"; +import { Badge, Button, SortableList, ToggleField, type SortableItem } from "../../ui/components"; import { useBvHistory, useBvHistoryShortcuts } from "../../ui/history"; function id() { @@ -41,10 +41,13 @@ const BVControlComponent: FC = () => { setConfig({ ...config, controls: [...config.controls, { id: id(), name, enabled: true, assignments: [] }] }); }; const items:SortableItem[]=config.controls.map((control,index)=>({id:control.id,title:control.name||"Unnamed control",description:`${control.assignments.length} assignment${control.assignments.length===1?"":"s"}`,content:updateControl(index,value)}/>})); - return
- setConfig({...config,forceActive})}/> + return
+
+
Release behaviorChoose whether controls become active again when restrictions are released.
+ setConfig({...config,forceActive})}/> +
setConfig({...config,controls:ordered.map(item=>config.controls.find(control=>control.id===item.id)!).filter(Boolean)})} onRemove={controlId=>setConfig({...config,controls:config.controls.filter(control=>control.id!==controlId)})}/>
-
Autosaved
+
Autosaved
; }; diff --git a/ui/src/components/control/BVControlRowComponent.tsx b/ui/src/components/control/BVControlRowComponent.tsx index c4df51f..2fc12bb 100644 --- a/ui/src/components/control/BVControlRowComponent.tsx +++ b/ui/src/components/control/BVControlRowComponent.tsx @@ -13,7 +13,7 @@ const BVControlRowComponent: FC<{ control: BVControl; groups: CollectedGroup[]; onChange({ ...control, assignments: [...control.assignments, { groupId, groupPath: group.pathLabel, groupTitle: String(group.group.title || ""), action: "bypass" }] }); }; return
-
onChange({...control,name})}/>{control.assignments.length} groups
+
onChange({...control,name})}/>{control.assignments.length} group{control.assignments.length===1?"":"s"}
{control.assignments.map((assignment, index) => { const conflict = conflicts.find((item) => item.groupId === assignment.groupId); const winnerNames = conflict?.entries.filter((entry) => entry.action === conflict.winnerAction).map((entry) => entry.controlName).join(", "); @@ -22,13 +22,13 @@ const BVControlRowComponent: FC<{ control: BVControl; groups: CollectedGroup[]; ? `Overrides ${[...new Set(conflict.entries.filter((entry) => entry.action !== conflict.winnerAction).map((entry) => actionLabel(entry.action)))].join(", ")}` : `Overridden by ${actionLabel(conflict.winnerAction)} from ${winnerNames}` : ""; - return
- {assignment.unresolved ? "⚠ " : ""}{assignment.groupPath}{conflictText && ⚠ {conflictText}} + return
+
{assignment.unresolved ? "⚠ " : ""}{assignment.groupPath}{conflictText && ⚠ {conflictText}}
onChange({...control,assignments:control.assignments.map((item,itemIndex)=>itemIndex===index?{...item,action:action as BVControlAction}:item)})}/>
; })}
- ({value:group.id,label:group.pathLabel}))]}/> +
({value:group.id,label:group.pathLabel}))]}/>
; }; diff --git a/ui/src/components/control/bv_control_center.ts b/ui/src/components/control/bv_control_center.ts index ee2d926..58b44c7 100644 --- a/ui/src/components/control/bv_control_center.ts +++ b/ui/src/components/control/bv_control_center.ts @@ -108,6 +108,15 @@ function syncConflictStatus(node: any, config: BVControlConfig) { widget.tooltip = conflicts.map((conflict: any) => `${conflict.groupPath}: ${conflict.winnerAction} wins`).join("\n"); } +function moveWidgetToEnd(node: any, name: string) { + const widgets = node.widgets; + if (!Array.isArray(widgets)) return; + const index = widgets.findIndex((widget: any) => widget.name === name); + if (index < 0 || index === widgets.length - 1) return; + const [widget] = widgets.splice(index, 1); + widgets.push(widget); +} + function syncNode(node: any, config: BVControlConfig) { node.mode = NORMAL; if (node.properties) delete node.properties[BASE_MODE]; @@ -161,6 +170,9 @@ function syncNode(node: any, config: BVControlConfig) { configWidget.computeSize = () => [0, -4]; configWidget.serializeValue = () => JSON.stringify(configForValidation(readConfig())); } + // Dynamic control widgets are appended by ComfyUI. Reassert the status row + // after every reconciliation so it remains the final row on the node. + moveWidgetToEnd(node, CONTROL_STATUS_WIDGET); node.serialize_widgets = true; const currentSize = node.size ?? [0, 0]; const computedSize = node.computeSize?.() ?? currentSize; diff --git a/ui/src/index.css b/ui/src/index.css index e9d6355..32fef57 100644 --- a/ui/src/index.css +++ b/ui/src/index.css @@ -160,20 +160,31 @@ .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, .bv-rack footer { 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:rgba(255,255,255,.035); } -.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-control-editor { container:bv-control-editor / inline-size; display:grid; grid-template-rows:auto minmax(0,1fr) auto; gap:calc(12px * var(--bv-ui-scale)); width:100%; height:100%; min-width:0; min-height:0; padding:calc(12px * var(--bv-ui-scale)); overflow:hidden; } +.bv-control-editor-settings { display:grid; grid-template-columns:minmax(0,1fr) minmax(260px,auto); align-items:center; gap:calc(16px * var(--bv-ui-scale)); padding:calc(12px * var(--bv-ui-scale)); background:rgba(255,255,255,.03); border:1px solid var(--bv-ui-border); border-radius:var(--bv-ui-radius-lg); } +.bv-control-editor-settings>div { display:grid; gap:3px; }.bv-control-editor-settings>div>span { color:var(--bv-ui-muted); font-size:calc(10px * var(--bv-ui-scale)); } +.bv-controls { min-height:0; overflow:auto; padding-right:4px; } +.bv-control-card { display:grid; gap:calc(12px * var(--bv-ui-scale)); border:1px solid var(--bv-ui-border); border-radius:var(--bv-ui-radius-lg); padding:calc(12px * var(--bv-ui-scale)); background:rgba(255,255,255,.035); } +.bv-control-card-header { display:grid; grid-template-columns:minmax(0,1fr) auto; align-items:end; gap:calc(12px * var(--bv-ui-scale)); } +.bv-control-card-header>span { align-self:center; color:var(--bv-ui-muted); white-space:nowrap; } +.bv-assignments { display:grid; gap:calc(8px * var(--bv-ui-scale)); } +.bv-control-assignment-row { display:grid; grid-template-columns:minmax(0,1fr) minmax(150px,220px) auto; align-items:end; gap:calc(10px * var(--bv-ui-scale)); padding:calc(9px * var(--bv-ui-scale)); background:rgba(0,0,0,.12); border:1px solid transparent; border-radius:var(--bv-ui-radius); } +.bv-control-assignment-target { display:grid; align-self:center; gap:3px; min-width:0; }.bv-control-assignment-target strong { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }.bv-control-assignment-target small { color:#ffbd66; } +.bv-control-assignment-row.conflict { border-left-color:#ffbd66; }.bv-control-assignment-row.unresolved { color:#ff9f7a; border-left-color:#ff9f7a; } +.bv-control-add-group { padding-top:calc(10px * var(--bv-ui-scale)); border-top:1px solid var(--bv-ui-border); } +.bv-control-editor-footer { padding-top:calc(10px * var(--bv-ui-scale)); } +.bv-control-live-list { container:bv-control-live-list / inline-size; display:grid; align-content:start; gap:calc(9px * var(--bv-ui-scale)); width:100%; height:100%; min-width:0; min-height:0; padding:calc(12px * var(--bv-ui-scale)); overflow:auto; } +.bv-control-live-row { display:grid; grid-template-columns:minmax(0,1fr) auto; align-items:center; gap:calc(16px * var(--bv-ui-scale)); padding:calc(12px * var(--bv-ui-scale)); background:rgba(255,255,255,.035); border:1px solid var(--bv-ui-border); border-radius:var(--bv-ui-radius-lg); } +.bv-control-live-copy { display:grid; gap:3px; min-width:0; }.bv-control-live-copy strong { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }.bv-control-live-copy span { color:var(--bv-ui-muted); font-size:calc(10px * var(--bv-ui-scale)); } +.bv-control-live-toggle-field { width:max-content; max-width:100%; justify-self:end; }.bv-control-live-toggle-field>.bv-control-label { display:none; }.bv-control-live-toggle-field>.bv-toggle { max-width:100%; white-space:nowrap; } +.bv-legacy-shortcut-info { display:flex; align-items:center; justify-content:flex-end; gap:6px; min-width:0; color:var(--bv-ui-muted); }.bv-legacy-shortcut-info kbd { padding:3px 7px; color:var(--bv-ui-text); background:var(--bv-ui-input); border:1px solid var(--bv-ui-border); border-radius:var(--bv-ui-radius-sm); box-shadow:inset 0 -1px rgba(255,255,255,.05); }.bv-legacy-shortcut-info small { margin-left:6px; } +@container bv-control-editor (max-width:560px) { .bv-control-editor-settings,.bv-control-card-header { grid-template-columns:1fr; align-items:stretch; }.bv-control-assignment-row { grid-template-columns:minmax(0,1fr) auto; }.bv-control-assignment-target { grid-column:1/-1; }.bv-control-editor-footer { justify-content:flex-start; } } +@container bv-control-live-list (max-width:420px) { .bv-control-live-row { grid-template-columns:1fr; }.bv-control-live-toggle-field { justify-self:start; } } .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); } diff --git a/ui/src/index.tsx b/ui/src/index.tsx index f68971b..ecef1b4 100644 --- a/ui/src/index.tsx +++ b/ui/src/index.tsx @@ -33,7 +33,7 @@ import { compactLoraConsumerNode, hideLoraV3Widget, installLoraV3ConsumerSlot, i import LoraV3EditorWindow from "./regional/LoraV3EditorWindow"; import { installM0CanvasVisibility, requestM0DebugAnimation } from "./regional/m0VisualProjection"; import { migrateRegionalNode, migrationReportMessage, queueRegionalMigrationReport, regionalEditorDraft, REGIONAL_MIGRATION_EVENT, REGIONAL_VALIDATION_EVENT } from "./regional/milestoneE"; -import { clearLegacyPortSticky, installLegacyPorts, legacyPortDescriptors, legacyUsage, refreshLegacyPorts, setLegacyPortsVisible, SHOW_LEGACY_PORTS_SETTING_ID, toggleLegacyDebugVisible } from "./regional/legacyPorts"; +import { clearLegacyPortSticky, installLegacyPorts, legacyDebugVisible, LEGACY_DEBUG_COMMAND_ID, LEGACY_DEBUG_SETTING_ID, legacyPortDescriptors, legacyUsage, refreshLegacyPorts, setLegacyDebugVisible } from "./regional/legacyPorts"; 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, collectScopedNodes, dismissBvToast, lastBvFullWindowType, lastBvWindowInstance, rememberBvWindowInstance, setWindowMenuVisible, showBvToast, switchBvView, toggleToolbarWindowLauncher, ToolbarWindowLauncher, ToolbarLauncherColumn, windowMenuVisible } from "./ui"; const comfyApp = getApp(); @@ -49,46 +49,6 @@ const OPEN_REGIONAL_EDITOR_EVENT = "bv-open-regional-editor"; const OPEN_REGIONAL_QUICK_EDIT_EVENT = "bv-open-regional-quick-edit"; const REGIONAL_DOCUMENT_CHANGED_EVENT = "bv-regional-document-changed"; const STYLE_ID = "bv-nodepack-styles"; -const DEBUG_BRIDGE_SETTING_ID = "BV.DebugBridge.Enabled"; -let debugBridgeEnabled = false; -let debugBridgePublishTimer: number | null = null; - -const debugWorkflowName = () => { - const workflow = (comfyApp as any).extensionManager?.workflow?.activeWorkflow - ?? (comfyApp as any).workflowManager?.activeWorkflow; - return String(workflow?.filename ?? workflow?.path ?? "Current workflow"); -}; - -const setDebugBridgeSession = async (enabled: boolean) => { - debugBridgeEnabled = Boolean(enabled); - const response = await fetch(comfyApi.apiURL("/bv_nodepack/debug/session"), { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ enabled: debugBridgeEnabled }), - }); - if (!response.ok) throw new Error(`BV Debug Bridge session failed: ${response.status} ${await response.text()}`); -}; - -const publishDebugSnapshot = async () => { - if (!debugBridgeEnabled) return false; - const prompt = await (comfyApp as any).graphToPrompt(); - const response = await fetch(comfyApi.apiURL("/bv_nodepack/debug/snapshot"), { - method: "PUT", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ prompt: prompt.output, workflow_name: debugWorkflowName() }), - }); - if (!response.ok) throw new Error(`BV Debug Bridge snapshot failed: ${response.status} ${await response.text()}`); - return true; -}; - -const scheduleDebugSnapshot = () => { - if (!debugBridgeEnabled) return; - if (debugBridgePublishTimer != null) window.clearTimeout(debugBridgePublishTimer); - debugBridgePublishTimer = window.setTimeout(() => { - debugBridgePublishTimer = null; - publishDebugSnapshot().catch(error => console.error(error)); - }, 600); -}; const hideRegionalWidget = (widget: any) => { widget.type = "converted-widget"; @@ -602,13 +562,8 @@ comfyApp.registerExtension({ ensureMountedOnce(); installM0CanvasVisibility((comfyApp as any).canvas); applyUiPreferences((comfyApp as any).ui?.settings); - setLegacyPortsVisible(Boolean((comfyApp as any).ui?.settings?.getSettingValue?.(SHOW_LEGACY_PORTS_SETTING_ID, false)),(comfyApp as any).graph); + setLegacyDebugVisible(Boolean((comfyApp as any).ui?.settings?.getSettingValue?.(LEGACY_DEBUG_SETTING_ID, false)),(comfyApp as any).graph); installGlobalTextareaCompletion(); - debugBridgeEnabled = Boolean((comfyApp as any).ui?.settings?.getSettingValue?.(DEBUG_BRIDGE_SETTING_ID, false)); - setDebugBridgeSession(debugBridgeEnabled) - .then(() => { if (debugBridgeEnabled) scheduleDebugSnapshot(); }) - .catch(error => console.error(error)); - comfyApi.addEventListener("graphChanged", scheduleDebugSnapshot); comfyApi.addEventListener("graphChanged", refreshBvToolbarCapabilities); }, }); @@ -649,25 +604,29 @@ comfyApp.registerExtension({ tooltip: "Choose whether changing the node in a BV editor minimizes or closes the current window. Hold Shift to invert the mode once.", onChange: (value: string) => setWindowSwitchMode(value, false), }, { - id: SHOW_LEGACY_PORTS_SETTING_ID as any, - name: "Show BV Regional Legacy Ports", + id: LEGACY_DEBUG_SETTING_ID as any, + name: "Enable BV Regional Legacy Debug Mode", type: "boolean", defaultValue: false, - category: ["BV Node Pack", "Regional", "Show Legacy ports"], - tooltip: "Temporarily reveal every deprecated BV Regional port in the active workflow.", - onChange: (value: boolean) => setLegacyPortsVisible(Boolean(value),(comfyApp as any).graph), - }, { - id: DEBUG_BRIDGE_SETTING_ID as any, - name: "Enable BV Debug Bridge", - type: "boolean", - defaultValue: false, - category: ["BV Node Pack", "Developer", "Enable Debug Bridge"], - tooltip: "Expose the current API-format workflow as an in-memory snapshot to loopback clients only.", + category: ["BV Node Pack", "Regional", "Legacy debug mode"], + tooltip: "Reveal deprecated Regional ports, legacy nodes and hidden provider wiring for debugging.", onChange: (value: boolean) => { - setDebugBridgeSession(Boolean(value)) - .then(() => { if (value) scheduleDebugSnapshot(); }) - .catch(error => console.error(error)); + const canvas=(comfyApp as any).canvas; + setLegacyDebugVisible(Boolean(value),canvas?.graph??(comfyApp as any).graph); + if(value)requestM0DebugAnimation(canvas); }, + }, { + id: "BV.Regional.LegacyDebugShortcutInfo" as any, + name: "Legacy Debug Shortcut", + type: (_name:string) => { + const host=document.createElement("div"); + host.className="bv-legacy-shortcut-info"; + host.innerHTML="Ctrl+Alt+BDefault shortcut · change it in ComfyUI Settings → Shortcuts"; + return host; + }, + defaultValue: "Ctrl+Alt+B", + category: ["BV Node Pack", "Regional", "Legacy debug shortcut"], + tooltip: "The effective binding is managed by ComfyUI's native Shortcuts menu.", }, { id: COMPLETION_SETTING_ID as any, name: "Enable BV Prompt Autocomplete", @@ -694,25 +653,23 @@ comfyApp.registerExtension({ tooltip: "Choose one or more local CSV/TSV datasets for BV Prompt Autocomplete.", onChange: (value: string) => applyCompletionDatasetSetting(value), }], + keybindings: [{commandId:LEGACY_DEBUG_COMMAND_ID,combo:{key:"b",ctrl:true,alt:true}}], commands: [{ id: "bv.regional.openEditor", label: "Open BV Regional Editor", icon: "icon-[lucide--layers]", function: () => { window.dispatchEvent(new CustomEvent(OPEN_REGIONAL_EDITOR_EVENT)); }, }, { - id: "bv.regional.toggleDebugWiring", + id: LEGACY_DEBUG_COMMAND_ID, label: "Toggle BV Regional Legacy wiring debug", icon: "icon-[lucide--workflow]", function: () => { - const canvas=(comfyApp as any).canvas,active=toggleLegacyDebugVisible(canvas?.graph??(comfyApp as any).graph); - if(active)requestM0DebugAnimation(canvas); + const canvas=(comfyApp as any).canvas,active=!legacyDebugVisible(); + const settings=(comfyApp as any).ui?.settings; + settings?.setSettingValue?.(LEGACY_DEBUG_SETTING_ID,active); + if(!settings?.setSettingValue)setLegacyDebugVisible(active,canvas?.graph??(comfyApp as any).graph); showBvToast({id:"bv-regional-debug-wiring",title:`Regional wiring debug ${active?"enabled":"disabled"}`,message:active?"Legacy ports and hidden V3 provider links are visible for this UI session.":"Legacy ports and V3 provider links returned to their normal presentation.",tone:"info",duration:3500}); }, - }, { - id: "bv.debugBridge.publishSnapshot", - label: "Refresh BV Debug Bridge Snapshot", - icon: "icon-[lucide--radio-tower]", - function: () => publishDebugSnapshot().catch(error => console.error(error)), }], actionBarButtons: [{ icon: "icon-[lucide--sliders-horizontal]", @@ -978,7 +935,6 @@ comfyApp.registerExtension({ }; }, afterConfigureGraph() { - scheduleDebugSnapshot(); queueMicrotask(refreshBvToolbarCapabilities); }, }); diff --git a/ui/src/regional/legacyPorts.ts b/ui/src/regional/legacyPorts.ts index 2a049fa..b86f9d7 100644 --- a/ui/src/regional/legacyPorts.ts +++ b/ui/src/regional/legacyPorts.ts @@ -1,4 +1,6 @@ export const SHOW_LEGACY_PORTS_SETTING_ID="BV.Regional.ShowLegacyPorts"; +export const LEGACY_DEBUG_SETTING_ID="BV.Regional.LegacyDebugMode"; +export const LEGACY_DEBUG_COMMAND_ID="bv.regional.toggleDebugWiring"; export const LEGACY_USAGE_EVENT="bv-regional-legacy-usage"; // BV-LEGACY(marked=2026-08-25, remove-after=2026-10-25): Entire Regional sidecar-port UX. diff --git a/ui/src/ui/components/forms.tsx b/ui/src/ui/components/forms.tsx index b589be0..79fa427 100644 --- a/ui/src/ui/components/forms.tsx +++ b/ui/src/ui/components/forms.tsx @@ -59,7 +59,7 @@ export function RichSelect({label,value,options,onValue,help}:{label:string;valu return
setOpen(false)} className="bv-rich-select-menu" matchWidth>
{options.map(option=>)}
; } export function CheckboxField({label,checked,onValue,help,disabled}:{label:string;checked:boolean;onValue:(value:boolean)=>void;help?:ReactNode;disabled?:boolean}) { return ; } -export function ToggleField({label,value,onValue,trueLabel="True",falseLabel="False",help}:{label:string;value:boolean;onValue:(value:boolean)=>void;trueLabel?:string;falseLabel?:string;help?:ReactNode}) { return ; } +export function ToggleField({label,value,onValue,trueLabel="True",falseLabel="False",help,className=""}:{label:string;value:boolean;onValue:(value:boolean)=>void;trueLabel?:string;falseLabel?:string;help?:ReactNode;className?:string}) { return ; } export function BooleanField({variant="toggle",...props}:{variant?:"toggle"|"checkbox"|"select";label:string;value:boolean;onValue:(value:boolean)=>void;trueLabel?:string;falseLabel?:string;help?:ReactNode}) { if(variant==="checkbox")return ;if(variant==="select")return props.onValue(v==="true")} help={props.help} options={[{value:"true",label:props.trueLabel??"True"},{value:"false",label:props.falseLabel??"False"}]}/>;return ; } export function OptionSet({label,value,options,onValue,variant="radio"}:{label:string;value:string;options:SelectOption[];onValue:(value:string)=>void;variant?:"radio"|"segmented"|"select"}) { if(variant==="select")return ;return
{options.map(option=>)}
; }