From c59c1acc16215d5e629cbc4fdbbcfea2b3e4a99d Mon Sep 17 00:00:00 2001 From: BlackVortexAI Date: Sun, 23 Aug 2026 12:42:33 +0200 Subject: [PATCH] Release BV NodePack 0.18.1 --- README.md | 9 ++++ js/bv_nodepack.core.js | 48 +++++++++++----------- pyproject.toml | 2 +- tests/completion_global_adapter.test.mjs | 11 +++++ tests/completion_position.test.mjs | 44 ++++++++++++++++++++ tests/regional_interaction.test.mjs | 9 +++- tests/ui_control_integration.test.mjs | 15 +++++++ ui/package-lock.json | 4 +- ui/package.json | 2 +- ui/src/completion/CompletionPopup.tsx | 10 +++-- ui/src/completion/PromptTextarea.tsx | 25 ++++++++++- ui/src/completion/globalTextareaAdapter.ts | 10 +++-- ui/src/completion/position.ts | 13 ++++-- ui/src/index.css | 8 ++-- ui/src/regional/RegionalEditor.tsx | 13 ++++-- ui/src/regional/interaction.ts | 4 ++ 16 files changed, 179 insertions(+), 48 deletions(-) create mode 100644 tests/completion_position.test.mjs diff --git a/README.md b/README.md index 21deb0d..730fbbb 100644 --- a/README.md +++ b/README.md @@ -1208,6 +1208,15 @@ Technical references: ## Changelog +### 2026-08-23 — v0.18.1 + +- Restore pointer interaction for every Regional Editor drawing tool after the + shared BV toolbar migration. +- Close polygon drawings by clicking the initial point once at least three + vertices have been placed. +- Fix autocomplete styling and caret-relative placement in long, scrolled or + transformed text areas, and refresh suggestions when the cursor moves. + ### 2026-08-22 — v0.18.0 - Move Smart Pipe and Smart Pipe Merge configuration into the shared BV window diff --git a/js/bv_nodepack.core.js b/js/bv_nodepack.core.js index 6d63f94..05821ac 100644 --- a/js/bv_nodepack.core.js +++ b/js/bv_nodepack.core.js @@ -1,4 +1,4 @@ -var jm=Object.defineProperty;var Pm=(e,t,o)=>t in e?jm(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var O=(e,t,o)=>Pm(e,typeof t!="symbol"?t+"":t,o);import{app as Bm}from"../../scripts/app.js";import{api as zm}from"../../scripts/api.js";var co=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Fm(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var lh={exports:{}},Zl={},sh={exports:{}},me={};/** +var Im=Object.defineProperty;var Pm=(e,t,o)=>t in e?Im(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var A=(e,t,o)=>Pm(e,typeof t!="symbol"?t+"":t,o);import{app as Bm}from"../../scripts/app.js";import{api as zm}from"../../scripts/api.js";var co=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Fm(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var lh={exports:{}},Ql={},sh={exports:{}},me={};/** * @license React * react.production.min.js * @@ -6,7 +6,7 @@ var jm=Object.defineProperty;var Pm=(e,t,o)=>t in e?jm(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 la=Symbol.for("react.element"),Um=Symbol.for("react.portal"),Wm=Symbol.for("react.fragment"),Vm=Symbol.for("react.strict_mode"),Hm=Symbol.for("react.profiler"),$m=Symbol.for("react.provider"),Ym=Symbol.for("react.context"),Xm=Symbol.for("react.forward_ref"),Gm=Symbol.for("react.suspense"),Km=Symbol.for("react.memo"),qm=Symbol.for("react.lazy"),Qu=Symbol.iterator;function Jm(e){return e===null||typeof e!="object"?null:(e=Qu&&e[Qu]||e["@@iterator"],typeof e=="function"?e:null)}var ch={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},dh=Object.assign,uh={};function Xn(e,t,o){this.props=e,this.context=t,this.refs=uh,this.updater=o||ch}Xn.prototype.isReactComponent={};Xn.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")};Xn.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function fh(){}fh.prototype=Xn.prototype;function Cd(e,t,o){this.props=e,this.context=t,this.refs=uh,this.updater=o||ch}var Nd=Cd.prototype=new fh;Nd.constructor=Cd;dh(Nd,Xn.prototype);Nd.isPureReactComponent=!0;var ef=Array.isArray,ph=Object.prototype.hasOwnProperty,Od={current:null},hh={key:!0,ref:!0,__self:!0,__source:!0};function gh(e,t,o){var r,n={},i=null,a=null;if(t!=null)for(r in t.ref!==void 0&&(a=t.ref),t.key!==void 0&&(i=""+t.key),t)ph.call(t,r)&&!hh.hasOwnProperty(r)&&(n[r]=t[r]);var l=arguments.length-2;if(l===1)n.children=o;else if(1t in e?jm(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 ox=m,rx=Symbol.for("react.element"),nx=Symbol.for("react.fragment"),ix=Object.prototype.hasOwnProperty,ax=ox.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,lx={key:!0,ref:!0,__self:!0,__source:!0};function vh(e,t,o){var r,n={},i=null,a=null;o!==void 0&&(i=""+o),t.key!==void 0&&(i=""+t.key),t.ref!==void 0&&(a=t.ref);for(r in t)ix.call(t,r)&&!lx.hasOwnProperty(r)&&(n[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps,t)n[r]===void 0&&(n[r]=t[r]);return{$$typeof:rx,type:e,key:i,ref:a,props:n,_owner:ax.current}}Zl.Fragment=nx;Zl.jsx=vh;Zl.jsxs=vh;lh.exports=Zl;var s=lh.exports,bc={},mh={exports:{}},Jt={},xh={exports:{}},yh={};/** + */var ox=m,rx=Symbol.for("react.element"),nx=Symbol.for("react.fragment"),ix=Object.prototype.hasOwnProperty,ax=ox.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,lx={key:!0,ref:!0,__self:!0,__source:!0};function vh(e,t,o){var r,n={},i=null,a=null;o!==void 0&&(i=""+o),t.key!==void 0&&(i=""+t.key),t.ref!==void 0&&(a=t.ref);for(r in t)ix.call(t,r)&&!lx.hasOwnProperty(r)&&(n[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps,t)n[r]===void 0&&(n[r]=t[r]);return{$$typeof:rx,type:e,key:i,ref:a,props:n,_owner:ax.current}}Ql.Fragment=nx;Ql.jsx=vh;Ql.jsxs=vh;lh.exports=Ql;var s=lh.exports,bc={},mh={exports:{}},Jt={},xh={exports:{}},yh={};/** * @license React * scheduler.production.min.js * @@ -22,7 +22,7 @@ var jm=Object.defineProperty;var Pm=(e,t,o)=>t in e?jm(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,V){var F=A.length;A.push(V);e:for(;0>>1,Y=A[ne];if(0>>1;nen($,F))Qn(re,$)?(A[ne]=re,A[Q]=F,ne=Q):(A[ne]=$,A[Z]=F,ne=Z);else if(Qn(re,F))A[ne]=re,A[Q]=F,ne=Q;else break e}}return V}function n(A,V){var F=A.sortIndex-V.sortIndex;return F!==0?F:A.id-V.id}if(typeof performance=="object"&&typeof performance.now=="function"){var i=performance;e.unstable_now=function(){return i.now()}}else{var a=Date,l=a.now();e.unstable_now=function(){return a.now()-l}}var c=[],d=[],f=1,u=null,p=3,g=!1,x=!1,w=!1,k=typeof setTimeout=="function"?setTimeout:null,b=typeof clearTimeout=="function"?clearTimeout:null,h=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function v(A){for(var V=o(d);V!==null;){if(V.callback===null)r(d);else if(V.startTime<=A)r(d),V.sortIndex=V.expirationTime,t(c,V);else break;V=o(d)}}function _(A){if(w=!1,v(A),!x)if(o(c)!==null)x=!0,S(y);else{var V=o(d);V!==null&&N(_,V.startTime-A)}}function y(A,V){x=!1,w&&(w=!1,b(P),P=-1),g=!0;var F=p;try{for(v(V),u=o(c);u!==null&&(!(u.expirationTime>V)||A&&!z());){var ne=u.callback;if(typeof ne=="function"){u.callback=null,p=u.priorityLevel;var Y=ne(u.expirationTime<=V);V=e.unstable_now(),typeof Y=="function"?u.callback=Y:u===o(c)&&r(c),v(V)}else r(c);u=o(c)}if(u!==null)var K=!0;else{var Z=o(d);Z!==null&&N(_,Z.startTime-V),K=!1}return K}finally{u=null,p=F,g=!1}}var E=!1,R=null,P=-1,I=5,B=-1;function z(){return!(e.unstable_now()-BA||125ne?(A.sortIndex=F,t(d,A),o(c)===null&&A===o(d)&&(w?(b(P),P=-1):w=!0,N(_,F-ne))):(A.sortIndex=Y,t(c,A),x||g||(x=!0,S(y))),A},e.unstable_shouldYield=z,e.unstable_wrapCallback=function(A){var V=p;return function(){var F=p;p=V;try{return A.apply(this,arguments)}finally{p=F}}}})(yh);xh.exports=yh;var sx=xh.exports;/** + */(function(e){function t(M,V){var F=M.length;M.push(V);e:for(;0>>1,Y=M[ne];if(0>>1;nen($,F))Qn(re,$)?(M[ne]=re,M[Q]=F,ne=Q):(M[ne]=$,M[Z]=F,ne=Z);else if(Qn(re,F))M[ne]=re,M[Q]=F,ne=Q;else break e}}return V}function n(M,V){var F=M.sortIndex-V.sortIndex;return F!==0?F:M.id-V.id}if(typeof performance=="object"&&typeof performance.now=="function"){var i=performance;e.unstable_now=function(){return i.now()}}else{var a=Date,l=a.now();e.unstable_now=function(){return a.now()-l}}var c=[],d=[],f=1,u=null,p=3,g=!1,x=!1,w=!1,E=typeof setTimeout=="function"?setTimeout:null,b=typeof clearTimeout=="function"?clearTimeout:null,h=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function v(M){for(var V=o(d);V!==null;){if(V.callback===null)r(d);else if(V.startTime<=M)r(d),V.sortIndex=V.expirationTime,t(c,V);else break;V=o(d)}}function _(M){if(w=!1,v(M),!x)if(o(c)!==null)x=!0,R(y);else{var V=o(d);V!==null&&O(_,V.startTime-M)}}function y(M,V){x=!1,w&&(w=!1,b(B),B=-1),g=!0;var F=p;try{for(v(V),u=o(c);u!==null&&(!(u.expirationTime>V)||M&&!z());){var ne=u.callback;if(typeof ne=="function"){u.callback=null,p=u.priorityLevel;var Y=ne(u.expirationTime<=V);V=e.unstable_now(),typeof Y=="function"?u.callback=Y:u===o(c)&&r(c),v(V)}else r(c);u=o(c)}if(u!==null)var K=!0;else{var Z=o(d);Z!==null&&O(_,Z.startTime-V),K=!1}return K}finally{u=null,p=F,g=!1}}var T=!1,L=null,B=-1,C=5,j=-1;function z(){return!(e.unstable_now()-jM||125ne?(M.sortIndex=F,t(d,M),o(c)===null&&M===o(d)&&(w?(b(B),B=-1):w=!0,O(_,F-ne))):(M.sortIndex=Y,t(c,M),x||g||(x=!0,R(y))),M},e.unstable_shouldYield=z,e.unstable_wrapCallback=function(M){var V=p;return function(){var F=p;p=V;try{return M.apply(this,arguments)}finally{p=F}}}})(yh);xh.exports=yh;var sx=xh.exports;/** * @license React * react-dom.production.min.js * @@ -30,18 +30,18 @@ var jm=Object.defineProperty;var Pm=(e,t,o)=>t in e?jm(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 cx=m,qt=sx;function G(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,o=1;o"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),vc=Object.prototype.hasOwnProperty,dx=/^[: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]*$/,of={},rf={};function ux(e){return vc.call(rf,e)?!0:vc.call(of,e)?!1:dx.test(e)?rf[e]=!0:(of[e]=!0,!1)}function fx(e,t,o,r){if(o!==null&&o.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:o!==null?!o.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function px(e,t,o,r){if(t===null||typeof t>"u"||fx(e,t,o,r))return!0;if(r)return!1;if(o!==null)switch(o.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function At(e,t,o,r,n,i,a){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=n,this.mustUseProperty=o,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=a}var vt={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){vt[e]=new At(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];vt[t]=new At(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){vt[e]=new At(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){vt[e]=new At(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){vt[e]=new At(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){vt[e]=new At(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){vt[e]=new At(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){vt[e]=new At(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){vt[e]=new At(e,5,!1,e.toLowerCase(),null,!1,!1)});var Dd=/[\-:]([a-z])/g;function Md(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(Dd,Md);vt[t]=new At(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Dd,Md);vt[t]=new At(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Dd,Md);vt[t]=new At(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){vt[e]=new At(e,1,!1,e.toLowerCase(),null,!1,!1)});vt.xlinkHref=new At("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){vt[e]=new At(e,1,!1,e.toLowerCase(),null,!0,!0)});function Id(e,t,o,r){var n=vt.hasOwnProperty(t)?vt[t]:null;(n!==null?n.type!==0:r||!(2"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),vc=Object.prototype.hasOwnProperty,dx=/^[: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]*$/,of={},rf={};function ux(e){return vc.call(rf,e)?!0:vc.call(of,e)?!1:dx.test(e)?rf[e]=!0:(of[e]=!0,!1)}function fx(e,t,o,r){if(o!==null&&o.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:o!==null?!o.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function px(e,t,o,r){if(t===null||typeof t>"u"||fx(e,t,o,r))return!0;if(r)return!1;if(o!==null)switch(o.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function At(e,t,o,r,n,i,a){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=n,this.mustUseProperty=o,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=a}var vt={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){vt[e]=new At(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];vt[t]=new At(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){vt[e]=new At(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){vt[e]=new At(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){vt[e]=new At(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){vt[e]=new At(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){vt[e]=new At(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){vt[e]=new At(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){vt[e]=new At(e,5,!1,e.toLowerCase(),null,!1,!1)});var Dd=/[\-:]([a-z])/g;function Md(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(Dd,Md);vt[t]=new At(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Dd,Md);vt[t]=new At(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Dd,Md);vt[t]=new At(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){vt[e]=new At(e,1,!1,e.toLowerCase(),null,!1,!1)});vt.xlinkHref=new At("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){vt[e]=new At(e,1,!1,e.toLowerCase(),null,!0,!0)});function jd(e,t,o,r){var n=vt.hasOwnProperty(t)?vt[t]:null;(n!==null?n.type!==0:r||!(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{Ds=!1,Error.prepareStackTrace=o}return(e=e?e.displayName||e.name:"")?hi(e):""}function hx(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=Ms(e.type,!1),e;case 11:return e=Ms(e.type.render,!1),e;case 1:return e=Ms(e.type,!0),e;default:return""}}function _c(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 bn:return"Fragment";case gn:return"Portal";case mc:return"Profiler";case jd:return"StrictMode";case xc:return"Suspense";case yc:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case kh:return(e.displayName||"Context")+".Consumer";case wh:return(e._context.displayName||"Context")+".Provider";case Pd:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Bd:return t=e.displayName||null,t!==null?t:_c(e.type)||"Memo";case ir:t=e._payload,e=e._init;try{return _c(e(t))}catch{}}return null}function gx(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 _c(t);case 8:return t===jd?"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 kr(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Th(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function bx(e){var t=Th(e)?"checked":"value",o=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof o<"u"&&typeof o.get=="function"&&typeof o.set=="function"){var n=o.get,i=o.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return n.call(this)},set:function(a){r=""+a,i.call(this,a)}}),Object.defineProperty(e,t,{enumerable:o.enumerable}),{getValue:function(){return r},setValue:function(a){r=""+a},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function wa(e){e._valueTracker||(e._valueTracker=bx(e))}function Rh(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var o=t.getValue(),r="";return e&&(r=Th(e)?e.checked?"true":"false":e.value),e=r,e!==o?(t.setValue(e),!0):!1}function dl(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 wc(e,t){var o=t.checked;return Ge({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:o??e._wrapperState.initialChecked})}function af(e,t){var o=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;o=kr(t.value!=null?t.value:o),e._wrapperState={initialChecked:r,initialValue:o,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Sh(e,t){t=t.checked,t!=null&&Id(e,"checked",t,!1)}function kc(e,t){Sh(e,t);var o=kr(t.value),r=t.type;if(o!=null)r==="number"?(o===0&&e.value===""||e.value!=o)&&(e.value=""+o):e.value!==""+o&&(e.value=""+o);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Ec(e,t.type,o):t.hasOwnProperty("defaultValue")&&Ec(e,t.type,kr(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function lf(e,t,o){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,o||t===e.value||(e.value=t),e.defaultValue=t}o=e.name,o!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,o!==""&&(e.name=o)}function Ec(e,t,o){(t!=="number"||dl(e.ownerDocument)!==e)&&(o==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+o&&(e.defaultValue=""+o))}var gi=Array.isArray;function Ln(e,t,o,r){if(e=e.options,t){t={};for(var n=0;n"+t.valueOf().toString()+"",t=ka.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Pi(e,t){if(t){var o=e.firstChild;if(o&&o===e.lastChild&&o.nodeType===3){o.nodeValue=t;return}}e.textContent=t}var _i={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},vx=["Webkit","ms","Moz","O"];Object.keys(_i).forEach(function(e){vx.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),_i[t]=_i[e]})});function Oh(e,t,o){return t==null||typeof t=="boolean"||t===""?"":o||typeof t!="number"||t===0||_i.hasOwnProperty(e)&&_i[e]?(""+t).trim():t+"px"}function Ah(e,t){e=e.style;for(var o in t)if(t.hasOwnProperty(o)){var r=o.indexOf("--")===0,n=Oh(o,t[o],r);o==="float"&&(o="cssFloat"),r?e.setProperty(o,n):e[o]=n}}var mx=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 Sc(e,t){if(t){if(mx[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(G(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(G(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(G(61))}if(t.style!=null&&typeof t.style!="object")throw Error(G(62))}}function Lc(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 Cc=null;function zd(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Nc=null,Cn=null,Nn=null;function df(e){if(e=da(e)){if(typeof Nc!="function")throw Error(G(280));var t=e.stateNode;t&&(t=rs(t),Nc(e.stateNode,e.type,t))}}function Dh(e){Cn?Nn?Nn.push(e):Nn=[e]:Cn=e}function Mh(){if(Cn){var e=Cn,t=Nn;if(Nn=Cn=null,df(e),t)for(e=0;e>>=0,e===0?32:31-(Cx(e)/Nx|0)|0}var Ea=64,Ta=4194304;function bi(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 hl(e,t){var o=e.pendingLanes;if(o===0)return 0;var r=0,n=e.suspendedLanes,i=e.pingedLanes,a=o&268435455;if(a!==0){var l=a&~n;l!==0?r=bi(l):(i&=a,i!==0&&(r=bi(i)))}else a=o&~n,a!==0?r=bi(a):i!==0&&(r=bi(i));if(r===0)return 0;if(t!==0&&t!==r&&!(t&n)&&(n=r&-r,i=t&-t,n>=i||n===16&&(i&4194240)!==0))return t;if(r&4&&(r|=o&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0o;o++)t.push(e);return t}function sa(e,t,o){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-yo(t),e[t]=o}function Mx(e,t){var o=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 r=e.eventTimes;for(e=e.expirationTimes;0=ki),xf=" ",yf=!1;function eg(e,t){switch(e){case"keyup":return sy.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function tg(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var vn=!1;function dy(e,t){switch(e){case"compositionend":return tg(t);case"keypress":return t.which!==32?null:(yf=!0,xf);case"textInput":return e=t.data,e===xf&&yf?null:e;default:return null}}function uy(e,t){if(vn)return e==="compositionend"||!Xd&&eg(e,t)?(e=Zh(),Ya=Hd=dr=null,vn=!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:o,offset:t-e};e=r}e:{for(;o;){if(o.nextSibling){o=o.nextSibling;break e}o=o.parentNode}o=void 0}o=Ef(o)}}function ig(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?ig(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function ag(){for(var e=window,t=dl();t instanceof e.HTMLIFrameElement;){try{var o=typeof t.contentWindow.location.href=="string"}catch{o=!1}if(o)e=t.contentWindow;else break;t=dl(e.document)}return t}function Gd(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 yy(e){var t=ag(),o=e.focusedElem,r=e.selectionRange;if(t!==o&&o&&o.ownerDocument&&ig(o.ownerDocument.documentElement,o)){if(r!==null&&Gd(o)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in o)o.selectionStart=t,o.selectionEnd=Math.min(e,o.value.length);else if(e=(t=o.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var n=o.textContent.length,i=Math.min(r.start,n);r=r.end===void 0?i:Math.min(r.end,n),!e.extend&&i>r&&(n=r,r=i,i=n),n=Tf(o,i);var a=Tf(o,r);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>r?(e.addRange(t),e.extend(a.node,a.offset)):(t.setEnd(a.node,a.offset),e.addRange(t)))}}for(t=[],e=o;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof o.focus=="function"&&o.focus(),o=0;o=document.documentMode,mn=null,jc=null,Ti=null,Pc=!1;function Rf(e,t,o){var r=o.window===o?o.document:o.nodeType===9?o:o.ownerDocument;Pc||mn==null||mn!==dl(r)||(r=mn,"selectionStart"in r&&Gd(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Ti&&Vi(Ti,r)||(Ti=r,r=vl(jc,"onSelect"),0_n||(e.current=Vc[_n],Vc[_n]=null,_n--)}function Pe(e,t){_n++,Vc[_n]=e.current,e.current=t}var Er={},Rt=Rr(Er),Ft=Rr(!1),Kr=Er;function Pn(e,t){var o=e.type.contextTypes;if(!o)return Er;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var n={},i;for(i in o)n[i]=t[i];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=n),n}function Ut(e){return e=e.childContextTypes,e!=null}function xl(){We(Ft),We(Rt)}function Df(e,t,o){if(Rt.current!==Er)throw Error(G(168));Pe(Rt,t),Pe(Ft,o)}function gg(e,t,o){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return o;r=r.getChildContext();for(var n in r)if(!(n in t))throw Error(G(108,gx(e)||"Unknown",n));return Ge({},o,r)}function yl(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Er,Kr=Rt.current,Pe(Rt,e),Pe(Ft,Ft.current),!0}function Mf(e,t,o){var r=e.stateNode;if(!r)throw Error(G(169));o?(e=gg(e,t,Kr),r.__reactInternalMemoizedMergedChildContext=e,We(Ft),We(Rt),Pe(Rt,e)):We(Ft),Pe(Ft,o)}var Fo=null,ns=!1,Gs=!1;function bg(e){Fo===null?Fo=[e]:Fo.push(e)}function Ay(e){ns=!0,bg(e)}function Sr(){if(!Gs&&Fo!==null){Gs=!0;var e=0,t=Ae;try{var o=Fo;for(Ae=1;e>=a,n-=a,Vo=1<<32-yo(t)+n|o<P?(I=R,R=null):I=R.sibling;var B=p(b,R,v[P],_);if(B===null){R===null&&(R=I);break}e&&R&&B.alternate===null&&t(b,R),h=i(B,h,P),E===null?y=B:E.sibling=B,E=B,R=I}if(P===v.length)return o(b,R),$e&&Ir(b,P),y;if(R===null){for(;PP?(I=R,R=null):I=R.sibling;var z=p(b,R,B.value,_);if(z===null){R===null&&(R=I);break}e&&R&&z.alternate===null&&t(b,R),h=i(z,h,P),E===null?y=z:E.sibling=z,E=z,R=I}if(B.done)return o(b,R),$e&&Ir(b,P),y;if(R===null){for(;!B.done;P++,B=v.next())B=u(b,B.value,_),B!==null&&(h=i(B,h,P),E===null?y=B:E.sibling=B,E=B);return $e&&Ir(b,P),y}for(R=r(b,R);!B.done;P++,B=v.next())B=g(R,b,P,B.value,_),B!==null&&(e&&B.alternate!==null&&R.delete(B.key===null?P:B.key),h=i(B,h,P),E===null?y=B:E.sibling=B,E=B);return e&&R.forEach(function(L){return t(b,L)}),$e&&Ir(b,P),y}function k(b,h,v,_){if(typeof v=="object"&&v!==null&&v.type===bn&&v.key===null&&(v=v.props.children),typeof v=="object"&&v!==null){switch(v.$$typeof){case _a:e:{for(var y=v.key,E=h;E!==null;){if(E.key===y){if(y=v.type,y===bn){if(E.tag===7){o(b,E.sibling),h=n(E,v.props.children),h.return=b,b=h;break e}}else if(E.elementType===y||typeof y=="object"&&y!==null&&y.$$typeof===ir&&Pf(y)===E.type){o(b,E.sibling),h=n(E,v.props),h.ref=li(b,E,v),h.return=b,b=h;break e}o(b,E);break}else t(b,E);E=E.sibling}v.type===bn?(h=Hr(v.props.children,b.mode,_,v.key),h.return=b,b=h):(_=el(v.type,v.key,v.props,null,b.mode,_),_.ref=li(b,h,v),_.return=b,b=_)}return a(b);case gn:e:{for(E=v.key;h!==null;){if(h.key===E)if(h.tag===4&&h.stateNode.containerInfo===v.containerInfo&&h.stateNode.implementation===v.implementation){o(b,h.sibling),h=n(h,v.children||[]),h.return=b,b=h;break e}else{o(b,h);break}else t(b,h);h=h.sibling}h=oc(v,b.mode,_),h.return=b,b=h}return a(b);case ir:return E=v._init,k(b,h,E(v._payload),_)}if(gi(v))return x(b,h,v,_);if(oi(v))return w(b,h,v,_);Aa(b,v)}return typeof v=="string"&&v!==""||typeof v=="number"?(v=""+v,h!==null&&h.tag===6?(o(b,h.sibling),h=n(h,v),h.return=b,b=h):(o(b,h),h=tc(v,b.mode,_),h.return=b,b=h),a(b)):o(b,h)}return k}var zn=yg(!0),_g=yg(!1),kl=Rr(null),El=null,En=null,Zd=null;function Qd(){Zd=En=El=null}function eu(e){var t=kl.current;We(kl),e._currentValue=t}function Yc(e,t,o){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===o)break;e=e.return}}function An(e,t){El=e,Zd=En=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Bt=!0),e.firstContext=null)}function uo(e){var t=e._currentValue;if(Zd!==e)if(e={context:e,memoizedValue:t,next:null},En===null){if(El===null)throw Error(G(308));En=e,El.dependencies={lanes:0,firstContext:e}}else En=En.next=e;return t}var Fr=null;function tu(e){Fr===null?Fr=[e]:Fr.push(e)}function wg(e,t,o,r){var n=t.interleaved;return n===null?(o.next=o,tu(t)):(o.next=n.next,n.next=o),t.interleaved=o,Zo(e,r)}function Zo(e,t){e.lanes|=t;var o=e.alternate;for(o!==null&&(o.lanes|=t),o=e,e=e.return;e!==null;)e.childLanes|=t,o=e.alternate,o!==null&&(o.childLanes|=t),o=e,e=e.return;return o.tag===3?o.stateNode:null}var ar=!1;function ou(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function kg(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 Yo(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function mr(e,t,o){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,we&2){var n=r.pending;return n===null?t.next=t:(t.next=n.next,n.next=t),r.pending=t,Zo(e,o)}return n=r.interleaved,n===null?(t.next=t,tu(r)):(t.next=n.next,n.next=t),r.interleaved=t,Zo(e,o)}function Ga(e,t,o){if(t=t.updateQueue,t!==null&&(t=t.shared,(o&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,o|=r,t.lanes=o,Ud(e,o)}}function Bf(e,t){var o=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,o===r)){var n=null,i=null;if(o=o.firstBaseUpdate,o!==null){do{var a={eventTime:o.eventTime,lane:o.lane,tag:o.tag,payload:o.payload,callback:o.callback,next:null};i===null?n=i=a:i=i.next=a,o=o.next}while(o!==null);i===null?n=i=t:i=i.next=t}else n=i=t;o={baseState:r.baseState,firstBaseUpdate:n,lastBaseUpdate:i,shared:r.shared,effects:r.effects},e.updateQueue=o;return}e=o.lastBaseUpdate,e===null?o.firstBaseUpdate=t:e.next=t,o.lastBaseUpdate=t}function Tl(e,t,o,r){var n=e.updateQueue;ar=!1;var i=n.firstBaseUpdate,a=n.lastBaseUpdate,l=n.shared.pending;if(l!==null){n.shared.pending=null;var c=l,d=c.next;c.next=null,a===null?i=d:a.next=d,a=c;var f=e.alternate;f!==null&&(f=f.updateQueue,l=f.lastBaseUpdate,l!==a&&(l===null?f.firstBaseUpdate=d:l.next=d,f.lastBaseUpdate=c))}if(i!==null){var u=n.baseState;a=0,f=d=c=null,l=i;do{var p=l.lane,g=l.eventTime;if((r&p)===p){f!==null&&(f=f.next={eventTime:g,lane:0,tag:l.tag,payload:l.payload,callback:l.callback,next:null});e:{var x=e,w=l;switch(p=t,g=o,w.tag){case 1:if(x=w.payload,typeof x=="function"){u=x.call(g,u,p);break e}u=x;break e;case 3:x.flags=x.flags&-65537|128;case 0:if(x=w.payload,p=typeof x=="function"?x.call(g,u,p):x,p==null)break e;u=Ge({},u,p);break e;case 2:ar=!0}}l.callback!==null&&l.lane!==0&&(e.flags|=64,p=n.effects,p===null?n.effects=[l]:p.push(l))}else g={eventTime:g,lane:p,tag:l.tag,payload:l.payload,callback:l.callback,next:null},f===null?(d=f=g,c=u):f=f.next=g,a|=p;if(l=l.next,l===null){if(l=n.shared.pending,l===null)break;p=l,l=p.next,p.next=null,n.lastBaseUpdate=p,n.shared.pending=null}}while(!0);if(f===null&&(c=u),n.baseState=c,n.firstBaseUpdate=d,n.lastBaseUpdate=f,t=n.shared.interleaved,t!==null){n=t;do a|=n.lane,n=n.next;while(n!==t)}else i===null&&(n.shared.lanes=0);Zr|=a,e.lanes=a,e.memoizedState=u}}function zf(e,t,o){if(e=t.effects,t.effects=null,e!==null)for(t=0;to?o:4,e(!0);var r=qs.transition;qs.transition={};try{e(!1),t()}finally{Ae=o,qs.transition=r}}function Fg(){return fo().memoizedState}function jy(e,t,o){var r=yr(e);if(o={lane:r,action:o,hasEagerState:!1,eagerState:null,next:null},Ug(e))Wg(t,o);else if(o=wg(e,t,o,r),o!==null){var n=Ct();_o(o,e,r,n),Vg(o,t,r)}}function Py(e,t,o){var r=yr(e),n={lane:r,action:o,hasEagerState:!1,eagerState:null,next:null};if(Ug(e))Wg(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,o);if(n.hasEagerState=!0,n.eagerState=l,wo(l,a)){var c=t.interleaved;c===null?(n.next=n,tu(t)):(n.next=c.next,c.next=n),t.interleaved=n;return}}catch{}finally{}o=wg(e,t,n,r),o!==null&&(n=Ct(),_o(o,e,r,n),Vg(o,t,r))}}function Ug(e){var t=e.alternate;return e===Xe||t!==null&&t===Xe}function Wg(e,t){Ri=Sl=!0;var o=e.pending;o===null?t.next=t:(t.next=o.next,o.next=t),e.pending=t}function Vg(e,t,o){if(o&4194240){var r=t.lanes;r&=e.pendingLanes,o|=r,t.lanes=o,Ud(e,o)}}var Ll={readContext:uo,useCallback:mt,useContext:mt,useEffect:mt,useImperativeHandle:mt,useInsertionEffect:mt,useLayoutEffect:mt,useMemo:mt,useReducer:mt,useRef:mt,useState:mt,useDebugValue:mt,useDeferredValue:mt,useTransition:mt,useMutableSource:mt,useSyncExternalStore:mt,useId:mt,unstable_isNewReconciler:!1},By={readContext:uo,useCallback:function(e,t){return So().memoizedState=[e,t===void 0?null:t],e},useContext:uo,useEffect:Uf,useImperativeHandle:function(e,t,o){return o=o!=null?o.concat([e]):null,qa(4194308,4,Ig.bind(null,t,e),o)},useLayoutEffect:function(e,t){return qa(4194308,4,e,t)},useInsertionEffect:function(e,t){return qa(4,2,e,t)},useMemo:function(e,t){var o=So();return t=t===void 0?null:t,e=e(),o.memoizedState=[e,t],e},useReducer:function(e,t,o){var r=So();return t=o!==void 0?o(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=jy.bind(null,Xe,e),[r.memoizedState,e]},useRef:function(e){var t=So();return e={current:e},t.memoizedState=e},useState:Ff,useDebugValue:du,useDeferredValue:function(e){return So().memoizedState=e},useTransition:function(){var e=Ff(!1),t=e[0];return e=Iy.bind(null,e[1]),So().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,o){var r=Xe,n=So();if($e){if(o===void 0)throw Error(G(407));o=o()}else{if(o=t(),pt===null)throw Error(G(349));Jr&30||Sg(r,t,o)}n.memoizedState=o;var i={value:o,getSnapshot:t};return n.queue=i,Uf(Cg.bind(null,r,i,e),[e]),r.flags|=2048,Ji(9,Lg.bind(null,r,i,o,t),void 0,null),o},useId:function(){var e=So(),t=pt.identifierPrefix;if($e){var o=Ho,r=Vo;o=(r&~(1<<32-yo(r)-1)).toString(32)+o,t=":"+t+"R"+o,o=Ki++,0")&&(c=c.replace("",e.displayName)),c}while(1<=a&&0<=l);break}}}finally{Ds=!1,Error.prepareStackTrace=o}return(e=e?e.displayName||e.name:"")?hi(e):""}function hx(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=Ms(e.type,!1),e;case 11:return e=Ms(e.type.render,!1),e;case 1:return e=Ms(e.type,!0),e;default:return""}}function _c(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 vn:return"Fragment";case bn:return"Portal";case mc:return"Profiler";case Id:return"StrictMode";case xc:return"Suspense";case yc:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case kh:return(e.displayName||"Context")+".Consumer";case wh:return(e._context.displayName||"Context")+".Provider";case Pd:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Bd:return t=e.displayName||null,t!==null?t:_c(e.type)||"Memo";case ar:t=e._payload,e=e._init;try{return _c(e(t))}catch{}}return null}function gx(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 _c(t);case 8:return t===Id?"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 Er(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Th(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function bx(e){var t=Th(e)?"checked":"value",o=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof o<"u"&&typeof o.get=="function"&&typeof o.set=="function"){var n=o.get,i=o.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return n.call(this)},set:function(a){r=""+a,i.call(this,a)}}),Object.defineProperty(e,t,{enumerable:o.enumerable}),{getValue:function(){return r},setValue:function(a){r=""+a},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function ka(e){e._valueTracker||(e._valueTracker=bx(e))}function Rh(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var o=t.getValue(),r="";return e&&(r=Th(e)?e.checked?"true":"false":e.value),e=r,e!==o?(t.setValue(e),!0):!1}function ul(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 wc(e,t){var o=t.checked;return Ge({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:o??e._wrapperState.initialChecked})}function af(e,t){var o=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;o=Er(t.value!=null?t.value:o),e._wrapperState={initialChecked:r,initialValue:o,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Sh(e,t){t=t.checked,t!=null&&jd(e,"checked",t,!1)}function kc(e,t){Sh(e,t);var o=Er(t.value),r=t.type;if(o!=null)r==="number"?(o===0&&e.value===""||e.value!=o)&&(e.value=""+o):e.value!==""+o&&(e.value=""+o);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Ec(e,t.type,o):t.hasOwnProperty("defaultValue")&&Ec(e,t.type,Er(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function lf(e,t,o){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,o||t===e.value||(e.value=t),e.defaultValue=t}o=e.name,o!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,o!==""&&(e.name=o)}function Ec(e,t,o){(t!=="number"||ul(e.ownerDocument)!==e)&&(o==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+o&&(e.defaultValue=""+o))}var gi=Array.isArray;function Cn(e,t,o,r){if(e=e.options,t){t={};for(var n=0;n"+t.valueOf().toString()+"",t=Ea.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Pi(e,t){if(t){var o=e.firstChild;if(o&&o===e.lastChild&&o.nodeType===3){o.nodeValue=t;return}}e.textContent=t}var _i={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},vx=["Webkit","ms","Moz","O"];Object.keys(_i).forEach(function(e){vx.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),_i[t]=_i[e]})});function Oh(e,t,o){return t==null||typeof t=="boolean"||t===""?"":o||typeof t!="number"||t===0||_i.hasOwnProperty(e)&&_i[e]?(""+t).trim():t+"px"}function Ah(e,t){e=e.style;for(var o in t)if(t.hasOwnProperty(o)){var r=o.indexOf("--")===0,n=Oh(o,t[o],r);o==="float"&&(o="cssFloat"),r?e.setProperty(o,n):e[o]=n}}var mx=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 Sc(e,t){if(t){if(mx[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(G(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(G(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(G(61))}if(t.style!=null&&typeof t.style!="object")throw Error(G(62))}}function Lc(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 Cc=null;function zd(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Nc=null,Nn=null,On=null;function df(e){if(e=da(e)){if(typeof Nc!="function")throw Error(G(280));var t=e.stateNode;t&&(t=ns(t),Nc(e.stateNode,e.type,t))}}function Dh(e){Nn?On?On.push(e):On=[e]:Nn=e}function Mh(){if(Nn){var e=Nn,t=On;if(On=Nn=null,df(e),t)for(e=0;e>>=0,e===0?32:31-(Cx(e)/Nx|0)|0}var Ta=64,Ra=4194304;function bi(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 gl(e,t){var o=e.pendingLanes;if(o===0)return 0;var r=0,n=e.suspendedLanes,i=e.pingedLanes,a=o&268435455;if(a!==0){var l=a&~n;l!==0?r=bi(l):(i&=a,i!==0&&(r=bi(i)))}else a=o&~n,a!==0?r=bi(a):i!==0&&(r=bi(i));if(r===0)return 0;if(t!==0&&t!==r&&!(t&n)&&(n=r&-r,i=t&-t,n>=i||n===16&&(i&4194240)!==0))return t;if(r&4&&(r|=o&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0o;o++)t.push(e);return t}function sa(e,t,o){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-yo(t),e[t]=o}function Mx(e,t){var o=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 r=e.eventTimes;for(e=e.expirationTimes;0=ki),xf=" ",yf=!1;function eg(e,t){switch(e){case"keyup":return sy.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function tg(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var mn=!1;function dy(e,t){switch(e){case"compositionend":return tg(t);case"keypress":return t.which!==32?null:(yf=!0,xf);case"textInput":return e=t.data,e===xf&&yf?null:e;default:return null}}function uy(e,t){if(mn)return e==="compositionend"||!Xd&&eg(e,t)?(e=Zh(),Xa=Hd=ur=null,mn=!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:o,offset:t-e};e=r}e:{for(;o;){if(o.nextSibling){o=o.nextSibling;break e}o=o.parentNode}o=void 0}o=Ef(o)}}function ig(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?ig(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function ag(){for(var e=window,t=ul();t instanceof e.HTMLIFrameElement;){try{var o=typeof t.contentWindow.location.href=="string"}catch{o=!1}if(o)e=t.contentWindow;else break;t=ul(e.document)}return t}function Gd(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 yy(e){var t=ag(),o=e.focusedElem,r=e.selectionRange;if(t!==o&&o&&o.ownerDocument&&ig(o.ownerDocument.documentElement,o)){if(r!==null&&Gd(o)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in o)o.selectionStart=t,o.selectionEnd=Math.min(e,o.value.length);else if(e=(t=o.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var n=o.textContent.length,i=Math.min(r.start,n);r=r.end===void 0?i:Math.min(r.end,n),!e.extend&&i>r&&(n=r,r=i,i=n),n=Tf(o,i);var a=Tf(o,r);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>r?(e.addRange(t),e.extend(a.node,a.offset)):(t.setEnd(a.node,a.offset),e.addRange(t)))}}for(t=[],e=o;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof o.focus=="function"&&o.focus(),o=0;o=document.documentMode,xn=null,Ic=null,Ti=null,Pc=!1;function Rf(e,t,o){var r=o.window===o?o.document:o.nodeType===9?o:o.ownerDocument;Pc||xn==null||xn!==ul(r)||(r=xn,"selectionStart"in r&&Gd(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Ti&&Vi(Ti,r)||(Ti=r,r=ml(Ic,"onSelect"),0wn||(e.current=Vc[wn],Vc[wn]=null,wn--)}function Pe(e,t){wn++,Vc[wn]=e.current,e.current=t}var Tr={},Rt=Sr(Tr),zt=Sr(!1),qr=Tr;function Bn(e,t){var o=e.type.contextTypes;if(!o)return Tr;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var n={},i;for(i in o)n[i]=t[i];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=n),n}function Ft(e){return e=e.childContextTypes,e!=null}function yl(){We(zt),We(Rt)}function Df(e,t,o){if(Rt.current!==Tr)throw Error(G(168));Pe(Rt,t),Pe(zt,o)}function gg(e,t,o){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return o;r=r.getChildContext();for(var n in r)if(!(n in t))throw Error(G(108,gx(e)||"Unknown",n));return Ge({},o,r)}function _l(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Tr,qr=Rt.current,Pe(Rt,e),Pe(zt,zt.current),!0}function Mf(e,t,o){var r=e.stateNode;if(!r)throw Error(G(169));o?(e=gg(e,t,qr),r.__reactInternalMemoizedMergedChildContext=e,We(zt),We(Rt),Pe(Rt,e)):We(zt),Pe(zt,o)}var Uo=null,is=!1,Gs=!1;function bg(e){Uo===null?Uo=[e]:Uo.push(e)}function Ay(e){is=!0,bg(e)}function Lr(){if(!Gs&&Uo!==null){Gs=!0;var e=0,t=Ae;try{var o=Uo;for(Ae=1;e>=a,n-=a,Ho=1<<32-yo(t)+n|o<B?(C=L,L=null):C=L.sibling;var j=p(b,L,v[B],_);if(j===null){L===null&&(L=C);break}e&&L&&j.alternate===null&&t(b,L),h=i(j,h,B),T===null?y=j:T.sibling=j,T=j,L=C}if(B===v.length)return o(b,L),$e&&Ir(b,B),y;if(L===null){for(;BB?(C=L,L=null):C=L.sibling;var z=p(b,L,j.value,_);if(z===null){L===null&&(L=C);break}e&&L&&z.alternate===null&&t(b,L),h=i(z,h,B),T===null?y=z:T.sibling=z,T=z,L=C}if(j.done)return o(b,L),$e&&Ir(b,B),y;if(L===null){for(;!j.done;B++,j=v.next())j=u(b,j.value,_),j!==null&&(h=i(j,h,B),T===null?y=j:T.sibling=j,T=j);return $e&&Ir(b,B),y}for(L=r(b,L);!j.done;B++,j=v.next())j=g(L,b,B,j.value,_),j!==null&&(e&&j.alternate!==null&&L.delete(j.key===null?B:j.key),h=i(j,h,B),T===null?y=j:T.sibling=j,T=j);return e&&L.forEach(function(S){return t(b,S)}),$e&&Ir(b,B),y}function E(b,h,v,_){if(typeof v=="object"&&v!==null&&v.type===vn&&v.key===null&&(v=v.props.children),typeof v=="object"&&v!==null){switch(v.$$typeof){case wa:e:{for(var y=v.key,T=h;T!==null;){if(T.key===y){if(y=v.type,y===vn){if(T.tag===7){o(b,T.sibling),h=n(T,v.props.children),h.return=b,b=h;break e}}else if(T.elementType===y||typeof y=="object"&&y!==null&&y.$$typeof===ar&&Pf(y)===T.type){o(b,T.sibling),h=n(T,v.props),h.ref=li(b,T,v),h.return=b,b=h;break e}o(b,T);break}else t(b,T);T=T.sibling}v.type===vn?(h=$r(v.props.children,b.mode,_,v.key),h.return=b,b=h):(_=tl(v.type,v.key,v.props,null,b.mode,_),_.ref=li(b,h,v),_.return=b,b=_)}return a(b);case bn:e:{for(T=v.key;h!==null;){if(h.key===T)if(h.tag===4&&h.stateNode.containerInfo===v.containerInfo&&h.stateNode.implementation===v.implementation){o(b,h.sibling),h=n(h,v.children||[]),h.return=b,b=h;break e}else{o(b,h);break}else t(b,h);h=h.sibling}h=oc(v,b.mode,_),h.return=b,b=h}return a(b);case ar:return T=v._init,E(b,h,T(v._payload),_)}if(gi(v))return x(b,h,v,_);if(oi(v))return w(b,h,v,_);Da(b,v)}return typeof v=="string"&&v!==""||typeof v=="number"?(v=""+v,h!==null&&h.tag===6?(o(b,h.sibling),h=n(h,v),h.return=b,b=h):(o(b,h),h=tc(v,b.mode,_),h.return=b,b=h),a(b)):o(b,h)}return E}var Fn=yg(!0),_g=yg(!1),El=Sr(null),Tl=null,Tn=null,Zd=null;function Qd(){Zd=Tn=Tl=null}function eu(e){var t=El.current;We(El),e._currentValue=t}function Yc(e,t,o){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===o)break;e=e.return}}function Dn(e,t){Tl=e,Zd=Tn=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Pt=!0),e.firstContext=null)}function uo(e){var t=e._currentValue;if(Zd!==e)if(e={context:e,memoizedValue:t,next:null},Tn===null){if(Tl===null)throw Error(G(308));Tn=e,Tl.dependencies={lanes:0,firstContext:e}}else Tn=Tn.next=e;return t}var Ur=null;function tu(e){Ur===null?Ur=[e]:Ur.push(e)}function wg(e,t,o,r){var n=t.interleaved;return n===null?(o.next=o,tu(t)):(o.next=n.next,n.next=o),t.interleaved=o,Qo(e,r)}function Qo(e,t){e.lanes|=t;var o=e.alternate;for(o!==null&&(o.lanes|=t),o=e,e=e.return;e!==null;)e.childLanes|=t,o=e.alternate,o!==null&&(o.childLanes|=t),o=e,e=e.return;return o.tag===3?o.stateNode:null}var lr=!1;function ou(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function kg(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 Xo(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function xr(e,t,o){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,we&2){var n=r.pending;return n===null?t.next=t:(t.next=n.next,n.next=t),r.pending=t,Qo(e,o)}return n=r.interleaved,n===null?(t.next=t,tu(r)):(t.next=n.next,n.next=t),r.interleaved=t,Qo(e,o)}function Ka(e,t,o){if(t=t.updateQueue,t!==null&&(t=t.shared,(o&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,o|=r,t.lanes=o,Ud(e,o)}}function Bf(e,t){var o=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,o===r)){var n=null,i=null;if(o=o.firstBaseUpdate,o!==null){do{var a={eventTime:o.eventTime,lane:o.lane,tag:o.tag,payload:o.payload,callback:o.callback,next:null};i===null?n=i=a:i=i.next=a,o=o.next}while(o!==null);i===null?n=i=t:i=i.next=t}else n=i=t;o={baseState:r.baseState,firstBaseUpdate:n,lastBaseUpdate:i,shared:r.shared,effects:r.effects},e.updateQueue=o;return}e=o.lastBaseUpdate,e===null?o.firstBaseUpdate=t:e.next=t,o.lastBaseUpdate=t}function Rl(e,t,o,r){var n=e.updateQueue;lr=!1;var i=n.firstBaseUpdate,a=n.lastBaseUpdate,l=n.shared.pending;if(l!==null){n.shared.pending=null;var c=l,d=c.next;c.next=null,a===null?i=d:a.next=d,a=c;var f=e.alternate;f!==null&&(f=f.updateQueue,l=f.lastBaseUpdate,l!==a&&(l===null?f.firstBaseUpdate=d:l.next=d,f.lastBaseUpdate=c))}if(i!==null){var u=n.baseState;a=0,f=d=c=null,l=i;do{var p=l.lane,g=l.eventTime;if((r&p)===p){f!==null&&(f=f.next={eventTime:g,lane:0,tag:l.tag,payload:l.payload,callback:l.callback,next:null});e:{var x=e,w=l;switch(p=t,g=o,w.tag){case 1:if(x=w.payload,typeof x=="function"){u=x.call(g,u,p);break e}u=x;break e;case 3:x.flags=x.flags&-65537|128;case 0:if(x=w.payload,p=typeof x=="function"?x.call(g,u,p):x,p==null)break e;u=Ge({},u,p);break e;case 2:lr=!0}}l.callback!==null&&l.lane!==0&&(e.flags|=64,p=n.effects,p===null?n.effects=[l]:p.push(l))}else g={eventTime:g,lane:p,tag:l.tag,payload:l.payload,callback:l.callback,next:null},f===null?(d=f=g,c=u):f=f.next=g,a|=p;if(l=l.next,l===null){if(l=n.shared.pending,l===null)break;p=l,l=p.next,p.next=null,n.lastBaseUpdate=p,n.shared.pending=null}}while(!0);if(f===null&&(c=u),n.baseState=c,n.firstBaseUpdate=d,n.lastBaseUpdate=f,t=n.shared.interleaved,t!==null){n=t;do a|=n.lane,n=n.next;while(n!==t)}else i===null&&(n.shared.lanes=0);Qr|=a,e.lanes=a,e.memoizedState=u}}function zf(e,t,o){if(e=t.effects,t.effects=null,e!==null)for(t=0;to?o:4,e(!0);var r=qs.transition;qs.transition={};try{e(!1),t()}finally{Ae=o,qs.transition=r}}function Fg(){return fo().memoizedState}function Iy(e,t,o){var r=_r(e);if(o={lane:r,action:o,hasEagerState:!1,eagerState:null,next:null},Ug(e))Wg(t,o);else if(o=wg(e,t,o,r),o!==null){var n=Ct();_o(o,e,r,n),Vg(o,t,r)}}function Py(e,t,o){var r=_r(e),n={lane:r,action:o,hasEagerState:!1,eagerState:null,next:null};if(Ug(e))Wg(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,o);if(n.hasEagerState=!0,n.eagerState=l,wo(l,a)){var c=t.interleaved;c===null?(n.next=n,tu(t)):(n.next=c.next,c.next=n),t.interleaved=n;return}}catch{}finally{}o=wg(e,t,n,r),o!==null&&(n=Ct(),_o(o,e,r,n),Vg(o,t,r))}}function Ug(e){var t=e.alternate;return e===Xe||t!==null&&t===Xe}function Wg(e,t){Ri=Ll=!0;var o=e.pending;o===null?t.next=t:(t.next=o.next,o.next=t),e.pending=t}function Vg(e,t,o){if(o&4194240){var r=t.lanes;r&=e.pendingLanes,o|=r,t.lanes=o,Ud(e,o)}}var Cl={readContext:uo,useCallback:mt,useContext:mt,useEffect:mt,useImperativeHandle:mt,useInsertionEffect:mt,useLayoutEffect:mt,useMemo:mt,useReducer:mt,useRef:mt,useState:mt,useDebugValue:mt,useDeferredValue:mt,useTransition:mt,useMutableSource:mt,useSyncExternalStore:mt,useId:mt,unstable_isNewReconciler:!1},By={readContext:uo,useCallback:function(e,t){return Lo().memoizedState=[e,t===void 0?null:t],e},useContext:uo,useEffect:Uf,useImperativeHandle:function(e,t,o){return o=o!=null?o.concat([e]):null,Ja(4194308,4,jg.bind(null,t,e),o)},useLayoutEffect:function(e,t){return Ja(4194308,4,e,t)},useInsertionEffect:function(e,t){return Ja(4,2,e,t)},useMemo:function(e,t){var o=Lo();return t=t===void 0?null:t,e=e(),o.memoizedState=[e,t],e},useReducer:function(e,t,o){var r=Lo();return t=o!==void 0?o(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=Iy.bind(null,Xe,e),[r.memoizedState,e]},useRef:function(e){var t=Lo();return e={current:e},t.memoizedState=e},useState:Ff,useDebugValue:du,useDeferredValue:function(e){return Lo().memoizedState=e},useTransition:function(){var e=Ff(!1),t=e[0];return e=jy.bind(null,e[1]),Lo().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,o){var r=Xe,n=Lo();if($e){if(o===void 0)throw Error(G(407));o=o()}else{if(o=t(),pt===null)throw Error(G(349));Zr&30||Sg(r,t,o)}n.memoizedState=o;var i={value:o,getSnapshot:t};return n.queue=i,Uf(Cg.bind(null,r,i,e),[e]),r.flags|=2048,Ji(9,Lg.bind(null,r,i,o,t),void 0,null),o},useId:function(){var e=Lo(),t=pt.identifierPrefix;if($e){var o=$o,r=Ho;o=(r&~(1<<32-yo(r)-1)).toString(32)+o,t=":"+t+"R"+o,o=Ki++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=a.createElement(o,{is:r.is}):(e=a.createElement(o),o==="select"&&(a=e,r.multiple?a.multiple=!0:r.size&&(a.size=r.size))):e=a.createElementNS(e,o),e[Co]=t,e[Yi]=r,Qg(e,t,!1,!1),t.stateNode=e;e:{switch(a=Lc(o,r),o){case"dialog":Ue("cancel",e),Ue("close",e),n=r;break;case"iframe":case"object":case"embed":Ue("load",e),n=r;break;case"video":case"audio":for(n=0;nWn&&(t.flags|=128,r=!0,si(i,!1),t.lanes=4194304)}else{if(!r)if(e=Rl(a),e!==null){if(t.flags|=128,r=!0,o=e.updateQueue,o!==null&&(t.updateQueue=o,t.flags|=4),si(i,!0),i.tail===null&&i.tailMode==="hidden"&&!a.alternate&&!$e)return xt(t),null}else 2*Ze()-i.renderingStartTime>Wn&&o!==1073741824&&(t.flags|=128,r=!0,si(i,!1),t.lanes=4194304);i.isBackwards?(a.sibling=t.child,t.child=a):(o=i.last,o!==null?o.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,o=Ye.current,Pe(Ye,r?o&1|2:o&1),t):(xt(t),null);case 22:case 23:return bu(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?$t&1073741824&&(xt(t),t.subtreeFlags&6&&(t.flags|=8192)):xt(t),null;case 24:return null;case 25:return null}throw Error(G(156,t.tag))}function Yy(e,t){switch(qd(t),t.tag){case 1:return Ut(t.type)&&xl(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Fn(),We(Ft),We(Rt),iu(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return nu(t),null;case 13:if(We(Ye),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(G(340));Bn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return We(Ye),null;case 4:return Fn(),null;case 10:return eu(t.type._context),null;case 22:case 23:return bu(),null;case 24:return null;default:return null}}var Ma=!1,Et=!1,Xy=typeof WeakSet=="function"?WeakSet:Set,ie=null;function Tn(e,t){var o=e.ref;if(o!==null)if(typeof o=="function")try{o(null)}catch(r){Ke(e,t,r)}else o.current=null}function td(e,t,o){try{o()}catch(r){Ke(e,t,r)}}var Zf=!1;function Gy(e,t){if(Bc=gl,e=ag(),Gd(e)){if("selectionStart"in e)var o={start:e.selectionStart,end:e.selectionEnd};else e:{o=(o=e.ownerDocument)&&o.defaultView||window;var r=o.getSelection&&o.getSelection();if(r&&r.rangeCount!==0){o=r.anchorNode;var n=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{o.nodeType,i.nodeType}catch{o=null;break e}var a=0,l=-1,c=-1,d=0,f=0,u=e,p=null;t:for(;;){for(var g;u!==o||n!==0&&u.nodeType!==3||(l=a+n),u!==i||r!==0&&u.nodeType!==3||(c=a+r),u.nodeType===3&&(a+=u.nodeValue.length),(g=u.firstChild)!==null;)p=u,u=g;for(;;){if(u===e)break t;if(p===o&&++d===n&&(l=a),p===i&&++f===r&&(c=a),(g=u.nextSibling)!==null)break;u=p,p=u.parentNode}u=g}o=l===-1||c===-1?null:{start:l,end:c}}else o=null}o=o||{start:0,end:0}}else o=null;for(zc={focusedElem:e,selectionRange:o},gl=!1,ie=t;ie!==null;)if(t=ie,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,ie=e;else for(;ie!==null;){t=ie;try{var x=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(x!==null){var w=x.memoizedProps,k=x.memoizedState,b=t.stateNode,h=b.getSnapshotBeforeUpdate(t.elementType===t.type?w:bo(t.type,w),k);b.__reactInternalSnapshotBeforeUpdate=h}break;case 3:var v=t.stateNode.containerInfo;v.nodeType===1?v.textContent="":v.nodeType===9&&v.documentElement&&v.removeChild(v.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(G(163))}}catch(_){Ke(t,t.return,_)}if(e=t.sibling,e!==null){e.return=t.return,ie=e;break}ie=t.return}return x=Zf,Zf=!1,x}function Si(e,t,o){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var n=r=r.next;do{if((n.tag&e)===e){var i=n.destroy;n.destroy=void 0,i!==void 0&&td(t,o,i)}n=n.next}while(n!==r)}}function ls(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var o=t=t.next;do{if((o.tag&e)===e){var r=o.create;o.destroy=r()}o=o.next}while(o!==t)}}function od(e){var t=e.ref;if(t!==null){var o=e.stateNode;switch(e.tag){case 5:e=o;break;default:e=o}typeof t=="function"?t(e):t.current=e}}function ob(e){var t=e.alternate;t!==null&&(e.alternate=null,ob(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Co],delete t[Yi],delete t[Wc],delete t[Ny],delete t[Oy])),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 rb(e){return e.tag===5||e.tag===3||e.tag===4}function Qf(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||rb(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 rd(e,t,o){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?o.nodeType===8?o.parentNode.insertBefore(e,t):o.insertBefore(e,t):(o.nodeType===8?(t=o.parentNode,t.insertBefore(e,o)):(t=o,t.appendChild(e)),o=o._reactRootContainer,o!=null||t.onclick!==null||(t.onclick=ml));else if(r!==4&&(e=e.child,e!==null))for(rd(e,t,o),e=e.sibling;e!==null;)rd(e,t,o),e=e.sibling}function nd(e,t,o){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?o.insertBefore(e,t):o.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(nd(e,t,o),e=e.sibling;e!==null;)nd(e,t,o),e=e.sibling}var ht=null,vo=!1;function rr(e,t,o){for(o=o.child;o!==null;)nb(e,t,o),o=o.sibling}function nb(e,t,o){if(Ao&&typeof Ao.onCommitFiberUnmount=="function")try{Ao.onCommitFiberUnmount(Ql,o)}catch{}switch(o.tag){case 5:Et||Tn(o,t);case 6:var r=ht,n=vo;ht=null,rr(e,t,o),ht=r,vo=n,ht!==null&&(vo?(e=ht,o=o.stateNode,e.nodeType===8?e.parentNode.removeChild(o):e.removeChild(o)):ht.removeChild(o.stateNode));break;case 18:ht!==null&&(vo?(e=ht,o=o.stateNode,e.nodeType===8?Xs(e.parentNode,o):e.nodeType===1&&Xs(e,o),Ui(e)):Xs(ht,o.stateNode));break;case 4:r=ht,n=vo,ht=o.stateNode.containerInfo,vo=!0,rr(e,t,o),ht=r,vo=n;break;case 0:case 11:case 14:case 15:if(!Et&&(r=o.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){n=r=r.next;do{var i=n,a=i.destroy;i=i.tag,a!==void 0&&(i&2||i&4)&&td(o,t,a),n=n.next}while(n!==r)}rr(e,t,o);break;case 1:if(!Et&&(Tn(o,t),r=o.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=o.memoizedProps,r.state=o.memoizedState,r.componentWillUnmount()}catch(l){Ke(o,t,l)}rr(e,t,o);break;case 21:rr(e,t,o);break;case 22:o.mode&1?(Et=(r=Et)||o.memoizedState!==null,rr(e,t,o),Et=r):rr(e,t,o);break;default:rr(e,t,o)}}function ep(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var o=e.stateNode;o===null&&(o=e.stateNode=new Xy),t.forEach(function(r){var n=r_.bind(null,e,r);o.has(r)||(o.add(r),r.then(n,n))})}}function go(e,t){var o=t.deletions;if(o!==null)for(var r=0;rn&&(n=a),r&=~i}if(r=n,r=Ze()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*qy(r/1960))-r,10e?16:e,ur===null)var r=!1;else{if(e=ur,ur=null,Ol=0,we&6)throw Error(G(331));var n=we;for(we|=4,ie=e.current;ie!==null;){var i=ie,a=i.child;if(ie.flags&16){var l=i.deletions;if(l!==null){for(var c=0;cZe()-hu?Vr(e,0):pu|=o),Wt(e,t)}function fb(e,t){t===0&&(e.mode&1?(t=Ta,Ta<<=1,!(Ta&130023424)&&(Ta=4194304)):t=1);var o=Ct();e=Zo(e,t),e!==null&&(sa(e,t,o),Wt(e,o))}function o_(e){var t=e.memoizedState,o=0;t!==null&&(o=t.retryLane),fb(e,o)}function r_(e,t){var o=0;switch(e.tag){case 13:var r=e.stateNode,n=e.memoizedState;n!==null&&(o=n.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(G(314))}r!==null&&r.delete(t),fb(e,o)}var pb;pb=function(e,t,o){if(e!==null)if(e.memoizedProps!==t.pendingProps||Ft.current)Bt=!0;else{if(!(e.lanes&o)&&!(t.flags&128))return Bt=!1,Hy(e,t,o);Bt=!!(e.flags&131072)}else Bt=!1,$e&&t.flags&1048576&&vg(t,wl,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Ja(e,t),e=t.pendingProps;var n=Pn(t,Rt.current);An(t,o),n=lu(null,t,r,e,n,o);var i=su();return t.flags|=1,typeof n=="object"&&n!==null&&typeof n.render=="function"&&n.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Ut(r)?(i=!0,yl(t)):i=!1,t.memoizedState=n.state!==null&&n.state!==void 0?n.state:null,ou(t),n.updater=as,t.stateNode=n,n._reactInternals=t,Gc(t,r,e,o),t=Jc(null,t,r,!0,i,o)):(t.tag=0,$e&&i&&Kd(t),St(null,t,n,o),t=t.child),t;case 16:r=t.elementType;e:{switch(Ja(e,t),e=t.pendingProps,n=r._init,r=n(r._payload),t.type=r,n=t.tag=i_(r),e=bo(r,e),n){case 0:t=qc(null,t,r,e,o);break e;case 1:t=Kf(null,t,r,e,o);break e;case 11:t=Xf(null,t,r,e,o);break e;case 14:t=Gf(null,t,r,bo(r.type,e),o);break e}throw Error(G(306,r,""))}return t;case 0:return r=t.type,n=t.pendingProps,n=t.elementType===r?n:bo(r,n),qc(e,t,r,n,o);case 1:return r=t.type,n=t.pendingProps,n=t.elementType===r?n:bo(r,n),Kf(e,t,r,n,o);case 3:e:{if(qg(t),e===null)throw Error(G(387));r=t.pendingProps,i=t.memoizedState,n=i.element,kg(e,t),Tl(t,r,null,o);var a=t.memoizedState;if(r=a.element,i.isDehydrated)if(i={element:r,isDehydrated:!1,cache:a.cache,pendingSuspenseBoundaries:a.pendingSuspenseBoundaries,transitions:a.transitions},t.updateQueue.baseState=i,t.memoizedState=i,t.flags&256){n=Un(Error(G(423)),t),t=qf(e,t,r,o,n);break e}else if(r!==n){n=Un(Error(G(424)),t),t=qf(e,t,r,o,n);break e}else for(Gt=vr(t.stateNode.containerInfo.firstChild),Kt=t,$e=!0,mo=null,o=_g(t,null,r,o),t.child=o;o;)o.flags=o.flags&-3|4096,o=o.sibling;else{if(Bn(),r===n){t=Qo(e,t,o);break e}St(e,t,r,o)}t=t.child}return t;case 5:return Eg(t),e===null&&$c(t),r=t.type,n=t.pendingProps,i=e!==null?e.memoizedProps:null,a=n.children,Fc(r,n)?a=null:i!==null&&Fc(r,i)&&(t.flags|=32),Kg(e,t),St(e,t,a,o),t.child;case 6:return e===null&&$c(t),null;case 13:return Jg(e,t,o);case 4:return ru(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=zn(t,null,r,o):St(e,t,r,o),t.child;case 11:return r=t.type,n=t.pendingProps,n=t.elementType===r?n:bo(r,n),Xf(e,t,r,n,o);case 7:return St(e,t,t.pendingProps,o),t.child;case 8:return St(e,t,t.pendingProps.children,o),t.child;case 12:return St(e,t,t.pendingProps.children,o),t.child;case 10:e:{if(r=t.type._context,n=t.pendingProps,i=t.memoizedProps,a=n.value,Pe(kl,r._currentValue),r._currentValue=a,i!==null)if(wo(i.value,a)){if(i.children===n.children&&!Ft.current){t=Qo(e,t,o);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===r){if(i.tag===1){c=Yo(-1,o&-o),c.tag=2;var d=i.updateQueue;if(d!==null){d=d.shared;var f=d.pending;f===null?c.next=c:(c.next=f.next,f.next=c),d.pending=c}}i.lanes|=o,c=i.alternate,c!==null&&(c.lanes|=o),Yc(i.return,o,t),l.lanes|=o;break}c=c.next}}else if(i.tag===10)a=i.type===t.type?null:i.child;else if(i.tag===18){if(a=i.return,a===null)throw Error(G(341));a.lanes|=o,l=a.alternate,l!==null&&(l.lanes|=o),Yc(a,o,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}St(e,t,n.children,o),t=t.child}return t;case 9:return n=t.type,r=t.pendingProps.children,An(t,o),n=uo(n),r=r(n),t.flags|=1,St(e,t,r,o),t.child;case 14:return r=t.type,n=bo(r,t.pendingProps),n=bo(r.type,n),Gf(e,t,r,n,o);case 15:return Xg(e,t,t.type,t.pendingProps,o);case 17:return r=t.type,n=t.pendingProps,n=t.elementType===r?n:bo(r,n),Ja(e,t),t.tag=1,Ut(r)?(e=!0,yl(t)):e=!1,An(t,o),Hg(t,r,n),Gc(t,r,n,o),Jc(null,t,r,!0,e,o);case 19:return Zg(e,t,o);case 22:return Gg(e,t,o)}throw Error(G(156,t.tag))};function hb(e,t){return Uh(e,t)}function n_(e,t,o,r){this.tag=e,this.key=o,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=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function lo(e,t,o,r){return new n_(e,t,o,r)}function mu(e){return e=e.prototype,!(!e||!e.isReactComponent)}function i_(e){if(typeof e=="function")return mu(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Pd)return 11;if(e===Bd)return 14}return 2}function _r(e,t){var o=e.alternate;return o===null?(o=lo(e.tag,t,e.key,e.mode),o.elementType=e.elementType,o.type=e.type,o.stateNode=e.stateNode,o.alternate=e,e.alternate=o):(o.pendingProps=t,o.type=e.type,o.flags=0,o.subtreeFlags=0,o.deletions=null),o.flags=e.flags&14680064,o.childLanes=e.childLanes,o.lanes=e.lanes,o.child=e.child,o.memoizedProps=e.memoizedProps,o.memoizedState=e.memoizedState,o.updateQueue=e.updateQueue,t=e.dependencies,o.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},o.sibling=e.sibling,o.index=e.index,o.ref=e.ref,o}function el(e,t,o,r,n,i){var a=2;if(r=e,typeof e=="function")mu(e)&&(a=1);else if(typeof e=="string")a=5;else e:switch(e){case bn:return Hr(o.children,n,i,t);case jd:a=8,n|=8;break;case mc:return e=lo(12,o,t,n|2),e.elementType=mc,e.lanes=i,e;case xc:return e=lo(13,o,t,n),e.elementType=xc,e.lanes=i,e;case yc:return e=lo(19,o,t,n),e.elementType=yc,e.lanes=i,e;case Eh:return cs(o,n,i,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case wh:a=10;break e;case kh:a=9;break e;case Pd:a=11;break e;case Bd:a=14;break e;case ir:a=16,r=null;break e}throw Error(G(130,e==null?e:typeof e,""))}return t=lo(a,o,t,n),t.elementType=e,t.type=r,t.lanes=i,t}function Hr(e,t,o,r){return e=lo(7,e,r,t),e.lanes=o,e}function cs(e,t,o,r){return e=lo(22,e,r,t),e.elementType=Eh,e.lanes=o,e.stateNode={isHidden:!1},e}function tc(e,t,o){return e=lo(6,e,null,t),e.lanes=o,e}function oc(e,t,o){return t=lo(4,e.children!==null?e.children:[],e.key,t),t.lanes=o,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function a_(e,t,o,r,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=js(0),this.expirationTimes=js(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=js(0),this.identifierPrefix=r,this.onRecoverableError=n,this.mutableSourceEagerHydrationData=null}function xu(e,t,o,r,n,i,a,l,c){return e=new a_(e,t,o,l,c),t===1?(t=1,i===!0&&(t|=8)):t=0,i=lo(3,null,null,t),e.current=i,i.stateNode=e,i.memoizedState={element:r,isDehydrated:o,cache:null,transitions:null,pendingSuspenseBoundaries:null},ou(i),e}function l_(e,t,o){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(mb)}catch(e){console.error(e)}}mb(),mh.exports=Jt;var Io=mh.exports,qn,sp=Io;qn=bc.createRoot=sp.createRoot,bc.hydrateRoot=sp.hydrateRoot;function Nt(){return Bm}function Qi(){return zm}function xb(e){if(!e||typeof e!="object")return null;const t=e,o=t.rootGraph;if(o&&typeof o=="object")return o;const r=t.graph;return r&&typeof r=="object"?r:e}function yb(e){return e._nodes??e.nodes??[]}function f_(e){return e._groups??e.groups??[]}function p_(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 _b(e,t){const o=new Set,r=[{graph:e,path:[]}];for(;r.length;){const{graph:n,path:i}=r.pop(),a=n;if(!o.has(a)){o.add(a),t(n,i);for(const l of yb(n)){const c=p_(l);c&&r.push({graph:c,path:i.concat([{node:l,graph:n,depth:i.length+1}])})}}}}function h_(){return globalThis.crypto?.randomUUID?.()??`bv-group-${Date.now()}-${Math.random().toString(16).slice(2)}`}function g_(e,t){const o=e;o.flags??(o.flags={});let r=typeof o.flags.bvGroupId=="string"?o.flags.bvGroupId:"";if(!r||t.has(r)){do r=h_();while(t.has(r));o.flags.bvGroupId=r}return t.add(r),r}function Ml(e){const t=xb(e);if(!t)return[];const o=[],r=new Set;return _b(t,(n,i)=>{for(const a of f_(n)){const c=[...i.map(d=>String(d.node.title||d.node.type||d.node.id)),String(a.title||"Untitled Group")].join(" / ");o.push({group:a,graph:n,path:i,id:g_(a,r),pathLabel:c})}}),o}function b_(e,t){const o=xb(e);if(!o)return[];const r=[];return _b(o,(n,i)=>{for(const a of yb(n))wb(a,t)&&r.push({node:a,graph:n,path:i})}),r}function wb(e,t){const o=String(t);return[e.type,e.comfyClass,e.title,e.constructor?.name].filter(n=>typeof n=="string"&&n.length>0).map(String).includes(o)}const Vn="bv-control-config-changed";function v_(){return{version:2,forceActive:!1,controls:[]}}function ku(e){var o;const t=Nt()?.rootGraph;t&&(t.extra??(t.extra={}),(o=t.extra).bv_settings??(o.bv_settings={}),t.extra.bv_settings.controlConfig=e,t.setDirtyCanvas?.(!0,!0),window.dispatchEvent(new CustomEvent(Vn,{detail:e})))}function en(){const e=Nt()?.rootGraph?.extra?.bv_settings?.controlConfig;return e?.version===2?e:v_()}function m_(e,t=()=>!1){const o=e.group.nodes??e.group._nodes;if(Array.isArray(o)){const l=o.filter(c=>c&&typeof c=="object"&&!t(c));if(l.length>0)return l}const[r,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,d]=l.pos||[0,0],[f,u]=l.size||[0,0];return c+f/2>=r&&c+f/2<=r+i&&d+u/2>=n&&d+u/2<=n+a})}const cp={activate:3,mute:2,bypass:1},dp=e=>e.charAt(0).toUpperCase()+e.slice(1);function kb(e){const t=new Map;for(const r of e.controls??[])if(r.enabled)for(const n of r.assignments??[]){if(n.unresolved)continue;const i=t.get(n.groupId)??[];i.push({controlId:r.id,controlName:r.name,action:n.action,groupId:n.groupId,groupPath:n.groupPath||n.groupTitle||n.groupId}),t.set(n.groupId,i)}const o=[];for(const r of t.values()){if(new Set(r.map(i=>i.action)).size<2)continue;const n=r.reduce((i,a)=>cp[a.action]>cp[i]?a.action:i,r[0].action);o.push({groupId:r[0].groupId,groupPath:r[0].groupPath,winnerAction:n,entries:r})}return o}function x_(e){if(!e.length)return"✓ No active conflicts";if(e.length>1)return`⚠ ${e.length} active control conflicts`;const t=e[0],o=[...new Set(t.entries.filter(r=>r.action!==t.winnerAction).map(r=>r.action))].join(", ");return`⚠ ${t.groupPath}: ${dp(t.winnerAction)} overrides ${o.split(", ").map(dp).join(", ")}`}function Eb({children:e}){const t=m.useRef();if(!t.current){const o=document.createElement("div");o.className="bv-ui bv-ui-portal",t.current=o}return m.useEffect(()=>(document.body.append(t.current),()=>t.current?.remove()),[]),Io.createPortal(e,t.current)}function Lr({open:e,anchor:t,children:o,onClose:r,className:n="",matchWidth:i=!1}){const a=m.useRef(null),[l,c]=m.useState({left:0,top:0,visibility:"hidden"});return m.useLayoutEffect(()=>{if(!e)return;const d=()=>{const p=t.current?.getBoundingClientRect(),g=a.current?.getBoundingClientRect();if(!p||!g)return;const x=8,w=6,k=i?Math.min(Math.max(p.width,240),window.innerWidth-x*2):void 0,b=k??g.width,h=Math.max(x,Math.min(p.left,window.innerWidth-b-x)),v=p.bottom+w,_=v+g.height<=window.innerHeight-x?v:Math.max(x,p.top-g.height-w);c({left:h,top:_,width:k,visibility:"visible"})};d();const f=requestAnimationFrame(d),u=new ResizeObserver(d);return t.current&&u.observe(t.current),a.current&&u.observe(a.current),window.addEventListener("resize",d),window.addEventListener("scroll",d,!0),()=>{cancelAnimationFrame(f),u.disconnect(),window.removeEventListener("resize",d),window.removeEventListener("scroll",d,!0)}},[t,i,e]),m.useEffect(()=>{if(!e)return;const d=u=>{const p=u.target;!t.current?.contains(p)&&!a.current?.contains(p)&&r?.()},f=u=>{u.key==="Escape"&&r?.()};return document.addEventListener("pointerdown",d),document.addEventListener("keydown",f),()=>{document.removeEventListener("pointerdown",d),document.removeEventListener("keydown",f)}},[t,r,e]),e?s.jsx(Eb,{children:s.jsx("div",{ref:a,className:`bv-anchored-popover ${n}`.trim(),style:l,children:o})}):null}function Eu({density:e="compact",className:t="",children:o}){return s.jsx("div",{className:`bv-density-${e} ${t}`.trim(),children:o})}function le({intent:e="secondary",icon:t,iconOnly:o=!1,loading:r=!1,density:n,className:i="",children:a,disabled:l,...c}){return s.jsxs("button",{...c,disabled:l||r,className:`bv-button ${e} ${n?`bv-density-${n}`:""} ${o?"icon-only":""} ${i}`.trim(),children:[r?s.jsx("span",{className:"bv-spinner"}):o?t??a:t,!o&&a]})}function y_({actions:e,onClose:t}){return s.jsx("div",{className:"bv-menu-content",role:"menu",children:e.map(o=>s.jsxs(Te.Fragment,{children:[o.separatorBefore&&s.jsx("hr",{}),s.jsxs("button",{type:"button",role:"menuitem",disabled:o.disabled,className:o.danger?"danger":"",onClick:()=>{o.onSelect(),t?.()},children:[o.icon,s.jsx("span",{children:o.label}),o.shortcut&&s.jsx("kbd",{children:o.shortcut})]})]},o.id))})}function Tu({label:e,actions:t,intent:o="secondary",icon:r,density:n}){const[i,a]=m.useState(!1),l=m.useRef(null);return s.jsxs("div",{className:"bv-menu-button",ref:l,children:[s.jsxs(le,{intent:o,icon:r,density:n,"aria-haspopup":"menu","aria-expanded":i,onClick:()=>a(!i),children:[e,s.jsx("span",{className:"bv-chevron"})]}),s.jsx(Lr,{open:i,anchor:l,onClose:()=>a(!1),className:"bv-menu",children:s.jsx(y_,{actions:t,onClose:()=>a(!1)})})]})}function __({items:e,orientation:t="horizontal",label:o="Tools",overflow:r=[],density:n}){return s.jsxs("div",{className:`bv-toolbar ${t}`,role:"toolbar","aria-orientation":t,"aria-label":o,children:[e.map((i,a)=>s.jsxs(Te.Fragment,{children:[a>0&&i.group!==e[a-1].group&&s.jsx("span",{className:"bv-toolbar-divider"}),s.jsx(le,{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)),r.length>0&&s.jsx(Tu,{label:"More",actions:r,intent:"ghost",density:n})]})}function up({items:e,compact:t=!1}){return s.jsx("dl",{className:`bv-definition-list ${t?"compact":""}`,children:e.map((o,r)=>s.jsxs("div",{className:"bv-definition-row",children:[s.jsx("dt",{children:o.term}),s.jsx("dd",{children:o.description})]},r))})}function hs({label:e,summary:t,icon:o,children:r,popover:n,className:i=""}){const[a,l]=m.useState(!1),c=m.useRef(null);return s.jsxs("div",{ref:c,className:`bv-adaptive-field ${i}`.trim(),children:[s.jsx("div",{className:"bv-adaptive-inline",children:r}),s.jsxs(le,{type:"button",intent:"secondary",className:"bv-adaptive-trigger",icon:o,"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(Lr,{open:a,anchor:c,onClose:()=>l(!1),className:"bv-adaptive-popover",children:[s.jsxs("header",{children:[s.jsx("strong",{children:e}),s.jsx(le,{type:"button",intent:"ghost",icon:"×",iconOnly:!0,"aria-label":`Close ${e} editor`,onClick:()=>l(!1)})]}),s.jsx("div",{children:n})]})]})}function fa({open:e,title:t,description:o,children:r,footer:n,onClose:i,modal:a=!0,size:l="medium"}){return e?s.jsx(Eb,{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}),o&&s.jsx("p",{children:o})]}),s.jsx(le,{intent:"ghost",icon:"×",iconOnly:!0,"aria-label":"Close",onClick:i})]}),s.jsx("div",{className:"bv-dialog-body",children:r}),n&&s.jsx("footer",{children:n})]})})}):null}function Ru({open:e,editorName:t,onSave:o,onDiscard:r,onKeep:n}){return s.jsx(fa,{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(le,{intent:"ghost",onClick:n,children:"Keep editing"}),s.jsx(le,{intent:"secondary",onClick:r,children:"Discard"}),s.jsx(le,{intent:"primary",onClick:o,children:"Save"})]}),children:s.jsx("p",{children:"Save the current draft, discard it, or return to the editor."})})}function Su(){const[e,t]=m.useState(null),o=n=>t({confirmLabel:"Continue",danger:!1,...n}),r=s.jsx(fa,{open:!!e,title:e?.title??"Confirm action",onClose:()=>t(null),size:"small",footer:s.jsxs(s.Fragment,{children:[s.jsx(le,{intent:"ghost",onClick:()=>t(null),children:"Cancel"}),s.jsx(le,{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:o,dialog:r}}function fp({trigger:e,children:t,open:o,onOpen:r}){const[n,i]=m.useState(!1),a=m.useRef(null),l=o??n,c=d=>{i(d),r?.(d)};return s.jsxs("span",{ref:a,className:"bv-popover-host",children:[e({open:l,toggle:()=>c(!l)}),s.jsx(Lr,{open:l,anchor:a,onClose:()=>c(!1),className:"bv-popover",children:t})]})}function gs({items:e,onReorder:t,onRemove:o,renderActions:r,initialExpanded:n=[]}){const[i,a]=m.useState(n),[l,c]=m.useState();return s.jsx("div",{className:"bv-sortable-list",children:e.map(d=>s.jsxs("article",{draggable:!d.disabled,onDragStart:()=>c(d.id),onDragOver:f=>f.preventDefault(),onDrop:()=>{if(!l||l===d.id)return;const f=[...e],u=f.findIndex(x=>x.id===l),p=f.findIndex(x=>x.id===d.id),[g]=f.splice(u,1);f.splice(p,0,g),t(f),c(void 0)},children:[s.jsxs("header",{children:[s.jsx("button",{type:"button",className:"bv-drag-handle","aria-label":`Reorder ${String(d.title)}`,children:"⠿"}),s.jsxs("div",{children:[s.jsx("strong",{children:d.title}),d.description&&s.jsx("small",{children:d.description})]}),r?.(d),s.jsxs("span",{className:"bv-segmented-actions",children:[o&&s.jsx(le,{intent:"ghost",iconOnly:!0,"aria-label":`Remove ${String(d.title)}`,title:"Remove",onClick:()=>o(d.id),children:"×"}),d.content&&s.jsx(le,{intent:"ghost",icon:s.jsx("span",{className:"bv-chevron"}),iconOnly:!0,"aria-label":`${i.includes(d.id)?"Collapse":"Expand"} ${String(d.title)}`,"aria-expanded":i.includes(d.id),onClick:()=>a(f=>f.includes(d.id)?f.filter(u=>u!==d.id):[...f,d.id])})]})]}),d.summary&&s.jsx("div",{className:"bv-sortable-summary",children:d.summary}),d.content&&i.includes(d.id)&&s.jsx("div",{className:"bv-sortable-content",children:d.content})]},d.id))})}const rt=Te.forwardRef(function({type:t="button",...o},r){return s.jsx("button",{...o,type:t,ref:r})}),w_=Te.forwardRef(function(t,o){return s.jsx("input",{...t,ref:o})});function Mo({tone:e="neutral",title:t,children:o,icon:r,actions:n,onClose:i}){return s.jsxs("aside",{className:`bv-callout ${e}`,role:e==="danger"?"alert":"status",children:[r&&s.jsx("span",{className:"bv-callout-icon",children:r}),s.jsxs("div",{children:[t&&s.jsx("strong",{children:t}),s.jsx("div",{children:o}),n&&s.jsx("div",{className:"bv-callout-actions",children:n})]}),i&&s.jsx(le,{intent:"ghost",iconOnly:!0,"aria-label":"Close",onClick:i,children:"×"})]})}function Tb({children:e,tone:t="neutral",dot:o=!1}){return s.jsx("span",{className:`bv-badge ${t} ${o?"dot":""}`,children:e})}function bs({icon:e,title:t,description:o,actions:r}){return s.jsxs("div",{className:"bv-empty-state",children:[e,s.jsx("strong",{children:t}),o&&s.jsx("p",{children:o}),r]})}function k_({tone:e="neutral",title:t,children:o,onClose:r,duration:n=0}){const i=m.useRef(),a=m.useCallback(()=>{i.current&&window.clearTimeout(i.current)},[]),l=m.useCallback(()=>{a(),n&&(i.current=window.setTimeout(r,n))},[n,r,a]);return m.useEffect(()=>(l(),a),[l,a]),s.jsxs("div",{className:`bv-toast ${e}`,role:"status",tabIndex:0,onPointerEnter:a,onPointerLeave:l,onFocus:a,onBlur:l,children:[s.jsxs("div",{children:[s.jsx("strong",{children:t}),o&&s.jsx("p",{children:o})]}),s.jsx(le,{intent:"ghost",iconOnly:!0,"aria-label":"Dismiss",onClick:r,children:"×"})]})}function Jn(){return(Jn=Object.assign||function(e){for(var t=1;t=0||(n[o]=e[o]);return n}function Ni(e){var t=m.useRef(e),o=m.useRef(function(r){t.current&&t.current(r)});return t.current=e,o.current}var Hn=function(e,t,o){return t===void 0&&(t=0),o===void 0&&(o=1),e>o?o:e0:v.buttons>0)&&i.current?a(pp(i.current,v,d.current)):(h(!1),c())},b=function(){h(!1),c()};function h(v){var _=f.current,y=cd(i.current),E=v?y.addEventListener:y.removeEventListener;E(_?"touchmove":"mousemove",k),E(_?"touchend":"mouseup",b)}return[function(v){var _=v.nativeEvent,y=i.current;if(y&&(hp(_),!function(R,P){return P&&!Oi(R)}(_,f.current)&&y)){if(Oi(_)){f.current=!0;var E=_.changedTouches||[];E.length&&(d.current=E[0].identifier)}y.focus(),a(pp(y,_,d.current)),h(!0)}},function(v){var _=v.which||v.keyCode;_<37||_>40||(v.preventDefault(),l({left:_===39?.05:_===37?-.05:0,top:_===40?.05:_===38?-.05:0}))},function(v){var _=v.which||v.keyCode;_>=37&&_<=40&&c()},h]},[l,a,c]),p=u[0],g=u[1],x=u[2],w=u[3];return m.useEffect(function(){return w},[w]),Te.createElement("div",Jn({},n,{onTouchStart:p,onMouseDown:p,className:"react-colorful__interactive",ref:i,onKeyDown:g,onKeyUp:x,tabIndex:0,role:"slider"}))}),pa=function(e){return e.filter(Boolean).join(" ")},Nu=function(e){var t=e.color,o=e.left,r=e.top,n=r===void 0?.5:r,i=pa(["react-colorful__pointer",e.className]);return Te.createElement("div",{className:i,style:{top:100*n+"%",left:100*o+"%"}},Te.createElement("div",{className:"react-colorful__pointer-fill",style:{backgroundColor:t}}))},ut=function(e,t,o){return t===void 0&&(t=0),o===void 0&&(o=Math.pow(10,t)),Math.round(o*e)/o},Rb=function(e){return R_(dd(e))},dd=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?ut(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?ut(parseInt(e.substring(6,8),16)/255,2):1}},Sb=function(e){return T_(E_(e))},Lb=function(e){var t=e.s,o=e.v,r=e.a,n=(200-t)*o/100;return{h:ut(e.h),s:ut(n>0&&n<200?t*o/100/(n<=100?n:200-n)*100:0),l:ut(n/2),a:ut(r,2)}},ud=function(e){var t=Lb(e);return"hsl("+t.h+", "+t.s+"%, "+t.l+"%)"},rc=function(e){var t=Lb(e);return"hsla("+t.h+", "+t.s+"%, "+t.l+"%, "+t.a+")"},E_=function(e){var t=e.h,o=e.s,r=e.v,n=e.a;t=t/360*6,o/=100,r/=100;var i=Math.floor(t),a=r*(1-o),l=r*(1-(t-i)*o),c=r*(1-(1-t+i)*o),d=i%6;return{r:ut(255*[r,l,a,a,c,r][d]),g:ut(255*[c,r,r,l,a,a][d]),b:ut(255*[a,a,c,r,r,l][d]),a:ut(n,2)}},Pa=function(e){var t=e.toString(16);return t.length<2?"0"+t:t},T_=function(e){var t=e.r,o=e.g,r=e.b,n=e.a,i=n<1?Pa(ut(255*n)):"";return"#"+Pa(t)+Pa(o)+Pa(r)+i},R_=function(e){var t=e.r,o=e.g,r=e.b,n=e.a,i=Math.max(t,o,r),a=i-Math.min(t,o,r),l=a?i===t?(o-r)/a:i===o?2+(r-t)/a:4+(t-o)/a:0;return{h:ut(60*(l<0?l+6:l)),s:ut(i?a/i*100:0),v:ut(i/255*100),a:n}},Cb=Te.memo(function(e){var t=e.hue,o=e.onChange,r=e.onChangeEnd,n=pa(["react-colorful__hue",e.className]);return Te.createElement("div",{className:n},Te.createElement(Cu,{onMove:function(i){o({h:360*i.left})},onKey:function(i){o({h:Hn(t+360*i.left,0,360)})},onEnd:r,"aria-label":"Hue","aria-valuenow":ut(t),"aria-valuemax":"360","aria-valuemin":"0"},Te.createElement(Nu,{className:"react-colorful__hue-pointer",left:t/360,color:ud({h:t,s:100,v:100,a:1})})))}),Nb=Te.memo(function(e){var t=e.hsva,o=e.onChange,r=e.onChangeEnd,n={backgroundColor:ud({h:t.h,s:100,v:100,a:1})};return Te.createElement("div",{className:"react-colorful__saturation",style:n},Te.createElement(Cu,{onMove:function(i){o({s:100*i.left,v:100-100*i.top})},onKey:function(i){o({s:Hn(t.s+100*i.left,0,100),v:Hn(t.v-100*i.top,0,100)})},onEnd:r,"aria-label":"Color","aria-valuetext":"Saturation "+ut(t.s)+"%, Brightness "+ut(t.v)+"%"},Te.createElement(Nu,{className:"react-colorful__saturation-pointer",top:1-t.v/100,left:t.s/100,color:ud(t)})))}),Ob=function(e,t){if(e===t)return!0;for(var o in e)if(e[o]!==t[o])return!1;return!0},Ab=function(e,t){return e.toLowerCase()===t.toLowerCase()||Ob(dd(e),dd(t))};function Db(e,t,o,r){var n=Ni(o),i=Ni(r),a=m.useState(function(){return e.toHsva(t)}),l=a[0],c=a[1],d=m.useRef({color:t,hsva:l}),f=m.useRef(!1);m.useEffect(function(){if(!e.equal(t,d.current.color)){var g=e.toHsva(t);d.current={hsva:g,color:t},c(g),f.current=!1}},[t,e]),m.useEffect(function(){var g;Ob(l,d.current.hsva)||e.equal(g=e.fromHsva(l),d.current.color)||(d.current={hsva:l,color:g},n(g),f.current=!0)},[l,e,n]);var u=m.useCallback(function(g){c(function(x){return Object.assign({},x,g)})},[]),p=m.useCallback(function(){f.current&&(f.current=!1,i(d.current.color))},[i]);return[l,u,p]}var S_=typeof window<"u"?m.useLayoutEffect:m.useEffect,L_=function(){return typeof __webpack_nonce__<"u"?__webpack_nonce__:void 0},gp=new WeakMap,Mb=function(e){S_(function(){var t=e.current;if(typeof document<"u"&&t){var o=t.getRootNode?t.getRootNode():t.ownerDocument,r=o&&("head"in o||"host"in o)?o:t.ownerDocument;if(!gp.has(r)){var n="head"in r?r.head:r,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=L_();a&&i.setAttribute("nonce",a),gp.set(r,i),n.appendChild(i)}}},[])},C_=function(e){var t=e.className,o=e.colorModel,r=e.color,n=r===void 0?o.defaultColor:r,i=e.onChange,a=e.onChangeEnd,l=Lu(e,["className","colorModel","color","onChange","onChangeEnd"]),c=m.useRef(null);Mb(c);var d=Db(o,n,i,a),f=d[0],u=d[1],p=d[2],g=pa(["react-colorful",t]);return Te.createElement("div",Jn({},l,{ref:c,className:g}),Te.createElement(Nb,{hsva:f,onChange:u,onChangeEnd:p}),Te.createElement(Cb,{hue:f.h,onChange:u,onChangeEnd:p,className:"react-colorful__last-control"}))},N_={defaultColor:"000",toHsva:Rb,fromHsva:function(e){return Sb({h:e.h,s:e.s,v:e.v,a:1})},equal:Ab},O_=function(e){return Te.createElement(C_,Jn({},e,{colorModel:N_}))},A_=function(e){var t=e.className,o=e.hsva,r=e.onChange,n=e.onChangeEnd,i={backgroundImage:"linear-gradient(90deg, "+rc(Object.assign({},o,{a:0}))+", "+rc(Object.assign({},o,{a:1}))+")"},a=pa(["react-colorful__alpha",t]),l=ut(100*o.a);return Te.createElement("div",{className:a},Te.createElement("div",{className:"react-colorful__alpha-gradient",style:i}),Te.createElement(Cu,{onMove:function(c){r({a:c.left})},onKey:function(c){r({a:Hn(o.a+c.left)})},onEnd:n,"aria-label":"Alpha","aria-valuetext":l+"%","aria-valuenow":l,"aria-valuemin":"0","aria-valuemax":"100"},Te.createElement(Nu,{className:"react-colorful__alpha-pointer",left:o.a,color:rc(o)})))},D_=function(e){var t=e.className,o=e.colorModel,r=e.color,n=r===void 0?o.defaultColor:r,i=e.onChange,a=e.onChangeEnd,l=Lu(e,["className","colorModel","color","onChange","onChangeEnd"]),c=m.useRef(null);Mb(c);var d=Db(o,n,i,a),f=d[0],u=d[1],p=d[2],g=pa(["react-colorful",t]);return Te.createElement("div",Jn({},l,{ref:c,className:g}),Te.createElement(Nb,{hsva:f,onChange:u,onChangeEnd:p}),Te.createElement(Cb,{hue:f.h,onChange:u,onChangeEnd:p}),Te.createElement(A_,{hsva:f,onChange:u,onChangeEnd:p,className:"react-colorful__last-control"}))},M_={defaultColor:"0001",toHsva:Rb,fromHsva:Sb,equal:Ab},I_=function(e){return Te.createElement(D_,Jn({},e,{colorModel:M_}))},Ib={},ct=co&&co.__assign||function(){return ct=Object.assign||function(e){for(var t,o=1,r=arguments.length;o<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=a.createElement(o,{is:r.is}):(e=a.createElement(o),o==="select"&&(a=e,r.multiple?a.multiple=!0:r.size&&(a.size=r.size))):e=a.createElementNS(e,o),e[No]=t,e[Yi]=r,Qg(e,t,!1,!1),t.stateNode=e;e:{switch(a=Lc(o,r),o){case"dialog":Ue("cancel",e),Ue("close",e),n=r;break;case"iframe":case"object":case"embed":Ue("load",e),n=r;break;case"video":case"audio":for(n=0;nVn&&(t.flags|=128,r=!0,si(i,!1),t.lanes=4194304)}else{if(!r)if(e=Sl(a),e!==null){if(t.flags|=128,r=!0,o=e.updateQueue,o!==null&&(t.updateQueue=o,t.flags|=4),si(i,!0),i.tail===null&&i.tailMode==="hidden"&&!a.alternate&&!$e)return xt(t),null}else 2*Ze()-i.renderingStartTime>Vn&&o!==1073741824&&(t.flags|=128,r=!0,si(i,!1),t.lanes=4194304);i.isBackwards?(a.sibling=t.child,t.child=a):(o=i.last,o!==null?o.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,o=Ye.current,Pe(Ye,r?o&1|2:o&1),t):(xt(t),null);case 22:case 23:return bu(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?$t&1073741824&&(xt(t),t.subtreeFlags&6&&(t.flags|=8192)):xt(t),null;case 24:return null;case 25:return null}throw Error(G(156,t.tag))}function Yy(e,t){switch(qd(t),t.tag){case 1:return Ft(t.type)&&yl(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Un(),We(zt),We(Rt),iu(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return nu(t),null;case 13:if(We(Ye),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(G(340));zn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return We(Ye),null;case 4:return Un(),null;case 10:return eu(t.type._context),null;case 22:case 23:return bu(),null;case 24:return null;default:return null}}var ja=!1,Et=!1,Xy=typeof WeakSet=="function"?WeakSet:Set,ie=null;function Rn(e,t){var o=e.ref;if(o!==null)if(typeof o=="function")try{o(null)}catch(r){Ke(e,t,r)}else o.current=null}function td(e,t,o){try{o()}catch(r){Ke(e,t,r)}}var Zf=!1;function Gy(e,t){if(Bc=bl,e=ag(),Gd(e)){if("selectionStart"in e)var o={start:e.selectionStart,end:e.selectionEnd};else e:{o=(o=e.ownerDocument)&&o.defaultView||window;var r=o.getSelection&&o.getSelection();if(r&&r.rangeCount!==0){o=r.anchorNode;var n=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{o.nodeType,i.nodeType}catch{o=null;break e}var a=0,l=-1,c=-1,d=0,f=0,u=e,p=null;t:for(;;){for(var g;u!==o||n!==0&&u.nodeType!==3||(l=a+n),u!==i||r!==0&&u.nodeType!==3||(c=a+r),u.nodeType===3&&(a+=u.nodeValue.length),(g=u.firstChild)!==null;)p=u,u=g;for(;;){if(u===e)break t;if(p===o&&++d===n&&(l=a),p===i&&++f===r&&(c=a),(g=u.nextSibling)!==null)break;u=p,p=u.parentNode}u=g}o=l===-1||c===-1?null:{start:l,end:c}}else o=null}o=o||{start:0,end:0}}else o=null;for(zc={focusedElem:e,selectionRange:o},bl=!1,ie=t;ie!==null;)if(t=ie,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,ie=e;else for(;ie!==null;){t=ie;try{var x=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(x!==null){var w=x.memoizedProps,E=x.memoizedState,b=t.stateNode,h=b.getSnapshotBeforeUpdate(t.elementType===t.type?w:bo(t.type,w),E);b.__reactInternalSnapshotBeforeUpdate=h}break;case 3:var v=t.stateNode.containerInfo;v.nodeType===1?v.textContent="":v.nodeType===9&&v.documentElement&&v.removeChild(v.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(G(163))}}catch(_){Ke(t,t.return,_)}if(e=t.sibling,e!==null){e.return=t.return,ie=e;break}ie=t.return}return x=Zf,Zf=!1,x}function Si(e,t,o){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var n=r=r.next;do{if((n.tag&e)===e){var i=n.destroy;n.destroy=void 0,i!==void 0&&td(t,o,i)}n=n.next}while(n!==r)}}function ss(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var o=t=t.next;do{if((o.tag&e)===e){var r=o.create;o.destroy=r()}o=o.next}while(o!==t)}}function od(e){var t=e.ref;if(t!==null){var o=e.stateNode;switch(e.tag){case 5:e=o;break;default:e=o}typeof t=="function"?t(e):t.current=e}}function ob(e){var t=e.alternate;t!==null&&(e.alternate=null,ob(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[No],delete t[Yi],delete t[Wc],delete t[Ny],delete t[Oy])),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 rb(e){return e.tag===5||e.tag===3||e.tag===4}function Qf(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||rb(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 rd(e,t,o){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?o.nodeType===8?o.parentNode.insertBefore(e,t):o.insertBefore(e,t):(o.nodeType===8?(t=o.parentNode,t.insertBefore(e,o)):(t=o,t.appendChild(e)),o=o._reactRootContainer,o!=null||t.onclick!==null||(t.onclick=xl));else if(r!==4&&(e=e.child,e!==null))for(rd(e,t,o),e=e.sibling;e!==null;)rd(e,t,o),e=e.sibling}function nd(e,t,o){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?o.insertBefore(e,t):o.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(nd(e,t,o),e=e.sibling;e!==null;)nd(e,t,o),e=e.sibling}var ht=null,vo=!1;function nr(e,t,o){for(o=o.child;o!==null;)nb(e,t,o),o=o.sibling}function nb(e,t,o){if(Do&&typeof Do.onCommitFiberUnmount=="function")try{Do.onCommitFiberUnmount(es,o)}catch{}switch(o.tag){case 5:Et||Rn(o,t);case 6:var r=ht,n=vo;ht=null,nr(e,t,o),ht=r,vo=n,ht!==null&&(vo?(e=ht,o=o.stateNode,e.nodeType===8?e.parentNode.removeChild(o):e.removeChild(o)):ht.removeChild(o.stateNode));break;case 18:ht!==null&&(vo?(e=ht,o=o.stateNode,e.nodeType===8?Xs(e.parentNode,o):e.nodeType===1&&Xs(e,o),Ui(e)):Xs(ht,o.stateNode));break;case 4:r=ht,n=vo,ht=o.stateNode.containerInfo,vo=!0,nr(e,t,o),ht=r,vo=n;break;case 0:case 11:case 14:case 15:if(!Et&&(r=o.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){n=r=r.next;do{var i=n,a=i.destroy;i=i.tag,a!==void 0&&(i&2||i&4)&&td(o,t,a),n=n.next}while(n!==r)}nr(e,t,o);break;case 1:if(!Et&&(Rn(o,t),r=o.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=o.memoizedProps,r.state=o.memoizedState,r.componentWillUnmount()}catch(l){Ke(o,t,l)}nr(e,t,o);break;case 21:nr(e,t,o);break;case 22:o.mode&1?(Et=(r=Et)||o.memoizedState!==null,nr(e,t,o),Et=r):nr(e,t,o);break;default:nr(e,t,o)}}function ep(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var o=e.stateNode;o===null&&(o=e.stateNode=new Xy),t.forEach(function(r){var n=r_.bind(null,e,r);o.has(r)||(o.add(r),r.then(n,n))})}}function go(e,t){var o=t.deletions;if(o!==null)for(var r=0;rn&&(n=a),r&=~i}if(r=n,r=Ze()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*qy(r/1960))-r,10e?16:e,fr===null)var r=!1;else{if(e=fr,fr=null,Al=0,we&6)throw Error(G(331));var n=we;for(we|=4,ie=e.current;ie!==null;){var i=ie,a=i.child;if(ie.flags&16){var l=i.deletions;if(l!==null){for(var c=0;cZe()-hu?Hr(e,0):pu|=o),Ut(e,t)}function fb(e,t){t===0&&(e.mode&1?(t=Ra,Ra<<=1,!(Ra&130023424)&&(Ra=4194304)):t=1);var o=Ct();e=Qo(e,t),e!==null&&(sa(e,t,o),Ut(e,o))}function o_(e){var t=e.memoizedState,o=0;t!==null&&(o=t.retryLane),fb(e,o)}function r_(e,t){var o=0;switch(e.tag){case 13:var r=e.stateNode,n=e.memoizedState;n!==null&&(o=n.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(G(314))}r!==null&&r.delete(t),fb(e,o)}var pb;pb=function(e,t,o){if(e!==null)if(e.memoizedProps!==t.pendingProps||zt.current)Pt=!0;else{if(!(e.lanes&o)&&!(t.flags&128))return Pt=!1,Hy(e,t,o);Pt=!!(e.flags&131072)}else Pt=!1,$e&&t.flags&1048576&&vg(t,kl,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Za(e,t),e=t.pendingProps;var n=Bn(t,Rt.current);Dn(t,o),n=lu(null,t,r,e,n,o);var i=su();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,Ft(r)?(i=!0,_l(t)):i=!1,t.memoizedState=n.state!==null&&n.state!==void 0?n.state:null,ou(t),n.updater=ls,t.stateNode=n,n._reactInternals=t,Gc(t,r,e,o),t=Jc(null,t,r,!0,i,o)):(t.tag=0,$e&&i&&Kd(t),St(null,t,n,o),t=t.child),t;case 16:r=t.elementType;e:{switch(Za(e,t),e=t.pendingProps,n=r._init,r=n(r._payload),t.type=r,n=t.tag=i_(r),e=bo(r,e),n){case 0:t=qc(null,t,r,e,o);break e;case 1:t=Kf(null,t,r,e,o);break e;case 11:t=Xf(null,t,r,e,o);break e;case 14:t=Gf(null,t,r,bo(r.type,e),o);break e}throw Error(G(306,r,""))}return t;case 0:return r=t.type,n=t.pendingProps,n=t.elementType===r?n:bo(r,n),qc(e,t,r,n,o);case 1:return r=t.type,n=t.pendingProps,n=t.elementType===r?n:bo(r,n),Kf(e,t,r,n,o);case 3:e:{if(qg(t),e===null)throw Error(G(387));r=t.pendingProps,i=t.memoizedState,n=i.element,kg(e,t),Rl(t,r,null,o);var a=t.memoizedState;if(r=a.element,i.isDehydrated)if(i={element:r,isDehydrated:!1,cache:a.cache,pendingSuspenseBoundaries:a.pendingSuspenseBoundaries,transitions:a.transitions},t.updateQueue.baseState=i,t.memoizedState=i,t.flags&256){n=Wn(Error(G(423)),t),t=qf(e,t,r,o,n);break e}else if(r!==n){n=Wn(Error(G(424)),t),t=qf(e,t,r,o,n);break e}else for(Gt=mr(t.stateNode.containerInfo.firstChild),Kt=t,$e=!0,mo=null,o=_g(t,null,r,o),t.child=o;o;)o.flags=o.flags&-3|4096,o=o.sibling;else{if(zn(),r===n){t=er(e,t,o);break e}St(e,t,r,o)}t=t.child}return t;case 5:return Eg(t),e===null&&$c(t),r=t.type,n=t.pendingProps,i=e!==null?e.memoizedProps:null,a=n.children,Fc(r,n)?a=null:i!==null&&Fc(r,i)&&(t.flags|=32),Kg(e,t),St(e,t,a,o),t.child;case 6:return e===null&&$c(t),null;case 13:return Jg(e,t,o);case 4:return ru(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=Fn(t,null,r,o):St(e,t,r,o),t.child;case 11:return r=t.type,n=t.pendingProps,n=t.elementType===r?n:bo(r,n),Xf(e,t,r,n,o);case 7:return St(e,t,t.pendingProps,o),t.child;case 8:return St(e,t,t.pendingProps.children,o),t.child;case 12:return St(e,t,t.pendingProps.children,o),t.child;case 10:e:{if(r=t.type._context,n=t.pendingProps,i=t.memoizedProps,a=n.value,Pe(El,r._currentValue),r._currentValue=a,i!==null)if(wo(i.value,a)){if(i.children===n.children&&!zt.current){t=er(e,t,o);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===r){if(i.tag===1){c=Xo(-1,o&-o),c.tag=2;var d=i.updateQueue;if(d!==null){d=d.shared;var f=d.pending;f===null?c.next=c:(c.next=f.next,f.next=c),d.pending=c}}i.lanes|=o,c=i.alternate,c!==null&&(c.lanes|=o),Yc(i.return,o,t),l.lanes|=o;break}c=c.next}}else if(i.tag===10)a=i.type===t.type?null:i.child;else if(i.tag===18){if(a=i.return,a===null)throw Error(G(341));a.lanes|=o,l=a.alternate,l!==null&&(l.lanes|=o),Yc(a,o,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}St(e,t,n.children,o),t=t.child}return t;case 9:return n=t.type,r=t.pendingProps.children,Dn(t,o),n=uo(n),r=r(n),t.flags|=1,St(e,t,r,o),t.child;case 14:return r=t.type,n=bo(r,t.pendingProps),n=bo(r.type,n),Gf(e,t,r,n,o);case 15:return Xg(e,t,t.type,t.pendingProps,o);case 17:return r=t.type,n=t.pendingProps,n=t.elementType===r?n:bo(r,n),Za(e,t),t.tag=1,Ft(r)?(e=!0,_l(t)):e=!1,Dn(t,o),Hg(t,r,n),Gc(t,r,n,o),Jc(null,t,r,!0,e,o);case 19:return Zg(e,t,o);case 22:return Gg(e,t,o)}throw Error(G(156,t.tag))};function hb(e,t){return Uh(e,t)}function n_(e,t,o,r){this.tag=e,this.key=o,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=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function lo(e,t,o,r){return new n_(e,t,o,r)}function mu(e){return e=e.prototype,!(!e||!e.isReactComponent)}function i_(e){if(typeof e=="function")return mu(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Pd)return 11;if(e===Bd)return 14}return 2}function wr(e,t){var o=e.alternate;return o===null?(o=lo(e.tag,t,e.key,e.mode),o.elementType=e.elementType,o.type=e.type,o.stateNode=e.stateNode,o.alternate=e,e.alternate=o):(o.pendingProps=t,o.type=e.type,o.flags=0,o.subtreeFlags=0,o.deletions=null),o.flags=e.flags&14680064,o.childLanes=e.childLanes,o.lanes=e.lanes,o.child=e.child,o.memoizedProps=e.memoizedProps,o.memoizedState=e.memoizedState,o.updateQueue=e.updateQueue,t=e.dependencies,o.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},o.sibling=e.sibling,o.index=e.index,o.ref=e.ref,o}function tl(e,t,o,r,n,i){var a=2;if(r=e,typeof e=="function")mu(e)&&(a=1);else if(typeof e=="string")a=5;else e:switch(e){case vn:return $r(o.children,n,i,t);case Id:a=8,n|=8;break;case mc:return e=lo(12,o,t,n|2),e.elementType=mc,e.lanes=i,e;case xc:return e=lo(13,o,t,n),e.elementType=xc,e.lanes=i,e;case yc:return e=lo(19,o,t,n),e.elementType=yc,e.lanes=i,e;case Eh:return ds(o,n,i,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case wh:a=10;break e;case kh:a=9;break e;case Pd:a=11;break e;case Bd:a=14;break e;case ar:a=16,r=null;break e}throw Error(G(130,e==null?e:typeof e,""))}return t=lo(a,o,t,n),t.elementType=e,t.type=r,t.lanes=i,t}function $r(e,t,o,r){return e=lo(7,e,r,t),e.lanes=o,e}function ds(e,t,o,r){return e=lo(22,e,r,t),e.elementType=Eh,e.lanes=o,e.stateNode={isHidden:!1},e}function tc(e,t,o){return e=lo(6,e,null,t),e.lanes=o,e}function oc(e,t,o){return t=lo(4,e.children!==null?e.children:[],e.key,t),t.lanes=o,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function a_(e,t,o,r,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=Is(0),this.expirationTimes=Is(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Is(0),this.identifierPrefix=r,this.onRecoverableError=n,this.mutableSourceEagerHydrationData=null}function xu(e,t,o,r,n,i,a,l,c){return e=new a_(e,t,o,l,c),t===1?(t=1,i===!0&&(t|=8)):t=0,i=lo(3,null,null,t),e.current=i,i.stateNode=e,i.memoizedState={element:r,isDehydrated:o,cache:null,transitions:null,pendingSuspenseBoundaries:null},ou(i),e}function l_(e,t,o){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(mb)}catch(e){console.error(e)}}mb(),mh.exports=Jt;var Io=mh.exports,Jn,sp=Io;Jn=bc.createRoot=sp.createRoot,bc.hydrateRoot=sp.hydrateRoot;function Nt(){return Bm}function Qi(){return zm}function xb(e){if(!e||typeof e!="object")return null;const t=e,o=t.rootGraph;if(o&&typeof o=="object")return o;const r=t.graph;return r&&typeof r=="object"?r:e}function yb(e){return e._nodes??e.nodes??[]}function f_(e){return e._groups??e.groups??[]}function p_(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 _b(e,t){const o=new Set,r=[{graph:e,path:[]}];for(;r.length;){const{graph:n,path:i}=r.pop(),a=n;if(!o.has(a)){o.add(a),t(n,i);for(const l of yb(n)){const c=p_(l);c&&r.push({graph:c,path:i.concat([{node:l,graph:n,depth:i.length+1}])})}}}}function h_(){return globalThis.crypto?.randomUUID?.()??`bv-group-${Date.now()}-${Math.random().toString(16).slice(2)}`}function g_(e,t){const o=e;o.flags??(o.flags={});let r=typeof o.flags.bvGroupId=="string"?o.flags.bvGroupId:"";if(!r||t.has(r)){do r=h_();while(t.has(r));o.flags.bvGroupId=r}return t.add(r),r}function jl(e){const t=xb(e);if(!t)return[];const o=[],r=new Set;return _b(t,(n,i)=>{for(const a of f_(n)){const c=[...i.map(d=>String(d.node.title||d.node.type||d.node.id)),String(a.title||"Untitled Group")].join(" / ");o.push({group:a,graph:n,path:i,id:g_(a,r),pathLabel:c})}}),o}function b_(e,t){const o=xb(e);if(!o)return[];const r=[];return _b(o,(n,i)=>{for(const a of yb(n))wb(a,t)&&r.push({node:a,graph:n,path:i})}),r}function wb(e,t){const o=String(t);return[e.type,e.comfyClass,e.title,e.constructor?.name].filter(n=>typeof n=="string"&&n.length>0).map(String).includes(o)}const Hn="bv-control-config-changed";function v_(){return{version:2,forceActive:!1,controls:[]}}function ku(e){var o;const t=Nt()?.rootGraph;t&&(t.extra??(t.extra={}),(o=t.extra).bv_settings??(o.bv_settings={}),t.extra.bv_settings.controlConfig=e,t.setDirtyCanvas?.(!0,!0),window.dispatchEvent(new CustomEvent(Hn,{detail:e})))}function tn(){const e=Nt()?.rootGraph?.extra?.bv_settings?.controlConfig;return e?.version===2?e:v_()}function m_(e,t=()=>!1){const o=e.group.nodes??e.group._nodes;if(Array.isArray(o)){const l=o.filter(c=>c&&typeof c=="object"&&!t(c));if(l.length>0)return l}const[r,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,d]=l.pos||[0,0],[f,u]=l.size||[0,0];return c+f/2>=r&&c+f/2<=r+i&&d+u/2>=n&&d+u/2<=n+a})}const cp={activate:3,mute:2,bypass:1},dp=e=>e.charAt(0).toUpperCase()+e.slice(1);function kb(e){const t=new Map;for(const r of e.controls??[])if(r.enabled)for(const n of r.assignments??[]){if(n.unresolved)continue;const i=t.get(n.groupId)??[];i.push({controlId:r.id,controlName:r.name,action:n.action,groupId:n.groupId,groupPath:n.groupPath||n.groupTitle||n.groupId}),t.set(n.groupId,i)}const o=[];for(const r of t.values()){if(new Set(r.map(i=>i.action)).size<2)continue;const n=r.reduce((i,a)=>cp[a.action]>cp[i]?a.action:i,r[0].action);o.push({groupId:r[0].groupId,groupPath:r[0].groupPath,winnerAction:n,entries:r})}return o}function x_(e){if(!e.length)return"✓ No active conflicts";if(e.length>1)return`⚠ ${e.length} active control conflicts`;const t=e[0],o=[...new Set(t.entries.filter(r=>r.action!==t.winnerAction).map(r=>r.action))].join(", ");return`⚠ ${t.groupPath}: ${dp(t.winnerAction)} overrides ${o.split(", ").map(dp).join(", ")}`}function Eb({children:e}){const t=m.useRef();if(!t.current){const o=document.createElement("div");o.className="bv-ui bv-ui-portal",t.current=o}return m.useEffect(()=>(document.body.append(t.current),()=>t.current?.remove()),[]),Io.createPortal(e,t.current)}function Cr({open:e,anchor:t,children:o,onClose:r,className:n="",matchWidth:i=!1}){const a=m.useRef(null),[l,c]=m.useState({left:0,top:0,visibility:"hidden"});return m.useLayoutEffect(()=>{if(!e)return;const d=()=>{const p=t.current?.getBoundingClientRect(),g=a.current?.getBoundingClientRect();if(!p||!g)return;const x=8,w=6,E=i?Math.min(Math.max(p.width,240),window.innerWidth-x*2):void 0,b=E??g.width,h=Math.max(x,Math.min(p.left,window.innerWidth-b-x)),v=p.bottom+w,_=v+g.height<=window.innerHeight-x?v:Math.max(x,p.top-g.height-w);c({left:h,top:_,width:E,visibility:"visible"})};d();const f=requestAnimationFrame(d),u=new ResizeObserver(d);return t.current&&u.observe(t.current),a.current&&u.observe(a.current),window.addEventListener("resize",d),window.addEventListener("scroll",d,!0),()=>{cancelAnimationFrame(f),u.disconnect(),window.removeEventListener("resize",d),window.removeEventListener("scroll",d,!0)}},[t,i,e]),m.useEffect(()=>{if(!e)return;const d=u=>{const p=u.target;!t.current?.contains(p)&&!a.current?.contains(p)&&r?.()},f=u=>{u.key==="Escape"&&r?.()};return document.addEventListener("pointerdown",d),document.addEventListener("keydown",f),()=>{document.removeEventListener("pointerdown",d),document.removeEventListener("keydown",f)}},[t,r,e]),e?s.jsx(Eb,{children:s.jsx("div",{ref:a,className:`bv-anchored-popover ${n}`.trim(),style:l,children:o})}):null}function Eu({density:e="compact",className:t="",children:o}){return s.jsx("div",{className:`bv-density-${e} ${t}`.trim(),children:o})}function se({intent:e="secondary",icon:t,iconOnly:o=!1,loading:r=!1,density:n,className:i="",children:a,disabled:l,...c}){return s.jsxs("button",{...c,disabled:l||r,className:`bv-button ${e} ${n?`bv-density-${n}`:""} ${o?"icon-only":""} ${i}`.trim(),children:[r?s.jsx("span",{className:"bv-spinner"}):o?t??a:t,!o&&a]})}function y_({actions:e,onClose:t}){return s.jsx("div",{className:"bv-menu-content",role:"menu",children:e.map(o=>s.jsxs(Te.Fragment,{children:[o.separatorBefore&&s.jsx("hr",{}),s.jsxs("button",{type:"button",role:"menuitem",disabled:o.disabled,className:o.danger?"danger":"",onClick:()=>{o.onSelect(),t?.()},children:[o.icon,s.jsx("span",{children:o.label}),o.shortcut&&s.jsx("kbd",{children:o.shortcut})]})]},o.id))})}function Tu({label:e,actions:t,intent:o="secondary",icon:r,density:n}){const[i,a]=m.useState(!1),l=m.useRef(null);return s.jsxs("div",{className:"bv-menu-button",ref:l,children:[s.jsxs(se,{intent:o,icon:r,density:n,"aria-haspopup":"menu","aria-expanded":i,onClick:()=>a(!i),children:[e,s.jsx("span",{className:"bv-chevron"})]}),s.jsx(Cr,{open:i,anchor:l,onClose:()=>a(!1),className:"bv-menu",children:s.jsx(y_,{actions:t,onClose:()=>a(!1)})})]})}function __({items:e,orientation:t="horizontal",label:o="Tools",overflow:r=[],density:n}){return s.jsxs("div",{className:`bv-toolbar ${t}`,role:"toolbar","aria-orientation":t,"aria-label":o,children:[e.map((i,a)=>s.jsxs(Te.Fragment,{children:[a>0&&i.group!==e[a-1].group&&s.jsx("span",{className:"bv-toolbar-divider"}),s.jsx(se,{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)),r.length>0&&s.jsx(Tu,{label:"More",actions:r,intent:"ghost",density:n})]})}function up({items:e,compact:t=!1}){return s.jsx("dl",{className:`bv-definition-list ${t?"compact":""}`,children:e.map((o,r)=>s.jsxs("div",{className:"bv-definition-row",children:[s.jsx("dt",{children:o.term}),s.jsx("dd",{children:o.description})]},r))})}function gs({label:e,summary:t,icon:o,children:r,popover:n,className:i=""}){const[a,l]=m.useState(!1),c=m.useRef(null);return s.jsxs("div",{ref:c,className:`bv-adaptive-field ${i}`.trim(),children:[s.jsx("div",{className:"bv-adaptive-inline",children:r}),s.jsxs(se,{type:"button",intent:"secondary",className:"bv-adaptive-trigger",icon:o,"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(Cr,{open:a,anchor:c,onClose:()=>l(!1),className:"bv-adaptive-popover",children:[s.jsxs("header",{children:[s.jsx("strong",{children:e}),s.jsx(se,{type:"button",intent:"ghost",icon:"×",iconOnly:!0,"aria-label":`Close ${e} editor`,onClick:()=>l(!1)})]}),s.jsx("div",{children:n})]})]})}function fa({open:e,title:t,description:o,children:r,footer:n,onClose:i,modal:a=!0,size:l="medium"}){return e?s.jsx(Eb,{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}),o&&s.jsx("p",{children:o})]}),s.jsx(se,{intent:"ghost",icon:"×",iconOnly:!0,"aria-label":"Close",onClick:i})]}),s.jsx("div",{className:"bv-dialog-body",children:r}),n&&s.jsx("footer",{children:n})]})})}):null}function Ru({open:e,editorName:t,onSave:o,onDiscard:r,onKeep:n}){return s.jsx(fa,{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(se,{intent:"ghost",onClick:n,children:"Keep editing"}),s.jsx(se,{intent:"secondary",onClick:r,children:"Discard"}),s.jsx(se,{intent:"primary",onClick:o,children:"Save"})]}),children:s.jsx("p",{children:"Save the current draft, discard it, or return to the editor."})})}function Su(){const[e,t]=m.useState(null),o=n=>t({confirmLabel:"Continue",danger:!1,...n}),r=s.jsx(fa,{open:!!e,title:e?.title??"Confirm action",onClose:()=>t(null),size:"small",footer:s.jsxs(s.Fragment,{children:[s.jsx(se,{intent:"ghost",onClick:()=>t(null),children:"Cancel"}),s.jsx(se,{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:o,dialog:r}}function fp({trigger:e,children:t,open:o,onOpen:r}){const[n,i]=m.useState(!1),a=m.useRef(null),l=o??n,c=d=>{i(d),r?.(d)};return s.jsxs("span",{ref:a,className:"bv-popover-host",children:[e({open:l,toggle:()=>c(!l)}),s.jsx(Cr,{open:l,anchor:a,onClose:()=>c(!1),className:"bv-popover",children:t})]})}function bs({items:e,onReorder:t,onRemove:o,renderActions:r,initialExpanded:n=[]}){const[i,a]=m.useState(n),[l,c]=m.useState();return s.jsx("div",{className:"bv-sortable-list",children:e.map(d=>s.jsxs("article",{draggable:!d.disabled,onDragStart:()=>c(d.id),onDragOver:f=>f.preventDefault(),onDrop:()=>{if(!l||l===d.id)return;const f=[...e],u=f.findIndex(x=>x.id===l),p=f.findIndex(x=>x.id===d.id),[g]=f.splice(u,1);f.splice(p,0,g),t(f),c(void 0)},children:[s.jsxs("header",{children:[s.jsx("button",{type:"button",className:"bv-drag-handle","aria-label":`Reorder ${String(d.title)}`,children:"⠿"}),s.jsxs("div",{children:[s.jsx("strong",{children:d.title}),d.description&&s.jsx("small",{children:d.description})]}),r?.(d),s.jsxs("span",{className:"bv-segmented-actions",children:[o&&s.jsx(se,{intent:"ghost",iconOnly:!0,"aria-label":`Remove ${String(d.title)}`,title:"Remove",onClick:()=>o(d.id),children:"×"}),d.content&&s.jsx(se,{intent:"ghost",icon:s.jsx("span",{className:"bv-chevron"}),iconOnly:!0,"aria-label":`${i.includes(d.id)?"Collapse":"Expand"} ${String(d.title)}`,"aria-expanded":i.includes(d.id),onClick:()=>a(f=>f.includes(d.id)?f.filter(u=>u!==d.id):[...f,d.id])})]})]}),d.summary&&s.jsx("div",{className:"bv-sortable-summary",children:d.summary}),d.content&&i.includes(d.id)&&s.jsx("div",{className:"bv-sortable-content",children:d.content})]},d.id))})}const rt=Te.forwardRef(function({type:t="button",...o},r){return s.jsx("button",{...o,type:t,ref:r})}),w_=Te.forwardRef(function(t,o){return s.jsx("input",{...t,ref:o})});function jo({tone:e="neutral",title:t,children:o,icon:r,actions:n,onClose:i}){return s.jsxs("aside",{className:`bv-callout ${e}`,role:e==="danger"?"alert":"status",children:[r&&s.jsx("span",{className:"bv-callout-icon",children:r}),s.jsxs("div",{children:[t&&s.jsx("strong",{children:t}),s.jsx("div",{children:o}),n&&s.jsx("div",{className:"bv-callout-actions",children:n})]}),i&&s.jsx(se,{intent:"ghost",iconOnly:!0,"aria-label":"Close",onClick:i,children:"×"})]})}function Tb({children:e,tone:t="neutral",dot:o=!1}){return s.jsx("span",{className:`bv-badge ${t} ${o?"dot":""}`,children:e})}function vs({icon:e,title:t,description:o,actions:r}){return s.jsxs("div",{className:"bv-empty-state",children:[e,s.jsx("strong",{children:t}),o&&s.jsx("p",{children:o}),r]})}function k_({tone:e="neutral",title:t,children:o,onClose:r,duration:n=0}){const i=m.useRef(),a=m.useCallback(()=>{i.current&&window.clearTimeout(i.current)},[]),l=m.useCallback(()=>{a(),n&&(i.current=window.setTimeout(r,n))},[n,r,a]);return m.useEffect(()=>(l(),a),[l,a]),s.jsxs("div",{className:`bv-toast ${e}`,role:"status",tabIndex:0,onPointerEnter:a,onPointerLeave:l,onFocus:a,onBlur:l,children:[s.jsxs("div",{children:[s.jsx("strong",{children:t}),o&&s.jsx("p",{children:o})]}),s.jsx(se,{intent:"ghost",iconOnly:!0,"aria-label":"Dismiss",onClick:r,children:"×"})]})}function Zn(){return(Zn=Object.assign||function(e){for(var t=1;t=0||(n[o]=e[o]);return n}function Ni(e){var t=m.useRef(e),o=m.useRef(function(r){t.current&&t.current(r)});return t.current=e,o.current}var $n=function(e,t,o){return t===void 0&&(t=0),o===void 0&&(o=1),e>o?o:e0:v.buttons>0)&&i.current?a(pp(i.current,v,d.current)):(h(!1),c())},b=function(){h(!1),c()};function h(v){var _=f.current,y=cd(i.current),T=v?y.addEventListener:y.removeEventListener;T(_?"touchmove":"mousemove",E),T(_?"touchend":"mouseup",b)}return[function(v){var _=v.nativeEvent,y=i.current;if(y&&(hp(_),!function(L,B){return B&&!Oi(L)}(_,f.current)&&y)){if(Oi(_)){f.current=!0;var T=_.changedTouches||[];T.length&&(d.current=T[0].identifier)}y.focus(),a(pp(y,_,d.current)),h(!0)}},function(v){var _=v.which||v.keyCode;_<37||_>40||(v.preventDefault(),l({left:_===39?.05:_===37?-.05:0,top:_===40?.05:_===38?-.05:0}))},function(v){var _=v.which||v.keyCode;_>=37&&_<=40&&c()},h]},[l,a,c]),p=u[0],g=u[1],x=u[2],w=u[3];return m.useEffect(function(){return w},[w]),Te.createElement("div",Zn({},n,{onTouchStart:p,onMouseDown:p,className:"react-colorful__interactive",ref:i,onKeyDown:g,onKeyUp:x,tabIndex:0,role:"slider"}))}),pa=function(e){return e.filter(Boolean).join(" ")},Nu=function(e){var t=e.color,o=e.left,r=e.top,n=r===void 0?.5:r,i=pa(["react-colorful__pointer",e.className]);return Te.createElement("div",{className:i,style:{top:100*n+"%",left:100*o+"%"}},Te.createElement("div",{className:"react-colorful__pointer-fill",style:{backgroundColor:t}}))},ut=function(e,t,o){return t===void 0&&(t=0),o===void 0&&(o=Math.pow(10,t)),Math.round(o*e)/o},Rb=function(e){return R_(dd(e))},dd=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?ut(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?ut(parseInt(e.substring(6,8),16)/255,2):1}},Sb=function(e){return T_(E_(e))},Lb=function(e){var t=e.s,o=e.v,r=e.a,n=(200-t)*o/100;return{h:ut(e.h),s:ut(n>0&&n<200?t*o/100/(n<=100?n:200-n)*100:0),l:ut(n/2),a:ut(r,2)}},ud=function(e){var t=Lb(e);return"hsl("+t.h+", "+t.s+"%, "+t.l+"%)"},rc=function(e){var t=Lb(e);return"hsla("+t.h+", "+t.s+"%, "+t.l+"%, "+t.a+")"},E_=function(e){var t=e.h,o=e.s,r=e.v,n=e.a;t=t/360*6,o/=100,r/=100;var i=Math.floor(t),a=r*(1-o),l=r*(1-(t-i)*o),c=r*(1-(1-t+i)*o),d=i%6;return{r:ut(255*[r,l,a,a,c,r][d]),g:ut(255*[c,r,r,l,a,a][d]),b:ut(255*[a,a,c,r,r,l][d]),a:ut(n,2)}},Ba=function(e){var t=e.toString(16);return t.length<2?"0"+t:t},T_=function(e){var t=e.r,o=e.g,r=e.b,n=e.a,i=n<1?Ba(ut(255*n)):"";return"#"+Ba(t)+Ba(o)+Ba(r)+i},R_=function(e){var t=e.r,o=e.g,r=e.b,n=e.a,i=Math.max(t,o,r),a=i-Math.min(t,o,r),l=a?i===t?(o-r)/a:i===o?2+(r-t)/a:4+(t-o)/a:0;return{h:ut(60*(l<0?l+6:l)),s:ut(i?a/i*100:0),v:ut(i/255*100),a:n}},Cb=Te.memo(function(e){var t=e.hue,o=e.onChange,r=e.onChangeEnd,n=pa(["react-colorful__hue",e.className]);return Te.createElement("div",{className:n},Te.createElement(Cu,{onMove:function(i){o({h:360*i.left})},onKey:function(i){o({h:$n(t+360*i.left,0,360)})},onEnd:r,"aria-label":"Hue","aria-valuenow":ut(t),"aria-valuemax":"360","aria-valuemin":"0"},Te.createElement(Nu,{className:"react-colorful__hue-pointer",left:t/360,color:ud({h:t,s:100,v:100,a:1})})))}),Nb=Te.memo(function(e){var t=e.hsva,o=e.onChange,r=e.onChangeEnd,n={backgroundColor:ud({h:t.h,s:100,v:100,a:1})};return Te.createElement("div",{className:"react-colorful__saturation",style:n},Te.createElement(Cu,{onMove:function(i){o({s:100*i.left,v:100-100*i.top})},onKey:function(i){o({s:$n(t.s+100*i.left,0,100),v:$n(t.v-100*i.top,0,100)})},onEnd:r,"aria-label":"Color","aria-valuetext":"Saturation "+ut(t.s)+"%, Brightness "+ut(t.v)+"%"},Te.createElement(Nu,{className:"react-colorful__saturation-pointer",top:1-t.v/100,left:t.s/100,color:ud(t)})))}),Ob=function(e,t){if(e===t)return!0;for(var o in e)if(e[o]!==t[o])return!1;return!0},Ab=function(e,t){return e.toLowerCase()===t.toLowerCase()||Ob(dd(e),dd(t))};function Db(e,t,o,r){var n=Ni(o),i=Ni(r),a=m.useState(function(){return e.toHsva(t)}),l=a[0],c=a[1],d=m.useRef({color:t,hsva:l}),f=m.useRef(!1);m.useEffect(function(){if(!e.equal(t,d.current.color)){var g=e.toHsva(t);d.current={hsva:g,color:t},c(g),f.current=!1}},[t,e]),m.useEffect(function(){var g;Ob(l,d.current.hsva)||e.equal(g=e.fromHsva(l),d.current.color)||(d.current={hsva:l,color:g},n(g),f.current=!0)},[l,e,n]);var u=m.useCallback(function(g){c(function(x){return Object.assign({},x,g)})},[]),p=m.useCallback(function(){f.current&&(f.current=!1,i(d.current.color))},[i]);return[l,u,p]}var S_=typeof window<"u"?m.useLayoutEffect:m.useEffect,L_=function(){return typeof __webpack_nonce__<"u"?__webpack_nonce__:void 0},gp=new WeakMap,Mb=function(e){S_(function(){var t=e.current;if(typeof document<"u"&&t){var o=t.getRootNode?t.getRootNode():t.ownerDocument,r=o&&("head"in o||"host"in o)?o:t.ownerDocument;if(!gp.has(r)){var n="head"in r?r.head:r,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=L_();a&&i.setAttribute("nonce",a),gp.set(r,i),n.appendChild(i)}}},[])},C_=function(e){var t=e.className,o=e.colorModel,r=e.color,n=r===void 0?o.defaultColor:r,i=e.onChange,a=e.onChangeEnd,l=Lu(e,["className","colorModel","color","onChange","onChangeEnd"]),c=m.useRef(null);Mb(c);var d=Db(o,n,i,a),f=d[0],u=d[1],p=d[2],g=pa(["react-colorful",t]);return Te.createElement("div",Zn({},l,{ref:c,className:g}),Te.createElement(Nb,{hsva:f,onChange:u,onChangeEnd:p}),Te.createElement(Cb,{hue:f.h,onChange:u,onChangeEnd:p,className:"react-colorful__last-control"}))},N_={defaultColor:"000",toHsva:Rb,fromHsva:function(e){return Sb({h:e.h,s:e.s,v:e.v,a:1})},equal:Ab},O_=function(e){return Te.createElement(C_,Zn({},e,{colorModel:N_}))},A_=function(e){var t=e.className,o=e.hsva,r=e.onChange,n=e.onChangeEnd,i={backgroundImage:"linear-gradient(90deg, "+rc(Object.assign({},o,{a:0}))+", "+rc(Object.assign({},o,{a:1}))+")"},a=pa(["react-colorful__alpha",t]),l=ut(100*o.a);return Te.createElement("div",{className:a},Te.createElement("div",{className:"react-colorful__alpha-gradient",style:i}),Te.createElement(Cu,{onMove:function(c){r({a:c.left})},onKey:function(c){r({a:$n(o.a+c.left)})},onEnd:n,"aria-label":"Alpha","aria-valuetext":l+"%","aria-valuenow":l,"aria-valuemin":"0","aria-valuemax":"100"},Te.createElement(Nu,{className:"react-colorful__alpha-pointer",left:o.a,color:rc(o)})))},D_=function(e){var t=e.className,o=e.colorModel,r=e.color,n=r===void 0?o.defaultColor:r,i=e.onChange,a=e.onChangeEnd,l=Lu(e,["className","colorModel","color","onChange","onChangeEnd"]),c=m.useRef(null);Mb(c);var d=Db(o,n,i,a),f=d[0],u=d[1],p=d[2],g=pa(["react-colorful",t]);return Te.createElement("div",Zn({},l,{ref:c,className:g}),Te.createElement(Nb,{hsva:f,onChange:u,onChangeEnd:p}),Te.createElement(Cb,{hue:f.h,onChange:u,onChangeEnd:p}),Te.createElement(A_,{hsva:f,onChange:u,onChangeEnd:p,className:"react-colorful__last-control"}))},M_={defaultColor:"0001",toHsva:Rb,fromHsva:Sb,equal:Ab},j_=function(e){return Te.createElement(D_,Zn({},e,{colorModel:M_}))},jb={},ct=co&&co.__assign||function(){return ct=Object.assign||function(e){for(var t,o=1,r=arguments.length;o-1){N.current.stack=ge.slice(0,Ce+1);var Qe=N.current.stack.length;if(Qe>yp){var Be=Qe-yp;N.current.stack=ge.slice(Be,Qe),N.current.offset=Math.max(N.current.offset-Be,0)}}var _e=Date.now();if(se){var xe=N.current.stack[N.current.offset];if(xe&&_e-xe.timestamp=Ce&&va<=Qe&&or.startsWith(pe)?or.substring(pe.length):or}).join(` +`),$_=eo.forwardRef(function(t,o){var r=t.autoFocus,n=t.disabled,i=t.form,a=t.highlight,l=t.ignoreTabKey,c=l===void 0?!1:l,d=t.insertSpaces,f=d===void 0?!0:d,u=t.maxLength,p=t.minLength,g=t.name,x=t.onBlur,w=t.onClick,E=t.onFocus,b=t.onKeyDown,h=t.onKeyUp,v=t.onValueChange,_=t.padding,y=_===void 0?0:_,T=t.placeholder,L=t.preClassName,B=t.readOnly,C=t.required,j=t.style,z=t.tabSize,S=z===void 0?2:z,k=t.textareaClassName,I=t.textareaId,D=t.value,R=z_(t,["autoFocus","disabled","form","highlight","ignoreTabKey","insertSpaces","maxLength","minLength","name","onBlur","onClick","onFocus","onKeyDown","onKeyUp","onValueChange","padding","placeholder","preClassName","readOnly","required","style","tabSize","textareaClassName","textareaId","value"]),O=eo.useRef({stack:[],offset:-1}),M=eo.useRef(null),V=eo.useState(!0),F=V[0],ne=V[1],Y={paddingTop:typeof y=="object"?y.top:y,paddingRight:typeof y=="object"?y.right:y,paddingBottom:typeof y=="object"?y.bottom:y,paddingLeft:typeof y=="object"?y.left:y},K=a(D),Z=function(J,le){return J.substring(0,le).split(` +`)},$=eo.useCallback(function(J,le){var ce,X,fe;le===void 0&&(le=!1);var pe=O.current,ge=pe.stack,Ce=pe.offset;if(ge.length&&Ce>-1){O.current.stack=ge.slice(0,Ce+1);var Qe=O.current.stack.length;if(Qe>yp){var Be=Qe-yp;O.current.stack=ge.slice(Be,Qe),O.current.offset=Math.max(O.current.offset-Be,0)}}var _e=Date.now();if(le){var xe=O.current.stack[O.current.offset];if(xe&&_e-xe.timestamp=Ce&&va<=Qe&&rr.startsWith(pe)?rr.substring(pe.length):rr}).join(` `);if(ce!==Be){var _e=ge[Ce];ae({value:Be,selectionStart:_e?.startsWith(pe)?X-pe.length:X,selectionEnd:fe-(ce.length-Be.length)})}}else if(X!==fe){var ge=Z(ce,X),xe=ge.length-1,ze=Z(ce,fe).length-1,_e=ge[xe];ae({value:ce.split(` `).map(function(ma,xa){return xa>=xe&&xa<=ze?pe+ma:ma}).join(` -`),selectionStart:_e&&/\S/.test(_e)?X+pe.length:X,selectionEnd:fe+pe.length*(ze-xe+1)})}else{var Je=X+pe.length;ae({value:ce.substring(0,X)+pe+ce.substring(fe),selectionStart:Je,selectionEnd:Je})}else if(J.key==="Backspace"){var Fe=X!==fe,jo=ce.substring(0,X);if(jo.endsWith(pe)&&!Fe){J.preventDefault();var Je=X-pe.length;ae({value:ce.substring(0,X-pe.length)+ce.substring(fe),selectionStart:Je,selectionEnd:Je})}}else if(J.key==="Enter"){if(X===fe){var sn=Z(ce,X).pop(),Cr=sn?.match(/^\s+/);if(Cr?.[0]){J.preventDefault();var Eo=` -`+Cr[0],Je=X+Eo.length;ae({value:ce.substring(0,X)+Eo+ce.substring(fe),selectionStart:Je,selectionEnd:Je})}}}else if(J.keyCode===bp||J.keyCode===vp||J.keyCode===mp||J.keyCode===xp){var Ne=void 0;J.keyCode===bp&&J.shiftKey?Ne=["(",")"]:J.keyCode===vp?J.shiftKey?Ne=["{","}"]:Ne=["[","]"]:J.keyCode===mp?J.shiftKey?Ne=['"','"']:Ne=["'","'"]:J.keyCode===xp&&!J.shiftKey&&(Ne=["`","`"]),X!==fe&&Ne&&(J.preventDefault(),ae({value:ce.substring(0,X)+Ne[0]+ce.substring(X,fe)+Ne[1]+ce.substring(fe),selectionStart:X,selectionEnd:fe+2}))}else(nc?J.metaKey&&J.keyCode===Ba:J.ctrlKey&&J.keyCode===Ba)&&!J.shiftKey&&!J.altKey?(J.preventDefault(),Le()):(nc?J.metaKey&&J.keyCode===Ba&&J.shiftKey:V_?J.ctrlKey&&J.keyCode===F_:J.ctrlKey&&J.keyCode===Ba&&J.shiftKey)&&!J.altKey?(J.preventDefault(),ke()):J.keyCode===U_&&J.ctrlKey&&(!nc||J.shiftKey)&&(J.preventDefault(),ne(function(or){return!or}))}},Dt=function(J){var se=J.currentTarget,ce=se.value,X=se.selectionStart,fe=se.selectionEnd;$({value:ce,selectionStart:X,selectionEnd:fe},!0),v(ce)};return eo.useEffect(function(){Q()},[Q]),eo.useImperativeHandle(o,function(){return{get session(){return{history:N.current}},set session(J){N.current=J.history}}},[]),eo.createElement("div",ct({},S,{style:ct(ct({},di.container),B)}),eo.createElement("pre",ct({className:R,"aria-hidden":"true",style:ct(ct(ct({},di.editor),di.highlight),Y)},typeof K=="string"?{dangerouslySetInnerHTML:{__html:K+"
"}}:{children:K})),eo.createElement("textarea",{ref:function(J){return A.current=J},style:ct(ct(ct({},di.editor),di.textarea),Y),className:tl+(T?" ".concat(T):""),id:j,value:D,onChange:Dt,onKeyDown:ve,onClick:w,onKeyUp:h,onFocus:k,onBlur:x,disabled:n,form:i,maxLength:u,minLength:p,name:g,placeholder:E,readOnly:P,required:I,autoFocus:r,autoCapitalize:"off",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"data-gramm":!1}),eo.createElement("style",{dangerouslySetInnerHTML:{__html:H_}}))}),di={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"}};Ib.default=$_;var Y_={exports:{}};(function(e){var t=typeof window<"u"?window:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:{};/** +`),selectionStart:_e&&/\S/.test(_e)?X+pe.length:X,selectionEnd:fe+pe.length*(ze-xe+1)})}else{var Je=X+pe.length;ae({value:ce.substring(0,X)+pe+ce.substring(fe),selectionStart:Je,selectionEnd:Je})}else if(J.key==="Backspace"){var Fe=X!==fe,Po=ce.substring(0,X);if(Po.endsWith(pe)&&!Fe){J.preventDefault();var Je=X-pe.length;ae({value:ce.substring(0,X-pe.length)+ce.substring(fe),selectionStart:Je,selectionEnd:Je})}}else if(J.key==="Enter"){if(X===fe){var cn=Z(ce,X).pop(),Nr=cn?.match(/^\s+/);if(Nr?.[0]){J.preventDefault();var Eo=` +`+Nr[0],Je=X+Eo.length;ae({value:ce.substring(0,X)+Eo+ce.substring(fe),selectionStart:Je,selectionEnd:Je})}}}else if(J.keyCode===bp||J.keyCode===vp||J.keyCode===mp||J.keyCode===xp){var Ne=void 0;J.keyCode===bp&&J.shiftKey?Ne=["(",")"]:J.keyCode===vp?J.shiftKey?Ne=["{","}"]:Ne=["[","]"]:J.keyCode===mp?J.shiftKey?Ne=['"','"']:Ne=["'","'"]:J.keyCode===xp&&!J.shiftKey&&(Ne=["`","`"]),X!==fe&&Ne&&(J.preventDefault(),ae({value:ce.substring(0,X)+Ne[0]+ce.substring(X,fe)+Ne[1]+ce.substring(fe),selectionStart:X,selectionEnd:fe+2}))}else(nc?J.metaKey&&J.keyCode===za:J.ctrlKey&&J.keyCode===za)&&!J.shiftKey&&!J.altKey?(J.preventDefault(),Le()):(nc?J.metaKey&&J.keyCode===za&&J.shiftKey:V_?J.ctrlKey&&J.keyCode===F_:J.ctrlKey&&J.keyCode===za&&J.shiftKey)&&!J.altKey?(J.preventDefault(),ke()):J.keyCode===U_&&J.ctrlKey&&(!nc||J.shiftKey)&&(J.preventDefault(),ne(function(rr){return!rr}))}},Dt=function(J){var le=J.currentTarget,ce=le.value,X=le.selectionStart,fe=le.selectionEnd;$({value:ce,selectionStart:X,selectionEnd:fe},!0),v(ce)};return eo.useEffect(function(){Q()},[Q]),eo.useImperativeHandle(o,function(){return{get session(){return{history:O.current}},set session(J){O.current=J.history}}},[]),eo.createElement("div",ct({},R,{style:ct(ct({},di.container),j)}),eo.createElement("pre",ct({className:L,"aria-hidden":"true",style:ct(ct(ct({},di.editor),di.highlight),Y)},typeof K=="string"?{dangerouslySetInnerHTML:{__html:K+"
"}}:{children:K})),eo.createElement("textarea",{ref:function(J){return M.current=J},style:ct(ct(ct({},di.editor),di.textarea),Y),className:ol+(k?" ".concat(k):""),id:I,value:D,onChange:Dt,onKeyDown:ve,onClick:w,onKeyUp:h,onFocus:E,onBlur:x,disabled:n,form:i,maxLength:u,minLength:p,name:g,placeholder:T,readOnly:B,required:C,autoFocus:r,autoCapitalize:"off",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"data-gramm":!1}),eo.createElement("style",{dangerouslySetInnerHTML:{__html:H_}}))}),di={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"}};jb.default=$_;var Y_={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 o=function(r){var n=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,i=0,a={},l={manual:r.Prism&&r.Prism.manual,disableWorkerMessageHandler:r.Prism&&r.Prism.disableWorkerMessageHandler,util:{encode:function h(v){return v instanceof c?new c(v.type,h(v.content),v.alias):Array.isArray(v)?v.map(h):v.replace(/&/g,"&").replace(/"u")return null;if(document.currentScript&&document.currentScript.tagName==="SCRIPT")return document.currentScript;try{throw new Error}catch(y){var h=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(y.stack)||[])[1];if(h){var v=document.getElementsByTagName("script");for(var _ in v)if(v[_].src==h)return v[_]}return null}},isActive:function(h,v,_){for(var y="no-"+v;h;){var E=h.classList;if(E.contains(v))return!0;if(E.contains(y))return!1;h=h.parentElement}return!!_}},languages:{plain:a,plaintext:a,text:a,txt:a,extend:function(h,v){var _=l.util.clone(l.languages[h]);for(var y in v)_[y]=v[y];return _},insertBefore:function(h,v,_,y){y=y||l.languages;var E=y[h],R={};for(var P in E)if(E.hasOwnProperty(P)){if(P==v)for(var I in _)_.hasOwnProperty(I)&&(R[I]=_[I]);_.hasOwnProperty(P)||(R[P]=E[P])}var B=y[h];return y[h]=R,l.languages.DFS(l.languages,function(z,L){L===B&&z!=h&&(this[z]=R)}),R},DFS:function h(v,_,y,E){E=E||{};var R=l.util.objId;for(var P in v)if(v.hasOwnProperty(P)){_.call(v,P,v[P],y||P);var I=v[P],B=l.util.type(I);B==="Object"&&!E[R(I)]?(E[R(I)]=!0,h(I,_,null,E)):B==="Array"&&!E[R(I)]&&(E[R(I)]=!0,h(I,_,P,E))}}},plugins:{},highlightAll:function(h,v){l.highlightAllUnder(document,h,v)},highlightAllUnder:function(h,v,_){var y={callback:_,container:h,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};l.hooks.run("before-highlightall",y),y.elements=Array.prototype.slice.apply(y.container.querySelectorAll(y.selector)),l.hooks.run("before-all-elements-highlight",y);for(var E=0,R;R=y.elements[E++];)l.highlightElement(R,v===!0,y.callback)},highlightElement:function(h,v,_){var y=l.util.getLanguage(h),E=l.languages[y];l.util.setLanguage(h,y);var R=h.parentElement;R&&R.nodeName.toLowerCase()==="pre"&&l.util.setLanguage(R,y);var P=h.textContent,I={element:h,language:y,grammar:E,code:P};function B(L){I.highlightedCode=L,l.hooks.run("before-insert",I),I.element.innerHTML=I.highlightedCode,l.hooks.run("after-highlight",I),l.hooks.run("complete",I),_&&_.call(I.element)}if(l.hooks.run("before-sanity-check",I),R=I.element.parentElement,R&&R.nodeName.toLowerCase()==="pre"&&!R.hasAttribute("tabindex")&&R.setAttribute("tabindex","0"),!I.code){l.hooks.run("complete",I),_&&_.call(I.element);return}if(l.hooks.run("before-highlight",I),!I.grammar){B(l.util.encode(I.code));return}if(v&&r.Worker){var z=new Worker(l.filename);z.onmessage=function(L){B(L.data)},z.postMessage(JSON.stringify({language:I.language,code:I.code,immediateClose:!0}))}else B(l.highlight(I.code,I.grammar,I.language))},highlight:function(h,v,_){var y={code:h,grammar:v,language:_};if(l.hooks.run("before-tokenize",y),!y.grammar)throw new Error('The language "'+y.language+'" has no grammar.');return y.tokens=l.tokenize(y.code,y.grammar),l.hooks.run("after-tokenize",y),c.stringify(l.util.encode(y.tokens),y.language)},tokenize:function(h,v){var _=v.rest;if(_){for(var y in _)v[y]=_[y];delete v.rest}var E=new u;return p(E,E.head,h),f(h,E,v,E.head,0),x(E)},hooks:{all:{},add:function(h,v){var _=l.hooks.all;_[h]=_[h]||[],_[h].push(v)},run:function(h,v){var _=l.hooks.all[h];if(!(!_||!_.length))for(var y=0,E;E=_[y++];)E(v)}},Token:c};r.Prism=l;function c(h,v,_,y){this.type=h,this.content=v,this.alias=_,this.length=(y||"").length|0}c.stringify=function h(v,_){if(typeof v=="string")return v;if(Array.isArray(v)){var y="";return v.forEach(function(B){y+=h(B,_)}),y}var E={type:v.type,content:h(v.content,_),tag:"span",classes:["token",v.type],attributes:{},language:_},R=v.alias;R&&(Array.isArray(R)?Array.prototype.push.apply(E.classes,R):E.classes.push(R)),l.hooks.run("wrap",E);var P="";for(var I in E.attributes)P+=" "+I+'="'+(E.attributes[I]||"").replace(/"/g,""")+'"';return"<"+E.tag+' class="'+E.classes.join(" ")+'"'+P+">"+E.content+""};function d(h,v,_,y){h.lastIndex=v;var E=h.exec(_);if(E&&y&&E[1]){var R=E[1].length;E.index+=R,E[0]=E[0].slice(R)}return E}function f(h,v,_,y,E,R){for(var P in _)if(!(!_.hasOwnProperty(P)||!_[P])){var I=_[P];I=Array.isArray(I)?I:[I];for(var B=0;B=R.reach);V+=A.value.length,A=A.next){var F=A.value;if(v.length>h.length)return;if(!(F instanceof c)){var ne=1,Y;if(j){if(Y=d(N,V,h,T),!Y||Y.index>=h.length)break;var Q=Y.index,K=Y.index+Y[0].length,Z=V;for(Z+=A.value.length;Q>=Z;)A=A.next,Z+=A.value.length;if(Z-=A.value.length,V=Z,A.value instanceof c)continue;for(var $=A;$!==v.tail&&(ZR.reach&&(R.reach=ke);var ve=A.prev;ae&&(ve=p(v,ve,ae),V+=ae.length),g(v,ve,ne);var Dt=new c(P,L?l.tokenize(re,L):re,D,re);if(A=p(v,ve,Dt),Le&&p(v,A,Le),ne>1){var J={cause:P+","+B,reach:ke};f(h,v,_,A.prev,V,J),R&&J.reach>R.reach&&(R.reach=J.reach)}}}}}}function u(){var h={value:null,prev:null,next:null},v={value:null,prev:h,next:null};h.next=v,this.head=h,this.tail=v,this.length=0}function p(h,v,_){var y=v.next,E={value:_,prev:v,next:y};return v.next=E,y.prev=E,h.length++,E}function g(h,v,_){for(var y=v.next,E=0;E<_&&y!==h.tail;E++)y=y.next;v.next=y,y.prev=v,h.length-=E}function x(h){for(var v=[],_=h.head.next;_!==h.tail;)v.push(_.value),_=_.next;return v}if(!r.document)return r.addEventListener&&(l.disableWorkerMessageHandler||r.addEventListener("message",function(h){var v=JSON.parse(h.data),_=v.language,y=v.code,E=v.immediateClose;r.postMessage(l.highlight(y,l.languages[_],_)),E&&r.close()},!1)),l;var w=l.util.currentScript();w&&(l.filename=w.src,w.hasAttribute("data-manual")&&(l.manual=!0));function k(){l.manual||l.highlightAll()}if(!l.manual){var b=document.readyState;b==="loading"||b==="interactive"&&w&&w.defer?document.addEventListener("DOMContentLoaded",k):window.requestAnimationFrame?window.requestAnimationFrame(k):window.setTimeout(k,16)}return l}(t);e.exports&&(e.exports=o),typeof co<"u"&&(co.Prism=o),o.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},o.languages.markup.tag.inside["attr-value"].inside.entity=o.languages.markup.entity,o.languages.markup.doctype.inside["internal-subset"].inside=o.languages.markup,o.hooks.add("wrap",function(r){r.type==="entity"&&(r.attributes.title=r.content.replace(/&/,"&"))}),Object.defineProperty(o.languages.markup.tag,"addInlined",{value:function(n,i){var a={};a["language-"+i]={pattern:/(^$)/i,lookbehind:!0,inside:o.languages[i]},a.cdata=/^$/i;var l={"included-cdata":{pattern://i,inside:a}};l["language-"+i]={pattern:/[\s\S]+/,inside:o.languages[i]};var c={};c[n]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,function(){return n}),"i"),lookbehind:!0,greedy:!0,inside:l},o.languages.insertBefore("markup","cdata",c)}}),Object.defineProperty(o.languages.markup.tag,"addAttribute",{value:function(r,n){o.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+r+")"+/\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:o.languages[n]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.xml=o.languages.extend("markup",{}),o.languages.ssml=o.languages.xml,o.languages.atom=o.languages.xml,o.languages.rss=o.languages.xml,function(r){var n=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;r.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:/[(){};:,]/},r.languages.css.atrule.inside.rest=r.languages.css;var i=r.languages.markup;i&&(i.tag.addInlined("style","css"),i.tag.addAttribute("style","css"))}(o),o.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:/[{}[\];(),.:]/},o.languages.javascript=o.languages.extend("clike",{"class-name":[o.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}|\?\?=?|\?\.?|[~:]/}),o.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,o.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:o.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:o.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:o.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:o.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:o.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),o.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:o.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"}}),o.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),o.languages.markup&&(o.languages.markup.tag.addInlined("script","javascript"),o.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")),o.languages.js=o.languages.javascript,function(){if(typeof o>"u"||typeof document>"u")return;Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var r="Loading…",n=function(w,k){return"✖ Error "+w+" while fetching file: "+k},i="✖ Error: File does not exist or is empty",a={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},l="data-src-status",c="loading",d="loaded",f="failed",u="pre[data-src]:not(["+l+'="'+d+'"]):not(['+l+'="'+c+'"])';function p(w,k,b){var h=new XMLHttpRequest;h.open("GET",w,!0),h.onreadystatechange=function(){h.readyState==4&&(h.status<400&&h.responseText?k(h.responseText):h.status>=400?b(n(h.status,h.statusText)):b(i))},h.send(null)}function g(w){var k=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(w||"");if(k){var b=Number(k[1]),h=k[2],v=k[3];return h?v?[b,Number(v)]:[b,void 0]:[b,b]}}o.hooks.add("before-highlightall",function(w){w.selector+=", "+u}),o.hooks.add("before-sanity-check",function(w){var k=w.element;if(k.matches(u)){w.code="",k.setAttribute(l,c);var b=k.appendChild(document.createElement("CODE"));b.textContent=r;var h=k.getAttribute("data-src"),v=w.language;if(v==="none"){var _=(/\.(\w+)$/.exec(h)||[,"none"])[1];v=a[_]||_}o.util.setLanguage(b,v),o.util.setLanguage(k,v);var y=o.plugins.autoloader;y&&y.loadLanguages(v),p(h,function(E){k.setAttribute(l,d);var R=g(k.getAttribute("data-range"));if(R){var P=E.split(/\r\n?|\n/g),I=R[0],B=R[1]==null?P.length:R[1];I<0&&(I+=P.length),I=Math.max(0,Math.min(I-1,P.length)),B<0&&(B+=P.length),B=Math.max(0,Math.min(B,P.length)),E=P.slice(I,B).join(` -`),k.hasAttribute("data-start")||k.setAttribute("data-start",String(I+1))}b.textContent=E,o.highlightElement(b)},function(E){k.setAttribute(l,f),b.textContent=E})}}),o.plugins.fileHighlight={highlight:function(k){for(var b=(k||document).querySelectorAll(u),h=0,v;v=b[h++];)o.highlightElement(v)}};var x=!1;o.fileHighlight=function(){x||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),x=!0),o.plugins.fileHighlight.highlight.apply(this,arguments)}}()})(Y_);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 Sn({children:e,minimum:t=165,className:o=""}){return s.jsx("div",{className:`bv-field-grid ${o}`.trim(),style:{"--bv-field-grid-min":`${t}px`},children:e})}function ko({label:e,help:t,error:o,required:r,icon:n,className:i="",children:a}){return s.jsxs("label",{className:`bv-control-field ${o?"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}),r&&s.jsx("span",{"aria-hidden":"true",children:" *"})]}),a,o?s.jsx("small",{className:"bv-control-message is-error",children:o}):t&&s.jsx("small",{className:"bv-control-help bv-control-help-overlay",children:t})]})}function tn({label:e,help:t,error:o,icon:r,suffix:n,onValue:i,className:a="",...l}){const c=(d=!1)=>s.jsxs("span",{className:"bv-input-shell",children:[r&&s.jsx("span",{className:"bv-field-icon","aria-hidden":"true",children:r}),s.jsx("input",{...l,id:d&&l.id?`${l.id}-expanded`:l.id,"aria-label":d?e:l["aria-label"],"aria-invalid":!!o,onChange:f=>i?.(f.target.value)}),n&&s.jsx("span",{className:"bv-field-suffix",children:n})]});return s.jsx(ko,{label:e,help:t,error:o,className:a,children:s.jsx(hs,{label:e,summary:String(l.value??l.defaultValue??l.placeholder??"Edit value"),icon:r,popover:c(!0),children:c()})})}function X_({label:e,help:t,error:o,icon:r,resize:n="vertical",onValue:i,className:a="",...l}){const c=(f=!1)=>s.jsxs("span",{className:`bv-textarea-shell resize-${n}`,children:[r&&s.jsx("span",{className:"bv-field-icon","aria-hidden":"true",children:r}),s.jsx("textarea",{...l,id:f&&l.id?`${l.id}-expanded`:l.id,"aria-label":f?e:l["aria-label"],"aria-invalid":!!o,onChange:u=>i?.(u.target.value)})]}),d=String(l.value??l.defaultValue??l.placeholder??"Edit text");return s.jsx(ko,{label:e,help:t,error:o,className:`bv-textarea-field ${a}`,children:s.jsx(hs,{label:e,summary:d,icon:r,popover:c(!0),children:c()})})}const G_=m.forwardRef(function(t,o){return s.jsx("textarea",{...t,ref:o})});function jt({label:e,value:t,min:o,max:r,step:n,unit:i,icon:a,help:l,slider:c=!0,onValue:d,className:f=""}){const u=m.useId(),[p,g]=m.useState(String(t));m.useEffect(()=>g(String(t)),[t]);const x=E=>Math.max(o,Math.min(r,E)),w=()=>{const E=Number(p);Number.isFinite(E)?d(x(E)):g(String(t))},k=`${Math.max(0,Math.min(100,(t-o)/Math.max(Number.EPSILON,r-o)*100))}%`,b=E=>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:E,value:p,inputMode:Number.isInteger(n)?"numeric":"decimal",onChange:R=>g(R.target.value),onBlur:w,onKeyDown:R=>{R.key==="Enter"&&R.currentTarget.blur(),R.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:o,max:r,step:n,value:t,style:{"--range-fill":k},"aria-labelledby":`${u}-label`,onChange:E=>d(x(+E.target.value))})]}),v=s.jsxs("div",{className:"bv-number-ticks",children:[s.jsx("span",{children:o}),s.jsx("span",{children:r})]}),_=s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"bv-number-value-row",children:[c&&h,b(u)]}),c&&v]}),y=s.jsxs("div",{className:"bv-number-popup",children:[c&&h,b(`${u}-expanded`),c&&v]});return s.jsxs("div",{className:`bv-number-field ${c?"has-slider":"direct-only"} ${f}`.trim(),children:[s.jsx("label",{id:`${u}-label`,htmlFor:u,children:e}),s.jsx(hs,{label:e,summary:`${t}${i??""}`,icon:a,popover:y,children:_}),l&&s.jsx("small",{className:"bv-control-help bv-control-help-overlay",children:l})]})}function jb({label:e,value:t,options:o,onValue:r,disabled:n,className:i=""}){const[a,l]=m.useState(!1),c=m.useRef(null),d=o.find(f=>f.value===t);return s.jsxs("div",{ref:c,className:`bv-select-popover ${i}`.trim(),children:[s.jsxs("button",{type:"button",className:"bv-select-trigger",disabled:n,"aria-label":e,"aria-haspopup":"listbox","aria-expanded":a,onClick:()=>l(f=>!f),children:[s.jsx("span",{children:d?.label??"Select…"}),s.jsx("span",{className:"bv-chevron","aria-hidden":"true"})]}),s.jsx(Lr,{open:a,anchor:c,onClose:()=>l(!1),className:"bv-select-menu",matchWidth:!0,children:s.jsx("div",{role:"listbox","aria-label":e,children:o.map(f=>s.jsxs("button",{type:"button",role:"option","aria-selected":f.value===t,disabled:f.disabled,onClick:u=>{r(f.value,{shiftKey:u.shiftKey}),l(!1)},children:[f.icon,s.jsx("span",{children:f.label})]},f.value))})})]})}function ft({label:e,value:t,options:o,onValue:r,help:n,disabled:i}){return s.jsx(ko,{label:e,help:n,children:s.jsx(jb,{label:e,value:t,options:o,onValue:r,disabled:i})})}function K_({label:e,value:t,options:o,onValue:r,disabled:n,className:i=""}){return s.jsx(jb,{label:e,value:t,options:o,onValue:r,disabled:n,className:`bv-density-compact ${i}`})}function Xo({label:e,checked:t,onValue:o,help:r,disabled:n}){return s.jsxs("label",{className:"bv-checkbox-field",children:[s.jsx("input",{type:"checkbox",checked:t,disabled:n,onChange:i=>o(i.target.checked)}),s.jsx("span",{className:"bv-checkbox-mark","aria-hidden":"true"}),s.jsxs("span",{children:[s.jsx("strong",{children:e}),r&&s.jsx("small",{children:r})]})]})}function q_({label:e,value:t,onValue:o,trueLabel:r="True",falseLabel:n="False",help:i}){return s.jsx(ko,{label:e,help:i,children:s.jsxs("button",{type:"button",role:"switch","aria-checked":t,className:"bv-toggle",onClick:()=>o(!t),children:[s.jsx("span",{className:"bv-toggle-track",children:s.jsx("span",{})}),s.jsx("strong",{children:t?r:n})]})})}function J_({label:e,value:t,options:o,onValue:r,minSelected:n=0,help:i}){const[a,l]=m.useState(!1),c=m.useRef(null),d=f=>{const u=t.includes(f);u&&t.length<=n||r(u?t.filter(p=>p!==f):[...t,f])};return s.jsx(ko,{label:e,help:i,children:s.jsxs("div",{ref:c,className:"bv-tag-select",children:[s.jsxs("button",{type:"button",className:"bv-tag-select-trigger","aria-haspopup":"listbox","aria-expanded":a,onClick:()=>l(f=>!f),children:[s.jsx("span",{className:"bv-tag-values",children:t.map(f=>s.jsx("span",{className:"bv-tag",children:o.find(u=>u.value===f)?.label??f},f))}),s.jsx("span",{className:"bv-chevron","aria-hidden":"true"})]}),s.jsx(Lr,{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:o.map(f=>{const u=t.includes(f.value),p=u&&t.length<=n;return s.jsxs("button",{type:"button",role:"option","aria-selected":u,disabled:f.disabled||p,onClick:()=>d(f.value),children:[s.jsx("span",{className:"bv-tag-select-check","aria-hidden":"true",children:u?"✓":""}),s.jsx("span",{children:f.label})]},f.value)})})})]})})}function Z_({label:e,value:t,onValue:o,onClear:r}){const[n,i]=m.useState(!1);return s.jsx(ko,{label:e,children:s.jsxs("span",{className:"bv-input-shell",children:[s.jsx("input",{type:n?"text":"password",value:t,autoComplete:"off",onChange:a=>o(a.target.value)}),s.jsx(le,{type:"button",intent:"ghost",className:"bv-field-action",onClick:()=>i(!n),children:n?"Hide":"Show"}),s.jsx(le,{type:"button",intent:"ghost",className:"bv-field-action",onClick:()=>{o(""),r?.()},children:"Clear"})]})})}function Q_({label:e,value:t,onValue:o,alpha:r=!1,help:n}){const[i,a]=m.useState(!1),l=m.useRef(null),c=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i.test(t),d=r?I_:O_,f=s.jsx("input",{value:t,"aria-label":`${e} hexadecimal value`,spellCheck:!1,onChange:p=>o(p.target.value)}),u=s.jsxs("div",{className:"bv-color-expanded",children:[f,s.jsx(d,{color:c?t:r?"#8D70FFFF":"#8D70FF",onChange:o})]});return s.jsx(ko,{label:e,help:n,error:c?void 0:"Enter a valid hexadecimal color.",children:s.jsx(hs,{label:e,summary:t,icon:s.jsx("span",{className:"bv-color-dot",style:{background:c?t:"#000"}}),popover:u,children:s.jsxs("div",{ref:l,className:"bv-color-field",children:[s.jsx("button",{type:"button",className:"bv-color-swatch",style:{background:c?t:"#000"},onClick:()=>a(!i),"aria-label":`${e}: ${t}`,"aria-haspopup":"dialog","aria-expanded":i}),f,s.jsx(Lr,{open:i,anchor:l,onClose:()=>a(!1),className:"bv-color-popover",children:u})]})})})}function Il({items:e,value:t,onValue:o,exclusive:r=!1}){const n=i=>o(t.includes(i)?t.filter(a=>a!==i):r?[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 _p=["#E45756","#4C78A8","#54A24B","#F2CF5B","#B279A2","#FF9DA6"],Pb=e=>_p[e%_p.length],Lt=()=>crypto.randomUUID(),wp=()=>({schema:"bv.regional",version:2,document_id:Lt(),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:[]}),ew=e=>({id:Lt(),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:Pb(e)}}),Yt=e=>structuredClone(e);function tw(e,t){return{...e,document_id:t}}const io=(e,t=0)=>e.authoring??{name:`${e.type==="rect"?"Rectangle":e.type==="ellipse"?"Ellipse":e.type==="polygon"?"Polygon":e.type==="raster_mask"?"Raster":"Brush"} ${t+1}`,visible:!0,locked:!1},Pt=e=>e.layer_id??e.id,ha=e=>e.mask_group_id??Pt(e);function Bb(e,t){const o=new Map;for(const r of e){const n=t(r),i=o.get(n);i?i.push(r):o.set(n,[r])}return[...o].map(([r,n],i)=>({id:r,geometries:n,authoring:io(n[0],i),enabled:n.some(a=>a.enabled!==!1)}))}function Lo(e){return Bb(e.geometry,Pt)}function ow(e){return Bb(e,ha)}function on(e){const t=typeof e=="string"?JSON.parse(e):Yt(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 o of t.regions)o.usage="generation";t.version=2}for(const o of t.regions){if(!["generation","detailer","both"].includes(o.usage))throw new Error(`Invalid region usage: ${o.usage}`);const r=o.geometry.find(n=>!n.layer_id)?.id;o.geometry.forEach((n,i)=>{n.enabled??(n.enabled=!0),n.layer_id??(n.layer_id=r??n.id),n.authoring??(n.authoring=io(n,i)),n.type==="brush_stroke"&&(n.shape??(n.shape="round"),n.pressure_mode??(n.pressure_mode="constant"))})}return t}function zb(e){const t=new Map;for(const o of e){const r=ha(o);t.has(r)||t.set(r,o)}return[...t.values()].every(o=>o.operation==="add")}function fd(e,t){return zb(e.filter(o=>o.id!==t))}function kp({value:e,onCommit:t}){const[o,r]=m.useState(!1),[n,i]=m.useState(e);if(!o)return s.jsx("span",{className:"layer-name",title:e,onDoubleClick:l=>{l.stopPropagation(),i(e),r(!0)},children:e});const a=()=>{const l=n.trim();l&&t(l),r(!1)};return s.jsx(w_,{className:"inline-name",autoFocus:!0,value:n,onChange:l=>i(l.target.value),onBlur:a,onClick:l=>l.stopPropagation(),onKeyDown:l=>{l.stopPropagation(),l.key==="Enter"&&a(),l.key==="Escape"&&r(!1)}})}function Ht({name:e}){const t={"chevron-right":s.jsx("path",{d:"m9 6 6 6-6 6"}),"chevron-down":s.jsx("path",{d:"m6 9 6 6 6-6"}),eye:s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M2.5 12s3.5-6 9.5-6 9.5 6 9.5 6-3.5 6-9.5 6-9.5-6-9.5-6Z"}),s.jsx("circle",{cx:"12",cy:"12",r:"2.5"})]}),"eye-off":s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M3 3l18 18"}),s.jsx("path",{d:"M10.6 6.15A9.8 9.8 0 0 1 12 6c6 0 9.5 6 9.5 6a14.3 14.3 0 0 1-2.05 2.7M6.05 6.05C3.75 7.65 2.5 12 2.5 12s3.5 6 9.5 6a9.4 9.4 0 0 0 3.1-.52"}),s.jsx("path",{d:"M9.9 9.9a3 3 0 0 0 4.2 4.2"})]}),lock:s.jsxs(s.Fragment,{children:[s.jsx("rect",{x:"5",y:"10",width:"14",height:"10",rx:"2"}),s.jsx("path",{d:"M8 10V7a4 4 0 0 1 8 0v3"})]}),unlock:s.jsxs(s.Fragment,{children:[s.jsx("rect",{x:"5",y:"10",width:"14",height:"10",rx:"2"}),s.jsx("path",{d:"M8 10V7a4 4 0 0 1 7.4-2.1"})]}),check:s.jsx("path",{d:"m6 12 4 4 8-9"}),more:s.jsxs(s.Fragment,{children:[s.jsx("circle",{cx:"5",cy:"12",r:"1"}),s.jsx("circle",{cx:"12",cy:"12",r:"1"}),s.jsx("circle",{cx:"19",cy:"12",r:"1"})]}),plus:s.jsx("path",{d:"M12 5v14M5 12h14"}),split:s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M7 5v5a2 2 0 0 0 2 2h6a2 2 0 0 1 2 2v5"}),s.jsx("path",{d:"m4 8 3 3 3-3M14 16l3 3 3-3"})]}),trash:s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M4 7h16M9 7V4h6v3M7 7l1 13h8l1-13"}),s.jsx("path",{d:"M10 11v5M14 11v5"})]})};return s.jsx("svg",{className:"tree-control-icon",viewBox:"0 0 24 24","aria-hidden":"true",children:t[e]})}function rw(e){const[t,o]=m.useState(()=>new Set),[r,n]=m.useState(()=>new Set(e.selectedRegionId?[e.selectedRegionId]:[])),[i,a]=m.useState(null),[l,c]=m.useState(null),d=b=>o(h=>{const v=new Set(h);return v.has(b)?v.delete(b):v.add(b),v}),f=b=>n(h=>{const v=new Set(h);return v.has(b)?v.delete(b):v.add(b),v});m.useEffect(()=>{e.selectedRegionId&&n(b=>b.has(e.selectedRegionId)?b:new Set([...b,e.selectedRegionId]))},[e.selectedRegionId]);const u=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",u(b))},g=(b,h)=>{if(!i||i.kind!==b.kind||b.kind==="layer"&&i.kind==="geometry")return"inside";const v=h.currentTarget.getBoundingClientRect();return h.clientY({onDragOver:h=>{i&&(h.preventDefault(),h.dataTransfer.dropEffect="move",c(`${u(b)}:${g(b,h)}`))},onDragLeave:h=>{h.currentTarget.contains(h.relatedTarget)||c(null)},onDrop:h=>{h.preventDefault(),i&&e.onTreeMove({source:i,target:b,position:g(b,h)}),a(null),c(null)}}),w=b=>{const h=l?.split(":")??[];return l?.startsWith(`${u(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(rt,{className:"panel-tool primary",title:"Add region","aria-label":"Add region",onClick:e.onAddRegion,children:[s.jsx(Ht,{name:"plus"}),s.jsx("span",{children:"Region"})]}),s.jsx(rt,{className:"panel-tool",title:"Split disconnected areas in the selected layer","aria-label":"Split disconnected areas",disabled:!e.canSplitDisconnectedAreas,onClick:e.onSplitDisconnectedAreas,children:s.jsx(Ht,{name:"split"})}),s.jsx("span",{className:"panel-toolbar-spacer"}),s.jsx(rt,{className:"panel-tool danger",title:"Delete selected region","aria-label":"Delete selected region",disabled:!k,onClick:()=>k&&e.onDeleteRegion(k.id),children:s.jsx(Ht,{name:"trash"})})]}),e.regions.map(b=>{const h=b.id===e.selectedRegionId,v=r.has(b.id),_={kind:"region",regionId:b.id};return s.jsxs("section",{className:`region-group ${h?"selected":""}`,"aria-expanded":v,children:[s.jsxs("div",{className:`region-row${w(_)}`,...x(_),onClick:()=>e.onSelectRegion(b.id),children:[s.jsx(rt,{className:"tree-drag-handle",draggable:!0,"aria-label":`Move ${b.name}`,title:"Drag to reorder; Alt + arrow keys also move",onDragStart:y=>p(_,y),onDragEnd:()=>{a(null),c(null)},onKeyDown:y=>{y.altKey&&y.key==="ArrowUp"&&(y.preventDefault(),e.onMoveRegion(b.id,-1)),y.altKey&&y.key==="ArrowDown"&&(y.preventDefault(),e.onMoveRegion(b.id,1))},onClick:y=>y.stopPropagation(),children:"⠿"}),s.jsx(rt,{className:"region-expand","aria-expanded":v,title:v?"Collapse region":"Expand region",onClick:y=>{y.stopPropagation(),f(b.id)},children:s.jsx(Ht,{name:v?"chevron-down":"chevron-right"})}),s.jsx("i",{style:{background:b.authoring.color}}),s.jsx(kp,{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(rt,{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(Ht,{name:b.authoring.visible?"eye":"eye-off"})}),s.jsx(rt,{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(Ht,{name:b.authoring.locked?"lock":"unlock"})}),s.jsx(rt,{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(Ht,{name:"check"})})]}),v&&s.jsx("div",{className:"geometry-layers",children:[...Lo(b)].reverse().map(y=>{const E=e.selectedLayerIds.includes(y.id),R=y.id===e.selectedLayerId,P=new Set(y.geometries.map(T=>T.type)),I=new Set(y.geometries.map(ha)).size,B=P.size>1||I>1?"◈":y.geometries[0].type==="rect"?"▭":y.geometries[0].type==="ellipse"?"◯":y.geometries[0].type==="polygon"?"⬠":y.geometries[0].type==="raster_mask"?"▦":"✎",z=t.has(y.id),L={kind:"layer",regionId:b.id,layerId:y.id};return s.jsxs("div",{className:"geometry-tree-item",children:[s.jsxs("div",{className:`geometry-row ${E&&!e.selectedGeometryId?"selected":""} ${R?"primary-selection":""}${w(L)}`,...x(L),onClick:T=>e.onSelectLayer(b.id,y.id,T.shiftKey?"range":T.ctrlKey||T.metaKey?"toggle":"replace"),children:[s.jsx(rt,{className:"tree-drag-handle",draggable:!0,"aria-label":`Move ${y.authoring.name}`,title:"Drag layer; Alt + arrow keys also move",onDragStart:T=>p(L,T),onDragEnd:()=>{a(null),c(null)},onKeyDown:T=>{T.altKey&&T.key==="ArrowUp"&&(T.preventDefault(),e.onMoveLayer(y.id,1)),T.altKey&&T.key==="ArrowDown"&&(T.preventDefault(),e.onMoveLayer(y.id,-1))},onClick:T=>T.stopPropagation(),children:"⠿"}),s.jsx(rt,{className:"layer-expand","aria-expanded":z,title:z?"Collapse operations":"Expand operations",onClick:T=>{T.stopPropagation(),d(y.id)},children:s.jsx(Ht,{name:z?"chevron-down":"chevron-right"})}),s.jsxs("span",{title:`${y.geometries.length} operations · ${I} mask group${I===1?"":"s"}`,children:[B,y.geometries.some(T=>T.operation==="subtract")?"−":""]}),s.jsx(kp,{value:y.authoring.name,onCommit:T=>e.onRenameLayer(y.id,T)}),s.jsx(rt,{className:`tree-icon-button${y.authoring.visible?"":" deviant"}`,title:y.authoring.visible?"Hide in editor":"Show in editor","aria-pressed":y.authoring.visible,onClick:T=>{T.stopPropagation(),e.onToggleLayer(y.id,"visible")},children:s.jsx(Ht,{name:y.authoring.visible?"eye":"eye-off"})}),s.jsx(rt,{className:`tree-icon-button${y.authoring.locked?" deviant":""}`,title:y.authoring.locked?"Unlock layer":"Lock layer","aria-pressed":y.authoring.locked,onClick:T=>{T.stopPropagation(),e.onToggleLayer(y.id,"locked")},children:s.jsx(Ht,{name:y.authoring.locked?"lock":"unlock"})}),s.jsx(rt,{className:`tree-check${y.enabled?"":" deviant"}`,role:"checkbox","aria-checked":y.enabled,title:y.enabled?"Disable mask output":"Enable mask output",onClick:T=>{T.stopPropagation(),e.onToggleLayer(y.id,"enabled")},children:y.enabled&&s.jsx(Ht,{name:"check"})}),s.jsxs("details",{className:"layer-overflow",onClick:T=>T.stopPropagation(),children:[s.jsx("summary",{title:"Layer actions","aria-label":"Layer actions",children:s.jsx(Ht,{name:"more"})}),s.jsxs("div",{children:[s.jsx(rt,{onClick:T=>{T.currentTarget.closest("details").removeAttribute("open"),e.onDuplicateLayer(y.id)},children:"Duplicate layer"}),s.jsx(rt,{className:"danger",onClick:T=>{T.currentTarget.closest("details").removeAttribute("open"),e.onDeleteLayer(y.id)},children:"Delete layer"})]})]})]}),z&&s.jsx("div",{className:"geometry-operations",children:y.geometries.map((T,j)=>{const D={kind:"geometry",regionId:b.id,layerId:y.id,geometryId:T.id};return s.jsxs("div",{className:`geometry-operation ${e.selectedGeometryId===T.id?"selected":""}${w(D)}`,...x(D),children:[s.jsx(rt,{className:"tree-drag-handle",draggable:!0,"aria-label":`Move ${io(T,j).name}`,title:"Drag operation",onDragStart:S=>p(D,S),onDragEnd:()=>{a(null),c(null)},children:"⠿"}),s.jsxs(rt,{className:"geometry-operation-select",onClick:()=>e.onSelectGeometry(b.id,y.id,T.id),children:[s.jsx("span",{className:`operation-kind ${T.operation}`,children:T.operation==="add"?"+":"−"}),s.jsx("span",{children:io(T,j).name}),s.jsx("small",{children:T.type.replace("_"," ")})]}),s.jsx(rt,{className:`tree-icon-button${T.enabled!==!1?"":" deviant"}`,title:T.enabled!==!1?"Disable operation":"Enable operation","aria-pressed":T.enabled!==!1,onClick:()=>e.onToggleGeometry(T.id),children:s.jsx(Ht,{name:T.enabled!==!1?"eye":"eye-off"})}),s.jsx(rt,{className:"danger",disabled:!fd(y.geometries,T.id),title:fd(y.geometries,T.id)?"Delete operation":"Additive base: remove dependent subtract operations first",onClick:()=>e.onDeleteGeometry(T.id),children:"×"})]},T.id)})})]},y.id)})})]},b.id)})]})}const Ep=({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 nw({tool:e,brush:t,canSubtract:o,canvas:r,onTool:n,onBrush:i}){const[a,l]=m.useState(!1),c=e.startsWith("brush"),d=[{id:"select",title:"Select and transform"},{id:"rect-add",title:"Add rectangle"},{id:"rect-subtract",title:"Subtract rectangle from selected layer"},{id:"ellipse-add",title:"Add ellipse"},{id:"ellipse-subtract",title:"Subtract ellipse from selected layer"},{id:"polygon-add",title:"Add polygon (click points, Enter or double-click to close)"},{id:"polygon-subtract",title:"Subtract polygon from selected layer"},{id:"brush-add",title:"Add brush stroke"},{id:"brush-subtract",title:"Subtract from selected layer"}];return s.jsxs("div",{className:"artboard-tools",onPointerDown:f=>f.stopPropagation(),onPointerUp:f=>f.stopPropagation(),onWheel:f=>f.stopPropagation(),children:[s.jsx(__,{orientation:"vertical",density:"compact",label:"Regional drawing tools",items:[...d.map(f=>({id:f.id,label:f.title,icon:s.jsx(Ep,{name:f.id}),active:e===f.id,disabled:f.id.endsWith("subtract")&&!o,onSelect:()=>{n(f.id),f.id.startsWith("brush")||l(!1)},group:f.id.split("-")[0]})),...c?[{id:"brush-settings",label:"Brush settings",icon:s.jsx(Ep,{name:"settings"}),active:a,onSelect:()=>l(f=>!f),group:"settings"}]:[]]}),c&&a&&s.jsxs("div",{className:"brush-flyout",children:[s.jsxs("header",{children:[s.jsx("strong",{children:"Brush"}),s.jsx(le,{intent:"ghost",iconOnly:!0,"aria-label":"Close brush settings",onClick:()=>l(!1),children:"×"})]}),s.jsx(jt,{label:"Brush size",value:t.size,min:.005,max:.25,step:.005,unit:`${Math.round(t.size*Math.min(r.width,r.height))} px`,onValue:f=>i({...t,size:f})}),s.jsx(jt,{label:"Hardness",value:t.hardness,min:0,max:1,step:.05,unit:"×",onValue:f=>i({...t,hardness:f})}),s.jsx(jt,{label:"Opacity",value:t.opacity,min:.05,max:1,step:.05,unit:"×",onValue:f=>i({...t,opacity:f})}),s.jsx(ft,{label:"Shape",value:t.shape,onValue:f=>i({...t,shape:f}),options:[{value:"round",label:"Round"},{value:"square",label:"Square"}]}),s.jsx(ft,{label:"Pressure",value:t.pressureMode,onValue:f=>i({...t,pressureMode:f}),options:[{value:"constant",label:"Constant"},{value:"stylus",label:"Stylus"}]})]})]})}const iw=({control:e,groups:t,conflicts:o,onChange:r})=>{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)||r({...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(tn,{label:"Control name",value:e.name,onValue:a=>r({...e,name:a})}),s.jsxs("span",{children:[e.assignments.length," groups"]}),s.jsx(le,{intent:"danger",onClick:()=>r(null),children:"Delete"})]}),s.jsx("div",{className:"bv-assignments",children:e.assignments.map((a,l)=>{const c=o.find(u=>u.groupId===a.groupId),d=c?.entries.filter(u=>u.action===c.winnerAction).map(u=>u.controlName).join(", "),f=c?a.action===c.winnerAction?`Overrides ${[...new Set(c.entries.filter(u=>u.action!==c.winnerAction).map(u=>n(u.action)))].join(", ")}`:`Overridden by ${n(c.winnerAction)} from ${d}`:"";return s.jsxs("div",{className:a.unresolved?"unresolved":c?"conflict":"",children:[s.jsxs("span",{children:[a.unresolved?"⚠ ":"",a.groupPath,f&&s.jsxs("small",{children:["⚠ ",f]})]}),s.jsx(ft,{label:"Action",value:a.action,options:[{value:"activate",label:"Activate"},{value:"mute",label:"Mute"},{value:"bypass",label:"Bypass"}],onValue:u=>r({...e,assignments:e.assignments.map((p,g)=>g===l?{...p,action:u}:p)})}),s.jsx(le,{intent:"ghost",iconOnly:!0,"aria-label":"Remove assignment",onClick:()=>r({...e,assignments:e.assignments.filter((u,p)=>p!==l)}),children:"×"})]},a.groupId)})}),s.jsx(ft,{label:"Add group",value:"",onValue:i,options:[{value:"",label:"Choose group…"},...t.map(a=>({value:a.id,label:a.pathLabel}))]})]})},aw=100;function vs(e,t=o=>structuredClone(o)){const[o,r]=m.useState(()=>t(e)),[n,i]=m.useState([]),[a,l]=m.useState([]),c=m.useRef(o);c.current=o;const d=m.useCallback(x=>{r(w=>{const k=typeof x=="function"?x(t(w)):x;return i(b=>[...b.slice(-99),t(w)]),l([]),t(k)})},[t]),f=m.useCallback((x,w=!1)=>{r(t(x)),w&&(i([]),l([]))},[t]),u=m.useCallback(()=>{i(x=>{if(!x.length)return x;const w=x[x.length-1];return l(k=>[t(c.current),...k].slice(0,aw)),r(t(w)),x.slice(0,-1)})},[t]),p=m.useCallback(()=>{l(x=>{if(!x.length)return x;const w=x[0];return i(k=>[...k.slice(-99),t(c.current)]),r(t(w)),x.slice(1)})},[t]),g=m.useCallback(()=>{i([]),l([])},[]);return{value:o,commit:d,replace:f,undo:u,redo:p,clear:g,canUndo:n.length>0,canRedo:a.length>0}}const lw=e=>e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLElement&&e.isContentEditable;function ms(e,t=!0){m.useEffect(()=>{if(!t)return;const o=a=>{if(lw(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},r=a=>{a.preventDefault(),a.stopImmediatePropagation()},n=a=>{const l=o(a);l&&(r(a),l==="undo"&&e.canUndo?e.undo():l==="redo"&&e.canRedo&&e.redo())},i=a=>{o(a)&&r(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 sw(){return globalThis.crypto?.randomUUID?.()??`bv-control-${Date.now()}-${Math.random().toString(16).slice(2)}`}const cw=()=>{const e=m.useMemo(()=>{const f=en(),u=new Set(Ml(Nt()).map(p=>p.id));return{...f,controls:f.controls.map(p=>({...p,assignments:p.assignments.map(g=>({...g,unresolved:!u.has(g.groupId)}))}))}},[]),t=vs(e),o=t.value,r=f=>t.commit(f);ms(t),m.useEffect(()=>{const f=u=>{const p=u.detail,g=new Map(p.controls.map(w=>[w.id,w.enabled])),x={...o,controls:o.controls.map(w=>g.has(w.id)?{...w,enabled:g.get(w.id)}:w)};JSON.stringify(x)!==JSON.stringify(o)&&t.replace(x)};return window.addEventListener(Vn,f),()=>window.removeEventListener(Vn,f)},[o,t.replace]);const n=m.useMemo(()=>Ml(Nt()),[o]),i=m.useMemo(()=>kb(o),[o]),a=m.useRef(!1);m.useEffect(()=>{if(!a.current){a.current=!0;return}const f=window.setTimeout(()=>{const u=o.controls.map(g=>g.name.trim());if(u.some(g=>!g)||new Set(u).size!==u.length)return;const p=new Set(n.map(g=>g.id));ku({...o,controls:o.controls.map(g=>({...g,name:g.name.trim(),assignments:g.assignments.map(x=>({...x,unresolved:!p.has(x.groupId)}))}))})},250);return()=>window.clearTimeout(f)},[o,n]);const l=(f,u)=>{r({...o,controls:u?o.controls.map((p,g)=>g===f?u:p):o.controls.filter((p,g)=>g!==f)})},c=()=>{let f="New Control",u=2;for(;o.controls.some(p=>p.name===f);)f=`New Control ${u++}`;r({...o,controls:[...o.controls,{id:sw(),name:f,enabled:!0,assignments:[]}]})},d=o.controls.map((f,u)=>({id:f.id,title:f.name||"Unnamed control",description:`${f.assignments.length} assignment${f.assignments.length===1?"":"s"}`,content:s.jsx(iw,{control:f,groups:n,conflicts:i,onChange:p=>l(u,p)})}));return s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(Xo,{label:"Force active after releasing restrictions",checked:o.forceActive,onValue:f=>r({...o,forceActive:f})}),s.jsx("div",{className:"bv-controls",children:s.jsx(gs,{items:d,onReorder:f=>r({...o,controls:f.map(u=>o.controls.find(p=>p.id===u.id)).filter(Boolean)}),onRemove:f=>r({...o,controls:o.controls.filter(u=>u.id!==f)})})}),s.jsxs("footer",{className:"bv-ui-inline-footer",children:[s.jsx(Tb,{tone:"success",dot:!0,children:"Autosaved"}),s.jsx(le,{intent:"ghost",disabled:!t.canUndo,onClick:t.undo,children:"Undo"}),s.jsx(le,{intent:"ghost",disabled:!t.canRedo,onClick:t.redo,children:"Redo"}),s.jsx(le,{onClick:c,children:"Add Control"})]})]})},Wr=new Map,jl=new Map;function Ou(e,t={}){const o=t.key?Wr.get(t.key):void 0;if(o)return o.activate(e),o.close;const r=document.createElement("div");r.className="bv-ui",r.dataset.bvUiMount="true",document.body.append(r);const n=qn(r);let i=!1,a=0,l=e;const c=()=>{i||(i=!0,t.key&&Wr.get(t.key)?.close===c&&Wr.delete(t.key),n.unmount(),r.remove())},d=g=>{g&&(l=g),a+=1,document.body.append(r),r.querySelector(".bv-managed-window")?.dispatchEvent(new Event("bv-ui-activate")),n.render(l(c,a))},f=()=>r.querySelector(".bv-managed-window")?.dispatchEvent(new Event("bv-ui-minimize")),u=()=>{const g=r.querySelector(".bv-managed-window"),x=g?.getBoundingClientRect();return{mode:g?.classList.contains("workspace")?"workspace":"floating",geometry:x?{x:x.left,y:x.top,width:x.width,height:x.height}:void 0}},p=g=>r.querySelector(".bv-managed-window")?.dispatchEvent(new CustomEvent("bv-ui-set-window-state",{detail:g}));if(t.key){const g={activate:d,minimize:f,state:u,setState:p,close:c};Wr.set(t.key,g);const x=jl.get(t.key);x&&(jl.delete(t.key),requestAnimationFrame(()=>g.setState(x)))}return n.render(l(c,a)),c}function Au(e,t,o,r){if(e===t)return Wr.get(e)?.activate();const n=Wr.get(e),i=n?.state(),a=Wr.get(t);i&&jl.set(t,i),a?a.activate():o(),i&&a&&(jl.delete(t),requestAnimationFrame(()=>a.setState(i))),r?n?.close():n?.minimize()}const Fb="BV.NodePack.UI.Size",Ub="BV.NodePack.UI.ReducedEffects",Du="BV.NodePack.UI.WindowSwitchMode";let mi="keep",Wb;const pd=new Set,dw=e=>e==="replace"?"replace":"keep",$n=()=>mi,uw=e=>{Wb=e},fw=e=>(pd.add(e),()=>pd.delete(e));function Mu(e,t=!0){return mi=dw(e),t&&Wb?.(mi),pd.forEach(o=>o(mi)),mi}const pw=["bv-ui-size-compact","bv-ui-size-default","bv-ui-size-large"];function hw(e){return e==="compact"||e==="large"?e:"default"}function Vb(e,t=document.documentElement){const o=hw(e);return t.classList.remove(...pw),t.classList.add(`bv-ui-size-${o}`),o}function Hb(e,t=document.documentElement){return t.classList.toggle("bv-ui-reduced-effects",!!e),!!e}function gw(e){Vb(e?.getSettingValue?.(Fb,"default")),Hb(e?.getSettingValue?.(Ub,!1)),Mu(e?.getSettingValue?.(Du,"keep"),!1)}function bw(e,t,o,r){const n=e.x+e.width,i=e.y+e.height;let a=e.x,l=e.y,c=e.width,d=e.height;return o.includes("e")&&(c=Math.max(r.width,e.width+t.x)),o.includes("s")&&(d=Math.max(r.height,e.height+t.y)),o.includes("w")&&(c=Math.max(r.width,e.width-t.x),a=n-c),o.includes("n")&&(d=Math.max(r.height,e.height-t.y),l=i-d),{x:a,y:l,width:c,height:d}}function vw(e,t,o){const r={...e};for(const n of["x","y","width","height"])o?.[n]!==void 0&&o[n]!==t?.[n]&&(r[n]=o[n]);return r}function mw(e,t,o,r=12,n=128){const i=e??{left:0,right:o.width,bottom:o.height,height:o.height},l=t.filter(c=>c.width>0&&c.height>=i.height*.45&&c.rightc.left-d.left||d.right-c.right).reduce((c,d)=>d.left<=c+4?Math.max(c,d.right):c,i.left);return{left:Math.round(Math.max(i.left+n,l)+r),bottom:Math.round(Math.max(r,o.height-i.bottom+r))}}const $r=[];let Tp=!1;const xw=e=>e.isConnected&&!e.hidden&&e.offsetParent!==null;function yw(e){const t=$r.filter(xw);if(t.length<2)return;const o=document.activeElement instanceof Element?t.findIndex(n=>n===document.activeElement||n.contains(document.activeElement)):-1,r=o<0?t.length-1:(o+(e?-1:1)+t.length)%t.length;t[r].dispatchEvent(new CustomEvent("bv-ui-activate"))}function _w(){Tp||(Tp=!0,window.addEventListener("keydown",e=>{e.key!=="Tab"||!e.ctrlKey||e.altKey||e.metaKey||(e.preventDefault(),e.stopImmediatePropagation(),yw(e.shiftKey))},!0))}function ww(e){return _w(),$r.push(e),()=>{const t=$r.indexOf(e);t>=0&&$r.splice(t,1)}}function Rp(e){const t=$r.indexOf(e);t>=0&&$r.splice(t,1),$r.push(e)}const $b="bvWindowMenuVisible",Yn="bv-window-menu-visibility-changed",kw=e=>!["BV Smart Pipe","BV Smart Pipe Merge"].includes(e);function ln(e){const t=e?.properties?.[$b];return typeof t=="boolean"?t:kw(String(e?.type??e?.comfyClass??""))}function Zn(e,t){e&&(e.properties??(e.properties={}),e.properties[$b]=!!t,e.graph?.setDirtyCanvas?.(!0,!0),window.dispatchEvent(new CustomEvent(Yn,{detail:{node:e,visible:!!t}})))}function Ew(e){return window.addEventListener(Yn,e),()=>window.removeEventListener(Yn,e)}let hd=0;window.addEventListener(Yn,()=>hd++);function ga(e){return m.useSyncExternalStore(Ew,()=>hd,()=>hd),ln(e)}const Tw=(e,t)=>String(e?.id??e?._id??e?.extra?.uuid??t);function Iu(e,t){const o=[],r=(n,i,a,l=new Set)=>{if(!n||l.has(n))return;const c=new Set(l);c.add(n);const d=Tw(n,i.length?i[i.length-1]:"root");for(const f of n._nodes??n.nodes??[]){const u=String(f.id),p=[...i,d];t(f)&&o.push({node:f,graph:n,path:p,key:`${p.join("/")}:${u}`,breadcrumb:a.join(" › ")});const g=f.subgraph??(()=>{try{return f.getSubgraph?.()}catch{return null}})();g&&r(g,[...p,u],[...a,String(f.title||f.type||`#${u}`)],c)}};return r(e,[],[]),o}function ea(e,t){return Iu(e,o=>o===t)[0]?.key??String(t?.id??"")}const Pl="bv-toggle-toolbar-window-launcher";function Rw({getColumns:e}){const[t,o]=m.useState({left:0,top:0}),[r,n]=m.useState(!1),[i,a]=m.useState(!1),[,l]=m.useState(0),c=m.useRef(null),d=m.useRef(),f=m.useRef(),u=m.useRef(0),p=()=>{d.current&&window.clearTimeout(d.current),f.current&&window.clearTimeout(f.current)},g=(v,_)=>{const y=v.getBoundingClientRect(),E=Math.min(Math.max(1,_)*220,window.innerWidth-24),R=Math.min(420,window.innerHeight-84),P=Math.max(12,Math.min(y.left,window.innerWidth-E-12)),I=y.bottom+6+R<=window.innerHeight-12?y.bottom+6:Math.max(12,y.top-R-6);return{left:P,top:I}},x=m.useCallback((v,_)=>{p(),d.current=window.setTimeout(()=>{if(document.body.classList.contains("bv-toolbar-no-editor")&&document.body.classList.contains("bv-toolbar-no-quick"))return;const y=[...document.querySelectorAll(".bv-regional-action")].filter(R=>R.offsetParent!==null),E=_?.offsetParent?_:y[0];E&&(a(!1),o(g(E,e(!1).filter(R=>R.items.length).length)),n(!0))},v)},[e]),w=m.useCallback(()=>x(180),[x]),k=m.useCallback(()=>{d.current&&window.clearTimeout(d.current);const v=Math.max(280,u.current-Date.now());f.current=window.setTimeout(()=>{c.current?.matches(":hover")||(n(!1),a(!1))},v)},[]);m.useEffect(()=>{const v=new Map,_=()=>{for(const E of document.querySelectorAll(".bv-regional-action")){if(v.has(E))continue;const R=()=>w(),P=()=>k();E.addEventListener("pointerenter",R),E.addEventListener("pointerleave",P);const I=()=>{E.removeEventListener("pointerenter",R),E.removeEventListener("pointerleave",P)};v.set(E,I)}};_();const y=new MutationObserver(_);return y.observe(document.body,{childList:!0,subtree:!0}),()=>{y.disconnect(),v.forEach(E=>E()),p()}},[k,w]),m.useEffect(()=>{if(!r)return;const v=_=>{_.key==="Escape"&&(n(!1),a(!1))};return window.addEventListener("keydown",v),()=>window.removeEventListener("keydown",v)},[r]),m.useEffect(()=>{const v=_=>r?(n(!1),a(!1)):x(0,_.detail?.anchor);return window.addEventListener(Pl,v),()=>window.removeEventListener(Pl,v)},[r,x]),m.useEffect(()=>{const v=()=>l(_=>_+1);return window.addEventListener(Yn,v),()=>window.removeEventListener(Yn,v)},[]);const b=v=>{p(),u.current=Date.now()+700;const _=c.current?.getBoundingClientRect();a(v),requestAnimationFrame(()=>requestAnimationFrame(()=>{const y=c.current?.getBoundingClientRect();!_||!y||o(E=>({...E,top:Math.max(12,Math.min(window.innerHeight-y.height-12,E.top+_.bottom-y.bottom))}))}))};if(!r)return null;const h=e(i).filter(v=>v.items.length);return Io.createPortal(s.jsxs("div",{ref:c,className:"bv-toolbar-window-launcher bv-ui bv-density-compact",style:{left:t.left,top:t.top,"--bv-launcher-columns":Math.max(1,h.length)},role:"dialog","aria-label":"BV window launcher",onPointerEnter:p,onPointerLeave:k,children:[s.jsx("div",{className:"bv-toolbar-window-launcher__body",children:h.length?h.map(v=>s.jsxs("section",{children:[s.jsx("h3",{children:v.label}),s.jsx("div",{children:v.items.map(_=>s.jsxs("div",{className:`bv-toolbar-launcher-row ${_.hidden?"is-hidden":""}`,children:[s.jsxs(le,{intent:"ghost",disabled:_.disabled,onClick:()=>{n(!1),a(!1),_.onSelect()},children:[s.jsx("span",{children:_.label}),_.meta&&s.jsx("small",{children:_.meta})]}),_.secondary&&s.jsx("button",{type:"button",className:"bv-toolbar-launcher-secondary",title:_.secondary.label,"aria-label":_.secondary.label,onClick:()=>{n(!1),a(!1),_.secondary?.onSelect()},children:"✎"}),_.hidden&&_.onReveal&&s.jsx("button",{type:"button",className:"bv-toolbar-launcher-reveal",title:"Show in BV window menus","aria-label":`Show ${_.label} in BV window menus`,onClick:_.onReveal,children:"◉"})]},_.id))})]},v.id)):s.jsxs("div",{className:"bv-toolbar-launcher-empty",children:[s.jsx("strong",{children:"No visible BV windows"}),s.jsx("span",{children:"Show hidden nodes to restore one."})]})}),s.jsx("footer",{children:s.jsx(q_,{label:"Show hidden nodes",value:i,trueLabel:"Shown",falseLabel:"Hidden",onValue:b})})]}),document.body)}var Qn=class{constructor(){O(this,"attributes");O(this,"nameToAttribute");this.attributes=[],this.nameToAttribute=new Map}addWithAll(e,t,o,r){const n=new te(e,t,o,r);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,o){return this.addWithAll(e,void 0,t,o)}getAttributes(){return this.attributes}getModelName(e){const t=this.nameToAttribute.get(e);if(t!==void 0)return t.modelName}toJson(e,t){for(const o of this.attributes){const r=t[o.name];(o.alwaysWriteJson||r!==o.defaultValue)&&(e[o.name]=r)}}fromJson(e,t){for(const o of this.attributes){let r=e[o.name];r===void 0&&o.alias&&(r=e[o.alias]),r===void 0?t[o.name]=o.defaultValue:t[o.name]=r}}update(e,t){for(const o of this.attributes)if(Object.prototype.hasOwnProperty.call(e,o.name)){const r=e[o.name];r===void 0?delete t[o.name]:t[o.name]=r}}setDefaults(e){for(const t of this.attributes)e[t.name]=t.defaultValue}pairAttributes(e,t){for(const o of t.attributes)if(o.modelName&&this.nameToAttribute.has(o.modelName)){const r=this.nameToAttribute.get(o.modelName);r.setpairedAttr(o),o.setpairedAttr(r),r.setPairedType(e)}}toTypescriptInterface(e,t){const o=[],r=this.attributes.sort((n,i)=>n.name.localeCompare(i.name));o.push("export interface I"+e+"Attributes {");for(let n=0;n"u")return null;if(document.currentScript&&document.currentScript.tagName==="SCRIPT")return document.currentScript;try{throw new Error}catch(y){var h=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(y.stack)||[])[1];if(h){var v=document.getElementsByTagName("script");for(var _ in v)if(v[_].src==h)return v[_]}return null}},isActive:function(h,v,_){for(var y="no-"+v;h;){var T=h.classList;if(T.contains(v))return!0;if(T.contains(y))return!1;h=h.parentElement}return!!_}},languages:{plain:a,plaintext:a,text:a,txt:a,extend:function(h,v){var _=l.util.clone(l.languages[h]);for(var y in v)_[y]=v[y];return _},insertBefore:function(h,v,_,y){y=y||l.languages;var T=y[h],L={};for(var B in T)if(T.hasOwnProperty(B)){if(B==v)for(var C in _)_.hasOwnProperty(C)&&(L[C]=_[C]);_.hasOwnProperty(B)||(L[B]=T[B])}var j=y[h];return y[h]=L,l.languages.DFS(l.languages,function(z,S){S===j&&z!=h&&(this[z]=L)}),L},DFS:function h(v,_,y,T){T=T||{};var L=l.util.objId;for(var B in v)if(v.hasOwnProperty(B)){_.call(v,B,v[B],y||B);var C=v[B],j=l.util.type(C);j==="Object"&&!T[L(C)]?(T[L(C)]=!0,h(C,_,null,T)):j==="Array"&&!T[L(C)]&&(T[L(C)]=!0,h(C,_,B,T))}}},plugins:{},highlightAll:function(h,v){l.highlightAllUnder(document,h,v)},highlightAllUnder:function(h,v,_){var y={callback:_,container:h,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};l.hooks.run("before-highlightall",y),y.elements=Array.prototype.slice.apply(y.container.querySelectorAll(y.selector)),l.hooks.run("before-all-elements-highlight",y);for(var T=0,L;L=y.elements[T++];)l.highlightElement(L,v===!0,y.callback)},highlightElement:function(h,v,_){var y=l.util.getLanguage(h),T=l.languages[y];l.util.setLanguage(h,y);var L=h.parentElement;L&&L.nodeName.toLowerCase()==="pre"&&l.util.setLanguage(L,y);var B=h.textContent,C={element:h,language:y,grammar:T,code:B};function j(S){C.highlightedCode=S,l.hooks.run("before-insert",C),C.element.innerHTML=C.highlightedCode,l.hooks.run("after-highlight",C),l.hooks.run("complete",C),_&&_.call(C.element)}if(l.hooks.run("before-sanity-check",C),L=C.element.parentElement,L&&L.nodeName.toLowerCase()==="pre"&&!L.hasAttribute("tabindex")&&L.setAttribute("tabindex","0"),!C.code){l.hooks.run("complete",C),_&&_.call(C.element);return}if(l.hooks.run("before-highlight",C),!C.grammar){j(l.util.encode(C.code));return}if(v&&r.Worker){var z=new Worker(l.filename);z.onmessage=function(S){j(S.data)},z.postMessage(JSON.stringify({language:C.language,code:C.code,immediateClose:!0}))}else j(l.highlight(C.code,C.grammar,C.language))},highlight:function(h,v,_){var y={code:h,grammar:v,language:_};if(l.hooks.run("before-tokenize",y),!y.grammar)throw new Error('The language "'+y.language+'" has no grammar.');return y.tokens=l.tokenize(y.code,y.grammar),l.hooks.run("after-tokenize",y),c.stringify(l.util.encode(y.tokens),y.language)},tokenize:function(h,v){var _=v.rest;if(_){for(var y in _)v[y]=_[y];delete v.rest}var T=new u;return p(T,T.head,h),f(h,T,v,T.head,0),x(T)},hooks:{all:{},add:function(h,v){var _=l.hooks.all;_[h]=_[h]||[],_[h].push(v)},run:function(h,v){var _=l.hooks.all[h];if(!(!_||!_.length))for(var y=0,T;T=_[y++];)T(v)}},Token:c};r.Prism=l;function c(h,v,_,y){this.type=h,this.content=v,this.alias=_,this.length=(y||"").length|0}c.stringify=function h(v,_){if(typeof v=="string")return v;if(Array.isArray(v)){var y="";return v.forEach(function(j){y+=h(j,_)}),y}var T={type:v.type,content:h(v.content,_),tag:"span",classes:["token",v.type],attributes:{},language:_},L=v.alias;L&&(Array.isArray(L)?Array.prototype.push.apply(T.classes,L):T.classes.push(L)),l.hooks.run("wrap",T);var B="";for(var C in T.attributes)B+=" "+C+'="'+(T.attributes[C]||"").replace(/"/g,""")+'"';return"<"+T.tag+' class="'+T.classes.join(" ")+'"'+B+">"+T.content+""};function d(h,v,_,y){h.lastIndex=v;var T=h.exec(_);if(T&&y&&T[1]){var L=T[1].length;T.index+=L,T[0]=T[0].slice(L)}return T}function f(h,v,_,y,T,L){for(var B in _)if(!(!_.hasOwnProperty(B)||!_[B])){var C=_[B];C=Array.isArray(C)?C:[C];for(var j=0;j=L.reach);V+=M.value.length,M=M.next){var F=M.value;if(v.length>h.length)return;if(!(F instanceof c)){var ne=1,Y;if(I){if(Y=d(O,V,h,k),!Y||Y.index>=h.length)break;var Q=Y.index,K=Y.index+Y[0].length,Z=V;for(Z+=M.value.length;Q>=Z;)M=M.next,Z+=M.value.length;if(Z-=M.value.length,V=Z,M.value instanceof c)continue;for(var $=M;$!==v.tail&&(ZL.reach&&(L.reach=ke);var ve=M.prev;ae&&(ve=p(v,ve,ae),V+=ae.length),g(v,ve,ne);var Dt=new c(B,S?l.tokenize(re,S):re,D,re);if(M=p(v,ve,Dt),Le&&p(v,M,Le),ne>1){var J={cause:B+","+j,reach:ke};f(h,v,_,M.prev,V,J),L&&J.reach>L.reach&&(L.reach=J.reach)}}}}}}function u(){var h={value:null,prev:null,next:null},v={value:null,prev:h,next:null};h.next=v,this.head=h,this.tail=v,this.length=0}function p(h,v,_){var y=v.next,T={value:_,prev:v,next:y};return v.next=T,y.prev=T,h.length++,T}function g(h,v,_){for(var y=v.next,T=0;T<_&&y!==h.tail;T++)y=y.next;v.next=y,y.prev=v,h.length-=T}function x(h){for(var v=[],_=h.head.next;_!==h.tail;)v.push(_.value),_=_.next;return v}if(!r.document)return r.addEventListener&&(l.disableWorkerMessageHandler||r.addEventListener("message",function(h){var v=JSON.parse(h.data),_=v.language,y=v.code,T=v.immediateClose;r.postMessage(l.highlight(y,l.languages[_],_)),T&&r.close()},!1)),l;var w=l.util.currentScript();w&&(l.filename=w.src,w.hasAttribute("data-manual")&&(l.manual=!0));function E(){l.manual||l.highlightAll()}if(!l.manual){var b=document.readyState;b==="loading"||b==="interactive"&&w&&w.defer?document.addEventListener("DOMContentLoaded",E):window.requestAnimationFrame?window.requestAnimationFrame(E):window.setTimeout(E,16)}return l}(t);e.exports&&(e.exports=o),typeof co<"u"&&(co.Prism=o),o.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},o.languages.markup.tag.inside["attr-value"].inside.entity=o.languages.markup.entity,o.languages.markup.doctype.inside["internal-subset"].inside=o.languages.markup,o.hooks.add("wrap",function(r){r.type==="entity"&&(r.attributes.title=r.content.replace(/&/,"&"))}),Object.defineProperty(o.languages.markup.tag,"addInlined",{value:function(n,i){var a={};a["language-"+i]={pattern:/(^$)/i,lookbehind:!0,inside:o.languages[i]},a.cdata=/^$/i;var l={"included-cdata":{pattern://i,inside:a}};l["language-"+i]={pattern:/[\s\S]+/,inside:o.languages[i]};var c={};c[n]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,function(){return n}),"i"),lookbehind:!0,greedy:!0,inside:l},o.languages.insertBefore("markup","cdata",c)}}),Object.defineProperty(o.languages.markup.tag,"addAttribute",{value:function(r,n){o.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+r+")"+/\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:o.languages[n]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.xml=o.languages.extend("markup",{}),o.languages.ssml=o.languages.xml,o.languages.atom=o.languages.xml,o.languages.rss=o.languages.xml,function(r){var n=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;r.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:/[(){};:,]/},r.languages.css.atrule.inside.rest=r.languages.css;var i=r.languages.markup;i&&(i.tag.addInlined("style","css"),i.tag.addAttribute("style","css"))}(o),o.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:/[{}[\];(),.:]/},o.languages.javascript=o.languages.extend("clike",{"class-name":[o.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}|\?\?=?|\?\.?|[~:]/}),o.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,o.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:o.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:o.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:o.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:o.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:o.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),o.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:o.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"}}),o.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),o.languages.markup&&(o.languages.markup.tag.addInlined("script","javascript"),o.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")),o.languages.js=o.languages.javascript,function(){if(typeof o>"u"||typeof document>"u")return;Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var r="Loading…",n=function(w,E){return"✖ Error "+w+" while fetching file: "+E},i="✖ Error: File does not exist or is empty",a={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},l="data-src-status",c="loading",d="loaded",f="failed",u="pre[data-src]:not(["+l+'="'+d+'"]):not(['+l+'="'+c+'"])';function p(w,E,b){var h=new XMLHttpRequest;h.open("GET",w,!0),h.onreadystatechange=function(){h.readyState==4&&(h.status<400&&h.responseText?E(h.responseText):h.status>=400?b(n(h.status,h.statusText)):b(i))},h.send(null)}function g(w){var E=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(w||"");if(E){var b=Number(E[1]),h=E[2],v=E[3];return h?v?[b,Number(v)]:[b,void 0]:[b,b]}}o.hooks.add("before-highlightall",function(w){w.selector+=", "+u}),o.hooks.add("before-sanity-check",function(w){var E=w.element;if(E.matches(u)){w.code="",E.setAttribute(l,c);var b=E.appendChild(document.createElement("CODE"));b.textContent=r;var h=E.getAttribute("data-src"),v=w.language;if(v==="none"){var _=(/\.(\w+)$/.exec(h)||[,"none"])[1];v=a[_]||_}o.util.setLanguage(b,v),o.util.setLanguage(E,v);var y=o.plugins.autoloader;y&&y.loadLanguages(v),p(h,function(T){E.setAttribute(l,d);var L=g(E.getAttribute("data-range"));if(L){var B=T.split(/\r\n?|\n/g),C=L[0],j=L[1]==null?B.length:L[1];C<0&&(C+=B.length),C=Math.max(0,Math.min(C-1,B.length)),j<0&&(j+=B.length),j=Math.max(0,Math.min(j,B.length)),T=B.slice(C,j).join(` +`),E.hasAttribute("data-start")||E.setAttribute("data-start",String(C+1))}b.textContent=T,o.highlightElement(b)},function(T){E.setAttribute(l,f),b.textContent=T})}}),o.plugins.fileHighlight={highlight:function(E){for(var b=(E||document).querySelectorAll(u),h=0,v;v=b[h++];)o.highlightElement(v)}};var x=!1;o.fileHighlight=function(){x||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),x=!0),o.plugins.fileHighlight.highlight.apply(this,arguments)}}()})(Y_);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 Ln({children:e,minimum:t=165,className:o=""}){return s.jsx("div",{className:`bv-field-grid ${o}`.trim(),style:{"--bv-field-grid-min":`${t}px`},children:e})}function ko({label:e,help:t,error:o,required:r,icon:n,className:i="",children:a}){return s.jsxs("label",{className:`bv-control-field ${o?"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}),r&&s.jsx("span",{"aria-hidden":"true",children:" *"})]}),a,o?s.jsx("small",{className:"bv-control-message is-error",children:o}):t&&s.jsx("small",{className:"bv-control-help bv-control-help-overlay",children:t})]})}function on({label:e,help:t,error:o,icon:r,suffix:n,onValue:i,className:a="",...l}){const c=(d=!1)=>s.jsxs("span",{className:"bv-input-shell",children:[r&&s.jsx("span",{className:"bv-field-icon","aria-hidden":"true",children:r}),s.jsx("input",{...l,id:d&&l.id?`${l.id}-expanded`:l.id,"aria-label":d?e:l["aria-label"],"aria-invalid":!!o,onChange:f=>i?.(f.target.value)}),n&&s.jsx("span",{className:"bv-field-suffix",children:n})]});return s.jsx(ko,{label:e,help:t,error:o,className:a,children:s.jsx(gs,{label:e,summary:String(l.value??l.defaultValue??l.placeholder??"Edit value"),icon:r,popover:c(!0),children:c()})})}function X_({label:e,help:t,error:o,icon:r,resize:n="vertical",onValue:i,className:a="",...l}){const c=(f=!1)=>s.jsxs("span",{className:`bv-textarea-shell resize-${n}`,children:[r&&s.jsx("span",{className:"bv-field-icon","aria-hidden":"true",children:r}),s.jsx("textarea",{...l,id:f&&l.id?`${l.id}-expanded`:l.id,"aria-label":f?e:l["aria-label"],"aria-invalid":!!o,onChange:u=>i?.(u.target.value)})]}),d=String(l.value??l.defaultValue??l.placeholder??"Edit text");return s.jsx(ko,{label:e,help:t,error:o,className:`bv-textarea-field ${a}`,children:s.jsx(gs,{label:e,summary:d,icon:r,popover:c(!0),children:c()})})}const G_=m.forwardRef(function(t,o){return s.jsx("textarea",{...t,ref:o})});function jt({label:e,value:t,min:o,max:r,step:n,unit:i,icon:a,help:l,slider:c=!0,onValue:d,className:f=""}){const u=m.useId(),[p,g]=m.useState(String(t));m.useEffect(()=>g(String(t)),[t]);const x=T=>Math.max(o,Math.min(r,T)),w=()=>{const T=Number(p);Number.isFinite(T)?d(x(T)):g(String(t))},E=`${Math.max(0,Math.min(100,(t-o)/Math.max(Number.EPSILON,r-o)*100))}%`,b=T=>s.jsxs("div",{className:"bv-number-box",children:[a&&s.jsx("span",{className:"bv-field-icon","aria-hidden":"true",children:a}),s.jsx("input",{id:T,value:p,inputMode:Number.isInteger(n)?"numeric":"decimal",onChange:L=>g(L.target.value),onBlur:w,onKeyDown:L=>{L.key==="Enter"&&L.currentTarget.blur(),L.key==="Escape"&&g(String(t))}}),i&&s.jsx("span",{className:"bv-number-unit",children:i})]}),h=s.jsxs("div",{className:"bv-number-slider",style:{"--bubble-left":E},children:[s.jsxs("output",{children:[t,i??""]}),s.jsx("input",{className:"bv-number-track",type:"range",min:o,max:r,step:n,value:t,style:{"--range-fill":E},"aria-labelledby":`${u}-label`,onChange:T=>d(x(+T.target.value))})]}),v=s.jsxs("div",{className:"bv-number-ticks",children:[s.jsx("span",{children:o}),s.jsx("span",{children:r})]}),_=s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"bv-number-value-row",children:[c&&h,b(u)]}),c&&v]}),y=s.jsxs("div",{className:"bv-number-popup",children:[c&&h,b(`${u}-expanded`),c&&v]});return s.jsxs("div",{className:`bv-number-field ${c?"has-slider":"direct-only"} ${f}`.trim(),children:[s.jsx("label",{id:`${u}-label`,htmlFor:u,children:e}),s.jsx(gs,{label:e,summary:`${t}${i??""}`,icon:a,popover:y,children:_}),l&&s.jsx("small",{className:"bv-control-help bv-control-help-overlay",children:l})]})}function Ib({label:e,value:t,options:o,onValue:r,disabled:n,className:i=""}){const[a,l]=m.useState(!1),c=m.useRef(null),d=o.find(f=>f.value===t);return s.jsxs("div",{ref:c,className:`bv-select-popover ${i}`.trim(),children:[s.jsxs("button",{type:"button",className:"bv-select-trigger",disabled:n,"aria-label":e,"aria-haspopup":"listbox","aria-expanded":a,onClick:()=>l(f=>!f),children:[s.jsx("span",{children:d?.label??"Select…"}),s.jsx("span",{className:"bv-chevron","aria-hidden":"true"})]}),s.jsx(Cr,{open:a,anchor:c,onClose:()=>l(!1),className:"bv-select-menu",matchWidth:!0,children:s.jsx("div",{role:"listbox","aria-label":e,children:o.map(f=>s.jsxs("button",{type:"button",role:"option","aria-selected":f.value===t,disabled:f.disabled,onClick:u=>{r(f.value,{shiftKey:u.shiftKey}),l(!1)},children:[f.icon,s.jsx("span",{children:f.label})]},f.value))})})]})}function ft({label:e,value:t,options:o,onValue:r,help:n,disabled:i}){return s.jsx(ko,{label:e,help:n,children:s.jsx(Ib,{label:e,value:t,options:o,onValue:r,disabled:i})})}function K_({label:e,value:t,options:o,onValue:r,disabled:n,className:i=""}){return s.jsx(Ib,{label:e,value:t,options:o,onValue:r,disabled:n,className:`bv-density-compact ${i}`})}function Go({label:e,checked:t,onValue:o,help:r,disabled:n}){return s.jsxs("label",{className:"bv-checkbox-field",children:[s.jsx("input",{type:"checkbox",checked:t,disabled:n,onChange:i=>o(i.target.checked)}),s.jsx("span",{className:"bv-checkbox-mark","aria-hidden":"true"}),s.jsxs("span",{children:[s.jsx("strong",{children:e}),r&&s.jsx("small",{children:r})]})]})}function q_({label:e,value:t,onValue:o,trueLabel:r="True",falseLabel:n="False",help:i}){return s.jsx(ko,{label:e,help:i,children:s.jsxs("button",{type:"button",role:"switch","aria-checked":t,className:"bv-toggle",onClick:()=>o(!t),children:[s.jsx("span",{className:"bv-toggle-track",children:s.jsx("span",{})}),s.jsx("strong",{children:t?r:n})]})})}function J_({label:e,value:t,options:o,onValue:r,minSelected:n=0,help:i}){const[a,l]=m.useState(!1),c=m.useRef(null),d=f=>{const u=t.includes(f);u&&t.length<=n||r(u?t.filter(p=>p!==f):[...t,f])};return s.jsx(ko,{label:e,help:i,children:s.jsxs("div",{ref:c,className:"bv-tag-select",children:[s.jsxs("button",{type:"button",className:"bv-tag-select-trigger","aria-haspopup":"listbox","aria-expanded":a,onClick:()=>l(f=>!f),children:[s.jsx("span",{className:"bv-tag-values",children:t.map(f=>s.jsx("span",{className:"bv-tag",children:o.find(u=>u.value===f)?.label??f},f))}),s.jsx("span",{className:"bv-chevron","aria-hidden":"true"})]}),s.jsx(Cr,{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:o.map(f=>{const u=t.includes(f.value),p=u&&t.length<=n;return s.jsxs("button",{type:"button",role:"option","aria-selected":u,disabled:f.disabled||p,onClick:()=>d(f.value),children:[s.jsx("span",{className:"bv-tag-select-check","aria-hidden":"true",children:u?"✓":""}),s.jsx("span",{children:f.label})]},f.value)})})})]})})}function Z_({label:e,value:t,onValue:o,onClear:r}){const[n,i]=m.useState(!1);return s.jsx(ko,{label:e,children:s.jsxs("span",{className:"bv-input-shell",children:[s.jsx("input",{type:n?"text":"password",value:t,autoComplete:"off",onChange:a=>o(a.target.value)}),s.jsx(se,{type:"button",intent:"ghost",className:"bv-field-action",onClick:()=>i(!n),children:n?"Hide":"Show"}),s.jsx(se,{type:"button",intent:"ghost",className:"bv-field-action",onClick:()=>{o(""),r?.()},children:"Clear"})]})})}function Q_({label:e,value:t,onValue:o,alpha:r=!1,help:n}){const[i,a]=m.useState(!1),l=m.useRef(null),c=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i.test(t),d=r?j_:O_,f=s.jsx("input",{value:t,"aria-label":`${e} hexadecimal value`,spellCheck:!1,onChange:p=>o(p.target.value)}),u=s.jsxs("div",{className:"bv-color-expanded",children:[f,s.jsx(d,{color:c?t:r?"#8D70FFFF":"#8D70FF",onChange:o})]});return s.jsx(ko,{label:e,help:n,error:c?void 0:"Enter a valid hexadecimal color.",children:s.jsx(gs,{label:e,summary:t,icon:s.jsx("span",{className:"bv-color-dot",style:{background:c?t:"#000"}}),popover:u,children:s.jsxs("div",{ref:l,className:"bv-color-field",children:[s.jsx("button",{type:"button",className:"bv-color-swatch",style:{background:c?t:"#000"},onClick:()=>a(!i),"aria-label":`${e}: ${t}`,"aria-haspopup":"dialog","aria-expanded":i}),f,s.jsx(Cr,{open:i,anchor:l,onClose:()=>a(!1),className:"bv-color-popover",children:u})]})})})}function Il({items:e,value:t,onValue:o,exclusive:r=!1}){const n=i=>o(t.includes(i)?t.filter(a=>a!==i):r?[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 _p=["#E45756","#4C78A8","#54A24B","#F2CF5B","#B279A2","#FF9DA6"],Pb=e=>_p[e%_p.length],Lt=()=>crypto.randomUUID(),wp=()=>({schema:"bv.regional",version:2,document_id:Lt(),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:[]}),ew=e=>({id:Lt(),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:Pb(e)}}),Yt=e=>structuredClone(e);function tw(e,t){return{...e,document_id:t}}const io=(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},It=e=>e.layer_id??e.id,ha=e=>e.mask_group_id??It(e);function Bb(e,t){const o=new Map;for(const r of e){const n=t(r),i=o.get(n);i?i.push(r):o.set(n,[r])}return[...o].map(([r,n],i)=>({id:r,geometries:n,authoring:io(n[0],i),enabled:n.some(a=>a.enabled!==!1)}))}function Co(e){return Bb(e.geometry,It)}function ow(e){return Bb(e,ha)}function rn(e){const t=typeof e=="string"?JSON.parse(e):Yt(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 o of t.regions)o.usage="generation";t.version=2}for(const o of t.regions){if(!["generation","detailer","both"].includes(o.usage))throw new Error(`Invalid region usage: ${o.usage}`);const r=o.geometry.find(n=>!n.layer_id)?.id;o.geometry.forEach((n,i)=>{n.enabled??(n.enabled=!0),n.layer_id??(n.layer_id=r??n.id),n.authoring??(n.authoring=io(n,i)),n.type==="brush_stroke"&&(n.shape??(n.shape="round"),n.pressure_mode??(n.pressure_mode="constant"))})}return t}function zb(e){const t=new Map;for(const o of e){const r=ha(o);t.has(r)||t.set(r,o)}return[...t.values()].every(o=>o.operation==="add")}function fd(e,t){return zb(e.filter(o=>o.id!==t))}function kp({value:e,onCommit:t}){const[o,r]=m.useState(!1),[n,i]=m.useState(e);if(!o)return s.jsx("span",{className:"layer-name",title:e,onDoubleClick:l=>{l.stopPropagation(),i(e),r(!0)},children:e});const a=()=>{const l=n.trim();l&&t(l),r(!1)};return s.jsx(w_,{className:"inline-name",autoFocus:!0,value:n,onChange:l=>i(l.target.value),onBlur:a,onClick:l=>l.stopPropagation(),onKeyDown:l=>{l.stopPropagation(),l.key==="Enter"&&a(),l.key==="Escape"&&r(!1)}})}function Ht({name:e}){const t={"chevron-right":s.jsx("path",{d:"m9 6 6 6-6 6"}),"chevron-down":s.jsx("path",{d:"m6 9 6 6 6-6"}),eye:s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M2.5 12s3.5-6 9.5-6 9.5 6 9.5 6-3.5 6-9.5 6-9.5-6-9.5-6Z"}),s.jsx("circle",{cx:"12",cy:"12",r:"2.5"})]}),"eye-off":s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M3 3l18 18"}),s.jsx("path",{d:"M10.6 6.15A9.8 9.8 0 0 1 12 6c6 0 9.5 6 9.5 6a14.3 14.3 0 0 1-2.05 2.7M6.05 6.05C3.75 7.65 2.5 12 2.5 12s3.5 6 9.5 6a9.4 9.4 0 0 0 3.1-.52"}),s.jsx("path",{d:"M9.9 9.9a3 3 0 0 0 4.2 4.2"})]}),lock:s.jsxs(s.Fragment,{children:[s.jsx("rect",{x:"5",y:"10",width:"14",height:"10",rx:"2"}),s.jsx("path",{d:"M8 10V7a4 4 0 0 1 8 0v3"})]}),unlock:s.jsxs(s.Fragment,{children:[s.jsx("rect",{x:"5",y:"10",width:"14",height:"10",rx:"2"}),s.jsx("path",{d:"M8 10V7a4 4 0 0 1 7.4-2.1"})]}),check:s.jsx("path",{d:"m6 12 4 4 8-9"}),more:s.jsxs(s.Fragment,{children:[s.jsx("circle",{cx:"5",cy:"12",r:"1"}),s.jsx("circle",{cx:"12",cy:"12",r:"1"}),s.jsx("circle",{cx:"19",cy:"12",r:"1"})]}),plus:s.jsx("path",{d:"M12 5v14M5 12h14"}),split:s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M7 5v5a2 2 0 0 0 2 2h6a2 2 0 0 1 2 2v5"}),s.jsx("path",{d:"m4 8 3 3 3-3M14 16l3 3 3-3"})]}),trash:s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M4 7h16M9 7V4h6v3M7 7l1 13h8l1-13"}),s.jsx("path",{d:"M10 11v5M14 11v5"})]})};return s.jsx("svg",{className:"tree-control-icon",viewBox:"0 0 24 24","aria-hidden":"true",children:t[e]})}function rw(e){const[t,o]=m.useState(()=>new Set),[r,n]=m.useState(()=>new Set(e.selectedRegionId?[e.selectedRegionId]:[])),[i,a]=m.useState(null),[l,c]=m.useState(null),d=b=>o(h=>{const v=new Set(h);return v.has(b)?v.delete(b):v.add(b),v}),f=b=>n(h=>{const v=new Set(h);return v.has(b)?v.delete(b):v.add(b),v});m.useEffect(()=>{e.selectedRegionId&&n(b=>b.has(e.selectedRegionId)?b:new Set([...b,e.selectedRegionId]))},[e.selectedRegionId]);const u=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",u(b))},g=(b,h)=>{if(!i||i.kind!==b.kind||b.kind==="layer"&&i.kind==="geometry")return"inside";const v=h.currentTarget.getBoundingClientRect();return h.clientY({onDragOver:h=>{i&&(h.preventDefault(),h.dataTransfer.dropEffect="move",c(`${u(b)}:${g(b,h)}`))},onDragLeave:h=>{h.currentTarget.contains(h.relatedTarget)||c(null)},onDrop:h=>{h.preventDefault(),i&&e.onTreeMove({source:i,target:b,position:g(b,h)}),a(null),c(null)}}),w=b=>{const h=l?.split(":")??[];return l?.startsWith(`${u(b)}:`)?` drop-target drop-${h[h.length-1]}`:""},E=e.regions.find(b=>b.id===e.selectedRegionId)??null;return s.jsxs("aside",{className:"layers",children:[s.jsxs("div",{className:"panel-toolbar",children:[s.jsxs(rt,{className:"panel-tool primary",title:"Add region","aria-label":"Add region",onClick:e.onAddRegion,children:[s.jsx(Ht,{name:"plus"}),s.jsx("span",{children:"Region"})]}),s.jsx(rt,{className:"panel-tool",title:"Split disconnected areas in the selected layer","aria-label":"Split disconnected areas",disabled:!e.canSplitDisconnectedAreas,onClick:e.onSplitDisconnectedAreas,children:s.jsx(Ht,{name:"split"})}),s.jsx("span",{className:"panel-toolbar-spacer"}),s.jsx(rt,{className:"panel-tool danger",title:"Delete selected region","aria-label":"Delete selected region",disabled:!E,onClick:()=>E&&e.onDeleteRegion(E.id),children:s.jsx(Ht,{name:"trash"})})]}),e.regions.map(b=>{const h=b.id===e.selectedRegionId,v=r.has(b.id),_={kind:"region",regionId:b.id};return s.jsxs("section",{className:`region-group ${h?"selected":""}`,"aria-expanded":v,children:[s.jsxs("div",{className:`region-row${w(_)}`,...x(_),onClick:()=>e.onSelectRegion(b.id),children:[s.jsx(rt,{className:"tree-drag-handle",draggable:!0,"aria-label":`Move ${b.name}`,title:"Drag to reorder; Alt + arrow keys also move",onDragStart:y=>p(_,y),onDragEnd:()=>{a(null),c(null)},onKeyDown:y=>{y.altKey&&y.key==="ArrowUp"&&(y.preventDefault(),e.onMoveRegion(b.id,-1)),y.altKey&&y.key==="ArrowDown"&&(y.preventDefault(),e.onMoveRegion(b.id,1))},onClick:y=>y.stopPropagation(),children:"⠿"}),s.jsx(rt,{className:"region-expand","aria-expanded":v,title:v?"Collapse region":"Expand region",onClick:y=>{y.stopPropagation(),f(b.id)},children:s.jsx(Ht,{name:v?"chevron-down":"chevron-right"})}),s.jsx("i",{style:{background:b.authoring.color}}),s.jsx(kp,{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(rt,{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(Ht,{name:b.authoring.visible?"eye":"eye-off"})}),s.jsx(rt,{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(Ht,{name:b.authoring.locked?"lock":"unlock"})}),s.jsx(rt,{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(Ht,{name:"check"})})]}),v&&s.jsx("div",{className:"geometry-layers",children:[...Co(b)].reverse().map(y=>{const T=e.selectedLayerIds.includes(y.id),L=y.id===e.selectedLayerId,B=new Set(y.geometries.map(k=>k.type)),C=new Set(y.geometries.map(ha)).size,j=B.size>1||C>1?"◈":y.geometries[0].type==="rect"?"▭":y.geometries[0].type==="ellipse"?"◯":y.geometries[0].type==="polygon"?"⬠":y.geometries[0].type==="raster_mask"?"▦":"✎",z=t.has(y.id),S={kind:"layer",regionId:b.id,layerId:y.id};return s.jsxs("div",{className:"geometry-tree-item",children:[s.jsxs("div",{className:`geometry-row ${T&&!e.selectedGeometryId?"selected":""} ${L?"primary-selection":""}${w(S)}`,...x(S),onClick:k=>e.onSelectLayer(b.id,y.id,k.shiftKey?"range":k.ctrlKey||k.metaKey?"toggle":"replace"),children:[s.jsx(rt,{className:"tree-drag-handle",draggable:!0,"aria-label":`Move ${y.authoring.name}`,title:"Drag layer; Alt + arrow keys also move",onDragStart:k=>p(S,k),onDragEnd:()=>{a(null),c(null)},onKeyDown:k=>{k.altKey&&k.key==="ArrowUp"&&(k.preventDefault(),e.onMoveLayer(y.id,1)),k.altKey&&k.key==="ArrowDown"&&(k.preventDefault(),e.onMoveLayer(y.id,-1))},onClick:k=>k.stopPropagation(),children:"⠿"}),s.jsx(rt,{className:"layer-expand","aria-expanded":z,title:z?"Collapse operations":"Expand operations",onClick:k=>{k.stopPropagation(),d(y.id)},children:s.jsx(Ht,{name:z?"chevron-down":"chevron-right"})}),s.jsxs("span",{title:`${y.geometries.length} operations · ${C} mask group${C===1?"":"s"}`,children:[j,y.geometries.some(k=>k.operation==="subtract")?"−":""]}),s.jsx(kp,{value:y.authoring.name,onCommit:k=>e.onRenameLayer(y.id,k)}),s.jsx(rt,{className:`tree-icon-button${y.authoring.visible?"":" deviant"}`,title:y.authoring.visible?"Hide in editor":"Show in editor","aria-pressed":y.authoring.visible,onClick:k=>{k.stopPropagation(),e.onToggleLayer(y.id,"visible")},children:s.jsx(Ht,{name:y.authoring.visible?"eye":"eye-off"})}),s.jsx(rt,{className:`tree-icon-button${y.authoring.locked?" deviant":""}`,title:y.authoring.locked?"Unlock layer":"Lock layer","aria-pressed":y.authoring.locked,onClick:k=>{k.stopPropagation(),e.onToggleLayer(y.id,"locked")},children:s.jsx(Ht,{name:y.authoring.locked?"lock":"unlock"})}),s.jsx(rt,{className:`tree-check${y.enabled?"":" deviant"}`,role:"checkbox","aria-checked":y.enabled,title:y.enabled?"Disable mask output":"Enable mask output",onClick:k=>{k.stopPropagation(),e.onToggleLayer(y.id,"enabled")},children:y.enabled&&s.jsx(Ht,{name:"check"})}),s.jsxs("details",{className:"layer-overflow",onClick:k=>k.stopPropagation(),children:[s.jsx("summary",{title:"Layer actions","aria-label":"Layer actions",children:s.jsx(Ht,{name:"more"})}),s.jsxs("div",{children:[s.jsx(rt,{onClick:k=>{k.currentTarget.closest("details").removeAttribute("open"),e.onDuplicateLayer(y.id)},children:"Duplicate layer"}),s.jsx(rt,{className:"danger",onClick:k=>{k.currentTarget.closest("details").removeAttribute("open"),e.onDeleteLayer(y.id)},children:"Delete layer"})]})]})]}),z&&s.jsx("div",{className:"geometry-operations",children:y.geometries.map((k,I)=>{const D={kind:"geometry",regionId:b.id,layerId:y.id,geometryId:k.id};return s.jsxs("div",{className:`geometry-operation ${e.selectedGeometryId===k.id?"selected":""}${w(D)}`,...x(D),children:[s.jsx(rt,{className:"tree-drag-handle",draggable:!0,"aria-label":`Move ${io(k,I).name}`,title:"Drag operation",onDragStart:R=>p(D,R),onDragEnd:()=>{a(null),c(null)},children:"⠿"}),s.jsxs(rt,{className:"geometry-operation-select",onClick:()=>e.onSelectGeometry(b.id,y.id,k.id),children:[s.jsx("span",{className:`operation-kind ${k.operation}`,children:k.operation==="add"?"+":"−"}),s.jsx("span",{children:io(k,I).name}),s.jsx("small",{children:k.type.replace("_"," ")})]}),s.jsx(rt,{className:`tree-icon-button${k.enabled!==!1?"":" deviant"}`,title:k.enabled!==!1?"Disable operation":"Enable operation","aria-pressed":k.enabled!==!1,onClick:()=>e.onToggleGeometry(k.id),children:s.jsx(Ht,{name:k.enabled!==!1?"eye":"eye-off"})}),s.jsx(rt,{className:"danger",disabled:!fd(y.geometries,k.id),title:fd(y.geometries,k.id)?"Delete operation":"Additive base: remove dependent subtract operations first",onClick:()=>e.onDeleteGeometry(k.id),children:"×"})]},k.id)})})]},y.id)})})]},b.id)})]})}const Ep=({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 nw({tool:e,brush:t,canSubtract:o,canvas:r,onTool:n,onBrush:i}){const[a,l]=m.useState(!1),c=e.startsWith("brush"),d=[{id:"select",title:"Select and transform"},{id:"rect-add",title:"Add rectangle"},{id:"rect-subtract",title:"Subtract rectangle from selected layer"},{id:"ellipse-add",title:"Add ellipse"},{id:"ellipse-subtract",title:"Subtract ellipse from selected layer"},{id:"polygon-add",title:"Add polygon (click points, Enter or double-click to close)"},{id:"polygon-subtract",title:"Subtract polygon from selected layer"},{id:"brush-add",title:"Add brush stroke"},{id:"brush-subtract",title:"Subtract from selected layer"}];return s.jsxs("div",{className:"artboard-tools",onPointerDown:f=>f.stopPropagation(),onPointerUp:f=>f.stopPropagation(),onWheel:f=>f.stopPropagation(),children:[s.jsx(__,{orientation:"vertical",density:"compact",label:"Regional drawing tools",items:[...d.map(f=>({id:f.id,label:f.title,icon:s.jsx(Ep,{name:f.id}),active:e===f.id,disabled:f.id.endsWith("subtract")&&!o,onSelect:()=>{n(f.id),f.id.startsWith("brush")||l(!1)},group:f.id.split("-")[0]})),...c?[{id:"brush-settings",label:"Brush settings",icon:s.jsx(Ep,{name:"settings"}),active:a,onSelect:()=>l(f=>!f),group:"settings"}]:[]]}),c&&a&&s.jsxs("div",{className:"brush-flyout",children:[s.jsxs("header",{children:[s.jsx("strong",{children:"Brush"}),s.jsx(se,{intent:"ghost",iconOnly:!0,"aria-label":"Close brush settings",onClick:()=>l(!1),children:"×"})]}),s.jsx(jt,{label:"Brush size",value:t.size,min:.005,max:.25,step:.005,unit:`${Math.round(t.size*Math.min(r.width,r.height))} px`,onValue:f=>i({...t,size:f})}),s.jsx(jt,{label:"Hardness",value:t.hardness,min:0,max:1,step:.05,unit:"×",onValue:f=>i({...t,hardness:f})}),s.jsx(jt,{label:"Opacity",value:t.opacity,min:.05,max:1,step:.05,unit:"×",onValue:f=>i({...t,opacity:f})}),s.jsx(ft,{label:"Shape",value:t.shape,onValue:f=>i({...t,shape:f}),options:[{value:"round",label:"Round"},{value:"square",label:"Square"}]}),s.jsx(ft,{label:"Pressure",value:t.pressureMode,onValue:f=>i({...t,pressureMode:f}),options:[{value:"constant",label:"Constant"},{value:"stylus",label:"Stylus"}]})]})]})}const iw=({control:e,groups:t,conflicts:o,onChange:r})=>{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)||r({...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(on,{label:"Control name",value:e.name,onValue:a=>r({...e,name:a})}),s.jsxs("span",{children:[e.assignments.length," groups"]}),s.jsx(se,{intent:"danger",onClick:()=>r(null),children:"Delete"})]}),s.jsx("div",{className:"bv-assignments",children:e.assignments.map((a,l)=>{const c=o.find(u=>u.groupId===a.groupId),d=c?.entries.filter(u=>u.action===c.winnerAction).map(u=>u.controlName).join(", "),f=c?a.action===c.winnerAction?`Overrides ${[...new Set(c.entries.filter(u=>u.action!==c.winnerAction).map(u=>n(u.action)))].join(", ")}`:`Overridden by ${n(c.winnerAction)} from ${d}`:"";return s.jsxs("div",{className:a.unresolved?"unresolved":c?"conflict":"",children:[s.jsxs("span",{children:[a.unresolved?"⚠ ":"",a.groupPath,f&&s.jsxs("small",{children:["⚠ ",f]})]}),s.jsx(ft,{label:"Action",value:a.action,options:[{value:"activate",label:"Activate"},{value:"mute",label:"Mute"},{value:"bypass",label:"Bypass"}],onValue:u=>r({...e,assignments:e.assignments.map((p,g)=>g===l?{...p,action:u}:p)})}),s.jsx(se,{intent:"ghost",iconOnly:!0,"aria-label":"Remove assignment",onClick:()=>r({...e,assignments:e.assignments.filter((u,p)=>p!==l)}),children:"×"})]},a.groupId)})}),s.jsx(ft,{label:"Add group",value:"",onValue:i,options:[{value:"",label:"Choose group…"},...t.map(a=>({value:a.id,label:a.pathLabel}))]})]})},aw=100;function ms(e,t=o=>structuredClone(o)){const[o,r]=m.useState(()=>t(e)),[n,i]=m.useState([]),[a,l]=m.useState([]),c=m.useRef(o);c.current=o;const d=m.useCallback(x=>{r(w=>{const E=typeof x=="function"?x(t(w)):x;return i(b=>[...b.slice(-99),t(w)]),l([]),t(E)})},[t]),f=m.useCallback((x,w=!1)=>{r(t(x)),w&&(i([]),l([]))},[t]),u=m.useCallback(()=>{i(x=>{if(!x.length)return x;const w=x[x.length-1];return l(E=>[t(c.current),...E].slice(0,aw)),r(t(w)),x.slice(0,-1)})},[t]),p=m.useCallback(()=>{l(x=>{if(!x.length)return x;const w=x[0];return i(E=>[...E.slice(-99),t(c.current)]),r(t(w)),x.slice(1)})},[t]),g=m.useCallback(()=>{i([]),l([])},[]);return{value:o,commit:d,replace:f,undo:u,redo:p,clear:g,canUndo:n.length>0,canRedo:a.length>0}}const lw=e=>e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLElement&&e.isContentEditable;function xs(e,t=!0){m.useEffect(()=>{if(!t)return;const o=a=>{if(lw(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},r=a=>{a.preventDefault(),a.stopImmediatePropagation()},n=a=>{const l=o(a);l&&(r(a),l==="undo"&&e.canUndo?e.undo():l==="redo"&&e.canRedo&&e.redo())},i=a=>{o(a)&&r(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 sw(){return globalThis.crypto?.randomUUID?.()??`bv-control-${Date.now()}-${Math.random().toString(16).slice(2)}`}const cw=()=>{const e=m.useMemo(()=>{const f=tn(),u=new Set(jl(Nt()).map(p=>p.id));return{...f,controls:f.controls.map(p=>({...p,assignments:p.assignments.map(g=>({...g,unresolved:!u.has(g.groupId)}))}))}},[]),t=ms(e),o=t.value,r=f=>t.commit(f);xs(t),m.useEffect(()=>{const f=u=>{const p=u.detail,g=new Map(p.controls.map(w=>[w.id,w.enabled])),x={...o,controls:o.controls.map(w=>g.has(w.id)?{...w,enabled:g.get(w.id)}:w)};JSON.stringify(x)!==JSON.stringify(o)&&t.replace(x)};return window.addEventListener(Hn,f),()=>window.removeEventListener(Hn,f)},[o,t.replace]);const n=m.useMemo(()=>jl(Nt()),[o]),i=m.useMemo(()=>kb(o),[o]),a=m.useRef(!1);m.useEffect(()=>{if(!a.current){a.current=!0;return}const f=window.setTimeout(()=>{const u=o.controls.map(g=>g.name.trim());if(u.some(g=>!g)||new Set(u).size!==u.length)return;const p=new Set(n.map(g=>g.id));ku({...o,controls:o.controls.map(g=>({...g,name:g.name.trim(),assignments:g.assignments.map(x=>({...x,unresolved:!p.has(x.groupId)}))}))})},250);return()=>window.clearTimeout(f)},[o,n]);const l=(f,u)=>{r({...o,controls:u?o.controls.map((p,g)=>g===f?u:p):o.controls.filter((p,g)=>g!==f)})},c=()=>{let f="New Control",u=2;for(;o.controls.some(p=>p.name===f);)f=`New Control ${u++}`;r({...o,controls:[...o.controls,{id:sw(),name:f,enabled:!0,assignments:[]}]})},d=o.controls.map((f,u)=>({id:f.id,title:f.name||"Unnamed control",description:`${f.assignments.length} assignment${f.assignments.length===1?"":"s"}`,content:s.jsx(iw,{control:f,groups:n,conflicts:i,onChange:p=>l(u,p)})}));return s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(Go,{label:"Force active after releasing restrictions",checked:o.forceActive,onValue:f=>r({...o,forceActive:f})}),s.jsx("div",{className:"bv-controls",children:s.jsx(bs,{items:d,onReorder:f=>r({...o,controls:f.map(u=>o.controls.find(p=>p.id===u.id)).filter(Boolean)}),onRemove:f=>r({...o,controls:o.controls.filter(u=>u.id!==f)})})}),s.jsxs("footer",{className:"bv-ui-inline-footer",children:[s.jsx(Tb,{tone:"success",dot:!0,children:"Autosaved"}),s.jsx(se,{intent:"ghost",disabled:!t.canUndo,onClick:t.undo,children:"Undo"}),s.jsx(se,{intent:"ghost",disabled:!t.canRedo,onClick:t.redo,children:"Redo"}),s.jsx(se,{onClick:c,children:"Add Control"})]})]})},Vr=new Map,Pl=new Map;function Ou(e,t={}){const o=t.key?Vr.get(t.key):void 0;if(o)return o.activate(e),o.close;const r=document.createElement("div");r.className="bv-ui",r.dataset.bvUiMount="true",document.body.append(r);const n=Jn(r);let i=!1,a=0,l=e;const c=()=>{i||(i=!0,t.key&&Vr.get(t.key)?.close===c&&Vr.delete(t.key),n.unmount(),r.remove())},d=g=>{g&&(l=g),a+=1,document.body.append(r),r.querySelector(".bv-managed-window")?.dispatchEvent(new Event("bv-ui-activate")),n.render(l(c,a))},f=()=>r.querySelector(".bv-managed-window")?.dispatchEvent(new Event("bv-ui-minimize")),u=()=>{const g=r.querySelector(".bv-managed-window"),x=g?.getBoundingClientRect();return{mode:g?.classList.contains("workspace")?"workspace":"floating",geometry:x?{x:x.left,y:x.top,width:x.width,height:x.height}:void 0}},p=g=>r.querySelector(".bv-managed-window")?.dispatchEvent(new CustomEvent("bv-ui-set-window-state",{detail:g}));if(t.key){const g={activate:d,minimize:f,state:u,setState:p,close:c};Vr.set(t.key,g);const x=Pl.get(t.key);x&&(Pl.delete(t.key),requestAnimationFrame(()=>g.setState(x)))}return n.render(l(c,a)),c}function Au(e,t,o,r){if(e===t)return Vr.get(e)?.activate();const n=Vr.get(e),i=n?.state(),a=Vr.get(t);i&&Pl.set(t,i),a?a.activate():o(),i&&a&&(Pl.delete(t),requestAnimationFrame(()=>a.setState(i))),r?n?.close():n?.minimize()}const Fb="BV.NodePack.UI.Size",Ub="BV.NodePack.UI.ReducedEffects",Du="BV.NodePack.UI.WindowSwitchMode";let mi="keep",Wb;const pd=new Set,dw=e=>e==="replace"?"replace":"keep",Yn=()=>mi,uw=e=>{Wb=e},fw=e=>(pd.add(e),()=>pd.delete(e));function Mu(e,t=!0){return mi=dw(e),t&&Wb?.(mi),pd.forEach(o=>o(mi)),mi}const pw=["bv-ui-size-compact","bv-ui-size-default","bv-ui-size-large"];function hw(e){return e==="compact"||e==="large"?e:"default"}function Vb(e,t=document.documentElement){const o=hw(e);return t.classList.remove(...pw),t.classList.add(`bv-ui-size-${o}`),o}function Hb(e,t=document.documentElement){return t.classList.toggle("bv-ui-reduced-effects",!!e),!!e}function gw(e){Vb(e?.getSettingValue?.(Fb,"default")),Hb(e?.getSettingValue?.(Ub,!1)),Mu(e?.getSettingValue?.(Du,"keep"),!1)}function bw(e,t,o,r){const n=e.x+e.width,i=e.y+e.height;let a=e.x,l=e.y,c=e.width,d=e.height;return o.includes("e")&&(c=Math.max(r.width,e.width+t.x)),o.includes("s")&&(d=Math.max(r.height,e.height+t.y)),o.includes("w")&&(c=Math.max(r.width,e.width-t.x),a=n-c),o.includes("n")&&(d=Math.max(r.height,e.height-t.y),l=i-d),{x:a,y:l,width:c,height:d}}function vw(e,t,o){const r={...e};for(const n of["x","y","width","height"])o?.[n]!==void 0&&o[n]!==t?.[n]&&(r[n]=o[n]);return r}function mw(e,t,o,r=12,n=128){const i=e??{left:0,right:o.width,bottom:o.height,height:o.height},l=t.filter(c=>c.width>0&&c.height>=i.height*.45&&c.rightc.left-d.left||d.right-c.right).reduce((c,d)=>d.left<=c+4?Math.max(c,d.right):c,i.left);return{left:Math.round(Math.max(i.left+n,l)+r),bottom:Math.round(Math.max(r,o.height-i.bottom+r))}}const Yr=[];let Tp=!1;const xw=e=>e.isConnected&&!e.hidden&&e.offsetParent!==null;function yw(e){const t=Yr.filter(xw);if(t.length<2)return;const o=document.activeElement instanceof Element?t.findIndex(n=>n===document.activeElement||n.contains(document.activeElement)):-1,r=o<0?t.length-1:(o+(e?-1:1)+t.length)%t.length;t[r].dispatchEvent(new CustomEvent("bv-ui-activate"))}function _w(){Tp||(Tp=!0,window.addEventListener("keydown",e=>{e.key!=="Tab"||!e.ctrlKey||e.altKey||e.metaKey||(e.preventDefault(),e.stopImmediatePropagation(),yw(e.shiftKey))},!0))}function ww(e){return _w(),Yr.push(e),()=>{const t=Yr.indexOf(e);t>=0&&Yr.splice(t,1)}}function Rp(e){const t=Yr.indexOf(e);t>=0&&Yr.splice(t,1),Yr.push(e)}const $b="bvWindowMenuVisible",Xn="bv-window-menu-visibility-changed",kw=e=>!["BV Smart Pipe","BV Smart Pipe Merge"].includes(e);function sn(e){const t=e?.properties?.[$b];return typeof t=="boolean"?t:kw(String(e?.type??e?.comfyClass??""))}function Qn(e,t){e&&(e.properties??(e.properties={}),e.properties[$b]=!!t,e.graph?.setDirtyCanvas?.(!0,!0),window.dispatchEvent(new CustomEvent(Xn,{detail:{node:e,visible:!!t}})))}function Ew(e){return window.addEventListener(Xn,e),()=>window.removeEventListener(Xn,e)}let hd=0;window.addEventListener(Xn,()=>hd++);function ga(e){return m.useSyncExternalStore(Ew,()=>hd,()=>hd),sn(e)}const Tw=(e,t)=>String(e?.id??e?._id??e?.extra?.uuid??t);function ju(e,t){const o=[],r=(n,i,a,l=new Set)=>{if(!n||l.has(n))return;const c=new Set(l);c.add(n);const d=Tw(n,i.length?i[i.length-1]:"root");for(const f of n._nodes??n.nodes??[]){const u=String(f.id),p=[...i,d];t(f)&&o.push({node:f,graph:n,path:p,key:`${p.join("/")}:${u}`,breadcrumb:a.join(" › ")});const g=f.subgraph??(()=>{try{return f.getSubgraph?.()}catch{return null}})();g&&r(g,[...p,u],[...a,String(f.title||f.type||`#${u}`)],c)}};return r(e,[],[]),o}function ea(e,t){return ju(e,o=>o===t)[0]?.key??String(t?.id??"")}const Bl="bv-toggle-toolbar-window-launcher";function Rw({getColumns:e}){const[t,o]=m.useState({left:0,top:0}),[r,n]=m.useState(!1),[i,a]=m.useState(!1),[,l]=m.useState(0),c=m.useRef(null),d=m.useRef(),f=m.useRef(),u=m.useRef(0),p=()=>{d.current&&window.clearTimeout(d.current),f.current&&window.clearTimeout(f.current)},g=(v,_)=>{const y=v.getBoundingClientRect(),T=Math.min(Math.max(1,_)*220,window.innerWidth-24),L=Math.min(420,window.innerHeight-84),B=Math.max(12,Math.min(y.left,window.innerWidth-T-12)),C=y.bottom+6+L<=window.innerHeight-12?y.bottom+6:Math.max(12,y.top-L-6);return{left:B,top:C}},x=m.useCallback((v,_)=>{p(),d.current=window.setTimeout(()=>{if(document.body.classList.contains("bv-toolbar-no-editor")&&document.body.classList.contains("bv-toolbar-no-quick"))return;const y=[...document.querySelectorAll(".bv-regional-action")].filter(L=>L.offsetParent!==null),T=_?.offsetParent?_:y[0];T&&(a(!1),o(g(T,e(!1).filter(L=>L.items.length).length)),n(!0))},v)},[e]),w=m.useCallback(()=>x(180),[x]),E=m.useCallback(()=>{d.current&&window.clearTimeout(d.current);const v=Math.max(280,u.current-Date.now());f.current=window.setTimeout(()=>{c.current?.matches(":hover")||(n(!1),a(!1))},v)},[]);m.useEffect(()=>{const v=new Map,_=()=>{for(const T of document.querySelectorAll(".bv-regional-action")){if(v.has(T))continue;const L=()=>w(),B=()=>E();T.addEventListener("pointerenter",L),T.addEventListener("pointerleave",B);const C=()=>{T.removeEventListener("pointerenter",L),T.removeEventListener("pointerleave",B)};v.set(T,C)}};_();const y=new MutationObserver(_);return y.observe(document.body,{childList:!0,subtree:!0}),()=>{y.disconnect(),v.forEach(T=>T()),p()}},[E,w]),m.useEffect(()=>{if(!r)return;const v=_=>{_.key==="Escape"&&(n(!1),a(!1))};return window.addEventListener("keydown",v),()=>window.removeEventListener("keydown",v)},[r]),m.useEffect(()=>{const v=_=>r?(n(!1),a(!1)):x(0,_.detail?.anchor);return window.addEventListener(Bl,v),()=>window.removeEventListener(Bl,v)},[r,x]),m.useEffect(()=>{const v=()=>l(_=>_+1);return window.addEventListener(Xn,v),()=>window.removeEventListener(Xn,v)},[]);const b=v=>{p(),u.current=Date.now()+700;const _=c.current?.getBoundingClientRect();a(v),requestAnimationFrame(()=>requestAnimationFrame(()=>{const y=c.current?.getBoundingClientRect();!_||!y||o(T=>({...T,top:Math.max(12,Math.min(window.innerHeight-y.height-12,T.top+_.bottom-y.bottom))}))}))};if(!r)return null;const h=e(i).filter(v=>v.items.length);return Io.createPortal(s.jsxs("div",{ref:c,className:"bv-toolbar-window-launcher bv-ui bv-density-compact",style:{left:t.left,top:t.top,"--bv-launcher-columns":Math.max(1,h.length)},role:"dialog","aria-label":"BV window launcher",onPointerEnter:p,onPointerLeave:E,children:[s.jsx("div",{className:"bv-toolbar-window-launcher__body",children:h.length?h.map(v=>s.jsxs("section",{children:[s.jsx("h3",{children:v.label}),s.jsx("div",{children:v.items.map(_=>s.jsxs("div",{className:`bv-toolbar-launcher-row ${_.hidden?"is-hidden":""}`,children:[s.jsxs(se,{intent:"ghost",disabled:_.disabled,onClick:()=>{n(!1),a(!1),_.onSelect()},children:[s.jsx("span",{children:_.label}),_.meta&&s.jsx("small",{children:_.meta})]}),_.secondary&&s.jsx("button",{type:"button",className:"bv-toolbar-launcher-secondary",title:_.secondary.label,"aria-label":_.secondary.label,onClick:()=>{n(!1),a(!1),_.secondary?.onSelect()},children:"✎"}),_.hidden&&_.onReveal&&s.jsx("button",{type:"button",className:"bv-toolbar-launcher-reveal",title:"Show in BV window menus","aria-label":`Show ${_.label} in BV window menus`,onClick:_.onReveal,children:"◉"})]},_.id))})]},v.id)):s.jsxs("div",{className:"bv-toolbar-launcher-empty",children:[s.jsx("strong",{children:"No visible BV windows"}),s.jsx("span",{children:"Show hidden nodes to restore one."})]})}),s.jsx("footer",{children:s.jsx(q_,{label:"Show hidden nodes",value:i,trueLabel:"Shown",falseLabel:"Hidden",onValue:b})})]}),document.body)}var ei=class{constructor(){A(this,"attributes");A(this,"nameToAttribute");this.attributes=[],this.nameToAttribute=new Map}addWithAll(e,t,o,r){const n=new te(e,t,o,r);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,o){return this.addWithAll(e,void 0,t,o)}getAttributes(){return this.attributes}getModelName(e){const t=this.nameToAttribute.get(e);if(t!==void 0)return t.modelName}toJson(e,t){for(const o of this.attributes){const r=t[o.name];(o.alwaysWriteJson||r!==o.defaultValue)&&(e[o.name]=r)}}fromJson(e,t){for(const o of this.attributes){let r=e[o.name];r===void 0&&o.alias&&(r=e[o.alias]),r===void 0?t[o.name]=o.defaultValue:t[o.name]=r}}update(e,t){for(const o of this.attributes)if(Object.prototype.hasOwnProperty.call(e,o.name)){const r=e[o.name];r===void 0?delete t[o.name]:t[o.name]=r}}setDefaults(e){for(const t of this.attributes)e[t.name]=t.defaultValue}pairAttributes(e,t){for(const o of t.attributes)if(o.modelName&&this.nameToAttribute.has(o.modelName)){const r=this.nameToAttribute.get(o.modelName);r.setpairedAttr(o),o.setpairedAttr(r),r.setPairedType(e)}}toTypescriptInterface(e,t){const o=[],r=this.attributes.sort((n,i)=>n.name.localeCompare(i.name));o.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}},O(pi,"NUMBER","number"),O(pi,"STRING","string"),O(pi,"BOOLEAN","boolean"),pi),he=class Pr{constructor(t,o,r,n){O(this,"x");O(this,"y");O(this,"width");O(this,"height");this.x=t,this.y=o,this.width=r,this.height=n}static empty(){return new Pr(0,0,0,0)}static fromJson(t){return new Pr(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:o,y:r,width:n,height:i}=t.getBoundingClientRect();return new Pr(o,r,n,i)}static fromDomRect(t){return new Pr(t.x,t.y,t.width,t.height)}relativeTo(t){return new Pr(this.x-t.x,this.y-t.y,this.width,this.height)}clone(){return new Pr(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 o=.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&&o<.75&&r>=.25&&r<.75)return Me.CENTER;const i=r>=o,a=r>=1-o;return i?a?Me.BOTTOM:Me.LEFT:a?Me.RIGHT:Me.TOP}getName(){return this.name}getOrientation(){return this.orientation}getDockRect(t){return this===Me.TOP?new he(t.x,t.y,t.width,t.height/2):this===Me.BOTTOM?new he(t.x,t.getBottom()-t.height/2,t.width,t.height/2):this===Me.LEFT?new he(t.x,t.y,t.width/2,t.height):this===Me.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+")"}},O(Me,"values",new Map),O(Me,"TOP",new Me("top",ye.VERT,0)),O(Me,"BOTTOM",new Me("bottom",ye.VERT,1)),O(Me,"LEFT",new Me("left",ye.HORZ,0)),O(Me,"RIGHT",new Me("right",ye.HORZ,1)),O(Me,"CENTER",new Me("center",ye.VERT,0)),Me),de,oe=(de=class{static group(t){return new Yb(t)}static addTab(t,o,r,n,i){return new Ve(de.ADD_TAB,{json:t,toNode:o,location:r.getName(),index:n,select:i})}static addNode(t,o,r,n,i){return this.addTab(t,o,r,n,i)}static moveNode(t,o,r,n,i){return new Ve(de.MOVE_NODE,{fromNode:t,toNode:o,location:r.getName(),index:n,select:i})}static deleteTab(t){return new Ve(de.DELETE_TAB,{node:t})}static deleteTabset(t){return new Ve(de.DELETE_TABSET,{node:t})}static renameTab(t,o){return new Ve(de.RENAME_TAB,{node:t,text:o})}static setTabPinned(t,o){return new Ve(de.SET_TAB_PINNED,{node:t,pinned:o})}static setBorderType(t,o){return new Ve(de.SET_BORDER_TYPE,{node:t,borderType:o})}static selectTab(t){return new Ve(de.SELECT_TAB,{tabNode:t})}static setActiveTabset(t,o){return new Ve(de.SET_ACTIVE_TABSET,{tabsetNode:t,layoutId:o})}static adjustWeights(t,o){return new Ve(de.ADJUST_WEIGHTS,{nodeId:t,weights:o})}static adjustBorderSplit(t,o){return new Ve(de.ADJUST_BORDER_SPLIT,{node:t,size:o})}static maximizeToggle(t,o){return new Ve(de.MAXIMIZE_TOGGLE,{node:t,layoutId:o})}static updateModelAttributes(t){return new Ve(de.UPDATE_MODEL_ATTRIBUTES,{json:t})}static updateNodeAttributes(t,o){return new Ve(de.UPDATE_NODE_ATTRIBUTES,{node:t,json:o})}static updateSubLayoutAttributes(t,o){return new Ve(de.UPDATE_SUBLAYOUT_ATTRIBUTES,{layoutId:t,json:o})}static popoutTab(t,o="window"){return new Ve(de.POPOUT_TAB,{node:t,type:o})}static popoutTabset(t,o="window"){return new Ve(de.POPOUT_TABSET,{node:t,type:o})}static closePopout(t){return new Ve(de.CLOSE_POPOUT,{layoutId:t})}static movePopoutToFront(t){return new Ve(de.MOVE_POPOUT_TO_FRONT,{layoutId:t})}static moveFloat(t,o){return new Ve(de.MOVE_FLOAT,{layoutId:t,rect:o})}static popoutFloat(t,o){return new Ve(de.POPOUT_FLOAT,{layoutId:t,rect:o})}static dockFloatToLayout(t,o,r,n){return new Ve(de.DOCK_FLOAT_TO_LAYOUT,{layoutId:t,toNode:o,location:r.getName(),index:n})}static createPopout(t,o,r){return this.createSubLayout(t,o,r)}static createSubLayout(t,o,r){return new Ve(de.CREATE_SUBLAYOUT,{layout:t,rect:o,type:r})}},O(de,"ADD_TAB","FlexLayout_AddTab"),O(de,"DELETE_TAB","FlexLayout_DeleteTab"),O(de,"RENAME_TAB","FlexLayout_RenameTab"),O(de,"SET_TAB_PINNED","FlexLayout_SetTabPinned"),O(de,"SET_BORDER_TYPE","FlexLayout_SetBorderType"),O(de,"SELECT_TAB","FlexLayout_SelectTab"),O(de,"MOVE_NODE","FlexLayout_MoveNode"),O(de,"DELETE_TABSET","FlexLayout_DeleteTabset"),O(de,"SET_ACTIVE_TABSET","FlexLayout_SetActiveTabset"),O(de,"ADJUST_WEIGHTS","FlexLayout_AdjustWeights"),O(de,"ADJUST_BORDER_SPLIT","FlexLayout_AdjustBorderSplit"),O(de,"MAXIMIZE_TOGGLE","FlexLayout_MaximizeToggle"),O(de,"UPDATE_MODEL_ATTRIBUTES","FlexLayout_UpdateModelAttributes"),O(de,"UPDATE_NODE_ATTRIBUTES","FlexLayout_UpdateNodeAttributes"),O(de,"UPDATE_SUBLAYOUT_ATTRIBUTES","FlexLayout_UpdateSubLayoutAttributes"),O(de,"POPOUT_TAB","FlexLayout_PopoutTab"),O(de,"POPOUT_TABSET","FlexLayout_PopoutTabset"),O(de,"CLOSE_POPOUT","FlexLayout_ClosePopout"),O(de,"MOVE_POPOUT_TO_FRONT","FlexLayout_MoveFloatToFront"),O(de,"MOVE_FLOAT","FlexLayout_MoveFloat"),O(de,"DOCK_FLOAT_TO_LAYOUT","FlexLayout_DockFloatToLayout"),O(de,"POPOUT_FLOAT","FlexLayout_PopoutFloat"),O(de,"CREATE_SUBLAYOUT","FlexLayout_CreateSubLayout"),O(de,"GROUP","FlexLayout_Group"),de),Ve=class{constructor(e,t){O(this,"type");O(this,"data");O(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}}},Yb=class extends Ve{constructor(t){super(oe.GROUP,t);O(this,"actions");this.actions=t}},kt=class{constructor(e,t,o,r,n){O(this,"node");O(this,"rect");O(this,"location");O(this,"index");O(this,"className");this.node=e,this.rect=t,this.location=o,this.index=r,this.className=n}},U=function(e){return e.FLEXLAYOUT__BORDER="flexlayout__border",e.FLEXLAYOUT__BORDER_="flexlayout__border_",e.FLEXLAYOUT__BORDER_TAB_CONTENTS="flexlayout__border_tab_contents",e.FLEXLAYOUT__BORDER_TAB_OVERLAY="flexlayout__border_tab_overlay",e.FLEXLAYOUT__BORDER_TAB_OVERLAY_="flexlayout__border_tab_overlay_",e.FLEXLAYOUT__BORDER_BUTTON="flexlayout__border_button",e.FLEXLAYOUT__BORDER_BUTTON_="flexlayout__border_button_",e.FLEXLAYOUT__BORDER_BUTTON_CONTENT="flexlayout__border_button_content",e.FLEXLAYOUT__BORDER_BUTTON_LEADING="flexlayout__border_button_leading",e.FLEXLAYOUT__BORDER_BUTTON_TRAILING="flexlayout__border_button_trailing",e.FLEXLAYOUT__BORDER_BUTTON__SELECTED="flexlayout__border_button--selected",e.FLEXLAYOUT__BORDER_BUTTON__UNSELECTED="flexlayout__border_button--unselected",e.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_OVERFLOW="flexlayout__border_toolbar_button_overflow",e.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_OVERFLOW_="flexlayout__border_toolbar_button_overflow_",e.FLEXLAYOUT__BORDER_INNER="flexlayout__border_inner",e.FLEXLAYOUT__BORDER_INNER_="flexlayout__border_inner_",e.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER="flexlayout__border_inner_tab_container",e.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER_="flexlayout__border_inner_tab_container_",e.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER_LEFT_DOWN="flexlayout__border_inner_tab_container_left_down",e.FLEXLAYOUT__BORDER_TAB_DIVIDER="flexlayout__border_tab_divider",e.FLEXLAYOUT__BORDER_LEADING="flexlayout__border_leading",e.FLEXLAYOUT__BORDER_SIZER="flexlayout__border_sizer",e.FLEXLAYOUT__BORDER_TOOLBAR="flexlayout__border_toolbar",e.FLEXLAYOUT__BORDER_TOOLBAR_="flexlayout__border_toolbar_",e.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON="flexlayout__border_toolbar_button",e.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_FLOAT="flexlayout__border_toolbar_button-float",e.FLEXLAYOUT__DRAG_RECT="flexlayout__drag_rect",e.FLEXLAYOUT__EDGE_RECT="flexlayout__edge_rect",e.FLEXLAYOUT__EDGE_RECT_TOP="flexlayout__edge_rect_top",e.FLEXLAYOUT__EDGE_RECT_LEFT="flexlayout__edge_rect_left",e.FLEXLAYOUT__EDGE_RECT_BOTTOM="flexlayout__edge_rect_bottom",e.FLEXLAYOUT__EDGE_RECT_RIGHT="flexlayout__edge_rect_right",e.FLEXLAYOUT__ERROR_BOUNDARY_CONTAINER="flexlayout__error_boundary_container",e.FLEXLAYOUT__ERROR_BOUNDARY_CONTENT="flexlayout__error_boundary_content",e.FLEXLAYOUT__FLOAT_WINDOW="flexlayout__float_window",e.FLEXLAYOUT__FLOAT_WINDOW_HEADER="flexlayout__float_window_header",e.FLEXLAYOUT__FLOAT_WINDOW_HEADER_TITLE="flexlayout__float_window_header_title",e.FLEXLAYOUT__FLOAT_WINDOW_CONTENT="flexlayout__float_window_content",e.FLEXLAYOUT__FLOAT_WINDOW_DRAG_HANDLE="flexlayout__float_window_drag_handle",e.FLEXLAYOUT__FLOAT_WINDOW_BUTTON="flexlayout__float_window_button",e.FLEXLAYOUT__FLOATING_WINDOW_CONTENT="flexlayout__floating_window_content",e.FLEXLAYOUT__LAYOUT="flexlayout__layout",e.FLEXLAYOUT__LAYOUT_METRICS="flexlayout__layout_metrics",e.FLEXLAYOUT__LAYOUT_MOVEABLES_HOME="flexlayout__layout_moveables_home",e.FLEXLAYOUT__LAYOUT_OVERLAY="flexlayout__layout_overlay",e.FLEXLAYOUT__LAYOUT_TAB_STAMPS="flexlayout__layout_tab_stamps",e.FLEXLAYOUT__LAYOUT_MAIN="flexlayout__layout_main",e.FLEXLAYOUT__LAYOUT_BORDER_CONTAINER="flexlayout__layout_border_container",e.FLEXLAYOUT__LAYOUT_BORDER_CONTAINER_INNER="flexlayout__layout_border_container_inner",e.FLEXLAYOUT__OUTLINE_RECT="flexlayout__outline_rect",e.FLEXLAYOUT__OUTLINE_RECT_EDGE="flexlayout__outline_rect_edge",e.FLEXLAYOUT__SPLITTER="flexlayout__splitter",e.FLEXLAYOUT__SPLITTER_="flexlayout__splitter_",e.FLEXLAYOUT__SPLITTER_BORDER="flexlayout__splitter_border",e.FLEXLAYOUT__SPLITTER_DRAG="flexlayout__splitter_drag",e.FLEXLAYOUT__SPLITTER_HANDLE="flexlayout__splitter_handle",e.FLEXLAYOUT__SPLITTER_HANDLE_HORZ="flexlayout__splitter_handle_horz",e.FLEXLAYOUT__SPLITTER_HANDLE_VERT="flexlayout__splitter_handle_vert",e.FLEXLAYOUT__ROW="flexlayout__row",e.FLEXLAYOUT__TAB="flexlayout__tab",e.FLEXLAYOUT__TAB_MOVEABLE="flexlayout__tab_moveable",e.FLEXLAYOUT__TAB_OVERLAY="flexlayout__tab_overlay",e.FLEXLAYOUT__TAB_OVERLAY_RAISED="flexlayout__tab_overlay_raised",e.FLEXLAYOUT__TAB_LAYOUT_CONTAINER="flexlayout__tab_layout_container",e.FLEXLAYOUT__TAB_LAYOUT_CONTAINER_USER="flexlayout__tab_layout_container_user",e.FLEXLAYOUT__TABSET="flexlayout__tabset",e.FLEXLAYOUT__TABSET_CONTAINER="flexlayout__tabset_container",e.FLEXLAYOUT__TABSET_MAXIMIZED="flexlayout__tabset-maximized",e.FLEXLAYOUT__TABSET_SELECTED="flexlayout__tabset-selected",e.FLEXLAYOUT__TABSET_TAB_SPACER="flexlayout__tabset_tab_spacer",e.FLEXLAYOUT__TABSET_TAB_DIVIDER="flexlayout__tabset_tab_divider",e.FLEXLAYOUT__TABSET_TAB_DIVIDER_SELECTED_BEFORE="flexlayout__tabset_tab_divider_selected_before",e.FLEXLAYOUT__TABSET_TAB_DIVIDER_SELECTED_AFTER="flexlayout__tabset_tab_divider_selected_after",e.FLEXLAYOUT__TABSET_TAB_DIVIDER_INNER="flexlayout__tabset_tab_divider_inner",e.FLEXLAYOUT__TABSET_CONTENT="flexlayout__tabset_content",e.FLEXLAYOUT__TABSET_TABBAR_INNER="flexlayout__tabset_tabbar_inner",e.FLEXLAYOUT__TABSET_TABBAR_INNER_="flexlayout__tabset_tabbar_inner_",e.FLEXLAYOUT__TABSET_LEADING="flexlayout__tabset_leading",e.FLEXLAYOUT__TABSET_TABBAR_INNER_TAB_CONTAINER="flexlayout__tabset_tabbar_inner_tab_container",e.FLEXLAYOUT__TABSET_TABBAR_INNER_TAB_CONTAINER_="flexlayout__tabset_tabbar_inner_tab_container_",e.FLEXLAYOUT__TABSET_TABBAR_OUTER="flexlayout__tabset_tabbar_outer",e.FLEXLAYOUT__TABSET_TABBAR_OUTER_="flexlayout__tabset_tabbar_outer_",e.FLEXLAYOUT__TAB_BORDER="flexlayout__tab_border",e.FLEXLAYOUT__TAB_BORDER_="flexlayout__tab_border_",e.FLEXLAYOUT__TAB_BORDER_OVERLAY="flexlayout__tab_border_overlay",e.FLEXLAYOUT__TAB_BUTTON="flexlayout__tab_button",e.FLEXLAYOUT__TAB_BUTTON_STRETCH="flexlayout__tab_button_stretch",e.FLEXLAYOUT__TAB_BUTTON_CONTENT="flexlayout__tab_button_content",e.FLEXLAYOUT__TAB_BUTTON_LEADING="flexlayout__tab_button_leading",e.FLEXLAYOUT__TAB_BUTTON_OVERFLOW="flexlayout__tab_button_overflow",e.FLEXLAYOUT__TAB_BUTTON_PIN="flexlayout__tab_button_pin",e.FLEXLAYOUT__TAB_BUTTON_OVERFLOW_COUNT="flexlayout__tab_button_overflow_count",e.FLEXLAYOUT__TAB_BUTTON_TEXTBOX="flexlayout__tab_button_textbox",e.FLEXLAYOUT__TAB_BUTTON_TRAILING="flexlayout__tab_button_trailing",e.FLEXLAYOUT__TAB_BUTTON_STAMP="flexlayout__tab_button_stamp",e.FLEXLAYOUT__TAB_TOOLBAR="flexlayout__tab_toolbar",e.FLEXLAYOUT__TAB_TOOLBAR_BUTTON="flexlayout__tab_toolbar_button",e.FLEXLAYOUT__TAB_TOOLBAR_ICON="flexlayout__tab_toolbar_icon",e.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_="flexlayout__tab_toolbar_button-",e.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_FLOAT="flexlayout__tab_toolbar_button-float",e.FLEXLAYOUT__TAB_TOOLBAR_STICKY_BUTTONS_CONTAINER="flexlayout__tab_toolbar_sticky_buttons_container",e.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_CLOSE="flexlayout__tab_toolbar_button-close",e.FLEXLAYOUT__POPUP_MENU_CONTAINER="flexlayout__popup_menu_container",e.FLEXLAYOUT__POPUP_MENU_ITEM="flexlayout__popup_menu_item",e.FLEXLAYOUT__POPUP_MENU_ITEM__SELECTED="flexlayout__popup_menu_item--selected",e.FLEXLAYOUT__POPUP_MENU_ITEM__DISABLED="flexlayout__popup_menu_item--disabled",e.FLEXLAYOUT__POPUP_MENU_DIVIDER="flexlayout__popup_menu_divider",e.FLEXLAYOUT__POPUP_MENU="flexlayout__popup_menu",e.FLEXLAYOUT__MINI_SCROLLBAR="flexlayout__mini_scrollbar",e.FLEXLAYOUT__MINI_SCROLLBAR_CONTAINER="flexlayout__mini_scrollbar_container",e}({}),xs=class{constructor(e){O(this,"model");O(this,"attributes");O(this,"parent");O(this,"children");O(this,"rect");O(this,"path");O(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;eo.some(a=>a.toLowerCase()===i);return e.key.toLowerCase()===r.toLowerCase()&&e.ctrlKey===n("ctrl")&&e.shiftKey===n("shift")&&e.altKey===n("alt")&&e.metaKey===n("meta")}function ta(e){return e.ctrlKey||e.shiftKey||e.altKey||e.metaKey}function Lw(e){return{...Sw,...e}}function wr(e){return e?.replace(/\bctrl\b/i,"Control")}function Kb(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 oa(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 ol(e,t){const o=[...Sp("iframe",t),...Sp("webview",t)];for(const r of o)r.style.pointerEvents=e?"auto":"none"}function Sp(e,t){return[...t.getElementsByTagName(e)]}var rl=!1;function Bl(e,t,o,r,n){rl=!0,t.preventDefault();const i=d=>{d.preventDefault(),o(d.clientX,d.clientY)},a=()=>{e.removeEventListener("pointermove",i),e.removeEventListener("pointerup",c),e.removeEventListener("pointercancel",l)},l=d=>{d.preventDefault(),a(),rl=!1,n()},c=()=>{a(),rl=!1,r()};e.addEventListener("pointermove",i),e.addEventListener("pointerup",c),e.addEventListener("pointercancel",l)}function qb(e){let t;return e.getController().getModel().visitNodes(o=>{o instanceof Se&&o.getSubLayoutId()===e.getLayoutId()&&(t=o.getLayout())}),t}function Jb(e,t){const o=t.getType();if(o==="window")return e.isAllowedInWindow();if(o==="float")return!0;if(o==="tab"){const r=qb(t);return!(r&&r.getType()==="window"&&!r.isMainLayout()&&!e.isAllowedInWindow()||Zb(e))}return!1}function Zb(e){return e instanceof Se?e.getSubLayoutId()!==void 0:e.getChildren().some(t=>Zb(t))}function Lp(e,t){const o=e.getAttribute("style");return o===t.getAttribute("style")?!1:(o?t.setAttribute("style",o):t.removeAttribute("style"),!0)}function Cw(){const e=navigator.userAgent;return e.includes("Safari")&&!e.includes("Chrome")&&!e.includes("Chromium")}function Nw(e=window){const t=e.document;return{scrollTop:e.pageYOffset||t.documentElement.scrollTop||t.body.scrollTop||0,scrollLeft:e.pageXOffset||t.documentElement.scrollLeft||t.body.scrollLeft||0,fullHeight:Math.max(t.body.scrollHeight,t.documentElement.scrollHeight,t.body.offsetHeight,t.documentElement.offsetHeight,t.body.clientHeight,t.documentElement.clientHeight),fullWidth:Math.max(t.body.scrollWidth,t.documentElement.scrollWidth,t.body.offsetWidth,t.documentElement.offsetWidth,t.body.clientWidth,t.documentElement.clientWidth),viewportHeight:e.innerHeight||t.documentElement.clientHeight,viewportWidth:e.innerWidth||t.documentElement.clientWidth}}var Ie,He=(Ie=class extends xs{constructor(o,r){super(o);O(this,"layout");O(this,"minHeight");O(this,"minWidth");O(this,"maxHeight");O(this,"maxWidth");this.minHeight=1,this.minWidth=1,this.maxHeight=Uo,this.maxWidth=Uo,Ie.attributeDefinitions.fromJson(r,this.attributes),o.addNode(this)}static fromJson(o,r,n){const i=new Ie(r,o);if(o.children!=null){for(const a of o.children)if(a.type===Oe.TYPE){const l=Oe.fromJson(a,r,n);i.addChild(l)}else if(a.type===Ie.TYPE){const l=Ie.fromJson(a,r,n);i.addChild(l)}}return i}getWeight(){return this.attributes.weight}toJson(){const o={};Ie.attributeDefinitions.toJson(o,this.attributes),o.children=[];for(const r of this.children)o.children.push(r.toJson());return o}getLayout(){return this.layout?this.layout:super.getLayout()}setLayout(o){this.layout=o}setWeight(o){this.attributes.weight=o}getSplitterBounds(o){const r=this.getOrientation()===ye.HORZ,n=this.getChildren(),i=this.model.getSplitterSize(),a=n[0].getRect(),l=n[n.length-1].getRect();let c=r?[a.x,l.getRight()]:[a.y,l.getBottom()];const d=r?[a.x,l.getRight()]:[a.y,l.getBottom()];for(let f=0;f0&&(c[0]+=i,d[0]+=i)}for(let f=n.length-1;f>=o;f--){const u=n[f];c[1]-=(r?u.getMinWidth():u.getMinHeight())+i,d[1]-=(r?Math.max(u.getMinWidth(),u.getMaxWidth()):Math.max(u.getMinHeight(),u.getMaxHeight()))+i}return c=[Math.max(d[1],c[0]),Math.min(d[0],c[1])],c[0]>c[1]&&(c=[c[0],c[0]]),c}getSplitterInitials(o){const r=this.getOrientation()===ye.HORZ,n=this.getChildren(),i=this.model.getSplitterSize(),a=[];let l=0;for(let f=0;fu?(g=d[o]+p-u,d[o]=u):d[o]+=p;for(let x=o-1;x>=0;x--){const w=c[x],k=l?w.getMinWidth():w.getMinHeight();if(d[x]-p>k){d[x]-=p;break}else p-=d[x]-k,d[x]=k}for(let x=o+1;xu?(g=d[o-1]+p-u,d[o-1]=u):d[o-1]+=p;for(let x=o;xk){d[x]-=p;break}else p-=d[x]-k,d[x]=k}for(let x=o-1;x>=0;x--){const w=c[x],k=l?w.getMaxWidth():w.getMaxHeight();if(d[x]+gMath.max(.1,f)*100/i)}getMinWidth(){return this.minWidth}getMinHeight(){return this.minHeight}getMaxWidth(){return this.maxWidth}getMaxHeight(){return this.maxHeight}calcMinMaxSize(){this.minHeight=1,this.minWidth=1,this.maxHeight=Uo,this.maxWidth=Uo;let o=!0;for(const r of this.children){const n=r;n.calcMinMaxSize();const i=Math.max(n.getMinHeight(),n.getMaxHeight()),a=Math.max(n.getMinWidth(),n.getMaxWidth());this.getOrientation()===ye.VERT?(this.minHeight+=n.getMinHeight(),this.maxHeight+=i,o||(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,o||(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)),o=!1}this.maxWidth=Math.max(this.maxWidth,this.minWidth),this.maxHeight=Math.max(this.maxHeight,this.minHeight)}tidy(){let o=0;for(;od/2-u&&athis.rect.getRight()-f&&a>d/2-u&&ac/2-u&&lthis.rect.getBottom()-f&&l>c/2-u&&lf+u.getWeight(),0);c===0&&(c=100),l.setWeight(c/3);const d=!this.model.isRootOrientationVertical();if(i===ee.CENTER)n===-1?this.addChild(l,this.children.length):this.addChild(l,n);else if(d&&i===ee.LEFT||!d&&i===ee.TOP)this.addChild(l,0);else if(d&&i===ee.RIGHT||!d&&i===ee.BOTTOM)this.addChild(l);else if(d&&i===ee.TOP||!d&&i===ee.LEFT){const f=new Ie(this.model,{}),u=new Ie(this.model,{});u.setWeight(75),l.setWeight(25);for(const p of this.children)u.addChild(p);this.removeAll(),f.addChild(l),f.addChild(u),this.addChild(f)}else if(d&&i===ee.BOTTOM||!d&&i===ee.RIGHT){const f=new Ie(this.model,{}),u=new Ie(this.model,{});u.setWeight(75),l.setWeight(25);for(const p of this.children)u.addChild(p);this.removeAll(),f.addChild(u),f.addChild(l),this.addChild(f)}l instanceof Oe&&this.model.setActiveTabset(l,this.getLayoutId()),this.model.tidy()}isEnableDrop(){return!0}getAttributeDefinitions(){return Ie.attributeDefinitions}updateAttrs(o){Ie.attributeDefinitions.update(o,this.attributes)}static getAttributeDefinitions(){return it.ensureAttributePairing(),Ie.attributeDefinitions}static createAttributeDefinitions(){const o=new Qn;return o.add("type",Ie.TYPE,!0).setType(te.STRING).setFixed(),o.add("id",void 0).setType(te.STRING).setDescription("the unique id of the row, if left undefined a uuid will be assigned"),o.add("weight",100).setType(te.NUMBER).setDescription("relative weight for sizing of this row in parent row"),o}},O(Ie,"TYPE","row"),O(Ie,"attributeDefinitions",Ie.createAttributeDefinitions()),Ie),gt,Oe=(gt=class extends xs{constructor(o,r){super(o);O(this,"tabStripRect",he.empty());O(this,"contentRect",he.empty());O(this,"calculatedMinHeight");O(this,"calculatedMinWidth");O(this,"calculatedMaxHeight");O(this,"calculatedMaxWidth");this.calculatedMinHeight=0,this.calculatedMinWidth=0,this.calculatedMaxHeight=0,this.calculatedMaxWidth=0,gt.attributeDefinitions.fromJson(r,this.attributes),o.addNode(this)}static fromJson(o,r,n){const i=new gt(r,o);if(o.children!=null)for(const a of o.children){const l=Se.fromJson(a,r);i.addChild(l)}return i.children.length===0?i.setSelected(-1):i.getSelected()>=i.children.length&&i.setSelected(i.children.length-1),o.maximized&&o.maximized===!0&&n.setMaximizedTabSet(i),o.active&&o.active===!0&&n.setActiveTabSet(i),i}getName(){return this.getAttr("name")}isEnableActiveIcon(){return this.getAttr("enableActiveIcon")}getSelected(){const o=this.attributes.selected;return o!==void 0?o:-1}getSelectedNode(){const o=this.getSelected();if(o!==-1)return this.children[o]}getPinnedRunLength(){let o=0;for(const r of this.children)if(r.isPinned())o++;else break;return o}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 o=this.isEnableClose();return o&&(o=super.isCloseable()),o}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 o={};return gt.attributeDefinitions.toJson(o,this.attributes),o.children=this.children.map(r=>r.toJson()),this.isActive()&&(o.active=!0),this.isMaximized()&&(o.maximized=!0),o}calcMinMaxSize(){this.calculatedMinHeight=this.getAttrMinHeight(),this.calculatedMinWidth=this.getAttrMinWidth(),this.calculatedMaxHeight=this.getAttrMaxHeight(),this.calculatedMaxWidth=this.getAttrMaxWidth();for(const o of this.children){const r=o;this.calculatedMinWidth=Math.max(this.calculatedMinWidth,r.getMinWidth()),this.calculatedMinHeight=Math.max(this.calculatedMinHeight,r.getMinHeight()),this.calculatedMaxWidth=Math.min(this.calculatedMaxWidth,r.getMaxWidth()),this.calculatedMaxHeight=Math.min(this.calculatedMaxHeight,r.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(o){this.contentRect=o}getContentRect(){return this.contentRect}setTabStripRect(o){this.tabStripRect=o}getTabStripRect(){return this.tabStripRect}setWeight(o){this.attributes.weight=o}setSelected(o){this.attributes.selected=o}canDrop(o,r,n,i=!1){let a;const l=this.getLayout();if(o===this){const c=ee.CENTER,d=this.tabStripRect;a=new kt(this,d,c,-1,U.FLEXLAYOUT__OUTLINE_RECT)}else{if(this.getLayoutId()!==it.MAIN_LAYOUT_ID&&!Jb(o,l))return;if(this.contentRect.contains(r,n)){let c=ee.CENTER;if(this.model.getMaximizedTabset(this.getLayoutId())===void 0){const f=!i&&this.isEnableDrop(),u=this.isEnableDivide();if(!f&&!u)return;f&&u?c=ee.getLocation(this.contentRect,r,n):f?c=ee.CENTER:c=ee.getLocation(this.contentRect,r,n,!0)}const d=c.getDockRect(this.rect);a=new kt(this,d,c,-1,U.FLEXLAYOUT__OUTLINE_RECT)}else if(this.tabStripRect!=null&&this.tabStripRect.contains(r,n)){let c,d,f;if(this.children.length===0)c=this.tabStripRect.clone(),d=c.y+3,f=c.height-4,c.width=2;else{let u=this.children[0];c=u.getTabRect(),d=c.y,f=c.height;let p=this.tabStripRect.x;for(let g=0;g0){const c=this.getPinnedRunLength(),d=o instanceof Se&&o.isPinned()?Math.min(a.index,c):Math.max(a.index,c);if(d!==a.index){let f;if(d0&&n--,a===ee.CENTER){let d=n;d===-1&&(d=this.children.length);const f=this.getPinnedRunLength();if(o instanceof Se?d=o.isPinned()?Math.min(d,f):Math.max(d,f):d=Math.max(d,f),o instanceof Se)this.addChild(o,d),i||i!==!1&&this.isAutoSelectTab()?this.setSelected(d):nl(this,d);else if(o instanceof He){const u=d;o.forEachNode((p,g)=>{p instanceof Se&&(this.addChild(p,d),d++)},0),nl(this,u,d-u)}else{const u=d;for(let p=0;p0&&this.setSelected(0)}this.model.setActiveTabset(this,this.parent.getLayoutId())}else{let d=o;if(o instanceof Se){const p=this.model.getOnCreateTabSet();d=new gt(this.model,p?p(o):{}),d.addChild(o)}else if(o instanceof He){const p=this.getParent();if(o.getOrientation()===p.getOrientation()&&(r.getOrientation()===p.getOrientation()||r===ee.CENTER)){const g=new He(this.model,{});g.addChild(o),d=g}}else d=o;const f=this.parent,u=f.getChildren().indexOf(this);if(f.getOrientation()===a.orientation)d.setWeight(this.getWeight()/2),this.setWeight(this.getWeight()/2),f.addChild(d,u+a.indexPlus);else{const p=new He(this.model,{});if(p.setWeight(this.getWeight()),p.addChild(this),this.setWeight(50),o instanceof He&&o.getChildren().length>0&&o.getOrientation()!==f.getOrientation()){const g=o.getChildren(),x=g.reduce((k,b)=>k+b.getWeight(),0);let w=a.indexPlus;for(const k of g)k.setWeight(x===0?50/g.length:50*k.getWeight()/x),p.addChild(k,w++)}else d.setWeight(50),p.addChild(d,a.indexPlus);f.removeChild(this),f.addChild(p,u)}d instanceof gt&&this.model.setActiveTabset(d,this.getLayoutId())}this.model.tidy()}updateAttrs(o){gt.attributeDefinitions.update(o,this.attributes)}getAttributeDefinitions(){return gt.attributeDefinitions}static getAttributeDefinitions(){return it.ensureAttributePairing(),gt.attributeDefinitions}static createAttributeDefinitions(){const o=new Qn;return o.add("type",gt.TYPE,!0).setType(te.STRING).setFixed(),o.add("id",void 0).setType(te.STRING).setDescription("the unique id of the tab set, if left undefined a uuid will be assigned"),o.add("weight",100).setType(te.NUMBER).setDescription("relative weight for sizing of this tabset in parent row"),o.add("selected",0).setType(te.NUMBER).setDescription("index of selected/visible tab in tabset; -1 means no tab selected"),o.add("name",void 0).setType(te.STRING).setDescription("an accessible label for the tab strip (used as the tablist's aria-label; not displayed visually)"),o.add("config",void 0).setType("any").setDescription("a place to hold json config used in your own code"),o.addInherited("enableDeleteWhenEmpty","tabSetEnableDeleteWhenEmpty").setDescription("whether to delete this tabset when it has no tabs"),o.addInherited("enableDrop","tabSetEnableDrop").setDescription("whether tabs can be dropped into this tabset"),o.addInherited("enableDrag","tabSetEnableDrag").setDescription("whether the user can drag tabs out of this tabset"),o.addInherited("enableDivide","tabSetEnableDivide").setDescription("whether dropping on an edge of this tabset splits it to create a new tabset"),o.addInherited("enableMaximize","tabSetEnableMaximize").setDescription("whether the tabset can be maximized to fill the layout via the maximize button"),o.addInherited("enableClose","tabSetEnableClose").setDescription("whether this tabset can be closed"),o.addInherited("enableCloseButton","tabSetEnableCloseButton").setDescription("if the tabset can be closed then show a close button"),o.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"),o.addInherited("classNameTabStrip","tabSetClassNameTabStrip").setDescription("a class name to apply to the tab strip"),o.addInherited("enableTabStrip","tabSetEnableTabStrip").setDescription("when enabled the tabset shows a tab strip and can host multiple tabs; when disabled the strip is hidden"),o.addInherited("minWidth","tabSetMinWidth").setDescription("minimum width (in px) for this tabset"),o.addInherited("minHeight","tabSetMinHeight").setDescription("minimum height (in px) for this tabset"),o.addInherited("maxWidth","tabSetMaxWidth").setDescription("maximum width (in px) for this tabset"),o.addInherited("maxHeight","tabSetMaxHeight").setDescription("maximum height (in px) for this tabset"),o.addInherited("enableTabWrap","tabSetEnableTabWrap").setDescription("wrap tabs onto multiple lines"),o.addInherited("tabLocation","tabSetTabLocation").setDescription("the location of the tabs either top or bottom"),o.addInherited("autoSelectTab","tabSetAutoSelectTab").setDescription("whether to select new/moved tabs in tabset"),o.addInherited("enableActiveIcon","tabSetEnableActiveIcon").setDescription("whether the active icon (*) should be displayed when the tabset is active"),o.addInherited("enableTabScrollbar","tabSetEnableTabScrollbar").setDescription("whether to show a mini scrollbar for the tabs"),o}},O(gt,"TYPE","tabset"),O(gt,"attributeDefinitions",gt.createAttributeDefinitions()),gt);function nl(e,t,o=1){const r=e.getSelected();o>0&&r!==-1&&t<=r&&e.setSelected(r+o)}function zl(e,t){if(e!==void 0&&(e instanceof Oe||e instanceof qe)){const o=e.getSelected();o!==-1&&(t===o&&e.getChildren().length>0?t>=e.getChildren().length&&e.setSelected(e.getChildren().length-1):to||e.setSelected(-1))}}function pn(){return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,e=>(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16))}var yt,qe=(yt=class extends xs{constructor(o,r,n){super(n);O(this,"contentRect",he.empty());O(this,"tabHeaderRect",he.empty());O(this,"location");this.location=o,this.attributes.id=`border_${o.getName()}`,yt.attributeDefinitions.fromJson(r,this.attributes),n.addNode(this)}static fromJson(o,r){const n=ee.getByName(o.location),i=new yt(n,o,r);return o.children&&(i.children=o.children.map(a=>{const l=Se.fromJson(a,r);return l.setParent(i),l})),i.getSelected()>=i.children.length&&i.setSelected(i.children.length-1),i}getLocation(){return this.location}getClassName(){return this.getAttr("className")}isHorizontal(){return this.location.orientation===ye.HORZ}getSize(){const o=this.getAttr("size"),r=this.getSelected();if(r===-1)return o;{const n=this.children[r],i=this.isHorizontal()?n.getAttr("borderWidth"):n.getAttr("borderHeight");return i===-1?o:i}}getMinSize(){const o=this.getSelectedNode();let r=this.getAttr("minSize");if(o){const n=this.isHorizontal()?o.getMinWidth():o.getMinHeight();r=Math.max(r,n)}return r}getMaxSize(){const o=this.getSelectedNode();let r=this.getAttr("maxSize");if(o){const n=this.isHorizontal()?o.getMaxWidth():o.getMaxHeight();r=Math.min(r,n)}return r}getSelected(){return this.attributes.selected}isAutoHide(){return this.getAttr("enableAutoHide")}getBorderType(){return this.getAttr("borderType")}isOverlay(){return this.getAttr("borderType")==="overlay"}setBorderType(o){this.attributes.borderType=o}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 o={location:"bottom"};return yt.attributeDefinitions.toJson(o,this.attributes),o.location=this.location.getName(),o.children=this.children.map(r=>r.toJson()),o}isAutoSelectTabWhenOpen(){return this.getAttr("autoSelectTabWhenOpen")}isAutoSelectTabWhenClosed(){return this.getAttr("autoSelectTabWhenClosed")}isAutoSelectTab(o){return o==null&&(o=this.getSelected()!==-1),o?this.isAutoSelectTabWhenOpen():this.isAutoSelectTabWhenClosed()}isEnableTabScrollbar(){return this.getAttr("enableTabScrollbar")}setSelected(o){this.attributes.selected=o}setTabHeaderRect(o){this.tabHeaderRect=o}getRect(){return this.tabHeaderRect}getContentRect(){return this.contentRect}setContentRect(o){this.contentRect=o}isEnableDrop(){return this.getAttr("enableDrop")}setSize(o){const r=this.getSelected();if(r===-1)this.attributes.size=o;else{const n=this.children[r];(this.isHorizontal()?n.getAttr("borderWidth"):n.getAttr("borderHeight"))===-1?this.attributes.size=o:this.isHorizontal()?n.setBorderWidth(o):n.setBorderHeight(o)}}updateAttrs(o){yt.attributeDefinitions.update(o,this.attributes)}remove(o){const r=this.removeChild(o);this.getSelected()!==-1&&zl(this,r)}canDrop(o,r,n,i=!1){if(!(o instanceof Se))return;let a;const l=ee.CENTER;if(this.tabHeaderRect.contains(r,n)){if(this.location.orientation===ye.VERT)if(this.children.length>0){let c=this.children[0],d=c.getTabRect();const f=d.y,u=d.height;let p=this.tabHeaderRect.x;for(let g=0;g=p&&r0){let c=this.children[0],d=c.getTabRect();const f=d.x,u=d.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(o,c),i||i!==!1&&this.isAutoSelectTab()?this.setSelected(c):nl(this,c),this.model.tidy()}getSplitterBounds(o=!1){const r=[0,0],n=this.model.getRootRow(it.MAIN_LAYOUT_ID),i=n.getRect();if(i.width===0&&i.height===0)return r;const a=o?this.getMinSize():0,l=o?this.getMaxSize():99999,c=this.model.getSplitterSize();if(this.location===ee.TOP){r[0]=this.tabHeaderRect.getBottom()+a;const d=this.tabHeaderRect.getBottom()+l;r[1]=Math.max(r[0],i.getBottom()-n.getMinHeight()-c),r[1]=Math.min(r[1],d)}else if(this.location===ee.LEFT){r[0]=this.tabHeaderRect.getRight()+a;const d=this.tabHeaderRect.getRight()+l;r[1]=Math.max(r[0],i.getRight()-n.getMinWidth()-c),r[1]=Math.min(r[1],d)}else if(this.location===ee.BOTTOM){r[1]=this.tabHeaderRect.y-a-c;const d=this.tabHeaderRect.y-l-c;r[0]=Math.min(r[1],i.y+n.getMinHeight()),r[0]=Math.max(r[0],d)}else if(this.location===ee.RIGHT){r[1]=this.tabHeaderRect.x-a-c;const d=this.tabHeaderRect.x-l-c;r[0]=Math.min(r[1],i.x+n.getMinWidth()),r[0]=Math.max(r[0],d)}return r}calculateSplit(o,r){const n=this.getSplitterBounds();return this.location===ee.BOTTOM||this.location===ee.RIGHT?Math.max(0,n[1]-r):Math.max(0,r-n[0])}getAttributeDefinitions(){return yt.attributeDefinitions}static getAttributeDefinitions(){return it.ensureAttributePairing(),yt.attributeDefinitions}static createAttributeDefinitions(){const o=new Qn;return o.add("type",yt.TYPE,!0).setType(te.STRING).setFixed(),o.add("selected",-1).setType(te.NUMBER).setDescription("index of selected/visible tab in border; -1 means no tab selected"),o.add("borderType","split").setType(te.STRING).setValues(["split","overlay"]).setDescription(`the border display type: 'split' splits the main layout to make room when a tab is selected; 'overlay' shows +`)}},pi,te=(pi=class{constructor(e,t,o,r){A(this,"name");A(this,"alias");A(this,"modelName");A(this,"pairedAttr");A(this,"pairedType");A(this,"defaultValue");A(this,"alwaysWriteJson");A(this,"type");A(this,"required");A(this,"fixed");A(this,"description");A(this,"values");this.name=e,this.alias=void 0,this.modelName=t,this.defaultValue=o,this.alwaysWriteJson=r,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}},A(pi,"NUMBER","number"),A(pi,"STRING","string"),A(pi,"BOOLEAN","boolean"),pi),he=class Br{constructor(t,o,r,n){A(this,"x");A(this,"y");A(this,"width");A(this,"height");this.x=t,this.y=o,this.width=r,this.height=n}static empty(){return new Br(0,0,0,0)}static fromJson(t){return new Br(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:o,y:r,width:n,height:i}=t.getBoundingClientRect();return new Br(o,r,n,i)}static fromDomRect(t){return new Br(t.x,t.y,t.width,t.height)}relativeTo(t){return new Br(this.x-t.x,this.y-t.y,this.width,this.height)}clone(){return new Br(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 o=.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&&o<.75&&r>=.25&&r<.75)return Me.CENTER;const i=r>=o,a=r>=1-o;return i?a?Me.BOTTOM:Me.LEFT:a?Me.RIGHT:Me.TOP}getName(){return this.name}getOrientation(){return this.orientation}getDockRect(t){return this===Me.TOP?new he(t.x,t.y,t.width,t.height/2):this===Me.BOTTOM?new he(t.x,t.getBottom()-t.height/2,t.width,t.height/2):this===Me.LEFT?new he(t.x,t.y,t.width/2,t.height):this===Me.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+")"}},A(Me,"values",new Map),A(Me,"TOP",new Me("top",ye.VERT,0)),A(Me,"BOTTOM",new Me("bottom",ye.VERT,1)),A(Me,"LEFT",new Me("left",ye.HORZ,0)),A(Me,"RIGHT",new Me("right",ye.HORZ,1)),A(Me,"CENTER",new Me("center",ye.VERT,0)),Me),de,oe=(de=class{static group(t){return new Yb(t)}static addTab(t,o,r,n,i){return new Ve(de.ADD_TAB,{json:t,toNode:o,location:r.getName(),index:n,select:i})}static addNode(t,o,r,n,i){return this.addTab(t,o,r,n,i)}static moveNode(t,o,r,n,i){return new Ve(de.MOVE_NODE,{fromNode:t,toNode:o,location:r.getName(),index:n,select:i})}static deleteTab(t){return new Ve(de.DELETE_TAB,{node:t})}static deleteTabset(t){return new Ve(de.DELETE_TABSET,{node:t})}static renameTab(t,o){return new Ve(de.RENAME_TAB,{node:t,text:o})}static setTabPinned(t,o){return new Ve(de.SET_TAB_PINNED,{node:t,pinned:o})}static setBorderType(t,o){return new Ve(de.SET_BORDER_TYPE,{node:t,borderType:o})}static selectTab(t){return new Ve(de.SELECT_TAB,{tabNode:t})}static setActiveTabset(t,o){return new Ve(de.SET_ACTIVE_TABSET,{tabsetNode:t,layoutId:o})}static adjustWeights(t,o){return new Ve(de.ADJUST_WEIGHTS,{nodeId:t,weights:o})}static adjustBorderSplit(t,o){return new Ve(de.ADJUST_BORDER_SPLIT,{node:t,size:o})}static maximizeToggle(t,o){return new Ve(de.MAXIMIZE_TOGGLE,{node:t,layoutId:o})}static updateModelAttributes(t){return new Ve(de.UPDATE_MODEL_ATTRIBUTES,{json:t})}static updateNodeAttributes(t,o){return new Ve(de.UPDATE_NODE_ATTRIBUTES,{node:t,json:o})}static updateSubLayoutAttributes(t,o){return new Ve(de.UPDATE_SUBLAYOUT_ATTRIBUTES,{layoutId:t,json:o})}static popoutTab(t,o="window"){return new Ve(de.POPOUT_TAB,{node:t,type:o})}static popoutTabset(t,o="window"){return new Ve(de.POPOUT_TABSET,{node:t,type:o})}static closePopout(t){return new Ve(de.CLOSE_POPOUT,{layoutId:t})}static movePopoutToFront(t){return new Ve(de.MOVE_POPOUT_TO_FRONT,{layoutId:t})}static moveFloat(t,o){return new Ve(de.MOVE_FLOAT,{layoutId:t,rect:o})}static popoutFloat(t,o){return new Ve(de.POPOUT_FLOAT,{layoutId:t,rect:o})}static dockFloatToLayout(t,o,r,n){return new Ve(de.DOCK_FLOAT_TO_LAYOUT,{layoutId:t,toNode:o,location:r.getName(),index:n})}static createPopout(t,o,r){return this.createSubLayout(t,o,r)}static createSubLayout(t,o,r){return new Ve(de.CREATE_SUBLAYOUT,{layout:t,rect:o,type:r})}},A(de,"ADD_TAB","FlexLayout_AddTab"),A(de,"DELETE_TAB","FlexLayout_DeleteTab"),A(de,"RENAME_TAB","FlexLayout_RenameTab"),A(de,"SET_TAB_PINNED","FlexLayout_SetTabPinned"),A(de,"SET_BORDER_TYPE","FlexLayout_SetBorderType"),A(de,"SELECT_TAB","FlexLayout_SelectTab"),A(de,"MOVE_NODE","FlexLayout_MoveNode"),A(de,"DELETE_TABSET","FlexLayout_DeleteTabset"),A(de,"SET_ACTIVE_TABSET","FlexLayout_SetActiveTabset"),A(de,"ADJUST_WEIGHTS","FlexLayout_AdjustWeights"),A(de,"ADJUST_BORDER_SPLIT","FlexLayout_AdjustBorderSplit"),A(de,"MAXIMIZE_TOGGLE","FlexLayout_MaximizeToggle"),A(de,"UPDATE_MODEL_ATTRIBUTES","FlexLayout_UpdateModelAttributes"),A(de,"UPDATE_NODE_ATTRIBUTES","FlexLayout_UpdateNodeAttributes"),A(de,"UPDATE_SUBLAYOUT_ATTRIBUTES","FlexLayout_UpdateSubLayoutAttributes"),A(de,"POPOUT_TAB","FlexLayout_PopoutTab"),A(de,"POPOUT_TABSET","FlexLayout_PopoutTabset"),A(de,"CLOSE_POPOUT","FlexLayout_ClosePopout"),A(de,"MOVE_POPOUT_TO_FRONT","FlexLayout_MoveFloatToFront"),A(de,"MOVE_FLOAT","FlexLayout_MoveFloat"),A(de,"DOCK_FLOAT_TO_LAYOUT","FlexLayout_DockFloatToLayout"),A(de,"POPOUT_FLOAT","FlexLayout_PopoutFloat"),A(de,"CREATE_SUBLAYOUT","FlexLayout_CreateSubLayout"),A(de,"GROUP","FlexLayout_Group"),de),Ve=class{constructor(e,t){A(this,"type");A(this,"data");A(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}}},Yb=class extends Ve{constructor(t){super(oe.GROUP,t);A(this,"actions");this.actions=t}},kt=class{constructor(e,t,o,r,n){A(this,"node");A(this,"rect");A(this,"location");A(this,"index");A(this,"className");this.node=e,this.rect=t,this.location=o,this.index=r,this.className=n}},U=function(e){return e.FLEXLAYOUT__BORDER="flexlayout__border",e.FLEXLAYOUT__BORDER_="flexlayout__border_",e.FLEXLAYOUT__BORDER_TAB_CONTENTS="flexlayout__border_tab_contents",e.FLEXLAYOUT__BORDER_TAB_OVERLAY="flexlayout__border_tab_overlay",e.FLEXLAYOUT__BORDER_TAB_OVERLAY_="flexlayout__border_tab_overlay_",e.FLEXLAYOUT__BORDER_BUTTON="flexlayout__border_button",e.FLEXLAYOUT__BORDER_BUTTON_="flexlayout__border_button_",e.FLEXLAYOUT__BORDER_BUTTON_CONTENT="flexlayout__border_button_content",e.FLEXLAYOUT__BORDER_BUTTON_LEADING="flexlayout__border_button_leading",e.FLEXLAYOUT__BORDER_BUTTON_TRAILING="flexlayout__border_button_trailing",e.FLEXLAYOUT__BORDER_BUTTON__SELECTED="flexlayout__border_button--selected",e.FLEXLAYOUT__BORDER_BUTTON__UNSELECTED="flexlayout__border_button--unselected",e.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_OVERFLOW="flexlayout__border_toolbar_button_overflow",e.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_OVERFLOW_="flexlayout__border_toolbar_button_overflow_",e.FLEXLAYOUT__BORDER_INNER="flexlayout__border_inner",e.FLEXLAYOUT__BORDER_INNER_="flexlayout__border_inner_",e.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER="flexlayout__border_inner_tab_container",e.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER_="flexlayout__border_inner_tab_container_",e.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER_LEFT_DOWN="flexlayout__border_inner_tab_container_left_down",e.FLEXLAYOUT__BORDER_TAB_DIVIDER="flexlayout__border_tab_divider",e.FLEXLAYOUT__BORDER_LEADING="flexlayout__border_leading",e.FLEXLAYOUT__BORDER_SIZER="flexlayout__border_sizer",e.FLEXLAYOUT__BORDER_TOOLBAR="flexlayout__border_toolbar",e.FLEXLAYOUT__BORDER_TOOLBAR_="flexlayout__border_toolbar_",e.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON="flexlayout__border_toolbar_button",e.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_FLOAT="flexlayout__border_toolbar_button-float",e.FLEXLAYOUT__DRAG_RECT="flexlayout__drag_rect",e.FLEXLAYOUT__EDGE_RECT="flexlayout__edge_rect",e.FLEXLAYOUT__EDGE_RECT_TOP="flexlayout__edge_rect_top",e.FLEXLAYOUT__EDGE_RECT_LEFT="flexlayout__edge_rect_left",e.FLEXLAYOUT__EDGE_RECT_BOTTOM="flexlayout__edge_rect_bottom",e.FLEXLAYOUT__EDGE_RECT_RIGHT="flexlayout__edge_rect_right",e.FLEXLAYOUT__ERROR_BOUNDARY_CONTAINER="flexlayout__error_boundary_container",e.FLEXLAYOUT__ERROR_BOUNDARY_CONTENT="flexlayout__error_boundary_content",e.FLEXLAYOUT__FLOAT_WINDOW="flexlayout__float_window",e.FLEXLAYOUT__FLOAT_WINDOW_HEADER="flexlayout__float_window_header",e.FLEXLAYOUT__FLOAT_WINDOW_HEADER_TITLE="flexlayout__float_window_header_title",e.FLEXLAYOUT__FLOAT_WINDOW_CONTENT="flexlayout__float_window_content",e.FLEXLAYOUT__FLOAT_WINDOW_DRAG_HANDLE="flexlayout__float_window_drag_handle",e.FLEXLAYOUT__FLOAT_WINDOW_BUTTON="flexlayout__float_window_button",e.FLEXLAYOUT__FLOATING_WINDOW_CONTENT="flexlayout__floating_window_content",e.FLEXLAYOUT__LAYOUT="flexlayout__layout",e.FLEXLAYOUT__LAYOUT_METRICS="flexlayout__layout_metrics",e.FLEXLAYOUT__LAYOUT_MOVEABLES_HOME="flexlayout__layout_moveables_home",e.FLEXLAYOUT__LAYOUT_OVERLAY="flexlayout__layout_overlay",e.FLEXLAYOUT__LAYOUT_TAB_STAMPS="flexlayout__layout_tab_stamps",e.FLEXLAYOUT__LAYOUT_MAIN="flexlayout__layout_main",e.FLEXLAYOUT__LAYOUT_BORDER_CONTAINER="flexlayout__layout_border_container",e.FLEXLAYOUT__LAYOUT_BORDER_CONTAINER_INNER="flexlayout__layout_border_container_inner",e.FLEXLAYOUT__OUTLINE_RECT="flexlayout__outline_rect",e.FLEXLAYOUT__OUTLINE_RECT_EDGE="flexlayout__outline_rect_edge",e.FLEXLAYOUT__SPLITTER="flexlayout__splitter",e.FLEXLAYOUT__SPLITTER_="flexlayout__splitter_",e.FLEXLAYOUT__SPLITTER_BORDER="flexlayout__splitter_border",e.FLEXLAYOUT__SPLITTER_DRAG="flexlayout__splitter_drag",e.FLEXLAYOUT__SPLITTER_HANDLE="flexlayout__splitter_handle",e.FLEXLAYOUT__SPLITTER_HANDLE_HORZ="flexlayout__splitter_handle_horz",e.FLEXLAYOUT__SPLITTER_HANDLE_VERT="flexlayout__splitter_handle_vert",e.FLEXLAYOUT__ROW="flexlayout__row",e.FLEXLAYOUT__TAB="flexlayout__tab",e.FLEXLAYOUT__TAB_MOVEABLE="flexlayout__tab_moveable",e.FLEXLAYOUT__TAB_OVERLAY="flexlayout__tab_overlay",e.FLEXLAYOUT__TAB_OVERLAY_RAISED="flexlayout__tab_overlay_raised",e.FLEXLAYOUT__TAB_LAYOUT_CONTAINER="flexlayout__tab_layout_container",e.FLEXLAYOUT__TAB_LAYOUT_CONTAINER_USER="flexlayout__tab_layout_container_user",e.FLEXLAYOUT__TABSET="flexlayout__tabset",e.FLEXLAYOUT__TABSET_CONTAINER="flexlayout__tabset_container",e.FLEXLAYOUT__TABSET_MAXIMIZED="flexlayout__tabset-maximized",e.FLEXLAYOUT__TABSET_SELECTED="flexlayout__tabset-selected",e.FLEXLAYOUT__TABSET_TAB_SPACER="flexlayout__tabset_tab_spacer",e.FLEXLAYOUT__TABSET_TAB_DIVIDER="flexlayout__tabset_tab_divider",e.FLEXLAYOUT__TABSET_TAB_DIVIDER_SELECTED_BEFORE="flexlayout__tabset_tab_divider_selected_before",e.FLEXLAYOUT__TABSET_TAB_DIVIDER_SELECTED_AFTER="flexlayout__tabset_tab_divider_selected_after",e.FLEXLAYOUT__TABSET_TAB_DIVIDER_INNER="flexlayout__tabset_tab_divider_inner",e.FLEXLAYOUT__TABSET_CONTENT="flexlayout__tabset_content",e.FLEXLAYOUT__TABSET_TABBAR_INNER="flexlayout__tabset_tabbar_inner",e.FLEXLAYOUT__TABSET_TABBAR_INNER_="flexlayout__tabset_tabbar_inner_",e.FLEXLAYOUT__TABSET_LEADING="flexlayout__tabset_leading",e.FLEXLAYOUT__TABSET_TABBAR_INNER_TAB_CONTAINER="flexlayout__tabset_tabbar_inner_tab_container",e.FLEXLAYOUT__TABSET_TABBAR_INNER_TAB_CONTAINER_="flexlayout__tabset_tabbar_inner_tab_container_",e.FLEXLAYOUT__TABSET_TABBAR_OUTER="flexlayout__tabset_tabbar_outer",e.FLEXLAYOUT__TABSET_TABBAR_OUTER_="flexlayout__tabset_tabbar_outer_",e.FLEXLAYOUT__TAB_BORDER="flexlayout__tab_border",e.FLEXLAYOUT__TAB_BORDER_="flexlayout__tab_border_",e.FLEXLAYOUT__TAB_BORDER_OVERLAY="flexlayout__tab_border_overlay",e.FLEXLAYOUT__TAB_BUTTON="flexlayout__tab_button",e.FLEXLAYOUT__TAB_BUTTON_STRETCH="flexlayout__tab_button_stretch",e.FLEXLAYOUT__TAB_BUTTON_CONTENT="flexlayout__tab_button_content",e.FLEXLAYOUT__TAB_BUTTON_LEADING="flexlayout__tab_button_leading",e.FLEXLAYOUT__TAB_BUTTON_OVERFLOW="flexlayout__tab_button_overflow",e.FLEXLAYOUT__TAB_BUTTON_PIN="flexlayout__tab_button_pin",e.FLEXLAYOUT__TAB_BUTTON_OVERFLOW_COUNT="flexlayout__tab_button_overflow_count",e.FLEXLAYOUT__TAB_BUTTON_TEXTBOX="flexlayout__tab_button_textbox",e.FLEXLAYOUT__TAB_BUTTON_TRAILING="flexlayout__tab_button_trailing",e.FLEXLAYOUT__TAB_BUTTON_STAMP="flexlayout__tab_button_stamp",e.FLEXLAYOUT__TAB_TOOLBAR="flexlayout__tab_toolbar",e.FLEXLAYOUT__TAB_TOOLBAR_BUTTON="flexlayout__tab_toolbar_button",e.FLEXLAYOUT__TAB_TOOLBAR_ICON="flexlayout__tab_toolbar_icon",e.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_="flexlayout__tab_toolbar_button-",e.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_FLOAT="flexlayout__tab_toolbar_button-float",e.FLEXLAYOUT__TAB_TOOLBAR_STICKY_BUTTONS_CONTAINER="flexlayout__tab_toolbar_sticky_buttons_container",e.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_CLOSE="flexlayout__tab_toolbar_button-close",e.FLEXLAYOUT__POPUP_MENU_CONTAINER="flexlayout__popup_menu_container",e.FLEXLAYOUT__POPUP_MENU_ITEM="flexlayout__popup_menu_item",e.FLEXLAYOUT__POPUP_MENU_ITEM__SELECTED="flexlayout__popup_menu_item--selected",e.FLEXLAYOUT__POPUP_MENU_ITEM__DISABLED="flexlayout__popup_menu_item--disabled",e.FLEXLAYOUT__POPUP_MENU_DIVIDER="flexlayout__popup_menu_divider",e.FLEXLAYOUT__POPUP_MENU="flexlayout__popup_menu",e.FLEXLAYOUT__MINI_SCROLLBAR="flexlayout__mini_scrollbar",e.FLEXLAYOUT__MINI_SCROLLBAR_CONTAINER="flexlayout__mini_scrollbar_container",e}({}),ys=class{constructor(e){A(this,"model");A(this,"attributes");A(this,"parent");A(this,"children");A(this,"rect");A(this,"path");A(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;eo.some(a=>a.toLowerCase()===i);return e.key.toLowerCase()===r.toLowerCase()&&e.ctrlKey===n("ctrl")&&e.shiftKey===n("shift")&&e.altKey===n("alt")&&e.metaKey===n("meta")}function ta(e){return e.ctrlKey||e.shiftKey||e.altKey||e.metaKey}function Lw(e){return{...Sw,...e}}function kr(e){return e?.replace(/\bctrl\b/i,"Control")}function Kb(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 oa(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 rl(e,t){const o=[...Sp("iframe",t),...Sp("webview",t)];for(const r of o)r.style.pointerEvents=e?"auto":"none"}function Sp(e,t){return[...t.getElementsByTagName(e)]}var nl=!1;function zl(e,t,o,r,n){nl=!0,t.preventDefault();const i=d=>{d.preventDefault(),o(d.clientX,d.clientY)},a=()=>{e.removeEventListener("pointermove",i),e.removeEventListener("pointerup",c),e.removeEventListener("pointercancel",l)},l=d=>{d.preventDefault(),a(),nl=!1,n()},c=()=>{a(),nl=!1,r()};e.addEventListener("pointermove",i),e.addEventListener("pointerup",c),e.addEventListener("pointercancel",l)}function qb(e){let t;return e.getController().getModel().visitNodes(o=>{o instanceof Se&&o.getSubLayoutId()===e.getLayoutId()&&(t=o.getLayout())}),t}function Jb(e,t){const o=t.getType();if(o==="window")return e.isAllowedInWindow();if(o==="float")return!0;if(o==="tab"){const r=qb(t);return!(r&&r.getType()==="window"&&!r.isMainLayout()&&!e.isAllowedInWindow()||Zb(e))}return!1}function Zb(e){return e instanceof Se?e.getSubLayoutId()!==void 0:e.getChildren().some(t=>Zb(t))}function Lp(e,t){const o=e.getAttribute("style");return o===t.getAttribute("style")?!1:(o?t.setAttribute("style",o):t.removeAttribute("style"),!0)}function Cw(){const e=navigator.userAgent;return e.includes("Safari")&&!e.includes("Chrome")&&!e.includes("Chromium")}function Nw(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,He=(je=class extends ys{constructor(o,r){super(o);A(this,"layout");A(this,"minHeight");A(this,"minWidth");A(this,"maxHeight");A(this,"maxWidth");this.minHeight=1,this.minWidth=1,this.maxHeight=Wo,this.maxWidth=Wo,je.attributeDefinitions.fromJson(r,this.attributes),o.addNode(this)}static fromJson(o,r,n){const i=new je(r,o);if(o.children!=null){for(const a of o.children)if(a.type===Oe.TYPE){const l=Oe.fromJson(a,r,n);i.addChild(l)}else if(a.type===je.TYPE){const l=je.fromJson(a,r,n);i.addChild(l)}}return i}getWeight(){return this.attributes.weight}toJson(){const o={};je.attributeDefinitions.toJson(o,this.attributes),o.children=[];for(const r of this.children)o.children.push(r.toJson());return o}getLayout(){return this.layout?this.layout:super.getLayout()}setLayout(o){this.layout=o}setWeight(o){this.attributes.weight=o}getSplitterBounds(o){const r=this.getOrientation()===ye.HORZ,n=this.getChildren(),i=this.model.getSplitterSize(),a=n[0].getRect(),l=n[n.length-1].getRect();let c=r?[a.x,l.getRight()]:[a.y,l.getBottom()];const d=r?[a.x,l.getRight()]:[a.y,l.getBottom()];for(let f=0;f0&&(c[0]+=i,d[0]+=i)}for(let f=n.length-1;f>=o;f--){const u=n[f];c[1]-=(r?u.getMinWidth():u.getMinHeight())+i,d[1]-=(r?Math.max(u.getMinWidth(),u.getMaxWidth()):Math.max(u.getMinHeight(),u.getMaxHeight()))+i}return c=[Math.max(d[1],c[0]),Math.min(d[0],c[1])],c[0]>c[1]&&(c=[c[0],c[0]]),c}getSplitterInitials(o){const r=this.getOrientation()===ye.HORZ,n=this.getChildren(),i=this.model.getSplitterSize(),a=[];let l=0;for(let f=0;fu?(g=d[o]+p-u,d[o]=u):d[o]+=p;for(let x=o-1;x>=0;x--){const w=c[x],E=l?w.getMinWidth():w.getMinHeight();if(d[x]-p>E){d[x]-=p;break}else p-=d[x]-E,d[x]=E}for(let x=o+1;xu?(g=d[o-1]+p-u,d[o-1]=u):d[o-1]+=p;for(let x=o;xE){d[x]-=p;break}else p-=d[x]-E,d[x]=E}for(let x=o-1;x>=0;x--){const w=c[x],E=l?w.getMaxWidth():w.getMaxHeight();if(d[x]+gMath.max(.1,f)*100/i)}getMinWidth(){return this.minWidth}getMinHeight(){return this.minHeight}getMaxWidth(){return this.maxWidth}getMaxHeight(){return this.maxHeight}calcMinMaxSize(){this.minHeight=1,this.minWidth=1,this.maxHeight=Wo,this.maxWidth=Wo;let o=!0;for(const r of this.children){const n=r;n.calcMinMaxSize();const i=Math.max(n.getMinHeight(),n.getMaxHeight()),a=Math.max(n.getMinWidth(),n.getMaxWidth());this.getOrientation()===ye.VERT?(this.minHeight+=n.getMinHeight(),this.maxHeight+=i,o||(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,o||(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)),o=!1}this.maxWidth=Math.max(this.maxWidth,this.minWidth),this.maxHeight=Math.max(this.maxHeight,this.minHeight)}tidy(){let o=0;for(;od/2-u&&athis.rect.getRight()-f&&a>d/2-u&&ac/2-u&&lthis.rect.getBottom()-f&&l>c/2-u&&lf+u.getWeight(),0);c===0&&(c=100),l.setWeight(c/3);const d=!this.model.isRootOrientationVertical();if(i===ee.CENTER)n===-1?this.addChild(l,this.children.length):this.addChild(l,n);else if(d&&i===ee.LEFT||!d&&i===ee.TOP)this.addChild(l,0);else if(d&&i===ee.RIGHT||!d&&i===ee.BOTTOM)this.addChild(l);else if(d&&i===ee.TOP||!d&&i===ee.LEFT){const f=new je(this.model,{}),u=new je(this.model,{});u.setWeight(75),l.setWeight(25);for(const p of this.children)u.addChild(p);this.removeAll(),f.addChild(l),f.addChild(u),this.addChild(f)}else if(d&&i===ee.BOTTOM||!d&&i===ee.RIGHT){const f=new je(this.model,{}),u=new je(this.model,{});u.setWeight(75),l.setWeight(25);for(const p of this.children)u.addChild(p);this.removeAll(),f.addChild(u),f.addChild(l),this.addChild(f)}l instanceof Oe&&this.model.setActiveTabset(l,this.getLayoutId()),this.model.tidy()}isEnableDrop(){return!0}getAttributeDefinitions(){return je.attributeDefinitions}updateAttrs(o){je.attributeDefinitions.update(o,this.attributes)}static getAttributeDefinitions(){return it.ensureAttributePairing(),je.attributeDefinitions}static createAttributeDefinitions(){const o=new ei;return o.add("type",je.TYPE,!0).setType(te.STRING).setFixed(),o.add("id",void 0).setType(te.STRING).setDescription("the unique id of the row, if left undefined a uuid will be assigned"),o.add("weight",100).setType(te.NUMBER).setDescription("relative weight for sizing of this row in parent row"),o}},A(je,"TYPE","row"),A(je,"attributeDefinitions",je.createAttributeDefinitions()),je),gt,Oe=(gt=class extends ys{constructor(o,r){super(o);A(this,"tabStripRect",he.empty());A(this,"contentRect",he.empty());A(this,"calculatedMinHeight");A(this,"calculatedMinWidth");A(this,"calculatedMaxHeight");A(this,"calculatedMaxWidth");this.calculatedMinHeight=0,this.calculatedMinWidth=0,this.calculatedMaxHeight=0,this.calculatedMaxWidth=0,gt.attributeDefinitions.fromJson(r,this.attributes),o.addNode(this)}static fromJson(o,r,n){const i=new gt(r,o);if(o.children!=null)for(const a of o.children){const l=Se.fromJson(a,r);i.addChild(l)}return i.children.length===0?i.setSelected(-1):i.getSelected()>=i.children.length&&i.setSelected(i.children.length-1),o.maximized&&o.maximized===!0&&n.setMaximizedTabSet(i),o.active&&o.active===!0&&n.setActiveTabSet(i),i}getName(){return this.getAttr("name")}isEnableActiveIcon(){return this.getAttr("enableActiveIcon")}getSelected(){const o=this.attributes.selected;return o!==void 0?o:-1}getSelectedNode(){const o=this.getSelected();if(o!==-1)return this.children[o]}getPinnedRunLength(){let o=0;for(const r of this.children)if(r.isPinned())o++;else break;return o}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 o=this.isEnableClose();return o&&(o=super.isCloseable()),o}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 o={};return gt.attributeDefinitions.toJson(o,this.attributes),o.children=this.children.map(r=>r.toJson()),this.isActive()&&(o.active=!0),this.isMaximized()&&(o.maximized=!0),o}calcMinMaxSize(){this.calculatedMinHeight=this.getAttrMinHeight(),this.calculatedMinWidth=this.getAttrMinWidth(),this.calculatedMaxHeight=this.getAttrMaxHeight(),this.calculatedMaxWidth=this.getAttrMaxWidth();for(const o of this.children){const r=o;this.calculatedMinWidth=Math.max(this.calculatedMinWidth,r.getMinWidth()),this.calculatedMinHeight=Math.max(this.calculatedMinHeight,r.getMinHeight()),this.calculatedMaxWidth=Math.min(this.calculatedMaxWidth,r.getMaxWidth()),this.calculatedMaxHeight=Math.min(this.calculatedMaxHeight,r.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(o){this.contentRect=o}getContentRect(){return this.contentRect}setTabStripRect(o){this.tabStripRect=o}getTabStripRect(){return this.tabStripRect}setWeight(o){this.attributes.weight=o}setSelected(o){this.attributes.selected=o}canDrop(o,r,n,i=!1){let a;const l=this.getLayout();if(o===this){const c=ee.CENTER,d=this.tabStripRect;a=new kt(this,d,c,-1,U.FLEXLAYOUT__OUTLINE_RECT)}else{if(this.getLayoutId()!==it.MAIN_LAYOUT_ID&&!Jb(o,l))return;if(this.contentRect.contains(r,n)){let c=ee.CENTER;if(this.model.getMaximizedTabset(this.getLayoutId())===void 0){const f=!i&&this.isEnableDrop(),u=this.isEnableDivide();if(!f&&!u)return;f&&u?c=ee.getLocation(this.contentRect,r,n):f?c=ee.CENTER:c=ee.getLocation(this.contentRect,r,n,!0)}const d=c.getDockRect(this.rect);a=new kt(this,d,c,-1,U.FLEXLAYOUT__OUTLINE_RECT)}else if(this.tabStripRect!=null&&this.tabStripRect.contains(r,n)){let c,d,f;if(this.children.length===0)c=this.tabStripRect.clone(),d=c.y+3,f=c.height-4,c.width=2;else{let u=this.children[0];c=u.getTabRect(),d=c.y,f=c.height;let p=this.tabStripRect.x;for(let g=0;g0){const c=this.getPinnedRunLength(),d=o instanceof Se&&o.isPinned()?Math.min(a.index,c):Math.max(a.index,c);if(d!==a.index){let f;if(d0&&n--,a===ee.CENTER){let d=n;d===-1&&(d=this.children.length);const f=this.getPinnedRunLength();if(o instanceof Se?d=o.isPinned()?Math.min(d,f):Math.max(d,f):d=Math.max(d,f),o instanceof Se)this.addChild(o,d),i||i!==!1&&this.isAutoSelectTab()?this.setSelected(d):il(this,d);else if(o instanceof He){const u=d;o.forEachNode((p,g)=>{p instanceof Se&&(this.addChild(p,d),d++)},0),il(this,u,d-u)}else{const u=d;for(let p=0;p0&&this.setSelected(0)}this.model.setActiveTabset(this,this.parent.getLayoutId())}else{let d=o;if(o instanceof Se){const p=this.model.getOnCreateTabSet();d=new gt(this.model,p?p(o):{}),d.addChild(o)}else if(o instanceof He){const p=this.getParent();if(o.getOrientation()===p.getOrientation()&&(r.getOrientation()===p.getOrientation()||r===ee.CENTER)){const g=new He(this.model,{});g.addChild(o),d=g}}else d=o;const f=this.parent,u=f.getChildren().indexOf(this);if(f.getOrientation()===a.orientation)d.setWeight(this.getWeight()/2),this.setWeight(this.getWeight()/2),f.addChild(d,u+a.indexPlus);else{const p=new He(this.model,{});if(p.setWeight(this.getWeight()),p.addChild(this),this.setWeight(50),o instanceof He&&o.getChildren().length>0&&o.getOrientation()!==f.getOrientation()){const g=o.getChildren(),x=g.reduce((E,b)=>E+b.getWeight(),0);let w=a.indexPlus;for(const E of g)E.setWeight(x===0?50/g.length:50*E.getWeight()/x),p.addChild(E,w++)}else d.setWeight(50),p.addChild(d,a.indexPlus);f.removeChild(this),f.addChild(p,u)}d instanceof gt&&this.model.setActiveTabset(d,this.getLayoutId())}this.model.tidy()}updateAttrs(o){gt.attributeDefinitions.update(o,this.attributes)}getAttributeDefinitions(){return gt.attributeDefinitions}static getAttributeDefinitions(){return it.ensureAttributePairing(),gt.attributeDefinitions}static createAttributeDefinitions(){const o=new ei;return o.add("type",gt.TYPE,!0).setType(te.STRING).setFixed(),o.add("id",void 0).setType(te.STRING).setDescription("the unique id of the tab set, if left undefined a uuid will be assigned"),o.add("weight",100).setType(te.NUMBER).setDescription("relative weight for sizing of this tabset in parent row"),o.add("selected",0).setType(te.NUMBER).setDescription("index of selected/visible tab in tabset; -1 means no tab selected"),o.add("name",void 0).setType(te.STRING).setDescription("an accessible label for the tab strip (used as the tablist's aria-label; not displayed visually)"),o.add("config",void 0).setType("any").setDescription("a place to hold json config used in your own code"),o.addInherited("enableDeleteWhenEmpty","tabSetEnableDeleteWhenEmpty").setDescription("whether to delete this tabset when it has no tabs"),o.addInherited("enableDrop","tabSetEnableDrop").setDescription("whether tabs can be dropped into this tabset"),o.addInherited("enableDrag","tabSetEnableDrag").setDescription("whether the user can drag tabs out of this tabset"),o.addInherited("enableDivide","tabSetEnableDivide").setDescription("whether dropping on an edge of this tabset splits it to create a new tabset"),o.addInherited("enableMaximize","tabSetEnableMaximize").setDescription("whether the tabset can be maximized to fill the layout via the maximize button"),o.addInherited("enableClose","tabSetEnableClose").setDescription("whether this tabset can be closed"),o.addInherited("enableCloseButton","tabSetEnableCloseButton").setDescription("if the tabset can be closed then show a close button"),o.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"),o.addInherited("classNameTabStrip","tabSetClassNameTabStrip").setDescription("a class name to apply to the tab strip"),o.addInherited("enableTabStrip","tabSetEnableTabStrip").setDescription("when enabled the tabset shows a tab strip and can host multiple tabs; when disabled the strip is hidden"),o.addInherited("minWidth","tabSetMinWidth").setDescription("minimum width (in px) for this tabset"),o.addInherited("minHeight","tabSetMinHeight").setDescription("minimum height (in px) for this tabset"),o.addInherited("maxWidth","tabSetMaxWidth").setDescription("maximum width (in px) for this tabset"),o.addInherited("maxHeight","tabSetMaxHeight").setDescription("maximum height (in px) for this tabset"),o.addInherited("enableTabWrap","tabSetEnableTabWrap").setDescription("wrap tabs onto multiple lines"),o.addInherited("tabLocation","tabSetTabLocation").setDescription("the location of the tabs either top or bottom"),o.addInherited("autoSelectTab","tabSetAutoSelectTab").setDescription("whether to select new/moved tabs in tabset"),o.addInherited("enableActiveIcon","tabSetEnableActiveIcon").setDescription("whether the active icon (*) should be displayed when the tabset is active"),o.addInherited("enableTabScrollbar","tabSetEnableTabScrollbar").setDescription("whether to show a mini scrollbar for the tabs"),o}},A(gt,"TYPE","tabset"),A(gt,"attributeDefinitions",gt.createAttributeDefinitions()),gt);function il(e,t,o=1){const r=e.getSelected();o>0&&r!==-1&&t<=r&&e.setSelected(r+o)}function Fl(e,t){if(e!==void 0&&(e instanceof Oe||e instanceof qe)){const o=e.getSelected();o!==-1&&(t===o&&e.getChildren().length>0?t>=e.getChildren().length&&e.setSelected(e.getChildren().length-1):to||e.setSelected(-1))}}function hn(){return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,e=>(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16))}var yt,qe=(yt=class extends ys{constructor(o,r,n){super(n);A(this,"contentRect",he.empty());A(this,"tabHeaderRect",he.empty());A(this,"location");this.location=o,this.attributes.id=`border_${o.getName()}`,yt.attributeDefinitions.fromJson(r,this.attributes),n.addNode(this)}static fromJson(o,r){const n=ee.getByName(o.location),i=new yt(n,o,r);return o.children&&(i.children=o.children.map(a=>{const l=Se.fromJson(a,r);return l.setParent(i),l})),i.getSelected()>=i.children.length&&i.setSelected(i.children.length-1),i}getLocation(){return this.location}getClassName(){return this.getAttr("className")}isHorizontal(){return this.location.orientation===ye.HORZ}getSize(){const o=this.getAttr("size"),r=this.getSelected();if(r===-1)return o;{const n=this.children[r],i=this.isHorizontal()?n.getAttr("borderWidth"):n.getAttr("borderHeight");return i===-1?o:i}}getMinSize(){const o=this.getSelectedNode();let r=this.getAttr("minSize");if(o){const n=this.isHorizontal()?o.getMinWidth():o.getMinHeight();r=Math.max(r,n)}return r}getMaxSize(){const o=this.getSelectedNode();let r=this.getAttr("maxSize");if(o){const n=this.isHorizontal()?o.getMaxWidth():o.getMaxHeight();r=Math.min(r,n)}return r}getSelected(){return this.attributes.selected}isAutoHide(){return this.getAttr("enableAutoHide")}getBorderType(){return this.getAttr("borderType")}isOverlay(){return this.getAttr("borderType")==="overlay"}setBorderType(o){this.attributes.borderType=o}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 o={location:"bottom"};return yt.attributeDefinitions.toJson(o,this.attributes),o.location=this.location.getName(),o.children=this.children.map(r=>r.toJson()),o}isAutoSelectTabWhenOpen(){return this.getAttr("autoSelectTabWhenOpen")}isAutoSelectTabWhenClosed(){return this.getAttr("autoSelectTabWhenClosed")}isAutoSelectTab(o){return o==null&&(o=this.getSelected()!==-1),o?this.isAutoSelectTabWhenOpen():this.isAutoSelectTabWhenClosed()}isEnableTabScrollbar(){return this.getAttr("enableTabScrollbar")}setSelected(o){this.attributes.selected=o}setTabHeaderRect(o){this.tabHeaderRect=o}getRect(){return this.tabHeaderRect}getContentRect(){return this.contentRect}setContentRect(o){this.contentRect=o}isEnableDrop(){return this.getAttr("enableDrop")}setSize(o){const r=this.getSelected();if(r===-1)this.attributes.size=o;else{const n=this.children[r];(this.isHorizontal()?n.getAttr("borderWidth"):n.getAttr("borderHeight"))===-1?this.attributes.size=o:this.isHorizontal()?n.setBorderWidth(o):n.setBorderHeight(o)}}updateAttrs(o){yt.attributeDefinitions.update(o,this.attributes)}remove(o){const r=this.removeChild(o);this.getSelected()!==-1&&Fl(this,r)}canDrop(o,r,n,i=!1){if(!(o instanceof Se))return;let a;const l=ee.CENTER;if(this.tabHeaderRect.contains(r,n)){if(this.location.orientation===ye.VERT)if(this.children.length>0){let c=this.children[0],d=c.getTabRect();const f=d.y,u=d.height;let p=this.tabHeaderRect.x;for(let g=0;g=p&&r0){let c=this.children[0],d=c.getTabRect();const f=d.x,u=d.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(o,c),i||i!==!1&&this.isAutoSelectTab()?this.setSelected(c):il(this,c),this.model.tidy()}getSplitterBounds(o=!1){const r=[0,0],n=this.model.getRootRow(it.MAIN_LAYOUT_ID),i=n.getRect();if(i.width===0&&i.height===0)return r;const a=o?this.getMinSize():0,l=o?this.getMaxSize():99999,c=this.model.getSplitterSize();if(this.location===ee.TOP){r[0]=this.tabHeaderRect.getBottom()+a;const d=this.tabHeaderRect.getBottom()+l;r[1]=Math.max(r[0],i.getBottom()-n.getMinHeight()-c),r[1]=Math.min(r[1],d)}else if(this.location===ee.LEFT){r[0]=this.tabHeaderRect.getRight()+a;const d=this.tabHeaderRect.getRight()+l;r[1]=Math.max(r[0],i.getRight()-n.getMinWidth()-c),r[1]=Math.min(r[1],d)}else if(this.location===ee.BOTTOM){r[1]=this.tabHeaderRect.y-a-c;const d=this.tabHeaderRect.y-l-c;r[0]=Math.min(r[1],i.y+n.getMinHeight()),r[0]=Math.max(r[0],d)}else if(this.location===ee.RIGHT){r[1]=this.tabHeaderRect.x-a-c;const d=this.tabHeaderRect.x-l-c;r[0]=Math.min(r[1],i.x+n.getMinWidth()),r[0]=Math.max(r[0],d)}return r}calculateSplit(o,r){const n=this.getSplitterBounds();return this.location===ee.BOTTOM||this.location===ee.RIGHT?Math.max(0,n[1]-r):Math.max(0,r-n[0])}getAttributeDefinitions(){return yt.attributeDefinitions}static getAttributeDefinitions(){return it.ensureAttributePairing(),yt.attributeDefinitions}static createAttributeDefinitions(){const o=new ei;return o.add("type",yt.TYPE,!0).setType(te.STRING).setFixed(),o.add("selected",-1).setType(te.NUMBER).setDescription("index of selected/visible tab in border; -1 means no tab selected"),o.add("borderType","split").setType(te.STRING).setValues(["split","overlay"]).setDescription(`the border display type: 'split' splits the main layout to make room when a tab is selected; 'overlay' shows the selected tab's panel as an overlay on top of the main layout area, and the tab is deselected by a pointer-down in the main layout area (Visual Studio style auto hide). Set via Actions.setBorderType. Not related to enableAutoHide (which hides the border strip when it has zero tabs)`),o.add("show",!0).setType(te.BOOLEAN).setDescription("show/hide this border"),o.add("config",void 0).setType("any").setDescription("a place to hold json config used in your own code"),o.addInherited("enableDrop","borderEnableDrop").setDescription("whether tabs can be dropped into this border"),o.addInherited("className","borderClassName").setDescription("class applied to the border container"),o.addInherited("autoSelectTabWhenOpen","borderAutoSelectTabWhenOpen").setDescription("whether to select new/moved tabs in border when the border is already open"),o.addInherited("autoSelectTabWhenClosed","borderAutoSelectTabWhenClosed").setDescription("whether to select new/moved tabs in border when the border is currently closed"),o.addInherited("size","borderSize").setDescription("size of the tab area when selected"),o.addInherited("minSize","borderMinSize").setDescription("the minimum size of the tab area"),o.addInherited("maxSize","borderMaxSize").setDescription("the maximum size of the tab area"),o.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`),o.addInherited("enableTabScrollbar","borderEnableTabScrollbar").setDescription("whether to show a mini scrollbar for the tabs"),o}},O(yt,"TYPE","border"),O(yt,"attributeDefinitions",yt.createAttributeDefinitions()),yt),Cp=class Qb{constructor(t){O(this,"borders");O(this,"borderMap");this.borders=[],this.borderMap=new Map}static fromJson(t,o){const r=new Qb(o);r.borders=t.map(n=>qe.fromJson(n,o));for(const n of r.borders)r.borderMap.set(n.getLocation(),n);return r}toJson(){return this.borders.map(t=>t.toJson())}getBorders(){return this.borders}getBorderMap(){return this.borderMap}forEachNode(t){for(const o of this.borders){t(o,0);for(const r of o.getChildren())r.forEachNode(t,1)}}setPaths(){for(const t of this.borders){const o="/border/"+t.getLocation().getName();t.setPath(o);let r=0;for(const n of t.getChildren())n.setPath(o+"/t"+r),r++}}findDropTargetNode(t,o,r,n=!1){for(const i of this.borders)if(i.isShowing()){const a=i.canDrop(t,o,r,n);if(a!==void 0)return a}}},Yr=function(e){return e[e.Visible=1]="Visible",e[e.Always=2]="Always",e[e.Selected=3]="Selected",e}({}),Xt,dn=(Xt=class{constructor(t,o,r,n,i){O(this,"_layoutId");O(this,"_type");O(this,"_rect");O(this,"_path");O(this,"attributes");O(this,"_controller");O(this,"_rootRow");O(this,"_maximizedTabSet");O(this,"_activeTabSet");O(this,"_toExportRectFunction");this.attributes={},Xt.attributeDefinitions.fromJson(i??{},this.attributes),this._layoutId=t,this._type=r,this._rect=n,this._toExportRectFunction=(a,l)=>a,t===it.MAIN_LAYOUT_ID?this._path="":this._path="/sublayout"+o}getPath(){return this._path}visitNodes(t){this.getRootRow()?.forEachNode(t,0)}isMainLayout(){return this._layoutId===it.MAIN_LAYOUT_ID}getLayoutId(){return this._layoutId}getType(){return this._type}getName(){return this.getAttr("name")}getAttr(t){return this.attributes[t]}getAttributeDefinitions(){return Xt.attributeDefinitions}updateAttrs(t){Xt.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 Xt.attributeDefinitions}static createAttributeDefinitions(){const t=new Qn;return t.add("name",void 0).setType(te.STRING).setDescription("the name of the sub layout, e.g. as shown in the model explorer"),t}toJson(){this.getType()==="window"&&this.getWindow()&&this.getWindow().screenTop>-1e4&&this.setRect(new he(this.getWindow().screenLeft,this.getWindow().screenTop,this.getWindow().outerWidth,this.getWindow().outerHeight));const t={type:this.getType(),layout:this.getRootRow().toJson(),rect:this.getType()==="tab"?void 0:this.getRect().toJson()};return Xt.attributeDefinitions.toJson(t,this.attributes),t}static fromJson(t,o,r){const n=o.getLayouts().size,i=t.rect?he.fromJson(t.rect):new he(50+50*n,50+50*n,600,400);i.snap(1);const a=r===it.MAIN_LAYOUT_ID?0:o.getNextSubLayoutId(),l=new Xt(r,a,t.type||"window",i,t);return l.setRootRow(He.fromJson(t.layout,o,l)),l}},O(Xt,"attributeDefinitions",Xt.createAttributeDefinitions()),Xt),Uo=99999,be,it=(be=class{constructor(){O(this,"attributes");O(this,"layouts");O(this,"borders");O(this,"changeListeners");O(this,"idMap");O(this,"mainLayout");O(this,"adoptedFromModel");O(this,"splitterSize");O(this,"onAllowDrop");O(this,"onCreateTabSet");O(this,"nextSubLayoutId");this.attributes={},this.layouts=new Map,this.borders=new Cp(this),this.idMap=new Map,this.changeListeners=[],this.nextSubLayoutId=1,this.mainLayout=new dn(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",He.getAttributeDefinitions()),be.attributeDefinitions.pairAttributes("TabSetNode",Oe.getAttributeDefinitions()),be.attributeDefinitions.pairAttributes("TabNode",Se.getAttributeDefinitions()),be.attributeDefinitions.pairAttributes("BorderNode",qe.getAttributeDefinitions()))}doAction(t){for(const r of[...this.changeListeners])typeof r!="function"&&r.onBeforeAction?.(t);const o=this.applyAction(t);this.updateIdMap();for(const r of[...this.changeListeners])typeof r=="function"?r(t):r.onAfterAction?.(t);return o}applyAction(t){let o;switch(t.type){case oe.ADD_TAB:{const r=new Se(this,t.data.json,!0),n=this.idMap.get(t.data.toNode);(n instanceof Oe||n instanceof qe||n instanceof He)&&(n.drop(r,ee.getByName(t.data.location),t.data.index,t.data.select),o=r);break}case oe.MOVE_NODE:{const r=this.idMap.get(t.data.fromNode);if(r instanceof Se||r instanceof Oe||r instanceof He){r===this.getMaximizedTabset(r.getLayoutId())&&this.layouts.get(r.getLayoutId()).setMaximizedTabSet(void 0);const n=this.idMap.get(t.data.toNode);(n instanceof Oe||n instanceof qe||n instanceof He)&&n.drop(r,ee.getByName(t.data.location),t.data.index,t.data.select)}break}case oe.DELETE_TAB:{const r=this.idMap.get(t.data.node);r instanceof Se&&r.delete();break}case oe.DELETE_TABSET:{const r=this.idMap.get(t.data.node);if(r instanceof Oe){const n=[...r.getChildren()];for(let i=0;i{d instanceof Se&&d.getSubLayoutId()!==void 0&&(c=!0)},0),c||(this.layouts.delete(r.getLayoutId()),r.setRootRow(void 0),l.setLayout(void 0),n.drop(l,i,t.data.index))}}}break}case oe.GROUP:{const r=t;for(const n of r.actions)this.applyAction(n);break}}return o}getActiveTabset(t=be.MAIN_LAYOUT_ID){const o=this.layouts.get(t);if(o&&o.getActiveTabSet()&&this.getNodeById(o.getActiveTabSet().getId()))return o.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[o,r]of this.layouts)r.getRootRow().forEachNode(t,0)}visitLayoutNodes(t,o){this.layouts.has(t)&&(t===be.MAIN_LAYOUT_ID&&this.borders.forEachNode(o),this.layouts.get(t).visitNodes(o))}getNodeById(t){return this.idMap.get(t)}getFirstTabSet(t=this.layouts.get(be.MAIN_LAYOUT_ID).getRootRow()){const o=t.getChildren()[0];if(o instanceof Oe)return o;if(o instanceof He)return this.getFirstTabSet(o)}static fromJson(t,o){be.ensureAttributePairing();const r=new be;be.attributeDefinitions.fromJson(t.global??{},r.attributes),t.borders&&(r.borders=Cp.fromJson(t.borders,r));const n=t.subLayouts||t.popouts;if(n)for(const i in n){const a=n[i],l=dn.fromJson(a,r,i);r.layouts.set(i,l)}return r.mainLayout.setRootRow(He.fromJson(t.layout,r,r.mainLayout)),r.tidy(),o&&(r.adoptedFromModel=o,o.adoptedFromModel=void 0,r.visitNodes(i=>{if(i instanceof Se){const a=o.getNodeById(i.getId());a instanceof Se&&i.adoptViewState(a)}})),r}getAdoptedFromModel(){return this.adoptedFromModel}toJson(){const t={};be.attributeDefinitions.toJson(t,this.attributes),this.visitNodes(r=>{r.fireEvent("save",{})});const o={};for(const[r,n]of this.layouts)r!==be.MAIN_LAYOUT_ID&&(o[r]=n.toJson());return{global:t,borders:this.borders.toJson(),layout:this.mainLayout.getRootRow().toJson(),subLayouts:o}}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 o=this.changeListeners.findIndex(r=>r===t);o!==-1&&this.changeListeners.splice(o,1)}toString(){return JSON.stringify(this.toJson())}getMainLayout(){return this.mainLayout}getLayouts(){return this.layouts}sortLayouts(){const t={window:1,tab:2,float:3},o=Array.from(this.getLayouts().values()).sort((r,n)=>t[r.getType()]-t[n.getType()]);this.layouts.clear(),o.forEach(r=>this.layouts.set(r.getLayoutId(),r))}setActiveTabset(t,o){const r=this.layouts.get(o);r&&(t?r.setActiveTabSet(t):r.setActiveTabSet(void 0))}setMaximizedTabset(t,o){const r=this.layouts.get(o);r&&(t?r.setMaximizedTabSet(t):r.setMaximizedTabSet(void 0))}updateIdMap(){this.idMap.clear(),this.visitNodes(t=>{this.idMap.set(t.getId(),t)})}addNode(t){const o=t.getId();if(this.idMap.has(o))throw new Error(`Error: each node must have a unique id, duplicate id:${t.getId()}`);this.idMap.set(o,t)}findDropTargetNode(t,o,r,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(r,n)){const c=l.canDrop(o,r,n,i);if(c!==void 0)return c}}let a=this.layouts.get(t).getRootRow().findDropTargetNode(t,o,r,n,i);return a===void 0&&t===be.MAIN_LAYOUT_ID&&(a=this.borders.findDropTargetNode(o,r,n,i)),a}tidy(){for(const[t,o]of this.layouts)o.getRootRow().tidy()}updateAttrs(t){be.attributeDefinitions.update(t,this.attributes)}nextUniqueId(){return"#"+pn()}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(He.getAttributeDefinitions().toTypescriptInterface("Row",be.attributeDefinitions)),t.push(Oe.getAttributeDefinitions().toTypescriptInterface("TabSet",be.attributeDefinitions)),t.push(Se.getAttributeDefinitions().toTypescriptInterface("Tab",be.attributeDefinitions)),t.push(qe.getAttributeDefinitions().toTypescriptInterface("Border",be.attributeDefinitions)),t.push(dn.getAttributeDefinitions().toTypescriptInterface("SubLayout",void 0)),t.join(` -`)}static createAttributeDefinitions(){const t=new Qn;return t.add("enableEdgeDock",!0).setType(te.BOOLEAN).setDescription("enable docking to the edges of the layout"),t.add("enableEdgeDockIndicators",!0).setType(te.BOOLEAN).setDescription("show the edge indicators when dragging"),t.add("rootOrientationVertical",!1).setType(te.BOOLEAN).setDescription("the top level 'row' will layout horizontally by default, set this option true to make it layout vertically"),t.add("enableRotateBorderIcons",!0).setType(te.BOOLEAN).setDescription("boolean indicating if tab icons should rotate with the text in the left and right borders"),t.add("tabEnableClose",!0).setType(te.BOOLEAN),t.add("tabCloseType",1).setType("ICloseType").setValues([{value:Yr.Visible,label:"Visible"},{value:Yr.Always,label:"Always"},{value:Yr.Selected,label:"Selected"}]),t.add("tabEnablePopout",!1).setType(te.BOOLEAN).setAlias("tabEnableFloat"),t.add("tabEnablePopoutIcon",!0).setType(te.BOOLEAN),t.add("tabEnablePopoutFloatIcon",!1).setType(te.BOOLEAN),t.add("tabEnablePopoutOverlay",!1).setType(te.BOOLEAN),t.add("tabEnableDrag",!0).setType(te.BOOLEAN),t.add("tabEnableRename",!0).setType(te.BOOLEAN),t.add("tabEnablePin",!0).setType(te.BOOLEAN),t.add("tabContentClassName",void 0).setType(te.STRING),t.add("tabClassName",void 0).setType(te.STRING),t.add("tabIcon",void 0).setType(te.STRING),t.add("tabEnableRenderOnDemand",!0).setType(te.BOOLEAN),t.add("tabBorderWidth",-1).setType(te.NUMBER),t.add("tabBorderHeight",-1).setType(te.NUMBER),t.add("tabEnableScrollbars",!0).setType(te.BOOLEAN),t.add("tabSetEnableDeleteWhenEmpty",!0).setType(te.BOOLEAN),t.add("tabSetEnableDrop",!0).setType(te.BOOLEAN),t.add("tabSetEnableDrag",!0).setType(te.BOOLEAN),t.add("tabSetEnableDivide",!0).setType(te.BOOLEAN),t.add("tabSetEnableMaximize",!0).setType(te.BOOLEAN),t.add("tabSetEnableClose",!0).setType(te.BOOLEAN),t.add("tabSetEnableCloseButton",!1).setType(te.BOOLEAN),t.add("tabSetEnableSingleTabStretch",!1).setType(te.BOOLEAN),t.add("tabSetAutoSelectTab",!0).setType(te.BOOLEAN),t.add("tabSetEnableActiveIcon",!1).setType(te.BOOLEAN),t.add("tabSetClassNameTabStrip",void 0).setType(te.STRING),t.add("tabSetEnableTabStrip",!0).setType(te.BOOLEAN),t.add("tabSetEnableTabWrap",!1).setType(te.BOOLEAN),t.add("tabSetTabLocation","top").setType("ITabLocation").setValues(["top","bottom"]),t.add("tabMinWidth",1).setType(te.NUMBER),t.add("tabMinHeight",1).setType(te.NUMBER),t.add("tabSetMinWidth",1).setType(te.NUMBER),t.add("tabSetMinHeight",1).setType(te.NUMBER),t.add("tabMaxWidth",Uo).setType(te.NUMBER),t.add("tabMaxHeight",Uo).setType(te.NUMBER),t.add("tabSetMaxWidth",Uo).setType(te.NUMBER),t.add("tabSetMaxHeight",Uo).setType(te.NUMBER),t.add("tabSetEnableTabScrollbar",!1).setType(te.BOOLEAN),t.add("borderSize",200).setType(te.NUMBER),t.add("borderMinSize",1).setType(te.NUMBER),t.add("borderMaxSize",Uo).setType(te.NUMBER),t.add("borderEnableDrop",!0).setType(te.BOOLEAN),t.add("borderAutoSelectTabWhenOpen",!0).setType(te.BOOLEAN),t.add("borderAutoSelectTabWhenClosed",!1).setType(te.BOOLEAN),t.add("borderClassName",void 0).setType(te.STRING),t.add("borderEnableAutoHide",!1).setType(te.BOOLEAN),t.add("borderEnableTabScrollbar",!1).setType(te.BOOLEAN),t.add("borderLeftTabDirection","up").setType("IBorderTabDirection").setValues(["up","down"]).setDescription("the direction the left border tabs read: 'up' (default, text reads bottom to top) or 'down' (text reads top to bottom like the right border)"),t}},O(be,"MAIN_LAYOUT_ID","__main_layout_id__"),O(be,"attributeDefinitions",be.createAttributeDefinitions()),O(be,"attributePairingDone",!1),be),_t,Se=(_t=class extends xs{constructor(o,r,n=!0){super(o);O(this,"tabRect",he.empty());O(this,"renderedName");O(this,"extra");O(this,"visible");O(this,"rendered");O(this,"moveableElement");O(this,"tabStamp");O(this,"scrollTop");O(this,"scrollLeft");this.extra={},this.moveableElement=null,this.tabStamp=null,this.rendered=!1,this.visible=!1,_t.attributeDefinitions.fromJson(r,this.attributes),n===!0&&o.addNode(this)}static fromJson(o,r,n=!0){return new _t(r,o,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 o=this.getLayout();if(o)return o.getWindowId()}getConfig(){return this.attributes.config}getExtraData(){return this.extra}isPoppedOut(){return this.getLayoutId()!==it.MAIN_LAYOUT_ID}isSelected(){return this.getParent().getSelectedNode()===this}isPinned(){return this.getAttr("pinned")}isCloseable(){if(this.isPinned())return!1;let o=this.isEnableClose();if(o&&this.getSubLayoutId()){const r=this.model.getLayouts().get(this.getSubLayoutId());r&&(o=r.getRootRow().isCloseable())}return o}isAllowedInWindow(){let o=this.isEnablePopout();if(o&&this.getSubLayoutId()){const r=this.model.getLayouts().get(this.getSubLayoutId());r&&(o=r.getRootRow().isAllowedInWindow())}return o}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 o={};return _t.attributeDefinitions.toJson(o,this.attributes),o}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(o){o.equalsWhenRounded(this.rect)||this.fireEvent("resize",{rect:o}),this.rect=o}setVisible(o){o!==this.visible&&(this.visible=o,this.fireEvent("visibility",{visible:o}))}setScrollTop(o){this.scrollTop=o}setScrollLeft(o){this.scrollLeft=o}isRendered(){return this.rendered}setRendered(o){this.rendered=o}getTabRect(){return this.tabRect}setTabRect(o){this.tabRect=o}getTabStamp(){return this.tabStamp}setTabStamp(o){this.tabStamp=o}getMoveableElement(){return this.moveableElement===null&&(this.moveableElement=document.createElement("div"),this.moveableElement.className=U.FLEXLAYOUT__TAB_MOVEABLE),this.moveableElement}setMoveableElement(o){this.moveableElement=o}setRenderedName(o){this.renderedName=o}getNameForOverflowMenu(){const o=this.getAttr("altName");return o!==void 0?o:this.renderedName}setName(o){this.attributes.name=o}setPinned(o){this.attributes.pinned=o}delete(){this.parent.remove(this),this.deleteSubLayout(),this.fireEvent("close",{})}adoptViewState(o){this.moveableElement=o.moveableElement,o.moveableElement=null,this.tabStamp=o.tabStamp,this.scrollTop=o.scrollTop,this.scrollLeft=o.scrollLeft,this.rendered=o.rendered,this.visible=o.visible,this.rect=o.rect,this.tabRect=o.tabRect,this.extra=o.extra}deleteSubLayout(){const o=this.getSubLayoutId();if(o){const r=this.model.getLayouts().get(o);this.model.getLayouts().delete(o),r&&r.getRootRow()?.forEachNode(n=>{n instanceof _t&&(n.deleteSubLayout(),n.fireEvent("close",{}))},0)}}updateAttrs(o){_t.attributeDefinitions.update(o,this.attributes)}getAttributeDefinitions(){return _t.attributeDefinitions}setBorderWidth(o){this.attributes.borderWidth=o}setBorderHeight(o){this.attributes.borderHeight=o}static getAttributeDefinitions(){return it.ensureAttributePairing(),_t.attributeDefinitions}static createAttributeDefinitions(){const o=new Qn;return o.add("type",_t.TYPE,!0).setType(te.STRING).setFixed(),o.add("id",void 0).setType(te.STRING).setDescription("the unique id of the tab, if left undefined a uuid will be assigned"),o.add("name","[Unnamed Tab]").setType(te.STRING).setDescription("name of tab to be displayed in the tab button"),o.add("component",void 0).setType(te.STRING).setDescription("string identifying which component to render in this tab (used in the layout factory function)"),o.add("subLayoutId",void 0).setType(te.STRING).setDescription(`the Id of the sub layout to render in this tab, defined in the subLayouts section of the model json (if + style auto hide), see the borderType attribute`),o.addInherited("enableTabScrollbar","borderEnableTabScrollbar").setDescription("whether to show a mini scrollbar for the tabs"),o}},A(yt,"TYPE","border"),A(yt,"attributeDefinitions",yt.createAttributeDefinitions()),yt),Cp=class Qb{constructor(t){A(this,"borders");A(this,"borderMap");this.borders=[],this.borderMap=new Map}static fromJson(t,o){const r=new Qb(o);r.borders=t.map(n=>qe.fromJson(n,o));for(const n of r.borders)r.borderMap.set(n.getLocation(),n);return r}toJson(){return this.borders.map(t=>t.toJson())}getBorders(){return this.borders}getBorderMap(){return this.borderMap}forEachNode(t){for(const o of this.borders){t(o,0);for(const r of o.getChildren())r.forEachNode(t,1)}}setPaths(){for(const t of this.borders){const o="/border/"+t.getLocation().getName();t.setPath(o);let r=0;for(const n of t.getChildren())n.setPath(o+"/t"+r),r++}}findDropTargetNode(t,o,r,n=!1){for(const i of this.borders)if(i.isShowing()){const a=i.canDrop(t,o,r,n);if(a!==void 0)return a}}},Xr=function(e){return e[e.Visible=1]="Visible",e[e.Always=2]="Always",e[e.Selected=3]="Selected",e}({}),Xt,un=(Xt=class{constructor(t,o,r,n,i){A(this,"_layoutId");A(this,"_type");A(this,"_rect");A(this,"_path");A(this,"attributes");A(this,"_controller");A(this,"_rootRow");A(this,"_maximizedTabSet");A(this,"_activeTabSet");A(this,"_toExportRectFunction");this.attributes={},Xt.attributeDefinitions.fromJson(i??{},this.attributes),this._layoutId=t,this._type=r,this._rect=n,this._toExportRectFunction=(a,l)=>a,t===it.MAIN_LAYOUT_ID?this._path="":this._path="/sublayout"+o}getPath(){return this._path}visitNodes(t){this.getRootRow()?.forEachNode(t,0)}isMainLayout(){return this._layoutId===it.MAIN_LAYOUT_ID}getLayoutId(){return this._layoutId}getType(){return this._type}getName(){return this.getAttr("name")}getAttr(t){return this.attributes[t]}getAttributeDefinitions(){return Xt.attributeDefinitions}updateAttrs(t){Xt.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 Xt.attributeDefinitions}static createAttributeDefinitions(){const t=new ei;return t.add("name",void 0).setType(te.STRING).setDescription("the name of the sub layout, e.g. as shown in the model explorer"),t}toJson(){this.getType()==="window"&&this.getWindow()&&this.getWindow().screenTop>-1e4&&this.setRect(new he(this.getWindow().screenLeft,this.getWindow().screenTop,this.getWindow().outerWidth,this.getWindow().outerHeight));const t={type:this.getType(),layout:this.getRootRow().toJson(),rect:this.getType()==="tab"?void 0:this.getRect().toJson()};return Xt.attributeDefinitions.toJson(t,this.attributes),t}static fromJson(t,o,r){const n=o.getLayouts().size,i=t.rect?he.fromJson(t.rect):new he(50+50*n,50+50*n,600,400);i.snap(1);const a=r===it.MAIN_LAYOUT_ID?0:o.getNextSubLayoutId(),l=new Xt(r,a,t.type||"window",i,t);return l.setRootRow(He.fromJson(t.layout,o,l)),l}},A(Xt,"attributeDefinitions",Xt.createAttributeDefinitions()),Xt),Wo=99999,be,it=(be=class{constructor(){A(this,"attributes");A(this,"layouts");A(this,"borders");A(this,"changeListeners");A(this,"idMap");A(this,"mainLayout");A(this,"adoptedFromModel");A(this,"splitterSize");A(this,"onAllowDrop");A(this,"onCreateTabSet");A(this,"nextSubLayoutId");this.attributes={},this.layouts=new Map,this.borders=new Cp(this),this.idMap=new Map,this.changeListeners=[],this.nextSubLayoutId=1,this.mainLayout=new un(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",He.getAttributeDefinitions()),be.attributeDefinitions.pairAttributes("TabSetNode",Oe.getAttributeDefinitions()),be.attributeDefinitions.pairAttributes("TabNode",Se.getAttributeDefinitions()),be.attributeDefinitions.pairAttributes("BorderNode",qe.getAttributeDefinitions()))}doAction(t){for(const r of[...this.changeListeners])typeof r!="function"&&r.onBeforeAction?.(t);const o=this.applyAction(t);this.updateIdMap();for(const r of[...this.changeListeners])typeof r=="function"?r(t):r.onAfterAction?.(t);return o}applyAction(t){let o;switch(t.type){case oe.ADD_TAB:{const r=new Se(this,t.data.json,!0),n=this.idMap.get(t.data.toNode);(n instanceof Oe||n instanceof qe||n instanceof He)&&(n.drop(r,ee.getByName(t.data.location),t.data.index,t.data.select),o=r);break}case oe.MOVE_NODE:{const r=this.idMap.get(t.data.fromNode);if(r instanceof Se||r instanceof Oe||r instanceof He){r===this.getMaximizedTabset(r.getLayoutId())&&this.layouts.get(r.getLayoutId()).setMaximizedTabSet(void 0);const n=this.idMap.get(t.data.toNode);(n instanceof Oe||n instanceof qe||n instanceof He)&&n.drop(r,ee.getByName(t.data.location),t.data.index,t.data.select)}break}case oe.DELETE_TAB:{const r=this.idMap.get(t.data.node);r instanceof Se&&r.delete();break}case oe.DELETE_TABSET:{const r=this.idMap.get(t.data.node);if(r instanceof Oe){const n=[...r.getChildren()];for(let i=0;i{d instanceof Se&&d.getSubLayoutId()!==void 0&&(c=!0)},0),c||(this.layouts.delete(r.getLayoutId()),r.setRootRow(void 0),l.setLayout(void 0),n.drop(l,i,t.data.index))}}}break}case oe.GROUP:{const r=t;for(const n of r.actions)this.applyAction(n);break}}return o}getActiveTabset(t=be.MAIN_LAYOUT_ID){const o=this.layouts.get(t);if(o&&o.getActiveTabSet()&&this.getNodeById(o.getActiveTabSet().getId()))return o.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[o,r]of this.layouts)r.getRootRow().forEachNode(t,0)}visitLayoutNodes(t,o){this.layouts.has(t)&&(t===be.MAIN_LAYOUT_ID&&this.borders.forEachNode(o),this.layouts.get(t).visitNodes(o))}getNodeById(t){return this.idMap.get(t)}getFirstTabSet(t=this.layouts.get(be.MAIN_LAYOUT_ID).getRootRow()){const o=t.getChildren()[0];if(o instanceof Oe)return o;if(o instanceof He)return this.getFirstTabSet(o)}static fromJson(t,o){be.ensureAttributePairing();const r=new be;be.attributeDefinitions.fromJson(t.global??{},r.attributes),t.borders&&(r.borders=Cp.fromJson(t.borders,r));const n=t.subLayouts||t.popouts;if(n)for(const i in n){const a=n[i],l=un.fromJson(a,r,i);r.layouts.set(i,l)}return r.mainLayout.setRootRow(He.fromJson(t.layout,r,r.mainLayout)),r.tidy(),o&&(r.adoptedFromModel=o,o.adoptedFromModel=void 0,r.visitNodes(i=>{if(i instanceof Se){const a=o.getNodeById(i.getId());a instanceof Se&&i.adoptViewState(a)}})),r}getAdoptedFromModel(){return this.adoptedFromModel}toJson(){const t={};be.attributeDefinitions.toJson(t,this.attributes),this.visitNodes(r=>{r.fireEvent("save",{})});const o={};for(const[r,n]of this.layouts)r!==be.MAIN_LAYOUT_ID&&(o[r]=n.toJson());return{global:t,borders:this.borders.toJson(),layout:this.mainLayout.getRootRow().toJson(),subLayouts:o}}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 o=this.changeListeners.findIndex(r=>r===t);o!==-1&&this.changeListeners.splice(o,1)}toString(){return JSON.stringify(this.toJson())}getMainLayout(){return this.mainLayout}getLayouts(){return this.layouts}sortLayouts(){const t={window:1,tab:2,float:3},o=Array.from(this.getLayouts().values()).sort((r,n)=>t[r.getType()]-t[n.getType()]);this.layouts.clear(),o.forEach(r=>this.layouts.set(r.getLayoutId(),r))}setActiveTabset(t,o){const r=this.layouts.get(o);r&&(t?r.setActiveTabSet(t):r.setActiveTabSet(void 0))}setMaximizedTabset(t,o){const r=this.layouts.get(o);r&&(t?r.setMaximizedTabSet(t):r.setMaximizedTabSet(void 0))}updateIdMap(){this.idMap.clear(),this.visitNodes(t=>{this.idMap.set(t.getId(),t)})}addNode(t){const o=t.getId();if(this.idMap.has(o))throw new Error(`Error: each node must have a unique id, duplicate id:${t.getId()}`);this.idMap.set(o,t)}findDropTargetNode(t,o,r,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(r,n)){const c=l.canDrop(o,r,n,i);if(c!==void 0)return c}}let a=this.layouts.get(t).getRootRow().findDropTargetNode(t,o,r,n,i);return a===void 0&&t===be.MAIN_LAYOUT_ID&&(a=this.borders.findDropTargetNode(o,r,n,i)),a}tidy(){for(const[t,o]of this.layouts)o.getRootRow().tidy()}updateAttrs(t){be.attributeDefinitions.update(t,this.attributes)}nextUniqueId(){return"#"+hn()}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(He.getAttributeDefinitions().toTypescriptInterface("Row",be.attributeDefinitions)),t.push(Oe.getAttributeDefinitions().toTypescriptInterface("TabSet",be.attributeDefinitions)),t.push(Se.getAttributeDefinitions().toTypescriptInterface("Tab",be.attributeDefinitions)),t.push(qe.getAttributeDefinitions().toTypescriptInterface("Border",be.attributeDefinitions)),t.push(un.getAttributeDefinitions().toTypescriptInterface("SubLayout",void 0)),t.join(` +`)}static createAttributeDefinitions(){const t=new ei;return t.add("enableEdgeDock",!0).setType(te.BOOLEAN).setDescription("enable docking to the edges of the layout"),t.add("enableEdgeDockIndicators",!0).setType(te.BOOLEAN).setDescription("show the edge indicators when dragging"),t.add("rootOrientationVertical",!1).setType(te.BOOLEAN).setDescription("the top level 'row' will layout horizontally by default, set this option true to make it layout vertically"),t.add("enableRotateBorderIcons",!0).setType(te.BOOLEAN).setDescription("boolean indicating if tab icons should rotate with the text in the left and right borders"),t.add("tabEnableClose",!0).setType(te.BOOLEAN),t.add("tabCloseType",1).setType("ICloseType").setValues([{value:Xr.Visible,label:"Visible"},{value:Xr.Always,label:"Always"},{value:Xr.Selected,label:"Selected"}]),t.add("tabEnablePopout",!1).setType(te.BOOLEAN).setAlias("tabEnableFloat"),t.add("tabEnablePopoutIcon",!0).setType(te.BOOLEAN),t.add("tabEnablePopoutFloatIcon",!1).setType(te.BOOLEAN),t.add("tabEnablePopoutOverlay",!1).setType(te.BOOLEAN),t.add("tabEnableDrag",!0).setType(te.BOOLEAN),t.add("tabEnableRename",!0).setType(te.BOOLEAN),t.add("tabEnablePin",!0).setType(te.BOOLEAN),t.add("tabContentClassName",void 0).setType(te.STRING),t.add("tabClassName",void 0).setType(te.STRING),t.add("tabIcon",void 0).setType(te.STRING),t.add("tabEnableRenderOnDemand",!0).setType(te.BOOLEAN),t.add("tabBorderWidth",-1).setType(te.NUMBER),t.add("tabBorderHeight",-1).setType(te.NUMBER),t.add("tabEnableScrollbars",!0).setType(te.BOOLEAN),t.add("tabSetEnableDeleteWhenEmpty",!0).setType(te.BOOLEAN),t.add("tabSetEnableDrop",!0).setType(te.BOOLEAN),t.add("tabSetEnableDrag",!0).setType(te.BOOLEAN),t.add("tabSetEnableDivide",!0).setType(te.BOOLEAN),t.add("tabSetEnableMaximize",!0).setType(te.BOOLEAN),t.add("tabSetEnableClose",!0).setType(te.BOOLEAN),t.add("tabSetEnableCloseButton",!1).setType(te.BOOLEAN),t.add("tabSetEnableSingleTabStretch",!1).setType(te.BOOLEAN),t.add("tabSetAutoSelectTab",!0).setType(te.BOOLEAN),t.add("tabSetEnableActiveIcon",!1).setType(te.BOOLEAN),t.add("tabSetClassNameTabStrip",void 0).setType(te.STRING),t.add("tabSetEnableTabStrip",!0).setType(te.BOOLEAN),t.add("tabSetEnableTabWrap",!1).setType(te.BOOLEAN),t.add("tabSetTabLocation","top").setType("ITabLocation").setValues(["top","bottom"]),t.add("tabMinWidth",1).setType(te.NUMBER),t.add("tabMinHeight",1).setType(te.NUMBER),t.add("tabSetMinWidth",1).setType(te.NUMBER),t.add("tabSetMinHeight",1).setType(te.NUMBER),t.add("tabMaxWidth",Wo).setType(te.NUMBER),t.add("tabMaxHeight",Wo).setType(te.NUMBER),t.add("tabSetMaxWidth",Wo).setType(te.NUMBER),t.add("tabSetMaxHeight",Wo).setType(te.NUMBER),t.add("tabSetEnableTabScrollbar",!1).setType(te.BOOLEAN),t.add("borderSize",200).setType(te.NUMBER),t.add("borderMinSize",1).setType(te.NUMBER),t.add("borderMaxSize",Wo).setType(te.NUMBER),t.add("borderEnableDrop",!0).setType(te.BOOLEAN),t.add("borderAutoSelectTabWhenOpen",!0).setType(te.BOOLEAN),t.add("borderAutoSelectTabWhenClosed",!1).setType(te.BOOLEAN),t.add("borderClassName",void 0).setType(te.STRING),t.add("borderEnableAutoHide",!1).setType(te.BOOLEAN),t.add("borderEnableTabScrollbar",!1).setType(te.BOOLEAN),t.add("borderLeftTabDirection","up").setType("IBorderTabDirection").setValues(["up","down"]).setDescription("the direction the left border tabs read: 'up' (default, text reads bottom to top) or 'down' (text reads top to bottom like the right border)"),t}},A(be,"MAIN_LAYOUT_ID","__main_layout_id__"),A(be,"attributeDefinitions",be.createAttributeDefinitions()),A(be,"attributePairingDone",!1),be),_t,Se=(_t=class extends ys{constructor(o,r,n=!0){super(o);A(this,"tabRect",he.empty());A(this,"renderedName");A(this,"extra");A(this,"visible");A(this,"rendered");A(this,"moveableElement");A(this,"tabStamp");A(this,"scrollTop");A(this,"scrollLeft");this.extra={},this.moveableElement=null,this.tabStamp=null,this.rendered=!1,this.visible=!1,_t.attributeDefinitions.fromJson(r,this.attributes),n===!0&&o.addNode(this)}static fromJson(o,r,n=!0){return new _t(r,o,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 o=this.getLayout();if(o)return o.getWindowId()}getConfig(){return this.attributes.config}getExtraData(){return this.extra}isPoppedOut(){return this.getLayoutId()!==it.MAIN_LAYOUT_ID}isSelected(){return this.getParent().getSelectedNode()===this}isPinned(){return this.getAttr("pinned")}isCloseable(){if(this.isPinned())return!1;let o=this.isEnableClose();if(o&&this.getSubLayoutId()){const r=this.model.getLayouts().get(this.getSubLayoutId());r&&(o=r.getRootRow().isCloseable())}return o}isAllowedInWindow(){let o=this.isEnablePopout();if(o&&this.getSubLayoutId()){const r=this.model.getLayouts().get(this.getSubLayoutId());r&&(o=r.getRootRow().isAllowedInWindow())}return o}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 o={};return _t.attributeDefinitions.toJson(o,this.attributes),o}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(o){o.equalsWhenRounded(this.rect)||this.fireEvent("resize",{rect:o}),this.rect=o}setVisible(o){o!==this.visible&&(this.visible=o,this.fireEvent("visibility",{visible:o}))}setScrollTop(o){this.scrollTop=o}setScrollLeft(o){this.scrollLeft=o}isRendered(){return this.rendered}setRendered(o){this.rendered=o}getTabRect(){return this.tabRect}setTabRect(o){this.tabRect=o}getTabStamp(){return this.tabStamp}setTabStamp(o){this.tabStamp=o}getMoveableElement(){return this.moveableElement===null&&(this.moveableElement=document.createElement("div"),this.moveableElement.className=U.FLEXLAYOUT__TAB_MOVEABLE),this.moveableElement}setMoveableElement(o){this.moveableElement=o}setRenderedName(o){this.renderedName=o}getNameForOverflowMenu(){const o=this.getAttr("altName");return o!==void 0?o:this.renderedName}setName(o){this.attributes.name=o}setPinned(o){this.attributes.pinned=o}delete(){this.parent.remove(this),this.deleteSubLayout(),this.fireEvent("close",{})}adoptViewState(o){this.moveableElement=o.moveableElement,o.moveableElement=null,this.tabStamp=o.tabStamp,this.scrollTop=o.scrollTop,this.scrollLeft=o.scrollLeft,this.rendered=o.rendered,this.visible=o.visible,this.rect=o.rect,this.tabRect=o.tabRect,this.extra=o.extra}deleteSubLayout(){const o=this.getSubLayoutId();if(o){const r=this.model.getLayouts().get(o);this.model.getLayouts().delete(o),r&&r.getRootRow()?.forEachNode(n=>{n instanceof _t&&(n.deleteSubLayout(),n.fireEvent("close",{}))},0)}}updateAttrs(o){_t.attributeDefinitions.update(o,this.attributes)}getAttributeDefinitions(){return _t.attributeDefinitions}setBorderWidth(o){this.attributes.borderWidth=o}setBorderHeight(o){this.attributes.borderHeight=o}static getAttributeDefinitions(){return it.ensureAttributePairing(),_t.attributeDefinitions}static createAttributeDefinitions(){const o=new ei;return o.add("type",_t.TYPE,!0).setType(te.STRING).setFixed(),o.add("id",void 0).setType(te.STRING).setDescription("the unique id of the tab, if left undefined a uuid will be assigned"),o.add("name","[Unnamed Tab]").setType(te.STRING).setDescription("name of tab to be displayed in the tab button"),o.add("component",void 0).setType(te.STRING).setDescription("string identifying which component to render in this tab (used in the layout factory function)"),o.add("subLayoutId",void 0).setType(te.STRING).setDescription(`the Id of the sub layout to render in this tab, defined in the subLayouts section of the model json (if component is also defined then use the component in the factory to render the sublayout)`),o.add("altName",void 0).setType(te.STRING).setDescription("the name used in the overflow menu when the tab has no name (e.g. an icon-only tab)"),o.add("helpText",void 0).setType(te.STRING).setDescription("help text for the tab to be displayed upon tab hover"),o.add("config",void 0).setType("any").setDescription("a place to hold json config for the hosted component"),o.add("tabsetClassName",void 0).setType(te.STRING).setDescription("class applied to parent tabset when this is the only tab and it is stretched to fill the tabset"),o.add("enableWindowReMount",!1).setType(te.BOOLEAN).setDescription("if enabled the tab will re-mount when popped out/in"),o.add("pinned",!1).setType(te.BOOLEAN).setDescription(`whether the tab is pinned; pinned tabs are grouped at the start of the tabstrip, cannot be closed via the ui, and cannot be dragged out of their tabset (they can be reordered within the pinned group). Set via Actions.setTabPinned. Only applies to tabs in tabsets (not borders); pinned tabs should be listed first in the json`),o.addInherited("enableClose","tabEnableClose").setDescription("whether the tab can be closed by the user via its close button"),o.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)"),o.addInherited("enableDrag","tabEnableDrag").setDescription("whether the user can drag the tab to a new location"),o.addInherited("enableRename","tabEnableRename").setDescription("whether the user can rename the tab by double clicking"),o.addInherited("enablePin","tabEnablePin").setDescription("whether the user can pin/unpin the tab via the context menu"),o.addInherited("className","tabClassName").setDescription("class applied to tab button"),o.addInherited("contentClassName","tabContentClassName").setDescription("class applied to tab content"),o.addInherited("icon","tabIcon").setDescription("the tab icon"),o.addInherited("enableRenderOnDemand","tabEnableRenderOnDemand").setDescription("whether to avoid rendering component until tab is visible"),o.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"),o.addInherited("enablePopoutIcon","tabEnablePopoutIcon").setDescription("whether to show the popout icon in the tabset header if this tab enables popouts"),o.addInherited("enablePopoutFloatIcon","tabEnablePopoutFloatIcon").setDescription("whether to show the popout float icon in the tabset header if this tab enables floating popouts"),o.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`),o.addInherited("borderWidth","tabBorderWidth").setDescription("the width of this tab when shown in a border; -1 uses the border's default size"),o.addInherited("borderHeight","tabBorderHeight").setDescription("the height of this tab when shown in a border; -1 uses the border's default size"),o.addInherited("minWidth","tabMinWidth").setDescription("the minimum width (in px) of this tab"),o.addInherited("minHeight","tabMinHeight").setDescription("the minimum height (in px) of this tab"),o.addInherited("maxWidth","tabMaxWidth").setDescription("the maximum width (in px) of this tab"),o.addInherited("maxHeight","tabMaxHeight").setDescription("the maximum height (in px) of this tab"),o.addInherited("enableScrollbars","tabEnableScrollbars").setDescription("whether the tab will be hosted in a scrollable container"),o}},O(_t,"TYPE","tab"),O(_t,"attributeDefinitions",_t.createAttributeDefinitions()),_t),tr={width:"1em",height:"1em",display:"flex",alignItems:"center"},il=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:tr,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"})]});il.displayName="CloseIcon";var ev=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:tr,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"})]});ev.displayName="PinIcon";var tv=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:tr,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"})]});tv.displayName="MaximizeIcon";var ov=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:tr,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"})]});ov.displayName="OverflowIcon";var rv=()=>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"})});rv.displayName="EdgeIcon";var gd=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:tr,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"})]});gd.displayName="PopoutIcon";var nv=()=>s.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 -960 960 960",style:tr,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"})});nv.displayName="PopoutFloatIcon";var iv=()=>s.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",style:tr,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"})});iv.displayName="GripIcon";var av=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:tr,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"})]});av.displayName="RestoreIcon";var lv=()=>s.jsx("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:tr,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"})});lv.displayName="AsterickIcon";var sv=e=>{const{controller:t,show:o}=e;return s.jsx("div",{"aria-hidden":"true",className:t.getClassName(U.FLEXLAYOUT__LAYOUT_OVERLAY),style:{display:o?"flex":"none"}})};sv.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}({}),ra=e=>{const{controller:t,tabNode:o}=e,r=t.getClassName,n=r(U.FLEXLAYOUT__TAB_BUTTON_STAMP),i=ju(t,o),a=i.content?s.jsx("div",{className:r(U.FLEXLAYOUT__TAB_BUTTON_CONTENT),children:i.content}):o.getNameForOverflowMenu(),l=i.leading?s.jsx("div",{className:r(U.FLEXLAYOUT__TAB_BUTTON_LEADING),children:i.leading}):null;return s.jsxs("div",{className:n,title:o.getHelpText(),children:[l,a]})};ra.displayName="TabButtonStamp";var Ow=500;function ys(e){return typeof e.getBoundingClientRect=="function"}function cv(e){return e.container?e.container:ys(e.anchor)?e.anchor.ownerDocument.body:document.body}function Aw(e){if(ys(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 Dw(e,t){const o=t,{left:r,right:n,top:i,bottom:a}=e,l={};return(r+n)/2{const{anchor:t,items:o,onSelect:r,onClose:n,renderItem:i,title:a}=e,l=e.classNameMapper??(b=>b),c=cv(e),d=m.useRef(null),f=m.useRef(null),u=m.useRef({buffer:"",timer:void 0});m.useEffect(()=>()=>{u.current.timer&&clearTimeout(u.current.timer)},[]);const p=m.useCallback(b=>{b.disabled||((b.onSelect??r)?.(b),n())},[r,n]);m.useEffect(()=>{(f.current?.querySelector('[role="menuitem"]:not([aria-disabled="true"])')??f.current)?.focus();const b=e.returnFocusTo??(ys(t)?t:void 0);return()=>{b?.focus?.()}},[]),m.useEffect(()=>{const b=c.ownerDocument,h=v=>{d.current?.contains(v.target)||n()};return b.addEventListener("pointerdown",h),()=>b.removeEventListener("pointerdown",h)},[c,n]);const g=b=>{const h=Array.from(f.current?.querySelectorAll('[role="menuitem"]:not([aria-disabled="true"])')??[]),v=b.target.closest?.('[role="menuitem"]'),_=v?h.indexOf(v):-1;if(b.key==="Escape"||b.key==="Tab")n(),b.preventDefault();else if(b.key==="ArrowDown"||b.key==="ArrowUp")h.length>0&&h[(_+(b.key==="ArrowDown"?1:-1)+h.length)%h.length]?.focus(),b.preventDefault();else if(b.key==="Home"||b.key==="End")(b.key==="Home"?h[0]:h[h.length-1])?.focus(),b.preventDefault();else if(b.key.length===1&&b.key!==" "&&!b.ctrlKey&&!b.metaKey&&!b.altKey){const y=u.current;y.timer&&clearTimeout(y.timer),y.buffer+=b.key.toLowerCase(),y.timer=setTimeout(()=>{y.buffer=""},Ow);const E=[...y.buffer].every(I=>I===y.buffer[0]),R=E?y.buffer[0]:y.buffer,P=E?_+1:Math.max(_,0);for(let I=0;I({select:()=>p(b),close:n}),w=b=>s.jsx("div",{className:l(U.FLEXLAYOUT__POPUP_MENU_ITEM)+(b.disabled?" "+l(U.FLEXLAYOUT__POPUP_MENU_ITEM__DISABLED):""),role:"menuitem",tabIndex:-1,"aria-disabled":b.disabled||void 0,onClick:h=>{p(b),h.stopPropagation()},children:b.content??s.jsxs(s.Fragment,{children:[b.icon,b.label]})},b.key),k=s.jsx("div",{ref:d,className:l(U.FLEXLAYOUT__POPUP_MENU_CONTAINER),style:Dw(Aw(t),c.getBoundingClientRect()),children:s.jsx("div",{ref:f,className:l(U.FLEXLAYOUT__POPUP_MENU),role:"menu","aria-label":a,tabIndex:0,onKeyDown:g,"data-layout-path":"/popup-menu",children:o.map((b,h)=>b.type==="divider"?s.jsx("div",{className:l(U.FLEXLAYOUT__POPUP_MENU_DIVIDER),role:"separator"},b.key):i?i(b,h,x(b)):w(b))})});return Io.createPortal(k,c)};function Mw(e){const t=cv(e),o=ys(e.anchor)?e.anchor.getBoundingClientRect():e.anchor,r=t.ownerDocument.createElement("div");t.appendChild(r);const n=qn(r);let i=!1;const a=()=>{i||(i=!0,n.unmount(),r.remove(),e.onClose())};return n.render(s.jsx(dv,{...e,anchor:o,container:t,onClose:a})),a}function uv(e,t,o,r,n,i){const a=n.getClassName,l=o.map(d=>({key:d.node.getId()}));n.showOverlayOnAllWindows(!0);const c=(d,f,u)=>{const p=o[f];let g=a(U.FLEXLAYOUT__POPUP_MENU_ITEM);return t.getSelected()===p.index&&(g+=" "+a(U.FLEXLAYOUT__POPUP_MENU_ITEM__SELECTED)),s.jsx("div",{className:g,role:"menuitem","aria-label":p.node.getNameForOverflowMenu(),tabIndex:-1,"data-layout-path":"/popup-menu/tb"+f,onClick:x=>{u.select(),x.stopPropagation()},draggable:!0,onDragStart:x=>{x.stopPropagation(),n.getDragDropManager().setDragNode(x.nativeEvent,p.node),setTimeout(()=>u.close(),0)},onDragEnd:()=>n.getDragDropManager().onDragEnded(),title:p.node.getHelpText(),children:s.jsx(ra,{tabNode:p.node,controller:n})},d.key)};return Mw({anchor:e,container:n.getRootDiv()??void 0,classNameMapper:a,returnFocusTo:e,title:n.i18nName(De.Overflow_Menu_Tooltip),items:l,onSelect:d=>{const f=l.indexOf(d);f>=0&&r(o[f])},renderItem:c,onClose:()=>{n.showOverlayOnAllWindows(!1),i?.()}})}dv.displayName="PopupMenu";var fv=e=>{const{controller:t,tabNode:o,selected:r,path:n}=e,i=m.useRef(null),a=m.useRef(null),l=t.getIcons(),c=t.getKeyMap(),d=t.getEditingTab()===o,f=m.useCallback(F=>{i.current=F,t.registerMeasurable(o,"tabbutton",F)},[t,o]);m.useLayoutEffect(()=>{d&&a.current.select()},[d]),m.useEffect(()=>{if(d){const F=t.getCurrentDocument().body,ne=Y=>{Y.target!==a.current&&t.setEditingTab(void 0)};return F.addEventListener("pointerdown",ne),()=>F.removeEventListener("pointerdown",ne)}},[d,t]);const u=F=>{o.isEnableDrag()?(F.stopPropagation(),t.getDragDropManager().setDragNode(F.nativeEvent,o)):F.preventDefault()},p=F=>{t.getDragDropManager().onDragEnded()},g=F=>{oa(F)&&t.auxMouseClick(o,F)},x=F=>{t.showContextMenu(o,F)},w=()=>{o.isSelected()||t.doAction(oe.selectTab(o.getId()))},k=F=>{const ne=i.current?.closest('[role="tablist"]');if(ne){const Y=Array.from(ne.querySelectorAll('[role="tab"]'));Y[Y.indexOf(i.current)+F]?.focus()}},b=()=>{const F=i.current.ownerDocument,ne=()=>Kb(F.getElementById(Tt("flexlayout-tab-",o.getId())));r?ne():(w(),requestAnimationFrame(ne))},h=F=>{d||(Go(F,c.focusTabToggle)?(b(),F.preventDefault()):F.key==="Enter"||F.key===" "?(r?b():w(),F.preventDefault()):(F.key==="ArrowLeft"||F.key==="ArrowUp")&&!ta(F)?(k(-1),F.preventDefault()):(F.key==="ArrowRight"||F.key==="ArrowDown")&&!ta(F)?(k(1),F.preventDefault()):Go(F,c.closeTab)&&o.isCloseable()?(k(1),t.doAction(oe.deleteTab(o.getId())),F.preventDefault()):Go(F,c.renameTab)&&o.isEnableRename()&&(_(),F.preventDefault()))},v=F=>{o.isEnableRename()&&(_(),F.stopPropagation())},_=()=>{t.setEditingTab(o)},y=()=>{const F=o.getCloseType();return!!(r||F===Yr.Always||F===Yr.Visible&&window.matchMedia&&window.matchMedia("(hover: hover) and (pointer: fine)").matches)},E=F=>{y()&&(t.doAction(oe.deleteTab(o.getId())),F.stopPropagation())},R=F=>{F.stopPropagation()},P=F=>{F.stopPropagation()},I=F=>{F.code==="Escape"?(t.setEditingTab(void 0),i.current?.focus()):(F.code==="Enter"||F.code==="NumpadEnter")&&(t.setEditingTab(void 0),t.doAction(oe.renameTab(o.getId(),F.target.value)),i.current?.focus())},B=t.getClassName,z=o.getParent(),L=z.isEnableSingleTabStretch()&&z.getChildren().length===1,T=L?U.FLEXLAYOUT__TAB_BUTTON_STRETCH:U.FLEXLAYOUT__TAB_BUTTON;let j=B(T);j+=" "+B(T+"_"+z.getTabLocation()),L||(r?j+=" "+B(T+"--selected"):j+=" "+B(T+"--unselected")),o.isPinned()&&(j+=" "+B(T+"--pinned")),o.getClassName()!==void 0&&(j+=" "+o.getClassName());const D=ju(t,o),S=r||z.getSelectedNode()===void 0&&z.getChildren()[0]===o,N=[wr(c.focusTabToggle),o.isCloseable()?wr(c.closeTab):void 0,o.isEnableRename()?wr(c.renameTab):void 0].filter(Boolean).join(" ")||void 0;let A=D.content?s.jsx("div",{className:B(U.FLEXLAYOUT__TAB_BUTTON_CONTENT),children:D.content}):null;const V=D.leading?s.jsx("div",{className:B(U.FLEXLAYOUT__TAB_BUTTON_LEADING),children:D.leading}):null;if(d&&(A=s.jsx("input",{ref:a,className:B(U.FLEXLAYOUT__TAB_BUTTON_TEXTBOX),"data-layout-path":n+"/textbox",type:"text","aria-label":t.i18nName(De.Rename_Tab),autoFocus:!0,defaultValue:o.getName(),onKeyDown:I,onPointerDown:P})),o.isPinned()){const F=t.i18nName(De.Pinned_Tab);D.buttons.push(s.jsx("div",{"data-layout-path":n+"/button/pin",title:F,"aria-hidden":"true",className:B(U.FLEXLAYOUT__TAB_BUTTON_PIN),children:typeof l.pin=="function"?l.pin(o):l.pin},"pin"))}if(o.isCloseable()&&!L){const F=t.i18nName(De.Close_Tab);D.buttons.push(s.jsx("div",{"data-layout-path":n+"/button/close",title:F,"aria-hidden":"true",className:B(U.FLEXLAYOUT__TAB_BUTTON_TRAILING),onPointerDown:R,onClick:E,children:typeof l.close=="function"?l.close(o):l.close},"close"))}return s.jsxs("div",{ref:f,id:Tt("flexlayout-tabbutton-",o.getId()),role:d?void 0:"tab","aria-selected":d?void 0:r,"aria-controls":d?void 0:Tt("flexlayout-tab-",o.getId()),"aria-label":d?void 0:o.isPinned()?D.name+" ("+t.i18nName(De.Pinned_Tab)+")":D.name,"aria-keyshortcuts":d?void 0:N,tabIndex:d?-1:S?0:-1,onKeyDown:h,"data-layout-path":n,className:j,onClick:w,onAuxClick:g,onContextMenu:x,title:o.getHelpText(),draggable:!0,onDragStart:u,onDragEnd:p,onDoubleClick:v,children:[V,A,D.buttons]})};fv.displayName="TabButton";var pv=(e,t,o,r,n,i,a)=>{const[l,c]=m.useState([]),[d,f]=m.useState(!1),[u,p]=m.useState(!1),g=m.useRef(!1),x=m.useRef(void 0),w=m.useRef([]),k=m.useRef(0),b=m.useRef(!1);m.useEffect(()=>()=>{x.current!==void 0&&clearTimeout(x.current)},[]),m.useLayoutEffect(()=>{w.current=l});const h=m.useCallback(K=>{o===ye.HORZ?r.current.scrollLeft=K:r.current.scrollTop=K},[o,r]),v=m.useCallback(K=>o===ye.HORZ?K.scrollLeft:K.scrollTop,[o]),_=m.useCallback(K=>o===ye.HORZ?K.clientWidth:K.clientHeight,[o]),y=m.useCallback(K=>o===ye.HORZ?K.scrollWidth:K.scrollHeight,[o]),E=m.useCallback(K=>o===ye.HORZ?K.width:K.height,[o]),R=m.useCallback(K=>o===ye.HORZ?K.x:K.y,[o]),P=m.useCallback(K=>o===ye.HORZ?K.right:K.bottom,[o]),I=m.useCallback(()=>{const K=[];if(r.current){const Z=r.current,$=Z.getBoundingClientRect(),Q=R($)-1,re=P($)+1,ae=Z.firstElementChild;let Le=0;Array.from(ae.children).forEach(ke=>{const ve=ke.getBoundingClientRect();ke.classList.contains(a)&&((R(ve)re)&&K.push(Le),Le++)})}return K},[a,r,R,P]),B=m.useCallback(()=>{if(r.current&&n.current){const K=r.current,Z=n.current,$=_(K),Q=y(K),re=v(K);if(Q>$&&Q>0){let ae=$*$/Q,Le=0;ae<20&&(Le=20-ae,ae=20);const ke=re*($-Le)/Q;o===ye.HORZ?(Z.style.width=ae+"px",Z.style.left=ke+"px"):(Z.style.height=ae+"px",Z.style.top=ke+"px"),Z.style.display="block"}else Z.style.display="none";o===ye.HORZ?Z.style.bottom="0px":Z.style.right="0px"}},[o,r,n,_,y,v]),z=m.useCallback((K=!1)=>{const Z=I(),$=Z.length>0;$!==d&&f($),K?c(Z):x.current===void 0&&(x.current=setTimeout(()=>{const Q=I();Iw(Q,w.current)||c(Q),x.current=void 0},100))},[I,d]),L=m.useCallback(()=>{const K=t.getSelectedNode();if(K&&r.current){const Z=e.getBoundingClientRect(r.current),$=r.current.ownerDocument.getElementById(Tt("flexlayout-tabbutton-",K.getId()));if(!$)return;const Q=e.getBoundingClientRect($);let re=R(Z)-R(Q);re>0||E(Q)>E(Z)?(h(v(r.current)-re),b.current=!0):(re=P(Q)-P(Z),re>0&&(h(v(r.current)+re),b.current=!0))}},[t,e,r,R,P,E,v,h]),T=m.useCallback(()=>{if(r.current){const K=r.current;let Z=0;for(const Q of Array.from(K.children))Z+=_(Q);const $=Z+(u?10:0)>_(r.current);$!==u&&p($)}},[r,u,_]),j=m.useCallback(()=>{b.current||(g.current=!0),b.current=!1,B(),z()},[B,z]),D=m.useCallback((K,Z)=>{if(r.current&&n.current){const $=r.current,Q=n.current,re=_($),ae=y($),Le=_(Q),ke=$.getBoundingClientRect();let ve;if(o===ye.HORZ?ve=K-ke.x-k.current:ve=Z-ke.y-k.current,ve=Math.max(0,Math.min(ae-Le,ve)),re>0){const Dt=ve*ae/re;h(Dt)}}},[r,n,o,_,y,h]),S=m.useCallback(()=>{},[]),N=m.useCallback(()=>{},[]),A=m.useCallback(K=>{K.stopPropagation(),n.current.setPointerCapture(K.pointerId);const Z=n.current.getBoundingClientRect();o===ye.HORZ?k.current=K.clientX-Z.x:k.current=K.clientY-Z.y,Bl(K.currentTarget.ownerDocument,K,D,S,N)},[n,o,D,S,N]),V=m.useCallback(K=>{if(r.current){if(t.getChildren().length===0)return;let Z;if(Math.abs(K.deltaY)>0){Z=-K.deltaY,K.deltaMode===1&&(Z*=40);const $=v(r.current)-Z,Q=y(r.current)-_(r.current);h(Math.max(0,Math.min(Q,$))),K.stopPropagation()}}},[t,r,v,y,_,h]),F=m.useCallback(K=>{K.preventDefault()},[]),ne=t.getId(),Y=t.getSelectedNode();return m.useLayoutEffect(()=>{r.current&&h(0)},[ne,r,h]),m.useLayoutEffect(()=>{g.current=!1},[Y]),m.useLayoutEffect(()=>{T(),g.current===!1&&L(),B(),z(!0),requestAnimationFrame(()=>{z()})},[T,L,B,z,o,Y]),m.useLayoutEffect(()=>{const K=r.current;if(!K)return;const Z=new K.ownerDocument.defaultView.ResizeObserver(()=>{g.current=!1,T(),L(),B(),z()});return Z.observe(K),()=>Z.disconnect()},[T,L,B,z,r]),m.useEffect(()=>{if(t instanceof Oe&&t.isEnableTabWrap())return;const K=i.current;return K?.addEventListener("wheel",F,{passive:!1}),()=>{K?.removeEventListener("wheel",F)}}),{userControlledPositionRef:g,onScroll:j,onScrollPointerDown:A,hiddenTabs:l,onMouseWheel:V,isDockStickyButtons:u,isShowHiddenTabs:d}};function Iw(e,t){return e.length===t.length&&e.every((o,r)=>o===t[r])}var hv=e=>{const{tabsetNode:t,controller:o}=e,r=m.useRef(null),n=m.useRef(null),i=m.useRef(null),a=m.useRef(null),l=m.useRef(null),c=m.useRef(null),d=m.useRef(null),f=m.useRef(null),[u,p]=m.useState(!1),g=m.useRef(null),x=o.getIcons();m.useEffect(()=>()=>g.current?.(),[]);const{userControlledPositionRef:w,onScroll:k,onScrollPointerDown:b,hiddenTabs:h,onMouseWheel:v,isDockStickyButtons:_,isShowHiddenTabs:y}=pv(o,t,ye.HORZ,a,i,n,o.getClassName(U.FLEXLAYOUT__TAB_BUTTON)),E=m.useCallback(X=>{r.current=X,o.registerMeasurable(t,"tabset",X)},[o,t]),R=m.useCallback(X=>{n.current=X,o.registerMeasurable(t,"tabstrip",X)},[o,t]),P=m.useCallback(X=>{l.current=X,o.registerMeasurable(t,"tabsetcontent",X)},[o,t]),I=X=>{const fe=o.getShowOverflowMenu(),pe=h.map(ge=>({index:ge,node:t.getChildren()[ge]}));if(fe!==void 0)fe(t,X,pe,B);else{const ge=d.current;p(!0),g.current=uv(ge,t,pe,B,o,()=>{p(!1),g.current=null})}X.stopPropagation()},B=X=>{o.doAction(oe.selectTab(X.node.getId())),w.current=!1},z=X=>{o.getEditingTab()?X.preventDefault():t.isEnableDrag()?(X.stopPropagation(),o.getDragDropManager().setDragNode(X.nativeEvent,t)):X.preventDefault()},L=X=>{!oa(X)&&!t.isActive()&&o.doAction(oe.setActiveTabset(t.getId(),o.getLayoutId()))},T=X=>{oa(X)&&o.auxMouseClick(t,X)},j=X=>{o.showContextMenu(t,X)},D=X=>{X.stopPropagation()},S=X=>{t.canMaximize()&&o.maximize(t),X.stopPropagation()},N=X=>{o.doAction(oe.deleteTabset(t.getId())),X.stopPropagation()},A=X=>{o.doAction(oe.deleteTab(t.getChildren()[0].getId())),X.stopPropagation()},V=X=>{K!==void 0&&o.doAction(oe.popoutTab(K.getId(),"window")),X.stopPropagation()},F=X=>{K!==void 0&&o.doAction(oe.popoutTab(K.getId(),"float")),X.stopPropagation()},ne=X=>{t.canMaximize()&&o.maximize(t)},Y=o.getClassName,K=t.getSelectedNode(),Z=t.getPath(),$=()=>{const X=[];let fe=!1;if(t.isEnableTabStrip()){const pe=t.isEnableSingleTabStretch()&&t.getChildren().length===1;for(let ge=0;ge{let X,fe=[],pe=[];const ge={leading:X,stickyButtons:fe,buttons:pe,overflowPosition:void 0};o.customizeTabSet(t,ge),X=ge.leading,fe=ge.stickyButtons,pe=ge.buttons;const Ce=t.isEnableSingleTabStretch()&&t.getChildren().length===1;let Qe=Ce&&t.getChildren()[0].isCloseable()||t.isCloseable();Qe=Qe&&t.isEnableCloseButton(),ge.overflowPosition===void 0&&(ge.overflowPosition=fe.length);let Be;if(fe.length>0&&(!t.isEnableTabWrap()&&(_||Ce)?pe=[...fe,...pe]:Be=s.jsx("div",{ref:f,onPointerDown:D,onDragStart:xe=>{xe.preventDefault()},className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_STICKY_BUTTONS_CONTAINER),children:fe},"sticky_buttons_container")),!t.isEnableTabWrap()&&y){const xe=o.i18nName(De.Overflow_Menu_Tooltip);let ze;if(typeof x.more=="function"){const Je=h.map(Fe=>({index:Fe,node:t.getChildren()[Fe]}));ze=x.more(t,Je)}else ze=s.jsxs(s.Fragment,{children:[x.more,s.jsx("div",{className:Y(U.FLEXLAYOUT__TAB_BUTTON_OVERFLOW_COUNT),children:h.length>0?h.length:""})]});pe.splice(Math.min(ge.overflowPosition,pe.length),0,s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/overflow","aria-haspopup":"menu","aria-expanded":u,"aria-label":xe,ref:d,className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(U.FLEXLAYOUT__TAB_BUTTON_OVERFLOW),title:xe,onClick:I,onPointerDown:D,children:ze},"overflowbutton"))}if(K!==void 0&&!K.isPinned()){if(K.isEnablePopoutFloatIcon()){const xe=o.i18nName(De.Popout_Tab_Float);pe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/popout-float",title:xe,"aria-label":xe,className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_FLOAT),onClick:F,onPointerDown:D,children:typeof x.popoutFloat=="function"?x.popoutFloat(K):x.popoutFloat},"popout-float"))}if(o.isSupportsPopout()&&K.isAllowedInWindow()&&K.isEnablePopoutIcon()){const xe=o.i18nName(De.Popout_Tab);pe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/popout",title:xe,"aria-label":xe,className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_FLOAT),onClick:V,onPointerDown:D,children:typeof x.popout=="function"?x.popout(K):x.popout},"popout"))}}if(t.canMaximize()){const xe=o.i18nName(De.Restore),ze=o.i18nName(De.Maximize);pe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/max",title:t.isMaximized()?xe:ze,"aria-label":t.isMaximized()?xe:ze,"aria-pressed":t.isMaximized(),className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_+(t.isMaximized()?"max":"min")),onClick:S,onPointerDown:D,children:t.isMaximized()?typeof x.restore=="function"?x.restore(t):x.restore:typeof x.maximize=="function"?x.maximize(t):x.maximize},"max"))}if(!t.isMaximized()&&Qe){const xe=Ce?o.i18nName(De.Close_Tab):o.i18nName(De.Close_Tabset);pe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/close",title:xe,"aria-label":xe,className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_CLOSE),onClick:Ce?A:N,onPointerDown:D,children:typeof x.closeTabset=="function"?x.closeTabset(t):x.closeTabset},"close"))}if(t.isActive()&&t.isEnableActiveIcon()){const xe=o.i18nName(De.Active_Tabset);pe.push(s.jsx("div",{"data-layout-path":Z+"/button/active",title:xe,"aria-hidden":"true",className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_ICON),children:typeof x.activeTabset=="function"?x.activeTabset(t):x.activeTabset},"active"))}const _e=s.jsx("div",{ref:c,className:Y(U.FLEXLAYOUT__TAB_TOOLBAR),onPointerDown:D,onDragStart:xe=>{xe.preventDefault()},children:pe},"buttonbar");return{leading:X,buttonbar:_e,stickyBar:Be}},re=(X,fe,pe,ge)=>{let Ce;const Qe=o.getKeyMap(),Be=[wr(Qe.focusNextTabset),wr(Qe.focusPreviousTabset)].filter(Boolean).join(" ")||void 0,_e=o.getEditingTab()?.getParent()===t,xe=_e?void 0:"tablist";let ze=Y(U.FLEXLAYOUT__TABSET_TABBAR_OUTER);t.getClassNameTabStrip()!==void 0&&(ze+=" "+t.getClassNameTabStrip()),ze+=" "+U.FLEXLAYOUT__TABSET_TABBAR_OUTER_+t.getTabLocation(),t.isActive()&&(ze+=" "+Y(U.FLEXLAYOUT__TABSET_SELECTED)),t.isMaximized()&&(ze+=" "+Y(U.FLEXLAYOUT__TABSET_MAXIMIZED));const Je=t.isEnableSingleTabStretch()&&t.getChildren().length===1;if(Je){const jo=t.getChildren()[0];jo.getTabSetClassName()!==void 0&&(ze+=" "+jo.getTabSetClassName())}let Fe;if(fe&&(Fe=s.jsx("div",{className:Y(U.FLEXLAYOUT__TABSET_LEADING),children:fe})),t.isEnableTabWrap())t.isEnableTabStrip()&&(Ce=s.jsxs("div",{className:ze,style:{flexWrap:"wrap",gap:"1px",marginTop:"2px"},ref:R,"data-layout-path":Z+"/tabstrip",onPointerDown:L,onDoubleClick:ne,onContextMenu:j,onClick:T,onAuxClick:T,draggable:!0,onDragStart:z,children:[Fe,s.jsx("div",{role:xe,"aria-orientation":_e?void 0:"horizontal","aria-label":_e?void 0:t.getName(),"aria-keyshortcuts":_e?void 0:Be,style:{display:"contents"},children:X}),ge,s.jsx("div",{style:{flexGrow:1,display:"flex",justifyContent:"flex-end"},children:pe})]}));else if(t.isEnableTabStrip()){let jo;t.isEnableTabScrollbar()&&(jo=s.jsx("div",{ref:i,"aria-hidden":"true",className:Y(U.FLEXLAYOUT__MINI_SCROLLBAR),onPointerDown:b})),Ce=s.jsxs("div",{className:ze,ref:R,"data-layout-path":Z+"/tabstrip",onPointerDown:L,onDoubleClick:ne,onContextMenu:j,onClick:T,onAuxClick:T,draggable:!0,onWheel:v,onDragStart:z,children:[Fe,s.jsxs("div",{className:Y(U.FLEXLAYOUT__MINI_SCROLLBAR_CONTAINER),children:[s.jsxs("div",{ref:a,className:Y(U.FLEXLAYOUT__TABSET_TABBAR_INNER)+" "+Y(U.FLEXLAYOUT__TABSET_TABBAR_INNER_+t.getTabLocation()),style:{overflowX:"auto",overflowY:"hidden"},onScroll:k,children:[s.jsx("div",{style:{width:Je?"100%":"none"},role:xe,"aria-orientation":_e?void 0:"horizontal","aria-label":_e?void 0:t.getName(),"aria-keyshortcuts":_e?void 0:Be,className:Y(U.FLEXLAYOUT__TABSET_TABBAR_INNER_TAB_CONTAINER)+" "+Y(U.FLEXLAYOUT__TABSET_TABBAR_INNER_TAB_CONTAINER_+t.getTabLocation()),children:X}),ge]}),jo]}),pe]})}return Ce},ae=X=>{let fe;if(t.getChildren().length===0){const ge=o.getTabSetPlaceHolderCallback();ge&&(fe=ge(t))}let pe=s.jsx("div",{ref:P,className:Y(U.FLEXLAYOUT__TABSET_CONTENT),children:fe});return t.getTabLocation()==="top"?pe=s.jsxs(s.Fragment,{children:[X,pe]}):pe=s.jsxs(s.Fragment,{children:[pe,X]}),pe},Le=$(),{leading:ke,buttonbar:ve,stickyBar:Dt}=Q(),J=ae(re(Le,ke,ve,Dt)),se={flexGrow:Math.max(1,t.getWeight()*1e3),minWidth:t.getMinWidth(),minHeight:t.getMinHeight(),maxWidth:t.getMaxWidth(),maxHeight:t.getMaxHeight()};t.getModel().getMaximizedTabset(o.getLayoutId())!==void 0&&!t.isMaximized()&&(se.display="none");const ce=s.jsx("div",{ref:E,className:Y(U.FLEXLAYOUT__TABSET_CONTAINER),style:se,children:s.jsx("div",{className:Y(U.FLEXLAYOUT__TABSET),"data-layout-path":Z,children:J})});return t.isMaximized()&&o.getMainElement()?Io.createPortal(s.jsx("div",{style:{position:"absolute",display:"flex",top:0,left:0,bottom:0,right:0},children:ce}),o.getMainElement()):ce};hv.displayName="TabSet";var Ai=e=>{const{controller:t,node:o,index:r,horizontal:n}=e,i=m.useRef(null),a=m.useRef(null),l=m.useRef([]),c=m.useRef(void 0),d=m.useRef(void 0),f=m.useRef(0),u=m.useRef(0),p=m.useRef({initialSizes:[],sum:0,startPosition:0}),g=m.useCallback(L=>{L.preventDefault(),L.stopImmediatePropagation()},[]);m.useEffect(()=>{const L=i.current,T=a.current;return L?.addEventListener("touchstart",g,{passive:!1}),T?.addEventListener("touchstart",g,{passive:!1}),()=>{L?.removeEventListener("touchstart",g),T?.removeEventListener("touchstart",g)}},[g]);const x=L=>{L.stopPropagation(),o instanceof He&&(p.current=o.getSplitterInitials(r)),ol(!1,t.getCurrentDocument()),Bl(L.currentTarget.ownerDocument,L,b,h,k),l.current=o instanceof qe?o.getSplitterBounds(!0):o.getSplitterBounds(r);const T=t.getRootDiv();c.current=t.getCurrentDocument().createElement("div"),c.current.style.flexDirection=n?"row":"column",c.current.className=t.getClassName(U.FLEXLAYOUT__SPLITTER_DRAG)+(o instanceof qe?" "+t.getClassName(U.FLEXLAYOUT__SPLITTER_BORDER):""),c.current.style.cursor=o.getOrientation()===ye.VERT?"ns-resize":"ew-resize",d.current=t.getCurrentDocument().createElement("div"),d.current.className=y(U.FLEXLAYOUT__SPLITTER_HANDLE)+" "+y(n?U.FLEXLAYOUT__SPLITTER_HANDLE_HORZ:U.FLEXLAYOUT__SPLITTER_HANDLE_VERT),c.current.appendChild(d.current);const j=i.current.getBoundingClientRect(),D=new he(j.x-t.getDomRect().x,j.y-t.getDomRect().y,j.width,j.height);f.current=L.clientX-j.x,u.current=L.clientY-j.y,D.positionElement(c.current),T&&T.appendChild(c.current)},w=L=>{if(ta(L))return;let T=0;if(n?(L.key==="ArrowLeft"&&(T=-10),L.key==="ArrowRight"&&(T=10)):(L.key==="ArrowUp"&&(T=-10),L.key==="ArrowDown"&&(T=10)),T!==0)if(L.preventDefault(),o instanceof qe){const j=o.getLocation(),D=j===ee.BOTTOM||j===ee.RIGHT?-T:T,S=Math.max(o.getMinSize(),Math.min(o.getMaxSize(),o.getSize()+D));t.doAction(oe.adjustBorderSplit(o.getId(),S))}else{const j=o.getSplitterInitials(r);if(j.sum<=0)return;const D=o.getSplitterBounds(r),S=Math.max(D[0],Math.min(D[1],j.startPosition+T)),N=o.calculateSplit(r,S,j.initialSizes,j.sum,j.startPosition);t.doAction(oe.adjustWeights(o.getId(),N))}},k=()=>{const L=t.getRootDiv();L&&c.current&&L.removeChild(c.current),c.current=void 0,ol(!0,t.getCurrentDocument())},b=(L,T)=>{if(c.current){const j=t.getDomRect();if(!j)return;o.getOrientation()===ye.VERT?c.current.style.top=_(T-j.y-u.current)+"px":c.current.style.left=_(L-j.x-f.current)+"px",t.isRealtimeResize()&&v(!0)}},h=()=>{if(c.current){v(!1);const L=t.getRootDiv();L&&c.current&&L.removeChild(c.current),c.current=void 0}ol(!0,t.getCurrentDocument())},v=L=>{(()=>{if(c.current){let j;if(o.getOrientation()===ye.VERT?j=c.current.offsetTop:j=c.current.offsetLeft,o instanceof qe){const D=o.calculateSplit(o,j);t.doAction(oe.adjustBorderSplit(o.getId(),D).setAdjusting(L))}else{const D=p.current;if(D.sum<=0)return;const S=o.calculateSplit(r,j,D.initialSizes,D.sum,D.startPosition);t.doAction(oe.adjustWeights(o.getId(),S).setAdjusting(L))}}})()},_=L=>{const T=l.current;let j=L;return LT[1]&&(j=T[1]),j},y=t.getClassName,E={cursor:n?"ew-resize":"ns-resize",flexDirection:n?"column":"row"};let R=y(U.FLEXLAYOUT__SPLITTER)+" "+y(U.FLEXLAYOUT__SPLITTER_+o.getOrientation().getName());o instanceof qe?R+=" "+y(U.FLEXLAYOUT__SPLITTER_BORDER):o.getModel().getMaximizedTabset(t.getLayoutId())!==void 0&&(E.display="none"),Gb()||(E["--splitter-active-size"]="30px");let P,I,B,z;if(o instanceof He){const L=o.getRect(),T=o.getChildren()[r-1],j=n?L.width:L.height;if(T&&j>0){const D=T.getRect();P=Math.round((n?D.getRight()-L.x:D.getBottom()-L.y)/j*100),I=0,B=100,z=P+"%"}}else P=Math.round(o.getSize()),I=Math.round(o.getMinSize()),B=Math.round(o.getMaxSize()),z=P+"px";return s.jsx("div",{className:R,style:E,ref:i,role:"separator","aria-label":t.i18nName(De.Splitter),"aria-orientation":n?"vertical":"horizontal","aria-valuenow":P,"aria-valuemin":I,"aria-valuemax":B,"aria-valuetext":z,tabIndex:0,onKeyDown:w,"data-layout-path":o.getPath()+"/s"+(r-1),onPointerDown:x,children:s.jsx("div",{className:y(U.FLEXLAYOUT__SPLITTER_HANDLE)+" "+y(n?U.FLEXLAYOUT__SPLITTER_HANDLE_HORZ:U.FLEXLAYOUT__SPLITTER_HANDLE_VERT)})})};Ai.displayName="Splitter";var Pu=e=>{const{controller:t,rowNode:o}=e,r=m.useRef(null),n=o.getOrientation()===ye.HORZ,i=m.useCallback(d=>{r.current=d,t.registerMeasurable(o,"row",d)},[t,o]),a=[];let l=0;for(const d of o.getChildren())l>0&&a.push(s.jsx(Ai,{controller:t,node:o,index:l,horizontal:n},"splitter"+l)),d instanceof He?a.push(s.jsx(Pu,{controller:t,rowNode:d},d.getId())):d instanceof Oe&&a.push(s.jsx(hv,{controller:t,tabsetNode:d},d.getId())),l++;const c={flexGrow:Math.max(1,o.getWeight()*1e3),minWidth:o.getMinWidth(),minHeight:o.getMinHeight(),maxWidth:o.getMaxWidth(),maxHeight:o.getMaxHeight()};return n?c.flexDirection="row":c.flexDirection="column",s.jsx("div",{ref:i,className:t.getClassName(U.FLEXLAYOUT__ROW),style:c,children:a})};Pu.displayName="Row";var gv=e=>{const{controller:t,selected:o,tabNode:r}=e,n=m.useRef(null),i=m.useRef(!0),a=m.useCallback(()=>{const g=r.getParent();g instanceof Oe&&(g.isActive()||t.doAction(oe.setActiveTabset(g.getId(),t.getLayoutId())))},[r,t]),l=r.getParent(),c=t.getKeyMap().focusTabToggle,d=g=>{if(Go(g,c)){const x=g.currentTarget.ownerDocument.getElementById(Tt("flexlayout-tabbutton-",r.getId()));x&&(x.focus(),g.preventDefault(),g.stopPropagation())}};m.useLayoutEffect(()=>{const g=r.getMoveableElement(),x=n.current.ownerDocument,w=g.ownerDocument!==x;w&&x.adoptNode(g),g.parentElement!==n.current&&n.current.appendChild(g),w&&t.redrawLayoutAndTabContent();const k=()=>{r.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(r.getId())&&(r.isEnableWindowReMount()||t.getMainController()?.getMoveablesHome()?.appendChild(g)),r.setVisible(!1))}},[r,t,a]),m.useEffect(()=>{r.isSelected()&&i.current&&(r.restoreScrollPosition(),i.current=!1)}),m.useLayoutEffect(()=>(t.registerTabPanel(r,n.current),()=>{t.registerTabPanel(r,null)}),[t,r]);const f=t.getClassName;let u=null;if(o&&document.hidden&&r.isEnablePopoutOverlay()){const g={};l.getContentRect().styleWithPosition(g);let x=f(U.FLEXLAYOUT__TAB_OVERLAY);l instanceof qe&&l.isOverlay()&&(x+=" "+f(U.FLEXLAYOUT__TAB_OVERLAY_RAISED)),u=s.jsx("div",{style:g,className:x})}let p=f(U.FLEXLAYOUT__TAB);return l instanceof qe&&(p+=" "+f(U.FLEXLAYOUT__TAB_BORDER),p+=" "+f(U.FLEXLAYOUT__TAB_BORDER_+l.getLocation().getName()),l.isOverlay()&&(p+=" "+f(U.FLEXLAYOUT__TAB_BORDER_OVERLAY))),r.getContentClassName()!==void 0&&(p+=" "+r.getContentClassName()),s.jsxs(s.Fragment,{children:[u,s.jsx("div",{ref:n,id:Tt("flexlayout-tab-",r.getId()),role:"tabpanel","aria-labelledby":Tt("flexlayout-tabbutton-",r.getId()),"aria-keyshortcuts":wr(c),tabIndex:-1,onKeyDown:c?d:void 0,className:p,"data-layout-path":r.getPath()})]})};gv.displayName="Tab";var jw=class extends m.Component{constructor(t){super(t);O(this,"retry",()=>{this.setState({hasError:!1})});this.state={hasError:!1}}static getDerivedStateFromError(t){return{hasError:!0}}componentDidCatch(t,o){console.debug(t),console.debug(o)}render(){return this.state.hasError?s.jsx("div",{className:U.FLEXLAYOUT__ERROR_BOUNDARY_CONTAINER,children:s.jsx("div",{role:"alert",className:U.FLEXLAYOUT__ERROR_BOUNDARY_CONTENT,children:s.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center"},children:[this.props.message,s.jsx("p",{children:s.jsx("button",{tabIndex:0,onClick:this.retry,children:this.props.retryText})})]})})}):this.props.children}},bv=m.memo(({controller:e,tabNode:t})=>{bv.displayName="TabContentRenderer";let o;if(t.getComponent())o=e.getFactory()(t);else if(t.getSubLayoutId()){const r=t.getModel().getLayouts().get(t.getSubLayoutId());o=s.jsxs("div",{className:e.getClassName(U.FLEXLAYOUT__TAB_LAYOUT_CONTAINER),children:[s.jsx(na,{...e.getProps(),layoutId:t.getSubLayoutId(),path:t.getPath()+r.getPath(),mainLayoutController:e.getMainController()}),";"]})}return s.jsx(jw,{message:e.i18nName(De.Error_rendering_component),retryText:e.i18nName(De.Error_rendering_component_retry),children:o})},Pw);function Pw(e,t){return!(t.visible&&(e.windowId!==t.windowId||e.fullRedrawRevision!==t.fullRedrawRevision||e.parentRedrawRevision!==t.parentRedrawRevision||e.tabNode!==t.tabNode||t.tabNode.getSubLayoutId()!==void 0))}var Ee,Bw=(Ee=class{constructor(t){O(this,"_controller");O(this,"_dragEnterCount",0);O(this,"_dragging",!1);O(this,"_active",!1);O(this,"_dropInfo");O(this,"_outlineDiv");O(this,"_mainController");O(this,"setDragNode",(t,o)=>{if(Ee.dragState=new za(this._controller.getMainController(),"internal",o,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(),o instanceof Oe){let r=!1,n=this._controller.i18nName(De.Move_Tabset);if(o.getChildren().length>0&&(n=this._controller.i18nName(De.Move_Tabs).replace("?",String(o.getChildren().length))),this._controller.getProps().onRenderDragRect){const i=this._controller.getProps().onRenderDragRect(n,o,void 0);i&&(this.setDragComponent(t,i,10,10),r=!0)}r||this.setDragComponent(t,n,10,10)}else{const r=t.target;if(r&&typeof r.getBoundingClientRect=="function"){const n=r.getBoundingClientRect(),i=t.clientX-n.left,a=t.clientY-n.top,l=o?.getParent(),c=l instanceof qe&&l.getOrientation()===ye.HORZ,d=c?10:i,f=c?10:a;let u=!1;if(this._controller.getProps().onRenderDragRect){const p=s.jsx(ra,{controller:this._controller,tabNode:o},o.getId()),g=this._controller.getProps().onRenderDragRect(p,o,void 0);g&&(this.setDragComponent(t,g,d,f),u=!0)}u||(Cw()?this.setDragComponent(t,s.jsx(ra,{tabNode:o,controller:this._controller}),d,f):t.dataTransfer.setDragImage(o.getTabStamp(),d,f))}}});O(this,"onDragEnterRaw",t=>{this._dragEnterCount++,this.updateActive(t)});O(this,"onDragLeaveRaw",t=>{this._dragEnterCount--,this.updateActive(t)});O(this,"onDragEnter",t=>{if(!Ee.dragState&&this._controller.getProps().onExternalDrag){const o=this._controller.getProps().onExternalDrag(t);if(o){const r=Se.fromJson(o.json,this._controller.getModel(),!1);Ee.dragState=new za(this._controller.getMainController(),"external",r,o.json,o.onDrop)}}if(this._mainController===Ee.dragState?.mainLayoutController&&!(Ee.dragState?.dockFloatToMain&&!this.isDockTarget())&&Ee.dragState){t.preventDefault(),this._dropInfo=void 0;const o=this._controller.getRootDiv(),r=this._controller.getCurrentDocument();this._outlineDiv=r.createElement("div"),this._outlineDiv.className=this._controller.getClassName(U.FLEXLAYOUT__OUTLINE_RECT),this._outlineDiv.style.visibility="hidden";const n=this._controller.getTabDragSpeed();this._outlineDiv.style.transition=`top ${n}s, left ${n}s, width ${n}s, height ${n}s`,o.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)}});O(this,"onDragOver",t=>{if(this._mainController===Ee.dragState?.mainLayoutController&&!(Ee.dragState?.dockFloatToMain&&!this.isDockTarget())&&this._active){if(Ee.dragState?.dockFloatToMain){const i=t.target;if(i&&Ee.dragState.sourceFloatElement?.contains(i)){this._dropInfo=void 0;return}}const o=this._controller.getRootDiv()?.getBoundingClientRect(),r={x:t.clientX-(o?.left??0),y:t.clientY-(o?.top??0)};Ee.dragState.dockFloatToMain||this._controller.checkForBorderToShow(r.x,r.y);const n=this._controller.getModel().findDropTargetNode(this._controller.getLayoutId(),Ee.dragState.dragNode,r.x,r.y,this.isExcludeCenter());if(n){if(Ee.dragState.dockFloatToMain&&(n.location===ee.CENTER||!(n.node instanceof Oe)&&!(n.node instanceof He)))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")}}});O(this,"onDragLeave",t=>{if(this._mainController===Ee.dragState?.mainLayoutController&&(this.clearDragLocalVisuals(),this._controller.isMainLayout())){let o=!1;for(const[,r]of this._controller.getModel().getLayouts())if(r.getController()&&r.getController().getDragDropManager().isDragging()){o=!0;break}o===!1&&this.clearDragMain()}});O(this,"onDrop",t=>{if(this._mainController===Ee.dragState?.mainLayoutController&&!(Ee.dragState?.dockFloatToMain&&!this.isDockTarget())){if(this._active){t.preventDefault();const o=Ee.dragState;if(this._dropInfo&&o.dockFloatToMain){const r=t.target;r&&o.sourceFloatElement?.contains(r)&&(this._dropInfo=void 0)}if(this._dropInfo)if(o.dragJson!==void 0){const r=this._controller.doAction(oe.addTab(o.dragJson,this._dropInfo.node.getId(),this._dropInfo.location,this._dropInfo.index));o.fnNewNodeDropped!==void 0&&o.fnNewNodeDropped(r,t)}else o.dragNode!==void 0&&(o.dockFloatToMain?this._controller.doAction(oe.dockFloatToLayout(o.floatLayoutId,this._dropInfo.node.getId(),this._dropInfo.location,this._dropInfo.index)):this._controller.doAction(oe.moveNode(o.dragNode.getId(),this._dropInfo.node.getId(),this._dropInfo.location,this._dropInfo.index)));this.clearDragMain(),Ee.dragState=void 0}this._dragEnterCount=0}});this._controller=t,this._mainController=t.getMainController()}isDockTarget(){return this._controller.getLayout().getLayoutId()!==Ee.dragState?.floatLayoutId}isExcludeCenter(){if(Ee.dragState?.dockFloatToMain)return!0;const t=Ee.dragState?.dragNode;return t instanceof Oe?!t.isEnableClose()||t.getPinnedRunLength()>0:!1}addTabWithDragAndDrop(t,o,r){const n=Se.fromJson(o,this._controller.getModel(),!1);Ee.dragState=new za(this._controller.getMainController(),"add",n,o,r)}onDragEnded(){this.clearDragMain(),Ee.dragState=void 0}moveTabWithDragAndDrop(t,o){this.setDragNode(t,o)}startDockLayoutDrag(t,o,r){const n=o.getRootRow();Ee.dragState=new za(this._controller.getMainController(),"float",n,void 0,void 0,!0,o.getLayoutId(),r),t.dataTransfer.setData("text/plain","--flexlayout--"),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.dropEffect="move",this._dragEnterCount=0,this._controller.getModel().sortLayouts();let i=0;o.getRootRow()?.forEachNode(c=>{c instanceof Se&&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,o,r,n){const i=s.jsx("div",{style:{position:"unset"},className:this._controller.getClassName(U.FLEXLAYOUT__LAYOUT)+" "+this._controller.getClassName(U.FLEXLAYOUT__DRAG_RECT),children:o}),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=qn(l);Io.flushSync(()=>c.render(i)),t.dataTransfer.setDragImage(l,r,n),setTimeout(()=>{c.unmount(),a.body.removeChild(l)},0)}updateActive(t){const o=Array.from(this._controller.getModel().getLayouts().values()),r=Ee.dragState?.dockFloatToMain===!0;let n,i;for(let a=o.length-1;a>=0;a--){const l=o[a];if(r&&l.getLayoutId()===Ee.dragState?.floatLayoutId)continue;const c=l.getController()?.getDragDropManager();c&&c.getDragEnterCount()>0&&(l.getType()==="tab"?i=l:!n&&!i&&(n=l))}if(i){const a=qb(i);(n===a||!n)&&(n=i)}n&&n.getController().getDragDropManager().setActive(!0,t);for(const a of o)a!==n&&a.getController()?.getDragDropManager().setActive(!1,t)}setActive(t,o){this._active!==t&&(this._active=t,this._active?this.onDragEnter(o):this.onDragLeave(o))}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}},O(Ee,"dragState"),Ee),za=class{constructor(e,t,o,r,n,i=!1,a=void 0,l=void 0){O(this,"mainLayoutController");O(this,"dragSource");O(this,"dragNode");O(this,"dragJson");O(this,"fnNewNodeDropped");O(this,"dockFloatToMain");O(this,"floatLayoutId");O(this,"sourceFloatElement");this.mainLayoutController=e,this.dragSource=t,this.dragNode=o,this.dragJson=r,this.fnNewNodeDropped=n,this.dockFloatToMain=i,this.floatLayoutId=a,this.sourceFloatElement=l}},vv=({controller:e})=>{const t=[],o=e.getIcons().edgeArrow;if(e.getState().showEdges&&e.getModel().isEnableEdgeDockIndicators()){const r=e.getModel().getRootRow(e.getLayoutId()).getRect(),n=100,i=10,a=100/2,l=e.getClassName(U.FLEXLAYOUT__EDGE_RECT),c=50;t.push(s.jsx("div",{"aria-hidden":"true",style:{top:0,left:r.width/2-a,width:n,height:i,borderBottomLeftRadius:c,borderBottomRightRadius:c},className:l+" "+e.getClassName(U.FLEXLAYOUT__EDGE_RECT_TOP),children:s.jsx("div",{style:{transform:"rotate(180deg)"},children:o})},"North")),t.push(s.jsx("div",{"aria-hidden":"true",style:{top:r.height/2-a,left:0,width:i,height:n,borderTopRightRadius:c,borderBottomRightRadius:c},className:l+" "+e.getClassName(U.FLEXLAYOUT__EDGE_RECT_LEFT),children:s.jsx("div",{style:{transform:"rotate(90deg)"},children:o})},"West")),t.push(s.jsx("div",{"aria-hidden":"true",style:{top:r.height-i,left:r.width/2-a,width:n,height:i,borderTopLeftRadius:c,borderTopRightRadius:c},className:l+" "+e.getClassName(U.FLEXLAYOUT__EDGE_RECT_BOTTOM),children:s.jsx("div",{children:o})},"South")),t.push(s.jsx("div",{"aria-hidden":"true",style:{top:r.height/2-a,left:r.width-i,width:i,height:n,borderTopLeftRadius:c,borderBottomLeftRadius:c},className:l+" "+e.getClassName(U.FLEXLAYOUT__EDGE_RECT_RIGHT),children:s.jsx("div",{style:{transform:"rotate(-90deg)"},children:o})},"East"))}return s.jsx(s.Fragment,{children:t})};vv.displayName="EdgeIndicators";var zw=2e3,Fw=750,mv=e=>{const{title:t,controller:o,layout:r,url:n,onCloseLayout:i,children:a}=e,l=m.useRef(null),[c,d]=m.useState(void 0),[f,u]=m.useState(void 0),[p,g]=m.useState(void 0),x=m.useMemo(()=>new Map,[]),w=m.useRef(!1),k=m.useRef(null),b=m.useRef(null),h=m.useRef(new Map);if(m.useLayoutEffect(()=>{!w.current&&c&&(w.current=!0,o.redrawLayout(),Hw(x))},[c,o,x]),m.useLayoutEffect(()=>{const v=()=>{if(l.current){const _=l.current;l.current=null,_.close()}};if(!l.current){const _=r.getLayoutId(),y=r.getRect();l.current=window.open(n,_,`left=${y.x},top=${y.y},width=${y.width},height=${y.height}`),l.current?(window.addEventListener("beforeunload",v),l.current.addEventListener("load",()=>{if(l.current){l.current.focus(),l.current.resizeTo(y.width,y.height),l.current.moveTo(y.x,y.y);const E=l.current;E.resizeBy(y.width-E.outerWidth,y.height-E.outerHeight),E.moveBy(y.x-E.screenLeft,y.y-E.screenTop);const R=l.current.document;u(l.current),g(R),R.title=t,document.documentElement.lang&&(R.documentElement.lang=document.documentElement.lang),document.documentElement.dir&&(R.documentElement.dir=document.documentElement.dir);const P=R.createElement("div");P.className=U.FLEXLAYOUT__FLOATING_WINDOW_CONTENT,R.body.appendChild(P),o.getProps().onPopoutOpen?.(r,l.current,R),Vw(R,x).then(()=>{d(P)}),k.current=new MutationObserver(I=>Uw(I,R,x)),k.current.observe(document.head,{childList:!0,subtree:!0,characterData:!0}),b.current=R.defaultView?.setInterval(()=>{$w(x,h.current)},Fw)??null,l.current.addEventListener("beforeunload",()=>{l.current&&(o.getProps().onPopoutClose?.(r,l.current,R),i(r),l.current=null,k.current?.disconnect(),k.current=null,b.current!=null&&(R.defaultView?.clearInterval(b.current),b.current=null))})}})):(console.warn(`Unable to open window ${n}`),i(r))}return()=>{window.removeEventListener("beforeunload",v),l.current?.close(),l.current=null,k.current?.disconnect(),k.current=null,b.current!=null&&(b.current=null)}},[]),c!==void 0){const v=o.getProps().renderPopoutContent;let _=a;return v&&p&&(_=v({children:a,layout:r,popoutWindow:f??window,popoutDocument:p})),Io.createPortal(_,c)}else return null};function Uw(e,t,o){for(const r of e)if(r.type==="childList"&&r.target===document.head){for(const n of r.addedNodes)(n instanceof HTMLLinkElement||n instanceof HTMLStyleElement)&&xv(t,n,o);for(const n of r.removedNodes)if(n instanceof HTMLLinkElement||n instanceof HTMLStyleElement){const i=o.get(n);i&&(i.remove(),o.delete(n))}}else{const n=Ww(r.target),i=n&&o.get(n);n&&i&&_s(n,i)}}function Ww(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 Vw(e,t){const o=[],r=document.querySelectorAll('style, link[rel="stylesheet"]');for(const n of r)xv(e,n,t,o);return Promise.all(o)}function xv(e,t,o,r){if(t instanceof HTMLLinkElement){const n=t.cloneNode(!0);e.head.appendChild(n),o.set(t,n),r&&r.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),zw)}))}else if(t instanceof HTMLStyleElement)try{const n=t.cloneNode(!0);e.head.appendChild(n),_s(t,n),o.set(t,n)}catch{}}function _s(e,t){const o=e.textContent??"";if(o.trim()!=="")t.textContent=o;else try{t.textContent="";const r=e.sheet?.cssRules;if(r)for(const n of r)t.sheet.insertRule(n.cssText,t.sheet.cssRules.length)}catch{}}function Hw(e){for(const[t,o]of e)t instanceof HTMLStyleElement&&_s(t,o)}function $w(e,t){for(const[o,r]of e){if(!(o instanceof HTMLStyleElement)||(o.textContent??"").trim()!=="")continue;let n=0;try{n=o.sheet?.cssRules.length??0}catch{}n!==t.get(o)&&(t.set(o,n),_s(o,r))}}mv.displayName="PopoutWindow";var nr=10,Ro=-4,to=8,un=12,Np=12,Yw=150,Xw=25,Gw=e=>{const{controller:t,layout:o,children:r}=e,[n,i]=m.useState(o.getRect()),a=m.useRef(he.empty()),l=t.getClassName,c=m.useRef(null),d=m.useRef(null),f=m.useRef(null),u=m.useRef(null),p=m.useRef(null),g=m.useRef(null),x=m.useRef(null),w=m.useRef(null),k=m.useRef(null),b=m.useRef(null),h=m.useRef(!1),v=m.useRef(void 0);m.useEffect(()=>{a.current=n},[n]),m.useEffect(()=>{requestAnimationFrame(()=>{i(o.getRect())})},[o]);const _=m.useCallback(D=>{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 F=Nw(S),ne=Math.max(F.fullWidth,S.innerWidth),Y=Math.max(F.fullHeight,S.innerHeight);A=new he(-N.x,-N.y,ne,Y)}const V=D.clone();return V.clamp(A),V},[t]),y=m.useCallback(D=>{D.preventDefault(),D.stopImmediatePropagation()},[]);m.useEffect(()=>{const D=[d,f,u,p,g,x,w,k,b].map(S=>S.current).filter(S=>S!==null);return D.forEach(S=>S.addEventListener("touchstart",y,{passive:!1})),()=>{D.forEach(S=>S.removeEventListener("touchstart",y))}},[y]);const E=m.useRef(!1);m.useLayoutEffect(()=>{if(!E.current){E.current=!0;const D=_(n);D.equals(n)||(i(D),o.setRect(D))}},[_,n,o]),m.useEffect(()=>{const D=()=>{const V=[...t.getModel().getLayouts()],F=V[V.length-1][1];o!==F&&(h.current=!0)},S=t.getCurrentWindow()??window,N=()=>{h.current&&(v.current=S.setTimeout(()=>{v.current=void 0,t.moveWindowToFront(o.getLayoutId())},10),h.current=!1)},A=c.current;return A&&(A.addEventListener("pointerdown",D,{capture:!0}),A.addEventListener("pointerup",N)),()=>{A&&(A.removeEventListener("pointerdown",D,{capture:!0}),A.removeEventListener("pointerup",N)),v.current!==void 0&&(S.clearTimeout(v.current),v.current=void 0)}},[t,o]);const R=D=>{D.stopPropagation();const S={x:D.clientX-n.x,y:D.clientY-n.y};t.showOverlayOnAllWindows(!0),Bl(t.getCurrentDocument()??document,D,(N,A)=>{h.current&&(t.moveWindowToFront(o.getLayoutId()),h.current=!1);const V=new he(N-S.x,A-S.y,n.width,n.height),F=_(V);i(F),t.doAction(oe.moveFloat(o.getLayoutId(),F).setAdjusting(!0))},()=>{t.doAction(oe.moveFloat(o.getLayoutId(),a.current).setAdjusting(!1)),t.redrawLayout(),t.showOverlayOnAllWindows(!1)},()=>{t.doAction(oe.moveFloat(o.getLayoutId(),a.current).setAdjusting(!1)),t.redrawLayout(),t.showOverlayOnAllWindows(!1)})},P=t.getIcons(),I=t.isSupportsPopout()&&o.getRootRow()?.isAllowedInWindow()===!0,B=D=>{D.stopPropagation(),o.getRootRow()?.getChildren().length?t.getDragDropManager().startDockLayoutDrag(D.nativeEvent,o,c.current??void 0):D.preventDefault()},z=D=>{t.getDragDropManager().onDragEnded()},L=D=>{D.stopPropagation()},T=D=>{D.stopPropagation();const S=t.getScreenRect(o.getRect());t.doAction(oe.popoutFloat(o.getLayoutId(),S.toJson()))},j=(D,S)=>{const N=n,A={x:D.clientX,y:D.clientY};t.showOverlayOnAllWindows(!0),Bl(t.getCurrentDocument()??document,D,(V,F)=>{const ne=V-A.x,Y=F-A.y;let K=N.x,Z=N.y,$=N.width,Q=N.height;S.includes("n")&&(Z+=Y,Q-=Y),S.includes("s")&&(Q+=Y),S.includes("w")&&(K+=ne,$-=ne),S.includes("e")&&($+=ne);const re=new he(K,Z,Math.max(Yw,$),Math.max(Xw,Q)),ae=_(re);i(ae),t.doAction(oe.moveFloat(o.getLayoutId(),ae).setAdjusting(!0))},()=>{t.doAction(oe.moveFloat(o.getLayoutId(),a.current).setAdjusting(!1)),t.redrawLayout(),t.showOverlayOnAllWindows(!1)},()=>{t.doAction(oe.moveFloat(o.getLayoutId(),a.current).setAdjusting(!1)),t.redrawLayout(),t.showOverlayOnAllWindows(!1)}),D.stopPropagation()};return s.jsxs("div",{ref:c,className:l(U.FLEXLAYOUT__FLOAT_WINDOW),style:{left:n.x,top:n.y,width:n.width,height:n.height,position:"absolute"},children:[s.jsxs("div",{ref:d,className:l(U.FLEXLAYOUT__FLOAT_WINDOW_HEADER),onPointerDown:R,children:[s.jsx("div",{"data-layout-path":"/floatwindow/drag-handle",className:l(U.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:B,onDragEnd:z,onPointerDown:L,children:P.dragToDock}),s.jsx("div",{style:{flexGrow:1,display:"flex",justifyContent:"center",alignItems:"center",minWidth:0,overflow:"hidden"},children:o.getName()!==void 0?s.jsx("span",{"data-layout-path":"/floatwindow/title",className:l(U.FLEXLAYOUT__FLOAT_WINDOW_HEADER_TITLE),title:o.getName(),children:o.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}})})}),I&&s.jsx("button",{type:"button","data-layout-path":"/floatwindow/button/popout",className:l(U.FLEXLAYOUT__FLOAT_WINDOW_BUTTON),title:t.i18nName(De.Popout_Float_To_Window),"aria-label":t.i18nName(De.Popout_Float_To_Window),onClick:T,onPointerDown:L,children:P.popoutFloatWindow})]}),s.jsx("div",{className:l(U.FLEXLAYOUT__FLOAT_WINDOW_CONTENT),children:r}),s.jsx("div",{ref:f,style:{position:"absolute",zIndex:nr,top:Ro,left:to,right:to,height:to,cursor:"ns-resize"},onPointerDown:D=>j(D,"n")}),s.jsx("div",{ref:x,style:{position:"absolute",zIndex:nr,bottom:Ro,left:to,right:to,height:to,cursor:"ns-resize"},onPointerDown:D=>j(D,"s")}),s.jsx("div",{ref:p,style:{position:"absolute",zIndex:nr,top:to,bottom:to,right:Ro,width:to,cursor:"ew-resize"},onPointerDown:D=>j(D,"e")}),s.jsx("div",{ref:k,style:{position:"absolute",zIndex:nr,top:to,bottom:to,left:Ro,width:to,cursor:"ew-resize"},onPointerDown:D=>j(D,"w")}),s.jsx("div",{ref:b,style:{position:"absolute",zIndex:nr,top:Ro,left:Ro,width:un,height:un,cursor:"nwse-resize"},onPointerDown:D=>j(D,"nw")}),s.jsx("div",{ref:u,style:{position:"absolute",zIndex:nr,top:Ro,right:Ro,width:un,height:un,cursor:"nesw-resize"},onPointerDown:D=>j(D,"ne")}),s.jsx("div",{ref:w,style:{position:"absolute",zIndex:nr,bottom:Ro,left:Ro,width:un,height:un,cursor:"nesw-resize"},onPointerDown:D=>j(D,"sw")}),s.jsx("div",{ref:g,style:{position:"absolute",zIndex:nr,bottom:0,right:0,width:Np,height:Np,cursor:"nwse-resize"},onPointerDown:D=>j(D,"se")})]})},yv=({controller:e})=>{const t=[],o=e.getModel().getLayouts();let r=0,n=2e3;for(const[i,a]of o)a.isMainLayout()||(a.getType()==="window"&&e.isSupportsPopout()?(t.push(s.jsx(mv,{controller:e,layout:a,title:e.getPopoutWindowName()+" "+r,url:e.getPopoutURL()+"?id="+encodeURIComponent(i),onCloseLayout:e.onCloseLayout,children:s.jsx("div",{className:e.getProps().popoutClassName,children:s.jsx(na,{...e.getProps(),layoutId:i,path:a.getPath(),mainLayoutController:e})})},i)),r++):a.getType()==="float"&&(t.push(s.jsx(Gw,{controller:e,layout:a,zIndex:n,onCloseLayout:e.onCloseLayout,children:s.jsx(na,{...e.getProps(),layoutId:i,path:a.getPath(),mainLayoutController:e})},i+"float")),n++));return s.jsx(s.Fragment,{children:t})};yv.displayName="FloatingWindowContainer";var _v=e=>{const{controller:t,tabNode:o,selected:r,border:n,icons:i,path:a}=e,l=m.useRef(null),c=m.useRef(null),d=t.getKeyMap(),f=N=>{o.isEnableDrag()?(N.stopPropagation(),t.getDragDropManager().setDragNode(N.nativeEvent,o)):N.preventDefault()},u=N=>{N.stopPropagation(),t.getDragDropManager().onDragEnded()},p=N=>{oa(N)&&t.auxMouseClick(o,N)},g=N=>{t.showContextMenu(o,N)},x=()=>{t.doAction(oe.selectTab(o.getId()))},w=N=>{const A=l.current?.closest('[role="tablist"]');if(A){const V=Array.from(A.querySelectorAll('[role="tab"]'));V[V.indexOf(l.current)+N]?.focus()}},k=()=>{const N=l.current.ownerDocument,A=()=>Kb(N.getElementById(Tt("flexlayout-tab-",o.getId())));r?A():(x(),requestAnimationFrame(A))},b=N=>{t.getEditingTab()!==o&&(Go(N,d.focusTabToggle)?(k(),N.preventDefault()):N.key==="Enter"||N.key===" "?(x(),N.preventDefault()):(N.key==="ArrowLeft"||N.key==="ArrowUp")&&!ta(N)?(w(-1),N.preventDefault()):(N.key==="ArrowRight"||N.key==="ArrowDown")&&!ta(N)?(w(1),N.preventDefault()):Go(N,d.closeTab)&&o.isCloseable()&&(w(1),t.doAction(oe.deleteTab(o.getId())),N.preventDefault()))},h=()=>{const N=o.getCloseType();return!!(r||N===Yr.Always||N===Yr.Visible&&window.matchMedia&&window.matchMedia("(hover: hover) and (pointer: fine)").matches)},v=N=>{h()&&(t.doAction(oe.deleteTab(o.getId())),N.stopPropagation())},_=N=>{N.stopPropagation()},y=()=>{if(r)return!0;const N=o.getParent();return N instanceof qe&&N.getSelected()===-1&&N.getChildren()[0]===o},E=t.getEditingTab()===o,R=m.useCallback(N=>{l.current=N,t.registerMeasurable(o,"tabbutton",N)},[t,o]);m.useLayoutEffect(()=>{E&&c.current.select()},[E]),m.useEffect(()=>{if(E){const N=t.getCurrentDocument().body,A=V=>{V.target!==c.current&&t.setEditingTab(void 0)};return N.addEventListener("pointerdown",A),()=>N.removeEventListener("pointerdown",A)}},[E,t]);const P=N=>{N.stopPropagation()},I=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(o.getId(),N.target.value)),l.current?.focus())},B=t.getClassName;let z=B(U.FLEXLAYOUT__BORDER_BUTTON)+" "+B(U.FLEXLAYOUT__BORDER_BUTTON_+n);r?z+=" "+B(U.FLEXLAYOUT__BORDER_BUTTON__SELECTED):z+=" "+B(U.FLEXLAYOUT__BORDER_BUTTON__UNSELECTED),o.getClassName()!==void 0&&(z+=" "+o.getClassName());let L=0;o.getModel().isEnableRotateBorderIcons()===!1&&(n==="left"?L=o.getModel().getBorderLeftTabDirection()==="down"?-90:90:n==="right"&&(L=-90));const T=ju(t,o,L);let j=T.content?s.jsx("div",{className:B(U.FLEXLAYOUT__BORDER_BUTTON_CONTENT),children:T.content}):null;const D=T.leading?s.jsx("div",{className:B(U.FLEXLAYOUT__BORDER_BUTTON_LEADING),children:T.leading}):null;if(E&&(j=s.jsx("input",{ref:c,className:B(U.FLEXLAYOUT__TAB_BUTTON_TEXTBOX),"data-layout-path":a+"/textbox",type:"text","aria-label":t.i18nName(De.Rename_Tab),autoFocus:!0,defaultValue:o.getName(),onKeyDown:I,onPointerDown:P})),o.isCloseable()){const N=t.i18nName(De.Close_Tab);T.buttons.push(s.jsx("div",{"data-layout-path":a+"/button/close",title:N,"aria-hidden":"true",className:B(U.FLEXLAYOUT__BORDER_BUTTON_TRAILING),onPointerDown:_,onClick:v,children:typeof i.close=="function"?i.close(o):i.close},"close"))}const S=[wr(d.focusTabToggle),o.isCloseable()?wr(d.closeTab):void 0].filter(Boolean).join(" ")||void 0;return s.jsxs("div",{ref:R,id:Tt("flexlayout-tabbutton-",o.getId()),role:E?void 0:"tab","aria-selected":E?void 0:r,"aria-controls":E?void 0:Tt("flexlayout-tab-",o.getId()),"aria-label":E?void 0:T.name,"aria-keyshortcuts":E?void 0:S,tabIndex:E?-1:y()?0:-1,onKeyDown:b,"data-layout-path":a,className:z,onClick:x,onAuxClick:p,onContextMenu:g,title:o.getHelpText(),draggable:!0,onDragStart:f,onDragEnd:u,children:[D,j,T.buttons]})};_v.displayName="BorderButton";var wv=e=>{const{borderNode:t,controller:o,size:r}=e,n=m.useRef(null),i=m.useRef(null),a=m.useRef(null),l=m.useRef(null),c=m.useRef(null),d=m.useRef(null),[f,u]=m.useState(!1),p=m.useRef(null),g=o.getIcons();m.useEffect(()=>()=>p.current?.(),[]);const{userControlledPositionRef:x,onScroll:w,onScrollPointerDown:k,hiddenTabs:b,onMouseWheel:h,isDockStickyButtons:v,isShowHiddenTabs:_}=pv(o,t,ye.flip(t.getOrientation()),d,a,n,o.getClassName(U.FLEXLAYOUT__BORDER_BUTTON)),y=m.useCallback(re=>{n.current=re,o.registerMeasurable(t,"borderheader",re)},[o,t]),E=re=>{oa(re)&&o.auxMouseClick(t,re)},R=re=>{o.showContextMenu(t,re)},P=re=>{re.stopPropagation()},I=re=>{const ae=o.getShowOverflowMenu(),Le=b.map(ke=>({index:ke,node:t.getChildren()[ke]}));if(ae!==void 0)ae(t,re,Le,B);else{const ke=l.current;u(!0),p.current=uv(ke,t,Le,B,o,()=>{u(!1),p.current=null})}re.stopPropagation()},B=re=>{o.doAction(oe.selectTab(re.node.getId())),x.current=!1},z=re=>{const ae=t.getChildren()[t.getSelected()];ae!==void 0&&o.doAction(oe.popoutTab(ae.getId(),"window")),re.stopPropagation()},L=re=>{const ae=t.getChildren()[t.getSelected()];ae!==void 0&&o.doAction(oe.popoutTab(ae.getId(),"float")),re.stopPropagation()},T=o.getClassName,j=()=>{const re=[];for(let ae=0;ae{let re,ae=[],Le=[],ke;const ve={leading:re,buttons:ae,stickyButtons:Le,overflowPosition:void 0};if(o.customizeTabSet(t,ve),re=ve.leading,Le=ve.stickyButtons,ae=ve.buttons,ve.overflowPosition===void 0&&(ve.overflowPosition=Le.length),Le.length>0&&(v?ae=[...Le,...ae]:ke=s.jsx("div",{ref:c,onPointerDown:P,onDragStart:se=>{se.preventDefault()},className:T(U.FLEXLAYOUT__TAB_TOOLBAR_STICKY_BUTTONS_CONTAINER),children:Le},"sticky_buttons_container")),_){const se=o.i18nName(De.Overflow_Menu_Tooltip);let ce;if(typeof g.more=="function"){const X=b.map(fe=>({index:fe,node:t.getChildren()[fe]}));ce=g.more(t,X)}else ce=s.jsxs(s.Fragment,{children:[g.more,s.jsx("div",{className:T(U.FLEXLAYOUT__TAB_BUTTON_OVERFLOW_COUNT),children:b.length>0?b.length:""})]});ae.splice(Math.min(ve.overflowPosition,ae.length),0,s.jsx("button",{tabIndex:0,"aria-haspopup":"menu","aria-expanded":f,"aria-label":se,ref:l,className:T(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON)+" "+T(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_OVERFLOW)+" "+T(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_OVERFLOW_+t.getLocation().getName()),title:se,onClick:I,onPointerDown:P,children:ce},"overflowbutton"))}const Dt=t.getSelected();if(Dt!==-1){const se=t.getChildren()[Dt];if(se!==void 0&&o.isMainLayout()){if(se.isEnablePopoutFloatIcon()){const ce=o.i18nName(De.Popout_Tab_Float);ae.push(s.jsx("button",{tabIndex:0,title:ce,"aria-label":ce,className:T(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON)+" "+T(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_FLOAT),onClick:L,onPointerDown:P,children:typeof g.popoutFloat=="function"?g.popoutFloat(se):g.popoutFloat},"popout-float"))}if(o.isSupportsPopout()&&se.isEnablePopoutIcon()&&se.isAllowedInWindow()){const ce=o.i18nName(De.Popout_Tab);ae.push(s.jsx("button",{tabIndex:0,title:ce,"aria-label":ce,className:T(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON)+" "+T(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_FLOAT),onClick:z,onPointerDown:P,children:typeof g.popout=="function"?g.popout(se):g.popout},"popout"))}}}const J=s.jsx("div",{ref:i,className:T(U.FLEXLAYOUT__BORDER_TOOLBAR)+" "+T(U.FLEXLAYOUT__BORDER_TOOLBAR_+t.getLocation().getName()),children:ae},"toolbar");return{leading:re,toolbar:J,stickyBar:ke}},S=j(),{leading:N,toolbar:A,stickyBar:V}=D();let F=T(U.FLEXLAYOUT__BORDER)+" "+T(U.FLEXLAYOUT__BORDER_+t.getLocation().getName());t.getClassName()!==void 0&&(F+=" "+t.getClassName());let ne,Y;const K=r-1;t.getLocation()===ee.LEFT?(ne=o.getModel().getBorderLeftTabDirection()==="down"?{left:"100%",top:0}:{right:"100%",top:0},Y={width:K,overflowY:"auto"}):t.getLocation()===ee.RIGHT?(ne={left:"100%",top:0},Y={width:K,overflowY:"auto"}):(ne={left:0},Y={height:K,overflowX:"auto"});let Z;t.isEnableTabScrollbar()&&(Z=s.jsx("div",{ref:a,"aria-hidden":"true",className:T(U.FLEXLAYOUT__MINI_SCROLLBAR),onPointerDown:k}));let $;N&&($=s.jsx("div",{className:T(U.FLEXLAYOUT__BORDER_LEADING),children:N}));const Q=T(U.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER)+" "+T(U.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER_+t.getLocation().getName())+(t.getLocation()===ee.LEFT&&o.getModel().getBorderLeftTabDirection()==="down"?" "+T(U.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER_LEFT_DOWN):"");return s.jsxs("div",{ref:y,style:{display:"flex",flexDirection:t.getOrientation()===ye.VERT?"row":"column"},className:F,"data-layout-path":t.getPath(),onClick:E,onAuxClick:E,onContextMenu:R,onWheel:h,children:[$,s.jsxs("div",{className:T(U.FLEXLAYOUT__MINI_SCROLLBAR_CONTAINER),children:[s.jsxs("div",{ref:d,className:T(U.FLEXLAYOUT__BORDER_INNER)+" "+T(U.FLEXLAYOUT__BORDER_INNER_+t.getLocation().getName()),style:Y,onScroll:w,children:[s.jsx("div",{style:ne,role:o.getEditingTab()?.getParent()===t?void 0:"tablist","aria-orientation":o.getEditingTab()?.getParent()!==t&&(t.getLocation()===ee.LEFT||t.getLocation()===ee.RIGHT)?"vertical":void 0,className:Q,children:S}),V]}),Z]}),A]})};wv.displayName="BorderTabSet";function kv(e){const{controller:t,borderNode:o,show:r}=e,n=m.useRef(null),i=m.useCallback(f=>{n.current=f,t.registerMeasurable(o,"bordercontent",f)},[t,o]);let a=!0;const l={};o.getOrientation()===ye.HORZ?(l.width=o.getSize(),l.minWidth=o.getMinSize(),l.maxWidth=o.getMaxSize()):(l.height=o.getSize(),l.minHeight=o.getMinSize(),l.maxHeight=o.getMaxSize(),a=!1);const c=t.getClassName(U.FLEXLAYOUT__BORDER_TAB_CONTENTS),d=o.getLocation()===ee.LEFT||o.getLocation()===ee.TOP;if(o.isOverlay()){l.display="flex";const f={display:r?"flex":"none"};if(a){const p=t.getModel();for(const g of p.getBorderSet().getBorders())if(g!==o&&g.isOverlay()&&g.isShowing()&&g.getSelected()!==-1){const x=g.getSize()+p.getSplitterSize();g.getLocation()===ee.TOP?f.top=x:g.getLocation()===ee.BOTTOM&&(f.bottom=x)}}const u=t.getClassName(U.FLEXLAYOUT__BORDER_TAB_OVERLAY)+" "+t.getClassName(U.FLEXLAYOUT__BORDER_TAB_OVERLAY_+o.getLocation().getName());return s.jsxs("div",{className:u,style:f,children:[d&&s.jsx("div",{ref:i,style:l,className:c}),r&&s.jsx(Ai,{controller:t,node:o,index:0,horizontal:a}),!d&&s.jsx("div",{ref:i,style:l,className:c})]})}return l.display=r?"flex":"none",d?s.jsxs(s.Fragment,{children:[s.jsx("div",{ref:i,style:l,className:c}),r&&s.jsx(Ai,{controller:t,node:o,index:0,horizontal:a})]}):s.jsxs(s.Fragment,{children:[r&&s.jsx(Ai,{controller:t,node:o,index:0,horizontal:a}),s.jsx("div",{ref:i,style:l,className:c})]})}kv.displayName="BorderTab";var Ev=({controller:e,inner:t})=>{const o=e.getClassName(U.FLEXLAYOUT__LAYOUT_MAIN),r=e.getModel().getBorderSet().getBorderMap();if(e.isMainLayout()&&r.size>0){const n=s.jsx("div",{className:o,ref:e.getMainRef(),children:t}),i=new Map,a=new Map;for(const[f,u]of ee.values){const p=r.get(u);p&&p.isShowing()&&(!p.isAutoHide()||p.isAutoHide()&&(p.getChildren().length>0||e.getState().showHiddenBorder===u))&&(i.set(u,s.jsx(wv,{controller:e,borderNode:p,size:e.getState().calculatedBorderBarSize})),a.set(u,s.jsx(kv,{controller:e,borderNode:p,show:p.getSelected()!==-1})))}const l=e.getClassName(U.FLEXLAYOUT__LAYOUT_BORDER_CONTAINER),c=e.getClassName(U.FLEXLAYOUT__LAYOUT_BORDER_CONTAINER_INNER),d=s.jsxs("div",{className:c,style:{flexDirection:"column"},children:[a.get(ee.TOP),s.jsxs("div",{className:c,style:{flexDirection:"row"},children:[a.get(ee.LEFT),n,a.get(ee.RIGHT)]}),a.get(ee.BOTTOM)]});return s.jsxs("div",{className:l,style:{flexDirection:"column"},children:[i.get(ee.TOP),s.jsxs("div",{className:c,style:{flexDirection:"row"},children:[i.get(ee.LEFT),d,i.get(ee.RIGHT)]}),i.get(ee.BOTTOM)]})}else return s.jsx("div",{className:o,ref:e.getMainRef(),style:{position:"absolute",top:0,left:0,bottom:0,right:0,display:"flex"},children:t})};Ev.displayName="BorderContainer";var Tv=m.memo(e=>{Tv.displayName="DragTabButton";const{controller:t,tabNode:o}=e,r=m.useRef(null);m.useEffect(()=>{o.setTabStamp(r.current)},[o]);const n=t.getClassName,i=n(U.FLEXLAYOUT__DRAG_RECT);return s.jsx("div",{ref:r,className:i,children:s.jsx(ra,{controller:t,tabNode:o},o.getId())})},Kw);function Kw(e,t){return t.dragging}var na=m.forwardRef((e,t)=>{na.displayName="LayoutInternal";const[o,r]=m.useState({editingTab:void 0,showEdges:!1,showOverlay:!1,calculatedBorderBarSize:29,layoutRedrawRevision:0,fullRedrawRevision:0,showHiddenBorder:ee.CENTER}),n=m.useCallback(B=>{r(z=>({...z,...typeof B=="function"?B(z,e):B}))},[e]),i=m.useRef(null),[a,l]=m.useState(0),c=m.useRef(null),d=m.useRef(null),f=m.useRef(null),u=m.useRef(null),p=m.useMemo(()=>new qw(e,o,n),[]);p.setProps(e),p.setStateRaw(o),p.setSetState(n),p.setLayoutRef(i),p.setMoveablesHomeRef(c),p.setFindBorderBarSizeRef(d),p.setFindSplitterSizeRef(f),p.setMainRef(u);const g=e.model.getLayouts().get(p.getLayoutId());g.setController(p),m.useImperativeHandle(t,()=>p,[p]),m.useLayoutEffect(()=>{const B=p.syncLayoutMetrics();if(p.positionTabPanels(),p.isMainLayout()&&p.updateLayoutMetrics(),p.isReLayout()&&(p.redrawLayout(),p.setReLayout(!1)),i.current&&p.getCurrentDocument()!==void 0&&p.getCurrentDocument()!==i.current.ownerDocument&&l(z=>z+1),B){const z=i.current?.ownerDocument.defaultView??window,L=z.requestAnimationFrame(()=>{p.syncLayoutMetrics(),p.positionTabPanels(),p.isReLayout()&&(p.redrawLayout(),p.setReLayout(!1))});return()=>z.cancelAnimationFrame(L)}}),m.useEffect(()=>{const B=i.current.ownerDocument,z=B.defaultView;p.setCurrentDocument(B),p.setCurrentWindow(z);const L=new z.ResizeObserver(()=>{p.updateRect(),p.syncLayoutMetrics(),p.positionTabPanels(),p.updateLayoutMetrics(),p.isReLayout()&&(p.redrawLayout(),p.setReLayout(!1))});L.observe(i.current),p.setGeometryResizeObserver(L),d.current&&L.observe(d.current),f.current&&L.observe(f.current);const T=()=>{p.updateRect()};z.addEventListener("resize",T);const j=()=>{for(const[D,S]of p.getProps().model.getLayouts()){const N=S.getController();N&&N.redrawLayout()}};return p.isMainLayout()&&(document.addEventListener("visibilitychange",j),B.addEventListener("pointerdown",p.onOverlayBorderPointerDown,!0),B.addEventListener("keydown",p.onOverlayBorderKeyDown)),(p.isMainLayout()||p.getLayout()?.getType()==="window")&&B.addEventListener("keydown",p.onTabsetNavKeyDown),()=>{p.setGeometryResizeObserver(void 0),L.disconnect(),z.removeEventListener("resize",T),document.removeEventListener("visibilitychange",j),B.removeEventListener("pointerdown",p.onOverlayBorderPointerDown,!0),B.removeEventListener("keydown",p.onOverlayBorderKeyDown),B.removeEventListener("keydown",p.onTabsetNavKeyDown)}},[p,a]),m.useEffect(()=>{let B;if(!p.isMainLayout()&&p.getLayout().getType()==="window"){const z=p.getProps().mainLayoutController?.getRootDiv();if(z){const L=z,T=i.current;Lp(L,T),B=new MutationObserver(()=>{Lp(L,T)&&p.redrawLayout()}),B.observe(L,{attributeFilter:["style"]})}}return()=>{B&&B.disconnect()}},[p]),m.useEffect(()=>{const B=e.model;if(g.setToExportRectFunction((z,L)=>L==="window"?p.getScreenRect(z):p.getRelativeRect(z)),p.setLayout(g),p.isMainLayout()){const z={onAfterAction:p.onModelChange};return B.addChangeListener(z),()=>{B.removeChangeListener(z)}}},[e.model,p,g]);const x=p.isMainLayout()?s.jsxs("div",{className:p.getClassName(U.FLEXLAYOUT__LAYOUT_METRICS),children:[s.jsx("div",{ref:d,className:p.getClassName(U.FLEXLAYOUT__BORDER_SIZER),children:"FindBorderBarSize"},"findBorderBarSize"),s.jsx("div",{ref:f,className:p.getClassName(U.FLEXLAYOUT__SPLITTER_+"horz")},"findSplitterSize")]}):null;if(!i.current)return s.jsx("div",{ref:i,className:p.getClassName(U.FLEXLAYOUT__LAYOUT),children:x});const w=e.model,k=p.getLayoutId();w.getRootRow(k).calcMinMaxSize(),w.getRootRow(k).setPaths(e.path||""),p.isMainLayout()&&w.getBorderSet().setPaths();const b=s.jsx(sv,{controller:p,show:o.showOverlay},"__overlay__"),h=p.renderLayout(),v=s.jsx(Ev,{controller:p,inner:h}),_=p.renderTabContainers(),y=p.reorderComponents(_,p.getOrderedTabIds());let E=null,R=null,P=null,I=null;return p.isMainLayout()&&(E=s.jsx(yv,{controller:p}),R=p.reorderComponents(p.renderTabContents(),p.getOrderedTabMoveableIds()),P=s.jsx("div",{"aria-hidden":"true",className:p.getClassName(U.FLEXLAYOUT__LAYOUT_TAB_STAMPS),children:p.renderDragTabButtons()},"__dragTabButtons__"),I=s.jsx("div",{ref:c,className:p.getClassName(U.FLEXLAYOUT__LAYOUT_MOVEABLES_HOME)},"__moveables_home__")),s.jsxs("div",{ref:i,className:p.getClassName(U.FLEXLAYOUT__LAYOUT),onDragEnter:p.getDragDropManager().onDragEnterRaw,onDragLeave:p.getDragDropManager().onDragLeaveRaw,onDragOver:p.getDragDropManager().onDragOver,onDrop:p.getDragDropManager().onDrop,children:[x,I,b,v,y,R,E,P]})}),$o,qw=($o=class{constructor(t,o,r){O(this,"_props");O(this,"_state");O(this,"_setState");O(this,"_layoutRef");O(this,"_moveablesHomeRef");O(this,"_findBorderBarSizeRef");O(this,"_findSplitterSizeRef");O(this,"_mainRef");O(this,"_orderedTabIds");O(this,"_orderedTabMoveableIds");O(this,"_currentDocument");O(this,"_currentWindow");O(this,"_showOverlay",!1);O(this,"_supportsPopout");O(this,"_popoutURL");O(this,"_icons");O(this,"_dragDropManager");O(this,"_layoutId");O(this,"_layout");O(this,"_mainController");O(this,"_popoutWindowName");O(this,"_cachedLayoutDOMRect");O(this,"_reLayout");O(this,"_measurables",new Map);O(this,"_tabPanels",new Map);O(this,"_lastRect",he.empty());O(this,"_lastSplitterSize",8);O(this,"_geometryResizeObserver");O(this,"updateRect",()=>{if(this._layoutRef.current){let t=this._layoutRef.current;if(!this._layout.isMainLayout()&&this._layout.getType()==="float"){const r=t.closest("."+this.getClassName(U.FLEXLAYOUT__FLOAT_WINDOW));r instanceof HTMLDivElement&&(t=r)}let o=he.fromDomRect(t.getBoundingClientRect());if(!this._layout.isMainLayout()&&this._layout.getType()==="float"){const r=this._mainController.getDomRect();o=o.relativeTo(r)}!o.equalsWhenRounded(this._lastRect)&&o.width!==0&&o.height!==0&&(this._lastRect=o,this._layout.setRect(o),this.redrawLayout())}});O(this,"onModelChange",t=>{const o=t instanceof Yb?t.actions:[t];for(const r of o)if(r.type==oe.DELETE_TAB&&this._state.showHiddenBorder!==ee.CENTER&&this._props.model.getBorderSet().getBorderMap().get(this._state.showHiddenBorder).getChildren().length===0){this._setState({showHiddenBorder:ee.CENTER});break}if(t.isAdjusting()&&(t.type===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)});O(this,"onOverlayBorderPointerDown",t=>{const o=this._props.model.getBorderSet().getBorders().filter(l=>l.isOverlay()&&l.getSelected()!==-1);if(o.length===0||t.target?.closest?.("."+this.getClassName(U.FLEXLAYOUT__POPUP_MENU_CONTAINER)+",."+this.getClassName(U.FLEXLAYOUT__FLOAT_WINDOW)+",."+this.getClassName(U.FLEXLAYOUT__FLOATING_WINDOW_CONTENT)+",."+this.getClassName(U.FLEXLAYOUT__BORDER_TAB_OVERLAY)))return;const r=this.getDomRect();if(!r)return;const n=t.clientX-r.x,i=t.clientY-r.y,a=this._props.model.getRootRow(it.MAIN_LAYOUT_ID)?.getRect();if(!(!a||!a.contains(n,i)))for(const l of o)l.getContentRect()?.contains(n,i)||this.closeOverlayBorder(l)});O(this,"onOverlayBorderKeyDown",t=>{if(!Go(t,this.getKeyMap().closeOverlayBorder))return;const o=this._currentDocument?.activeElement;if(!o)return;const r=this._props.model.getBorderSet().getBorders().filter(n=>n.isOverlay()&&n.getSelected()!==-1);for(const n of r){const i=n.getSelectedNode(),a=this._currentDocument.getElementById(Tt("flexlayout-tab-",i.getId())),l=this._currentDocument.getElementById(Tt("flexlayout-tabbutton-",i.getId()));if(a&&a.contains(o)||o===l){this.closeOverlayBorder(n),t.preventDefault();break}}});O(this,"onTabsetNavKeyDown",t=>{if(t.defaultPrevented)return;const o=this.getKeyMap();let r;if(Go(t,o.focusNextTabset))r=1;else if(Go(t,o.focusPreviousTabset))r=-1;else return;this.focusAdjacentTabset(r)&&t.preventDefault()});O(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())}});O(this,"getClassName",t=>this._props.classNameMapper===void 0?t:this._props.classNameMapper(t));O(this,"onCloseLayout",t=>{this.doAction(oe.closePopout(t.getLayoutId()))});this._props=t,this._state=o,this._setState=r,this._orderedTabIds=[],this._orderedTabMoveableIds=[],this._supportsPopout=t.supportsPopout!==void 0?t.supportsPopout:Zw,this._popoutURL=t.popoutURL?t.popoutURL:"popout.html",this._icons={...Jw,...t.icons},this._layoutId=t.layoutId?t.layoutId:it.MAIN_LAYOUT_ID,this._mainController=t.mainLayoutController?t.mainLayoutController:this,this._dragDropManager=new Bw(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(Pu,{controller:this,rowNode:this._props.model.getRootRow(this._layoutId)},"__row__"),s.jsx(vv,{controller:this})]})}renderTabContainers(){const t=new Map;return this._props.model.visitLayoutNodes(this._layoutId,o=>{if(o instanceof Se){const r=o,n=r.isSelected(),i=r.isRendered(),a=r.isEnableRenderOnDemand();(i||n||!a)&&t.set(r.getId(),s.jsx(gv,{controller:this,tabNode:r,selected:n},r.getId()))}}),t}renderTabContents(){const t=new Map;for(const[o,r]of this._props.model.getLayouts())this._props.model.visitLayoutNodes(o,n=>{if(n instanceof Se){const i=n,a=i.isSelected(),l=i.isRendered(),c=i.isEnableRenderOnDemand(),d=i.getParent().getContentRect(),f=a||!c;if(l||f&&d.width>0&&d.height>0){const u=i.getMoveableElement();u.style.overflow=i.isEnableScrollbars()?"auto":"hidden";const p=r.getWindowId()||"",g=i.getId()+(i.isEnableWindowReMount()?p:"");t.set(i.getId(),Io.createPortal(s.jsx(bv,{controller:this,tabNode:i,windowId:p,visible:f,fullRedrawRevision:this._state.fullRedrawRevision,parentRedrawRevision:this._props.parentRedrawRevision},g),u,g)),i.setRendered(!0)}}});return t}renderDragTabButtons(){const t=[];return this._props.model.visitNodes(o=>{if(o instanceof Se){const r=o;t.push(s.jsx(Tv,{controller:this,tabNode:r,dragging:rl},r.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 o=this._props.onAction(t);return o!==void 0?this._props.model.doAction(o):void 0}else return this._props.model.doAction(t)}applyMeasuredGeometry(){this.syncLayoutMetrics(),this.positionTabPanels(),this.isReLayout()&&(this.redrawLayout(),this.setReLayout(!1))}applyAdjustingWeights(t){const o=this._props.model.getNodeById(t.data.nodeId);if(!(o instanceof He)){this.redrawLayout();return}const r=t.data.weights,n=o.getChildren();for(let i=0;it.has(i)),n=new Set(r);for(const i of t.keys())n.has(i)||r.push(i);return o.splice(0,o.length,...r),o.map(i=>t.get(i))}checkForBorderToShow(t,o){const r=this.getBoundingClientRect(this._mainRef.current),n=r.getCenter(),i=10,a=100/2;let l=!1;this._props.model.isEnableEdgeDock()&&this._state.showHiddenBorder===ee.CENTER&&(o>n.y-a&&on.x-a&&t=r.getRight()-i?c=ee.RIGHT:o<=r.y+i?c=ee.TOP:o>=r.getBottom()-i&&(c=ee.BOTTOM)),c!==this._state.showHiddenBorder&&this.setState({showHiddenBorder:c})}closeOverlayBorder(t){const o=t.getSelectedNode();if(o===void 0)return;const r=this._currentDocument,n=r?.getElementById(Tt("flexlayout-tab-",o.getId())),i=!!r&&!!n&&n.contains(r.activeElement);this.doAction(oe.selectTab(o.getId())),i&&r.getElementById(Tt("flexlayout-tabbutton-",o.getId()))?.focus()}focusAdjacentTabset(t){const o=this._currentDocument,r=o?.activeElement;if(!o||!r||!this.getRootDiv()?.contains(r))return!1;const n=r.tagName;if(n==="INPUT"||n==="TEXTAREA"||r.isContentEditable||r.closest('[role="menu"]')||this._props.model.getMaximizedTabset(this._layoutId)!==void 0)return!1;const i=[];if(this._props.model.visitLayoutNodes(this._layoutId,d=>{d instanceof Oe&&d.getSelectedNode()!==void 0&&i.push(d)}),i.length<2)return!1;const a=d=>this._measurables.get("tabset:"+d.getId())?.element.contains(r)?!0:!!o.getElementById(Tt("flexlayout-tab-",d.getSelectedNode().getId()))?.contains(r);let l=i.findIndex(a);if(l===-1){const d=this._props.model.getActiveTabset(this._layoutId);l=d!==void 0?i.indexOf(d):0,l===-1&&(l=0)}const c=i[(l+t+i.length)%i.length];return o.getElementById(Tt("flexlayout-tabbutton-",c.getSelectedNode().getId()))?.focus(),this.doAction(oe.setActiveTabset(c.getId(),this._layoutId)),!0}registerMeasurable(t,o,r){const n=o+":"+t.getId(),i=this._measurables.get(n);r?this._measurables.set(n,{kind:o,node:t,element:r}):this._measurables.delete(n),o!=="tabbutton"&&(i&&this._geometryResizeObserver?.unobserve(i.element),r&&this._geometryResizeObserver?.observe(r))}setGeometryResizeObserver(t){if(this._geometryResizeObserver=t,t)for(const{kind:o,element:r}of this._measurables.values())o!=="tabbutton"&&t.observe(r)}syncLayoutMetrics(){this._cachedLayoutDOMRect=void 0;let t=!1;for(const{kind:o,node:r,element:n}of this._measurables.values()){if(!n.isConnected)continue;const i=this.getBoundingClientRect(n);switch(o){case"row":case"tabset":i.equalsWhenRounded(r.getRect())||(r.setRect(i),t=!0);break;case"tabstrip":i.equalsWhenRounded(r.getTabStripRect())||(r.setTabStripRect(i),t=!0);break;case"tabsetcontent":{const a=r;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(r.getTabRect())||(r.setTabRect(i),t=!0);break;case"borderheader":i.equalsWhenRounded(r.getRect())||(r.setTabHeaderRect(i),t=!0);break;case"bordercontent":{const a=r;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,o){o?this._tabPanels.set(t.getId(),{node:t,element:o}):this._tabPanels.delete(t.getId())}positionTabPanels(){for(const{node:t,element:o}of this._tabPanels.values()){const r=t.getParent(),n=r.getContentRect();let i=t.isSelected();r instanceof Oe?this._props.model.getMaximizedTabset(this._layoutId)!==void 0&&!r.isMaximized()&&(i=!1):r instanceof qe&&(r.isShowing()||(i=!1)),n.positionElement(o),o.style.display=i?"":"none",t.setRect(n),t.setVisible(i)}}addTabWithDragAndDrop(t,o,r){this._dragDropManager.addTabWithDragAndDrop(t,o,r)}moveTabWithDragAndDrop(t,o){this._dragDropManager.moveTabWithDragAndDrop(t,o)}setDragComponent(t,o,r,n){this._dragDropManager.setDragComponent(t,o,r,n)}getMoveablesHome(){return this._moveablesHomeRef.current}getProps(){return this._props}getKeyMap(){return Lw(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&&!$o.Windows.has(t)&&$o.Windows.set(t,pn())}getWindowId(){if(this.getCurrentWindow())return $o.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 o=this.getDomRect();return o?he.getBoundingClientRect(t).relativeTo(o):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 o=t.clone(),r=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 o.x=this._currentWindow.screenX+this._currentWindow.scrollX+l/2+r.x+o.x,o.y=this._currentWindow.screenY+this._currentWindow.scrollY+(a-l/2)+r.y+o.y,o.height+=a,o.width+=l,o}getRelativeRect(t){const o=t.clone();if(!this._layout.isMainLayout()){const r=this._layout.getRect();o.x+=r.x,o.y+=r.y}return o}moveWindowToFront(t){this.doAction(oe.movePopoutToFront(t))}addTabToTabSet(t,o){if(this._props.model.getNodeById(t)!==void 0)return this.doAction(oe.addTab(o,t,ee.CENTER,-1))}addTabToActiveTabSet(t){const o=this._props.model.getActiveTabset(this._layoutId);if(o!==void 0)return this.doAction(oe.addTab(t,o.getId(),ee.CENTER,-1))}maximize(t){this.doAction(oe.maximizeToggle(t.getId(),this.getLayoutId()))}customizeTab(t,o){this._props.onRenderTab&&this._props.onRenderTab(t,o)}customizeTabSet(t,o){this._props.onRenderTabSet&&this._props.onRenderTabSet(t,o)}i18nName(t,o){let r;return this._props.i18nMapper&&(r=this._props.i18nMapper(t,o)),r===void 0&&(r=t+(o===void 0?"":o)),r}getShowOverflowMenu(){return this._props.onShowOverflowMenu}getTabSetPlaceHolderCallback(){return this._props.onTabSetPlaceHolder}showContextMenu(t,o){this._props.onContextMenu&&this._props.onContextMenu(t,o)}auxMouseClick(t,o){this._props.onAuxMouseClick&&this._props.onAuxMouseClick(t,o)}showOverlay(t){this._showOverlay!==t&&(this._showOverlay=t,this.setState({showOverlay:t}),ol(!t,this._currentDocument))}showOverlayOnAllWindows(t){for(const[,o]of this._props.model.getLayouts())o.getController()&&o.getController().showOverlay(t)}},O($o,"Windows",new WeakMap),$o),Jw={close:s.jsx(il,{}),pin:s.jsx(ev,{}),closeTabset:s.jsx(il,{}),closeFloatPopout:s.jsx(il,{}),popout:s.jsx(gd,{}),popoutFloat:s.jsx(nv,{}),maximize:s.jsx(tv,{}),restore:s.jsx(av,{}),more:s.jsx(ov,{}),edgeArrow:s.jsx(rv,{}),activeTabset:s.jsx(lv,{}),dragToDock:s.jsx(iv,{}),popoutFloatWindow:s.jsx(gd,{})},Zw=Gb(),Rv=m.forwardRef((e,t)=>{const o=m.useRef(null),r=m.useRef(e.model),n=m.useRef(0);r.current!==e.model&&(e.model.getAdoptedFromModel()!==r.current&&n.current++,r.current=e.model),Rv.displayName="Layout",m.useImperativeHandle(t,()=>({redraw:()=>{o.current?.redrawLayoutAndTabContent()},addTabToTabSet:(a,l)=>o.current?.addTabToTabSet(a,l),addTabWithDragAndDrop:(a,l,c)=>{o.current?.addTabWithDragAndDrop(a,l,c)},moveTabWithDragAndDrop:(a,l)=>{o.current?.moveTabWithDragAndDrop(a,l)},addTabToActiveTabSet:a=>o.current?.addTabToActiveTabSet(a),setDragComponent:(a,l,c,d)=>{o.current?.setDragComponent(a,l,c,d)},editTabName:a=>{const l=o.current?.getModel().getNodeById(a);l instanceof Se&&l.isEnableRename()&&l.getLayout().getController()?.setEditingTab(l)},getRootDiv:()=>o.current.getRootDiv()}));const i={};return s.jsx(na,{ref:o,...e,parentRedrawRevision:i},n.current)});const Op=20,Qw="bv-nodepack:layout-profiles:v1:",Bu=new Map,bd="bv-layout-session-changed",Sv=e=>`${Qw}${e}`;function zu(e){try{const t=JSON.parse(localStorage.getItem(Sv(e))??"");if(t?.schemaVersion===1&&Array.isArray(t.profiles))return t}catch{}return{schemaVersion:1,profiles:[]}}function Lv(e,t){localStorage.setItem(Sv(e),JSON.stringify(t))}const e0=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 Ap(e){const t=zu(e.editorType),o=e0(e.name),r=e.id??crypto.randomUUID();if(t.profiles.find(l=>l.name.localeCompare(o,void 0,{sensitivity:"accent"})===0&&l.id!==r))throw new Error("A layout with this name already exists.");const i={...e,id:r,name:o,schemaVersion:1,updatedAt:new Date().toISOString()},a=t.profiles.some(l=>l.id===r)?t.profiles.map(l=>l.id===r?i:l):[...t.profiles,i];if(a.length>Op)throw new Error(`A maximum of ${Op} layouts can be saved for this editor.`);return Lv(e.editorType,{schemaVersion:1,profiles:a,selectedId:r}),i}function t0(e,t){const o=zu(e);Lv(e,{...o,profiles:o.profiles.filter(r=>r.id!==t),selectedId:o.selectedId===t?void 0:o.selectedId})}function al(e,t,o,r,n=!0){Bu.set(e,{layout:structuredClone(t),status:o,profileId:r}),n&&window.dispatchEvent(new CustomEvent(bd,{detail:{key:e}}))}function xi(e){const t=Bu.get(e);return t?structuredClone(t):void 0}function o0(e){Bu.delete(e)}function r0(e,t){return e.editorType===t.editorType&&e.editorVersion===t.editorVersion&&e.library===t.library&&e.signature===t.signature}const Dp="flexlayout-react@0.10.5";function n0(e){return{global:{tabEnableClose:!1,tabEnablePopout:!1,tabEnablePopoutIcon:!1,tabEnablePopoutFloatIcon:!0,tabSetMinWidth:180,tabSetMinHeight:130},borders:[],layout:{type:"row",children:e.map(t=>({type:"tabset",weight:t.weight,minWidth:t.minWidth,children:[{type:"tab",id:t.id,name:t.title,component:t.id,enablePopoutFloatIcon:!0}]}))}}}const i0=new Set([oe.MOVE_NODE,oe.DELETE_TAB,oe.DELETE_TABSET,oe.RENAME_TAB]),a0=e=>i0.has(e.type)?"modified":"adjusted";function l0(e){o0(e)}function Cv({storageId:e,panels:t,resetSignal:o=0,defaultModel:r,onStatus:n}){const i=JSON.stringify({panels:t.map(u=>`${u.id}:${u.weight}`),defaultModel:r}),a=m.useMemo(()=>r??n0(t),[i]),[l,c]=m.useState(()=>it.fromJson(xi(e)?.layout??a)),d=m.useMemo(()=>new Map(t.map(u=>[u.id,u.content])),[t]);m.useEffect(()=>{const u=xi(e);c(it.fromJson(u?.layout??a)),n?.(u?.status??"saved")},[a,i,e]),m.useEffect(()=>{o&&(l0(e),c(it.fromJson(a)),n?.("saved"))},[a,o,e]),m.useEffect(()=>{const u=p=>{if(p.detail?.key!==e)return;const g=xi(e);g&&(c(it.fromJson(g.layout)),n?.(g.status))};return window.addEventListener(bd,u),()=>window.removeEventListener(bd,u)},[n,e]);const f=u=>u.type===oe.POPOUT_TAB&&u.data.type==="float"&&l.getNodeById(u.data.node)?.getLayoutId()!==it.MAIN_LAYOUT_ID?void 0:u;return s.jsx("div",{className:"bv-ui-dock flexlayout__theme_dark",children:s.jsx(Rv,{model:l,factory:u=>d.get(u.getComponent()??"")??null,constrainFloatPanels:!0,onAction:f,onModelChange:(u,p)=>{c(u);const g=xi(e),x=g?.status==="modified"?"modified":a0(p);al(e,u.toJson(),x,g?.profileId,!1),n?.(x)}})})}let cr=[];const vd=new Set,Nv=()=>vd.forEach(e=>e());function No(e){const t=e.id??`${e.title}:${e.message??""}`,o=cr.findIndex(n=>n.id===t),r={...e,id:t};return cr=o>=0?[...cr.slice(0,o),r,...cr.slice(o+1)]:[...cr,r].slice(-3),Nv(),t}function s0(e){cr=cr.filter(t=>t.id!==e),Nv()}const c0=e=>(vd.add(e),()=>vd.delete(e)),Mp=()=>cr;function d0(){const e=m.useSyncExternalStore(c0,Mp,Mp),t=m.useCallback(()=>{const o=document.getElementById("bv-global-toast-stack");if(!o)return;const r=[...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,...r.map(i=>Math.max(0,window.innerHeight-i.top+8)));o.style.setProperty("--bv-toast-bottom",`${n}px`)},[]);return m.useEffect(()=>{const o=r=>{const n=r.detail;n?.title&&No({title:n.title,message:n.message,tone:n.tone??"neutral",duration:n.duration??4500})};return window.addEventListener("bv-show-toast",o),()=>window.removeEventListener("bv-show-toast",o)},[]),m.useEffect(()=>{t();const o=new ResizeObserver(t),r=new MutationObserver(t);return document.querySelectorAll("body *").forEach(n=>{n.offsetParent!==null&&n.getBoundingClientRect().bottom>window.innerHeight-180&&o.observe(n)}),r.observe(document.body,{childList:!0,subtree:!0}),window.addEventListener("resize",t),()=>{o.disconnect(),r.disconnect(),window.removeEventListener("resize",t)}},[t]),e.length?Io.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(o=>s.jsx(k_,{tone:o.tone,title:o.title,duration:o.duration,onClose:()=>s0(o.id),children:o.message},o.id))}),document.body):null}const oo=({children:e,className:t=""})=>s.jsx("svg",{className:t,viewBox:"0 0 24 24","aria-hidden":"true",children:e}),Ov=m.createContext({narrow:!1,minimal:!1,menuOverflow:!1}),Av=()=>m.useContext(Ov);function u0(e){const t=e.mode==="workspace",o=m.useRef(null),[r,n]=m.useState(1/0),[i,a]=m.useState(!1),l=m.useRef(null);m.useEffect(()=>{const d=o.current;if(!d)return;const f=new ResizeObserver(u=>n(u[0]?.contentRect.width??d.clientWidth));return f.observe(d),()=>f.disconnect()},[]);const c=m.useMemo(()=>({narrow:r<760,minimal:r<620,menuOverflow:r<520}),[r]);return s.jsx(Ov.Provider,{value:c,children:s.jsxs("header",{ref:o,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(oo,{children:s.jsx("path",{d:"M12 3.5a8.5 8.5 0 1 0 8.5 8.5c0-3.2-2.1-5.7-5.1-5.7-2.4 0-4.1 1.7-4.1 3.8 0 1.7 1.2 2.9 2.8 2.9 1.4 0 2.4-.9 2.4-2.1"})})}),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:d=>window.dispatchEvent(new CustomEvent(Pl,{detail:{anchor:d.currentTarget}})),children:s.jsxs(oo,{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(d=>!d),children:"•••"}),s.jsx(Lr,{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(oo,{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(oo,{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(oo,{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(oo,{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(oo,{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(oo,{children:s.jsx("path",{d:"m7 7 10 10M17 7 7 17"})})})]})]})})}const ui=(e,t)=>{const o=Math.max(280,window.innerWidth-32),r=Math.max(240,window.innerHeight-32),n=Math.min(t.width,420,o),i=Math.min(t.height,r),a=Math.max(n,Math.min(e.width,o)),l=Math.max(i,Math.min(e.height,r));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 ei({open:e,title:t,shortTitle:o,context:r,center:n,children:i,status:a,actions:l,activationToken:c=0,allowWorkspace:d=!0,initialMode:f="floating",initialGeometry:u,minSize:p={width:360,height:240},mode:g,className:x="",bodyClassName:w="",menuVisible:k,onMenuVisible:b,onClose:h,onGeometry:v,onModeChange:_}){const y=o??(t==="BV Regional Editor"?"Reg. Editor":t==="Regional Quick Edit"?"Quick Edit":void 0),E=()=>ui({x:Math.max(16,(window.innerWidth-(u?.width??760))/2),y:Math.max(16,(window.innerHeight-(u?.height??640))/2),width:u?.width??760,height:u?.height??640,...u},p),[R,P]=m.useState(d?f:"floating"),[I,B]=m.useState(!1),[z,L]=m.useState(E),T=g??R,j=m.useRef(null),D=m.useRef(null),S=m.useRef(z),N=m.useRef(u),A=m.useRef();m.useEffect(()=>{S.current=z},[z]),m.useEffect(()=>{e&&B(!1)},[e]),m.useEffect(()=>{const $=j.current;if(!(!e||!$))return D.current=document.activeElement instanceof HTMLElement&&!$.contains(document.activeElement)?document.activeElement:D.current,ww($)},[e]),m.useEffect(()=>{const $=j.current;if(!$)return;const Q=()=>{B(!1),requestAnimationFrame(()=>$.focus({preventScroll:!0}))},re=()=>B(!0);return $.addEventListener("bv-ui-activate",Q),$.addEventListener("bv-ui-minimize",re),()=>{$.removeEventListener("bv-ui-activate",Q),$.removeEventListener("bv-ui-minimize",re)}},[]),m.useEffect(()=>{const $=j.current;if(!$)return;const Q=re=>{const ae=re.detail;d&&ae?.mode&&(P(ae.mode),_?.(ae.mode)),ae?.mode==="floating"&&ae.geometry&&L(ui(ae.geometry,p))};return $.addEventListener("bv-ui-set-window-state",Q),()=>$.removeEventListener("bv-ui-set-window-state",Q)},[d,p.height,p.width,_]),m.useEffect(()=>{e&&(B(!1),requestAnimationFrame(()=>j.current?.focus({preventScroll:!0})))},[c,e]),m.useEffect(()=>{const $=N.current;N.current=u,u&&L(Q=>ui(vw(Q,$,u),p))},[u?.height,u?.width,u?.x,u?.y,p.height,p.width]),m.useEffect(()=>{if(!e)return;const $=()=>L(Q=>ui(Q,p));return window.addEventListener("resize",$),()=>window.removeEventListener("resize",$)},[p.height,p.width,e]);const V=$=>{T!=="floating"||$.button!==0||$.target.closest("button,input,select,textarea")||(A.current={pointerId:$.pointerId,startX:$.clientX,startY:$.clientY,kind:"move",x:z.x,y:z.y},$.currentTarget.setPointerCapture($.pointerId),$.preventDefault())},F=$=>Q=>{T!=="floating"||Q.button!==0||(A.current={pointerId:Q.pointerId,startX:Q.clientX,startY:Q.clientY,kind:"resize",direction:$,geometry:z},Q.currentTarget.setPointerCapture(Q.pointerId),Q.preventDefault(),Q.stopPropagation())},ne=$=>{const Q=A.current;if(!Q||Q.pointerId!==$.pointerId)return;const re={x:$.clientX-Q.startX,y:$.clientY-Q.startY},ae={...p,width:Math.min(p.width,420)};L(Le=>ui(Q.kind==="move"?{...Le,x:Q.x+re.x,y:Q.y+re.y}:bw(Q.geometry,re,Q.direction,ae),p))},Y=$=>{A.current?.pointerId===$.pointerId&&(A.current=void 0,requestAnimationFrame(()=>v?.(S.current)))};if(!e)return null;const K=T==="workspace"?void 0:{left:z.x,top:z.y,width:z.width,height:z.height},Z=()=>{h(),requestAnimationFrame(()=>D.current?.focus({preventScroll:!0}))};return s.jsxs(s.Fragment,{children:[I&&s.jsx(ws,{title:t,onRestore:()=>B(!1),onClose:Z}),s.jsxs("div",{ref:j,tabIndex:-1,hidden:I,className:`bv-managed-window ${T} ${x}`.trim(),role:"dialog","aria-modal":T==="workspace","aria-label":t,style:K,onPointerDownCapture:()=>j.current&&Rp(j.current),onFocusCapture:()=>j.current&&Rp(j.current),onPointerMove:ne,onPointerUp:Y,onPointerCancel:Y,onKeyDown:$=>{if($.key==="Escape"&&![...document.querySelectorAll(".bv-anchored-popover,[role='listbox'],[role='menu']")].some(re=>re.offsetParent!==null)){$.preventDefault(),$.stopPropagation(),Z();return}$.stopPropagation()},children:[s.jsxs("div",{className:"bv-managed-window-surface",children:[s.jsx(u0,{title:t,shortTitle:y,context:r,center:n,mode:T,allowWorkspace:d,menuVisible:k,onMenuVisible:b,onMode:()=>{if(!d)return;const $=T==="workspace"?"floating":"workspace";P($),_?.($)},onMinimize:()=>B(!0),onClose:Z,onPointerDown:V}),s.jsx("div",{className:`bv-managed-window-body ${w}`.trim(),children:i}),(a||l)&&s.jsx(f0,{status:a??null,actions:l,stacked:T==="floating"&&z.width<700,minimal:T==="floating"&&z.width<470})]}),T==="floating"&&["n","ne","e","se","s","sw","w","nw"].map($=>s.jsx("div",{className:`bv-window-resize-handle ${$}`,"aria-hidden":"true",onPointerDown:F($)},$))]})]})}function f0({status:e,actions:t,warning:o=!1,stacked:r=!1,minimal:n=!1}){return s.jsxs("footer",{className:`bv-ui-window-footer${o?" has-warning":""}${r?" 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 Fu({primary:e,secondary:t,overflow:o=[]}){return s.jsxs("div",{className:"bv-footer-action-set",children:[t&&s.jsx("div",{className:"bv-footer-secondary-actions",children:t}),o.length>0&&s.jsx(Tu,{label:"More",actions:o,intent:"ghost",density:"compact"}),s.jsx("div",{className:"bv-footer-primary-action",children:e})]})}function ws({title:e,onRestore:t,onClose:o}){const r=m.useMemo(()=>{let n=document.getElementById("bv-ui-window-shelf");return n||(n=document.createElement("div"),n.id="bv-ui-window-shelf",n.className="bv-ui-window-shelf",document.body.append(n)),n},[]);return m.useEffect(()=>{const n="#graph-canvas, .graph-canvas-container, nav, aside, [role='navigation'], .side-tool-bar-container, .side-bar-panel",i=()=>{const u=document.querySelector("#graph-canvas, .graph-canvas-container")?.getBoundingClientRect()??null,p=[...document.querySelectorAll("nav, aside, [role='navigation'], .side-tool-bar-container, .side-bar-panel")].map(x=>x.getBoundingClientRect()),g=mw(u,p,{width:window.innerWidth,height:window.innerHeight});r.style.setProperty("--bv-ui-window-shelf-left",`${g.left}px`),r.style.setProperty("--bv-ui-window-shelf-bottom",`${g.bottom}px`)},a=new ResizeObserver(i),l=new Set,c=()=>document.querySelectorAll(n).forEach(f=>{l.has(f)||(l.add(f),a.observe(f))}),d=new MutationObserver(()=>{c(),i()});return c(),d.observe(document.body,{childList:!0,subtree:!0}),window.addEventListener("resize",i),i(),()=>{d.disconnect(),a.disconnect(),window.removeEventListener("resize",i)}},[r]),m.useEffect(()=>()=>{requestAnimationFrame(()=>{r.childElementCount||r.remove()})},[r]),Io.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(oo,{children:s.jsx("path",{d:"M12 3.5a8.5 8.5 0 1 0 8.5 8.5c0-3.2-2.1-5.7-5.1-5.7-2.4 0-4.1 1.7-4.1 3.8 0 1.7 1.2 2.9 2.8 2.9 1.4 0 2.4-.9 2.4-2.1"})})}),s.jsx("span",{children:e})]}),o&&s.jsx("button",{type:"button",className:"bv-ui-window-shelf-close","aria-label":`Close ${e}`,title:`Close ${e}`,onClick:o,children:s.jsx(oo,{children:s.jsx("path",{d:"m7 7 10 10M17 7 7 17"})})})]}),r)}function ba({label:e,value:t,options:o,onNavigate:r}){const n=m.useSyncExternalStore(fw,$n,$n),i=n==="keep",a=Av(),[l,c]=m.useState(!1),d=m.useRef(null),f=o.filter(k=>k.value!==t);if(!f.length)return null;const u=i?"Keep current window when switching. Hold Shift to replace once.":"Replace current window when switching. Hold Shift to keep once.",p=a.minimal,g=a.narrow,x=s.jsx(K_,{className:"bv-window-node-select",label:e,value:"",options:f,onValue:(k,b)=>r(k,b.shiftKey?i:!i)}),w=s.jsxs("button",{type:"button",role:"switch","aria-label":u,"aria-checked":i,className:"bv-window-switch-mode",title:u,onClick:()=>Mu(i?"replace":"keep"),children:[s.jsx("span",{className:"bv-toggle-track",children:s.jsx("span",{})}),s.jsx("span",{"aria-hidden":"true",children:i?"Keep":"Replace"})]});return s.jsxs("div",{className:"bv-window-navigator",children:[!p&&x,!g&&w,g&&s.jsxs("div",{ref:d,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(Lr,{open:l,anchor:d,onClose:()=>c(!1),className:"bv-window-navigator-menu",children:s.jsxs("div",{className:"bv-window-navigator-panel",children:[p&&s.jsx("div",{className:"bv-window-navigator-panel-row is-node",children:x}),s.jsxs("div",{className:"bv-window-navigator-panel-row is-mode",children:[s.jsx("span",{children:"Keep current window"}),w]})]})})]})]})}function Dv({onClick:e,storageId:t,editorType:o="regional"}){const[r,n]=m.useState(null),[i,a]=m.useState(""),[l,c]=m.useState(0),d=Su();if(!t)return s.jsxs("button",{type:"button",className:"bv-ui-button bv-ui-button--secondary bv-ui-window-reset",title:"Restore the default panel arrangement",onClick:e,children:[s.jsx(oo,{children:s.jsx("path",{d:"M4.9 9A7.5 7.5 0 1 1 5 15M4 4v5h5"})}),s.jsx("span",{children:"Reset layout"})]});const f=zu(o),u=xi(t),p=f.profiles.find(h=>h.id===u?.profileId),g=()=>c(h=>h+1),x=()=>{if(!u)return;const h=Ap({id:r==="rename"?p?.id:void 0,name:i,editorType:o,editorVersion:"1",library:Dp,signature:`${o}:v1`,layout:u.layout});al(t,u.layout,"saved",h.id),n(null),g()},w={editorType:o,editorVersion:"1",library:Dp,signature:`${o}:v1`},k=(h,v)=>u?.status==="modified"?d.confirm({title:"Replace modified layout?",message:`Structural panel changes in this session will be discarded when switching to ${h}.`,confirmLabel:"Switch layout",danger:!0,action:v}):v(),b=[{id:"factory",label:"Factory layout",onSelect:()=>k("Factory",e)},...f.profiles.map(h=>{const v=r0(h,w);return{id:h.id,label:`${h.name}${v?"":" · Incompatible"}`,onSelect:()=>k(h.name,()=>{if(!v){e(),No({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}al(t,h.layout,"saved",h.id)})}}),{id:"save-as",label:"Save as new layout…",disabled:!u,onSelect:()=>{a(""),n("save")}},...p?[{id:"update",label:`Update ${p.name}`,onSelect:()=>{u&&(Ap({...p,layout:u.layout}),al(t,u.layout,"saved",p.id),g())}},{id:"rename",label:"Rename layout…",onSelect:()=>{a(p.name),n("rename")}},{id:"delete",label:"Delete layout",danger:!0,onSelect:()=>{t0(o,p.id),e(),g()}}]:[]];return s.jsxs(s.Fragment,{children:[s.jsx(Tu,{label:`${p?.name??"Factory"}${u?.status&&u.status!=="saved"?` · ${u.status[0].toUpperCase()}${u.status.slice(1)}`:""}`,icon:s.jsx(oo,{children:s.jsx("path",{d:"M4 5h16v14H4zM8 5v14M8 10h12"})}),actions:b}),s.jsx(fa,{open:!!r,title:r==="rename"?"Rename layout":"Save layout",onClose:()=>n(null),footer:s.jsx(le,{intent:"primary",onClick:x,children:r==="rename"?"Rename":"Save layout"}),children:s.jsx(tn,{label:"Layout name",value:i,maxLength:40,onValue:a})}),d.dialog]})}const Mv=new Map;let Iv;function Ko(e,t){const o=String(t);o&&Mv.set(e,o),o&&e!=="quick"&&(Iv=e)}function p0(){return Iv}function Br(e){return Mv.get(e)}function Fl({label:e,value:t,onImport:o,allowImport:r=!0}){const[n,i]=m.useState(!1),[a,l]=m.useState(""),[c,d]=m.useState(""),f=async()=>{try{await navigator.clipboard.writeText(JSON.stringify(t,null,2)),No({title:"Draft copied",message:`${e} draft JSON was copied to the clipboard.`,tone:"success",duration:4e3})}catch{No({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)}},u=()=>{try{const g=JSON.parse(a);o(g),i(!1),d("")}catch(g){d(g instanceof Error?g.message:"Invalid draft JSON")}},p=()=>{l(""),d(""),i(!0)};return s.jsxs(s.Fragment,{children:[s.jsx(le,{intent:"ghost",onClick:f,children:"Copy draft"}),r&&s.jsx(le,{intent:"ghost",onClick:p,children:"Import draft"}),s.jsx(fa,{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(le,{intent:"ghost",iconOnly:!0,"aria-label":"Paste from clipboard",title:"Paste from clipboard",onClick:async()=>{try{l(await navigator.clipboard.readText())}catch{d("Clipboard permission was not granted.")}},children:"⌘"}),s.jsx(le,{intent:"primary",onClick:u,children:"Import draft"})]}),children:s.jsx(X_,{label:"Draft JSON",value:a,rows:14,resize:"vertical",error:c,onValue:l})})]})}const Po=(e,t)=>JSON.stringify(e)===JSON.stringify(t),Or=e=>e?.id??e?.key;function md(e,t,o,r="draft"){if(Po(o,e))return{ok:!0,value:structuredClone(t)};if(Po(t,e))return{ok:!0,value:structuredClone(o)};if(Po(t,o))return{ok:!0,value:structuredClone(t)};if(Array.isArray(e)&&Array.isArray(t)&&Array.isArray(o)){if(![...e,...t,...o].every(w=>Or(w)!=null))return{ok:!1,reason:`Concurrent list change at ${r}`};const n=e.map(Or),i=t.map(Or),a=o.map(Or),l=!Po(n,i.filter(w=>n.includes(w))),c=!Po(n,a.filter(w=>n.includes(w)));if(l&&c&&!Po(i,a))return{ok:!1,reason:`Concurrent reorder at ${r}`};const d=new Map(e.map(w=>[Or(w),w])),f=new Map(t.map(w=>[Or(w),w])),u=new Map(o.map(w=>[Or(w),w])),p=l?i:a,g=[...p,...i,...a].filter((w,k,b)=>b.indexOf(w)===k),x=[];for(const w of g){const k=d.get(w),b=f.get(w),h=u.get(w);if(k&&b&&!h&&!Po(k,b))return{ok:!1,reason:`Edited item ${w} was removed externally`};if(k&&!b&&h&&!Po(k,h))return{ok:!1,reason:`Removed item ${w} changed externally`};if(!b&&!h)continue;if(!k){if(b&&h&&!Po(b,h))return{ok:!1,reason:`Item ${w} was added differently`};x.push(structuredClone(b??h));continue}if(!b||!h){x.push(structuredClone(b??h));continue}const v=md(k,b,h,`${r}.${w}`);if(!v.ok)return v;x.push(v.value)}return{ok:!0,value:x}}if(e&&t&&o&&typeof e=="object"&&typeof t=="object"&&typeof o=="object"){const n={};for(const i of new Set([...Object.keys(e),...Object.keys(t),...Object.keys(o)])){const a=md(e[i],t[i],o[i],`${r}.${i}`);if(!a.ok)return a;n[i]=a.value}return{ok:!0,value:n}}return{ok:!1,reason:`Concurrent value change at ${r}`}}function h0(){const[e,t]=m.useState(en);m.useEffect(()=>{const r=n=>t(n.detail);return window.addEventListener(Vn,r),()=>window.removeEventListener(Vn,r)},[]);const o=(r,n)=>ku({...e,controls:e.controls.map(i=>i.id===r?{...i,enabled:n}:i)});return e.controls.length?s.jsx("div",{className:"bv-control-live-list",children:e.controls.map(r=>s.jsx(Xo,{label:r.name,checked:r.enabled,onValue:n=>o(r.id,n)},r.id))}):s.jsx(Mo,{tone:"info",title:"No controls configured",children:"Create a control in Configuration before using live workflow states."})}const g0=({open:e,onClose:t,hasControlNodes:o=!0})=>{const[r,n]=m.useState(0),i=en().controls.length>0,a=m.useMemo(()=>({global:{tabEnableClose:!1,tabEnableDrag:!1,tabEnablePopout:!1,tabEnablePopoutIcon:!1,tabEnableFloat:!1},borders:[],layout:{type:"row",children:[{type:"tabset",selected:i?0:1,children:[{type:"tab",id:"control-center-controls",name:"Controls",component:"controls",enableClose:!1,enableDrag:!1},{type:"tab",id:"control-center-configuration",name:"Configuration",component:"configuration",enableClose:!1,enableDrag:!1}]}]}}),[i]);return s.jsxs(ei,{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(Dv,{storageId:"control-center",editorType:"control-center",onClick:()=>n(l=>l+1)}),children:[!o&&s.jsx(Mo,{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(Cv,{storageId:"control-center",resetSignal:r+(i?0:1),defaultModel:a,panels:[{id:"controls",title:"Controls",weight:1,content:s.jsx(h0,{})},{id:"configuration",title:"Configuration",weight:1,content:s.jsx(cw,{})}]})]})},jv=()=>globalThis.__bvSmartPipeEditorBridge??{},Uu=e=>String(e?.type??e?.comfyClass??""),ic=e=>Uu(e)==="BV Smart Pipe Merge"?"merge":"pipe",Ul=()=>Nt().rootGraph??Nt().graph,Ip=()=>Iu(Ul(),e=>["BV Smart Pipe","BV Smart Pipe Merge"].includes(Uu(e)));function b0(){const[e,t]=m.useState([]),[o,r]=m.useState(null),[n,i]=m.useState(0),[a,l]=m.useState({}),c=m.useRef(new Map),[d,f]=m.useState(null),u=()=>({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}:${ea(Ul(),k.node)}`,g=(k,b)=>c.current.get(k)?.dirty?f({key:k,action:b}):b(),x=(k,b)=>{const h=p(k),v=o,_=()=>{Ko(k.kind,ea(Ul(),k.node)),t(y=>{const E=b&&v&&v!==h?y.filter(R=>R.key!==v):y;return E.some(R=>R.key===h)?E:[...E,{key:h,target:k}]}),l(y=>({...y,[h]:v&&y[v]?structuredClone(y[v]):y[h]??u()})),r(h),i(y=>y+1)};b&&v&&v!==h?g(v,_):_()},w=k=>g(k,()=>{c.current.delete(k),t(b=>b.filter(h=>h.key!==k)),l(b=>{const h={...b};return delete h[k],h}),r(b=>b===k?null:b)});return m.useEffect(()=>{const k=b=>{const h=b.detail;h?.node&&x({node:h.node,kind:h.kind??ic(h.node)},$n()==="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]??u();return s.jsx(v0,{sessionKey:k.key,target:k.target,open:k.key===o,activation:n,presentation:b,onPresentation:h=>l(v=>({...v,[k.key]:h})),onActions:h=>c.current.set(k.key,h),onClose:()=>w(k.key),onRemap:h=>t(v=>v.map(_=>_.key===k.key?{..._,target:{node:h,kind:ic(h)}}:_)),onNavigate:(h,v)=>x({node:h,kind:ic(h)},v)},k.key)}),e.filter(k=>k.key!==o).map(k=>s.jsx(ws,{title:`${k.target.kind==="merge"?"Smart Pipe Merge":"Smart Pipe Editor"} · ${k.target.node.title||`#${k.target.node.id}`}`,onRestore:()=>x(k.target,!1),onClose:()=>w(k.key)},`shelf:${k.key}`)),s.jsx(Ru,{open:!!d,editorName:"Smart Pipe editor",onKeep:()=>f(null),onDiscard:()=>{const k=d;k&&c.current.get(k.key)?.discard(),f(null),k?.action()},onSave:()=>{const k=d;k&&c.current.get(k.key)?.save(),f(null),k?.action()}})]})}function v0({sessionKey:e,target:t,open:o,activation:r,presentation:n,onPresentation:i,onActions:a,onClose:l,onRemap:c,onNavigate:d}){const f=jv()[t.kind],u=m.useMemo(()=>f?.read(t.node)??{},[f,t.node]),p=vs(u),g=p.value;ms(p);const x=m.useRef(structuredClone(u)),w=m.useRef(!1),[k,b]=m.useState(null),h=m.useMemo(()=>ea(Ul(),t.node),[t.node]);m.useEffect(()=>{const z=()=>{const L=Ip().find(D=>D.key===h);if(!L){b("missing");return}if(L.node!==t.node){c(L.node);return}if(w.current)return;const T=f?.read(t.node)??{};if(JSON.stringify(T)===JSON.stringify(x.current))return;if(!p.canUndo){x.current=structuredClone(T),p.replace(T,!0),b(null);return}const j=md(x.current,g,T);j.ok?(x.current=structuredClone(T),p.replace(j.value)):b(j.reason)};return Qi().addEventListener("graphChanged",z),()=>Qi().removeEventListener("graphChanged",z)},[f,g,p.canUndo,p.replace,c,t.node,h]);const v=ga(t.node),_=Ip(),y=_.filter(z=>ln(z.node)).map(z=>({value:z.key,label:`${z.breadcrumb?`${z.breadcrumb} › `:""}${z.node.title||Uu(z.node)} · #${z.node.id}`})),E=z=>p.commit(L=>(z(L),L)),R=t.kind==="pipe"?f?.validation?.(t.node,g)??[]:[],P=()=>{w.current=!0;try{f?.save(t.node,g);const z=f?.read(t.node)??g;x.current=structuredClone(z),p.replace(z,!0),b(null)}finally{w.current=!1}},I=()=>{const z=f?.read(t.node)??{};x.current=structuredClone(z),p.replace(z,!0),b(null)};m.useEffect(()=>{a({dirty:p.canUndo,save:P,discard:I})},[f,g,p.canUndo,p.replace,a,e,t.node]);const B=s.jsx(ba,{label:"Smart Pipe node",value:_.find(z=>z.node===t.node)?.key??"",options:y,onNavigate:(z,L)=>{const T=_.find(j=>j.key===z);T&&d(T.node,L)}});return s.jsx(ei,{open:o,activationToken:r,title:t.kind==="merge"?"Smart Pipe Merge":"Smart Pipe Editor",shortTitle:"Smart Pipe",menuVisible:v,onMenuVisible:z=>Zn(t.node,z),context:B,mode:n.mode,initialGeometry:n.geometry,onModeChange:z=>i({...n,mode:z}),onGeometry:z=>i({...n,geometry:z}),minSize:{width:420,height:360},onClose:l,status:R.length?"Required inputs missing":p.canUndo?"Unsaved changes":"Saved",actions:s.jsx(Fu,{primary:s.jsx(le,{intent:"primary",onClick:P,children:"Save"}),secondary:s.jsxs(s.Fragment,{children:[s.jsx(le,{disabled:!p.canUndo,onClick:I,children:"Discard"}),s.jsx(Fl,{label:t.kind==="merge"?"Smart Pipe Merge":"Smart Pipe",value:{schema:"bv.editor-draft",version:1,type:t.kind,data:g},onImport:z=>{if(z?.schema!=="bv.editor-draft"||z?.version!==1||z?.type!==t.kind||!z?.data)throw new Error("Draft type or version does not match this editor.");p.replace(z.data)}})]}),overflow:[{id:"undo",label:"Undo",disabled:!p.canUndo,onSelect:p.undo},{id:"redo",label:"Redo",disabled:!p.canRedo,onSelect:p.redo}]}),children:k?s.jsxs(Mo,{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(Fl,{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(le,{onClick:()=>{if(k==="missing")l();else{const z=f?.read(t.node)??{};x.current=structuredClone(z),p.replace(z,!0),b(null)}},children:k==="missing"?"Close window":"Reload editor"})]})]}):t.kind==="pipe"?s.jsx(m0,{node:t.node,draft:g,update:E}):s.jsx(x0,{draft:g,update:E})})}function m0({node:e,draft:t,update:o}){const r=jv().pipe,[n,i]=m.useState(()=>r?.predecessor(e)??{value:"Start new pipe",options:[]}),a=r?.validation?.(e,t)??[];m.useEffect(()=>{const u=()=>i(r?.predecessor(e)??{value:"Start new pipe",options:[]});Qi().addEventListener("graphChanged",u);const p=window.setInterval(u,750);return()=>{Qi().removeEventListener("graphChanged",u),window.clearInterval(p)}},[r,e]);const l=t.definition?.localSlots??[],c=t.projection?.inheritedSlots??[],d=[...l.map((u,p)=>({id:u.id,title:u.name||"New slot",description:"Local · input required",summary:u.type||"*",content:s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(tn,{label:"Name",value:u.name??"",onValue:g=>o(x=>{x.definition.localSlots[p].name=g})}),s.jsx(tn,{label:"Type",value:u.type??"*",onValue:g=>o(x=>{x.definition.localSlots[p].type=g||"*"})}),s.jsx(Xo,{label:"Expose output",checked:!!u.showOutput,onValue:g=>o(x=>{x.definition.localSlots[p].showOutput=g})})]})})),...c.map((u,p)=>({id:u.id,title:u.name||u.id,description:"Inherited override",content:s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(Xo,{label:"Expose input",checked:!!u.showInput,onValue:g=>o(x=>{x.projection.inheritedSlots[p].showInput=g})}),s.jsx(Xo,{label:"Expose output",checked:!!u.showOutput,onValue:g=>o(x=>{x.projection.inheritedSlots[p].showOutput=g})})]})}))],f=()=>o(u=>{u.definition.localSlots.push({id:crypto.randomUUID(),name:"new_slot",ordinal:u.definition.nextOrdinal++,type:"*",showInput:!0,showOutput:!1})});return s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(ft,{label:"Pipe predecessor",value:n.value,options:n.options.length?n.options:[{value:n.value,label:n.value}],onValue:u=>{r?.setPredecessor(e,u),i(r?.predecessor(e)??{value:u,options:n.options})}}),a.length>0&&s.jsx(Mo,{tone:"danger",title:"Required Smart Pipe inputs are missing",children:a.map(u=>s.jsx("div",{children:u.message},u.id))}),s.jsx(le,{onClick:f,children:"Add slot"}),d.length?s.jsx(gs,{items:d,onReorder:u=>o(p=>{const g=new Map(p.definition.localSlots.map(x=>[x.id,x]));p.definition.localSlots=u.map(x=>g.get(x.id)).filter(Boolean)}),onRemove:u=>o(p=>{p.definition.localSlots=p.definition.localSlots.filter(g=>g.id!==u),p.projection.inheritedSlots=p.projection.inheritedSlots.filter(g=>g.id!==u)})}):s.jsx(bs,{title:"No slots",description:"Add a local slot or connect a predecessor."})]})}function x0({draft:e,update:t}){const o=e.sources??[],[r,n]=m.useState(""),i=o.map(c=>({id:c.key,title:c.label||c.key,description:c.mode==="wired"?"Wired":"Wireless"})),a=e.candidates?.find(c=>c.address===r),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(ft,{label:"Wireless source",value:r,options:(e.candidates??[]).map(c=>({value:c.address,label:c.label})),onValue:n}),s.jsx(le,{disabled:!a,onClick:l,children:"Add"})]}),i.length?s.jsx(gs,{items:i,onReorder:c=>t(d=>{const f=new Map(d.sources.map(u=>[u.key,u]));d.sources=c.map(u=>f.get(u.id)).filter(Boolean)}),onRemove:c=>t(d=>{d.sources=d.sources.filter(f=>f.key!==c)})}):s.jsx(bs,{title:"No merge sources",description:"Connect a pipe or add a wireless source."})]})}const y0=`:root{--bv-primary-color: #8d70ff;--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: #2980b9;--bv-secondary-color: #34495e;--bv-text-color: #2c3e50;--bv-accent-color: #c0392b;--bv-bg-color: #ecf0f1;--bv-border-color: #bdc3c7;--bv-muted-text-color: #7f8c8d}.bv-modal{position:fixed;inset:0;z-index:var(--bv-layer-modal);display:grid;place-items:center;padding:24px;background:#0009;font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;color:var(--bv-text-color)}.bv-modal *{box-sizing:border-box}:root{--bv-ui-scale:1.125}:root.bv-ui-size-compact{--bv-ui-scale:1}:root.bv-ui-size-default{--bv-ui-scale:1.125}:root.bv-ui-size-large{--bv-ui-scale:1.25}.bv-ui,#bv-root,.bv-ui-portal,.bv-completion-popup{--bv-ui-bg:#121116;--bv-ui-surface:#1e1c24;--bv-ui-surface-raised:#24212b;--bv-ui-input:#17161b;--bv-ui-text:#f2eef8;--bv-ui-muted:#aaa2b5;--bv-ui-border:rgba(231,225,247,.14);--bv-ui-border-hover:rgba(231,225,247,.25);--bv-ui-accent:#8d70ff;--bv-ui-accent-hover:#9a82ff;--bv-ui-danger:#d35d71;--bv-ui-warning:#e9b65f;--bv-ui-success:#55c994;--bv-ui-control-height-comfortable:calc(42px * var(--bv-ui-scale));--bv-ui-control-height-compact:calc(30px * var(--bv-ui-scale));--bv-ui-control-height:var(--bv-ui-control-height-compact);--bv-ui-field-gap-comfortable:calc(6px * var(--bv-ui-scale));--bv-ui-field-gap-compact:calc(4px * var(--bv-ui-scale));--bv-ui-field-gap:var(--bv-ui-field-gap-compact);--bv-ui-content-padding-comfortable:calc(11px * var(--bv-ui-scale));--bv-ui-content-padding-compact:calc(8px * var(--bv-ui-scale));--bv-ui-content-padding:var(--bv-ui-content-padding-compact);--bv-ui-row-height-comfortable:calc(38px * var(--bv-ui-scale));--bv-ui-row-height-compact:calc(30px * var(--bv-ui-scale));--bv-ui-row-height:var(--bv-ui-row-height-compact);--bv-ui-textarea-height-comfortable:calc(100px * var(--bv-ui-scale));--bv-ui-textarea-height-compact:calc(76px * var(--bv-ui-scale));--bv-ui-textarea-height:var(--bv-ui-textarea-height-compact);--bv-ui-check-size-comfortable:calc(18px * var(--bv-ui-scale));--bv-ui-check-size-compact:calc(16px * var(--bv-ui-scale));--bv-ui-check-size:var(--bv-ui-check-size-compact);--bv-ui-radius-sm:calc(2px * var(--bv-ui-scale));--bv-ui-radius:calc(4px * var(--bv-ui-scale));--bv-ui-radius-lg:calc(6px * var(--bv-ui-scale));color:var(--bv-ui-text);font:calc(12px * var(--bv-ui-scale))/1.45 system-ui,-apple-system,"Segoe UI",sans-serif}.bv-density-comfortable{--bv-ui-control-height:var(--bv-ui-control-height-comfortable);--bv-ui-field-gap:var(--bv-ui-field-gap-comfortable);--bv-ui-content-padding:var(--bv-ui-content-padding-comfortable);--bv-ui-row-height:var(--bv-ui-row-height-comfortable);--bv-ui-textarea-height:var(--bv-ui-textarea-height-comfortable);--bv-ui-check-size:var(--bv-ui-check-size-comfortable)}.bv-density-compact{--bv-ui-control-height:var(--bv-ui-control-height-compact);--bv-ui-field-gap:var(--bv-ui-field-gap-compact);--bv-ui-content-padding:var(--bv-ui-content-padding-compact);--bv-ui-row-height:var(--bv-ui-row-height-compact);--bv-ui-textarea-height:var(--bv-ui-textarea-height-compact);--bv-ui-check-size:var(--bv-ui-check-size-compact)}:is(.bv-ui,#bv-root,.bv-ui-portal),:is(.bv-ui,#bv-root,.bv-ui-portal) *,:is(.bv-ui,#bv-root,.bv-ui-portal) *:before,:is(.bv-ui,#bv-root,.bv-ui-portal) *:after{box-sizing:border-box}:is(.bv-ui,#bv-root,.bv-ui-portal) :where(button,input,select,textarea){box-sizing:border-box;margin:0;font:inherit;color:inherit;letter-spacing:inherit}:is(.bv-ui,#bv-root,.bv-ui-portal) :where(button){appearance:none}.bv-ui-dialog{width:min(680px,calc(100vw - 32px));max-height:min(86vh,900px);margin:auto;padding:0;overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-surface);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius-lg);box-shadow:0 28px 90px #000c}.bv-ui-dialog--small{width:min(480px,calc(100vw - 32px))}.bv-ui-dialog--large{width:min(1040px,calc(100vw - 32px))}.bv-ui-dialog::backdrop{background:#08070a9e}.bv-ui-overlay{position:fixed;z-index:var(--bv-layer-modal);inset:0;display:grid;place-items:center;padding:16px;background:#08070a9e}.bv-ui-overlay--modeless{pointer-events:none;place-items:start end;background:transparent}.bv-ui-overlay--modeless>.bv-ui-dialog{pointer-events:auto}.bv-ui-dialog__header{display:flex;align-items:flex-start;gap:16px;padding:calc(15px * var(--bv-ui-scale)) calc(17px * var(--bv-ui-scale));background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-ui-dialog__header>div{min-width:0;flex:1}.bv-ui-dialog__header h2,.bv-ui-dialog__header p{margin:0}.bv-ui-dialog__header h2{font-size:calc(16px * var(--bv-ui-scale));line-height:1.3}.bv-ui-dialog__header p{margin-top:4px;color:var(--bv-ui-muted);font-size:calc(11px * var(--bv-ui-scale))}.bv-ui-dialog__body{display:grid;gap:calc(13px * var(--bv-ui-scale));max-height:calc(86vh - 132px);padding:calc(17px * var(--bv-ui-scale));overflow:auto}.bv-ui-dialog__footer{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:calc(8px * var(--bv-ui-scale));padding:calc(11px * var(--bv-ui-scale)) calc(17px * var(--bv-ui-scale));background:var(--bv-ui-surface-raised);border-top:1px solid var(--bv-ui-border)}.bv-ui-button{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:var(--bv-ui-control-height);padding:0 calc(13px * var(--bv-ui-scale));color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius);cursor:pointer;transition:background-color .12s ease,border-color .12s ease,transform .08s ease}.bv-ui-button:hover:not(:disabled){background:#302d39;border-color:var(--bv-ui-border-hover)}.bv-ui-button:active:not(:disabled){transform:translateY(1px)}.bv-ui-button:focus-visible{outline:3px solid rgba(141,112,255,.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 #8d70ff2e}.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:#2c2835;--flexlayout-color-4:#393343;--flexlayout-color-5:#4b4160;--flexlayout-color-6:#62537b;--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:#8065e8;--flexlayout-color-splitter-drag:#9a7dff;--flexlayout-color-splitter-handle:#c0afff;--flexlayout-color-drag1:#a991ff;--flexlayout-color-drag2:#72a7ff;--flexlayout-color-drag1-background:rgba(141,112,255,.2);--flexlayout-color-drag2-background:rgba(82,133,224,.18);--flexlayout-color-drag-rect-border:#9a7dff;--flexlayout-color-drag-rect-background:var(--bv-ui-surface-raised);--flexlayout-color-drag-rect:var(--bv-ui-text);--flexlayout-color-edge-marker:rgba(141,112,255,.72);--flexlayout-color-edge-icon:#fff;--flexlayout-color-toolbar-button-hover:rgba(141,112,255,.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 #8d70ff52}.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:#8d70ff09;stroke:var(--bv-ui-accent);stroke-width:2;stroke-dasharray:7 5;vector-effect:non-scaling-stroke;filter:drop-shadow(0 0 3px rgba(141,112,255,.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:#c7baff;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;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:1px;padding:6px 8px;color:var(--bv-text-color);text-align:left;background:transparent;border:0;border-radius:var(--bv-ui-radius-sm);cursor:pointer}.bv-completion-popup button:hover,.bv-completion-popup button.active{background:#8d70ff3d;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-muted-text-color);text-overflow:ellipsis;white-space:nowrap}.completion-menu{min-width:320px}.completion-dataset-picker{display:grid;gap:6px;padding:5px 8px 8px}.completion-dataset-picker>label{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:7px}.completion-dataset-picker>label span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.completion-dataset-picker>label small{color:var(--bv-muted-text-color)}.completion-dataset-picker .dataset-error{color:#ffaca6;white-space:normal}.bv-settings-datasets{display:grid;gap:8px;width:min(680px,100%)}.bv-settings-datasets>small{color:var(--descrip-text, #a1a1aa)}.bv-settings-datasets>div{display:grid;gap:6px}.bv-settings-datasets label{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:9px;padding:7px 9px;border:1px solid var(--border-color, #ffffff24);border-radius:var(--bv-ui-radius)}.bv-settings-datasets label span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-settings-datasets label small{color:var(--descrip-text, #a1a1aa)}.bv-settings-datasets .dataset-error{color:#ffaca6}.dataset-order{display:inline-flex;gap:3px}.dataset-order button{min-width:24px;padding:1px 5px}.bv-regional-error{margin:20px;padding:15px;color:#ffaca6;border:1px solid #ff756d;border-radius:var(--bv-ui-radius)}.editor-menus{display:flex;align-items:center;gap:2px}.menu-item{position:relative}.editor-menus>.menu-item>button{padding:4px 7px;border-color:transparent;background:transparent}.menu-popover,.toolbar-popover{position:absolute;z-index:20;top:calc(100% + 5px);left:0;display:grid;min-width:230px;padding:7px;border:1px solid var(--bv-border-color);border-radius:var(--bv-ui-radius);background:var(--comfy-menu-bg, #20242a);box-shadow:0 12px 35px #000b}.menu-popover button{display:flex;justify-content:space-between;border-color:transparent;background:transparent;text-align:left}.menu-popover button:hover{background:#ffffff12}.menu-popover hr{width:100%;border:0;border-top:1px solid #ffffff18}.menu-popover kbd{color:var(--bv-muted-text-color)}.view-menu label{display:grid;grid-template-columns:1fr auto;gap:7px}.view-menu input{grid-column:1 / -1;width:100%;padding:0}.view-menu small{padding:5px 7px;color:var(--bv-muted-text-color)}.help-menu{width:min(680px,calc(100vw - 40px));grid-template-columns:repeat(2,minmax(280px,1fr));gap:18px}.help-section{min-width:0}.help-section strong{display:block;margin-bottom:8px}.help-section dl{display:grid;grid-template-columns:minmax(135px,auto) minmax(110px,1fr);gap:5px 12px;margin:0}.help-section dt{color:#8fd2ff;white-space:nowrap}.help-section dd{min-width:0;margin:0;color:var(--bv-muted-text-color)}@media (max-width: 720px){.help-menu{width:calc(100vw - 40px);grid-template-columns:1fr;max-height:calc(100vh - 90px);overflow:auto}}.help-button{width:29px;border-radius:50%!important}.toolbar-popover-anchor{position:relative}.toolbar-popover{right:0;left:auto;gap:7px}.toolbar-popover label{display:grid;grid-template-columns:65px 1fr;align-items:center}.toolbar-popover input{width:120px!important}.panel-splitter{position:relative;cursor:col-resize;background:#ffffff0b;border-left:1px solid #ffffff12;border-right:1px solid #0008}.panel-splitter:hover,.panel-splitter:active{background:var(--bv-primary-color)}.bv-regional-shell main>aside{min-width:0}.bv-regional-shell .layers{display:flex;flex-direction:column;padding:8px}.panel-toolbar{display:flex;align-items:center;gap:3px;margin-bottom:7px;padding:4px;background:#ffffff06;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.panel-toolbar-spacer{flex:1}.panel-toolbar .panel-tool{display:flex;align-items:center;justify-content:center;gap:5px;min-width:28px;height:28px;min-height:28px;padding:0 6px;color:var(--bv-ui-muted);background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius-sm)}.panel-toolbar .panel-tool.primary{color:#d9d1ff;background:#8d70ff1c;border-color:#8d70ff33}.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(141,112,255,.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:#8d70ff24;border-color:#8d70ff5c;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:#c6b9ff;background:#8d70ff29}.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:#8d70ff24!important;outline:1px solid rgba(141,112,255,.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 #8d70ff1f}.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:#d8d0ff;background:#8d70ff21;border:1px solid rgba(141,112,255,.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-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:#8d70ff12;border-color:#8d70ff57;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-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:#8d70ff4d}.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:#8d70ff59;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:#c9bcff}.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:#d8d0ff;background:#8d70ff24;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}.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(169,145,255,.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:#8d70ff24}.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(141,112,255,.55);background:#8d70ff12}.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 #8d70ff61}.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 #8d70ff2e}.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 #8d70ff2e}.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 #8d70ff2e}.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 #8d70ff2e}.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:#8d70ff24;border-color:#8d70ff38}.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:#8d70ff1f}@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:#8d70ff1f}.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:#8d70ff59;border-color:var(--bv-ui-accent)}.bv-toggle[aria-checked=true] .bv-toggle-track>span{translate:19px;background:#c9bcff}.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:#8d70ff33;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:#8d70ff29;border:1px solid rgba(141,112,255,.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:#ded7ff;background:#8d70ff2e}.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:#8d70ff26;border-color:#8d70ff6b}.bv-tree [role=group]{margin-left:17px;padding-left:8px;border-left:1px solid rgba(141,112,255,.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),#6f9cff);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:#8d70ff24;border-color:#8d70ff40}.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:#8d70ff24;border-color:#8d70ff3d}.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:#c7baff}}.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}`,_0='.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 w0(e){return!e||!e.enabled||e.authoring.locked?null:e.id}function k0(e,t,o=3){return Math.hypot(t.x-e.x,t.y-e.y)>=o}function E0(e){return[...e].sort((t,o)=>o.priority-t.priority)}function T0(e){e.forEach((t,o)=>{t.priority=o})}function R0(e){return e==="draw-brush"}function jp(e){return[...e].sort((t,o)=>t.priority-o.priority)}const S0=[{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 L0({geometry:e,canvas:t}){const o=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:o});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:o});if(e.type==="polygon")return s.jsx("polygon",{points:e.points.map(c=>`${c.x*t.width},${c.y*t.height}`).join(" "),fill:o});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:o,mask:`url(#${c})`})]})}const r=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],d=n*c.pressure,f=e.shape==="square"?s.jsx("rect",{x:c.x*t.width-d/2,y:c.y*t.height-d/2,width:d,height:d,fill:o,fillOpacity:e.opacity,filter:l}):s.jsx("circle",{cx:c.x*t.width,cy:c.y*t.height,r:d/2,fill:o,fillOpacity:e.opacity,filter:l}),u=d*e.hardness;return s.jsxs(s.Fragment,{children:[s.jsx("defs",{children:l&&s.jsx("filter",{id:i,filterUnits:"userSpaceOnUse",x:"0",y:"0",width:t.width,height:t.height,children:s.jsx("feGaussianBlur",{stdDeviation:a})})}),f,u>0&&(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:o,fillOpacity:e.opacity}):s.jsx("circle",{cx:c.x*t.width,cy:c.y*t.height,r:u/2,fill:o,fillOpacity:e.opacity}))]})}if((e.pressure_mode??"constant")==="constant"){const c=e.points.map((d,f)=>`${f?"L":"M"}${d.x*t.width},${d.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:o,strokeOpacity:e.opacity,strokeWidth:n,strokeLinecap:r,strokeLinejoin:r==="round"?"round":"miter",filter:l}),e.hardness>0&&s.jsx("path",{d:c,fill:"none",stroke:o,strokeOpacity:e.opacity,strokeWidth:n*e.hardness,strokeLinecap:r,strokeLinejoin:r==="round"?"round":"miter"})]})}return s.jsx(s.Fragment,{children:e.points.slice(1).map((c,d)=>{const f=e.points[d],u=(f.pressure+c.pressure)/2;return s.jsx("line",{x1:f.x*t.width,y1:f.y*t.height,x2:c.x*t.width,y2:c.y*t.height,stroke:o,strokeOpacity:e.opacity,strokeWidth:n*u,strokeLinecap:r},d)})})}function C0({geometry:e,canvas:t,cursor:o,activePolygon:r}){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,...r&&o?[o]:[]],l=r?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,d)=>s.jsx("circle",{className:`tool-preview-vertex ${e.operation}`,cx:c.x*t.width,cy:c.y*t.height,r:"4"},d))]})}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 N0({region:e,geometries:t,canvas:o,opacity:r,resolved:n}){const i=ow(t).filter(d=>d.enabled&&(n||d.geometries.some((f,u)=>io(f,u).visible))),a=`bv-feather-${e.id}`,l=Math.min(64,Math.round(e.mask.feather*Math.min(o.width,o.height))),c=l/3;return s.jsxs("g",{opacity:r,children:[n&&l>0&&s.jsx("defs",{children:s.jsx("filter",{id:a,filterUnits:"userSpaceOnUse",x:"0",y:"0",width:o.width,height:o.height,children:s.jsx("feGaussianBlur",{stdDeviation:c})})}),s.jsx("g",{filter:n&&l>0?`url(#${a})`:void 0,children:i.map(d=>{const f=`bv-mask-${e.id}-${d.id}`;return s.jsxs("g",{children:[s.jsx("defs",{children:s.jsxs("mask",{id:f,maskUnits:"userSpaceOnUse",x:"0",y:"0",width:o.width,height:o.height,children:[s.jsx("rect",{width:o.width,height:o.height,fill:"black"}),d.geometries.filter((u,p)=>u.enabled!==!1&&(n||io(u,p).visible)).map(u=>s.jsx(L0,{geometry:u,canvas:o},u.id))]})}),s.jsx("rect",{width:o.width,height:o.height,fill:e.authoring.color,mask:`url(#${f})`})]},d.id)})})]})}function O0(e){const{document:t,selectedLayerId:o,selectedRegionId:r}=e,n=m.useRef(null),i=m.useRef(null),[a,l]=m.useState({width:1,height:1}),[c,d]=m.useState(e.initialView.zoom),[f,u]=m.useState({x:e.initialView.panX,y:e.initialView.panY}),[p,g]=m.useState(e.initialView.fit),[x,w]=m.useState(!1),k=m.useCallback((L=a)=>Math.max(.02,Math.min(1,(L.width-40)/t.canvas.width,(L.height-40)/t.canvas.height)),[t.canvas.height,t.canvas.width,a]),b=m.useCallback(()=>{d(k()),u({x:0,y:0}),g(!0)},[k]);m.useEffect(()=>{const L=n.current;if(!L)return;const T=new ResizeObserver(j=>{const D=j[0].contentRect,S={width:D.width,height:D.height};l(S),p&&(d(Math.max(.02,Math.min(1,(S.width-40)/t.canvas.width,(S.height-40)/t.canvas.height))),u({x:0,y:0}))});return T.observe(L),()=>T.disconnect()},[t.canvas.height,t.canvas.width,p]),m.useEffect(()=>e.onView({zoom:c,panX:f.x,panY:f.y,fit:p}),[p,f.x,f.y,e.onView,c]),m.useEffect(()=>{const L=j=>{const D=j.target;j.code!=="Space"||D instanceof HTMLInputElement||D instanceof HTMLTextAreaElement||D instanceof HTMLSelectElement||D?.isContentEditable||(j.preventDefault(),j.stopImmediatePropagation(),w(!0))},T=j=>{j.code==="Space"&&(j.preventDefault(),j.stopImmediatePropagation(),w(!1),i.current=null)};return window.addEventListener("keydown",L,!0),window.addEventListener("keyup",T,!0),()=>{window.removeEventListener("keydown",L,!0),window.removeEventListener("keyup",T,!0)}},[]);const h=L=>{let T=[...L.geometry];if(e.draft&&L.id===r){const j=new Set(e.draft.map(D=>D.id));T=T.map(D=>j.has(D.id)?e.draft.find(S=>S.id===D.id):D);for(const D of e.draft)T.some(S=>S.id===D.id)||T.push(D)}return!e.binaryMaskPreview&&e.isolate&&o&&(T=T.filter(j=>Pt(j)===o)),T},v=e.brush.size*Math.min(t.canvas.width,t.canvas.height)/t.canvas.width*100,_=L=>{L.preventDefault();const T=L.currentTarget.getBoundingClientRect(),j=L.clientX-T.left,D=L.clientY-T.top,S=Math.max(.02,Math.min(8,c*Math.exp(-L.deltaY*.0015))),N=S/c;u(A=>({x:j-T.width/2-(j-T.width/2-A.x)*N,y:D-T.height/2-(D-T.height/2-A.y)*N})),d(S),g(!1)},y=L=>{L.button!==1&&!(L.button===0&&x)||(L.preventDefault(),L.stopPropagation(),L.currentTarget.setPointerCapture(L.pointerId),i.current={x:L.clientX,y:L.clientY,panX:f.x,panY:f.y},g(!1))},E=L=>{i.current&&(L.preventDefault(),L.stopPropagation(),u({x:i.current.panX+L.clientX-i.current.x,y:i.current.panY+L.clientY-i.current.y}))},R=L=>{i.current&&(L.preventDefault(),L.stopPropagation(),i.current=null)},P=a.width/2-t.canvas.width*c/2+f.x,I=a.height/2-t.canvas.height*c/2+f.y,B=10/c,z=24/c;return s.jsx("section",{className:"bv-regional-work",children:s.jsxs("div",{ref:n,className:`artboard-viewport ${x?"pan-ready":""}`,onWheel:_,onPointerDownCapture:y,onPointerMoveCapture:E,onPointerUpCapture:R,onPointerCancelCapture:R,children:[s.jsx(nw,{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(${P}px, ${I}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:E0(t.regions.filter(L=>L.enabled&&(e.binaryMaskPreview||L.authoring.visible))).map(L=>s.jsx(N0,{region:e.binaryMaskPreview?{...L,authoring:{...L.authoring,color:"#FFFFFF"}}:L,geometries:h(L),canvas:t.canvas,opacity:e.binaryMaskPreview?1:e.displayOpacity,resolved:e.binaryMaskPreview},L.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(L=>s.jsx(C0,{geometry:L,canvas:t.canvas,cursor:e.cursor,activePolygon:e.tool.startsWith("polygon")},L.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}),S0.map(L=>{const T=(e.selectionBounds.x+e.selectionBounds.width*L.x)*t.canvas.width,j=(e.selectionBounds.y+e.selectionBounds.height*L.y)*t.canvas.height;return s.jsxs("g",{"data-handle":L.id,className:`resize-handle resize-handle-${L.id}`,children:[s.jsx("rect",{className:"resize-handle-hit",x:T-z/2,y:j-z/2,width:z,height:z}),s.jsx("rect",{className:"resize-handle-visible",x:T-B/2,y:j-B/2,width:B,height:B,rx:2/c})]},L.id)}),e.draft&&s.jsxs("text",{className:"tool-preview-size",style:{fontSize:12/c},x:(e.selectionBounds.x+e.selectionBounds.width)*t.canvas.width-4/c,y:(e.selectionBounds.y+e.selectionBounds.height)*t.canvas.height-7/c,children:[Math.round(e.selectionBounds.width*t.canvas.width)," × ",Math.round(e.selectionBounds.height*t.canvas.height)," px"]})]}),!e.binaryMaskPreview&&e.cursor&&e.tool.startsWith("brush")&&s.jsx("div",{className:`brush-cursor ${e.brush.shape}`,style:{left:`${e.cursor.x*100}%`,top:`${e.cursor.y*100}%`,width:`${v}%`,aspectRatio:"1"},children:s.jsx("i",{style:{width:`${e.brush.hardness*100}%`,height:`${e.brush.hardness*100}%`}})})]})}),s.jsxs("div",{className:"zoom-controls",onWheel:L=>L.stopPropagation(),children:[s.jsx(le,{intent:"ghost",title:"Zoom out",onClick:()=>{d(L=>Math.max(.02,L/1.25)),g(!1)},children:"−"}),s.jsxs(le,{intent:"ghost",title:"100%",onClick:()=>{d(1),u({x:0,y:0}),g(!1)},children:[Math.round(c*100)," %"]}),s.jsx(le,{intent:"ghost",title:"Zoom in",onClick:()=>{d(L=>Math.min(8,L*1.25)),g(!1)},children:"+"}),s.jsx(le,{intent:"ghost",title:"Fit to view",onClick:b,children:"Fit"})]})]})})}const Pv="BV.NodePack.Completion.Enabled",Bv="BV.NodePack.Completion.Datasets",zv="BV.NodePack.Completion.Placement",Fv="bv-nodepack:completion-enabled",ia="bv-completion-enabled-changed",aa="bv-completion-placement-changed",Wu="bv-nodepack:completion-datasets",Uv="bv-nodepack:completion-placement",Wl="bv-completion-datasets-changed";let Wv=null,Vv=null,Hv=null;function xd(){try{return localStorage.getItem(Uv)==="field"?"field":"caret"}catch{return"caret"}}function A0(e){Hv=e}function $v(e,t=!1){const o=e==="field"?"field":"caret";try{localStorage.setItem(Uv,o)}catch{}t&&Hv?.(o),window.dispatchEvent(new CustomEvent(aa,{detail:{placement:o}}))}function Yv(){const[e,t]=m.useState(xd);return m.useEffect(()=>{const o=r=>t(r.detail?.placement==="field"?"field":"caret");return window.addEventListener(aa,o),()=>window.removeEventListener(aa,o)},[]),e}function Vu(){try{return localStorage.getItem(Fv)!=="false"}catch{return!0}}function D0(e){Wv=e}function Xv(e,t=!1){try{localStorage.setItem(Fv,String(e))}catch{}t&&Wv?.(e),window.dispatchEvent(new CustomEvent(ia,{detail:{enabled:e}}))}function Gv(){const[e,t]=m.useState(Vu);return m.useEffect(()=>{const o=r=>t(!!r.detail?.enabled);return window.addEventListener(ia,o),()=>window.removeEventListener(ia,o)},[]),e}function Kv(){try{const e=localStorage.getItem(Wu);if(e==null)return null;const t=JSON.parse(e);return Array.isArray(t)?t.map(String):null}catch{return null}}function M0(e){Vv=e}function qv(e,t=!1){const o=[...new Set(e.map(String))];try{localStorage.setItem(Wu,JSON.stringify(o))}catch{}t&&Vv?.(JSON.stringify(o)),window.dispatchEvent(new CustomEvent(Wl,{detail:{datasets:o}}))}function Jv(e){if(e==null||e===""){try{localStorage.removeItem(Wu)}catch{}window.dispatchEvent(new CustomEvent(Wl,{detail:{datasets:null}}));return}try{const t=typeof e=="string"?JSON.parse(e):e;Array.isArray(t)&&qv(t.map(String))}catch{}}function I0(){const[e,t]=m.useState(Kv);return m.useEffect(()=>{const o=r=>t(r.detail?.datasets??null);return window.addEventListener(Wl,o),()=>window.removeEventListener(Wl,o)},[]),e}function Zv({onSelectionChange:e}={}){const t=I0(),[o,r]=m.useState([]),[n,i]=m.useState(""),a=async()=>{try{const g=await fetch("/bv_nodepack/completion/status");if(!g.ok)throw new Error(`HTTP ${g.status}`);const x=await g.json();r(Array.isArray(x?.datasets)?x.datasets:[]),i("")}catch(g){i(g instanceof Error?g.message:String(g))}};m.useEffect(()=>{a()},[]);const l=t??o.map(g=>g.id),c=g=>{qv(g,!0),e?.(g)},d=g=>c(l.includes(g)?l.filter(x=>x!==g):[...l,g]),f=(g,x)=>{const w=l.indexOf(g),k=w+x;if(w<0||k<0||k>=l.length)return;const b=[...l];[b[w],b[k]]=[b[k],b[w]],c(b)},u=new Map(o.map(g=>[g.id,g])),p=[...l.map(g=>u.get(g)).filter(g=>!!g),...o.filter(g=>!l.includes(g.id))];return s.jsxs("div",{className:"completion-dataset-picker",children:[s.jsx("strong",{children:"Completion Data"}),s.jsx("small",{children:"Topmost enabled dataset wins when tags are duplicated."}),p.map(g=>{const x=l.indexOf(g.id),w=x>=0;return s.jsxs("div",{children:[s.jsx(Xo,{label:g.name,help:`${(g.bytes/1048576).toFixed(1)} MiB`,checked:w,onValue:()=>d(g.id)}),s.jsxs("span",{className:"dataset-order",children:[s.jsx(le,{intent:"ghost",iconOnly:!0,disabled:!w||x===0,title:"Move up",onClick:()=>f(g.id,-1),children:"↑"}),s.jsx(le,{intent:"ghost",iconOnly:!0,disabled:!w||x===l.length-1,title:"Move down",onClick:()=>f(g.id,1),children:"↓"})]})]},g.id)}),!o.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(le,{onClick:()=>void a(),children:"Reload List"})]})}function j0(e){const t=Gv(),o=Yv(),r=e.openMenu,n=m.useRef(null),{menuOverflow:i}=Av(),a=m.useRef(null),l=m.useRef(null);m.useEffect(()=>{const f=u=>{n.current?.contains(u.target)||e.onOpenMenu(null)};return window.addEventListener("pointerdown",f),()=>window.removeEventListener("pointerdown",f)},[e.onOpenMenu]);const c=(f,u,p)=>s.jsx(fp,{open:r===f,onOpen:g=>e.onOpenMenu(g?f:null),trigger:({toggle:g})=>s.jsxs(le,{intent:"ghost",density:"compact","aria-label":u,title:u,"aria-expanded":r===f,onClick:g,children:[s.jsx("span",{className:"editor-menu-label-full",children:u}),s.jsx("span",{className:"editor-menu-label-short","aria-hidden":"true",children:u==="?"?u:u[0]})]}),children:p}),d=s.jsxs(s.Fragment,{children:[c("file","File",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsx(le,{intent:"ghost",onClick:()=>{e.onExportDocument(),e.onOpenMenu(null)},children:"Export Document"}),s.jsx(le,{intent:"ghost",onClick:()=>a.current?.click(),children:"Load and Replace Document"}),s.jsx("hr",{}),s.jsx(le,{intent:"ghost",onClick:()=>{e.onExportRegions(),e.onOpenMenu(null)},children:"Export Regions"}),s.jsx(le,{intent:"ghost",onClick:()=>l.current?.click(),children:"Add Regions"})]})),c("edit","Edit",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsxs(le,{intent:"ghost",disabled:!e.canUndo,onClick:e.onUndo,children:["Undo ",s.jsx("kbd",{children:"Ctrl Z"})]}),s.jsxs(le,{intent:"ghost",disabled:!e.canRedo,onClick:e.onRedo,children:["Redo ",s.jsx("kbd",{children:"Ctrl Shift Z"})]}),s.jsx(Xo,{label:"Prompt Autocomplete",help:"Optional. Disable it when using another completion extension.",checked:t,onValue:f=>Xv(f,!0)}),s.jsx(ft,{label:"Popup Position",value:o,onValue:f=>$v(f,!0),options:[{value:"caret",label:"At Caret"},{value:"field",label:"Below Text Field"}]}),s.jsx(Zv,{})]})),c("view","View",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsx(jt,{label:"Mask Display",value:e.displayOpacity,min:.05,max:1,step:.05,unit:"×",onValue:e.onDisplayOpacity}),s.jsx(jt,{label:"Background Image",value:e.backgroundOpacity,min:0,max:1,step:.05,unit:"×",onValue:e.onBackgroundOpacity}),s.jsx(Xo,{label:"Binary Mask Preview",checked:e.binaryMaskPreview,onValue:e.onToggleBinaryMaskPreview}),s.jsx(Xo,{label:"Isolate Selection",checked:e.isolate,disabled:!e.hasSelection,onValue:e.onToggleIsolate}),s.jsx("small",{children:"Affects the editor display only."})]})),c("artboard","Artboard",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsx(jt,{label:"Width",value:e.canvas.width,min:1,max:32768,step:1,unit:"px",slider:!1,onValue:f=>e.onCanvas({...e.canvas,width:f})}),s.jsx(jt,{label:"Height",value:e.canvas.height,min:1,max:32768,step:1,unit:"px",slider:!1,onValue:f=>e.onCanvas({...e.canvas,height:f})})]})),c("layers","Layers",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsxs(le,{intent:"ghost",disabled:!e.canMergeLayers,onClick:()=>{e.onMergeLayers(),e.onOpenMenu(null)},children:["Merge Selected Layers ",s.jsx("kbd",{children:"Ctrl E"})]}),s.jsx("small",{children:"Ctrl-click or Shift-click layers in one region to select them."})]})),c("help","?",s.jsxs("div",{className:"help-menu",children:[s.jsx(up,{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(up,{items:[{term:"Click",description:"Select layer"},{term:"Ctrl + Click",description:"Add/remove layer selection"},{term:"Shift + Click",description:"Select layer range"},{term:"Drag",description:"Draw or move"},{term:"Mouse wheel",description:"Zoom under cursor"}]})]}))]});return s.jsxs("div",{className:"editor-menus",ref:n,children:[i?s.jsx(fp,{trigger:({toggle:f})=>s.jsx(le,{intent:"ghost",density:"compact","aria-label":"Editor menus",onClick:f,children:"•••"}),children:s.jsx("div",{className:"editor-menus-overflow-panel",children:d})}):d,s.jsx("input",{hidden:!0,ref:a,type:"file",accept:"application/json,.json",onChange:f=>{const u=f.target.files?.[0];u&&e.onImportDocument(u),f.target.value=""}}),s.jsx("input",{hidden:!0,ref:l,type:"file",accept:"application/json,.json",onChange:f=>{const u=f.target.files?.[0];u&&e.onImportRegions(u),f.target.value=""}})]})}function Qv(e,t,o,r=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,d=l.slice(c);if(d.trim().length<2)return null;const f=n-l.length+c;return{...o,text:e,caret:n,term:d,start:f,end:n,limit:r}}function em(e,t,o){const r=e.slice(t.end).match(/^\s*[,;\n]/)?"":", ",n=`${o.insertText}${r}`;return{text:e.slice(0,t.start)+n+e.slice(t.end),caret:t.start+n.length}}async function tm(e,t,o){const r=await Promise.allSettled(t.map(i=>i.suggest(e,o)));if(o.aborted)return[];const n=new Map;return r.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 om={id:"bv-local-tags",async suggest(e,t){const o=await fetch("/bv_nodepack/completion/search",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({term:e.term.trim(),limit:e.limit,datasets:Kv()}),signal:t});if(!o.ok)return[];const r=await o.json();return(Array.isArray(r?.results)?r.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:{}}]:[]})}},P0=["fontFamily","fontSize","fontStyle","fontWeight","letterSpacing","lineHeight","textTransform","textIndent","textAlign","wordSpacing","paddingTop","paddingRight","paddingBottom","paddingLeft","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth"];function B0(e,t=e.selectionStart??e.value.length){const o=e.getBoundingClientRect(),r=window.getComputedStyle(e),n=document.createElement("div");n.setAttribute("aria-hidden","true"),Object.assign(n.style,{position:"fixed",visibility:"hidden",pointerEvents:"none",left:`${o.left}px`,top:`${o.top}px`,width:`${o.width}px`,height:`${o.height}px`,boxSizing:r.boxSizing,whiteSpace:"pre-wrap",overflowWrap:"break-word",overflow:"hidden"}),P0.forEach(c=>{n.style[c]=r[c]}),n.textContent=e.value.slice(0,t);const i=document.createElement("span");i.textContent=e.value.slice(t,t+1)||"​",n.append(i),document.body.append(n),n.scrollTop=e.scrollTop,n.scrollLeft=e.scrollLeft;const a=i.getBoundingClientRect(),l=Number.parseFloat(r.lineHeight)||Number.parseFloat(r.fontSize)*1.2||16;return n.remove(),{left:a.left,top:a.top,bottom:a.top+l}}function Vl(e,t,o=210){const i=e.getBoundingClientRect(),a=t==="caret"?B0(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)),d=Math.max(4,Math.min(a.left,window.innerWidth-c-4)),f=a.bottom+4,u=f+o<=window.innerHeight-4?f:Math.max(4,a.top-o-4);return{left:d,top:u,width:c}}function rm({suggestions:e,selected:t,position:o,onAccept:r}){return s.jsx("div",{className:"bv-completion-popup bv-global-completion-popup",style:o,role:"listbox",children:e.map((n,i)=>s.jsxs(le,{intent:"ghost",className:i===t?"active":"",onPointerDown:a=>{a.preventDefault(),r(i)},children:[s.jsx("span",{children:n.label}),s.jsx("small",{children:[n.category,n.detail,n.source].filter(Boolean).join(" · ")})]},n.id))})}function Hl({value:e,onValue:t,completionContext:o,onKeyDown:r,onBlur:n,onSelect:i,...a}){const l=Gv(),c=Yv(),d=m.useRef(null),[f,u]=m.useState([]),[p,g]=m.useState(0),[x,w]=m.useState(null),k=m.useRef(null),b=m.useRef(null),h=m.useRef(null),v=()=>{b.current?.abort(),u([]),w(null)},_=(E,R,P=R)=>{if(!l||R!==P)return v();h.current!=null&&window.clearTimeout(h.current),b.current?.abort();const I=Qv(E,R,o);if(k.current=I,!I)return v();const B=new AbortController;b.current=B,h.current=window.setTimeout(async()=>{const z=await tm(I,[om],B.signal);if(B.signal.aborted)return;const L=d.current;u(z),g(0),w(z.length&&L?Vl(L,c):null)},120)},y=(E=p)=>{const R=k.current,P=f[E];if(!R||!P)return;const I=em(e,R,P);t(I.text),v(),requestAnimationFrame(()=>{d.current?.focus(),d.current?.setSelectionRange(I.caret,I.caret)})};return m.useEffect(()=>{l||v()},[l]),m.useEffect(()=>{x&&d.current&&w(Vl(d.current,c))},[c]),m.useEffect(()=>()=>{b.current?.abort(),h.current!=null&&window.clearTimeout(h.current)},[]),s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"bv-textarea-shell resize-vertical",children:s.jsx(G_,{...a,ref:d,value:e,onChange:E=>{t(E.target.value),_(E.target.value,E.target.selectionStart,E.target.selectionEnd)},onSelect:E=>{_(E.currentTarget.value,E.currentTarget.selectionStart,E.currentTarget.selectionEnd),i?.(E)},onKeyDown:E=>{if(f.length){if(E.key==="ArrowDown"||E.key==="ArrowUp"){E.preventDefault(),E.stopPropagation(),g(R=>(R+(E.key==="ArrowDown"?1:-1)+f.length)%f.length);return}if(E.key==="Enter"||E.key==="Tab"){E.preventDefault(),E.stopPropagation(),y();return}if(E.key==="Escape"){E.preventDefault(),E.stopPropagation(),v();return}}r?.(E)},onBlur:E=>{window.setTimeout(v,120),n?.(E)}})}),l&&x&&s.jsx(rm,{suggestions:f,selected:p,position:x,onAccept:y})]})}function fn({label:e,help:t,value:o,onChange:r,children:n,disabled:i,className:a=""}){const l=Te.Children.toArray(n).flatMap(c=>Te.isValidElement(c)?[{value:String(c.props.value??c.props.children??""),label:String(c.props.children??c.props.value??""),disabled:c.props.disabled}]:[]);return s.jsx("div",{className:a,children:s.jsx(ft,{label:e,help:t,value:o,onValue:r,options:l,disabled:i})})}function hn({onChange:e,...t}){return s.jsx(jt,{...t,onValue:e})}const Pp=({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))]}),ac=({title:e,scope:t,value:o,open:r,onOpen:n,onChange:i})=>s.jsx(Il,{value:r?[t]:[],onValue:a=>n(a.includes(t)),items:[{id:t,title:e,content:s.jsxs("div",{className:"bv-prompt-editor-fields",children:[s.jsx(ko,{label:"Positive",children:s.jsx(Hl,{value:o.positive_source,onValue:a=>i({...o,positive_source:a}),completionContext:{scope:t,polarity:"positive"}})}),s.jsx(ko,{label:"Negative",children:s.jsx(Hl,{value:o.negative_source,onValue:a=>i({...o,negative_source:a}),completionContext:{scope:t,polarity:"negative"}})})]})}]}),z0=({region:e,automaticColor:t,onRegion:o})=>s.jsxs("section",{className:"bv-inspector-section",children:[s.jsx("h3",{children:"Mask & appearance"}),s.jsx(hn,{label:"Feather",value:e.mask.feather,min:0,max:.5,step:.005,onChange:r=>o(n=>{n.mask.feather=r})}),s.jsx("div",{className:"region-color-control",children:s.jsxs("div",{className:"region-color-split",children:[s.jsx(Q_,{label:"Display color",help:"Editor display only. It does not change masks or sampling.",value:e.authoring.color,onValue:r=>o(n=>{n.authoring.color=r.toUpperCase()})}),s.jsx(le,{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:()=>o(r=>{t&&(r.authoring.color=t)}),children:"↶"})]})})]});function F0(e){const t=e.layer?.geometries.find(n=>n.type==="brush_stroke"),[o,r]=m.useState(e.mode??(e.layer?"selection":e.region?"region":"document"));return m.useEffect(()=>r(e.mode??(e.layer?"selection":e.region?"region":"document")),[e.layer?.id,e.mode,e.region?.id]),s.jsx(Eu,{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(le,{intent:"ghost",role:"tab","aria-selected":o==="selection",disabled:!e.layer,onClick:()=>r("selection"),children:"Selection"}),s.jsx(le,{intent:"ghost",role:"tab","aria-selected":o==="region",disabled:!e.region,onClick:()=>r("region"),children:"Region"}),s.jsx(le,{intent:"ghost",role:"tab","aria-selected":o==="document",onClick:()=>r("document"),children:"Document"})]}),s.jsxs("div",{className:"inspector-tab-panel",role:"tabpanel",hidden:o!=="selection",children:[e.region&&s.jsx(z0,{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(hn,{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(hn,{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(hn,{label:"Hardness",value:t.hardness,min:0,max:1,step:.05,onChange:n=>e.onBrushSetting("hardness",n)}),s.jsx(hn,{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(fn,{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(fn,{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:o!=="region",children:e.region&&s.jsxs("section",{className:"bv-inspector-section",children:[s.jsx("h3",{children:"Region"}),s.jsxs(fn,{label:"Usage",help:"Controls whether this region participates in the main render, Detailer output, or both.",value:e.region.usage,onChange:n=>e.onRegion(i=>{i.usage=n}),children:[s.jsx("option",{value:"generation",children:"Generation"}),s.jsx("option",{value:"detailer",children:"Detailer only"}),s.jsx("option",{value:"both",children:"Generation + Detailer"})]}),s.jsx(fn,{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(Pp,{stacks:e.loraStacks})}),s.jsx(hn,{label:"Strength",value:e.region.strength,min:0,max:10,step:.05,onChange:n=>e.onRegion(i=>{i.strength=n})}),s.jsx(ac,{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:o!=="document",children:s.jsxs("section",{className:"bv-inspector-section",children:[s.jsx("h3",{children:"Document Prompts"}),s.jsx(fn,{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(Pp,{stacks:e.loraStacks})}),s.jsxs(fn,{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(ac,{title:"Global",scope:"global",value:e.globalPrompts,open:e.promptSections.global,onOpen:n=>e.onPromptSection("global",n),onChange:e.onGlobalPrompts}),s.jsx(ac,{title:"Background",scope:"background",value:e.backgroundPrompts,open:e.promptSections.background,onOpen:n=>e.onPromptSection("background",n),onChange:e.onBackgroundPrompts})]})})]})})}const tt=(e,t=0,o=1)=>Math.max(t,Math.min(o,e));function U0(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 o=e.points.map(u=>u.x),r=e.points.map(u=>u.y);if(e.type==="polygon")return{x:Math.min(...o),y:Math.min(...r),width:Math.max(...o)-Math.min(...o),height:Math.max(...r)-Math.min(...r)};const n=Math.min(t.width,t.height),i=e.size*n/t.width/2,a=e.size*n/t.height/2,l=tt(Math.min(...o)-i),c=tt(Math.min(...r)-a),d=tt(Math.max(...o)+i),f=tt(Math.max(...r)+a);return{x:l,y:c,width:d-l,height:f-c}}function nm(e,t,o){const r=o.x-t.x,n=o.y-t.y;if(r===0&&n===0)return Math.hypot(e.x-t.x,e.y-t.y);const i=tt(((e.x-t.x)*r+(e.y-t.y)*n)/(r*r+n*n));return Math.hypot(e.x-(t.x+i*r),e.y-(t.y+i*n))}function W0(e,t,o={width:1,height:1}){if(e.type==="rect"||e.type==="raster_mask")return t.x>=e.x&&t.x<=e.x+e.width&&t.y>=e.y&&t.y<=e.y+e.height;if(e.type==="ellipse"){const a=e.width/2,l=e.height/2;return((t.x-e.x-a)/a)**2+((t.y-e.y-l)/l)**2<=1}if(e.type==="polygon"){let a=!1;for(let l=0,c=e.points.length-1;lt.y!=f.y>t.y&&t.x<(f.x-d.x)*(t.y-d.y)/(f.y-d.y)+d.x&&(a=!a)}return a}const r=a=>({...a,x:a.x*o.width,y:a.y*o.height}),n=e.size*Math.min(o.width,o.height)/2,i=r(t);return e.points.length===1?Math.hypot(i.x-e.points[0].x*o.width,i.y-e.points[0].y*o.height)<=n:e.points.slice(1).some((a,l)=>nm(i,r(e.points[l]),r(a))<=n)}function ks(e,t){const o=e.map(l=>U0(l,t)),r=Math.min(...o.map(l=>l.x)),n=Math.min(...o.map(l=>l.y)),i=Math.max(...o.map(l=>l.x+l.width)),a=Math.max(...o.map(l=>l.y+l.height));return{x:r,y:n,width:i-r,height:a-n}}function Bp(e,t,o,r){const n=ks(e,r);return t=tt(t,-n.x,1-n.x-n.width),o=tt(o,-n.y,1-n.y-n.height),e.map(i=>{const a=Yt(i);return a.type==="rect"||a.type==="ellipse"||a.type==="raster_mask"?(a.x+=t,a.y+=o):a.points=a.points.map(l=>({...l,x:l.x+t,y:l.y+o})),a})}function im(e,t,o){const r=ks(e,o);t={x:tt(t.x,0,.998),y:tt(t.y,0,.998),width:tt(t.width,.002,1),height:tt(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(r.width,1e-6),i=t.height/Math.max(r.height,1e-6);return e.map(a=>{const l=Yt(a);return l.type==="rect"||l.type==="ellipse"||l.type==="raster_mask"?(l.x=t.x+(l.x-r.x)*n,l.y=t.y+(l.y-r.y)*i,l.width*=n,l.height*=i):(l.points=l.points.map(c=>({...c,x:t.x+(c.x-r.x)*n,y:t.y+(c.y-r.y)*i})),l.type==="brush_stroke"&&(l.size=tt(l.size*Math.sqrt(n*i),.001,1))),l})}function V0(e,t,o,r,n=!1,i){const a=ks(e,i);let l=a.x,c=a.y,d=l+a.width,f=c+a.height;if(t.includes("w")&&(l=tt(l+o,0,d-.002)),t.includes("e")&&(d=tt(d+o,l+.002,1)),t.includes("n")&&(c=tt(c+r,0,f-.002)),t.includes("s")&&(f=tt(f+r,c+.002,1)),n&&t.length===2){const u=a.width/Math.max(a.height,1e-4),p=d-l,g=f-c;if(p/g>u){const x=p/u;t.includes("n")?c=tt(f-x):f=tt(c+x)}else{const x=g*u;t.includes("w")?l=tt(d-x):d=tt(l+x)}}return im(e,{x:l,y:c,width:d-l,height:f-c},i)}function H0(e,t,o){return nm(e,t,o)}function $0(e,t=.0015){if(e.length<=2)return e;const o=[e[0]];for(const n of e.slice(1,-1))Math.hypot(n.x-o[o.length-1].x,n.y-o[o.length-1].y)>=t&&o.push(n);o.push(e[e.length-1]);const r=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]]:[...r(n.slice(0,a+1)).slice(0,-1),...r(n.slice(a))]};return r(o)}const zp=e=>e.layer_id??e.id,Y0=e=>e.authoring??{name:"Layer",visible:!0,locked:!1};function X0(e,t,o,r){if(r==="replace")return{ids:[t],primary:t,anchor:t};if(r==="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&&o.includes(e.anchor)?e.anchor:e.primary;if(!n)return{ids:[t],primary:t,anchor:t};const i=o.indexOf(n),a=o.indexOf(t);return i<0||a<0?{ids:[t],primary:t,anchor:t}:{ids:o.slice(Math.min(i,a),Math.max(i,a)+1),primary:t,anchor:n}}function G0(e,t,o){const r=new Set(t);if(r.size<2||!r.has(o))return!1;const n=e.geometry.find(l=>zp(l)===o);if(!n)return!1;const i=Y0(n);let a=!1;return e.geometry.forEach(l=>{const c=zp(l);r.has(c)&&(l.mask_group_id??(l.mask_group_id=c),l.layer_id=o,l.authoring={...i},a||(a=c!==o))}),a}function am(e,t){const o=new Map;e.forEach(r=>{r.mask_group_id&&(o.has(r.mask_group_id)||o.set(r.mask_group_id,t()),r.mask_group_id=o.get(r.mask_group_id))})}const K0="bv-regional-editor-state-v1:",et=(e,t)=>typeof e=="number"&&Number.isFinite(e)?e:t,wt=(e,t,o)=>Math.max(t,Math.min(o,e)),q0=["select","rect-add","rect-subtract","ellipse-add","ellipse-subtract","polygon-add","polygon-subtract","brush-add","brush-subtract"];function lm(e){return`${K0}${e}`}function J0(e,t,o={width:520,height:560}){return{x:wt(et(e.x,t.width-o.width-24),-o.width+52,t.width-52),y:wt(et(e.y,84),72,Math.max(72,t.height-52))}}function $l(e,t){const o=wt(et(e.width,520),Math.min(360,t.width),Math.max(360,t.width-32)),r=wt(et(e.height,640),Math.min(320,t.height),Math.max(320,t.height-32));return{...J0({x:et(e.x,t.width-o-24),y:et(e.y,84)},t,{width:o}),width:o,height:r}}function Fp(e,t){return e.mode==="workspace"?rn({x:24,y:58,width:t.width-48,height:t.height-82},t,"workspace"):e.windows.floating}function rn(e,t,o){const r=Math.min(780,Math.max(320,t.width-16)),n=Math.min(520,Math.max(300,t.height-16)),i=Math.max(r,t.width),a=Math.max(n,t.height),l=wt(et(e.width,r),r,i),c=wt(et(e.height,n),n,a),d=o==="workspace"?8:0;return{x:wt(et(e.x,d),d-l+80,t.width-d-80),y:wt(et(e.y,58),0,t.height-42),width:l,height:c}}function Hu(e={width:window.innerWidth,height:window.innerHeight}){const t=rn({x:24,y:58,width:e.width-48,height:e.height-82},e,"workspace"),o=Math.min(1100,e.width-32),r=Math.min(760,e.height-80),n=rn({x:Math.max(16,e.width-o-32),y:64,width:o,height:r},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:$l({x:e.width-544,y:84,width:520,height:640},e)}}function Z0(e,t={width:window.innerWidth,height:window.innerHeight}){const o=Hu(t),r=e&&typeof e=="object"?e:{},n=r.mode==="floating"?"floating":"workspace",i=r.windows&&typeof r.windows=="object"?r.windows:o.windows,a=r.panels&&typeof r.panels=="object"?r.panels:o.panels,l=r.artboard&&typeof r.artboard=="object"?r.artboard:o.artboard,c=r.brush&&typeof r.brush=="object"?r.brush:o.brush;return{version:1,mode:n,windows:{workspace:rn(i.workspace??o.windows.workspace,t,"workspace"),floating:rn(i.floating??o.windows.floating,t,"floating")},panels:{left:wt(et(a.left,290),210,620),right:wt(et(a.right,340),210,620)},artboard:{zoom:wt(et(l.zoom,1),.02,8),panX:et(l.panX,0),panY:et(l.panY,0),fit:typeof l.fit=="boolean"?l.fit:!0},selectedRegionId:typeof r.selectedRegionId=="string"?r.selectedRegionId:null,selectedLayerId:typeof r.selectedLayerId=="string"?r.selectedLayerId:null,displayOpacity:wt(et(r.displayOpacity,.5),.05,1),backgroundOpacity:wt(et(r.backgroundOpacity,1),0,1),isolate:r.isolate===!0,tool:r.tool==="rect"?"rect-add":q0.includes(r.tool)?r.tool:"select",binaryMaskPreview:r.binaryMaskPreview===!0,brush:{size:wt(et(c.size,.04),.001,1),hardness:wt(et(c.hardness,.75),0,1),opacity:wt(et(c.opacity,1),0,1),shape:c.shape==="square"?"square":"round",pressureMode:c.pressureMode==="stylus"?"stylus":"constant"},openMenu:["file","edit","view","artboard","layers","help"].includes(r.openMenu)?r.openMenu:null,promptSections:{region:r.promptSections?.region===!0,global:r.promptSections?.global===!0,background:r.promptSections?.background===!0},quickPromptTarget:typeof r.quickPromptTarget=="string"&&r.quickPromptTarget?r.quickPromptTarget:"global",quickPromptWindow:$l(r.quickPromptWindow??o.quickPromptWindow,t)}}function ll(e,t=localStorage,o={width:window.innerWidth,height:window.innerHeight}){try{return Z0(JSON.parse(t.getItem(lm(e))||"null"),o)}catch{return Hu(o)}}function yd(e,t,o=localStorage){try{return o.setItem(lm(e),JSON.stringify(t)),!0}catch{return!1}}function Q0(e,t,o,r=8){if(e.length!==t*o)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=r&&(n[y]=a,l[f++]=y)}}i.push({label:a,x:u,y:p,width:g-u+1,height:x-p+1,pixels:w})}return{labels:n,areas:i}}const _d=(e,t)=>{const o=document.createElement("canvas");return o.width=e,o.height=t,o},e1=e=>new Promise((t,o)=>{const r=new Image;r.onload=()=>t(r),r.onerror=()=>o(new Error("Raster layer image could not be decoded")),r.src=e});async function t1(e,t,o,r){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*o,t.y*r,t.width*o,t.height*r);else if(t.type==="ellipse")e.beginPath(),e.ellipse((t.x+t.width/2)*o,(t.y+t.height/2)*r,t.width*o/2,t.height*r/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*o,n.y*r):e.moveTo(n.x*o,n.y*r)),e.closePath(),e.fill();else if(t.type==="raster_mask")e.drawImage(await e1(t.data_url),t.x*o,t.y*r,t.width*o,t.height*r);else{const n=Math.min(o,r),i=t.points,a=t.size*n,l=t.shape==="square"?"square":"round",c=(u,p,g=0)=>{const x=a*u.pressure*p;e.filter=g>0?`blur(${g}px)`:"none",e.beginPath(),t.shape==="square"?e.rect(u.x*o-x/2,u.y*r-x/2,x,x):e.arc(u.x*o,u.y*r,x/2,0,Math.PI*2),e.fill()},d=(u,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)):(d(1,f),t.hardness>0&&d(t.hardness))}e.restore()}async function o1(e,t,o){const r=_d(t,o),n=r.getContext("2d",{willReadFrequently:!0}),i=new Map;e.filter(a=>a.enabled!==!1).forEach(a=>{const l=ha(a),c=i.get(l);c?c.push(a):i.set(l,[a])});for(const a of i.values()){const l=_d(t,o),c=l.getContext("2d");for(const d of a)await t1(c,d,t,o);n.drawImage(l,0,0)}return r}async function r1(e,t,o){const i=(await o1(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 u=0;uu.pixels>1);if(d.length<2)return[];const f={...e[0].authoring??{name:"Layer",visible:!0,locked:!1}};return d.map((u,p)=>{const g=_d(u.width,u.height),x=g.getContext("2d"),w=x.createImageData(u.width,u.height);for(let b=0;b({schema:"bv.regional.lora_bindings",version:1,document_id:e,global_stack_id:null,regions:{}});function n1(e,t,o){if(!t)return!1;const r=o.filter(n=>n.id===t);return r.length>1&&r[0].nodeId!==e}function $u(e,t){if(e==null||e==="")return Es(t);const o=typeof e=="string"?JSON.parse(e):structuredClone(e);if(o?.schema!=="bv.regional.lora_bindings"||o?.version!==1||typeof o?.regions!="object"||Array.isArray(o.regions))throw new Error("Not a valid BV regional LoRA bindings v1 value");if(o.document_id&&o.document_id!==t)throw new Error("LoRA bindings target a different BV Regional document");const r={};for(const[n,i]of Object.entries(o.regions))typeof i=="string"&&i&&(r[n]=i);return{schema:"bv.regional.lora_bindings",version:1,document_id:t,global_stack_id:typeof o.global_stack_id=="string"&&o.global_stack_id?o.global_stack_id:null,regions:r}}function Mn(e,t){const o=Object.fromEntries(Object.entries(e.regions).filter(([r])=>t.has(r)));return{...e,regions:o}}function lc(e,t){const o=structuredClone(e);return{document:o,loraBindings:structuredClone(Mn(t,new Set(o.regions.map(r=>r.id))))}}function i1(e,t,o){const r=t.find((c,d)=>t.findIndex(f=>f.id===c.id)!==d);if(r)return[`Duplicate LoRA stack ID: ${r.id}`];const n=t.find((c,d)=>t.findIndex(f=>f.name.localeCompare(c.name,void 0,{sensitivity:"accent"})===0)!==d);if(n)return[`Duplicate LoRA stack name: ${n.name}`];const i=o&&Object.keys(e.regions).find(c=>!o.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 a1(e,t,o){const r=new Map(t.map(i=>[i.id,i.name])),n=[];e.global_stack_id&&n.push(`Global: ${r.get(e.global_stack_id)??"Missing stack"}`);for(const[i,a]of Object.entries(e.regions))n.push(`${o[i]??"Missing region"}: ${r.get(a)??"Missing stack"}`);return n.length?`${n.join(" · ")} · source values unchanged`:"No LoRA stacks assigned"}const Yl=(e,t)=>e.regions.find(o=>o.id===t)??null,wd=(e,t)=>e?Lo(e).find(o=>o.id===t)??null:null,kd=e=>e.kind==="layer"||e.kind==="geometry"?e.layerId:null;function l1(e,t){const o=Yl(e,t.source.regionId),r=Yl(e,t.target.regionId);if(!o||!r||o.authoring.locked||r.authoring.locked||t.source.kind!=="region"&&wd(o,t.source.layerId)?.authoring.locked)return!1;const n=kd(t.target);return!(n&&wd(r,n)?.authoring.locked)}function s1(e,t,o,r){if(!o||r==="inside"){e.geometry.push(...t);return}const n=e.geometry.map((a,l)=>Pt(a)===o?l:-1).filter(a=>a>=0);if(!n.length){e.geometry.push(...t);return}const i=r==="before"?n[n.length-1]+1:n[0];e.geometry.splice(i,0,...t)}function c1(e,t,o){if(!l1(e,t))return!1;const r=structuredClone(e.regions),n=()=>e.regions.every(u=>zb(u.geometry))?!0:(e.regions=r,!1);if(t.source.kind==="region"){if(t.target.kind!=="region"||t.position==="inside"||t.source.regionId===t.target.regionId)return!1;const u=e.regions.findIndex(x=>x.id===t.source.regionId),[p]=e.regions.splice(u,1),g=e.regions.findIndex(x=>x.id===t.target.regionId);return e.regions.splice(t.position==="before"?g:g+1,0,p),e.regions.forEach((x,w)=>{x.priority=w}),n()}const i=Yl(e,t.source.regionId),a=Yl(e,t.target.regionId);if(t.source.kind==="layer"){const u=t.source;if(t.target.kind==="geometry"||u.layerId===kd(t.target))return!1;const p=i.geometry.filter(g=>Pt(g)===u.layerId);return p.length?(i.geometry=i.geometry.filter(g=>Pt(g)!==u.layerId),s1(a,p,kd(t.target),t.position),n()):!1}const l=t.source,c=i.geometry.findIndex(u=>u.id===l.geometryId);if(c<0||t.target.kind==="region"&&t.position!=="inside")return!1;const[d]=i.geometry.splice(c,1);if(t.target.kind==="region")return d.layer_id=o(),delete d.mask_group_id,d.authoring={...io(d)},a.geometry.push(d),n();const f=t.target.layerId;if((f!==l.layerId||a!==i)&&(d.mask_group_id??(d.mask_group_id=l.layerId),d.layer_id=f,d.authoring={...wd(a,f).authoring}),t.target.kind==="layer"||t.position==="inside"){const u=a.geometry.map((p,g)=>Pt(p)===f?g:-1).filter(p=>p>=0);a.geometry.splice(u.length?u[u.length-1]+1:a.geometry.length,0,d)}else{const u=t.target,p=a.geometry.findIndex(g=>g.id===u.geometryId);a.geometry.splice(t.position==="before"?p:p+1,0,d)}return n()}const Ar=e=>ea(Nt().rootGraph??Nt().graph,e),Up=e=>e?.widgets?.find(t=>t.name==="regional_json"),Fa=e=>e?.widgets?.find(t=>t.name==="lora_bindings_json"),Wp=(e,t)=>e&&t?e.geometry.filter(o=>Pt(o)===t):[],Dr=T0,sc=(e,t)=>{const o=e.currentTarget.getBoundingClientRect();return{x:Math.max(0,Math.min(1,(e.clientX-o.left)/o.width)),y:Math.max(0,Math.min(1,(e.clientY-o.top)/o.height)),pressure:t==="stylus"&&e.pointerType==="pen"?Math.max(.01,e.pressure):1}};function Vp(e,t){const o=URL.createObjectURL(new Blob([JSON.stringify(t,null,2)],{type:"application/json"})),r=document.createElement("a");r.href=o,r.download=e,r.click(),URL.revokeObjectURL(o)}function d1(e){const t=new Map(e.map(o=>[o.id,Lt()]));return Yt(e).map(o=>{o.id=t.get(o.id),o.parent_region_id=o.parent_region_id?t.get(o.parent_region_id)??null:null,am(o.geometry,Lt);const r=new Map;return o.geometry.forEach(n=>{const i=Pt(n);r.has(i)||r.set(i,Lt()),n.id=Lt(),n.layer_id=r.get(i)}),o})}function u1({open:e,activationToken:t=0,nodes:o,initialNode:r,backgrounds:n,loraStacks:i,onClose:a}){const[l,c]=m.useState(r),[d,f]=m.useState(null),[u,p]=m.useState(null),[g,x]=m.useState(null),[w,k]=m.useState([]),[b,h]=m.useState(null),[v,_]=m.useState(null),[y,E]=m.useState("select"),[R,P]=m.useState({size:.04,hardness:.75,opacity:1,shape:"round",pressureMode:"constant"}),[I,B]=m.useState(.5),[z,L]=m.useState(1),[T,j]=m.useState(!1),[D,S]=m.useState([]),[N,A]=m.useState([]),[V,F]=m.useState(null),[ne,Y]=m.useState(null),[K,Z]=m.useState(""),[$,Q]=m.useState(()=>Hu()),[re,ae]=m.useState(0),[Le,ke]=m.useState([]),[ve,Dt]=m.useState(()=>Es("")),J=Su(),se=m.useRef(null),ce=m.useRef(!1),X=m.useRef(t),fe=m.useRef(null),pe=m.useCallback(C=>Q(M=>{const W=M.artboard;return W.zoom===C.zoom&&W.panX===C.panX&&W.panY===C.panY&&W.fit===C.fit?M:{...M,artboard:C}}),[]),ge=m.useCallback(C=>Q(M=>M.openMenu===C?M:{...M,openMenu:C}),[]);m.useEffect(()=>{const C=ce.current,M=X.current!==t;if(ce.current=e,X.current=t,!e||!M)return;const W=r??o[0]??null,H=Ar(l),q=Ar(W);C&&H&&q!==H&&$n()==="keep"?ke(ue=>[...new Set([...ue,H])].filter(Re=>Re!==q)):q&&ke(ue=>ue.filter(Re=>Re!==q)),fe.current=C?{mode:$.mode,geometry:Fp($,{width:window.innerWidth,height:window.innerHeight})}:null,c(W)},[t,r,o,e]),m.useEffect(()=>{h(null)},[l,e]),m.useEffect(()=>{if(!(!e||!l))try{const C=on(Up(l)?.value);C.regions=jp(C.regions),Dr(C.regions);const M=$u(Fa(l)?.value,C.document_id),W=Mn(M,new Set(C.regions.map(ho=>ho.id))),H=Fa(l);H&&JSON.stringify(M)!==JSON.stringify(W)&&(H.value=JSON.stringify(W),H.callback?.(H.value),l.graph?.setDirtyCanvas?.(!0,!0));const q=ll(C.document_id),ue=C.regions.some(ho=>ho.id===q.selectedRegionId)?q.selectedRegionId:C.regions[0]?.id??null,Re=fe.current;fe.current=null,Re&&(q.mode=Re.mode,q.windows[Re.mode]=Re.geometry);const st=C.regions.find(ho=>ho.id===ue),Vt=st&&Lo(st).some(ho=>ho.id===q.selectedLayerId)?q.selectedLayerId:null;Q(q),f(C),Dt(W),p(ue),x(Vt),k(Vt?[Vt]:[]),_(Vt),E(q.tool),P(q.brush),B(q.displayOpacity),L(q.backgroundOpacity),j(q.isolate&&!!Vt),S([]),A([]),Z("")}catch(C){Z(C instanceof Error?C.message:String(C))}},[l,e]),m.useEffect(()=>{d&&yd(d.document_id,{...$,selectedRegionId:u,selectedLayerId:g,displayOpacity:I,backgroundOpacity:z,isolate:T,tool:y,brush:R})},[z,R,I,d,T,g,u,y,$]),m.useEffect(()=>{if(!e)return;const C=()=>Q(M=>({...M,windows:{workspace:rn(M.windows.workspace,{width:window.innerWidth,height:window.innerHeight},"workspace"),floating:rn(M.windows.floating,{width:window.innerWidth,height:window.innerHeight},"floating")}}));return window.addEventListener("resize",C),()=>window.removeEventListener("resize",C)},[e]);const Ce=d?.regions.find(C=>C.id===u)??null,Qe=Wp(Ce,g),Be=b?Qe.filter(C=>C.id===b):Qe,_e=Ce&&g?Lo(Ce).find(C=>C.id===g)??null:null,xe=Ce?Lo(Ce).filter(C=>w.includes(C.id)):[],ze=xe.length>1&&xe.every(C=>!C.authoring.locked),Je=!!_e&&!_e.authoring.locked,Fe=C=>{x(C),k(C?[C]:[]),_(C),h(null)},jo=(C,M,W)=>{const H=d?.regions.find(Vt=>Vt.id===C);if(!H)return;const q=C===u,ue=[...Lo(H)].reverse().map(Vt=>Vt.id),st=X0(q?{ids:w,primary:g,anchor:v}:{ids:[],primary:null,anchor:null},M,ue,W);p(C),k(st.ids),x(st.primary),_(st.anchor),j(!1),h(null)},sn=V&&g&&V.every(C=>Pt(C)===g)?se.current&&"commit"in se.current&&se.current.commit==="subtract"?[...Be,...V]:V:Be,Cr=sn.length&&d?ks(sn,d.canvas):null,Eo=m.useCallback((C,M=!0,W=ve)=>{if(!l)return;M&&d&&(S(Re=>[...Re.slice(-99),lc(d,ve)]),A([]));const H=Mn(W,new Set(C.regions.map(Re=>Re.id)));f(C);const q=Up(l);q&&(q.value=JSON.stringify(C),q.callback?.(q.value)),Dt(H);const ue=Fa(l);ue&&(ue.value=JSON.stringify(H),ue.callback?.(ue.value)),l.graph?.setDirtyCanvas?.(!0,!0)},[d,ve,l]),Ne=m.useCallback((C,M=!0)=>{if(!d)return;const W=Yt(d);C(W),Eo(W,M)},[d,Eo]),or=m.useCallback(C=>{if(!l)return;const M=d?Mn(C,new Set(d.regions.map(H=>H.id))):C;Dt(M);const W=Fa(l);W&&(W.value=JSON.stringify(M),W.callback?.(W.value)),l.graph?.setDirtyCanvas?.(!0,!0)},[d,l]),va=C=>or({...ve,global_stack_id:C}),ma=(C,M)=>{const W={...ve.regions};M?W[C]=M:delete W[C],or({...ve,regions:W})},xa=C=>Ne(M=>{const W=M.regions.find(H=>H.id===u);W&&C(W)}),Nr=(C,M)=>Ne(W=>{const H=W.regions.find(q=>q.id===u);H&&M(Wp(H,C),H)}),po=m.useCallback(()=>{se.current=null,F(null)},[]),Rs=m.useCallback(()=>{if(se.current?.mode!=="draw-polygon"||!V?.length)return;const C=V.map(M=>M.type==="polygon"?{...M,points:M.points.filter((W,H,q)=>H===0||Math.hypot(W.x-q[H-1].x,W.y-q[H-1].y)>.001)}:M);if(C.some(M=>M.type!=="polygon"||M.points.length<3))return po();Ne(M=>{const W=M.regions.find(H=>H.id===u);W&&W.geometry.push(...C)}),po()},[po,V,Ne,u]),Ss=m.useCallback(()=>{if(!d||!D.length)return;const C=D[D.length-1];S(D.slice(0,-1)),A([lc(d,ve),...N]),Eo(Yt(C.document),!1,Yt(C.loraBindings))},[d,N,D,ve,Eo]),Ls=m.useCallback(()=>{if(!d||!N.length)return;const C=N[0];A(N.slice(1)),S([...D,lc(d,ve)]),Eo(Yt(C.document),!1,Yt(C.loraBindings))},[d,N,D,ve,Eo]),Cs=C=>{Nr(C,(M,W)=>{W.geometry=W.geometry.filter(H=>Pt(H)!==C)}),w.includes(C)&&Fe(null)},xm=C=>Ne(M=>{const W=M.regions.find(q=>q.id===u),H=W?.geometry.find(q=>q.id===C);H&&(H.enabled=H.enabled===!1)}),ym=C=>{const M=d?.regions.find(W=>W.id===u);if(!M||!fd(M.geometry,C)){No({title:"Operation cannot be removed",message:"This operation is the additive base for later subtract operations. Delete or move those operations first.",tone:"warning",duration:5e3});return}Ne(W=>{const H=W.regions.find(q=>q.id===u);H&&(H.geometry=H.geometry.filter(q=>q.id!==C))}),b===C&&h(null)},Ku=()=>{if(!u||!g||!ze)return;const C=g;Ne(M=>{const W=M.regions.find(H=>H.id===u);W&&G0(W,w,C)}),Fe(C)},_m=async()=>{if(!(!d||!u||!g||!_e||!Je))try{const C=await r1(_e.geometries,d.canvas,Lt);if(C.length<2){No({title:"Layer was not split",message:"The selected layer contains fewer than two disconnected visible areas.",tone:"info",duration:4500});return}Ne(W=>{const H=W.regions.find(ue=>ue.id===u);if(!H)return;const q=H.geometry.findIndex(ue=>Pt(ue)===g);H.geometry=H.geometry.filter(ue=>Pt(ue)!==g),H.geometry.splice(Math.max(0,q),0,...C)});const M=C.map(W=>Pt(W));k(M),x(M[0]),_(M[0])}catch(C){No({title:"Split failed",message:String(C),tone:"danger",duration:6e3})}};m.useEffect(()=>{if(!e)return;const C=M=>{if(M.key==="Escape"&&se.current){M.preventDefault(),M.stopImmediatePropagation(),po();return}if(M.key==="Enter"&&se.current?.mode==="draw-polygon"){M.preventDefault(),M.stopImmediatePropagation(),Rs();return}if((M.ctrlKey||M.metaKey)&&M.key.toLowerCase()==="e"&&ze){M.preventDefault(),M.stopImmediatePropagation(),Ku();return}if((M.key==="Delete"||M.key==="Backspace")&&g&&!(M.target instanceof HTMLInputElement||M.target instanceof HTMLTextAreaElement)){M.preventDefault(),M.stopImmediatePropagation(),Cs(g);return}!(M.ctrlKey||M.metaKey)||M.key.toLowerCase()!=="z"||(M.preventDefault(),M.stopImmediatePropagation(),M.shiftKey?Ls():Ss())};return window.addEventListener("keydown",C,!0),()=>window.removeEventListener("keydown",C,!0)},[po,ze,Cs,Rs,e,Ls,g,w,Ss]);const wm=C=>{if(!d||!Ce||Ce.authoring.locked)return;const M=sc(C,R.pressureMode),W=C.target.closest?.("[data-handle]")?.getAttribute("data-handle");if(y==="select"){if(C.currentTarget.setPointerCapture(C.pointerId),F(null),W&&_e&&!_e.authoring.locked){se.current={mode:"resize",start:M,original:Yt(Be),handle:W};return}const Qt=[...Lo(Ce)].reverse().find(Mt=>Mt.enabled&&Mt.authoring.visible&&Mt.geometries.filter(ti=>ti.operation==="add").some(ti=>W0(ti,M,d.canvas)));Fe(Qt?.id??null),Qt&&!Qt.authoring.locked&&(se.current={mode:"move",start:M,startScreen:{x:C.clientX,y:C.clientY},original:Yt(Qt.geometries),started:!1});return}const H=y.endsWith("subtract");if(H&&(!g||_e?.authoring.locked))return;if(y.startsWith("polygon")&&se.current?.mode==="draw-polygon"){F(Qt=>Qt?.map(Mt=>Mt.type==="polygon"?{...Mt,points:[...Mt.points,M]}:Mt)??null);return}const q=Lt(),ue=H?null:w0(_e),Re=H?g:ue??q,st=y.startsWith("rect")?"Rectangle":y.startsWith("ellipse")?"Ellipse":y.startsWith("polygon")?"Polygon":"Brush",Vt=H||ue?_e?.authoring:{name:`${st} ${Lo(Ce).length+1}`,visible:!0,locked:!1},ho=H?[...new Set(Be.map(ha))]:[void 0];if(y.startsWith("rect")||y.startsWith("ellipse")){C.currentTarget.setPointerCapture(C.pointerId);const Qt=y.startsWith("rect")?"rect":"ellipse";F(ho.map((Mt,ti)=>({id:ti?Lt():q,layer_id:Re,mask_group_id:Mt,type:Qt,operation:H?"subtract":"add",enabled:!0,authoring:Vt,x:M.x,y:M.y,width:.001,height:.001}))),se.current={mode:"draw-box",start:M,commit:H?"subtract":"add"},H||Fe(Re)}else y.startsWith("polygon")?(F(ho.map((Qt,Mt)=>({id:Mt?Lt():q,layer_id:Re,mask_group_id:Qt,type:"polygon",operation:H?"subtract":"add",enabled:!0,authoring:Vt,points:[M]}))),se.current={mode:"draw-polygon",start:M,commit:H?"subtract":"add"},H||Fe(Re)):(C.currentTarget.setPointerCapture(C.pointerId),F(ho.map((Qt,Mt)=>({id:Mt?Lt():q,layer_id:Re,mask_group_id:Qt,type:"brush_stroke",operation:y==="brush-add"?"add":"subtract",enabled:!0,authoring:Vt,size:R.size,hardness:R.hardness,opacity:R.opacity,shape:R.shape,pressure_mode:R.pressureMode,points:[M]}))),se.current={mode:"draw-brush",start:M,commit:y==="brush-add"?"add":"subtract"},y==="brush-add"&&Fe(Re))},km=C=>{if(!d)return;const M=sc(C,R.pressureMode);Y(M);const W=se.current;if(W)if(W.mode==="draw-box"&&(V?.[0]?.type==="rect"||V?.[0]?.type==="ellipse"))F(V.map(H=>H.type==="rect"||H.type==="ellipse"?{...H,x:Math.min(W.start.x,M.x),y:Math.min(W.start.y,M.y),width:Math.max(.001,Math.abs(M.x-W.start.x)),height:Math.max(.001,Math.abs(M.y-W.start.y))}:H));else if(W.mode==="draw-brush"&&V?.[0]?.type==="brush_stroke")F(V.map(H=>H.type==="brush_stroke"?{...H,points:[...H.points,M]}:H));else if(W.mode==="move"){if(!W.started&&!k0(W.startScreen,{x:C.clientX,y:C.clientY}))return;W.started=!0,F(Bp(W.original,M.x-W.start.x,M.y-W.start.y,d.canvas))}else W.mode==="resize"&&F(V0(W.original,W.handle,M.x-W.start.x,M.y-W.start.y,C.shiftKey,d.canvas))},Em=C=>{if(!d||!se.current||!V)return po();const M=se.current,W=sc(C,R.pressureMode);if(M.mode==="draw-polygon")return;let H=R0(M.mode)?V.map(q=>q.type==="brush_stroke"?{...q,points:$0([...q.points,W])}:q):V;if(M.mode==="draw-box"&&(H[0].type==="rect"||H[0].type==="ellipse")&&(H[0].width<=.002||H[0].height<=.002))return po();Ne(q=>{const ue=q.regions.find(Re=>Re.id===u);if(ue)if(M.mode.startsWith("draw"))ue.geometry.push(...H);else{const Re=new Map(H.map(st=>[st.id,st]));ue.geometry=ue.geometry.map(st=>Re.get(st.id)??st)}}),po()},Tm=C=>{se.current?.mode==="draw-polygon"&&(C.preventDefault(),Rs())},Rm=(C,M)=>Ne(W=>{const H=W.regions.findIndex(ue=>ue.id===C),q=H+M;q<0||q>=W.regions.length||([W.regions[H],W.regions[q]]=[W.regions[q],W.regions[H]],Dr(W.regions))}),Sm=(C,M)=>Nr(C,(W,H)=>{const q=Lo(H),ue=q.findIndex(st=>st.id===C),Re=ue+M;Re<0||Re>=q.length||([q[ue],q[Re]]=[q[Re],q[ue]],H.geometry=q.flatMap(st=>st.geometries))}),Lm=C=>{let M=!1,W=null;if(Ne(q=>{M=c1(q,C,()=>W=Lt()),Dr(q.regions)}),!M)return;if(p(C.target.regionId),C.source.kind==="region"){Fe(null);return}const H=C.source.kind==="layer"?C.source.layerId:C.target.kind==="region"?W:C.target.layerId;x(H),k(H?[H]:[]),_(H),h(C.source.kind==="geometry"?C.source.geometryId:null),j(!1)},Cm=(C,M)=>Nr(C,W=>{if(W.length)if(M==="enabled"){const H=!W.some(q=>q.enabled!==!1);W.forEach(q=>{q.enabled=H})}else{const H=!io(W[0])[M];W.forEach(q=>{q.authoring={...io(q),[M]:H}})}}),Nm=C=>Nr(C,(M,W)=>{const H=Lt(),q=Bp(Yt(M),.02,.02,d.canvas);am(q,Lt),q.forEach((ue,Re)=>{ue.id=Lt(),ue.layer_id=H,ue.authoring={...io(ue),name:`${io(ue).name} Copy`,visible:!0,locked:!1},Re&&(ue.authoring=q[0].authoring)}),W.geometry.push(...q),Fe(H)}),Om=C=>{const M=d?.regions.find(W=>W.id===C);M&&J.confirm({title:`Delete region “${M.name}”?`,message:`This removes ${Lo(M).length} layer(s) and clears child-region parent references.`,confirmLabel:"Delete region",danger:!0,action:()=>{Ne(W=>{W.regions=W.regions.filter(H=>H.id!==C),W.regions.forEach(H=>{H.parent_region_id===C&&(H.parent_region_id=null)}),Dr(W.regions)}),p(d?.regions.find(W=>W.id!==C)?.id??null),Fe(null)}})},Am=async C=>{try{if(!d)return;const M=tw(on(await C.text()),d.document_id);M.regions=jp(M.regions),Dr(M.regions),Eo(M),p(M.regions[0]?.id??null),Fe(null)}catch(M){No({title:"Document import failed",message:String(M),tone:"danger",duration:6e3})}},Dm=async C=>{try{const M=JSON.parse(await C.text());if(M?.schema!=="bv.regions"||![1,2].includes(M?.version)||!Array.isArray(M.regions))throw new Error("Not a BV Regions v1/v2 export");const W=M.version===1?M.regions.map(H=>({...H,usage:"generation"})):M.regions;Ne(H=>{H.regions.push(...d1(W)),Dr(H.regions)})}catch(M){No({title:"Region import failed",message:String(M),tone:"danger",duration:6e3})}},Mm=ga(l);if(!e)return null;const qu=Fp($,{width:window.innerWidth,height:window.innerHeight}),Ju=(C,M,W=!0)=>{const H=Ar(l);Ko("regional",C),C!==H&&(ke(q=>M?q.filter(ue=>ue!==C):[...new Set([...q,H])].filter(ue=>ue&&ue!==C)),W&&(fe.current={mode:$.mode,geometry:qu}),c(o.find(q=>Ar(q)===C)??null))},Zu=d?i1(ve,i,new Set(d.regions.map(C=>C.id))):[],Im=d?a1(ve,i,Object.fromEntries(d.regions.map(C=>[C.id,C.name]))):"",Ns=C=>d?s.jsx(F0,{mode:C,region:Ce,layer:_e,bounds:Cr,canvas:d.canvas,automaticRegionColor:Ce?Pb(d.regions.indexOf(Ce)):null,globalPrompts:d.prompts.global,backgroundPrompts:d.prompts.background,negativeMode:d.negative_mode,promptSections:$.promptSections,loraBindings:ve,loraStacks:i,onGlobalLoraStack:va,onRegionLoraStack:ma,onPromptSection:(M,W)=>Q(H=>({...H,promptSections:{...H.promptSections,[M]:W}})),onNegativeMode:M=>Ne(W=>{W.negative_mode=M}),onGlobalPrompts:M=>Ne(W=>{W.prompts.global=M}),onBackgroundPrompts:M=>Ne(W=>{W.prompts.background=M}),onRegion:xa,onLayerBounds:M=>g&&Nr(g,(W,H)=>{const q=new Map(im(W,M,d.canvas).map(ue=>[ue.id,ue]));H.geometry=H.geometry.map(ue=>q.get(ue.id)??ue)}),onBrushSetting:(M,W)=>g&&Nr(g,H=>H.forEach(q=>{q.type==="brush_stroke"&&Object.assign(q,{[M]:W})}))}):null;return s.jsxs(s.Fragment,{children:[Le.map(C=>{const M=o.find(W=>Ar(W)===C);return M?s.jsx(ws,{title:`Regional Editor · ${M.title||"BV Regional Prompt"} · #${M.id}`,onRestore:()=>Ju(C,!1,!1),onClose:()=>ke(W=>W.filter(H=>H!==C))},C):null}),s.jsx(ei,{open:e,activationToken:t,title:"BV Regional Editor",menuVisible:Mm,onMenuVisible:C=>Zn(l,C),context:s.jsx(ba,{label:"Regional prompt document",value:Ar(l),onNavigate:Ju,options:o.filter(C=>ln(C)).map(C=>({value:Ar(C),label:`${C.title||"BV Regional Prompt"} · #${C.id}`}))}),center:s.jsx(j0,{openMenu:$.openMenu,onOpenMenu:ge,displayOpacity:I,backgroundOpacity:z,isolate:T,binaryMaskPreview:$.binaryMaskPreview,hasSelection:!!g,onDisplayOpacity:B,onBackgroundOpacity:L,onToggleIsolate:()=>j(C=>!C),onToggleBinaryMaskPreview:()=>{po(),Q(C=>({...C,binaryMaskPreview:!C.binaryMaskPreview}))},onExportDocument:()=>d&&Vp(`${d.title||"bv-regional"}.json`,d),onExportRegions:()=>d&&Vp(`${d.title||"bv-regions"}.regions.json`,{schema:"bv.regions",version:2,canvas:d.canvas,regions:d.regions}),onImportDocument:Am,onImportRegions:Dm,onUndo:Ss,onRedo:Ls,canUndo:!!D.length,canRedo:!!N.length,canMergeLayers:ze,onMergeLayers:Ku,canvas:d?.canvas??{width:1024,height:1024},onCanvas:C=>Ne(M=>{M.canvas=C})}),mode:$.mode,initialGeometry:qu,minSize:{width:780,height:520},className:"bv-regional-shell",bodyClassName:"bv-regional-window-body",onModeChange:C=>Q(M=>({...M,mode:C})),onGeometry:C=>Q(M=>({...M,windows:{...M.windows,floating:C}})),onClose:a,status:d?s.jsxs(s.Fragment,{children:[s.jsx("span",{children:Zu[0]?`⚠ ${Zu[0]}`:`✓ ${Im}`}),s.jsxs("span",{children:[d.regions.length," regions · layout adjusted for this session"]})]}):null,actions:d?s.jsx(Dv,{storageId:`regional-editor:${d.document_id}`,editorType:"regional",onClick:()=>ae(C=>C+1)}):null,children:K?s.jsx("div",{className:"bv-regional-error",children:K}):d&&s.jsx(s.Fragment,{children:s.jsx("main",{className:"bv-regional-dock-host",children:s.jsx(Cv,{storageId:`regional-editor:${d.document_id}`,resetSignal:re,defaultModel:{global:{tabEnableClose:!1,tabEnablePopout:!1,tabEnablePopoutIcon:!1,tabEnablePopoutFloatIcon:!0,tabSetMinWidth:180,tabSetMinHeight:120},borders:[],layout:{type:"row",children:[{type:"row",weight:22,minWidth:220,children:[{type:"tabset",weight:55,children:[{type:"tab",id:"regions",name:"Regions",component:"regions",enablePopoutFloatIcon:!0}]},{type:"tabset",weight:45,children:[{type:"tab",id:"selection",name:"Selection",component:"selection",enablePopoutFloatIcon:!0}]}]},{type:"tabset",weight:54,minWidth:320,children:[{type:"tab",id:"canvas",name:"Canvas",component:"canvas",enablePopoutFloatIcon:!0}]},{type:"row",weight:24,minWidth:260,children:[{type:"tabset",weight:65,children:[{type:"tab",id:"global",name:"Global",component:"global",enablePopoutFloatIcon:!0}]},{type:"tabset",weight:35,children:[{type:"tab",id:"region",name:"Region",component:"region",enablePopoutFloatIcon:!0}]}]}]}},panels:[{id:"regions",title:"Regions",weight:22,minWidth:220,content:s.jsx(rw,{regions:d.regions,selectedRegionId:u,selectedLayerId:g,selectedLayerIds:w,selectedGeometryId:b,onSelectRegion:C=>{p(C),Fe(null),j(!1)},onSelectLayer:jo,onSelectGeometry:(C,M,W)=>{p(C),x(M),k([M]),_(M),h(W),j(!1)},onToggleGeometry:xm,onDeleteGeometry:ym,onAddRegion:()=>Ne(C=>{const M=ew(C.regions.length);C.regions.unshift(M),Dr(C.regions),p(M.id),Fe(null)}),onRenameRegion:(C,M)=>Ne(W=>{W.regions.find(H=>H.id===C).name=M}),onRenameLayer:(C,M)=>Nr(C,W=>W.forEach(H=>{H.authoring={...io(H),name:M}})),onToggleRegion:(C,M)=>Ne(W=>{const H=W.regions.find(q=>q.id===C);M==="enabled"?H.enabled=!H.enabled:M==="visible"?H.authoring.visible=!H.authoring.visible:H.authoring.locked=!H.authoring.locked}),onToggleLayer:Cm,onMoveRegion:Rm,onMoveLayer:Sm,onTreeMove:Lm,onDeleteRegion:Om,onDeleteLayer:Cs,onDuplicateLayer:Nm,canSplitDisconnectedAreas:Je,onSplitDisconnectedAreas:_m})},{id:"canvas",title:"Canvas",weight:54,minWidth:320,content:s.jsx(O0,{document:d,background:n[d.document_id],selectedRegionId:u,selectedLayerId:g,draft:V,selectionBounds:Cr,cursor:ne,tool:y,brush:R,canSubtract:!!_e&&!_e.authoring.locked,displayOpacity:I,backgroundOpacity:z,isolate:T,binaryMaskPreview:$.binaryMaskPreview,initialView:$.artboard,onView:pe,onTool:C=>{E(C),po()},onBrush:P,onPointerDown:wm,onPointerMove:km,onPointerUp:Em,onPointerCancel:po,onPointerLeave:()=>{se.current||Y(null)},onDoubleClick:Tm},d.document_id)},{id:"global",title:"Global",weight:12,minWidth:240,content:Ns("document")},{id:"selection",title:"Selection",weight:12,minWidth:240,content:Ns("selection")},{id:"region",title:"Region",weight:12,minWidth:240,content:Ns("region")}]})})})}),J.dialog]})}const Mr=e=>ea(Nt().rootGraph??Nt().graph,e),Hp=e=>e?.widgets?.find(t=>t.name==="regional_json"),cc=e=>e?.widgets?.find(t=>t.name==="lora_bindings_json"),f1=(e,t)=>t==="global"||t==="background"||e.regions.some(o=>o.id===t),p1=(e,t)=>t==="global"?e.prompts.global:t==="background"?e.prompts.background:e.regions.find(o=>o.id===t)?.prompts??e.prompts.global;function h1({open:e,activationToken:t=0,nodes:o,initialNode:r,loraStacks:n,onClose:i,onOpenEditor:a}){const[l,c]=m.useState(r),[d,f]=m.useState(null),[u,p]=m.useState(()=>Es("")),[g,x]=m.useState("global"),[w,k]=m.useState(()=>$l({x:window.innerWidth-544,y:84,width:520,height:640},{width:window.innerWidth,height:window.innerHeight})),[b,h]=m.useState(""),[v,_]=m.useState([]),y=m.useRef(null),E=m.useRef(!1),R=m.useRef(t);m.useEffect(()=>{const S=E.current,N=R.current!==t;if(E.current=e,R.current=t,!e||!N)return;const A=r??o[0]??null,V=Mr(l),F=Mr(A);S&&V&&F!==V&&$n()==="keep"?_(ne=>[...new Set([...ne,V])].filter(Y=>Y!==F)):F&&_(ne=>ne.filter(Y=>Y!==F)),y.current=S?w:null,c(A)},[t,r,o,e]),m.useEffect(()=>{if(l)try{const S=on(Hp(l)?.value),N=$u(cc(l)?.value,S.document_id),A=Mn(N,new Set(S.regions.map(Y=>Y.id))),V=cc(l);V&&JSON.stringify(N)!==JSON.stringify(A)&&(V.value=JSON.stringify(A),V.callback?.(V.value),l.graph?.setDirtyCanvas?.(!0,!0));const F=ll(S.document_id),ne=f1(S,F.quickPromptTarget)?F.quickPromptTarget:"global";f(S),p(A),x(ne),k(y.current??F.quickPromptWindow),y.current=null,h("")}catch(S){f(null),h(S instanceof Error?S.message:String(S))}},[l,e]);const P=m.useMemo(()=>d?p1(d,g):null,[d,g]),I=S=>{if(x(S),!d)return;const N=ll(d.document_id);yd(d.document_id,{...N,quickPromptTarget:S})},B=S=>{if(!d)return;const N=ll(d.document_id);yd(d.document_id,{...N,quickPromptWindow:S})},z=S=>{if(!d||!l)return;const N=Yt(d);if(g==="global")N.prompts.global=S;else if(g==="background")N.prompts.background=S;else{const V=N.regions.find(F=>F.id===g);if(!V)return;V.prompts=S}f(N);const A=Hp(l);A&&(A.value=JSON.stringify(N),A.callback?.(A.value)),l.graph?.setDirtyCanvas?.(!0,!0)},L=S=>{if(!d||!l)return;let N;if(g==="global"||g==="background")N={...u,global_stack_id:S};else{const V={...u.regions};S?V[g]=S:delete V[g],N={...u,regions:V}}p(N);const A=cc(l);A&&(A.value=JSON.stringify(N),A.callback?.(A.value)),l.graph?.setDirtyCanvas?.(!0,!0)},T=g==="global"||g==="background"?u.global_stack_id??"":u.regions[g]??"",j=(S,N,A=!0)=>{const V=Mr(l);Ko("quick",S),S!==V&&(_(F=>N?F.filter(ne=>ne!==S):[...new Set([...F,V])].filter(ne=>ne&&ne!==S)),y.current=A?w:null,c(o.find(F=>Mr(F)===S)??null))},D=ga(l);return s.jsxs(s.Fragment,{children:[v.map(S=>{const N=o.find(A=>Mr(A)===S);return N?s.jsx(ws,{title:`Quick Edit · ${N.title||"BV Regional Prompt"} · #${N.id}`,onRestore:()=>j(S,!1,!1),onClose:()=>_(A=>A.filter(V=>V!==S))},S):null}),s.jsx(ei,{open:e,activationToken:t,title:"Regional Quick Edit",menuVisible:D,onMenuVisible:S=>Zn(l,S),context:s.jsx(ba,{label:"Regional Prompt Node",value:Mr(l),options:o.filter(S=>ln(S)).map(S=>({value:Mr(S),label:`${S.title||"BV Regional Prompt"} · #${S.id}`})),onNavigate:j}),allowWorkspace:!1,initialGeometry:w,minSize:{width:360,height:320},className:"bv-quick-prompt-window bv-density-compact",onClose:i,onGeometry:S=>{const N=$l(S,{width:window.innerWidth,height:window.innerHeight});k(N),B(N)},status:s.jsx(Tb,{tone:"success",dot:!0,children:"Autosaved"}),actions:s.jsx(le,{intent:"primary",disabled:!l||!d,onClick:()=>l&&a(l),children:"Open Full Editor"}),children:s.jsx("div",{className:"bv-quick-prompt-body",children:b?s.jsx(Mo,{tone:"danger",title:"Prompt document unavailable",children:b}):d&&P&&s.jsxs(s.Fragment,{children:[s.jsx(ft,{label:"Prompt Target",value:g,onValue:I,options:[{value:"global",label:"Global"},{value:"background",label:"Background"},...d.regions.map(S=>({value:S.id,label:S.name}))]}),s.jsx(ft,{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:T,onValue:S=>L(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(ko,{label:"Positive",children:s.jsx(Hl,{autoFocus:!0,value:P.positive_source,onValue:S=>z({...P,positive_source:S}),completionContext:{scope:g==="global"||g==="background"?g:"region",polarity:"positive"}})}),s.jsx(ko,{label:"Negative",children:s.jsx(Hl,{value:P.negative_source,onValue:S=>z({...P,negative_source:S}),completionContext:{scope:g==="global"||g==="background"?g:"region",polarity:"negative"}})})]})]})})})]})}function sm(e,t){const o=t?e.filter(n=>n.enabled!==!1&&(n.usage===t||n.usage==="both"||!n.usage&&t==="generation")):e,r=new Map;for(const n of o)r.set(n.name,(r.get(n.name)??0)+1);return o.map(n=>({...n,label:r.get(n.name)===1?n.name:`${n.name} · ${n.id.slice(0,8)}`}))}function g1(e){const t=new Map;return e.forEach(o=>t.set(o.title,(t.get(o.title)??0)+1)),e.map(o=>({...o,label:t.get(o.title)>1?`${o.title} · #${o.nodeId}`:`${o.title} · #${o.nodeId}`}))}function b1(e,t,o){const r=typeof e=="string"?e:"";return t.some(n=>n.documentId===r)?r:o?t[0]?.documentId??"":""}function v1(e,t,o){Jv(o);const r=document.createElement("div");r.className="bv-ui bv-settings-datasets";const n=qn(r),i=Zv;return n.render(m.createElement(i,{onSelectionChange:a=>t(JSON.stringify(a))})),r}const fr=new Map;let fi=null;function m1(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 $p(e){if(fr.has(e)||!m1(e))return;let t=[],o=0,r=null,n=null,i=null,a=null,l=null;const c=()=>{n?.abort(),n=null,t=[],r=null,l?.unmount(),l=null,a?.remove(),a=null},d=()=>{if(!a)return;const k=Vl(e,xd(),a.offsetHeight||210);f(k)},f=(k=Vl(e,xd(),a?.offsetHeight||210))=>{a||(a=document.createElement("div"),a.className="bv-ui bv-ui-portal",document.body.append(a),l=qn(a)),l.render(m.createElement(rm,{suggestions:t,selected:o,position:k,onAccept:p}))},u=()=>f(),p=(k=o)=>{const b=t[k];if(!r||!b)return;const h=em(e.value,r,b);e.value=h.text,e.dispatchEvent(new InputEvent("input",{bubbles:!0,inputType:"insertText",data:b.insertText})),e.dispatchEvent(new Event("change",{bubbles:!0})),c(),requestAnimationFrame(()=>{e.focus(),e.setSelectionRange(h.caret,h.caret)})},g=()=>{if(!Vu()||e.selectionStart!==e.selectionEnd||(i!=null&&window.clearTimeout(i),n?.abort(),r=Qv(e.value,e.selectionStart??e.value.length,{scope:"generic",polarity:"positive"}),!r))return c();const k=r;n=new AbortController;const b=n;i=window.setTimeout(async()=>{const h=await tm(k,[om],b.signal);b.signal.aborted||document.activeElement!==e||(t=h,o=0,h.length?u():c())},120)},x=k=>{t.length&&(k.key==="ArrowDown"||k.key==="ArrowUp"?(k.preventDefault(),k.stopPropagation(),k.stopImmediatePropagation(),o=(o+(k.key==="ArrowDown"?1:-1)+t.length)%t.length,u()):k.key==="Enter"||k.key==="Tab"?(k.preventDefault(),k.stopPropagation(),k.stopImmediatePropagation(),p()):k.key==="Escape"&&(k.preventDefault(),k.stopPropagation(),k.stopImmediatePropagation(),c()))},w=()=>window.setTimeout(()=>{a?.contains(document.activeElement)||c()},120);e.addEventListener("input",g),e.addEventListener("select",g),e.addEventListener("keydown",x,!0),e.addEventListener("blur",w),window.addEventListener("resize",d),window.addEventListener("scroll",d,!0),fr.set(e,{close:c,destroy:()=>{c(),e.removeEventListener("input",g),e.removeEventListener("select",g),e.removeEventListener("keydown",x,!0),e.removeEventListener("blur",w),window.removeEventListener("resize",d),window.removeEventListener("scroll",d,!0)}})}function Yp(e){e instanceof HTMLTextAreaElement&&$p(e),e.querySelectorAll?.("textarea").forEach(t=>$p(t))}function x1(e){(e instanceof HTMLTextAreaElement?[e]:[...e.querySelectorAll?.("textarea")??[]]).forEach(o=>{fr.get(o)?.destroy(),fr.delete(o)})}function y1(){if(fi)return fi;Yp(document);const e=new MutationObserver(r=>r.forEach(n=>{n.addedNodes.forEach(i=>{i instanceof Element&&Yp(i)}),n.removedNodes.forEach(i=>{i instanceof Element&&x1(i)})}));e.observe(document.body,{childList:!0,subtree:!0});const t=()=>{Vu()||fr.forEach(r=>r.close())},o=()=>fr.forEach(r=>r.close());return window.addEventListener(ia,t),window.addEventListener(aa,o),fi=()=>{e.disconnect(),window.removeEventListener(ia,t),window.removeEventListener(aa,o),fr.forEach(r=>r.destroy()),fr.clear(),fi=null},fi}function Xp(e){return e?.extensionManager?.workflow?.activeWorkflow??e?.workflowManager?.activeWorkflow??e?.graph??null}function _1(e,t,o,r=(i,a)=>globalThis.setInterval(i,a),n=i=>globalThis.clearInterval(i)){const i=Xp(e);let a=!1;const l=()=>{a||Xp(e)===i||(a=!0,o())};t.addEventListener("graphChanged",l);const c=r(l,250);return()=>{t.removeEventListener("graphChanged",l),n(c)}}const cm=["region","global_influence","background_influence","primary_region_influence","context_regions_json"],w1=e=>cm.map(t=>e?.find(o=>o.name===t)?.value),k1=e=>Array.isArray(e)&&e.length===cm.length+1&&e[3]==null&&typeof e[4]=="number"&&typeof e[5]=="string"?[...e.slice(0,3),...e.slice(4)]:e,Bo=(e,t,o,r)=>{const n=Number(e);return Number.isFinite(n)?Math.max(o,Math.min(r,n)):t},dm=()=>({global_influence:1,background_influence:.35,primary_region_influence:1,context_region_influence:1}),um=()=>({roi_padding:.15,threshold:.5,dilation:0,crop_factor:1.5,drop_size:10}),Yu=e=>e.filter(t=>t.enabled!==!1&&(t.usage==="detailer"||t.usage==="both")).sort((t,o)=>(t.priority??0)-(o.priority??0)),Ed=e=>({schema:"bv.detailer_plan",version:1,jobs:Yu(e).map(t=>({region_ids:[t.id],primary_region_id:t.id,mask_composition:"union",prompt_composition:"context",conditioning:dm(),detector:um()}))}),sl=(e,t)=>{const o=new Set(Yu(t).map(i=>i.id));let r;try{r=String(e??"").trim()?JSON.parse(String(e)):Ed(t)}catch{r=Ed(t)}return{schema:"bv.detailer_plan",version:1,jobs:Array.isArray(r?.jobs)?r.jobs.flatMap(i=>{const a=Array.isArray(i?.region_ids)?[...new Set(i.region_ids.map(String).filter(d=>o.has(d)))]:[];if(!a.length)return[];const l=i.conditioning??{},c=i.detector??{};return[{region_ids:a,primary_region_id:a.includes(String(i.primary_region_id))?String(i.primary_region_id):a[0],mask_composition:["union","intersection","subtract"].includes(i.mask_composition)?i.mask_composition:"union",prompt_composition:i.prompt_composition==="primary"?"primary":"context",...String(i.detector_id??"").trim()?{detector_id:String(i.detector_id).trim()}:{},conditioning:{global_influence:Bo(l.global_influence,1,0,2),background_influence:Bo(l.background_influence,.35,0,2),primary_region_influence:Bo(l.primary_region_influence,1,0,2),context_region_influence:Bo(l.context_region_influence,1,0,2)},detector:{roi_padding:Bo(c.roi_padding,.15,0,2),threshold:Bo(c.threshold,.5,0,1),dilation:Math.round(Bo(c.dilation,0,-512,512)),crop_factor:Bo(c.crop_factor,1.5,1,20),drop_size:Math.round(Bo(c.drop_size,10,1,8192)),...String(c.query??"").trim()?{query:String(c.query).trim()}:{},...Array.isArray(c.labels)?{labels:c.labels.map(String).map(d=>d.trim()).filter(Boolean)}:{}}}]}):[]}},dc=e=>JSON.stringify(e),E1=e=>structuredClone(e);function T1({regions:e,detectorIds:t,stored:o,save:r,close:n,nodeId:i="",nodes:a=[],onNavigate:l=()=>{},currentNode:c}){const d=Yu(e),f=m.useMemo(()=>sl(o,e),[e,o]),u=vs(f),p=u.value,[g,x]=m.useState(()=>dc(f));ms(u);const w=dc(p)!==g,[k,b]=m.useState(null),h=()=>{const T=dc(p);r(T),x(T),u.clear()},v=T=>w?b(()=>T):T(),_=()=>v(n),y=ga(c),E=m.useMemo(()=>T=>s.jsx(ei,{...T,title:`${T.title} · #${i}`,shortTitle:"Detailer Plan",menuVisible:y,onMenuVisible:j=>Zn(c,j),onClose:_,context:s.jsx(ba,{label:"Detailer Plan Node",value:i,options:a.map(j=>({value:j.id,label:j.label})),onNavigate:(j,D)=>D?v(()=>l(j,!0)):l(j,!1)})}),[c,w,y,i,a,l]),[R,P]=m.useState([]),I=T=>u.commit(j=>{const D=E1(j);return T(D),D}),B=()=>I(T=>{const j=d[0];j&&T.jobs.push({region_ids:[j.id],primary_region_id:j.id,mask_composition:"union",prompt_composition:"context",conditioning:dm(),detector:um()})}),z=T=>[{value:"",label:"No detector · use composed region mask"},...[...new Set([...T&&!t.includes(T)?[T]:[],...t])].map(j=>({value:j,label:t.includes(j)?j:`Missing · ${j}`}))],L=p.jobs.map((T,j)=>({id:`job-${j}`,title:`Job ${j+1}`,description:T.region_ids.map(D=>d.find(S=>S.id===D)?.name??D).join(" + ")||"No region",summary:s.jsxs("div",{className:"bv-editor-item-compact-summary",children:[s.jsxs("span",{children:[T.region_ids.length," region",T.region_ids.length===1?"":"s"]}),s.jsx("span",{children:T.detector_id||"Composed mask"}),s.jsx("span",{children:T.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(J_,{label:"Regions",value:T.region_ids,minSelected:1,options:d.map(D=>({value:D.id,label:D.name})),onValue:D=>I(S=>{const N=S.jobs[j];N.region_ids=D,D.includes(N.primary_region_id)||(N.primary_region_id=D[0]??"")})}),s.jsxs(Sn,{children:[s.jsx(ft,{label:"Detector assignment",value:T.detector_id??"",options:z(T.detector_id),onValue:D=>I(S=>{S.jobs[j].detector_id=D||void 0})}),T.region_ids.length>1&&s.jsx(ft,{label:"Primary region",value:T.primary_region_id,options:T.region_ids.map(D=>({value:D,label:d.find(S=>S.id===D)?.name??D})),onValue:D=>I(S=>{S.jobs[j].primary_region_id=D})})]})]}),s.jsx(Il,{value:R,onValue:P,items:[{id:`composition-${j}`,title:"Mask and prompt composition",content:s.jsxs(Sn,{children:[s.jsx(ft,{label:"Mask composition",value:T.mask_composition,options:[{value:"union",label:"Union"},{value:"intersection",label:"Intersection"},{value:"subtract",label:"Subtract in listed order"}],onValue:D=>I(S=>{S.jobs[j].mask_composition=D})}),s.jsx(ft,{label:"Prompt composition",value:T.prompt_composition,options:[{value:"context",label:"Primary and context regions"},{value:"primary",label:"Primary region only"}],onValue:D=>I(S=>{S.jobs[j].prompt_composition=D})})]})},{id:`conditioning-${j}`,title:"Conditioning strengths",content:s.jsx(Sn,{minimum:150,children:[["Global influence","global_influence"],["Background influence","background_influence"],["Primary region influence","primary_region_influence"],["Context region influence","context_region_influence"]].map(([D,S])=>s.jsx(jt,{label:D,value:T.conditioning[S],min:0,max:2,step:.05,onValue:N=>I(A=>{A.jobs[j].conditioning[S]=N})},S))})},{id:`detection-${j}`,title:"Detector and ROI settings",content:s.jsxs(Sn,{minimum:150,children:[s.jsx(jt,{label:"ROI padding",value:T.detector.roi_padding,min:0,max:2,step:.01,onValue:D=>I(S=>{S.jobs[j].detector.roi_padding=D})}),s.jsx(jt,{label:"Threshold",value:T.detector.threshold,min:0,max:1,step:.01,onValue:D=>I(S=>{S.jobs[j].detector.threshold=D})}),s.jsx(jt,{label:"Dilation",value:T.detector.dilation,min:-512,max:512,step:1,slider:!1,onValue:D=>I(S=>{S.jobs[j].detector.dilation=D})}),s.jsx(jt,{label:"Crop factor",value:T.detector.crop_factor,min:1,max:20,step:.1,onValue:D=>I(S=>{S.jobs[j].detector.crop_factor=D})}),s.jsx(jt,{label:"Drop size",value:T.detector.drop_size,min:1,max:8192,step:1,slider:!1,onValue:D=>I(S=>{S.jobs[j].detector.drop_size=D})}),s.jsx(tn,{label:"Detector query",value:T.detector.query??"",onValue:D=>I(S=>{S.jobs[j].detector.query=D.trim()||void 0})}),s.jsx(tn,{label:"Accepted labels",value:(T.detector.labels??[]).join(", "),onValue:D=>I(S=>{S.jobs[j].detector.labels=D.split(",").map(N=>N.trim()).filter(Boolean)})})]})}]})]})}));return s.jsxs(s.Fragment,{children:[s.jsx(E,{open:!0,title:"Regional Detailer Plan",initialGeometry:{width:1040,height:720},minSize:{width:420,height:360},onClose:n,status:w?"Unsaved plan changes":"Plan saved",actions:s.jsx(Fu,{primary:s.jsx(le,{intent:"primary",disabled:p.jobs.some(T=>!T.region_ids.length),onClick:h,children:"Save plan"}),secondary:s.jsxs(s.Fragment,{children:[s.jsx(le,{onClick:B,disabled:!d.length,children:"Add job"}),s.jsx(Fl,{label:"Detailer Plan",value:{schema:"bv.editor-draft",version:1,type:"detailer-plan",data:p},onImport:T=>{if(T?.schema!=="bv.editor-draft"||T?.version!==1||T?.type!=="detailer-plan"||!T?.data)throw new Error("Draft type or version does not match this editor.");u.replace(sl(T.data,e))}})]}),overflow:[{id:"undo",label:"Undo",disabled:!u.canUndo,onSelect:u.undo},{id:"redo",label:"Redo",disabled:!u.canRedo,onSelect:u.redo},{id:"discard",label:"Discard changes",disabled:!w,onSelect:()=>u.replace(sl(g,e),!0)},{id:"restore",label:"Restore defaults",onSelect:()=>u.commit(Ed(e))}]}),children:s.jsxs(Eu,{density:"compact",className:"bv-editor-dialog",children:[!t.length&&p.jobs.length>0&&s.jsx(Mo,{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."}),d.length?s.jsx(gs,{items:L,onReorder:T=>I(j=>{j.jobs=T.map(D=>j.jobs[Number(D.id.slice(4))])}),onRemove:T=>I(j=>{j.jobs.splice(Number(T.slice(4)),1)})}):s.jsx(bs,{title:"No eligible regions",description:"Enable a region with Detailer or Both usage first."})]})}),s.jsx(Ru,{open:!!k,editorName:"Detailer Plan",onKeep:()=>b(null),onDiscard:()=>{const T=k;b(null),T?.()},onSave:()=>{h();const T=k;b(null),T?.()}})]})}const R1=(e,t,o,r,n,i,a,l)=>{Ou((c,d)=>m.createElement(T1,{regions:e,detectorIds:t,stored:o,save:r,close:c,activationToken:d,nodeId:n.split(":").slice(1).join(":"),nodes:i,onNavigate:a,currentNode:l}),{key:n})},Xl=()=>({schema:"bv.detector_registry_config",version:1,detectors:[]}),Di=e=>{try{const t=String(e??"").trim()?JSON.parse(String(e)):Xl();return{schema:"bv.detector_registry_config",version:1,detectors:Array.isArray(t?.detectors)?t.detectors.flatMap(r=>{const n=String(r?.id??"").trim(),i=String(r?.model_name??"").trim();if(!n||!i)return[];const a=r.provider==="onnx"?"onnx":"ultralytics",l=String(r.sam_model_name??"").trim();return[{id:n,provider:a,model_name:i,...l?{sam_model_name:l,sam_device_mode:["Prefer GPU","CPU"].includes(r.sam_device_mode)?r.sam_device_mode:"AUTO"}:{}}]}):[]}}catch{return Xl()}},uc=e=>JSON.stringify(e);function S1({catalog:e,stored:t,save:o,close:r,nodeId:n="",nodes:i=[],onNavigate:a=()=>{},currentNode:l}){const c=m.useMemo(()=>Di(t),[t]),d=m.useMemo(()=>new Set(c.detectors.map(S=>S.id)),[c]),f=vs(c),u=f.value,[p,g]=m.useState(()=>uc(c));ms(f);const x=uc(u)!==p,w=Su(),[k,b]=m.useState(null),h=()=>{const S=uc(u);o(S),g(S),f.clear()},v=S=>x?b(()=>S):S(),_=()=>v(r),y=ga(l),E=m.useMemo(()=>S=>s.jsx(ei,{...S,title:`${S.title} · #${n}`,shortTitle:"Registry",menuVisible:y,onMenuVisible:N=>Zn(l,N),onClose:_,context:s.jsx(ba,{label:"Detector Registry Node",value:n,options:i.map(N=>({value:N.id,label:N.label})),onNavigate:(N,A)=>A?v(()=>a(N,!0)):a(N,!1)})}),[l,x,y,n,i,a]),[R,P]=m.useState([]),I=S=>f.commit(N=>{const A=structuredClone(N);return S(A),A}),B=()=>{let S=u.detectors.length+1,N=`detector-${S}`;for(;u.detectors.some(A=>A.id===N);)N=`detector-${++S}`;return N},z=u.detectors.map(S=>S.id.trim()),L=z.find((S,N)=>S&&z.indexOf(S)!==N),T=u.detectors.some(S=>!S.id.trim()||!S.model_name),j=()=>I(S=>{const N=e.ultralytics.length?"ultralytics":"onnx";S.detectors.push({id:B(),provider:N,model_name:e[N][0]??""})}),D=()=>{u.detectors.length?w.confirm({title:"Clear Detector Registry?",message:"Existing Detailer jobs will keep missing references until reassigned.",confirmLabel:"Clear registry",danger:!0,action:()=>f.commit(Xl())}):f.commit(Xl())};return s.jsxs(s.Fragment,{children:[s.jsx(E,{open:!0,title:"Detector Registry",initialGeometry:{width:1040,height:720},minSize:{width:420,height:360},onClose:r,status:x?"Unsaved registry changes":"Registry saved",actions:s.jsx(Fu,{primary:s.jsx(le,{intent:"primary",disabled:!!(L||T),onClick:h,children:"Save registry"}),secondary:s.jsxs(s.Fragment,{children:[s.jsx(le,{onClick:j,children:"Add detector"}),s.jsx(Fl,{label:"Detector Registry",value:{schema:"bv.editor-draft",version:1,type:"detector-registry",data:u},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.");f.replace(Di(S.data))}})]}),overflow:[{id:"undo",label:"Undo",disabled:!f.canUndo,onSelect:f.undo},{id:"redo",label:"Redo",disabled:!f.canRedo,onSelect:f.redo},{id:"discard",label:"Discard changes",disabled:!x,onSelect:()=>f.replace(Di(p),!0)},{id:"clear",label:"Clear registry…",onSelect:D}]}),children:s.jsxs(Eu,{density:"compact",className:"bv-editor-dialog",children:[L||T?s.jsx(Mo,{tone:"danger",title:"Registry needs attention",children:L?`Detector ID “${L}” is used more than once.`:"Every detector needs a unique ID and a detection model."}):s.jsxs(Mo,{tone:"success",title:"Registry valid",children:[u.detectors.length," detector",u.detectors.length===1?"":"s"," ready to save."]}),s.jsxs("div",{className:"bv-card-list",children:[!u.detectors.length&&s.jsx(bs,{title:"No detectors configured",description:"Add a detector to make it selectable in Regional Detailer jobs."}),s.jsx(Il,{value:R,onValue:P,items:u.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(le,{intent:"ghost",onClick:()=>I(A=>{A.detectors.splice(N+1,0,{...A.detectors[N],id:B()})}),children:"Duplicate"}),s.jsx(le,{intent:"ghost",className:"bv-subtle-danger",onClick:()=>{const A=()=>I(V=>{V.detectors.splice(N,1)});d.has(S.id)?w.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(Sn,{children:[s.jsx(tn,{label:"Detector ID",value:S.id,readOnly:d.has(S.id),help:d.has(S.id)?"Stable job reference. Create a new detector instead of renaming it.":"Choose once; the ID becomes immutable after saving.",onValue:A=>I(V=>{V.detectors[N].id=A.trim()})}),s.jsx(ft,{label:"Provider",value:S.provider,options:[{value:"ultralytics",label:"Ultralytics"},{value:"onnx",label:"ONNX"}],onValue:A=>I(V=>{const F=V.detectors[N];F.provider=A,F.model_name=e[F.provider][0]??""})}),s.jsx(ft,{label:"Detection model",value:S.model_name,options:e[S.provider].map(A=>({value:A,label:A})),onValue:A=>I(V=>{V.detectors[N].model_name=A})})]}),s.jsx(Il,{value:R,onValue:P,items:[{id:`sam-${N}`,title:S.sam_model_name?"SAM refinement enabled":"Optional SAM refinement",content:s.jsxs(Sn,{children:[s.jsx(ft,{label:"SAM model",value:S.sam_model_name??"",options:[{value:"",label:"No SAM refinement"},...e.sam.map(A=>({value:A,label:A}))],onValue:A=>I(V=>{const F=V.detectors[N];F.sam_model_name=A||void 0,A||delete F.sam_device_mode})}),S.sam_model_name&&s.jsx(ft,{label:"Execution device",value:S.sam_device_mode??"AUTO",options:["AUTO","Prefer GPU","CPU"].map(A=>({value:A,label:A})),onValue:A=>I(V=>{V.detectors[N].sam_device_mode=A})})]})}]})]})}))})]})]})}),w.dialog,s.jsx(Ru,{open:!!k,editorName:"Detector Registry",onKeep:()=>b(null),onDiscard:()=>{const S=k;b(null),S?.()},onSave:()=>{h();const S=k;b(null),S?.()}})]})}const L1=async(e,t,o,r,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();Ou((d,f)=>m.createElement(S1,{catalog:c,stored:t,save:o,close:d,activationToken:f,nodeId:r.split(":").slice(1).join(":"),nodes:n,onNavigate:i,currentNode:a}),{key:r})},C1=10,N1=(e,t=C1)=>{const o=[...new Set(e.filter(i=>Number.isInteger(i)&&i>=1&&i<=t))],r=o.length?Math.max(...o):0,n=Math.min(t,r+1);return Array.from({length:Math.max(1,n)},(i,a)=>a+1)},O1=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"]),A1={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"},D1={"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"}},fc=(e,t)=>D1[e]?.[t]??A1[t]??t.split("_").join(" ");function M1({label:e,configured:t,close:o,onSave:r,onDelete:n}){const[i,a]=m.useState(""),[l,c]=m.useState(""),[d,f]=m.useState(!1),u=async p=>{f(!0),c("");try{const g=await p();g?c(g):o()}finally{f(!1)}};return s.jsxs(fa,{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:o,footer:s.jsxs(s.Fragment,{children:[s.jsx(le,{intent:"danger",disabled:!t||d,onClick:()=>u(n),children:"Delete key"}),s.jsx(le,{intent:"ghost",disabled:d,onClick:o,children:"Cancel"}),s.jsx(le,{intent:"primary",loading:d,disabled:!i.trim(),onClick:()=>u(()=>r(i)),children:"Save key"})]}),children:[s.jsx(Mo,{tone:t?"info":"warning",children:t?"A key is configured. Enter a new key to replace it.":"No key is configured."}),s.jsx(Z_,{label:"API key",value:i,onValue:a}),l&&s.jsx(Mo,{tone:"danger",children:l})]})}let pc=null;const Td=(e,t=!1)=>((t||!pc)&&(pc=fetch(e.apiURL("/bv_nodepack/remote_llm/providers")).then(async o=>{if(!o.ok)throw new Error(await o.text());const r=await o.json();return Array.isArray(r.profiles)?r.profiles:[]})),pc),Wo=(e,t)=>e.widgets?.find(o=>o.name===t),Gl=(e,t,o)=>{const r=t.find(l=>l.label===String(Wo(e,"provider_profile")?.value??""));if(!r)return;const n=Wo(e,"custom_endpoint"),i=Wo(e,"model");if(n&&((!r.allow_custom_endpoint||!String(n.value??"").trim())&&(n.value=r.endpoint),n.disabled=!1,n.element&&(n.element.readOnly=!r.allow_custom_endpoint),n.label=r.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),d=t.find(f=>f.label===String(Wo(e,"provider_profile")?.value??""));return d&&!d.allow_custom_endpoint&&(n.value=d.endpoint),c}}if(i&&o&&o!==r.label){const l=t.find(d=>d.label===o),c=String(i.value??"").trim();(!c||c===l?.default_model)&&(i.value=r.default_model)}const a=Wo(e,"configure_api_key");a&&(a.disabled=r.auth_mode==="none",a.label=r.auth_mode==="none"?"✓ No API key required":`${r.configured?"✓":"⚠"} Configure ${r.label} API Key`),e.setDirtyCanvas?.(!0,!0)},I1=(e,t,o)=>{const r=o.find(n=>n.label===String(Wo(t,"provider_profile")?.value??""))??o[0];r&&r.auth_mode!=="none"&&Ou(n=>m.createElement(M1,{label:r.label,configured:r.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:r.id,api_key:i})});if(!a.ok)return(await a.json().catch(()=>null))?.error??"Could not save API key.";r.configured=!0,Gl(t,o),Td(e,!0)},onDelete:async()=>{if(!(await fetch(e.apiURL(`/bv_nodepack/remote_llm/api_key/${encodeURIComponent(r.id)}`),{method:"DELETE"})).ok)return"Could not delete API key.";r.configured=!1,Gl(t,o),Td(e,!0)}}))},Gp=(e,t)=>{Td(t).then(o=>{let r=String(Wo(e,"provider_profile")?.value??"");const n=Wo(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 Gl(e,o,r),r=l,c}}let i=Wo(e,"configure_api_key");i||(i=e.addWidget("button","configure_api_key",null,()=>I1(t,e,o),{serialize:!1}),i.serialize=!1),Gl(e,o)}).catch(o=>console.error("BV Remote LLM settings unavailable",o))},Xu="BV Control Center",Kl=0,j1=2,P1=4,yi="bvControlBaseMode",B1="bv-open-control-rack",fm=320,z1=48,Kp="bv_control_conflict_status",hc=new Set;function F1(e){return e==="activate"?{mode:Kl,priority:3}:e==="mute"?{mode:j1,priority:2}:{mode:P1,priority:1}}function qp(e){const t=new Set(Ml(Nt()).map(o=>o.id));return{...e,controls:e.controls.map(o=>({...o,assignments:o.assignments.map(r=>({...r,unresolved:!t.has(r.groupId)}))}))}}function U1(e){return m_(e,t=>wb(t,Xu))}function W1(e){for(const r of hc){const n=r.properties?.[yi];r.mode=e.forceActive?Kl:typeof n=="number"?n:r.mode,r.properties&&delete r.properties[yi],r.setDirtyCanvas?.(!0,!0)}hc.clear();const t=new Map(Ml(Nt()).map(r=>[r.id,r])),o=new Map;for(const r of e.controls)if(r.enabled)for(const n of r.assignments){const i=t.get(n.groupId);if(i)for(const a of U1(i)){const l=F1(n.action),c=o.get(a);(!c||l.priority>c.priority)&&o.set(a,l)}}for(const[r,n]of o)r.properties??(r.properties={}),typeof r.properties[yi]!="number"&&(r.properties[yi]=typeof r.mode=="number"?r.mode:Kl),r.mode=n.mode,hc.add(r),r.setDirtyCanvas?.(!0,!0)}function V1(e,t){const o=e.inputs[t],r=e.widgets?.find(n=>n.name===o.name);r&&e.removeWidget?.(r),o.link!=null&&e.disconnectInput(t),e.removeInput(t)}function H1(e,t){const o=kb(t),r=x_(o);let n=e.widgets?.find(i=>i.name===Kp);n||(n=e.addCustomWidget({name:Kp,type:"custom",value:r,y:0,options:{},serialize:!1,computeSize:()=>[0,24],computeLayoutSize:()=>({minHeight:24,maxHeight:24,minWidth:fm}),mouse:()=>!1,draw(i,a,l,c,d){i.save(),i.beginPath(),i.rect(10,c,Math.max(0,l-20),d),i.clip(),i.fillStyle=this.__bvHasConflict?"#ffbd66":"#8fc9a3",i.font="12px sans-serif",i.textBaseline="middle",i.fillText(String(this.value??""),14,c+d/2),i.restore()}})),n.value=r,n.__bvHasConflict=o.length>0,n.tooltip=o.map(i=>`${i.groupPath}: ${i.winnerAction} wins`).join(` -`)}function pm(e,t){e.mode=Kl,e.properties&&delete e.properties[yi];let o=e.widgets?.find(c=>c.name==="configure_control_center");o||(o=e.addWidget("button","configure_control_center",null,()=>window.dispatchEvent(new Event(B1)),{serialize:!1})),o.label="Configure Control Center",o.serialize=!1;const r=new Set(t.controls.map(c=>`bvcc_${c.id}`));for(let c=e.inputs.length-1;c>=0;c--){const d=e.inputs[c];d.name.startsWith("bvcc_")&&!r.has(d.name)&&V1(e,c)}for(const c of t.controls){const d=`bvcc_${c.id}`,f=g=>{const x=en(),w={...x,controls:x.controls.map(k=>k.id===c.id?{...k,enabled:!!g}:k)};ku(w)};let u=e.inputs.find(g=>g.name===d);u||(u=e.addInput(d,"BOOLEAN",{label:c.name,nameLocked:!0,widget:{name:d}})),u.label=c.name;let p=e.widgets?.find(g=>g.name===d);p&&!p.__bvControlCallbackBound&&(e.removeWidget?.(p),p=null),p||(p=e.addWidget("toggle",d,c.enabled,f,{on:"ACTIVE",off:"INACTIVE"})),p.__bvControlCallbackBound=!0,p.label=c.name,p.value=c.enabled,p.serialize=!0,p.options??(p.options={}),p.options.on="ACTIVE",p.options.off="INACTIVE",p.callback=f,u.widget={name:d}}H1(e,t);const n=e.widgets?.find(c=>c.name==="bv_control_config_json");n&&(n.value=JSON.stringify(qp(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(qp(en()))),e.serialize_widgets=!0;const i=e.size??[0,0],a=e.computeSize?.()??i,l=Math.max(fm,(a[0]??0)+z1);e.setSize?.([Math.max(i[0]??0,l),a[1]??i[1]??0]),e.setDirtyCanvas?.(!0,!0)}function hm(e=en()){for(const{node:t}of b_(Nt(),Xu))pm(t,e);W1(e)}window.addEventListener(Vn,e=>hm(e.detail));Nt().registerExtension({name:"bv_nodepack.control_center",async beforeRegisterNodeDef(e,t){if(t.name!==Xu)return;const o=e.prototype.onNodeCreated;e.prototype.onNodeCreated=function(){const r=o?.apply(this,arguments);return pm(this,en()),r}},afterConfigureGraph(){hm()}});const lt=Nt(),xo=Qi();D0(e=>lt.ui?.settings?.setSettingValue?.(Pv,e));M0(e=>lt.ui?.settings?.setSettingValue?.(Bv,e));A0(e=>lt.ui?.settings?.setSettingValue?.(zv,e));uw(e=>lt.ui?.settings?.setSettingValue?.(Du,e));const Rd="bv-open-control-rack",In="bv-open-regional-editor",Mi="bv-open-regional-quick-edit",pr="bv-regional-document-changed",Jp="bv-nodepack-styles",gm="BV.DebugBridge.Enabled";let Xr=!1,Ua=null;const $1=()=>{const e=lt.extensionManager?.workflow?.activeWorkflow??lt.workflowManager?.activeWorkflow;return String(e?.filename??e?.path??"Current workflow")},bm=async e=>{Xr=!!e;const t=await fetch(xo.apiURL("/bv_nodepack/debug/session"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({enabled:Xr})});if(!t.ok)throw new Error(`BV Debug Bridge session failed: ${t.status} ${await t.text()}`)},vm=async()=>{if(!Xr)return!1;const e=await lt.graphToPrompt(),t=await fetch(xo.apiURL("/bv_nodepack/debug/snapshot"),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:e.output,workflow_name:$1()})});if(!t.ok)throw new Error(`BV Debug Bridge snapshot failed: ${t.status} ${await t.text()}`);return!0},ql=()=>{Xr&&(Ua!=null&&window.clearTimeout(Ua),Ua=window.setTimeout(()=>{Ua=null,vm().catch(e=>console.error(e))},600))},Oo=e=>{e.type="converted-widget",e.hidden=!0,e.computeSize=()=>[0,-4],e.element&&(e.element.style.display="none")},Y1=(e,t,o)=>{if(!t||!o||t===o)return;const r=e.widgets?.indexOf(t)??-1;if(r<0)return;e.widgets.splice(r,1);const n=e.widgets.indexOf(o);e.widgets.splice(n<0?e.widgets.length:n,0,t)},X1=e=>{const t=[e.widgets?.find(o=>o.name==="region_selector"),...e.__bvDetailerContextWidgets??[]].filter(Boolean);for(const o of t){const r=e.widgets?.indexOf(o)??-1;r>=0&&e.widgets.splice(r,1),o.onRemove?.()}e.__bvDetailerContextWidgets=[]},Ts=e=>{const t=e.inputs?.find(a=>a.name==="regional"||a.name==="regional_prompt"),o=e.graph??lt.graph,r=t?.link==null?null:o?.links?.[t.link]??o?._links?.get?.(t.link),n=r?o?.getNodeById?.(r.origin_id):null;if(n?.type!=="BV Regional Prompt")return null;const i=n.widgets?.find(a=>a.name==="regional_json")?.value;try{return on(i)}catch{return null}},G1=e=>{const t=e.graph??lt.graph,o=e.inputs?.find(l=>l.name==="detector_registry"),r=o?.link==null?null:t?.links?.[o.link]??t?._links?.get?.(o.link),n=r?t?.getNodeById?.(r.origin_id):null;if(n?.type!=="BV Detector Registry")return[];const i=n.widgets?.find(l=>l.name==="config_json")?.value,a=Di(i).detectors.map(l=>l.id);for(const l of n.inputs??[]){if(!String(l.name).startsWith("external_detector_")||l.link==null)continue;const c=t?.links?.[l.link]??t?._links?.get?.(l.link),d=c?t?.getNodeById?.(c.origin_id):null,f=String(d?.widgets?.find(u=>u.name==="detector_id")?.value??"").trim();f&&a.push(f)}return[...new Set(a)].sort((l,c)=>l.localeCompare(c))},gc=e=>{const t=/^external_detector_(\d+)$/,o=(e.inputs??[]).flatMap(n=>{const i=t.exec(String(n.name));return i&&n.link!=null?[Number(i[1])]:[]}),r=new Set(N1(o));for(let n=(e.inputs?.length??0)-1;n>=0;n--){const i=e.inputs[n],a=t.exec(String(i.name));a&&i.link==null&&!r.has(Number(a[1]))&&e.removeInput(n)}for(const n of[...r].sort((i,a)=>i-a)){const i=`external_detector_${n}`;e.inputs?.some(a=>a.name===i)||e.addInput(i,"BV_DETECTOR_BINDING",{label:`external detector ${n}`,nameLocked:!0})}e.setDirtyCanvas?.(!0,!0)},Zp=(e,t)=>{for(const o of e.inputs??[])o.label=fc(t,String(o.name));for(const o of e.outputs??[])o.label=fc(t,String(o.name));for(const o of e.widgets??[])String(o.name).startsWith("configure_")||(o.label=fc(t,String(o.name)));e.setDirtyCanvas?.(!0,!0)},Sd=e=>{const t=e.widgets?.find(i=>i.name==="config_json"),o=e.widgets?.find(i=>i.name==="configure_detailer_plan");if(!t||!o)return;Oo(t);const r=Ts(e),n=r?sl(t.value,r.regions).jobs.length:0;o.label=r?`Configure Detailer Plan · ${n} Job${n===1?"":"s"}`:"Connect a BV Regional Prompt",o.disabled=!r,e.setDirtyCanvas?.(!0,!0)},Qp=e=>{const t=e.widgets?.find(r=>r.name==="config_json");if(!t)return;Oo(t);let o=e.widgets?.find(r=>r.name==="configure_detailer_plan");o||(o=e.addWidget("button","configure_detailer_plan",null,()=>{const r=Ts(e);r&&(Ko("detailer",je(e)),R1(r.regions,G1(e),t.value,n=>{t.value=n,Sd(e),e.graph?.setDirtyCanvas?.(!0,!0)},`detailer-plan:${je(e)}`,zt("BV Regional Detailer Plan").filter(ln).map(n=>({id:je(n),label:`${n.title||"BV Regional Detailer Plan"} · #${n.id}`})),(n,i)=>{const a=zt("BV Regional Detailer Plan").find(c=>je(c)===n),l=a?.widgets?.find(c=>c.name==="configure_detailer_plan");l&&Au(`detailer-plan:${je(e)}`,`detailer-plan:${je(a)}`,()=>l.callback?.(),i)},e))},{serialize:!1}),o.serialize=!1),Sd(e)},eh=e=>{try{const t=JSON.parse(String(e??"[]"));return Array.isArray(t)?t.filter(o=>o&&typeof o.region_id=="string").map(o=>({region_id:o.region_id,influence:Math.max(0,Math.min(2,Number.isFinite(+o.influence)?+o.influence:1))})):[]}catch{return[]}},Gu=e=>{if(e.comfyClass!=="BV Regional Detailer Mask"&&e.type!=="BV Regional Detailer Mask")return;const t=e.widgets?.find(f=>f.name==="context_regions_json");if(!t)return;Oo(t);const o=Ts(e);if(!o)return;for(const f of e.__bvDetailerContextWidgets??[]){const u=e.widgets?.indexOf(f)??-1;u>=0&&e.widgets.splice(u,1),f.onRemove?.()}const r=String(e.widgets?.find(f=>f.name==="region")?.value??""),n=(o?.regions??[]).filter(f=>f.enabled!==!1&&f.id!==r),i=new Set,a=eh(t.value).filter(f=>f.region_id!==r&&!i.has(f.region_id)&&!!i.add(f.region_id));t.value=JSON.stringify(a);const l=[],c=f=>{t.value=JSON.stringify(f),queueMicrotask(()=>Gu(e))};for(let f=0;f<=a.length;f++){const u=a[f],p=new Set(a.filter((k,b)=>b!==f).map(k=>k.region_id)),g=sm(n.filter(k=>!p.has(k.id))),x=u&&!g.some(k=>k.id===u.region_id)?`Missing region · ${u.region_id.slice(0,8)}`:null,w=e.addWidget("combo",`context_region_${f+1}`,u?g.find(k=>k.id===u.region_id)?.label??x??"None":"None",k=>{if(k==="None")return c(a.slice(0,f));const b=g.find(v=>v.label===k);if(!b)return;const h=a.slice();h[f]={region_id:b.id,influence:u?.influence??1},c(h)},{values:["None",...x?[x]:[],...g.map(k=>k.label)],serialize:!1});if(w.label=`context region ${f+1}`,w.serialize=!1,l.push(w),u){const k=e.addWidget("number",`context_influence_${f+1}`,u.influence,b=>{const h=eh(t.value);h[f]&&(h[f].influence=Math.max(0,Math.min(2,+b))),t.value=JSON.stringify(h)},{min:0,max:2,step:.05,precision:2,serialize:!1});k.label=`context influence ${f+1}`,k.serialize=!1,l.push(k)}}e.__bvDetailerContextWidgets=l;const d=e.computeSize?.();d&&e.setSize&&e.setSize([Math.max(e.size?.[0]??0,d[0]),d[1]]),e.setDirtyCanvas?.(!0,!0),e.graph?.setDirtyCanvas?.(!0,!0)},cl=e=>{const t=e.widgets?.find(f=>f.name==="region"),o=e.widgets?.find(f=>f.name==="region_selector");if(!t||!o)return;const r=Ts(e);if(!r){o.options??(o.options={}),o.options.values=["Connect a BV Regional Prompt"],o.value=o.options.values[0],o.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=sm(r.regions,n),a=String(t.value??""),l=i.some(f=>f.id===a)?a:a||i[0]?.id||"";t.value=l,e.__bvRegionChoices=i,o.options??(o.options={});const c=l&&!i.some(f=>f.id===l)?`Missing region · ${l.slice(0,8)}`:null;o.options.values=i.length||c?[...c?[c]:[],...i.map(f=>f.label)]:["Connect a BV Regional Prompt"],o.value=i.find(f=>f.id===l)?.label??c??o.options.values[0];const d=e.widgets?.find(f=>f.name==="scope");o.disabled=d&&d.value!=="region"||!i.length,Gu(e),e.setDirtyCanvas?.(!0,!0)},th=e=>{const t=e.widgets?.find(n=>n.name==="region");if(!t)return;Oo(t);let o=e.widgets?.find(n=>n.name==="region_selector");o||(o=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,Gu(e))},{values:["Connect a BV Regional Prompt"],serialize:!1}),o.label="region",o.serialize=!1),(e.comfyClass==="BV Regional Detailer Mask"||e.type==="BV Regional Detailer Mask")&&Y1(e,o,e.widgets?.find(n=>n.name==="primary_region_influence"));const r=e.widgets?.find(n=>n.name==="scope");if(r&&!r.__bvRegionSelectorHooked){r.__bvRegionSelectorHooked=!0;const n=r.callback;r.callback=function(){const i=n?.apply(this,arguments);return cl(e),i}}if(!e.__bvRegionDocumentListener){e.__bvRegionDocumentListener=()=>cl(e),window.addEventListener(pr,e.__bvRegionDocumentListener);const n=e.onRemoved;e.onRemoved=function(){return window.removeEventListener(pr,e.__bvRegionDocumentListener),n?.apply(this,arguments)}}cl(e)},zt=e=>{const t=[],o=r=>{for(const n of r?._nodes??[])n.type===e&&t.push(n),n.subgraph&&o(n.subgraph)};return o(lt.graph),t},Gr=()=>{const e=lt.graph,t=[],o=r=>{for(const n of r?._nodes??[])n.type==="BV Regional Prompt"&&t.push(n),n.subgraph&&o(n.subgraph)};return o(e),t},Ii=()=>{const e=zt("BV Control Center").length>0,t=Gr().length>0,o=t||["BV Regional Detailer Plan","BV Detector Registry","BV Smart Pipe","BV Smart Pipe Merge"].some(n=>zt(n).length>0),r=o||t;document.body.classList.toggle("bv-toolbar-no-control",!e),document.body.classList.toggle("bv-toolbar-no-editor",!o),document.body.classList.toggle("bv-toolbar-no-quick",!t),document.body.classList.toggle("bv-toolbar-no-overview",!r),window.dispatchEvent(new CustomEvent("bv-toolbar-capabilities-changed",{detail:{control:e,quick:t,full:o,overview:r}}))},mm=e=>Iu(lt.rootGraph??lt.graph,t=>t===e)[0],je=e=>mm(e)?.key??String(e.id),Wa=(e,t)=>{const o=mm(e);return{label:String(e.title||t),meta:`${o?.breadcrumb?`${o.breadcrumb} · `:""}#${e.id}`}},Jl=(e,t,o,r)=>{const n=r.widgets?.find(c=>c.name===o);if(!n||n.disabled)return;const i=je(r),a=Br(e),l=()=>n.callback?.();a&&a!==i?Au(`${t}:${a}`,`${t}:${i}`,l,$n()==="replace"):l(),Ko(e,i)},oh=(e,t)=>{e==="regional"?window.dispatchEvent(new CustomEvent(In,{detail:{node:t}})):e==="detailer"?Jl("detailer","detailer-plan","configure_detailer_plan",t):e==="detector"?Jl("detector","detector-registry","configure_detector_registry",t):window.dispatchEvent(new CustomEvent("bv-open-smart-pipe-editor",{detail:{node:t,kind:e}}))},K1=()=>{const e=[{type:"regional",nodes:Gr()},{type:"detailer",nodes:zt("BV Regional Detailer Plan")},{type:"detector",nodes:zt("BV Detector Registry")},{type:"pipe",nodes:zt("BV Smart Pipe")},{type:"merge",nodes:zt("BV Smart Pipe Merge")}],t=p0(),o=t&&Br(t),r=e.find(i=>i.type===t)?.nodes.find(i=>je(i)===o);if(r){oh(t,r);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&&(oh(n.type,n.node),t&&No({title:"Previous editor unavailable",message:"Opened the first available BV editor instead.",tone:"warning",duration:4e3}))},Ld=()=>{const e=lt.graph,t=[],o=r=>{for(const n of r?._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&&o(n.subgraph)}};return o(e),t.sort((r,n)=>r.name.localeCompare(n.name))},q1=()=>g1(Gr().flatMap(e=>{try{const t=on(e.widgets?.find(o=>o.name==="regional_json")?.value);return[{documentId:t.document_id,nodeId:String(e.id),title:e.title||t.title||"BV Regional Prompt"}]}catch{return[]}})),rh=(e,t=!1)=>{const o=e.widgets?.find(a=>a.name==="document_id"),r=e.widgets?.find(a=>a.name==="target_editor");if(!o||!r)return;const n=q1(),i=b1(o.value,n,t);o.value=i,e.__bvDocumentTargets=n,r.options??(r.options={}),r.options.values=n.length?n.map(a=>a.label):["No BV Regional Prompt available"],r.value=n.find(a=>a.documentId===i)?.label??(i?`Missing target · ${i.slice(0,8)}`:r.options.values[0]),r.disabled=!n.length,e.setDirtyCanvas?.(!0,!0)},nh=(e,t=!1)=>{const o=e.widgets?.find(n=>n.name==="document_id");if(!o)return;Oo(o);let r=e.widgets?.find(n=>n.name==="target_editor");if(r||(r=e.addWidget("combo","target_editor","No BV Regional Prompt available",n=>{const i=e.__bvDocumentTargets?.find(a=>a.label===n);i&&(o.value=i.documentId)},{values:["No BV Regional Prompt available"],serialize:!1}),r.label="target_editor",r.serialize=!1),!e.__bvDocumentTargetListener){e.__bvDocumentTargetListener=()=>rh(e,!1),window.addEventListener(pr,e.__bvDocumentTargetListener);const n=e.onRemoved;e.onRemoved=function(){return window.removeEventListener(pr,e.__bvDocumentTargetListener),n?.apply(this,arguments)}}rh(e,t)},ih=(e,t=!1)=>{const o=e.widgets?.find(r=>r.name==="regional_json");if(o)try{const r=t?wp():on(o.value);!t&&Gr().some(a=>{if(a===e)return!1;try{return on(a.widgets?.find(l=>l.name==="regional_json")?.value).document_id===r.document_id}catch{return!1}})&&(r.document_id=crypto.randomUUID()),o.value=JSON.stringify(r);const i=e.widgets?.find(a=>a.name==="lora_bindings_json");if(i)try{const a={...$u(i.value,t?"":r.document_id),document_id:r.document_id};i.value=JSON.stringify(Mn(a,new Set(r.regions.map(l=>l.id))))}catch{i.value=JSON.stringify(Es(r.document_id))}}catch{o.value=JSON.stringify(wp())}};function J1(){const[e,t]=m.useState(!1),[o,r]=m.useState(!1),[n,i]=m.useState(!1),[a,l]=m.useState(0),[c,d]=m.useState(!1),[f,u]=m.useState(0),[p,g]=m.useState(null),[x,w]=m.useState([]),[k,b]=m.useState({}),[h,v]=m.useState([]),_=m.useCallback((y=!1)=>{const E=Gr(),R=zt("BV Regional Detailer Plan"),P=zt("BV Detector Registry"),I=[...zt("BV Smart Pipe"),...zt("BV Smart Pipe Merge")],B=(L,T)=>{const j=!ln(L);return j&&!y?null:{...T,hidden:j,onReveal:j?()=>Zn(L,!0):void 0}};return[{id:"regional",label:"Regional Prompts",items:E.map(L=>{const T=Wa(L,"BV Regional Prompt"),j=Br("regional")===je(L);return B(L,{id:je(L),...T,meta:`${T.meta}${j?" · Last active":""}`,onSelect:()=>window.dispatchEvent(new CustomEvent(In,{detail:{node:L}})),secondary:{label:`Quick edit ${T.label}`,onSelect:()=>window.dispatchEvent(new CustomEvent(Mi,{detail:{node:L}}))}})}).filter(Boolean)},{id:"detailer",label:"Detailer Plan",items:R.map(L=>{const T=Wa(L,"BV Regional Detailer Plan"),j=L.widgets?.find(S=>S.name==="configure_detailer_plan"),D=Br("detailer")===je(L);return B(L,{id:je(L),...T,disabled:!j||j.disabled,meta:`${T.meta}${j?.disabled?" · Connect Regional Prompt":D?" · Last active":""}`,onSelect:()=>Jl("detailer","detailer-plan","configure_detailer_plan",L)})}).filter(Boolean)},{id:"detector",label:"Detector Registry",items:P.map(L=>{const T=Wa(L,"BV Detector Registry"),j=Br("detector")===je(L);return B(L,{id:je(L),...T,meta:`${T.meta}${j?" · Last active":""}`,onSelect:()=>Jl("detector","detector-registry","configure_detector_registry",L)})}).filter(Boolean)},{id:"smart-pipe",label:"Smart Pipes",items:I.map(L=>{const T=String(L.type??L.comfyClass)==="BV Smart Pipe Merge"?"merge":"pipe",j=Wa(L,T==="merge"?"Smart Pipe Merge":"Smart Pipe");return B(L,{id:je(L),...j,meta:`${j.meta} · ${T==="merge"?"Merge":"Pipe"}`,onSelect:()=>window.dispatchEvent(new CustomEvent("bv-open-smart-pipe-editor",{detail:{node:L,kind:T}}))})}).filter(Boolean)}]},[]);return m.useEffect(()=>{if(!(!n&&!c))return _1(lt,xo,()=>{i(!1),d(!1)})},[c,n]),m.useEffect(()=>{const y=()=>t(!0);return window.addEventListener(Rd,y),()=>window.removeEventListener(Rd,y)},[]),m.useEffect(()=>{const y=E=>r(!!E.detail?.control);return window.addEventListener("bv-toolbar-capabilities-changed",y),Ii(),()=>window.removeEventListener("bv-toolbar-capabilities-changed",y)},[]),m.useEffect(()=>{const y=E=>{const R=E.detail?.node??null,P=Gr();v(Ld()),w(P);const I=R??P.find(B=>je(B)===Br("quick"))??P[0]??null;I&&Ko("quick",je(I)),g(I),i(!1),d(!0),u(B=>B+1)};return window.addEventListener(Mi,y),()=>window.removeEventListener(Mi,y)},[]),m.useEffect(()=>{const y=E=>{const R=E.detail?.output,P=R?.bv_regional_background?.[0]?.document_id,I=R?.images?.[R.images.length-1];if(!P||!I)return;const B=new URLSearchParams({filename:I.filename,type:I.type,subfolder:I.subfolder||""});b(z=>({...z,[P]:xo.apiURL(`/view?${B}`)}))};return xo.addEventListener("executed",y),()=>xo.removeEventListener("executed",y)},[]),m.useEffect(()=>{const y=E=>{const R=E.detail?.node??null,P=Gr();v(Ld()),w(P);const I=R??P.find(B=>je(B)===Br("regional"))??P[0]??null;I&&Ko("regional",je(I)),g(I),I&&c&&String(p?.id)===String(I.id)&&d(!1),i(!0),l(B=>B+1)};return window.addEventListener(In,y),()=>window.removeEventListener(In,y)},[c,p]),s.jsxs(s.Fragment,{children:[s.jsx(d0,{}),s.jsx(Rw,{getColumns:_}),s.jsx(b0,{}),s.jsx(g0,{open:e,hasControlNodes:o,onClose:()=>t(!1)}),s.jsx(u1,{open:n,activationToken:a,nodes:x,initialNode:p,backgrounds:k,loraStacks:h,onClose:()=>i(!1)}),s.jsx(h1,{open:c,activationToken:f,nodes:x,initialNode:p,loraStacks:h,onClose:()=>d(!1),onOpenEditor:y=>{Ko("regional",je(y)),g(y),d(!1),i(!0),l(E=>E+1)}})]})}const ah="bv-root";function Z1(){if(!document.getElementById(Jp)){const t=document.createElement("style");t.id=Jp,t.textContent=`${_0} -${y0}`,document.head.appendChild(t)}let e=document.getElementById(ah);e||(e=document.createElement("div"),e.id=ah,document.body.appendChild(e),bc.createRoot(e).render(s.jsx(Te.StrictMode,{children:s.jsx(J1,{})})))}lt.registerExtension({name:"bv_nodepack.control_rack_portal",setup(){Z1(),gw(lt.ui?.settings),y1(),Xr=!!lt.ui?.settings?.getSettingValue?.(gm,!1),bm(Xr).then(()=>{Xr&&ql()}).catch(e=>console.error(e)),xo.addEventListener("graphChanged",ql),xo.addEventListener("graphChanged",Ii)}});lt.registerExtension({name:"bv_nodepack.regional_editor",settings:[{id:Fb,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=>Vb(e)},{id:Ub,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=>Hb(e)},{id:Du,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=>Mu(e,!1)},{id:gm,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=>{bm(!!e).then(()=>{e&&ql()}).catch(t=>console.error(t))}},{id:Pv,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=>Xv(!!e)},{id:zv,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=>$v(e)},{id:Bv,name:"Completion Datasets",type:v1,defaultValue:"",category:["BV Node Pack","Prompting","Completion datasets"],tooltip:"Choose one or more local CSV/TSV datasets for BV Prompt Autocomplete.",onChange:e=>Jv(e)}],commands:[{id:"bv.regional.openEditor",label:"Open BV Regional Editor",icon:"icon-[lucide--layers]",function:()=>{window.dispatchEvent(new CustomEvent(In))}},{id:"bv.debugBridge.publishSnapshot",label:"Refresh BV Debug Bridge Snapshot",icon:"icon-[lucide--radio-tower]",function:()=>vm().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(Rd))},{icon:"icon-[lucide--scan-search]",class:"bv-regional-action bv-regional-action-editor",tooltip:"Open last BV editor",onClick:K1},{icon:"icon-[lucide--layers]",class:"bv-regional-action bv-regional-action-quick",tooltip:"Quick edit BV Regional prompts",onClick:()=>window.dispatchEvent(new CustomEvent(Mi))},{icon:"icon-[lucide--chevron-down]",class:"bv-regional-action bv-regional-action-menu",tooltip:"Choose BV window",onClick:()=>window.dispatchEvent(new CustomEvent(Pl))}],beforeRegisterNodeDef(e,t){if(["BV Control Center","BV Regional Prompt","BV Regional Detailer Plan","BV Detector Registry","BV Smart Pipe","BV Smart Pipe Merge"].includes(t.name)){const i=e.prototype.onNodeCreated,a=e.prototype.onRemoved;e.prototype.onNodeCreated=function(){const l=i?.apply(this,arguments);return t.name!=="BV Control Center"&&(this.properties??(this.properties={}),typeof this.properties.bvWindowMenuVisible!="boolean"&&(this.properties.bvWindowMenuVisible=!["BV Smart Pipe","BV Smart Pipe Merge"].includes(t.name))),queueMicrotask(Ii),l},e.prototype.onRemoved=function(){const l=a?.apply(this,arguments);return queueMicrotask(Ii),l}}if(O1.has(t.name)){const i=e.prototype.onNodeCreated,a=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const l=i?.apply(this,arguments);return queueMicrotask(()=>Zp(this,t.name)),l},e.prototype.onConfigure=function(l){const c=a?.call(this,l);return queueMicrotask(()=>Zp(this,t.name)),c}}if(t.name==="BV Detector Registry"){const i=d=>{const f=d.widgets?.find(g=>g.name==="config_json");if(!f)return;Oo(f);let u=d.widgets?.find(g=>g.name==="configure_detector_registry");u||(u=d.addWidget("button","configure_detector_registry",null,()=>{Ko("detector",je(d)),L1(xo,f.value,g=>{f.value=g,i(d),d.graph?.setDirtyCanvas?.(!0,!0)},`detector-registry:${je(d)}`,zt("BV Detector Registry").filter(ln).map(g=>({id:je(g),label:`${g.title||"BV Detector Registry"} · #${g.id}`})),(g,x)=>{const w=zt("BV Detector Registry").find(b=>je(b)===g),k=w?.widgets?.find(b=>b.name==="configure_detector_registry");k&&Au(`detector-registry:${je(d)}`,`detector-registry:${je(w)}`,()=>k.callback?.(),x)},d).catch(g=>console.error(g))},{serialize:!1}),u.serialize=!1);const p=Di(f.value).detectors.length;u.label=`Configure Detector Registry · ${p} Detector${p===1?"":"s"}`,d.setDirtyCanvas?.(!0,!0)},a=e.prototype.onNodeCreated,l=e.prototype.onConfigure,c=e.prototype.onConnectionsChange;e.prototype.onNodeCreated=function(){const d=a?.apply(this,arguments);return queueMicrotask(()=>{i(this),gc(this)}),d},e.prototype.onConfigure=function(){const d=l?.apply(this,arguments);return queueMicrotask(()=>{i(this),gc(this)}),d},e.prototype.onConnectionsChange=function(){const d=c?.apply(this,arguments);return queueMicrotask(()=>gc(this)),d};return}if(t.name==="BV Regional Detailer Plan"){const i=e.prototype.onNodeCreated,a=e.prototype.onConfigure,l=e.prototype.onConnectionsChange;e.prototype.onNodeCreated=function(){const c=i?.apply(this,arguments);return queueMicrotask(()=>Qp(this)),c},e.prototype.onConfigure=function(){const c=a?.apply(this,arguments);return queueMicrotask(()=>Qp(this)),c},e.prototype.onConnectionsChange=function(){const c=l?.apply(this,arguments);return queueMicrotask(()=>Sd(this)),c};return}if(t.name==="BV Remote LLM Provider"){const i=e.prototype.onNodeCreated,a=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const l=i?.apply(this,arguments);return queueMicrotask(()=>Gp(this,xo)),l},e.prototype.onConfigure=function(l){Array.isArray(l?.widgets_values)&&l.widgets_values.length>=6&&/^[A-Za-z_][A-Za-z0-9_]*$/.test(String(l.widgets_values[3]??""))&&(l={...l,widgets_values:[...l.widgets_values.slice(0,3),...l.widgets_values.slice(4)]});const c=a?.call(this,l);return queueMicrotask(()=>Gp(this,xo)),c};return}if(t.name==="BV Named LoRA Stack"){const i=c=>{const d=c.widgets?.find(u=>u.name==="stack_id");if(!d)return;const f=String(d.value??"").trim();(!f||n1(String(c.id),f,Ld()))&&(d.value=crypto.randomUUID(),c.setDirtyCanvas?.(!0,!0)),Oo(d)},a=e.prototype.onNodeCreated,l=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const c=a?.apply(this,arguments);return i(this),c},e.prototype.onConfigure=function(){const c=l?.apply(this,arguments);return queueMicrotask(()=>i(this)),c};return}if(t.name==="BV Regional Image Send"||t.name==="BV Regional Image Save"){const i=e.prototype.onNodeCreated,a=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const l=i?.apply(this,arguments);return queueMicrotask(()=>nh(this,!0)),l},e.prototype.onConfigure=function(){const l=a?.apply(this,arguments);return queueMicrotask(()=>nh(this,!1)),l};return}if(["BV Regional Select","BV Regional Deconstructor","BV Regional Detailer Mask"].includes(t.name)){const i=e.prototype.onNodeCreated,a=e.prototype.onConfigure,l=e.prototype.onConnectionsChange;e.prototype.onNodeCreated=function(){const d=i?.apply(this,arguments);return th(this),d};const c=e.prototype.onSerialize;e.prototype.onConfigure=function(d){t.name==="BV Regional Detailer Mask"&&(X1(this),d?.widgets_values&&(d={...d,widgets_values:k1(d.widgets_values)}));const f=a?.call(this,d);return queueMicrotask(()=>th(this)),f},e.prototype.onSerialize=function(d){const f=c?.apply(this,arguments);return t.name==="BV Regional Detailer Mask"&&(d.widgets_values=w1(this.widgets)),f},e.prototype.onConnectionsChange=function(){const d=l?.apply(this,arguments);return queueMicrotask(()=>cl(this)),d};return}if(t.name!=="BV Regional Prompt")return;const o=e.prototype.onNodeCreated,r=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const i=o?.apply(this,arguments);ih(this,!0);const a=this.widgets?.find(c=>c.name==="regional_json"),l=this.widgets?.find(c=>c.name==="lora_bindings_json");if(l&&Oo(l),a&&(Oo(a),!a.__bvRegionalDocumentHooked)){a.__bvRegionalDocumentHooked=!0;const c=a.callback;a.callback=function(){const d=c?.apply(this,arguments);return window.dispatchEvent(new CustomEvent(pr)),d}}if(!this.widgets?.find(c=>c.name==="open_regional_editor")){const c=this.addWidget("button","open_regional_editor",null,()=>window.dispatchEvent(new CustomEvent(In,{detail:{node:this}})),{serialize:!1});c.label="Open Regional Editor",c.serialize=!1}if(!this.widgets?.find(c=>c.name==="quick_edit_regional_prompts")){const c=this.addWidget("button","quick_edit_regional_prompts",null,()=>window.dispatchEvent(new CustomEvent(Mi,{detail:{node:this}})),{serialize:!1});c.label="Quick Edit Prompts",c.serialize=!1}return this.setSize?.([Math.max(this.size?.[0]??0,220),this.computeSize?.()[1]??60]),window.dispatchEvent(new CustomEvent(pr)),i},e.prototype.onConfigure=function(){const i=r?.apply(this,arguments);ih(this,!1);const a=this.widgets?.find(l=>l.name==="lora_bindings_json");return a&&Oo(a),window.dispatchEvent(new CustomEvent(pr)),i};const n=e.prototype.onRemoved;e.prototype.onRemoved=function(){const i=n?.apply(this,arguments);return window.dispatchEvent(new CustomEvent(pr)),i}},afterConfigureGraph(){ql(),queueMicrotask(Ii)}}); + then enabling this option will gray out this tab`),o.addInherited("borderWidth","tabBorderWidth").setDescription("the width of this tab when shown in a border; -1 uses the border's default size"),o.addInherited("borderHeight","tabBorderHeight").setDescription("the height of this tab when shown in a border; -1 uses the border's default size"),o.addInherited("minWidth","tabMinWidth").setDescription("the minimum width (in px) of this tab"),o.addInherited("minHeight","tabMinHeight").setDescription("the minimum height (in px) of this tab"),o.addInherited("maxWidth","tabMaxWidth").setDescription("the maximum width (in px) of this tab"),o.addInherited("maxHeight","tabMaxHeight").setDescription("the maximum height (in px) of this tab"),o.addInherited("enableScrollbars","tabEnableScrollbars").setDescription("whether the tab will be hosted in a scrollable container"),o}},A(_t,"TYPE","tab"),A(_t,"attributeDefinitions",_t.createAttributeDefinitions()),_t),or={width:"1em",height:"1em",display:"flex",alignItems:"center"},al=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:or,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"})]});al.displayName="CloseIcon";var ev=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:or,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"})]});ev.displayName="PinIcon";var tv=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:or,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"})]});tv.displayName="MaximizeIcon";var ov=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:or,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"})]});ov.displayName="OverflowIcon";var rv=()=>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"})});rv.displayName="EdgeIcon";var gd=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:or,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"})]});gd.displayName="PopoutIcon";var nv=()=>s.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 -960 960 960",style:or,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"})});nv.displayName="PopoutFloatIcon";var iv=()=>s.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",style:or,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"})});iv.displayName="GripIcon";var av=()=>s.jsxs("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:or,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"})]});av.displayName="RestoreIcon";var lv=()=>s.jsx("svg",{"aria-hidden":"true",focusable:"false",xmlns:"http://www.w3.org/2000/svg",style:or,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"})});lv.displayName="AsterickIcon";var sv=e=>{const{controller:t,show:o}=e;return s.jsx("div",{"aria-hidden":"true",className:t.getClassName(U.FLEXLAYOUT__LAYOUT_OVERLAY),style:{display:o?"flex":"none"}})};sv.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}({}),ra=e=>{const{controller:t,tabNode:o}=e,r=t.getClassName,n=r(U.FLEXLAYOUT__TAB_BUTTON_STAMP),i=Iu(t,o),a=i.content?s.jsx("div",{className:r(U.FLEXLAYOUT__TAB_BUTTON_CONTENT),children:i.content}):o.getNameForOverflowMenu(),l=i.leading?s.jsx("div",{className:r(U.FLEXLAYOUT__TAB_BUTTON_LEADING),children:i.leading}):null;return s.jsxs("div",{className:n,title:o.getHelpText(),children:[l,a]})};ra.displayName="TabButtonStamp";var Ow=500;function _s(e){return typeof e.getBoundingClientRect=="function"}function cv(e){return e.container?e.container:_s(e.anchor)?e.anchor.ownerDocument.body:document.body}function Aw(e){if(_s(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 Dw(e,t){const o=t,{left:r,right:n,top:i,bottom:a}=e,l={};return(r+n)/2{const{anchor:t,items:o,onSelect:r,onClose:n,renderItem:i,title:a}=e,l=e.classNameMapper??(b=>b),c=cv(e),d=m.useRef(null),f=m.useRef(null),u=m.useRef({buffer:"",timer:void 0});m.useEffect(()=>()=>{u.current.timer&&clearTimeout(u.current.timer)},[]);const p=m.useCallback(b=>{b.disabled||((b.onSelect??r)?.(b),n())},[r,n]);m.useEffect(()=>{(f.current?.querySelector('[role="menuitem"]:not([aria-disabled="true"])')??f.current)?.focus();const b=e.returnFocusTo??(_s(t)?t:void 0);return()=>{b?.focus?.()}},[]),m.useEffect(()=>{const b=c.ownerDocument,h=v=>{d.current?.contains(v.target)||n()};return b.addEventListener("pointerdown",h),()=>b.removeEventListener("pointerdown",h)},[c,n]);const g=b=>{const h=Array.from(f.current?.querySelectorAll('[role="menuitem"]:not([aria-disabled="true"])')??[]),v=b.target.closest?.('[role="menuitem"]'),_=v?h.indexOf(v):-1;if(b.key==="Escape"||b.key==="Tab")n(),b.preventDefault();else if(b.key==="ArrowDown"||b.key==="ArrowUp")h.length>0&&h[(_+(b.key==="ArrowDown"?1:-1)+h.length)%h.length]?.focus(),b.preventDefault();else if(b.key==="Home"||b.key==="End")(b.key==="Home"?h[0]:h[h.length-1])?.focus(),b.preventDefault();else if(b.key.length===1&&b.key!==" "&&!b.ctrlKey&&!b.metaKey&&!b.altKey){const y=u.current;y.timer&&clearTimeout(y.timer),y.buffer+=b.key.toLowerCase(),y.timer=setTimeout(()=>{y.buffer=""},Ow);const T=[...y.buffer].every(C=>C===y.buffer[0]),L=T?y.buffer[0]:y.buffer,B=T?_+1:Math.max(_,0);for(let C=0;C({select:()=>p(b),close:n}),w=b=>s.jsx("div",{className:l(U.FLEXLAYOUT__POPUP_MENU_ITEM)+(b.disabled?" "+l(U.FLEXLAYOUT__POPUP_MENU_ITEM__DISABLED):""),role:"menuitem",tabIndex:-1,"aria-disabled":b.disabled||void 0,onClick:h=>{p(b),h.stopPropagation()},children:b.content??s.jsxs(s.Fragment,{children:[b.icon,b.label]})},b.key),E=s.jsx("div",{ref:d,className:l(U.FLEXLAYOUT__POPUP_MENU_CONTAINER),style:Dw(Aw(t),c.getBoundingClientRect()),children:s.jsx("div",{ref:f,className:l(U.FLEXLAYOUT__POPUP_MENU),role:"menu","aria-label":a,tabIndex:0,onKeyDown:g,"data-layout-path":"/popup-menu",children:o.map((b,h)=>b.type==="divider"?s.jsx("div",{className:l(U.FLEXLAYOUT__POPUP_MENU_DIVIDER),role:"separator"},b.key):i?i(b,h,x(b)):w(b))})});return Io.createPortal(E,c)};function Mw(e){const t=cv(e),o=_s(e.anchor)?e.anchor.getBoundingClientRect():e.anchor,r=t.ownerDocument.createElement("div");t.appendChild(r);const n=Jn(r);let i=!1;const a=()=>{i||(i=!0,n.unmount(),r.remove(),e.onClose())};return n.render(s.jsx(dv,{...e,anchor:o,container:t,onClose:a})),a}function uv(e,t,o,r,n,i){const a=n.getClassName,l=o.map(d=>({key:d.node.getId()}));n.showOverlayOnAllWindows(!0);const c=(d,f,u)=>{const p=o[f];let g=a(U.FLEXLAYOUT__POPUP_MENU_ITEM);return t.getSelected()===p.index&&(g+=" "+a(U.FLEXLAYOUT__POPUP_MENU_ITEM__SELECTED)),s.jsx("div",{className:g,role:"menuitem","aria-label":p.node.getNameForOverflowMenu(),tabIndex:-1,"data-layout-path":"/popup-menu/tb"+f,onClick:x=>{u.select(),x.stopPropagation()},draggable:!0,onDragStart:x=>{x.stopPropagation(),n.getDragDropManager().setDragNode(x.nativeEvent,p.node),setTimeout(()=>u.close(),0)},onDragEnd:()=>n.getDragDropManager().onDragEnded(),title:p.node.getHelpText(),children:s.jsx(ra,{tabNode:p.node,controller:n})},d.key)};return Mw({anchor:e,container:n.getRootDiv()??void 0,classNameMapper:a,returnFocusTo:e,title:n.i18nName(De.Overflow_Menu_Tooltip),items:l,onSelect:d=>{const f=l.indexOf(d);f>=0&&r(o[f])},renderItem:c,onClose:()=>{n.showOverlayOnAllWindows(!1),i?.()}})}dv.displayName="PopupMenu";var fv=e=>{const{controller:t,tabNode:o,selected:r,path:n}=e,i=m.useRef(null),a=m.useRef(null),l=t.getIcons(),c=t.getKeyMap(),d=t.getEditingTab()===o,f=m.useCallback(F=>{i.current=F,t.registerMeasurable(o,"tabbutton",F)},[t,o]);m.useLayoutEffect(()=>{d&&a.current.select()},[d]),m.useEffect(()=>{if(d){const F=t.getCurrentDocument().body,ne=Y=>{Y.target!==a.current&&t.setEditingTab(void 0)};return F.addEventListener("pointerdown",ne),()=>F.removeEventListener("pointerdown",ne)}},[d,t]);const u=F=>{o.isEnableDrag()?(F.stopPropagation(),t.getDragDropManager().setDragNode(F.nativeEvent,o)):F.preventDefault()},p=F=>{t.getDragDropManager().onDragEnded()},g=F=>{oa(F)&&t.auxMouseClick(o,F)},x=F=>{t.showContextMenu(o,F)},w=()=>{o.isSelected()||t.doAction(oe.selectTab(o.getId()))},E=F=>{const ne=i.current?.closest('[role="tablist"]');if(ne){const Y=Array.from(ne.querySelectorAll('[role="tab"]'));Y[Y.indexOf(i.current)+F]?.focus()}},b=()=>{const F=i.current.ownerDocument,ne=()=>Kb(F.getElementById(Tt("flexlayout-tab-",o.getId())));r?ne():(w(),requestAnimationFrame(ne))},h=F=>{d||(Ko(F,c.focusTabToggle)?(b(),F.preventDefault()):F.key==="Enter"||F.key===" "?(r?b():w(),F.preventDefault()):(F.key==="ArrowLeft"||F.key==="ArrowUp")&&!ta(F)?(E(-1),F.preventDefault()):(F.key==="ArrowRight"||F.key==="ArrowDown")&&!ta(F)?(E(1),F.preventDefault()):Ko(F,c.closeTab)&&o.isCloseable()?(E(1),t.doAction(oe.deleteTab(o.getId())),F.preventDefault()):Ko(F,c.renameTab)&&o.isEnableRename()&&(_(),F.preventDefault()))},v=F=>{o.isEnableRename()&&(_(),F.stopPropagation())},_=()=>{t.setEditingTab(o)},y=()=>{const F=o.getCloseType();return!!(r||F===Xr.Always||F===Xr.Visible&&window.matchMedia&&window.matchMedia("(hover: hover) and (pointer: fine)").matches)},T=F=>{y()&&(t.doAction(oe.deleteTab(o.getId())),F.stopPropagation())},L=F=>{F.stopPropagation()},B=F=>{F.stopPropagation()},C=F=>{F.code==="Escape"?(t.setEditingTab(void 0),i.current?.focus()):(F.code==="Enter"||F.code==="NumpadEnter")&&(t.setEditingTab(void 0),t.doAction(oe.renameTab(o.getId(),F.target.value)),i.current?.focus())},j=t.getClassName,z=o.getParent(),S=z.isEnableSingleTabStretch()&&z.getChildren().length===1,k=S?U.FLEXLAYOUT__TAB_BUTTON_STRETCH:U.FLEXLAYOUT__TAB_BUTTON;let I=j(k);I+=" "+j(k+"_"+z.getTabLocation()),S||(r?I+=" "+j(k+"--selected"):I+=" "+j(k+"--unselected")),o.isPinned()&&(I+=" "+j(k+"--pinned")),o.getClassName()!==void 0&&(I+=" "+o.getClassName());const D=Iu(t,o),R=r||z.getSelectedNode()===void 0&&z.getChildren()[0]===o,O=[kr(c.focusTabToggle),o.isCloseable()?kr(c.closeTab):void 0,o.isEnableRename()?kr(c.renameTab):void 0].filter(Boolean).join(" ")||void 0;let M=D.content?s.jsx("div",{className:j(U.FLEXLAYOUT__TAB_BUTTON_CONTENT),children:D.content}):null;const V=D.leading?s.jsx("div",{className:j(U.FLEXLAYOUT__TAB_BUTTON_LEADING),children:D.leading}):null;if(d&&(M=s.jsx("input",{ref:a,className:j(U.FLEXLAYOUT__TAB_BUTTON_TEXTBOX),"data-layout-path":n+"/textbox",type:"text","aria-label":t.i18nName(De.Rename_Tab),autoFocus:!0,defaultValue:o.getName(),onKeyDown:C,onPointerDown:B})),o.isPinned()){const F=t.i18nName(De.Pinned_Tab);D.buttons.push(s.jsx("div",{"data-layout-path":n+"/button/pin",title:F,"aria-hidden":"true",className:j(U.FLEXLAYOUT__TAB_BUTTON_PIN),children:typeof l.pin=="function"?l.pin(o):l.pin},"pin"))}if(o.isCloseable()&&!S){const F=t.i18nName(De.Close_Tab);D.buttons.push(s.jsx("div",{"data-layout-path":n+"/button/close",title:F,"aria-hidden":"true",className:j(U.FLEXLAYOUT__TAB_BUTTON_TRAILING),onPointerDown:L,onClick:T,children:typeof l.close=="function"?l.close(o):l.close},"close"))}return s.jsxs("div",{ref:f,id:Tt("flexlayout-tabbutton-",o.getId()),role:d?void 0:"tab","aria-selected":d?void 0:r,"aria-controls":d?void 0:Tt("flexlayout-tab-",o.getId()),"aria-label":d?void 0:o.isPinned()?D.name+" ("+t.i18nName(De.Pinned_Tab)+")":D.name,"aria-keyshortcuts":d?void 0:O,tabIndex:d?-1:R?0:-1,onKeyDown:h,"data-layout-path":n,className:I,onClick:w,onAuxClick:g,onContextMenu:x,title:o.getHelpText(),draggable:!0,onDragStart:u,onDragEnd:p,onDoubleClick:v,children:[V,M,D.buttons]})};fv.displayName="TabButton";var pv=(e,t,o,r,n,i,a)=>{const[l,c]=m.useState([]),[d,f]=m.useState(!1),[u,p]=m.useState(!1),g=m.useRef(!1),x=m.useRef(void 0),w=m.useRef([]),E=m.useRef(0),b=m.useRef(!1);m.useEffect(()=>()=>{x.current!==void 0&&clearTimeout(x.current)},[]),m.useLayoutEffect(()=>{w.current=l});const h=m.useCallback(K=>{o===ye.HORZ?r.current.scrollLeft=K:r.current.scrollTop=K},[o,r]),v=m.useCallback(K=>o===ye.HORZ?K.scrollLeft:K.scrollTop,[o]),_=m.useCallback(K=>o===ye.HORZ?K.clientWidth:K.clientHeight,[o]),y=m.useCallback(K=>o===ye.HORZ?K.scrollWidth:K.scrollHeight,[o]),T=m.useCallback(K=>o===ye.HORZ?K.width:K.height,[o]),L=m.useCallback(K=>o===ye.HORZ?K.x:K.y,[o]),B=m.useCallback(K=>o===ye.HORZ?K.right:K.bottom,[o]),C=m.useCallback(()=>{const K=[];if(r.current){const Z=r.current,$=Z.getBoundingClientRect(),Q=L($)-1,re=B($)+1,ae=Z.firstElementChild;let Le=0;Array.from(ae.children).forEach(ke=>{const ve=ke.getBoundingClientRect();ke.classList.contains(a)&&((L(ve)re)&&K.push(Le),Le++)})}return K},[a,r,L,B]),j=m.useCallback(()=>{if(r.current&&n.current){const K=r.current,Z=n.current,$=_(K),Q=y(K),re=v(K);if(Q>$&&Q>0){let ae=$*$/Q,Le=0;ae<20&&(Le=20-ae,ae=20);const ke=re*($-Le)/Q;o===ye.HORZ?(Z.style.width=ae+"px",Z.style.left=ke+"px"):(Z.style.height=ae+"px",Z.style.top=ke+"px"),Z.style.display="block"}else Z.style.display="none";o===ye.HORZ?Z.style.bottom="0px":Z.style.right="0px"}},[o,r,n,_,y,v]),z=m.useCallback((K=!1)=>{const Z=C(),$=Z.length>0;$!==d&&f($),K?c(Z):x.current===void 0&&(x.current=setTimeout(()=>{const Q=C();jw(Q,w.current)||c(Q),x.current=void 0},100))},[C,d]),S=m.useCallback(()=>{const K=t.getSelectedNode();if(K&&r.current){const Z=e.getBoundingClientRect(r.current),$=r.current.ownerDocument.getElementById(Tt("flexlayout-tabbutton-",K.getId()));if(!$)return;const Q=e.getBoundingClientRect($);let re=L(Z)-L(Q);re>0||T(Q)>T(Z)?(h(v(r.current)-re),b.current=!0):(re=B(Q)-B(Z),re>0&&(h(v(r.current)+re),b.current=!0))}},[t,e,r,L,B,T,v,h]),k=m.useCallback(()=>{if(r.current){const K=r.current;let Z=0;for(const Q of Array.from(K.children))Z+=_(Q);const $=Z+(u?10:0)>_(r.current);$!==u&&p($)}},[r,u,_]),I=m.useCallback(()=>{b.current||(g.current=!0),b.current=!1,j(),z()},[j,z]),D=m.useCallback((K,Z)=>{if(r.current&&n.current){const $=r.current,Q=n.current,re=_($),ae=y($),Le=_(Q),ke=$.getBoundingClientRect();let ve;if(o===ye.HORZ?ve=K-ke.x-E.current:ve=Z-ke.y-E.current,ve=Math.max(0,Math.min(ae-Le,ve)),re>0){const Dt=ve*ae/re;h(Dt)}}},[r,n,o,_,y,h]),R=m.useCallback(()=>{},[]),O=m.useCallback(()=>{},[]),M=m.useCallback(K=>{K.stopPropagation(),n.current.setPointerCapture(K.pointerId);const Z=n.current.getBoundingClientRect();o===ye.HORZ?E.current=K.clientX-Z.x:E.current=K.clientY-Z.y,zl(K.currentTarget.ownerDocument,K,D,R,O)},[n,o,D,R,O]),V=m.useCallback(K=>{if(r.current){if(t.getChildren().length===0)return;let Z;if(Math.abs(K.deltaY)>0){Z=-K.deltaY,K.deltaMode===1&&(Z*=40);const $=v(r.current)-Z,Q=y(r.current)-_(r.current);h(Math.max(0,Math.min(Q,$))),K.stopPropagation()}}},[t,r,v,y,_,h]),F=m.useCallback(K=>{K.preventDefault()},[]),ne=t.getId(),Y=t.getSelectedNode();return m.useLayoutEffect(()=>{r.current&&h(0)},[ne,r,h]),m.useLayoutEffect(()=>{g.current=!1},[Y]),m.useLayoutEffect(()=>{k(),g.current===!1&&S(),j(),z(!0),requestAnimationFrame(()=>{z()})},[k,S,j,z,o,Y]),m.useLayoutEffect(()=>{const K=r.current;if(!K)return;const Z=new K.ownerDocument.defaultView.ResizeObserver(()=>{g.current=!1,k(),S(),j(),z()});return Z.observe(K),()=>Z.disconnect()},[k,S,j,z,r]),m.useEffect(()=>{if(t instanceof Oe&&t.isEnableTabWrap())return;const K=i.current;return K?.addEventListener("wheel",F,{passive:!1}),()=>{K?.removeEventListener("wheel",F)}}),{userControlledPositionRef:g,onScroll:I,onScrollPointerDown:M,hiddenTabs:l,onMouseWheel:V,isDockStickyButtons:u,isShowHiddenTabs:d}};function jw(e,t){return e.length===t.length&&e.every((o,r)=>o===t[r])}var hv=e=>{const{tabsetNode:t,controller:o}=e,r=m.useRef(null),n=m.useRef(null),i=m.useRef(null),a=m.useRef(null),l=m.useRef(null),c=m.useRef(null),d=m.useRef(null),f=m.useRef(null),[u,p]=m.useState(!1),g=m.useRef(null),x=o.getIcons();m.useEffect(()=>()=>g.current?.(),[]);const{userControlledPositionRef:w,onScroll:E,onScrollPointerDown:b,hiddenTabs:h,onMouseWheel:v,isDockStickyButtons:_,isShowHiddenTabs:y}=pv(o,t,ye.HORZ,a,i,n,o.getClassName(U.FLEXLAYOUT__TAB_BUTTON)),T=m.useCallback(X=>{r.current=X,o.registerMeasurable(t,"tabset",X)},[o,t]),L=m.useCallback(X=>{n.current=X,o.registerMeasurable(t,"tabstrip",X)},[o,t]),B=m.useCallback(X=>{l.current=X,o.registerMeasurable(t,"tabsetcontent",X)},[o,t]),C=X=>{const fe=o.getShowOverflowMenu(),pe=h.map(ge=>({index:ge,node:t.getChildren()[ge]}));if(fe!==void 0)fe(t,X,pe,j);else{const ge=d.current;p(!0),g.current=uv(ge,t,pe,j,o,()=>{p(!1),g.current=null})}X.stopPropagation()},j=X=>{o.doAction(oe.selectTab(X.node.getId())),w.current=!1},z=X=>{o.getEditingTab()?X.preventDefault():t.isEnableDrag()?(X.stopPropagation(),o.getDragDropManager().setDragNode(X.nativeEvent,t)):X.preventDefault()},S=X=>{!oa(X)&&!t.isActive()&&o.doAction(oe.setActiveTabset(t.getId(),o.getLayoutId()))},k=X=>{oa(X)&&o.auxMouseClick(t,X)},I=X=>{o.showContextMenu(t,X)},D=X=>{X.stopPropagation()},R=X=>{t.canMaximize()&&o.maximize(t),X.stopPropagation()},O=X=>{o.doAction(oe.deleteTabset(t.getId())),X.stopPropagation()},M=X=>{o.doAction(oe.deleteTab(t.getChildren()[0].getId())),X.stopPropagation()},V=X=>{K!==void 0&&o.doAction(oe.popoutTab(K.getId(),"window")),X.stopPropagation()},F=X=>{K!==void 0&&o.doAction(oe.popoutTab(K.getId(),"float")),X.stopPropagation()},ne=X=>{t.canMaximize()&&o.maximize(t)},Y=o.getClassName,K=t.getSelectedNode(),Z=t.getPath(),$=()=>{const X=[];let fe=!1;if(t.isEnableTabStrip()){const pe=t.isEnableSingleTabStretch()&&t.getChildren().length===1;for(let ge=0;ge{let X,fe=[],pe=[];const ge={leading:X,stickyButtons:fe,buttons:pe,overflowPosition:void 0};o.customizeTabSet(t,ge),X=ge.leading,fe=ge.stickyButtons,pe=ge.buttons;const Ce=t.isEnableSingleTabStretch()&&t.getChildren().length===1;let Qe=Ce&&t.getChildren()[0].isCloseable()||t.isCloseable();Qe=Qe&&t.isEnableCloseButton(),ge.overflowPosition===void 0&&(ge.overflowPosition=fe.length);let Be;if(fe.length>0&&(!t.isEnableTabWrap()&&(_||Ce)?pe=[...fe,...pe]:Be=s.jsx("div",{ref:f,onPointerDown:D,onDragStart:xe=>{xe.preventDefault()},className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_STICKY_BUTTONS_CONTAINER),children:fe},"sticky_buttons_container")),!t.isEnableTabWrap()&&y){const xe=o.i18nName(De.Overflow_Menu_Tooltip);let ze;if(typeof x.more=="function"){const Je=h.map(Fe=>({index:Fe,node:t.getChildren()[Fe]}));ze=x.more(t,Je)}else ze=s.jsxs(s.Fragment,{children:[x.more,s.jsx("div",{className:Y(U.FLEXLAYOUT__TAB_BUTTON_OVERFLOW_COUNT),children:h.length>0?h.length:""})]});pe.splice(Math.min(ge.overflowPosition,pe.length),0,s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/overflow","aria-haspopup":"menu","aria-expanded":u,"aria-label":xe,ref:d,className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(U.FLEXLAYOUT__TAB_BUTTON_OVERFLOW),title:xe,onClick:C,onPointerDown:D,children:ze},"overflowbutton"))}if(K!==void 0&&!K.isPinned()){if(K.isEnablePopoutFloatIcon()){const xe=o.i18nName(De.Popout_Tab_Float);pe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/popout-float",title:xe,"aria-label":xe,className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_FLOAT),onClick:F,onPointerDown:D,children:typeof x.popoutFloat=="function"?x.popoutFloat(K):x.popoutFloat},"popout-float"))}if(o.isSupportsPopout()&&K.isAllowedInWindow()&&K.isEnablePopoutIcon()){const xe=o.i18nName(De.Popout_Tab);pe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/popout",title:xe,"aria-label":xe,className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_FLOAT),onClick:V,onPointerDown:D,children:typeof x.popout=="function"?x.popout(K):x.popout},"popout"))}}if(t.canMaximize()){const xe=o.i18nName(De.Restore),ze=o.i18nName(De.Maximize);pe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/max",title:t.isMaximized()?xe:ze,"aria-label":t.isMaximized()?xe:ze,"aria-pressed":t.isMaximized(),className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_+(t.isMaximized()?"max":"min")),onClick:R,onPointerDown:D,children:t.isMaximized()?typeof x.restore=="function"?x.restore(t):x.restore:typeof x.maximize=="function"?x.maximize(t):x.maximize},"max"))}if(!t.isMaximized()&&Qe){const xe=Ce?o.i18nName(De.Close_Tab):o.i18nName(De.Close_Tabset);pe.push(s.jsx("button",{tabIndex:0,"data-layout-path":Z+"/button/close",title:xe,"aria-label":xe,className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON)+" "+Y(U.FLEXLAYOUT__TAB_TOOLBAR_BUTTON_CLOSE),onClick:Ce?M:O,onPointerDown:D,children:typeof x.closeTabset=="function"?x.closeTabset(t):x.closeTabset},"close"))}if(t.isActive()&&t.isEnableActiveIcon()){const xe=o.i18nName(De.Active_Tabset);pe.push(s.jsx("div",{"data-layout-path":Z+"/button/active",title:xe,"aria-hidden":"true",className:Y(U.FLEXLAYOUT__TAB_TOOLBAR_ICON),children:typeof x.activeTabset=="function"?x.activeTabset(t):x.activeTabset},"active"))}const _e=s.jsx("div",{ref:c,className:Y(U.FLEXLAYOUT__TAB_TOOLBAR),onPointerDown:D,onDragStart:xe=>{xe.preventDefault()},children:pe},"buttonbar");return{leading:X,buttonbar:_e,stickyBar:Be}},re=(X,fe,pe,ge)=>{let Ce;const Qe=o.getKeyMap(),Be=[kr(Qe.focusNextTabset),kr(Qe.focusPreviousTabset)].filter(Boolean).join(" ")||void 0,_e=o.getEditingTab()?.getParent()===t,xe=_e?void 0:"tablist";let ze=Y(U.FLEXLAYOUT__TABSET_TABBAR_OUTER);t.getClassNameTabStrip()!==void 0&&(ze+=" "+t.getClassNameTabStrip()),ze+=" "+U.FLEXLAYOUT__TABSET_TABBAR_OUTER_+t.getTabLocation(),t.isActive()&&(ze+=" "+Y(U.FLEXLAYOUT__TABSET_SELECTED)),t.isMaximized()&&(ze+=" "+Y(U.FLEXLAYOUT__TABSET_MAXIMIZED));const Je=t.isEnableSingleTabStretch()&&t.getChildren().length===1;if(Je){const Po=t.getChildren()[0];Po.getTabSetClassName()!==void 0&&(ze+=" "+Po.getTabSetClassName())}let Fe;if(fe&&(Fe=s.jsx("div",{className:Y(U.FLEXLAYOUT__TABSET_LEADING),children:fe})),t.isEnableTabWrap())t.isEnableTabStrip()&&(Ce=s.jsxs("div",{className:ze,style:{flexWrap:"wrap",gap:"1px",marginTop:"2px"},ref:L,"data-layout-path":Z+"/tabstrip",onPointerDown:S,onDoubleClick:ne,onContextMenu:I,onClick:k,onAuxClick:k,draggable:!0,onDragStart:z,children:[Fe,s.jsx("div",{role:xe,"aria-orientation":_e?void 0:"horizontal","aria-label":_e?void 0:t.getName(),"aria-keyshortcuts":_e?void 0:Be,style:{display:"contents"},children:X}),ge,s.jsx("div",{style:{flexGrow:1,display:"flex",justifyContent:"flex-end"},children:pe})]}));else if(t.isEnableTabStrip()){let Po;t.isEnableTabScrollbar()&&(Po=s.jsx("div",{ref:i,"aria-hidden":"true",className:Y(U.FLEXLAYOUT__MINI_SCROLLBAR),onPointerDown:b})),Ce=s.jsxs("div",{className:ze,ref:L,"data-layout-path":Z+"/tabstrip",onPointerDown:S,onDoubleClick:ne,onContextMenu:I,onClick:k,onAuxClick:k,draggable:!0,onWheel:v,onDragStart:z,children:[Fe,s.jsxs("div",{className:Y(U.FLEXLAYOUT__MINI_SCROLLBAR_CONTAINER),children:[s.jsxs("div",{ref:a,className:Y(U.FLEXLAYOUT__TABSET_TABBAR_INNER)+" "+Y(U.FLEXLAYOUT__TABSET_TABBAR_INNER_+t.getTabLocation()),style:{overflowX:"auto",overflowY:"hidden"},onScroll:E,children:[s.jsx("div",{style:{width:Je?"100%":"none"},role:xe,"aria-orientation":_e?void 0:"horizontal","aria-label":_e?void 0:t.getName(),"aria-keyshortcuts":_e?void 0:Be,className:Y(U.FLEXLAYOUT__TABSET_TABBAR_INNER_TAB_CONTAINER)+" "+Y(U.FLEXLAYOUT__TABSET_TABBAR_INNER_TAB_CONTAINER_+t.getTabLocation()),children:X}),ge]}),Po]}),pe]})}return Ce},ae=X=>{let fe;if(t.getChildren().length===0){const ge=o.getTabSetPlaceHolderCallback();ge&&(fe=ge(t))}let pe=s.jsx("div",{ref:B,className:Y(U.FLEXLAYOUT__TABSET_CONTENT),children:fe});return t.getTabLocation()==="top"?pe=s.jsxs(s.Fragment,{children:[X,pe]}):pe=s.jsxs(s.Fragment,{children:[pe,X]}),pe},Le=$(),{leading:ke,buttonbar:ve,stickyBar:Dt}=Q(),J=ae(re(Le,ke,ve,Dt)),le={flexGrow:Math.max(1,t.getWeight()*1e3),minWidth:t.getMinWidth(),minHeight:t.getMinHeight(),maxWidth:t.getMaxWidth(),maxHeight:t.getMaxHeight()};t.getModel().getMaximizedTabset(o.getLayoutId())!==void 0&&!t.isMaximized()&&(le.display="none");const ce=s.jsx("div",{ref:T,className:Y(U.FLEXLAYOUT__TABSET_CONTAINER),style:le,children:s.jsx("div",{className:Y(U.FLEXLAYOUT__TABSET),"data-layout-path":Z,children:J})});return t.isMaximized()&&o.getMainElement()?Io.createPortal(s.jsx("div",{style:{position:"absolute",display:"flex",top:0,left:0,bottom:0,right:0},children:ce}),o.getMainElement()):ce};hv.displayName="TabSet";var Ai=e=>{const{controller:t,node:o,index:r,horizontal:n}=e,i=m.useRef(null),a=m.useRef(null),l=m.useRef([]),c=m.useRef(void 0),d=m.useRef(void 0),f=m.useRef(0),u=m.useRef(0),p=m.useRef({initialSizes:[],sum:0,startPosition:0}),g=m.useCallback(S=>{S.preventDefault(),S.stopImmediatePropagation()},[]);m.useEffect(()=>{const S=i.current,k=a.current;return S?.addEventListener("touchstart",g,{passive:!1}),k?.addEventListener("touchstart",g,{passive:!1}),()=>{S?.removeEventListener("touchstart",g),k?.removeEventListener("touchstart",g)}},[g]);const x=S=>{S.stopPropagation(),o instanceof He&&(p.current=o.getSplitterInitials(r)),rl(!1,t.getCurrentDocument()),zl(S.currentTarget.ownerDocument,S,b,h,E),l.current=o instanceof qe?o.getSplitterBounds(!0):o.getSplitterBounds(r);const k=t.getRootDiv();c.current=t.getCurrentDocument().createElement("div"),c.current.style.flexDirection=n?"row":"column",c.current.className=t.getClassName(U.FLEXLAYOUT__SPLITTER_DRAG)+(o instanceof qe?" "+t.getClassName(U.FLEXLAYOUT__SPLITTER_BORDER):""),c.current.style.cursor=o.getOrientation()===ye.VERT?"ns-resize":"ew-resize",d.current=t.getCurrentDocument().createElement("div"),d.current.className=y(U.FLEXLAYOUT__SPLITTER_HANDLE)+" "+y(n?U.FLEXLAYOUT__SPLITTER_HANDLE_HORZ:U.FLEXLAYOUT__SPLITTER_HANDLE_VERT),c.current.appendChild(d.current);const I=i.current.getBoundingClientRect(),D=new he(I.x-t.getDomRect().x,I.y-t.getDomRect().y,I.width,I.height);f.current=S.clientX-I.x,u.current=S.clientY-I.y,D.positionElement(c.current),k&&k.appendChild(c.current)},w=S=>{if(ta(S))return;let k=0;if(n?(S.key==="ArrowLeft"&&(k=-10),S.key==="ArrowRight"&&(k=10)):(S.key==="ArrowUp"&&(k=-10),S.key==="ArrowDown"&&(k=10)),k!==0)if(S.preventDefault(),o instanceof qe){const I=o.getLocation(),D=I===ee.BOTTOM||I===ee.RIGHT?-k:k,R=Math.max(o.getMinSize(),Math.min(o.getMaxSize(),o.getSize()+D));t.doAction(oe.adjustBorderSplit(o.getId(),R))}else{const I=o.getSplitterInitials(r);if(I.sum<=0)return;const D=o.getSplitterBounds(r),R=Math.max(D[0],Math.min(D[1],I.startPosition+k)),O=o.calculateSplit(r,R,I.initialSizes,I.sum,I.startPosition);t.doAction(oe.adjustWeights(o.getId(),O))}},E=()=>{const S=t.getRootDiv();S&&c.current&&S.removeChild(c.current),c.current=void 0,rl(!0,t.getCurrentDocument())},b=(S,k)=>{if(c.current){const I=t.getDomRect();if(!I)return;o.getOrientation()===ye.VERT?c.current.style.top=_(k-I.y-u.current)+"px":c.current.style.left=_(S-I.x-f.current)+"px",t.isRealtimeResize()&&v(!0)}},h=()=>{if(c.current){v(!1);const S=t.getRootDiv();S&&c.current&&S.removeChild(c.current),c.current=void 0}rl(!0,t.getCurrentDocument())},v=S=>{(()=>{if(c.current){let I;if(o.getOrientation()===ye.VERT?I=c.current.offsetTop:I=c.current.offsetLeft,o instanceof qe){const D=o.calculateSplit(o,I);t.doAction(oe.adjustBorderSplit(o.getId(),D).setAdjusting(S))}else{const D=p.current;if(D.sum<=0)return;const R=o.calculateSplit(r,I,D.initialSizes,D.sum,D.startPosition);t.doAction(oe.adjustWeights(o.getId(),R).setAdjusting(S))}}})()},_=S=>{const k=l.current;let I=S;return Sk[1]&&(I=k[1]),I},y=t.getClassName,T={cursor:n?"ew-resize":"ns-resize",flexDirection:n?"column":"row"};let L=y(U.FLEXLAYOUT__SPLITTER)+" "+y(U.FLEXLAYOUT__SPLITTER_+o.getOrientation().getName());o instanceof qe?L+=" "+y(U.FLEXLAYOUT__SPLITTER_BORDER):o.getModel().getMaximizedTabset(t.getLayoutId())!==void 0&&(T.display="none"),Gb()||(T["--splitter-active-size"]="30px");let B,C,j,z;if(o instanceof He){const S=o.getRect(),k=o.getChildren()[r-1],I=n?S.width:S.height;if(k&&I>0){const D=k.getRect();B=Math.round((n?D.getRight()-S.x:D.getBottom()-S.y)/I*100),C=0,j=100,z=B+"%"}}else B=Math.round(o.getSize()),C=Math.round(o.getMinSize()),j=Math.round(o.getMaxSize()),z=B+"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":B,"aria-valuemin":C,"aria-valuemax":j,"aria-valuetext":z,tabIndex:0,onKeyDown:w,"data-layout-path":o.getPath()+"/s"+(r-1),onPointerDown:x,children:s.jsx("div",{className:y(U.FLEXLAYOUT__SPLITTER_HANDLE)+" "+y(n?U.FLEXLAYOUT__SPLITTER_HANDLE_HORZ:U.FLEXLAYOUT__SPLITTER_HANDLE_VERT)})})};Ai.displayName="Splitter";var Pu=e=>{const{controller:t,rowNode:o}=e,r=m.useRef(null),n=o.getOrientation()===ye.HORZ,i=m.useCallback(d=>{r.current=d,t.registerMeasurable(o,"row",d)},[t,o]),a=[];let l=0;for(const d of o.getChildren())l>0&&a.push(s.jsx(Ai,{controller:t,node:o,index:l,horizontal:n},"splitter"+l)),d instanceof He?a.push(s.jsx(Pu,{controller:t,rowNode:d},d.getId())):d instanceof Oe&&a.push(s.jsx(hv,{controller:t,tabsetNode:d},d.getId())),l++;const c={flexGrow:Math.max(1,o.getWeight()*1e3),minWidth:o.getMinWidth(),minHeight:o.getMinHeight(),maxWidth:o.getMaxWidth(),maxHeight:o.getMaxHeight()};return n?c.flexDirection="row":c.flexDirection="column",s.jsx("div",{ref:i,className:t.getClassName(U.FLEXLAYOUT__ROW),style:c,children:a})};Pu.displayName="Row";var gv=e=>{const{controller:t,selected:o,tabNode:r}=e,n=m.useRef(null),i=m.useRef(!0),a=m.useCallback(()=>{const g=r.getParent();g instanceof Oe&&(g.isActive()||t.doAction(oe.setActiveTabset(g.getId(),t.getLayoutId())))},[r,t]),l=r.getParent(),c=t.getKeyMap().focusTabToggle,d=g=>{if(Ko(g,c)){const x=g.currentTarget.ownerDocument.getElementById(Tt("flexlayout-tabbutton-",r.getId()));x&&(x.focus(),g.preventDefault(),g.stopPropagation())}};m.useLayoutEffect(()=>{const g=r.getMoveableElement(),x=n.current.ownerDocument,w=g.ownerDocument!==x;w&&x.adoptNode(g),g.parentElement!==n.current&&n.current.appendChild(g),w&&t.redrawLayoutAndTabContent();const E=()=>{r.saveScrollPosition()};g.addEventListener("scroll",E);const b=n.current;return b&&b.addEventListener("pointerdown",a),()=>{b&&b.removeEventListener("pointerdown",a),g.removeEventListener("scroll",E),g.isConnected||(t.getModel().getNodeById(r.getId())&&(r.isEnableWindowReMount()||t.getMainController()?.getMoveablesHome()?.appendChild(g)),r.setVisible(!1))}},[r,t,a]),m.useEffect(()=>{r.isSelected()&&i.current&&(r.restoreScrollPosition(),i.current=!1)}),m.useLayoutEffect(()=>(t.registerTabPanel(r,n.current),()=>{t.registerTabPanel(r,null)}),[t,r]);const f=t.getClassName;let u=null;if(o&&document.hidden&&r.isEnablePopoutOverlay()){const g={};l.getContentRect().styleWithPosition(g);let x=f(U.FLEXLAYOUT__TAB_OVERLAY);l instanceof qe&&l.isOverlay()&&(x+=" "+f(U.FLEXLAYOUT__TAB_OVERLAY_RAISED)),u=s.jsx("div",{style:g,className:x})}let p=f(U.FLEXLAYOUT__TAB);return l instanceof qe&&(p+=" "+f(U.FLEXLAYOUT__TAB_BORDER),p+=" "+f(U.FLEXLAYOUT__TAB_BORDER_+l.getLocation().getName()),l.isOverlay()&&(p+=" "+f(U.FLEXLAYOUT__TAB_BORDER_OVERLAY))),r.getContentClassName()!==void 0&&(p+=" "+r.getContentClassName()),s.jsxs(s.Fragment,{children:[u,s.jsx("div",{ref:n,id:Tt("flexlayout-tab-",r.getId()),role:"tabpanel","aria-labelledby":Tt("flexlayout-tabbutton-",r.getId()),"aria-keyshortcuts":kr(c),tabIndex:-1,onKeyDown:c?d:void 0,className:p,"data-layout-path":r.getPath()})]})};gv.displayName="Tab";var Iw=class extends m.Component{constructor(t){super(t);A(this,"retry",()=>{this.setState({hasError:!1})});this.state={hasError:!1}}static getDerivedStateFromError(t){return{hasError:!0}}componentDidCatch(t,o){console.debug(t),console.debug(o)}render(){return this.state.hasError?s.jsx("div",{className:U.FLEXLAYOUT__ERROR_BOUNDARY_CONTAINER,children:s.jsx("div",{role:"alert",className:U.FLEXLAYOUT__ERROR_BOUNDARY_CONTENT,children:s.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center"},children:[this.props.message,s.jsx("p",{children:s.jsx("button",{tabIndex:0,onClick:this.retry,children:this.props.retryText})})]})})}):this.props.children}},bv=m.memo(({controller:e,tabNode:t})=>{bv.displayName="TabContentRenderer";let o;if(t.getComponent())o=e.getFactory()(t);else if(t.getSubLayoutId()){const r=t.getModel().getLayouts().get(t.getSubLayoutId());o=s.jsxs("div",{className:e.getClassName(U.FLEXLAYOUT__TAB_LAYOUT_CONTAINER),children:[s.jsx(na,{...e.getProps(),layoutId:t.getSubLayoutId(),path:t.getPath()+r.getPath(),mainLayoutController:e.getMainController()}),";"]})}return s.jsx(Iw,{message:e.i18nName(De.Error_rendering_component),retryText:e.i18nName(De.Error_rendering_component_retry),children:o})},Pw);function Pw(e,t){return!(t.visible&&(e.windowId!==t.windowId||e.fullRedrawRevision!==t.fullRedrawRevision||e.parentRedrawRevision!==t.parentRedrawRevision||e.tabNode!==t.tabNode||t.tabNode.getSubLayoutId()!==void 0))}var Ee,Bw=(Ee=class{constructor(t){A(this,"_controller");A(this,"_dragEnterCount",0);A(this,"_dragging",!1);A(this,"_active",!1);A(this,"_dropInfo");A(this,"_outlineDiv");A(this,"_mainController");A(this,"setDragNode",(t,o)=>{if(Ee.dragState=new Fa(this._controller.getMainController(),"internal",o,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(),o instanceof Oe){let r=!1,n=this._controller.i18nName(De.Move_Tabset);if(o.getChildren().length>0&&(n=this._controller.i18nName(De.Move_Tabs).replace("?",String(o.getChildren().length))),this._controller.getProps().onRenderDragRect){const i=this._controller.getProps().onRenderDragRect(n,o,void 0);i&&(this.setDragComponent(t,i,10,10),r=!0)}r||this.setDragComponent(t,n,10,10)}else{const r=t.target;if(r&&typeof r.getBoundingClientRect=="function"){const n=r.getBoundingClientRect(),i=t.clientX-n.left,a=t.clientY-n.top,l=o?.getParent(),c=l instanceof qe&&l.getOrientation()===ye.HORZ,d=c?10:i,f=c?10:a;let u=!1;if(this._controller.getProps().onRenderDragRect){const p=s.jsx(ra,{controller:this._controller,tabNode:o},o.getId()),g=this._controller.getProps().onRenderDragRect(p,o,void 0);g&&(this.setDragComponent(t,g,d,f),u=!0)}u||(Cw()?this.setDragComponent(t,s.jsx(ra,{tabNode:o,controller:this._controller}),d,f):t.dataTransfer.setDragImage(o.getTabStamp(),d,f))}}});A(this,"onDragEnterRaw",t=>{this._dragEnterCount++,this.updateActive(t)});A(this,"onDragLeaveRaw",t=>{this._dragEnterCount--,this.updateActive(t)});A(this,"onDragEnter",t=>{if(!Ee.dragState&&this._controller.getProps().onExternalDrag){const o=this._controller.getProps().onExternalDrag(t);if(o){const r=Se.fromJson(o.json,this._controller.getModel(),!1);Ee.dragState=new Fa(this._controller.getMainController(),"external",r,o.json,o.onDrop)}}if(this._mainController===Ee.dragState?.mainLayoutController&&!(Ee.dragState?.dockFloatToMain&&!this.isDockTarget())&&Ee.dragState){t.preventDefault(),this._dropInfo=void 0;const o=this._controller.getRootDiv(),r=this._controller.getCurrentDocument();this._outlineDiv=r.createElement("div"),this._outlineDiv.className=this._controller.getClassName(U.FLEXLAYOUT__OUTLINE_RECT),this._outlineDiv.style.visibility="hidden";const n=this._controller.getTabDragSpeed();this._outlineDiv.style.transition=`top ${n}s, left ${n}s, width ${n}s, height ${n}s`,o.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)}});A(this,"onDragOver",t=>{if(this._mainController===Ee.dragState?.mainLayoutController&&!(Ee.dragState?.dockFloatToMain&&!this.isDockTarget())&&this._active){if(Ee.dragState?.dockFloatToMain){const i=t.target;if(i&&Ee.dragState.sourceFloatElement?.contains(i)){this._dropInfo=void 0;return}}const o=this._controller.getRootDiv()?.getBoundingClientRect(),r={x:t.clientX-(o?.left??0),y:t.clientY-(o?.top??0)};Ee.dragState.dockFloatToMain||this._controller.checkForBorderToShow(r.x,r.y);const n=this._controller.getModel().findDropTargetNode(this._controller.getLayoutId(),Ee.dragState.dragNode,r.x,r.y,this.isExcludeCenter());if(n){if(Ee.dragState.dockFloatToMain&&(n.location===ee.CENTER||!(n.node instanceof Oe)&&!(n.node instanceof He)))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")}}});A(this,"onDragLeave",t=>{if(this._mainController===Ee.dragState?.mainLayoutController&&(this.clearDragLocalVisuals(),this._controller.isMainLayout())){let o=!1;for(const[,r]of this._controller.getModel().getLayouts())if(r.getController()&&r.getController().getDragDropManager().isDragging()){o=!0;break}o===!1&&this.clearDragMain()}});A(this,"onDrop",t=>{if(this._mainController===Ee.dragState?.mainLayoutController&&!(Ee.dragState?.dockFloatToMain&&!this.isDockTarget())){if(this._active){t.preventDefault();const o=Ee.dragState;if(this._dropInfo&&o.dockFloatToMain){const r=t.target;r&&o.sourceFloatElement?.contains(r)&&(this._dropInfo=void 0)}if(this._dropInfo)if(o.dragJson!==void 0){const r=this._controller.doAction(oe.addTab(o.dragJson,this._dropInfo.node.getId(),this._dropInfo.location,this._dropInfo.index));o.fnNewNodeDropped!==void 0&&o.fnNewNodeDropped(r,t)}else o.dragNode!==void 0&&(o.dockFloatToMain?this._controller.doAction(oe.dockFloatToLayout(o.floatLayoutId,this._dropInfo.node.getId(),this._dropInfo.location,this._dropInfo.index)):this._controller.doAction(oe.moveNode(o.dragNode.getId(),this._dropInfo.node.getId(),this._dropInfo.location,this._dropInfo.index)));this.clearDragMain(),Ee.dragState=void 0}this._dragEnterCount=0}});this._controller=t,this._mainController=t.getMainController()}isDockTarget(){return this._controller.getLayout().getLayoutId()!==Ee.dragState?.floatLayoutId}isExcludeCenter(){if(Ee.dragState?.dockFloatToMain)return!0;const t=Ee.dragState?.dragNode;return t instanceof Oe?!t.isEnableClose()||t.getPinnedRunLength()>0:!1}addTabWithDragAndDrop(t,o,r){const n=Se.fromJson(o,this._controller.getModel(),!1);Ee.dragState=new Fa(this._controller.getMainController(),"add",n,o,r)}onDragEnded(){this.clearDragMain(),Ee.dragState=void 0}moveTabWithDragAndDrop(t,o){this.setDragNode(t,o)}startDockLayoutDrag(t,o,r){const n=o.getRootRow();Ee.dragState=new Fa(this._controller.getMainController(),"float",n,void 0,void 0,!0,o.getLayoutId(),r),t.dataTransfer.setData("text/plain","--flexlayout--"),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.dropEffect="move",this._dragEnterCount=0,this._controller.getModel().sortLayouts();let i=0;o.getRootRow()?.forEachNode(c=>{c instanceof Se&&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,o,r,n){const i=s.jsx("div",{style:{position:"unset"},className:this._controller.getClassName(U.FLEXLAYOUT__LAYOUT)+" "+this._controller.getClassName(U.FLEXLAYOUT__DRAG_RECT),children:o}),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=Jn(l);Io.flushSync(()=>c.render(i)),t.dataTransfer.setDragImage(l,r,n),setTimeout(()=>{c.unmount(),a.body.removeChild(l)},0)}updateActive(t){const o=Array.from(this._controller.getModel().getLayouts().values()),r=Ee.dragState?.dockFloatToMain===!0;let n,i;for(let a=o.length-1;a>=0;a--){const l=o[a];if(r&&l.getLayoutId()===Ee.dragState?.floatLayoutId)continue;const c=l.getController()?.getDragDropManager();c&&c.getDragEnterCount()>0&&(l.getType()==="tab"?i=l:!n&&!i&&(n=l))}if(i){const a=qb(i);(n===a||!n)&&(n=i)}n&&n.getController().getDragDropManager().setActive(!0,t);for(const a of o)a!==n&&a.getController()?.getDragDropManager().setActive(!1,t)}setActive(t,o){this._active!==t&&(this._active=t,this._active?this.onDragEnter(o):this.onDragLeave(o))}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}},A(Ee,"dragState"),Ee),Fa=class{constructor(e,t,o,r,n,i=!1,a=void 0,l=void 0){A(this,"mainLayoutController");A(this,"dragSource");A(this,"dragNode");A(this,"dragJson");A(this,"fnNewNodeDropped");A(this,"dockFloatToMain");A(this,"floatLayoutId");A(this,"sourceFloatElement");this.mainLayoutController=e,this.dragSource=t,this.dragNode=o,this.dragJson=r,this.fnNewNodeDropped=n,this.dockFloatToMain=i,this.floatLayoutId=a,this.sourceFloatElement=l}},vv=({controller:e})=>{const t=[],o=e.getIcons().edgeArrow;if(e.getState().showEdges&&e.getModel().isEnableEdgeDockIndicators()){const r=e.getModel().getRootRow(e.getLayoutId()).getRect(),n=100,i=10,a=100/2,l=e.getClassName(U.FLEXLAYOUT__EDGE_RECT),c=50;t.push(s.jsx("div",{"aria-hidden":"true",style:{top:0,left:r.width/2-a,width:n,height:i,borderBottomLeftRadius:c,borderBottomRightRadius:c},className:l+" "+e.getClassName(U.FLEXLAYOUT__EDGE_RECT_TOP),children:s.jsx("div",{style:{transform:"rotate(180deg)"},children:o})},"North")),t.push(s.jsx("div",{"aria-hidden":"true",style:{top:r.height/2-a,left:0,width:i,height:n,borderTopRightRadius:c,borderBottomRightRadius:c},className:l+" "+e.getClassName(U.FLEXLAYOUT__EDGE_RECT_LEFT),children:s.jsx("div",{style:{transform:"rotate(90deg)"},children:o})},"West")),t.push(s.jsx("div",{"aria-hidden":"true",style:{top:r.height-i,left:r.width/2-a,width:n,height:i,borderTopLeftRadius:c,borderTopRightRadius:c},className:l+" "+e.getClassName(U.FLEXLAYOUT__EDGE_RECT_BOTTOM),children:s.jsx("div",{children:o})},"South")),t.push(s.jsx("div",{"aria-hidden":"true",style:{top:r.height/2-a,left:r.width-i,width:i,height:n,borderTopLeftRadius:c,borderBottomLeftRadius:c},className:l+" "+e.getClassName(U.FLEXLAYOUT__EDGE_RECT_RIGHT),children:s.jsx("div",{style:{transform:"rotate(-90deg)"},children:o})},"East"))}return s.jsx(s.Fragment,{children:t})};vv.displayName="EdgeIndicators";var zw=2e3,Fw=750,mv=e=>{const{title:t,controller:o,layout:r,url:n,onCloseLayout:i,children:a}=e,l=m.useRef(null),[c,d]=m.useState(void 0),[f,u]=m.useState(void 0),[p,g]=m.useState(void 0),x=m.useMemo(()=>new Map,[]),w=m.useRef(!1),E=m.useRef(null),b=m.useRef(null),h=m.useRef(new Map);if(m.useLayoutEffect(()=>{!w.current&&c&&(w.current=!0,o.redrawLayout(),Hw(x))},[c,o,x]),m.useLayoutEffect(()=>{const v=()=>{if(l.current){const _=l.current;l.current=null,_.close()}};if(!l.current){const _=r.getLayoutId(),y=r.getRect();l.current=window.open(n,_,`left=${y.x},top=${y.y},width=${y.width},height=${y.height}`),l.current?(window.addEventListener("beforeunload",v),l.current.addEventListener("load",()=>{if(l.current){l.current.focus(),l.current.resizeTo(y.width,y.height),l.current.moveTo(y.x,y.y);const T=l.current;T.resizeBy(y.width-T.outerWidth,y.height-T.outerHeight),T.moveBy(y.x-T.screenLeft,y.y-T.screenTop);const L=l.current.document;u(l.current),g(L),L.title=t,document.documentElement.lang&&(L.documentElement.lang=document.documentElement.lang),document.documentElement.dir&&(L.documentElement.dir=document.documentElement.dir);const B=L.createElement("div");B.className=U.FLEXLAYOUT__FLOATING_WINDOW_CONTENT,L.body.appendChild(B),o.getProps().onPopoutOpen?.(r,l.current,L),Vw(L,x).then(()=>{d(B)}),E.current=new MutationObserver(C=>Uw(C,L,x)),E.current.observe(document.head,{childList:!0,subtree:!0,characterData:!0}),b.current=L.defaultView?.setInterval(()=>{$w(x,h.current)},Fw)??null,l.current.addEventListener("beforeunload",()=>{l.current&&(o.getProps().onPopoutClose?.(r,l.current,L),i(r),l.current=null,E.current?.disconnect(),E.current=null,b.current!=null&&(L.defaultView?.clearInterval(b.current),b.current=null))})}})):(console.warn(`Unable to open window ${n}`),i(r))}return()=>{window.removeEventListener("beforeunload",v),l.current?.close(),l.current=null,E.current?.disconnect(),E.current=null,b.current!=null&&(b.current=null)}},[]),c!==void 0){const v=o.getProps().renderPopoutContent;let _=a;return v&&p&&(_=v({children:a,layout:r,popoutWindow:f??window,popoutDocument:p})),Io.createPortal(_,c)}else return null};function Uw(e,t,o){for(const r of e)if(r.type==="childList"&&r.target===document.head){for(const n of r.addedNodes)(n instanceof HTMLLinkElement||n instanceof HTMLStyleElement)&&xv(t,n,o);for(const n of r.removedNodes)if(n instanceof HTMLLinkElement||n instanceof HTMLStyleElement){const i=o.get(n);i&&(i.remove(),o.delete(n))}}else{const n=Ww(r.target),i=n&&o.get(n);n&&i&&ws(n,i)}}function Ww(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 Vw(e,t){const o=[],r=document.querySelectorAll('style, link[rel="stylesheet"]');for(const n of r)xv(e,n,t,o);return Promise.all(o)}function xv(e,t,o,r){if(t instanceof HTMLLinkElement){const n=t.cloneNode(!0);e.head.appendChild(n),o.set(t,n),r&&r.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),zw)}))}else if(t instanceof HTMLStyleElement)try{const n=t.cloneNode(!0);e.head.appendChild(n),ws(t,n),o.set(t,n)}catch{}}function ws(e,t){const o=e.textContent??"";if(o.trim()!=="")t.textContent=o;else try{t.textContent="";const r=e.sheet?.cssRules;if(r)for(const n of r)t.sheet.insertRule(n.cssText,t.sheet.cssRules.length)}catch{}}function Hw(e){for(const[t,o]of e)t instanceof HTMLStyleElement&&ws(t,o)}function $w(e,t){for(const[o,r]of e){if(!(o instanceof HTMLStyleElement)||(o.textContent??"").trim()!=="")continue;let n=0;try{n=o.sheet?.cssRules.length??0}catch{}n!==t.get(o)&&(t.set(o,n),ws(o,r))}}mv.displayName="PopoutWindow";var ir=10,So=-4,to=8,fn=12,Np=12,Yw=150,Xw=25,Gw=e=>{const{controller:t,layout:o,children:r}=e,[n,i]=m.useState(o.getRect()),a=m.useRef(he.empty()),l=t.getClassName,c=m.useRef(null),d=m.useRef(null),f=m.useRef(null),u=m.useRef(null),p=m.useRef(null),g=m.useRef(null),x=m.useRef(null),w=m.useRef(null),E=m.useRef(null),b=m.useRef(null),h=m.useRef(!1),v=m.useRef(void 0);m.useEffect(()=>{a.current=n},[n]),m.useEffect(()=>{requestAnimationFrame(()=>{i(o.getRect())})},[o]);const _=m.useCallback(D=>{const R=t.getCurrentWindow()??window,O=he.fromDomRect(t.getRootDiv().getBoundingClientRect());let M;if(t.getProps().constrainFloatPanels)M=new he(0,0,O.width,O.height);else{const F=Nw(R),ne=Math.max(F.fullWidth,R.innerWidth),Y=Math.max(F.fullHeight,R.innerHeight);M=new he(-O.x,-O.y,ne,Y)}const V=D.clone();return V.clamp(M),V},[t]),y=m.useCallback(D=>{D.preventDefault(),D.stopImmediatePropagation()},[]);m.useEffect(()=>{const D=[d,f,u,p,g,x,w,E,b].map(R=>R.current).filter(R=>R!==null);return D.forEach(R=>R.addEventListener("touchstart",y,{passive:!1})),()=>{D.forEach(R=>R.removeEventListener("touchstart",y))}},[y]);const T=m.useRef(!1);m.useLayoutEffect(()=>{if(!T.current){T.current=!0;const D=_(n);D.equals(n)||(i(D),o.setRect(D))}},[_,n,o]),m.useEffect(()=>{const D=()=>{const V=[...t.getModel().getLayouts()],F=V[V.length-1][1];o!==F&&(h.current=!0)},R=t.getCurrentWindow()??window,O=()=>{h.current&&(v.current=R.setTimeout(()=>{v.current=void 0,t.moveWindowToFront(o.getLayoutId())},10),h.current=!1)},M=c.current;return M&&(M.addEventListener("pointerdown",D,{capture:!0}),M.addEventListener("pointerup",O)),()=>{M&&(M.removeEventListener("pointerdown",D,{capture:!0}),M.removeEventListener("pointerup",O)),v.current!==void 0&&(R.clearTimeout(v.current),v.current=void 0)}},[t,o]);const L=D=>{D.stopPropagation();const R={x:D.clientX-n.x,y:D.clientY-n.y};t.showOverlayOnAllWindows(!0),zl(t.getCurrentDocument()??document,D,(O,M)=>{h.current&&(t.moveWindowToFront(o.getLayoutId()),h.current=!1);const V=new he(O-R.x,M-R.y,n.width,n.height),F=_(V);i(F),t.doAction(oe.moveFloat(o.getLayoutId(),F).setAdjusting(!0))},()=>{t.doAction(oe.moveFloat(o.getLayoutId(),a.current).setAdjusting(!1)),t.redrawLayout(),t.showOverlayOnAllWindows(!1)},()=>{t.doAction(oe.moveFloat(o.getLayoutId(),a.current).setAdjusting(!1)),t.redrawLayout(),t.showOverlayOnAllWindows(!1)})},B=t.getIcons(),C=t.isSupportsPopout()&&o.getRootRow()?.isAllowedInWindow()===!0,j=D=>{D.stopPropagation(),o.getRootRow()?.getChildren().length?t.getDragDropManager().startDockLayoutDrag(D.nativeEvent,o,c.current??void 0):D.preventDefault()},z=D=>{t.getDragDropManager().onDragEnded()},S=D=>{D.stopPropagation()},k=D=>{D.stopPropagation();const R=t.getScreenRect(o.getRect());t.doAction(oe.popoutFloat(o.getLayoutId(),R.toJson()))},I=(D,R)=>{const O=n,M={x:D.clientX,y:D.clientY};t.showOverlayOnAllWindows(!0),zl(t.getCurrentDocument()??document,D,(V,F)=>{const ne=V-M.x,Y=F-M.y;let K=O.x,Z=O.y,$=O.width,Q=O.height;R.includes("n")&&(Z+=Y,Q-=Y),R.includes("s")&&(Q+=Y),R.includes("w")&&(K+=ne,$-=ne),R.includes("e")&&($+=ne);const re=new he(K,Z,Math.max(Yw,$),Math.max(Xw,Q)),ae=_(re);i(ae),t.doAction(oe.moveFloat(o.getLayoutId(),ae).setAdjusting(!0))},()=>{t.doAction(oe.moveFloat(o.getLayoutId(),a.current).setAdjusting(!1)),t.redrawLayout(),t.showOverlayOnAllWindows(!1)},()=>{t.doAction(oe.moveFloat(o.getLayoutId(),a.current).setAdjusting(!1)),t.redrawLayout(),t.showOverlayOnAllWindows(!1)}),D.stopPropagation()};return s.jsxs("div",{ref:c,className:l(U.FLEXLAYOUT__FLOAT_WINDOW),style:{left:n.x,top:n.y,width:n.width,height:n.height,position:"absolute"},children:[s.jsxs("div",{ref:d,className:l(U.FLEXLAYOUT__FLOAT_WINDOW_HEADER),onPointerDown:L,children:[s.jsx("div",{"data-layout-path":"/floatwindow/drag-handle",className:l(U.FLEXLAYOUT__FLOAT_WINDOW_DRAG_HANDLE),draggable:!0,title:t.i18nName(De.Dock_Float_To_Layout),"aria-label":t.i18nName(De.Dock_Float_To_Layout),onDragStart:j,onDragEnd:z,onPointerDown:S,children:B.dragToDock}),s.jsx("div",{style:{flexGrow:1,display:"flex",justifyContent:"center",alignItems:"center",minWidth:0,overflow:"hidden"},children:o.getName()!==void 0?s.jsx("span",{"data-layout-path":"/floatwindow/title",className:l(U.FLEXLAYOUT__FLOAT_WINDOW_HEADER_TITLE),title:o.getName(),children:o.getName()}):s.jsx("div",{style:{width:50,height:8,display:"flex",flexDirection:"column",justifyContent:"space-around",opacity:.5},children:s.jsx("div",{style:{height:2,backgroundColor:"gray",borderRadius:1}})})}),C&&s.jsx("button",{type:"button","data-layout-path":"/floatwindow/button/popout",className:l(U.FLEXLAYOUT__FLOAT_WINDOW_BUTTON),title:t.i18nName(De.Popout_Float_To_Window),"aria-label":t.i18nName(De.Popout_Float_To_Window),onClick:k,onPointerDown:S,children:B.popoutFloatWindow})]}),s.jsx("div",{className:l(U.FLEXLAYOUT__FLOAT_WINDOW_CONTENT),children:r}),s.jsx("div",{ref:f,style:{position:"absolute",zIndex:ir,top:So,left:to,right:to,height:to,cursor:"ns-resize"},onPointerDown:D=>I(D,"n")}),s.jsx("div",{ref:x,style:{position:"absolute",zIndex:ir,bottom:So,left:to,right:to,height:to,cursor:"ns-resize"},onPointerDown:D=>I(D,"s")}),s.jsx("div",{ref:p,style:{position:"absolute",zIndex:ir,top:to,bottom:to,right:So,width:to,cursor:"ew-resize"},onPointerDown:D=>I(D,"e")}),s.jsx("div",{ref:E,style:{position:"absolute",zIndex:ir,top:to,bottom:to,left:So,width:to,cursor:"ew-resize"},onPointerDown:D=>I(D,"w")}),s.jsx("div",{ref:b,style:{position:"absolute",zIndex:ir,top:So,left:So,width:fn,height:fn,cursor:"nwse-resize"},onPointerDown:D=>I(D,"nw")}),s.jsx("div",{ref:u,style:{position:"absolute",zIndex:ir,top:So,right:So,width:fn,height:fn,cursor:"nesw-resize"},onPointerDown:D=>I(D,"ne")}),s.jsx("div",{ref:w,style:{position:"absolute",zIndex:ir,bottom:So,left:So,width:fn,height:fn,cursor:"nesw-resize"},onPointerDown:D=>I(D,"sw")}),s.jsx("div",{ref:g,style:{position:"absolute",zIndex:ir,bottom:0,right:0,width:Np,height:Np,cursor:"nwse-resize"},onPointerDown:D=>I(D,"se")})]})},yv=({controller:e})=>{const t=[],o=e.getModel().getLayouts();let r=0,n=2e3;for(const[i,a]of o)a.isMainLayout()||(a.getType()==="window"&&e.isSupportsPopout()?(t.push(s.jsx(mv,{controller:e,layout:a,title:e.getPopoutWindowName()+" "+r,url:e.getPopoutURL()+"?id="+encodeURIComponent(i),onCloseLayout:e.onCloseLayout,children:s.jsx("div",{className:e.getProps().popoutClassName,children:s.jsx(na,{...e.getProps(),layoutId:i,path:a.getPath(),mainLayoutController:e})})},i)),r++):a.getType()==="float"&&(t.push(s.jsx(Gw,{controller:e,layout:a,zIndex:n,onCloseLayout:e.onCloseLayout,children:s.jsx(na,{...e.getProps(),layoutId:i,path:a.getPath(),mainLayoutController:e})},i+"float")),n++));return s.jsx(s.Fragment,{children:t})};yv.displayName="FloatingWindowContainer";var _v=e=>{const{controller:t,tabNode:o,selected:r,border:n,icons:i,path:a}=e,l=m.useRef(null),c=m.useRef(null),d=t.getKeyMap(),f=O=>{o.isEnableDrag()?(O.stopPropagation(),t.getDragDropManager().setDragNode(O.nativeEvent,o)):O.preventDefault()},u=O=>{O.stopPropagation(),t.getDragDropManager().onDragEnded()},p=O=>{oa(O)&&t.auxMouseClick(o,O)},g=O=>{t.showContextMenu(o,O)},x=()=>{t.doAction(oe.selectTab(o.getId()))},w=O=>{const M=l.current?.closest('[role="tablist"]');if(M){const V=Array.from(M.querySelectorAll('[role="tab"]'));V[V.indexOf(l.current)+O]?.focus()}},E=()=>{const O=l.current.ownerDocument,M=()=>Kb(O.getElementById(Tt("flexlayout-tab-",o.getId())));r?M():(x(),requestAnimationFrame(M))},b=O=>{t.getEditingTab()!==o&&(Ko(O,d.focusTabToggle)?(E(),O.preventDefault()):O.key==="Enter"||O.key===" "?(x(),O.preventDefault()):(O.key==="ArrowLeft"||O.key==="ArrowUp")&&!ta(O)?(w(-1),O.preventDefault()):(O.key==="ArrowRight"||O.key==="ArrowDown")&&!ta(O)?(w(1),O.preventDefault()):Ko(O,d.closeTab)&&o.isCloseable()&&(w(1),t.doAction(oe.deleteTab(o.getId())),O.preventDefault()))},h=()=>{const O=o.getCloseType();return!!(r||O===Xr.Always||O===Xr.Visible&&window.matchMedia&&window.matchMedia("(hover: hover) and (pointer: fine)").matches)},v=O=>{h()&&(t.doAction(oe.deleteTab(o.getId())),O.stopPropagation())},_=O=>{O.stopPropagation()},y=()=>{if(r)return!0;const O=o.getParent();return O instanceof qe&&O.getSelected()===-1&&O.getChildren()[0]===o},T=t.getEditingTab()===o,L=m.useCallback(O=>{l.current=O,t.registerMeasurable(o,"tabbutton",O)},[t,o]);m.useLayoutEffect(()=>{T&&c.current.select()},[T]),m.useEffect(()=>{if(T){const O=t.getCurrentDocument().body,M=V=>{V.target!==c.current&&t.setEditingTab(void 0)};return O.addEventListener("pointerdown",M),()=>O.removeEventListener("pointerdown",M)}},[T,t]);const B=O=>{O.stopPropagation()},C=O=>{O.code==="Escape"?(t.setEditingTab(void 0),l.current?.focus()):(O.code==="Enter"||O.code==="NumpadEnter")&&(t.setEditingTab(void 0),t.doAction(oe.renameTab(o.getId(),O.target.value)),l.current?.focus())},j=t.getClassName;let z=j(U.FLEXLAYOUT__BORDER_BUTTON)+" "+j(U.FLEXLAYOUT__BORDER_BUTTON_+n);r?z+=" "+j(U.FLEXLAYOUT__BORDER_BUTTON__SELECTED):z+=" "+j(U.FLEXLAYOUT__BORDER_BUTTON__UNSELECTED),o.getClassName()!==void 0&&(z+=" "+o.getClassName());let S=0;o.getModel().isEnableRotateBorderIcons()===!1&&(n==="left"?S=o.getModel().getBorderLeftTabDirection()==="down"?-90:90:n==="right"&&(S=-90));const k=Iu(t,o,S);let I=k.content?s.jsx("div",{className:j(U.FLEXLAYOUT__BORDER_BUTTON_CONTENT),children:k.content}):null;const D=k.leading?s.jsx("div",{className:j(U.FLEXLAYOUT__BORDER_BUTTON_LEADING),children:k.leading}):null;if(T&&(I=s.jsx("input",{ref:c,className:j(U.FLEXLAYOUT__TAB_BUTTON_TEXTBOX),"data-layout-path":a+"/textbox",type:"text","aria-label":t.i18nName(De.Rename_Tab),autoFocus:!0,defaultValue:o.getName(),onKeyDown:C,onPointerDown:B})),o.isCloseable()){const O=t.i18nName(De.Close_Tab);k.buttons.push(s.jsx("div",{"data-layout-path":a+"/button/close",title:O,"aria-hidden":"true",className:j(U.FLEXLAYOUT__BORDER_BUTTON_TRAILING),onPointerDown:_,onClick:v,children:typeof i.close=="function"?i.close(o):i.close},"close"))}const R=[kr(d.focusTabToggle),o.isCloseable()?kr(d.closeTab):void 0].filter(Boolean).join(" ")||void 0;return s.jsxs("div",{ref:L,id:Tt("flexlayout-tabbutton-",o.getId()),role:T?void 0:"tab","aria-selected":T?void 0:r,"aria-controls":T?void 0:Tt("flexlayout-tab-",o.getId()),"aria-label":T?void 0:k.name,"aria-keyshortcuts":T?void 0:R,tabIndex:T?-1:y()?0:-1,onKeyDown:b,"data-layout-path":a,className:z,onClick:x,onAuxClick:p,onContextMenu:g,title:o.getHelpText(),draggable:!0,onDragStart:f,onDragEnd:u,children:[D,I,k.buttons]})};_v.displayName="BorderButton";var wv=e=>{const{borderNode:t,controller:o,size:r}=e,n=m.useRef(null),i=m.useRef(null),a=m.useRef(null),l=m.useRef(null),c=m.useRef(null),d=m.useRef(null),[f,u]=m.useState(!1),p=m.useRef(null),g=o.getIcons();m.useEffect(()=>()=>p.current?.(),[]);const{userControlledPositionRef:x,onScroll:w,onScrollPointerDown:E,hiddenTabs:b,onMouseWheel:h,isDockStickyButtons:v,isShowHiddenTabs:_}=pv(o,t,ye.flip(t.getOrientation()),d,a,n,o.getClassName(U.FLEXLAYOUT__BORDER_BUTTON)),y=m.useCallback(re=>{n.current=re,o.registerMeasurable(t,"borderheader",re)},[o,t]),T=re=>{oa(re)&&o.auxMouseClick(t,re)},L=re=>{o.showContextMenu(t,re)},B=re=>{re.stopPropagation()},C=re=>{const ae=o.getShowOverflowMenu(),Le=b.map(ke=>({index:ke,node:t.getChildren()[ke]}));if(ae!==void 0)ae(t,re,Le,j);else{const ke=l.current;u(!0),p.current=uv(ke,t,Le,j,o,()=>{u(!1),p.current=null})}re.stopPropagation()},j=re=>{o.doAction(oe.selectTab(re.node.getId())),x.current=!1},z=re=>{const ae=t.getChildren()[t.getSelected()];ae!==void 0&&o.doAction(oe.popoutTab(ae.getId(),"window")),re.stopPropagation()},S=re=>{const ae=t.getChildren()[t.getSelected()];ae!==void 0&&o.doAction(oe.popoutTab(ae.getId(),"float")),re.stopPropagation()},k=o.getClassName,I=()=>{const re=[];for(let ae=0;ae{let re,ae=[],Le=[],ke;const ve={leading:re,buttons:ae,stickyButtons:Le,overflowPosition:void 0};if(o.customizeTabSet(t,ve),re=ve.leading,Le=ve.stickyButtons,ae=ve.buttons,ve.overflowPosition===void 0&&(ve.overflowPosition=Le.length),Le.length>0&&(v?ae=[...Le,...ae]:ke=s.jsx("div",{ref:c,onPointerDown:B,onDragStart:le=>{le.preventDefault()},className:k(U.FLEXLAYOUT__TAB_TOOLBAR_STICKY_BUTTONS_CONTAINER),children:Le},"sticky_buttons_container")),_){const le=o.i18nName(De.Overflow_Menu_Tooltip);let ce;if(typeof g.more=="function"){const X=b.map(fe=>({index:fe,node:t.getChildren()[fe]}));ce=g.more(t,X)}else ce=s.jsxs(s.Fragment,{children:[g.more,s.jsx("div",{className:k(U.FLEXLAYOUT__TAB_BUTTON_OVERFLOW_COUNT),children:b.length>0?b.length:""})]});ae.splice(Math.min(ve.overflowPosition,ae.length),0,s.jsx("button",{tabIndex:0,"aria-haspopup":"menu","aria-expanded":f,"aria-label":le,ref:l,className:k(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON)+" "+k(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_OVERFLOW)+" "+k(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_OVERFLOW_+t.getLocation().getName()),title:le,onClick:C,onPointerDown:B,children:ce},"overflowbutton"))}const Dt=t.getSelected();if(Dt!==-1){const le=t.getChildren()[Dt];if(le!==void 0&&o.isMainLayout()){if(le.isEnablePopoutFloatIcon()){const ce=o.i18nName(De.Popout_Tab_Float);ae.push(s.jsx("button",{tabIndex:0,title:ce,"aria-label":ce,className:k(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON)+" "+k(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_FLOAT),onClick:S,onPointerDown:B,children:typeof g.popoutFloat=="function"?g.popoutFloat(le):g.popoutFloat},"popout-float"))}if(o.isSupportsPopout()&&le.isEnablePopoutIcon()&&le.isAllowedInWindow()){const ce=o.i18nName(De.Popout_Tab);ae.push(s.jsx("button",{tabIndex:0,title:ce,"aria-label":ce,className:k(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON)+" "+k(U.FLEXLAYOUT__BORDER_TOOLBAR_BUTTON_FLOAT),onClick:z,onPointerDown:B,children:typeof g.popout=="function"?g.popout(le):g.popout},"popout"))}}}const J=s.jsx("div",{ref:i,className:k(U.FLEXLAYOUT__BORDER_TOOLBAR)+" "+k(U.FLEXLAYOUT__BORDER_TOOLBAR_+t.getLocation().getName()),children:ae},"toolbar");return{leading:re,toolbar:J,stickyBar:ke}},R=I(),{leading:O,toolbar:M,stickyBar:V}=D();let F=k(U.FLEXLAYOUT__BORDER)+" "+k(U.FLEXLAYOUT__BORDER_+t.getLocation().getName());t.getClassName()!==void 0&&(F+=" "+t.getClassName());let ne,Y;const K=r-1;t.getLocation()===ee.LEFT?(ne=o.getModel().getBorderLeftTabDirection()==="down"?{left:"100%",top:0}:{right:"100%",top:0},Y={width:K,overflowY:"auto"}):t.getLocation()===ee.RIGHT?(ne={left:"100%",top:0},Y={width:K,overflowY:"auto"}):(ne={left:0},Y={height:K,overflowX:"auto"});let Z;t.isEnableTabScrollbar()&&(Z=s.jsx("div",{ref:a,"aria-hidden":"true",className:k(U.FLEXLAYOUT__MINI_SCROLLBAR),onPointerDown:E}));let $;O&&($=s.jsx("div",{className:k(U.FLEXLAYOUT__BORDER_LEADING),children:O}));const Q=k(U.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER)+" "+k(U.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER_+t.getLocation().getName())+(t.getLocation()===ee.LEFT&&o.getModel().getBorderLeftTabDirection()==="down"?" "+k(U.FLEXLAYOUT__BORDER_INNER_TAB_CONTAINER_LEFT_DOWN):"");return s.jsxs("div",{ref:y,style:{display:"flex",flexDirection:t.getOrientation()===ye.VERT?"row":"column"},className:F,"data-layout-path":t.getPath(),onClick:T,onAuxClick:T,onContextMenu:L,onWheel:h,children:[$,s.jsxs("div",{className:k(U.FLEXLAYOUT__MINI_SCROLLBAR_CONTAINER),children:[s.jsxs("div",{ref:d,className:k(U.FLEXLAYOUT__BORDER_INNER)+" "+k(U.FLEXLAYOUT__BORDER_INNER_+t.getLocation().getName()),style:Y,onScroll:w,children:[s.jsx("div",{style:ne,role:o.getEditingTab()?.getParent()===t?void 0:"tablist","aria-orientation":o.getEditingTab()?.getParent()!==t&&(t.getLocation()===ee.LEFT||t.getLocation()===ee.RIGHT)?"vertical":void 0,className:Q,children:R}),V]}),Z]}),M]})};wv.displayName="BorderTabSet";function kv(e){const{controller:t,borderNode:o,show:r}=e,n=m.useRef(null),i=m.useCallback(f=>{n.current=f,t.registerMeasurable(o,"bordercontent",f)},[t,o]);let a=!0;const l={};o.getOrientation()===ye.HORZ?(l.width=o.getSize(),l.minWidth=o.getMinSize(),l.maxWidth=o.getMaxSize()):(l.height=o.getSize(),l.minHeight=o.getMinSize(),l.maxHeight=o.getMaxSize(),a=!1);const c=t.getClassName(U.FLEXLAYOUT__BORDER_TAB_CONTENTS),d=o.getLocation()===ee.LEFT||o.getLocation()===ee.TOP;if(o.isOverlay()){l.display="flex";const f={display:r?"flex":"none"};if(a){const p=t.getModel();for(const g of p.getBorderSet().getBorders())if(g!==o&&g.isOverlay()&&g.isShowing()&&g.getSelected()!==-1){const x=g.getSize()+p.getSplitterSize();g.getLocation()===ee.TOP?f.top=x:g.getLocation()===ee.BOTTOM&&(f.bottom=x)}}const u=t.getClassName(U.FLEXLAYOUT__BORDER_TAB_OVERLAY)+" "+t.getClassName(U.FLEXLAYOUT__BORDER_TAB_OVERLAY_+o.getLocation().getName());return s.jsxs("div",{className:u,style:f,children:[d&&s.jsx("div",{ref:i,style:l,className:c}),r&&s.jsx(Ai,{controller:t,node:o,index:0,horizontal:a}),!d&&s.jsx("div",{ref:i,style:l,className:c})]})}return l.display=r?"flex":"none",d?s.jsxs(s.Fragment,{children:[s.jsx("div",{ref:i,style:l,className:c}),r&&s.jsx(Ai,{controller:t,node:o,index:0,horizontal:a})]}):s.jsxs(s.Fragment,{children:[r&&s.jsx(Ai,{controller:t,node:o,index:0,horizontal:a}),s.jsx("div",{ref:i,style:l,className:c})]})}kv.displayName="BorderTab";var Ev=({controller:e,inner:t})=>{const o=e.getClassName(U.FLEXLAYOUT__LAYOUT_MAIN),r=e.getModel().getBorderSet().getBorderMap();if(e.isMainLayout()&&r.size>0){const n=s.jsx("div",{className:o,ref:e.getMainRef(),children:t}),i=new Map,a=new Map;for(const[f,u]of ee.values){const p=r.get(u);p&&p.isShowing()&&(!p.isAutoHide()||p.isAutoHide()&&(p.getChildren().length>0||e.getState().showHiddenBorder===u))&&(i.set(u,s.jsx(wv,{controller:e,borderNode:p,size:e.getState().calculatedBorderBarSize})),a.set(u,s.jsx(kv,{controller:e,borderNode:p,show:p.getSelected()!==-1})))}const l=e.getClassName(U.FLEXLAYOUT__LAYOUT_BORDER_CONTAINER),c=e.getClassName(U.FLEXLAYOUT__LAYOUT_BORDER_CONTAINER_INNER),d=s.jsxs("div",{className:c,style:{flexDirection:"column"},children:[a.get(ee.TOP),s.jsxs("div",{className:c,style:{flexDirection:"row"},children:[a.get(ee.LEFT),n,a.get(ee.RIGHT)]}),a.get(ee.BOTTOM)]});return s.jsxs("div",{className:l,style:{flexDirection:"column"},children:[i.get(ee.TOP),s.jsxs("div",{className:c,style:{flexDirection:"row"},children:[i.get(ee.LEFT),d,i.get(ee.RIGHT)]}),i.get(ee.BOTTOM)]})}else return s.jsx("div",{className:o,ref:e.getMainRef(),style:{position:"absolute",top:0,left:0,bottom:0,right:0,display:"flex"},children:t})};Ev.displayName="BorderContainer";var Tv=m.memo(e=>{Tv.displayName="DragTabButton";const{controller:t,tabNode:o}=e,r=m.useRef(null);m.useEffect(()=>{o.setTabStamp(r.current)},[o]);const n=t.getClassName,i=n(U.FLEXLAYOUT__DRAG_RECT);return s.jsx("div",{ref:r,className:i,children:s.jsx(ra,{controller:t,tabNode:o},o.getId())})},Kw);function Kw(e,t){return t.dragging}var na=m.forwardRef((e,t)=>{na.displayName="LayoutInternal";const[o,r]=m.useState({editingTab:void 0,showEdges:!1,showOverlay:!1,calculatedBorderBarSize:29,layoutRedrawRevision:0,fullRedrawRevision:0,showHiddenBorder:ee.CENTER}),n=m.useCallback(j=>{r(z=>({...z,...typeof j=="function"?j(z,e):j}))},[e]),i=m.useRef(null),[a,l]=m.useState(0),c=m.useRef(null),d=m.useRef(null),f=m.useRef(null),u=m.useRef(null),p=m.useMemo(()=>new qw(e,o,n),[]);p.setProps(e),p.setStateRaw(o),p.setSetState(n),p.setLayoutRef(i),p.setMoveablesHomeRef(c),p.setFindBorderBarSizeRef(d),p.setFindSplitterSizeRef(f),p.setMainRef(u);const g=e.model.getLayouts().get(p.getLayoutId());g.setController(p),m.useImperativeHandle(t,()=>p,[p]),m.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(z=>z+1),j){const z=i.current?.ownerDocument.defaultView??window,S=z.requestAnimationFrame(()=>{p.syncLayoutMetrics(),p.positionTabPanels(),p.isReLayout()&&(p.redrawLayout(),p.setReLayout(!1))});return()=>z.cancelAnimationFrame(S)}}),m.useEffect(()=>{const j=i.current.ownerDocument,z=j.defaultView;p.setCurrentDocument(j),p.setCurrentWindow(z);const S=new z.ResizeObserver(()=>{p.updateRect(),p.syncLayoutMetrics(),p.positionTabPanels(),p.updateLayoutMetrics(),p.isReLayout()&&(p.redrawLayout(),p.setReLayout(!1))});S.observe(i.current),p.setGeometryResizeObserver(S),d.current&&S.observe(d.current),f.current&&S.observe(f.current);const k=()=>{p.updateRect()};z.addEventListener("resize",k);const I=()=>{for(const[D,R]of p.getProps().model.getLayouts()){const O=R.getController();O&&O.redrawLayout()}};return p.isMainLayout()&&(document.addEventListener("visibilitychange",I),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),S.disconnect(),z.removeEventListener("resize",k),document.removeEventListener("visibilitychange",I),j.removeEventListener("pointerdown",p.onOverlayBorderPointerDown,!0),j.removeEventListener("keydown",p.onOverlayBorderKeyDown),j.removeEventListener("keydown",p.onTabsetNavKeyDown)}},[p,a]),m.useEffect(()=>{let j;if(!p.isMainLayout()&&p.getLayout().getType()==="window"){const z=p.getProps().mainLayoutController?.getRootDiv();if(z){const S=z,k=i.current;Lp(S,k),j=new MutationObserver(()=>{Lp(S,k)&&p.redrawLayout()}),j.observe(S,{attributeFilter:["style"]})}}return()=>{j&&j.disconnect()}},[p]),m.useEffect(()=>{const j=e.model;if(g.setToExportRectFunction((z,S)=>S==="window"?p.getScreenRect(z):p.getRelativeRect(z)),p.setLayout(g),p.isMainLayout()){const z={onAfterAction:p.onModelChange};return j.addChangeListener(z),()=>{j.removeChangeListener(z)}}},[e.model,p,g]);const x=p.isMainLayout()?s.jsxs("div",{className:p.getClassName(U.FLEXLAYOUT__LAYOUT_METRICS),children:[s.jsx("div",{ref:d,className:p.getClassName(U.FLEXLAYOUT__BORDER_SIZER),children:"FindBorderBarSize"},"findBorderBarSize"),s.jsx("div",{ref:f,className:p.getClassName(U.FLEXLAYOUT__SPLITTER_+"horz")},"findSplitterSize")]}):null;if(!i.current)return s.jsx("div",{ref:i,className:p.getClassName(U.FLEXLAYOUT__LAYOUT),children:x});const w=e.model,E=p.getLayoutId();w.getRootRow(E).calcMinMaxSize(),w.getRootRow(E).setPaths(e.path||""),p.isMainLayout()&&w.getBorderSet().setPaths();const b=s.jsx(sv,{controller:p,show:o.showOverlay},"__overlay__"),h=p.renderLayout(),v=s.jsx(Ev,{controller:p,inner:h}),_=p.renderTabContainers(),y=p.reorderComponents(_,p.getOrderedTabIds());let T=null,L=null,B=null,C=null;return p.isMainLayout()&&(T=s.jsx(yv,{controller:p}),L=p.reorderComponents(p.renderTabContents(),p.getOrderedTabMoveableIds()),B=s.jsx("div",{"aria-hidden":"true",className:p.getClassName(U.FLEXLAYOUT__LAYOUT_TAB_STAMPS),children:p.renderDragTabButtons()},"__dragTabButtons__"),C=s.jsx("div",{ref:c,className:p.getClassName(U.FLEXLAYOUT__LAYOUT_MOVEABLES_HOME)},"__moveables_home__")),s.jsxs("div",{ref:i,className:p.getClassName(U.FLEXLAYOUT__LAYOUT),onDragEnter:p.getDragDropManager().onDragEnterRaw,onDragLeave:p.getDragDropManager().onDragLeaveRaw,onDragOver:p.getDragDropManager().onDragOver,onDrop:p.getDragDropManager().onDrop,children:[x,C,b,v,y,L,T,B]})}),Yo,qw=(Yo=class{constructor(t,o,r){A(this,"_props");A(this,"_state");A(this,"_setState");A(this,"_layoutRef");A(this,"_moveablesHomeRef");A(this,"_findBorderBarSizeRef");A(this,"_findSplitterSizeRef");A(this,"_mainRef");A(this,"_orderedTabIds");A(this,"_orderedTabMoveableIds");A(this,"_currentDocument");A(this,"_currentWindow");A(this,"_showOverlay",!1);A(this,"_supportsPopout");A(this,"_popoutURL");A(this,"_icons");A(this,"_dragDropManager");A(this,"_layoutId");A(this,"_layout");A(this,"_mainController");A(this,"_popoutWindowName");A(this,"_cachedLayoutDOMRect");A(this,"_reLayout");A(this,"_measurables",new Map);A(this,"_tabPanels",new Map);A(this,"_lastRect",he.empty());A(this,"_lastSplitterSize",8);A(this,"_geometryResizeObserver");A(this,"updateRect",()=>{if(this._layoutRef.current){let t=this._layoutRef.current;if(!this._layout.isMainLayout()&&this._layout.getType()==="float"){const r=t.closest("."+this.getClassName(U.FLEXLAYOUT__FLOAT_WINDOW));r instanceof HTMLDivElement&&(t=r)}let o=he.fromDomRect(t.getBoundingClientRect());if(!this._layout.isMainLayout()&&this._layout.getType()==="float"){const r=this._mainController.getDomRect();o=o.relativeTo(r)}!o.equalsWhenRounded(this._lastRect)&&o.width!==0&&o.height!==0&&(this._lastRect=o,this._layout.setRect(o),this.redrawLayout())}});A(this,"onModelChange",t=>{const o=t instanceof Yb?t.actions:[t];for(const r of o)if(r.type==oe.DELETE_TAB&&this._state.showHiddenBorder!==ee.CENTER&&this._props.model.getBorderSet().getBorderMap().get(this._state.showHiddenBorder).getChildren().length===0){this._setState({showHiddenBorder:ee.CENTER});break}if(t.isAdjusting()&&(t.type===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)});A(this,"onOverlayBorderPointerDown",t=>{const o=this._props.model.getBorderSet().getBorders().filter(l=>l.isOverlay()&&l.getSelected()!==-1);if(o.length===0||t.target?.closest?.("."+this.getClassName(U.FLEXLAYOUT__POPUP_MENU_CONTAINER)+",."+this.getClassName(U.FLEXLAYOUT__FLOAT_WINDOW)+",."+this.getClassName(U.FLEXLAYOUT__FLOATING_WINDOW_CONTENT)+",."+this.getClassName(U.FLEXLAYOUT__BORDER_TAB_OVERLAY)))return;const r=this.getDomRect();if(!r)return;const n=t.clientX-r.x,i=t.clientY-r.y,a=this._props.model.getRootRow(it.MAIN_LAYOUT_ID)?.getRect();if(!(!a||!a.contains(n,i)))for(const l of o)l.getContentRect()?.contains(n,i)||this.closeOverlayBorder(l)});A(this,"onOverlayBorderKeyDown",t=>{if(!Ko(t,this.getKeyMap().closeOverlayBorder))return;const o=this._currentDocument?.activeElement;if(!o)return;const r=this._props.model.getBorderSet().getBorders().filter(n=>n.isOverlay()&&n.getSelected()!==-1);for(const n of r){const i=n.getSelectedNode(),a=this._currentDocument.getElementById(Tt("flexlayout-tab-",i.getId())),l=this._currentDocument.getElementById(Tt("flexlayout-tabbutton-",i.getId()));if(a&&a.contains(o)||o===l){this.closeOverlayBorder(n),t.preventDefault();break}}});A(this,"onTabsetNavKeyDown",t=>{if(t.defaultPrevented)return;const o=this.getKeyMap();let r;if(Ko(t,o.focusNextTabset))r=1;else if(Ko(t,o.focusPreviousTabset))r=-1;else return;this.focusAdjacentTabset(r)&&t.preventDefault()});A(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())}});A(this,"getClassName",t=>this._props.classNameMapper===void 0?t:this._props.classNameMapper(t));A(this,"onCloseLayout",t=>{this.doAction(oe.closePopout(t.getLayoutId()))});this._props=t,this._state=o,this._setState=r,this._orderedTabIds=[],this._orderedTabMoveableIds=[],this._supportsPopout=t.supportsPopout!==void 0?t.supportsPopout:Zw,this._popoutURL=t.popoutURL?t.popoutURL:"popout.html",this._icons={...Jw,...t.icons},this._layoutId=t.layoutId?t.layoutId:it.MAIN_LAYOUT_ID,this._mainController=t.mainLayoutController?t.mainLayoutController:this,this._dragDropManager=new Bw(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(Pu,{controller:this,rowNode:this._props.model.getRootRow(this._layoutId)},"__row__"),s.jsx(vv,{controller:this})]})}renderTabContainers(){const t=new Map;return this._props.model.visitLayoutNodes(this._layoutId,o=>{if(o instanceof Se){const r=o,n=r.isSelected(),i=r.isRendered(),a=r.isEnableRenderOnDemand();(i||n||!a)&&t.set(r.getId(),s.jsx(gv,{controller:this,tabNode:r,selected:n},r.getId()))}}),t}renderTabContents(){const t=new Map;for(const[o,r]of this._props.model.getLayouts())this._props.model.visitLayoutNodes(o,n=>{if(n instanceof Se){const i=n,a=i.isSelected(),l=i.isRendered(),c=i.isEnableRenderOnDemand(),d=i.getParent().getContentRect(),f=a||!c;if(l||f&&d.width>0&&d.height>0){const u=i.getMoveableElement();u.style.overflow=i.isEnableScrollbars()?"auto":"hidden";const p=r.getWindowId()||"",g=i.getId()+(i.isEnableWindowReMount()?p:"");t.set(i.getId(),Io.createPortal(s.jsx(bv,{controller:this,tabNode:i,windowId:p,visible:f,fullRedrawRevision:this._state.fullRedrawRevision,parentRedrawRevision:this._props.parentRedrawRevision},g),u,g)),i.setRendered(!0)}}});return t}renderDragTabButtons(){const t=[];return this._props.model.visitNodes(o=>{if(o instanceof Se){const r=o;t.push(s.jsx(Tv,{controller:this,tabNode:r,dragging:nl},r.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 o=this._props.onAction(t);return o!==void 0?this._props.model.doAction(o):void 0}else return this._props.model.doAction(t)}applyMeasuredGeometry(){this.syncLayoutMetrics(),this.positionTabPanels(),this.isReLayout()&&(this.redrawLayout(),this.setReLayout(!1))}applyAdjustingWeights(t){const o=this._props.model.getNodeById(t.data.nodeId);if(!(o instanceof He)){this.redrawLayout();return}const r=t.data.weights,n=o.getChildren();for(let i=0;it.has(i)),n=new Set(r);for(const i of t.keys())n.has(i)||r.push(i);return o.splice(0,o.length,...r),o.map(i=>t.get(i))}checkForBorderToShow(t,o){const r=this.getBoundingClientRect(this._mainRef.current),n=r.getCenter(),i=10,a=100/2;let l=!1;this._props.model.isEnableEdgeDock()&&this._state.showHiddenBorder===ee.CENTER&&(o>n.y-a&&on.x-a&&t=r.getRight()-i?c=ee.RIGHT:o<=r.y+i?c=ee.TOP:o>=r.getBottom()-i&&(c=ee.BOTTOM)),c!==this._state.showHiddenBorder&&this.setState({showHiddenBorder:c})}closeOverlayBorder(t){const o=t.getSelectedNode();if(o===void 0)return;const r=this._currentDocument,n=r?.getElementById(Tt("flexlayout-tab-",o.getId())),i=!!r&&!!n&&n.contains(r.activeElement);this.doAction(oe.selectTab(o.getId())),i&&r.getElementById(Tt("flexlayout-tabbutton-",o.getId()))?.focus()}focusAdjacentTabset(t){const o=this._currentDocument,r=o?.activeElement;if(!o||!r||!this.getRootDiv()?.contains(r))return!1;const n=r.tagName;if(n==="INPUT"||n==="TEXTAREA"||r.isContentEditable||r.closest('[role="menu"]')||this._props.model.getMaximizedTabset(this._layoutId)!==void 0)return!1;const i=[];if(this._props.model.visitLayoutNodes(this._layoutId,d=>{d instanceof Oe&&d.getSelectedNode()!==void 0&&i.push(d)}),i.length<2)return!1;const a=d=>this._measurables.get("tabset:"+d.getId())?.element.contains(r)?!0:!!o.getElementById(Tt("flexlayout-tab-",d.getSelectedNode().getId()))?.contains(r);let l=i.findIndex(a);if(l===-1){const d=this._props.model.getActiveTabset(this._layoutId);l=d!==void 0?i.indexOf(d):0,l===-1&&(l=0)}const c=i[(l+t+i.length)%i.length];return o.getElementById(Tt("flexlayout-tabbutton-",c.getSelectedNode().getId()))?.focus(),this.doAction(oe.setActiveTabset(c.getId(),this._layoutId)),!0}registerMeasurable(t,o,r){const n=o+":"+t.getId(),i=this._measurables.get(n);r?this._measurables.set(n,{kind:o,node:t,element:r}):this._measurables.delete(n),o!=="tabbutton"&&(i&&this._geometryResizeObserver?.unobserve(i.element),r&&this._geometryResizeObserver?.observe(r))}setGeometryResizeObserver(t){if(this._geometryResizeObserver=t,t)for(const{kind:o,element:r}of this._measurables.values())o!=="tabbutton"&&t.observe(r)}syncLayoutMetrics(){this._cachedLayoutDOMRect=void 0;let t=!1;for(const{kind:o,node:r,element:n}of this._measurables.values()){if(!n.isConnected)continue;const i=this.getBoundingClientRect(n);switch(o){case"row":case"tabset":i.equalsWhenRounded(r.getRect())||(r.setRect(i),t=!0);break;case"tabstrip":i.equalsWhenRounded(r.getTabStripRect())||(r.setTabStripRect(i),t=!0);break;case"tabsetcontent":{const a=r;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(r.getTabRect())||(r.setTabRect(i),t=!0);break;case"borderheader":i.equalsWhenRounded(r.getRect())||(r.setTabHeaderRect(i),t=!0);break;case"bordercontent":{const a=r;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,o){o?this._tabPanels.set(t.getId(),{node:t,element:o}):this._tabPanels.delete(t.getId())}positionTabPanels(){for(const{node:t,element:o}of this._tabPanels.values()){const r=t.getParent(),n=r.getContentRect();let i=t.isSelected();r instanceof Oe?this._props.model.getMaximizedTabset(this._layoutId)!==void 0&&!r.isMaximized()&&(i=!1):r instanceof qe&&(r.isShowing()||(i=!1)),n.positionElement(o),o.style.display=i?"":"none",t.setRect(n),t.setVisible(i)}}addTabWithDragAndDrop(t,o,r){this._dragDropManager.addTabWithDragAndDrop(t,o,r)}moveTabWithDragAndDrop(t,o){this._dragDropManager.moveTabWithDragAndDrop(t,o)}setDragComponent(t,o,r,n){this._dragDropManager.setDragComponent(t,o,r,n)}getMoveablesHome(){return this._moveablesHomeRef.current}getProps(){return this._props}getKeyMap(){return Lw(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&&!Yo.Windows.has(t)&&Yo.Windows.set(t,hn())}getWindowId(){if(this.getCurrentWindow())return Yo.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 o=this.getDomRect();return o?he.getBoundingClientRect(t).relativeTo(o):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 o=t.clone(),r=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 o.x=this._currentWindow.screenX+this._currentWindow.scrollX+l/2+r.x+o.x,o.y=this._currentWindow.screenY+this._currentWindow.scrollY+(a-l/2)+r.y+o.y,o.height+=a,o.width+=l,o}getRelativeRect(t){const o=t.clone();if(!this._layout.isMainLayout()){const r=this._layout.getRect();o.x+=r.x,o.y+=r.y}return o}moveWindowToFront(t){this.doAction(oe.movePopoutToFront(t))}addTabToTabSet(t,o){if(this._props.model.getNodeById(t)!==void 0)return this.doAction(oe.addTab(o,t,ee.CENTER,-1))}addTabToActiveTabSet(t){const o=this._props.model.getActiveTabset(this._layoutId);if(o!==void 0)return this.doAction(oe.addTab(t,o.getId(),ee.CENTER,-1))}maximize(t){this.doAction(oe.maximizeToggle(t.getId(),this.getLayoutId()))}customizeTab(t,o){this._props.onRenderTab&&this._props.onRenderTab(t,o)}customizeTabSet(t,o){this._props.onRenderTabSet&&this._props.onRenderTabSet(t,o)}i18nName(t,o){let r;return this._props.i18nMapper&&(r=this._props.i18nMapper(t,o)),r===void 0&&(r=t+(o===void 0?"":o)),r}getShowOverflowMenu(){return this._props.onShowOverflowMenu}getTabSetPlaceHolderCallback(){return this._props.onTabSetPlaceHolder}showContextMenu(t,o){this._props.onContextMenu&&this._props.onContextMenu(t,o)}auxMouseClick(t,o){this._props.onAuxMouseClick&&this._props.onAuxMouseClick(t,o)}showOverlay(t){this._showOverlay!==t&&(this._showOverlay=t,this.setState({showOverlay:t}),rl(!t,this._currentDocument))}showOverlayOnAllWindows(t){for(const[,o]of this._props.model.getLayouts())o.getController()&&o.getController().showOverlay(t)}},A(Yo,"Windows",new WeakMap),Yo),Jw={close:s.jsx(al,{}),pin:s.jsx(ev,{}),closeTabset:s.jsx(al,{}),closeFloatPopout:s.jsx(al,{}),popout:s.jsx(gd,{}),popoutFloat:s.jsx(nv,{}),maximize:s.jsx(tv,{}),restore:s.jsx(av,{}),more:s.jsx(ov,{}),edgeArrow:s.jsx(rv,{}),activeTabset:s.jsx(lv,{}),dragToDock:s.jsx(iv,{}),popoutFloatWindow:s.jsx(gd,{})},Zw=Gb(),Rv=m.forwardRef((e,t)=>{const o=m.useRef(null),r=m.useRef(e.model),n=m.useRef(0);r.current!==e.model&&(e.model.getAdoptedFromModel()!==r.current&&n.current++,r.current=e.model),Rv.displayName="Layout",m.useImperativeHandle(t,()=>({redraw:()=>{o.current?.redrawLayoutAndTabContent()},addTabToTabSet:(a,l)=>o.current?.addTabToTabSet(a,l),addTabWithDragAndDrop:(a,l,c)=>{o.current?.addTabWithDragAndDrop(a,l,c)},moveTabWithDragAndDrop:(a,l)=>{o.current?.moveTabWithDragAndDrop(a,l)},addTabToActiveTabSet:a=>o.current?.addTabToActiveTabSet(a),setDragComponent:(a,l,c,d)=>{o.current?.setDragComponent(a,l,c,d)},editTabName:a=>{const l=o.current?.getModel().getNodeById(a);l instanceof Se&&l.isEnableRename()&&l.getLayout().getController()?.setEditingTab(l)},getRootDiv:()=>o.current.getRootDiv()}));const i={};return s.jsx(na,{ref:o,...e,parentRedrawRevision:i},n.current)});const Op=20,Qw="bv-nodepack:layout-profiles:v1:",Bu=new Map,bd="bv-layout-session-changed",Sv=e=>`${Qw}${e}`;function zu(e){try{const t=JSON.parse(localStorage.getItem(Sv(e))??"");if(t?.schemaVersion===1&&Array.isArray(t.profiles))return t}catch{}return{schemaVersion:1,profiles:[]}}function Lv(e,t){localStorage.setItem(Sv(e),JSON.stringify(t))}const e0=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 Ap(e){const t=zu(e.editorType),o=e0(e.name),r=e.id??crypto.randomUUID();if(t.profiles.find(l=>l.name.localeCompare(o,void 0,{sensitivity:"accent"})===0&&l.id!==r))throw new Error("A layout with this name already exists.");const i={...e,id:r,name:o,schemaVersion:1,updatedAt:new Date().toISOString()},a=t.profiles.some(l=>l.id===r)?t.profiles.map(l=>l.id===r?i:l):[...t.profiles,i];if(a.length>Op)throw new Error(`A maximum of ${Op} layouts can be saved for this editor.`);return Lv(e.editorType,{schemaVersion:1,profiles:a,selectedId:r}),i}function t0(e,t){const o=zu(e);Lv(e,{...o,profiles:o.profiles.filter(r=>r.id!==t),selectedId:o.selectedId===t?void 0:o.selectedId})}function ll(e,t,o,r,n=!0){Bu.set(e,{layout:structuredClone(t),status:o,profileId:r}),n&&window.dispatchEvent(new CustomEvent(bd,{detail:{key:e}}))}function xi(e){const t=Bu.get(e);return t?structuredClone(t):void 0}function o0(e){Bu.delete(e)}function r0(e,t){return e.editorType===t.editorType&&e.editorVersion===t.editorVersion&&e.library===t.library&&e.signature===t.signature}const Dp="flexlayout-react@0.10.5";function n0(e){return{global:{tabEnableClose:!1,tabEnablePopout:!1,tabEnablePopoutIcon:!1,tabEnablePopoutFloatIcon:!0,tabSetMinWidth:180,tabSetMinHeight:130},borders:[],layout:{type:"row",children:e.map(t=>({type:"tabset",weight:t.weight,minWidth:t.minWidth,children:[{type:"tab",id:t.id,name:t.title,component:t.id,enablePopoutFloatIcon:!0}]}))}}}const i0=new Set([oe.MOVE_NODE,oe.DELETE_TAB,oe.DELETE_TABSET,oe.RENAME_TAB]),a0=e=>i0.has(e.type)?"modified":"adjusted";function l0(e){o0(e)}function Cv({storageId:e,panels:t,resetSignal:o=0,defaultModel:r,onStatus:n}){const i=JSON.stringify({panels:t.map(u=>`${u.id}:${u.weight}`),defaultModel:r}),a=m.useMemo(()=>r??n0(t),[i]),[l,c]=m.useState(()=>it.fromJson(xi(e)?.layout??a)),d=m.useMemo(()=>new Map(t.map(u=>[u.id,u.content])),[t]);m.useEffect(()=>{const u=xi(e);c(it.fromJson(u?.layout??a)),n?.(u?.status??"saved")},[a,i,e]),m.useEffect(()=>{o&&(l0(e),c(it.fromJson(a)),n?.("saved"))},[a,o,e]),m.useEffect(()=>{const u=p=>{if(p.detail?.key!==e)return;const g=xi(e);g&&(c(it.fromJson(g.layout)),n?.(g.status))};return window.addEventListener(bd,u),()=>window.removeEventListener(bd,u)},[n,e]);const f=u=>u.type===oe.POPOUT_TAB&&u.data.type==="float"&&l.getNodeById(u.data.node)?.getLayoutId()!==it.MAIN_LAYOUT_ID?void 0:u;return s.jsx("div",{className:"bv-ui-dock flexlayout__theme_dark",children:s.jsx(Rv,{model:l,factory:u=>d.get(u.getComponent()??"")??null,constrainFloatPanels:!0,onAction:f,onModelChange:(u,p)=>{c(u);const g=xi(e),x=g?.status==="modified"?"modified":a0(p);ll(e,u.toJson(),x,g?.profileId,!1),n?.(x)}})})}let dr=[];const vd=new Set,Nv=()=>vd.forEach(e=>e());function Oo(e){const t=e.id??`${e.title}:${e.message??""}`,o=dr.findIndex(n=>n.id===t),r={...e,id:t};return dr=o>=0?[...dr.slice(0,o),r,...dr.slice(o+1)]:[...dr,r].slice(-3),Nv(),t}function s0(e){dr=dr.filter(t=>t.id!==e),Nv()}const c0=e=>(vd.add(e),()=>vd.delete(e)),Mp=()=>dr;function d0(){const e=m.useSyncExternalStore(c0,Mp,Mp),t=m.useCallback(()=>{const o=document.getElementById("bv-global-toast-stack");if(!o)return;const r=[...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,...r.map(i=>Math.max(0,window.innerHeight-i.top+8)));o.style.setProperty("--bv-toast-bottom",`${n}px`)},[]);return m.useEffect(()=>{const o=r=>{const n=r.detail;n?.title&&Oo({title:n.title,message:n.message,tone:n.tone??"neutral",duration:n.duration??4500})};return window.addEventListener("bv-show-toast",o),()=>window.removeEventListener("bv-show-toast",o)},[]),m.useEffect(()=>{t();const o=new ResizeObserver(t),r=new MutationObserver(t);return document.querySelectorAll("body *").forEach(n=>{n.offsetParent!==null&&n.getBoundingClientRect().bottom>window.innerHeight-180&&o.observe(n)}),r.observe(document.body,{childList:!0,subtree:!0}),window.addEventListener("resize",t),()=>{o.disconnect(),r.disconnect(),window.removeEventListener("resize",t)}},[t]),e.length?Io.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(o=>s.jsx(k_,{tone:o.tone,title:o.title,duration:o.duration,onClose:()=>s0(o.id),children:o.message},o.id))}),document.body):null}const oo=({children:e,className:t=""})=>s.jsx("svg",{className:t,viewBox:"0 0 24 24","aria-hidden":"true",children:e}),Ov=m.createContext({narrow:!1,minimal:!1,menuOverflow:!1}),Av=()=>m.useContext(Ov);function u0(e){const t=e.mode==="workspace",o=m.useRef(null),[r,n]=m.useState(1/0),[i,a]=m.useState(!1),l=m.useRef(null);m.useEffect(()=>{const d=o.current;if(!d)return;const f=new ResizeObserver(u=>n(u[0]?.contentRect.width??d.clientWidth));return f.observe(d),()=>f.disconnect()},[]);const c=m.useMemo(()=>({narrow:r<760,minimal:r<620,menuOverflow:r<520}),[r]);return s.jsx(Ov.Provider,{value:c,children:s.jsxs("header",{ref:o,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(oo,{children:s.jsx("path",{d:"M12 3.5a8.5 8.5 0 1 0 8.5 8.5c0-3.2-2.1-5.7-5.1-5.7-2.4 0-4.1 1.7-4.1 3.8 0 1.7 1.2 2.9 2.8 2.9 1.4 0 2.4-.9 2.4-2.1"})})}),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:d=>window.dispatchEvent(new CustomEvent(Bl,{detail:{anchor:d.currentTarget}})),children:s.jsxs(oo,{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(d=>!d),children:"•••"}),s.jsx(Cr,{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(oo,{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(oo,{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(oo,{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(oo,{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(oo,{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(oo,{children:s.jsx("path",{d:"m7 7 10 10M17 7 7 17"})})})]})]})})}const ui=(e,t)=>{const o=Math.max(280,window.innerWidth-32),r=Math.max(240,window.innerHeight-32),n=Math.min(t.width,420,o),i=Math.min(t.height,r),a=Math.max(n,Math.min(e.width,o)),l=Math.max(i,Math.min(e.height,r));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 ti({open:e,title:t,shortTitle:o,context:r,center:n,children:i,status:a,actions:l,activationToken:c=0,allowWorkspace:d=!0,initialMode:f="floating",initialGeometry:u,minSize:p={width:360,height:240},mode:g,className:x="",bodyClassName:w="",menuVisible:E,onMenuVisible:b,onClose:h,onGeometry:v,onModeChange:_}){const y=o??(t==="BV Regional Editor"?"Reg. Editor":t==="Regional Quick Edit"?"Quick Edit":void 0),T=()=>ui({x:Math.max(16,(window.innerWidth-(u?.width??760))/2),y:Math.max(16,(window.innerHeight-(u?.height??640))/2),width:u?.width??760,height:u?.height??640,...u},p),[L,B]=m.useState(d?f:"floating"),[C,j]=m.useState(!1),[z,S]=m.useState(T),k=g??L,I=m.useRef(null),D=m.useRef(null),R=m.useRef(z),O=m.useRef(u),M=m.useRef();m.useEffect(()=>{R.current=z},[z]),m.useEffect(()=>{e&&j(!1)},[e]),m.useEffect(()=>{const $=I.current;if(!(!e||!$))return D.current=document.activeElement instanceof HTMLElement&&!$.contains(document.activeElement)?document.activeElement:D.current,ww($)},[e]),m.useEffect(()=>{const $=I.current;if(!$)return;const Q=()=>{j(!1),requestAnimationFrame(()=>$.focus({preventScroll:!0}))},re=()=>j(!0);return $.addEventListener("bv-ui-activate",Q),$.addEventListener("bv-ui-minimize",re),()=>{$.removeEventListener("bv-ui-activate",Q),$.removeEventListener("bv-ui-minimize",re)}},[]),m.useEffect(()=>{const $=I.current;if(!$)return;const Q=re=>{const ae=re.detail;d&&ae?.mode&&(B(ae.mode),_?.(ae.mode)),ae?.mode==="floating"&&ae.geometry&&S(ui(ae.geometry,p))};return $.addEventListener("bv-ui-set-window-state",Q),()=>$.removeEventListener("bv-ui-set-window-state",Q)},[d,p.height,p.width,_]),m.useEffect(()=>{e&&(j(!1),requestAnimationFrame(()=>I.current?.focus({preventScroll:!0})))},[c,e]),m.useEffect(()=>{const $=O.current;O.current=u,u&&S(Q=>ui(vw(Q,$,u),p))},[u?.height,u?.width,u?.x,u?.y,p.height,p.width]),m.useEffect(()=>{if(!e)return;const $=()=>S(Q=>ui(Q,p));return window.addEventListener("resize",$),()=>window.removeEventListener("resize",$)},[p.height,p.width,e]);const V=$=>{k!=="floating"||$.button!==0||$.target.closest("button,input,select,textarea")||(M.current={pointerId:$.pointerId,startX:$.clientX,startY:$.clientY,kind:"move",x:z.x,y:z.y},$.currentTarget.setPointerCapture($.pointerId),$.preventDefault())},F=$=>Q=>{k!=="floating"||Q.button!==0||(M.current={pointerId:Q.pointerId,startX:Q.clientX,startY:Q.clientY,kind:"resize",direction:$,geometry:z},Q.currentTarget.setPointerCapture(Q.pointerId),Q.preventDefault(),Q.stopPropagation())},ne=$=>{const Q=M.current;if(!Q||Q.pointerId!==$.pointerId)return;const re={x:$.clientX-Q.startX,y:$.clientY-Q.startY},ae={...p,width:Math.min(p.width,420)};S(Le=>ui(Q.kind==="move"?{...Le,x:Q.x+re.x,y:Q.y+re.y}:bw(Q.geometry,re,Q.direction,ae),p))},Y=$=>{M.current?.pointerId===$.pointerId&&(M.current=void 0,requestAnimationFrame(()=>v?.(R.current)))};if(!e)return null;const K=k==="workspace"?void 0:{left:z.x,top:z.y,width:z.width,height:z.height},Z=()=>{h(),requestAnimationFrame(()=>D.current?.focus({preventScroll:!0}))};return s.jsxs(s.Fragment,{children:[C&&s.jsx(ks,{title:t,onRestore:()=>j(!1),onClose:Z}),s.jsxs("div",{ref:I,tabIndex:-1,hidden:C,className:`bv-managed-window ${k} ${x}`.trim(),role:"dialog","aria-modal":k==="workspace","aria-label":t,style:K,onPointerDownCapture:()=>I.current&&Rp(I.current),onFocusCapture:()=>I.current&&Rp(I.current),onPointerMove:ne,onPointerUp:Y,onPointerCancel:Y,onKeyDown:$=>{if($.key==="Escape"&&![...document.querySelectorAll(".bv-anchored-popover,[role='listbox'],[role='menu']")].some(re=>re.offsetParent!==null)){$.preventDefault(),$.stopPropagation(),Z();return}$.stopPropagation()},children:[s.jsxs("div",{className:"bv-managed-window-surface",children:[s.jsx(u0,{title:t,shortTitle:y,context:r,center:n,mode:k,allowWorkspace:d,menuVisible:E,onMenuVisible:b,onMode:()=>{if(!d)return;const $=k==="workspace"?"floating":"workspace";B($),_?.($)},onMinimize:()=>j(!0),onClose:Z,onPointerDown:V}),s.jsx("div",{className:`bv-managed-window-body ${w}`.trim(),children:i}),(a||l)&&s.jsx(f0,{status:a??null,actions:l,stacked:k==="floating"&&z.width<700,minimal:k==="floating"&&z.width<470})]}),k==="floating"&&["n","ne","e","se","s","sw","w","nw"].map($=>s.jsx("div",{className:`bv-window-resize-handle ${$}`,"aria-hidden":"true",onPointerDown:F($)},$))]})]})}function f0({status:e,actions:t,warning:o=!1,stacked:r=!1,minimal:n=!1}){return s.jsxs("footer",{className:`bv-ui-window-footer${o?" has-warning":""}${r?" 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 Fu({primary:e,secondary:t,overflow:o=[]}){return s.jsxs("div",{className:"bv-footer-action-set",children:[t&&s.jsx("div",{className:"bv-footer-secondary-actions",children:t}),o.length>0&&s.jsx(Tu,{label:"More",actions:o,intent:"ghost",density:"compact"}),s.jsx("div",{className:"bv-footer-primary-action",children:e})]})}function ks({title:e,onRestore:t,onClose:o}){const r=m.useMemo(()=>{let n=document.getElementById("bv-ui-window-shelf");return n||(n=document.createElement("div"),n.id="bv-ui-window-shelf",n.className="bv-ui-window-shelf",document.body.append(n)),n},[]);return m.useEffect(()=>{const n="#graph-canvas, .graph-canvas-container, nav, aside, [role='navigation'], .side-tool-bar-container, .side-bar-panel",i=()=>{const u=document.querySelector("#graph-canvas, .graph-canvas-container")?.getBoundingClientRect()??null,p=[...document.querySelectorAll("nav, aside, [role='navigation'], .side-tool-bar-container, .side-bar-panel")].map(x=>x.getBoundingClientRect()),g=mw(u,p,{width:window.innerWidth,height:window.innerHeight});r.style.setProperty("--bv-ui-window-shelf-left",`${g.left}px`),r.style.setProperty("--bv-ui-window-shelf-bottom",`${g.bottom}px`)},a=new ResizeObserver(i),l=new Set,c=()=>document.querySelectorAll(n).forEach(f=>{l.has(f)||(l.add(f),a.observe(f))}),d=new MutationObserver(()=>{c(),i()});return c(),d.observe(document.body,{childList:!0,subtree:!0}),window.addEventListener("resize",i),i(),()=>{d.disconnect(),a.disconnect(),window.removeEventListener("resize",i)}},[r]),m.useEffect(()=>()=>{requestAnimationFrame(()=>{r.childElementCount||r.remove()})},[r]),Io.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(oo,{children:s.jsx("path",{d:"M12 3.5a8.5 8.5 0 1 0 8.5 8.5c0-3.2-2.1-5.7-5.1-5.7-2.4 0-4.1 1.7-4.1 3.8 0 1.7 1.2 2.9 2.8 2.9 1.4 0 2.4-.9 2.4-2.1"})})}),s.jsx("span",{children:e})]}),o&&s.jsx("button",{type:"button",className:"bv-ui-window-shelf-close","aria-label":`Close ${e}`,title:`Close ${e}`,onClick:o,children:s.jsx(oo,{children:s.jsx("path",{d:"m7 7 10 10M17 7 7 17"})})})]}),r)}function ba({label:e,value:t,options:o,onNavigate:r}){const n=m.useSyncExternalStore(fw,Yn,Yn),i=n==="keep",a=Av(),[l,c]=m.useState(!1),d=m.useRef(null),f=o.filter(E=>E.value!==t);if(!f.length)return null;const u=i?"Keep current window when switching. Hold Shift to replace once.":"Replace current window when switching. Hold Shift to keep once.",p=a.minimal,g=a.narrow,x=s.jsx(K_,{className:"bv-window-node-select",label:e,value:"",options:f,onValue:(E,b)=>r(E,b.shiftKey?i:!i)}),w=s.jsxs("button",{type:"button",role:"switch","aria-label":u,"aria-checked":i,className:"bv-window-switch-mode",title:u,onClick:()=>Mu(i?"replace":"keep"),children:[s.jsx("span",{className:"bv-toggle-track",children:s.jsx("span",{})}),s.jsx("span",{"aria-hidden":"true",children:i?"Keep":"Replace"})]});return s.jsxs("div",{className:"bv-window-navigator",children:[!p&&x,!g&&w,g&&s.jsxs("div",{ref:d,className:"bv-window-navigator-overflow",children:[s.jsx("button",{type:"button","aria-label":"More window navigation options","aria-expanded":l,onClick:()=>c(E=>!E),children:"•••"}),s.jsx(Cr,{open:l,anchor:d,onClose:()=>c(!1),className:"bv-window-navigator-menu",children:s.jsxs("div",{className:"bv-window-navigator-panel",children:[p&&s.jsx("div",{className:"bv-window-navigator-panel-row is-node",children:x}),s.jsxs("div",{className:"bv-window-navigator-panel-row is-mode",children:[s.jsx("span",{children:"Keep current window"}),w]})]})})]})]})}function Dv({onClick:e,storageId:t,editorType:o="regional"}){const[r,n]=m.useState(null),[i,a]=m.useState(""),[l,c]=m.useState(0),d=Su();if(!t)return s.jsxs("button",{type:"button",className:"bv-ui-button bv-ui-button--secondary bv-ui-window-reset",title:"Restore the default panel arrangement",onClick:e,children:[s.jsx(oo,{children:s.jsx("path",{d:"M4.9 9A7.5 7.5 0 1 1 5 15M4 4v5h5"})}),s.jsx("span",{children:"Reset layout"})]});const f=zu(o),u=xi(t),p=f.profiles.find(h=>h.id===u?.profileId),g=()=>c(h=>h+1),x=()=>{if(!u)return;const h=Ap({id:r==="rename"?p?.id:void 0,name:i,editorType:o,editorVersion:"1",library:Dp,signature:`${o}:v1`,layout:u.layout});ll(t,u.layout,"saved",h.id),n(null),g()},w={editorType:o,editorVersion:"1",library:Dp,signature:`${o}:v1`},E=(h,v)=>u?.status==="modified"?d.confirm({title:"Replace modified layout?",message:`Structural panel changes in this session will be discarded when switching to ${h}.`,confirmLabel:"Switch layout",danger:!0,action:v}):v(),b=[{id:"factory",label:"Factory layout",onSelect:()=>E("Factory",e)},...f.profiles.map(h=>{const v=r0(h,w);return{id:h.id,label:`${h.name}${v?"":" · Incompatible"}`,onSelect:()=>E(h.name,()=>{if(!v){e(),Oo({title:"Layout could not be loaded",message:"The saved layout belongs to an incompatible editor version. Factory layout was restored.",tone:"warning",duration:5e3});return}ll(t,h.layout,"saved",h.id)})}}),{id:"save-as",label:"Save as new layout…",disabled:!u,onSelect:()=>{a(""),n("save")}},...p?[{id:"update",label:`Update ${p.name}`,onSelect:()=>{u&&(Ap({...p,layout:u.layout}),ll(t,u.layout,"saved",p.id),g())}},{id:"rename",label:"Rename layout…",onSelect:()=>{a(p.name),n("rename")}},{id:"delete",label:"Delete layout",danger:!0,onSelect:()=>{t0(o,p.id),e(),g()}}]:[]];return s.jsxs(s.Fragment,{children:[s.jsx(Tu,{label:`${p?.name??"Factory"}${u?.status&&u.status!=="saved"?` · ${u.status[0].toUpperCase()}${u.status.slice(1)}`:""}`,icon:s.jsx(oo,{children:s.jsx("path",{d:"M4 5h16v14H4zM8 5v14M8 10h12"})}),actions:b}),s.jsx(fa,{open:!!r,title:r==="rename"?"Rename layout":"Save layout",onClose:()=>n(null),footer:s.jsx(se,{intent:"primary",onClick:x,children:r==="rename"?"Rename":"Save layout"}),children:s.jsx(on,{label:"Layout name",value:i,maxLength:40,onValue:a})}),d.dialog]})}const Mv=new Map;let jv;function qo(e,t){const o=String(t);o&&Mv.set(e,o),o&&e!=="quick"&&(jv=e)}function p0(){return jv}function zr(e){return Mv.get(e)}function Ul({label:e,value:t,onImport:o,allowImport:r=!0}){const[n,i]=m.useState(!1),[a,l]=m.useState(""),[c,d]=m.useState(""),f=async()=>{try{await navigator.clipboard.writeText(JSON.stringify(t,null,2)),Oo({title:"Draft copied",message:`${e} draft JSON was copied to the clipboard.`,tone:"success",duration:4e3})}catch{Oo({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)}},u=()=>{try{const g=JSON.parse(a);o(g),i(!1),d("")}catch(g){d(g instanceof Error?g.message:"Invalid draft JSON")}},p=()=>{l(""),d(""),i(!0)};return s.jsxs(s.Fragment,{children:[s.jsx(se,{intent:"ghost",onClick:f,children:"Copy draft"}),r&&s.jsx(se,{intent:"ghost",onClick:p,children:"Import draft"}),s.jsx(fa,{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(se,{intent:"ghost",iconOnly:!0,"aria-label":"Paste from clipboard",title:"Paste from clipboard",onClick:async()=>{try{l(await navigator.clipboard.readText())}catch{d("Clipboard permission was not granted.")}},children:"⌘"}),s.jsx(se,{intent:"primary",onClick:u,children:"Import draft"})]}),children:s.jsx(X_,{label:"Draft JSON",value:a,rows:14,resize:"vertical",error:c,onValue:l})})]})}const Bo=(e,t)=>JSON.stringify(e)===JSON.stringify(t),Ar=e=>e?.id??e?.key;function md(e,t,o,r="draft"){if(Bo(o,e))return{ok:!0,value:structuredClone(t)};if(Bo(t,e))return{ok:!0,value:structuredClone(o)};if(Bo(t,o))return{ok:!0,value:structuredClone(t)};if(Array.isArray(e)&&Array.isArray(t)&&Array.isArray(o)){if(![...e,...t,...o].every(w=>Ar(w)!=null))return{ok:!1,reason:`Concurrent list change at ${r}`};const n=e.map(Ar),i=t.map(Ar),a=o.map(Ar),l=!Bo(n,i.filter(w=>n.includes(w))),c=!Bo(n,a.filter(w=>n.includes(w)));if(l&&c&&!Bo(i,a))return{ok:!1,reason:`Concurrent reorder at ${r}`};const d=new Map(e.map(w=>[Ar(w),w])),f=new Map(t.map(w=>[Ar(w),w])),u=new Map(o.map(w=>[Ar(w),w])),p=l?i:a,g=[...p,...i,...a].filter((w,E,b)=>b.indexOf(w)===E),x=[];for(const w of g){const E=d.get(w),b=f.get(w),h=u.get(w);if(E&&b&&!h&&!Bo(E,b))return{ok:!1,reason:`Edited item ${w} was removed externally`};if(E&&!b&&h&&!Bo(E,h))return{ok:!1,reason:`Removed item ${w} changed externally`};if(!b&&!h)continue;if(!E){if(b&&h&&!Bo(b,h))return{ok:!1,reason:`Item ${w} was added differently`};x.push(structuredClone(b??h));continue}if(!b||!h){x.push(structuredClone(b??h));continue}const v=md(E,b,h,`${r}.${w}`);if(!v.ok)return v;x.push(v.value)}return{ok:!0,value:x}}if(e&&t&&o&&typeof e=="object"&&typeof t=="object"&&typeof o=="object"){const n={};for(const i of new Set([...Object.keys(e),...Object.keys(t),...Object.keys(o)])){const a=md(e[i],t[i],o[i],`${r}.${i}`);if(!a.ok)return a;n[i]=a.value}return{ok:!0,value:n}}return{ok:!1,reason:`Concurrent value change at ${r}`}}function h0(){const[e,t]=m.useState(tn);m.useEffect(()=>{const r=n=>t(n.detail);return window.addEventListener(Hn,r),()=>window.removeEventListener(Hn,r)},[]);const o=(r,n)=>ku({...e,controls:e.controls.map(i=>i.id===r?{...i,enabled:n}:i)});return e.controls.length?s.jsx("div",{className:"bv-control-live-list",children:e.controls.map(r=>s.jsx(Go,{label:r.name,checked:r.enabled,onValue:n=>o(r.id,n)},r.id))}):s.jsx(jo,{tone:"info",title:"No controls configured",children:"Create a control in Configuration before using live workflow states."})}const g0=({open:e,onClose:t,hasControlNodes:o=!0})=>{const[r,n]=m.useState(0),i=tn().controls.length>0,a=m.useMemo(()=>({global:{tabEnableClose:!1,tabEnableDrag:!1,tabEnablePopout:!1,tabEnablePopoutIcon:!1,tabEnableFloat:!1},borders:[],layout:{type:"row",children:[{type:"tabset",selected:i?0:1,children:[{type:"tab",id:"control-center-controls",name:"Controls",component:"controls",enableClose:!1,enableDrag:!1},{type:"tab",id:"control-center-configuration",name:"Configuration",component:"configuration",enableClose:!1,enableDrag:!1}]}]}}),[i]);return s.jsxs(ti,{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(Dv,{storageId:"control-center",editorType:"control-center",onClick:()=>n(l=>l+1)}),children:[!o&&s.jsx(jo,{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(Cv,{storageId:"control-center",resetSignal:r+(i?0:1),defaultModel:a,panels:[{id:"controls",title:"Controls",weight:1,content:s.jsx(h0,{})},{id:"configuration",title:"Configuration",weight:1,content:s.jsx(cw,{})}]})]})},Iv=()=>globalThis.__bvSmartPipeEditorBridge??{},Uu=e=>String(e?.type??e?.comfyClass??""),ic=e=>Uu(e)==="BV Smart Pipe Merge"?"merge":"pipe",Wl=()=>Nt().rootGraph??Nt().graph,jp=()=>ju(Wl(),e=>["BV Smart Pipe","BV Smart Pipe Merge"].includes(Uu(e)));function b0(){const[e,t]=m.useState([]),[o,r]=m.useState(null),[n,i]=m.useState(0),[a,l]=m.useState({}),c=m.useRef(new Map),[d,f]=m.useState(null),u=()=>({mode:"floating",geometry:{x:Math.max(16,(window.innerWidth-860)/2),y:Math.max(16,(window.innerHeight-650)/2),width:860,height:650}}),p=E=>`${E.kind}:${ea(Wl(),E.node)}`,g=(E,b)=>c.current.get(E)?.dirty?f({key:E,action:b}):b(),x=(E,b)=>{const h=p(E),v=o,_=()=>{qo(E.kind,ea(Wl(),E.node)),t(y=>{const T=b&&v&&v!==h?y.filter(L=>L.key!==v):y;return T.some(L=>L.key===h)?T:[...T,{key:h,target:E}]}),l(y=>({...y,[h]:v&&y[v]?structuredClone(y[v]):y[h]??u()})),r(h),i(y=>y+1)};b&&v&&v!==h?g(v,_):_()},w=E=>g(E,()=>{c.current.delete(E),t(b=>b.filter(h=>h.key!==E)),l(b=>{const h={...b};return delete h[E],h}),r(b=>b===E?null:b)});return m.useEffect(()=>{const E=b=>{const h=b.detail;h?.node&&x({node:h.node,kind:h.kind??ic(h.node)},Yn()==="replace")};return window.addEventListener("bv-open-smart-pipe-editor",E),()=>window.removeEventListener("bv-open-smart-pipe-editor",E)}),s.jsxs(s.Fragment,{children:[e.map(E=>{const b=a[E.key]??u();return s.jsx(v0,{sessionKey:E.key,target:E.target,open:E.key===o,activation:n,presentation:b,onPresentation:h=>l(v=>({...v,[E.key]:h})),onActions:h=>c.current.set(E.key,h),onClose:()=>w(E.key),onRemap:h=>t(v=>v.map(_=>_.key===E.key?{..._,target:{node:h,kind:ic(h)}}:_)),onNavigate:(h,v)=>x({node:h,kind:ic(h)},v)},E.key)}),e.filter(E=>E.key!==o).map(E=>s.jsx(ks,{title:`${E.target.kind==="merge"?"Smart Pipe Merge":"Smart Pipe Editor"} · ${E.target.node.title||`#${E.target.node.id}`}`,onRestore:()=>x(E.target,!1),onClose:()=>w(E.key)},`shelf:${E.key}`)),s.jsx(Ru,{open:!!d,editorName:"Smart Pipe editor",onKeep:()=>f(null),onDiscard:()=>{const E=d;E&&c.current.get(E.key)?.discard(),f(null),E?.action()},onSave:()=>{const E=d;E&&c.current.get(E.key)?.save(),f(null),E?.action()}})]})}function v0({sessionKey:e,target:t,open:o,activation:r,presentation:n,onPresentation:i,onActions:a,onClose:l,onRemap:c,onNavigate:d}){const f=Iv()[t.kind],u=m.useMemo(()=>f?.read(t.node)??{},[f,t.node]),p=ms(u),g=p.value;xs(p);const x=m.useRef(structuredClone(u)),w=m.useRef(!1),[E,b]=m.useState(null),h=m.useMemo(()=>ea(Wl(),t.node),[t.node]);m.useEffect(()=>{const z=()=>{const S=jp().find(D=>D.key===h);if(!S){b("missing");return}if(S.node!==t.node){c(S.node);return}if(w.current)return;const k=f?.read(t.node)??{};if(JSON.stringify(k)===JSON.stringify(x.current))return;if(!p.canUndo){x.current=structuredClone(k),p.replace(k,!0),b(null);return}const I=md(x.current,g,k);I.ok?(x.current=structuredClone(k),p.replace(I.value)):b(I.reason)};return Qi().addEventListener("graphChanged",z),()=>Qi().removeEventListener("graphChanged",z)},[f,g,p.canUndo,p.replace,c,t.node,h]);const v=ga(t.node),_=jp(),y=_.filter(z=>sn(z.node)).map(z=>({value:z.key,label:`${z.breadcrumb?`${z.breadcrumb} › `:""}${z.node.title||Uu(z.node)} · #${z.node.id}`})),T=z=>p.commit(S=>(z(S),S)),L=t.kind==="pipe"?f?.validation?.(t.node,g)??[]:[],B=()=>{w.current=!0;try{f?.save(t.node,g);const z=f?.read(t.node)??g;x.current=structuredClone(z),p.replace(z,!0),b(null)}finally{w.current=!1}},C=()=>{const z=f?.read(t.node)??{};x.current=structuredClone(z),p.replace(z,!0),b(null)};m.useEffect(()=>{a({dirty:p.canUndo,save:B,discard:C})},[f,g,p.canUndo,p.replace,a,e,t.node]);const j=s.jsx(ba,{label:"Smart Pipe node",value:_.find(z=>z.node===t.node)?.key??"",options:y,onNavigate:(z,S)=>{const k=_.find(I=>I.key===z);k&&d(k.node,S)}});return s.jsx(ti,{open:o,activationToken:r,title:t.kind==="merge"?"Smart Pipe Merge":"Smart Pipe Editor",shortTitle:"Smart Pipe",menuVisible:v,onMenuVisible:z=>Qn(t.node,z),context:j,mode:n.mode,initialGeometry:n.geometry,onModeChange:z=>i({...n,mode:z}),onGeometry:z=>i({...n,geometry:z}),minSize:{width:420,height:360},onClose:l,status:L.length?"Required inputs missing":p.canUndo?"Unsaved changes":"Saved",actions:s.jsx(Fu,{primary:s.jsx(se,{intent:"primary",onClick:B,children:"Save"}),secondary:s.jsxs(s.Fragment,{children:[s.jsx(se,{disabled:!p.canUndo,onClick:C,children:"Discard"}),s.jsx(Ul,{label:t.kind==="merge"?"Smart Pipe Merge":"Smart Pipe",value:{schema:"bv.editor-draft",version:1,type:t.kind,data:g},onImport:z=>{if(z?.schema!=="bv.editor-draft"||z?.version!==1||z?.type!==t.kind||!z?.data)throw new Error("Draft type or version does not match this editor.");p.replace(z.data)}})]}),overflow:[{id:"undo",label:"Undo",disabled:!p.canUndo,onSelect:p.undo},{id:"redo",label:"Redo",disabled:!p.canRedo,onSelect:p.redo}]}),children:E?s.jsxs(jo,{tone:"danger",title:E==="missing"?"Node no longer exists":"Smart Pipe changed externally",children:[E==="missing"?"This draft cannot be saved because its workflow node was removed.":"An external change could not be migrated safely. Reload the editor to discard the incompatible draft.",s.jsxs("div",{className:"bv-callout-actions",children:[s.jsx(Ul,{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(se,{onClick:()=>{if(E==="missing")l();else{const z=f?.read(t.node)??{};x.current=structuredClone(z),p.replace(z,!0),b(null)}},children:E==="missing"?"Close window":"Reload editor"})]})]}):t.kind==="pipe"?s.jsx(m0,{node:t.node,draft:g,update:T}):s.jsx(x0,{draft:g,update:T})})}function m0({node:e,draft:t,update:o}){const r=Iv().pipe,[n,i]=m.useState(()=>r?.predecessor(e)??{value:"Start new pipe",options:[]}),a=r?.validation?.(e,t)??[];m.useEffect(()=>{const u=()=>i(r?.predecessor(e)??{value:"Start new pipe",options:[]});Qi().addEventListener("graphChanged",u);const p=window.setInterval(u,750);return()=>{Qi().removeEventListener("graphChanged",u),window.clearInterval(p)}},[r,e]);const l=t.definition?.localSlots??[],c=t.projection?.inheritedSlots??[],d=[...l.map((u,p)=>({id:u.id,title:u.name||"New slot",description:"Local · input required",summary:u.type||"*",content:s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(on,{label:"Name",value:u.name??"",onValue:g=>o(x=>{x.definition.localSlots[p].name=g})}),s.jsx(on,{label:"Type",value:u.type??"*",onValue:g=>o(x=>{x.definition.localSlots[p].type=g||"*"})}),s.jsx(Go,{label:"Expose output",checked:!!u.showOutput,onValue:g=>o(x=>{x.definition.localSlots[p].showOutput=g})})]})})),...c.map((u,p)=>({id:u.id,title:u.name||u.id,description:"Inherited override",content:s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(Go,{label:"Expose input",checked:!!u.showInput,onValue:g=>o(x=>{x.projection.inheritedSlots[p].showInput=g})}),s.jsx(Go,{label:"Expose output",checked:!!u.showOutput,onValue:g=>o(x=>{x.projection.inheritedSlots[p].showOutput=g})})]})}))],f=()=>o(u=>{u.definition.localSlots.push({id:crypto.randomUUID(),name:"new_slot",ordinal:u.definition.nextOrdinal++,type:"*",showInput:!0,showOutput:!1})});return s.jsxs("div",{className:"bv-ui-stack",children:[s.jsx(ft,{label:"Pipe predecessor",value:n.value,options:n.options.length?n.options:[{value:n.value,label:n.value}],onValue:u=>{r?.setPredecessor(e,u),i(r?.predecessor(e)??{value:u,options:n.options})}}),a.length>0&&s.jsx(jo,{tone:"danger",title:"Required Smart Pipe inputs are missing",children:a.map(u=>s.jsx("div",{children:u.message},u.id))}),s.jsx(se,{onClick:f,children:"Add slot"}),d.length?s.jsx(bs,{items:d,onReorder:u=>o(p=>{const g=new Map(p.definition.localSlots.map(x=>[x.id,x]));p.definition.localSlots=u.map(x=>g.get(x.id)).filter(Boolean)}),onRemove:u=>o(p=>{p.definition.localSlots=p.definition.localSlots.filter(g=>g.id!==u),p.projection.inheritedSlots=p.projection.inheritedSlots.filter(g=>g.id!==u)})}):s.jsx(vs,{title:"No slots",description:"Add a local slot or connect a predecessor."})]})}function x0({draft:e,update:t}){const o=e.sources??[],[r,n]=m.useState(""),i=o.map(c=>({id:c.key,title:c.label||c.key,description:c.mode==="wired"?"Wired":"Wireless"})),a=e.candidates?.find(c=>c.address===r),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(ft,{label:"Wireless source",value:r,options:(e.candidates??[]).map(c=>({value:c.address,label:c.label})),onValue:n}),s.jsx(se,{disabled:!a,onClick:l,children:"Add"})]}),i.length?s.jsx(bs,{items:i,onReorder:c=>t(d=>{const f=new Map(d.sources.map(u=>[u.key,u]));d.sources=c.map(u=>f.get(u.id)).filter(Boolean)}),onRemove:c=>t(d=>{d.sources=d.sources.filter(f=>f.key!==c)})}):s.jsx(vs,{title:"No merge sources",description:"Connect a pipe or add a wireless source."})]})}const y0=`:root{--bv-primary-color: #8d70ff;--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: #2980b9;--bv-secondary-color: #34495e;--bv-text-color: #2c3e50;--bv-accent-color: #c0392b;--bv-bg-color: #ecf0f1;--bv-border-color: #bdc3c7;--bv-muted-text-color: #7f8c8d}.bv-modal{position:fixed;inset:0;z-index:var(--bv-layer-modal);display:grid;place-items:center;padding:24px;background:#0009;font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;color:var(--bv-text-color)}.bv-modal *{box-sizing:border-box}:root{--bv-ui-scale:1.125}:root.bv-ui-size-compact{--bv-ui-scale:1}:root.bv-ui-size-default{--bv-ui-scale:1.125}:root.bv-ui-size-large{--bv-ui-scale:1.25}.bv-ui,#bv-root,.bv-ui-portal,.bv-completion-popup{--bv-ui-bg:#121116;--bv-ui-surface:#1e1c24;--bv-ui-surface-raised:#24212b;--bv-ui-input:#17161b;--bv-ui-text:#f2eef8;--bv-ui-muted:#aaa2b5;--bv-ui-border:rgba(231,225,247,.14);--bv-ui-border-hover:rgba(231,225,247,.25);--bv-ui-accent:#8d70ff;--bv-ui-accent-hover:#9a82ff;--bv-ui-danger:#d35d71;--bv-ui-warning:#e9b65f;--bv-ui-success:#55c994;--bv-ui-control-height-comfortable:calc(42px * var(--bv-ui-scale));--bv-ui-control-height-compact:calc(30px * var(--bv-ui-scale));--bv-ui-control-height:var(--bv-ui-control-height-compact);--bv-ui-field-gap-comfortable:calc(6px * var(--bv-ui-scale));--bv-ui-field-gap-compact:calc(4px * var(--bv-ui-scale));--bv-ui-field-gap:var(--bv-ui-field-gap-compact);--bv-ui-content-padding-comfortable:calc(11px * var(--bv-ui-scale));--bv-ui-content-padding-compact:calc(8px * var(--bv-ui-scale));--bv-ui-content-padding:var(--bv-ui-content-padding-compact);--bv-ui-row-height-comfortable:calc(38px * var(--bv-ui-scale));--bv-ui-row-height-compact:calc(30px * var(--bv-ui-scale));--bv-ui-row-height:var(--bv-ui-row-height-compact);--bv-ui-textarea-height-comfortable:calc(100px * var(--bv-ui-scale));--bv-ui-textarea-height-compact:calc(76px * var(--bv-ui-scale));--bv-ui-textarea-height:var(--bv-ui-textarea-height-compact);--bv-ui-check-size-comfortable:calc(18px * var(--bv-ui-scale));--bv-ui-check-size-compact:calc(16px * var(--bv-ui-scale));--bv-ui-check-size:var(--bv-ui-check-size-compact);--bv-ui-radius-sm:calc(2px * var(--bv-ui-scale));--bv-ui-radius:calc(4px * var(--bv-ui-scale));--bv-ui-radius-lg:calc(6px * var(--bv-ui-scale));color:var(--bv-ui-text);font:calc(12px * var(--bv-ui-scale))/1.45 system-ui,-apple-system,"Segoe UI",sans-serif}.bv-density-comfortable{--bv-ui-control-height:var(--bv-ui-control-height-comfortable);--bv-ui-field-gap:var(--bv-ui-field-gap-comfortable);--bv-ui-content-padding:var(--bv-ui-content-padding-comfortable);--bv-ui-row-height:var(--bv-ui-row-height-comfortable);--bv-ui-textarea-height:var(--bv-ui-textarea-height-comfortable);--bv-ui-check-size:var(--bv-ui-check-size-comfortable)}.bv-density-compact{--bv-ui-control-height:var(--bv-ui-control-height-compact);--bv-ui-field-gap:var(--bv-ui-field-gap-compact);--bv-ui-content-padding:var(--bv-ui-content-padding-compact);--bv-ui-row-height:var(--bv-ui-row-height-compact);--bv-ui-textarea-height:var(--bv-ui-textarea-height-compact);--bv-ui-check-size:var(--bv-ui-check-size-compact)}:is(.bv-ui,#bv-root,.bv-ui-portal),:is(.bv-ui,#bv-root,.bv-ui-portal) *,:is(.bv-ui,#bv-root,.bv-ui-portal) *:before,:is(.bv-ui,#bv-root,.bv-ui-portal) *:after{box-sizing:border-box}:is(.bv-ui,#bv-root,.bv-ui-portal) :where(button,input,select,textarea){box-sizing:border-box;margin:0;font:inherit;color:inherit;letter-spacing:inherit}:is(.bv-ui,#bv-root,.bv-ui-portal) :where(button){appearance:none}.bv-ui-dialog{width:min(680px,calc(100vw - 32px));max-height:min(86vh,900px);margin:auto;padding:0;overflow:hidden;color:var(--bv-ui-text);background:var(--bv-ui-surface);border:1px solid var(--bv-ui-border-hover);border-radius:var(--bv-ui-radius-lg);box-shadow:0 28px 90px #000c}.bv-ui-dialog--small{width:min(480px,calc(100vw - 32px))}.bv-ui-dialog--large{width:min(1040px,calc(100vw - 32px))}.bv-ui-dialog::backdrop{background:#08070a9e}.bv-ui-overlay{position:fixed;z-index:var(--bv-layer-modal);inset:0;display:grid;place-items:center;padding:16px;background:#08070a9e}.bv-ui-overlay--modeless{pointer-events:none;place-items:start end;background:transparent}.bv-ui-overlay--modeless>.bv-ui-dialog{pointer-events:auto}.bv-ui-dialog__header{display:flex;align-items:flex-start;gap:16px;padding:calc(15px * var(--bv-ui-scale)) calc(17px * var(--bv-ui-scale));background:var(--bv-ui-surface-raised);border-bottom:1px solid var(--bv-ui-border)}.bv-ui-dialog__header>div{min-width:0;flex:1}.bv-ui-dialog__header h2,.bv-ui-dialog__header p{margin:0}.bv-ui-dialog__header h2{font-size:calc(16px * var(--bv-ui-scale));line-height:1.3}.bv-ui-dialog__header p{margin-top:4px;color:var(--bv-ui-muted);font-size:calc(11px * var(--bv-ui-scale))}.bv-ui-dialog__body{display:grid;gap:calc(13px * var(--bv-ui-scale));max-height:calc(86vh - 132px);padding:calc(17px * var(--bv-ui-scale));overflow:auto}.bv-ui-dialog__footer{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:calc(8px * var(--bv-ui-scale));padding:calc(11px * var(--bv-ui-scale)) calc(17px * var(--bv-ui-scale));background:var(--bv-ui-surface-raised);border-top:1px solid var(--bv-ui-border)}.bv-ui-button{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:var(--bv-ui-control-height);padding:0 calc(13px * var(--bv-ui-scale));color:var(--bv-ui-text);background:var(--bv-ui-surface-raised);border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius);cursor:pointer;transition:background-color .12s ease,border-color .12s ease,transform .08s ease}.bv-ui-button:hover:not(:disabled){background:#302d39;border-color:var(--bv-ui-border-hover)}.bv-ui-button:active:not(:disabled){transform:translateY(1px)}.bv-ui-button:focus-visible{outline:3px solid rgba(141,112,255,.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 #8d70ff2e}.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:#2c2835;--flexlayout-color-4:#393343;--flexlayout-color-5:#4b4160;--flexlayout-color-6:#62537b;--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:#8065e8;--flexlayout-color-splitter-drag:#9a7dff;--flexlayout-color-splitter-handle:#c0afff;--flexlayout-color-drag1:#a991ff;--flexlayout-color-drag2:#72a7ff;--flexlayout-color-drag1-background:rgba(141,112,255,.2);--flexlayout-color-drag2-background:rgba(82,133,224,.18);--flexlayout-color-drag-rect-border:#9a7dff;--flexlayout-color-drag-rect-background:var(--bv-ui-surface-raised);--flexlayout-color-drag-rect:var(--bv-ui-text);--flexlayout-color-edge-marker:rgba(141,112,255,.72);--flexlayout-color-edge-icon:#fff;--flexlayout-color-toolbar-button-hover:rgba(141,112,255,.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 #8d70ff52}.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:#8d70ff09;stroke:var(--bv-ui-accent);stroke-width:2;stroke-dasharray:7 5;vector-effect:non-scaling-stroke;filter:drop-shadow(0 0 3px rgba(141,112,255,.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:#c7baff;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:#8d70ff3d;color:var(--bv-ui-text)}.bv-completion-popup button:hover small,.bv-completion-popup button.active small{color:#dcefff}.bv-completion-popup small{overflow:hidden;color:var(--bv-ui-muted);font-size:calc(10px * var(--bv-ui-scale));text-overflow:ellipsis;white-space:nowrap}.completion-menu{min-width:320px}.completion-dataset-picker{display:grid;gap:6px;padding:5px 8px 8px}.completion-dataset-picker>label{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:7px}.completion-dataset-picker>label span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.completion-dataset-picker>label small{color:var(--bv-muted-text-color)}.completion-dataset-picker .dataset-error{color:#ffaca6;white-space:normal}.bv-settings-datasets{display:grid;gap:8px;width:min(680px,100%)}.bv-settings-datasets>small{color:var(--descrip-text, #a1a1aa)}.bv-settings-datasets>div{display:grid;gap:6px}.bv-settings-datasets label{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:9px;padding:7px 9px;border:1px solid var(--border-color, #ffffff24);border-radius:var(--bv-ui-radius)}.bv-settings-datasets label span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bv-settings-datasets label small{color:var(--descrip-text, #a1a1aa)}.bv-settings-datasets .dataset-error{color:#ffaca6}.dataset-order{display:inline-flex;gap:3px}.dataset-order button{min-width:24px;padding:1px 5px}.bv-regional-error{margin:20px;padding:15px;color:#ffaca6;border:1px solid #ff756d;border-radius:var(--bv-ui-radius)}.editor-menus{display:flex;align-items:center;gap:2px}.menu-item{position:relative}.editor-menus>.menu-item>button{padding:4px 7px;border-color:transparent;background:transparent}.menu-popover,.toolbar-popover{position:absolute;z-index:20;top:calc(100% + 5px);left:0;display:grid;min-width:230px;padding:7px;border:1px solid var(--bv-border-color);border-radius:var(--bv-ui-radius);background:var(--comfy-menu-bg, #20242a);box-shadow:0 12px 35px #000b}.menu-popover button{display:flex;justify-content:space-between;border-color:transparent;background:transparent;text-align:left}.menu-popover button:hover{background:#ffffff12}.menu-popover hr{width:100%;border:0;border-top:1px solid #ffffff18}.menu-popover kbd{color:var(--bv-muted-text-color)}.view-menu label{display:grid;grid-template-columns:1fr auto;gap:7px}.view-menu input{grid-column:1 / -1;width:100%;padding:0}.view-menu small{padding:5px 7px;color:var(--bv-muted-text-color)}.help-menu{width:min(680px,calc(100vw - 40px));grid-template-columns:repeat(2,minmax(280px,1fr));gap:18px}.help-section{min-width:0}.help-section strong{display:block;margin-bottom:8px}.help-section dl{display:grid;grid-template-columns:minmax(135px,auto) minmax(110px,1fr);gap:5px 12px;margin:0}.help-section dt{color:#8fd2ff;white-space:nowrap}.help-section dd{min-width:0;margin:0;color:var(--bv-muted-text-color)}@media (max-width: 720px){.help-menu{width:calc(100vw - 40px);grid-template-columns:1fr;max-height:calc(100vh - 90px);overflow:auto}}.help-button{width:29px;border-radius:50%!important}.toolbar-popover-anchor{position:relative}.toolbar-popover{right:0;left:auto;gap:7px}.toolbar-popover label{display:grid;grid-template-columns:65px 1fr;align-items:center}.toolbar-popover input{width:120px!important}.panel-splitter{position:relative;cursor:col-resize;background:#ffffff0b;border-left:1px solid #ffffff12;border-right:1px solid #0008}.panel-splitter:hover,.panel-splitter:active{background:var(--bv-primary-color)}.bv-regional-shell main>aside{min-width:0}.bv-regional-shell .layers{display:flex;flex-direction:column;padding:8px}.panel-toolbar{display:flex;align-items:center;gap:3px;margin-bottom:7px;padding:4px;background:#ffffff06;border:1px solid var(--bv-ui-border);border-radius:var(--bv-ui-radius)}.panel-toolbar-spacer{flex:1}.panel-toolbar .panel-tool{display:flex;align-items:center;justify-content:center;gap:5px;min-width:28px;height:28px;min-height:28px;padding:0 6px;color:var(--bv-ui-muted);background:transparent;border:1px solid transparent;border-radius:var(--bv-ui-radius-sm)}.panel-toolbar .panel-tool.primary{color:#d9d1ff;background:#8d70ff1c;border-color:#8d70ff33}.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(141,112,255,.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:#8d70ff24;border-color:#8d70ff5c;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:#c6b9ff;background:#8d70ff29}.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:#8d70ff24!important;outline:1px solid rgba(141,112,255,.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 #8d70ff1f}.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:#d8d0ff;background:#8d70ff21;border:1px solid rgba(141,112,255,.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-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:#8d70ff12;border-color:#8d70ff57;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-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:#8d70ff4d}.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:#8d70ff59;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:#c9bcff}.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:#d8d0ff;background:#8d70ff24;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(169,145,255,.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:#8d70ff24}.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(141,112,255,.55);background:#8d70ff12}.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 #8d70ff61}.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 #8d70ff2e}.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 #8d70ff2e}.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 #8d70ff2e}.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 #8d70ff2e}.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:#8d70ff24;border-color:#8d70ff38}.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:#8d70ff1f}@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:#8d70ff1f}.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:#8d70ff59;border-color:var(--bv-ui-accent)}.bv-toggle[aria-checked=true] .bv-toggle-track>span{translate:19px;background:#c9bcff}.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:#8d70ff33;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:#8d70ff29;border:1px solid rgba(141,112,255,.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:#ded7ff;background:#8d70ff2e}.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:#8d70ff26;border-color:#8d70ff6b}.bv-tree [role=group]{margin-left:17px;padding-left:8px;border-left:1px solid rgba(141,112,255,.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),#6f9cff);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:#8d70ff24;border-color:#8d70ff40}.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:#8d70ff24;border-color:#8d70ff3d}.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:#c7baff}}.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}`,_0='.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 w0(e){return!e||!e.enabled||e.authoring.locked?null:e.id}function k0(e,t,o=3){return Math.hypot(t.x-e.x,t.y-e.y)>=o}function E0(e,t,o,r=12){return e>=3&&Math.hypot(o.x-t.x,o.y-t.y)<=r}function T0(e){return[...e].sort((t,o)=>o.priority-t.priority)}function R0(e){e.forEach((t,o)=>{t.priority=o})}function S0(e){return e==="draw-brush"}function Ip(e){return[...e].sort((t,o)=>t.priority-o.priority)}const L0=[{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 C0({geometry:e,canvas:t}){const o=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:o});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:o});if(e.type==="polygon")return s.jsx("polygon",{points:e.points.map(c=>`${c.x*t.width},${c.y*t.height}`).join(" "),fill:o});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:o,mask:`url(#${c})`})]})}const r=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],d=n*c.pressure,f=e.shape==="square"?s.jsx("rect",{x:c.x*t.width-d/2,y:c.y*t.height-d/2,width:d,height:d,fill:o,fillOpacity:e.opacity,filter:l}):s.jsx("circle",{cx:c.x*t.width,cy:c.y*t.height,r:d/2,fill:o,fillOpacity:e.opacity,filter:l}),u=d*e.hardness;return s.jsxs(s.Fragment,{children:[s.jsx("defs",{children:l&&s.jsx("filter",{id:i,filterUnits:"userSpaceOnUse",x:"0",y:"0",width:t.width,height:t.height,children:s.jsx("feGaussianBlur",{stdDeviation:a})})}),f,u>0&&(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:o,fillOpacity:e.opacity}):s.jsx("circle",{cx:c.x*t.width,cy:c.y*t.height,r:u/2,fill:o,fillOpacity:e.opacity}))]})}if((e.pressure_mode??"constant")==="constant"){const c=e.points.map((d,f)=>`${f?"L":"M"}${d.x*t.width},${d.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:o,strokeOpacity:e.opacity,strokeWidth:n,strokeLinecap:r,strokeLinejoin:r==="round"?"round":"miter",filter:l}),e.hardness>0&&s.jsx("path",{d:c,fill:"none",stroke:o,strokeOpacity:e.opacity,strokeWidth:n*e.hardness,strokeLinecap:r,strokeLinejoin:r==="round"?"round":"miter"})]})}return s.jsx(s.Fragment,{children:e.points.slice(1).map((c,d)=>{const f=e.points[d],u=(f.pressure+c.pressure)/2;return s.jsx("line",{x1:f.x*t.width,y1:f.y*t.height,x2:c.x*t.width,y2:c.y*t.height,stroke:o,strokeOpacity:e.opacity,strokeWidth:n*u,strokeLinecap:r},d)})})}function N0({geometry:e,canvas:t,cursor:o,activePolygon:r}){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,...r&&o?[o]:[]],l=r?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,d)=>s.jsx("circle",{className:`tool-preview-vertex ${e.operation}`,cx:c.x*t.width,cy:c.y*t.height,r:"4"},d))]})}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 O0({region:e,geometries:t,canvas:o,opacity:r,resolved:n}){const i=ow(t).filter(d=>d.enabled&&(n||d.geometries.some((f,u)=>io(f,u).visible))),a=`bv-feather-${e.id}`,l=Math.min(64,Math.round(e.mask.feather*Math.min(o.width,o.height))),c=l/3;return s.jsxs("g",{opacity:r,children:[n&&l>0&&s.jsx("defs",{children:s.jsx("filter",{id:a,filterUnits:"userSpaceOnUse",x:"0",y:"0",width:o.width,height:o.height,children:s.jsx("feGaussianBlur",{stdDeviation:c})})}),s.jsx("g",{filter:n&&l>0?`url(#${a})`:void 0,children:i.map(d=>{const f=`bv-mask-${e.id}-${d.id}`;return s.jsxs("g",{children:[s.jsx("defs",{children:s.jsxs("mask",{id:f,maskUnits:"userSpaceOnUse",x:"0",y:"0",width:o.width,height:o.height,children:[s.jsx("rect",{width:o.width,height:o.height,fill:"black"}),d.geometries.filter((u,p)=>u.enabled!==!1&&(n||io(u,p).visible)).map(u=>s.jsx(C0,{geometry:u,canvas:o},u.id))]})}),s.jsx("rect",{width:o.width,height:o.height,fill:e.authoring.color,mask:`url(#${f})`})]},d.id)})})]})}function A0(e){const{document:t,selectedLayerId:o,selectedRegionId:r}=e,n=m.useRef(null),i=m.useRef(null),[a,l]=m.useState({width:1,height:1}),[c,d]=m.useState(e.initialView.zoom),[f,u]=m.useState({x:e.initialView.panX,y:e.initialView.panY}),[p,g]=m.useState(e.initialView.fit),[x,w]=m.useState(!1),E=m.useCallback((S=a)=>Math.max(.02,Math.min(1,(S.width-40)/t.canvas.width,(S.height-40)/t.canvas.height)),[t.canvas.height,t.canvas.width,a]),b=m.useCallback(()=>{d(E()),u({x:0,y:0}),g(!0)},[E]);m.useEffect(()=>{const S=n.current;if(!S)return;const k=new ResizeObserver(I=>{const D=I[0].contentRect,R={width:D.width,height:D.height};l(R),p&&(d(Math.max(.02,Math.min(1,(R.width-40)/t.canvas.width,(R.height-40)/t.canvas.height))),u({x:0,y:0}))});return k.observe(S),()=>k.disconnect()},[t.canvas.height,t.canvas.width,p]),m.useEffect(()=>e.onView({zoom:c,panX:f.x,panY:f.y,fit:p}),[p,f.x,f.y,e.onView,c]),m.useEffect(()=>{const S=I=>{const D=I.target;I.code!=="Space"||D instanceof HTMLInputElement||D instanceof HTMLTextAreaElement||D instanceof HTMLSelectElement||D?.isContentEditable||(I.preventDefault(),I.stopImmediatePropagation(),w(!0))},k=I=>{I.code==="Space"&&(I.preventDefault(),I.stopImmediatePropagation(),w(!1),i.current=null)};return window.addEventListener("keydown",S,!0),window.addEventListener("keyup",k,!0),()=>{window.removeEventListener("keydown",S,!0),window.removeEventListener("keyup",k,!0)}},[]);const h=S=>{let k=[...S.geometry];if(e.draft&&S.id===r){const I=new Set(e.draft.map(D=>D.id));k=k.map(D=>I.has(D.id)?e.draft.find(R=>R.id===D.id):D);for(const D of e.draft)k.some(R=>R.id===D.id)||k.push(D)}return!e.binaryMaskPreview&&e.isolate&&o&&(k=k.filter(I=>It(I)===o)),k},v=e.brush.size*Math.min(t.canvas.width,t.canvas.height)/t.canvas.width*100,_=S=>{S.preventDefault();const k=S.currentTarget.getBoundingClientRect(),I=S.clientX-k.left,D=S.clientY-k.top,R=Math.max(.02,Math.min(8,c*Math.exp(-S.deltaY*.0015))),O=R/c;u(M=>({x:I-k.width/2-(I-k.width/2-M.x)*O,y:D-k.height/2-(D-k.height/2-M.y)*O})),d(R),g(!1)},y=S=>{S.button!==1&&!(S.button===0&&x)||(S.preventDefault(),S.stopPropagation(),S.currentTarget.setPointerCapture(S.pointerId),i.current={x:S.clientX,y:S.clientY,panX:f.x,panY:f.y},g(!1))},T=S=>{i.current&&(S.preventDefault(),S.stopPropagation(),u({x:i.current.panX+S.clientX-i.current.x,y:i.current.panY+S.clientY-i.current.y}))},L=S=>{i.current&&(S.preventDefault(),S.stopPropagation(),i.current=null)},B=a.width/2-t.canvas.width*c/2+f.x,C=a.height/2-t.canvas.height*c/2+f.y,j=10/c,z=24/c;return s.jsx("section",{className:"bv-regional-work",children:s.jsxs("div",{ref:n,className:`artboard-viewport ${x?"pan-ready":""}`,onWheel:_,onPointerDownCapture:y,onPointerMoveCapture:T,onPointerUpCapture:L,onPointerCancelCapture:L,children:[s.jsx(nw,{tool:e.tool,brush:e.brush,canSubtract:e.canSubtract,canvas:t.canvas,onTool:e.onTool,onBrush:e.onBrush}),s.jsx("div",{className:"artboard-stage",style:{width:t.canvas.width,height:t.canvas.height,transform:`translate(${B}px, ${C}px) scale(${c})`},children:s.jsxs("div",{className:`bv-regional-canvas tool-${e.tool}`,style:{width:t.canvas.width,height:t.canvas.height},onPointerDown:e.binaryMaskPreview?void 0:e.onPointerDown,onPointerMove:e.binaryMaskPreview?void 0:e.onPointerMove,onPointerUp:e.binaryMaskPreview?void 0:e.onPointerUp,onPointerCancel:e.binaryMaskPreview?void 0:e.onPointerCancel,onPointerLeave:e.onPointerLeave,onDoubleClick:e.binaryMaskPreview?void 0:e.onDoubleClick,children:[e.background&&!e.binaryMaskPreview&&s.jsx("div",{className:"bv-background-image",style:{backgroundImage:`linear-gradient(#0002,#0002), url(${JSON.stringify(e.background)})`,opacity:e.backgroundOpacity}}),s.jsx("svg",{className:"bv-composition",style:e.binaryMaskPreview?{background:"black"}:void 0,viewBox:`0 0 ${t.canvas.width} ${t.canvas.height}`,preserveAspectRatio:"none",children:T0(t.regions.filter(S=>S.enabled&&(e.binaryMaskPreview||S.authoring.visible))).map(S=>s.jsx(O0,{region:e.binaryMaskPreview?{...S,authoring:{...S.authoring,color:"#FFFFFF"}}:S,geometries:h(S),canvas:t.canvas,opacity:e.binaryMaskPreview?1:e.displayOpacity,resolved:e.binaryMaskPreview},S.id))}),!e.binaryMaskPreview&&e.draft&&s.jsx("svg",{className:"bv-tool-preview",viewBox:`0 0 ${t.canvas.width} ${t.canvas.height}`,preserveAspectRatio:"none",children:e.draft.map(S=>s.jsx(N0,{geometry:S,canvas:t.canvas,cursor:e.cursor,activePolygon:e.tool.startsWith("polygon")},S.id))}),!e.binaryMaskPreview&&e.selectionBounds&&s.jsxs("svg",{className:"bv-selection-overlay",viewBox:`0 0 ${t.canvas.width} ${t.canvas.height}`,preserveAspectRatio:"none",children:[s.jsx("rect",{className:"brush-bounds",x:e.selectionBounds.x*t.canvas.width,y:e.selectionBounds.y*t.canvas.height,width:e.selectionBounds.width*t.canvas.width,height:e.selectionBounds.height*t.canvas.height}),L0.map(S=>{const k=(e.selectionBounds.x+e.selectionBounds.width*S.x)*t.canvas.width,I=(e.selectionBounds.y+e.selectionBounds.height*S.y)*t.canvas.height;return s.jsxs("g",{"data-handle":S.id,className:`resize-handle resize-handle-${S.id}`,children:[s.jsx("rect",{className:"resize-handle-hit",x:k-z/2,y:I-z/2,width:z,height:z}),s.jsx("rect",{className:"resize-handle-visible",x:k-j/2,y:I-j/2,width:j,height:j,rx:2/c})]},S.id)}),e.draft&&s.jsxs("text",{className:"tool-preview-size",style:{fontSize:12/c},x:(e.selectionBounds.x+e.selectionBounds.width)*t.canvas.width-4/c,y:(e.selectionBounds.y+e.selectionBounds.height)*t.canvas.height-7/c,children:[Math.round(e.selectionBounds.width*t.canvas.width)," × ",Math.round(e.selectionBounds.height*t.canvas.height)," px"]})]}),!e.binaryMaskPreview&&e.cursor&&e.tool.startsWith("brush")&&s.jsx("div",{className:`brush-cursor ${e.brush.shape}`,style:{left:`${e.cursor.x*100}%`,top:`${e.cursor.y*100}%`,width:`${v}%`,aspectRatio:"1"},children:s.jsx("i",{style:{width:`${e.brush.hardness*100}%`,height:`${e.brush.hardness*100}%`}})})]})}),s.jsxs("div",{className:"zoom-controls",onWheel:S=>S.stopPropagation(),children:[s.jsx(se,{intent:"ghost",title:"Zoom out",onClick:()=>{d(S=>Math.max(.02,S/1.25)),g(!1)},children:"−"}),s.jsxs(se,{intent:"ghost",title:"100%",onClick:()=>{d(1),u({x:0,y:0}),g(!1)},children:[Math.round(c*100)," %"]}),s.jsx(se,{intent:"ghost",title:"Zoom in",onClick:()=>{d(S=>Math.min(8,S*1.25)),g(!1)},children:"+"}),s.jsx(se,{intent:"ghost",title:"Fit to view",onClick:b,children:"Fit"})]})]})})}const Pv="BV.NodePack.Completion.Enabled",Bv="BV.NodePack.Completion.Datasets",zv="BV.NodePack.Completion.Placement",Fv="bv-nodepack:completion-enabled",ia="bv-completion-enabled-changed",aa="bv-completion-placement-changed",Wu="bv-nodepack:completion-datasets",Uv="bv-nodepack:completion-placement",Vl="bv-completion-datasets-changed";let Wv=null,Vv=null,Hv=null;function xd(){try{return localStorage.getItem(Uv)==="field"?"field":"caret"}catch{return"caret"}}function D0(e){Hv=e}function $v(e,t=!1){const o=e==="field"?"field":"caret";try{localStorage.setItem(Uv,o)}catch{}t&&Hv?.(o),window.dispatchEvent(new CustomEvent(aa,{detail:{placement:o}}))}function Yv(){const[e,t]=m.useState(xd);return m.useEffect(()=>{const o=r=>t(r.detail?.placement==="field"?"field":"caret");return window.addEventListener(aa,o),()=>window.removeEventListener(aa,o)},[]),e}function Vu(){try{return localStorage.getItem(Fv)!=="false"}catch{return!0}}function M0(e){Wv=e}function Xv(e,t=!1){try{localStorage.setItem(Fv,String(e))}catch{}t&&Wv?.(e),window.dispatchEvent(new CustomEvent(ia,{detail:{enabled:e}}))}function Gv(){const[e,t]=m.useState(Vu);return m.useEffect(()=>{const o=r=>t(!!r.detail?.enabled);return window.addEventListener(ia,o),()=>window.removeEventListener(ia,o)},[]),e}function Kv(){try{const e=localStorage.getItem(Wu);if(e==null)return null;const t=JSON.parse(e);return Array.isArray(t)?t.map(String):null}catch{return null}}function j0(e){Vv=e}function qv(e,t=!1){const o=[...new Set(e.map(String))];try{localStorage.setItem(Wu,JSON.stringify(o))}catch{}t&&Vv?.(JSON.stringify(o)),window.dispatchEvent(new CustomEvent(Vl,{detail:{datasets:o}}))}function Jv(e){if(e==null||e===""){try{localStorage.removeItem(Wu)}catch{}window.dispatchEvent(new CustomEvent(Vl,{detail:{datasets:null}}));return}try{const t=typeof e=="string"?JSON.parse(e):e;Array.isArray(t)&&qv(t.map(String))}catch{}}function I0(){const[e,t]=m.useState(Kv);return m.useEffect(()=>{const o=r=>t(r.detail?.datasets??null);return window.addEventListener(Vl,o),()=>window.removeEventListener(Vl,o)},[]),e}function Zv({onSelectionChange:e}={}){const t=I0(),[o,r]=m.useState([]),[n,i]=m.useState(""),a=async()=>{try{const g=await fetch("/bv_nodepack/completion/status");if(!g.ok)throw new Error(`HTTP ${g.status}`);const x=await g.json();r(Array.isArray(x?.datasets)?x.datasets:[]),i("")}catch(g){i(g instanceof Error?g.message:String(g))}};m.useEffect(()=>{a()},[]);const l=t??o.map(g=>g.id),c=g=>{qv(g,!0),e?.(g)},d=g=>c(l.includes(g)?l.filter(x=>x!==g):[...l,g]),f=(g,x)=>{const w=l.indexOf(g),E=w+x;if(w<0||E<0||E>=l.length)return;const b=[...l];[b[w],b[E]]=[b[E],b[w]],c(b)},u=new Map(o.map(g=>[g.id,g])),p=[...l.map(g=>u.get(g)).filter(g=>!!g),...o.filter(g=>!l.includes(g.id))];return s.jsxs("div",{className:"completion-dataset-picker",children:[s.jsx("strong",{children:"Completion Data"}),s.jsx("small",{children:"Topmost enabled dataset wins when tags are duplicated."}),p.map(g=>{const x=l.indexOf(g.id),w=x>=0;return s.jsxs("div",{children:[s.jsx(Go,{label:g.name,help:`${(g.bytes/1048576).toFixed(1)} MiB`,checked:w,onValue:()=>d(g.id)}),s.jsxs("span",{className:"dataset-order",children:[s.jsx(se,{intent:"ghost",iconOnly:!0,disabled:!w||x===0,title:"Move up",onClick:()=>f(g.id,-1),children:"↑"}),s.jsx(se,{intent:"ghost",iconOnly:!0,disabled:!w||x===l.length-1,title:"Move down",onClick:()=>f(g.id,1),children:"↓"})]})]},g.id)}),!o.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(se,{onClick:()=>void a(),children:"Reload List"})]})}function P0(e){const t=Gv(),o=Yv(),r=e.openMenu,n=m.useRef(null),{menuOverflow:i}=Av(),a=m.useRef(null),l=m.useRef(null);m.useEffect(()=>{const f=u=>{n.current?.contains(u.target)||e.onOpenMenu(null)};return window.addEventListener("pointerdown",f),()=>window.removeEventListener("pointerdown",f)},[e.onOpenMenu]);const c=(f,u,p)=>s.jsx(fp,{open:r===f,onOpen:g=>e.onOpenMenu(g?f:null),trigger:({toggle:g})=>s.jsxs(se,{intent:"ghost",density:"compact","aria-label":u,title:u,"aria-expanded":r===f,onClick:g,children:[s.jsx("span",{className:"editor-menu-label-full",children:u}),s.jsx("span",{className:"editor-menu-label-short","aria-hidden":"true",children:u==="?"?u:u[0]})]}),children:p}),d=s.jsxs(s.Fragment,{children:[c("file","File",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsx(se,{intent:"ghost",onClick:()=>{e.onExportDocument(),e.onOpenMenu(null)},children:"Export Document"}),s.jsx(se,{intent:"ghost",onClick:()=>a.current?.click(),children:"Load and Replace Document"}),s.jsx("hr",{}),s.jsx(se,{intent:"ghost",onClick:()=>{e.onExportRegions(),e.onOpenMenu(null)},children:"Export Regions"}),s.jsx(se,{intent:"ghost",onClick:()=>l.current?.click(),children:"Add Regions"})]})),c("edit","Edit",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsxs(se,{intent:"ghost",disabled:!e.canUndo,onClick:e.onUndo,children:["Undo ",s.jsx("kbd",{children:"Ctrl Z"})]}),s.jsxs(se,{intent:"ghost",disabled:!e.canRedo,onClick:e.onRedo,children:["Redo ",s.jsx("kbd",{children:"Ctrl Shift Z"})]}),s.jsx(Go,{label:"Prompt Autocomplete",help:"Optional. Disable it when using another completion extension.",checked:t,onValue:f=>Xv(f,!0)}),s.jsx(ft,{label:"Popup Position",value:o,onValue:f=>$v(f,!0),options:[{value:"caret",label:"At Caret"},{value:"field",label:"Below Text Field"}]}),s.jsx(Zv,{})]})),c("view","View",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsx(jt,{label:"Mask Display",value:e.displayOpacity,min:.05,max:1,step:.05,unit:"×",onValue:e.onDisplayOpacity}),s.jsx(jt,{label:"Background Image",value:e.backgroundOpacity,min:0,max:1,step:.05,unit:"×",onValue:e.onBackgroundOpacity}),s.jsx(Go,{label:"Binary Mask Preview",checked:e.binaryMaskPreview,onValue:e.onToggleBinaryMaskPreview}),s.jsx(Go,{label:"Isolate Selection",checked:e.isolate,disabled:!e.hasSelection,onValue:e.onToggleIsolate}),s.jsx("small",{children:"Affects the editor display only."})]})),c("artboard","Artboard",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsx(jt,{label:"Width",value:e.canvas.width,min:1,max:32768,step:1,unit:"px",slider:!1,onValue:f=>e.onCanvas({...e.canvas,width:f})}),s.jsx(jt,{label:"Height",value:e.canvas.height,min:1,max:32768,step:1,unit:"px",slider:!1,onValue:f=>e.onCanvas({...e.canvas,height:f})})]})),c("layers","Layers",s.jsxs("div",{className:"bv-menu-stack",children:[s.jsxs(se,{intent:"ghost",disabled:!e.canMergeLayers,onClick:()=>{e.onMergeLayers(),e.onOpenMenu(null)},children:["Merge Selected Layers ",s.jsx("kbd",{children:"Ctrl E"})]}),s.jsx("small",{children:"Ctrl-click or Shift-click layers in one region to select them."})]})),c("help","?",s.jsxs("div",{className:"help-menu",children:[s.jsx(up,{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(up,{items:[{term:"Click",description:"Select layer"},{term:"Ctrl + Click",description:"Add/remove layer selection"},{term:"Shift + Click",description:"Select layer range"},{term:"Drag",description:"Draw or move"},{term:"Mouse wheel",description:"Zoom under cursor"}]})]}))]});return s.jsxs("div",{className:"editor-menus",ref:n,children:[i?s.jsx(fp,{trigger:({toggle:f})=>s.jsx(se,{intent:"ghost",density:"compact","aria-label":"Editor menus",onClick:f,children:"•••"}),children:s.jsx("div",{className:"editor-menus-overflow-panel",children:d})}):d,s.jsx("input",{hidden:!0,ref:a,type:"file",accept:"application/json,.json",onChange:f=>{const u=f.target.files?.[0];u&&e.onImportDocument(u),f.target.value=""}}),s.jsx("input",{hidden:!0,ref:l,type:"file",accept:"application/json,.json",onChange:f=>{const u=f.target.files?.[0];u&&e.onImportRegions(u),f.target.value=""}})]})}function Qv(e,t,o,r=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,d=l.slice(c);if(d.trim().length<2)return null;const f=n-l.length+c;return{...o,text:e,caret:n,term:d,start:f,end:n,limit:r}}function em(e,t,o){const r=e.slice(t.end).match(/^\s*[,;\n]/)?"":", ",n=`${o.insertText}${r}`;return{text:e.slice(0,t.start)+n+e.slice(t.end),caret:t.start+n.length}}async function tm(e,t,o){const r=await Promise.allSettled(t.map(i=>i.suggest(e,o)));if(o.aborted)return[];const n=new Map;return r.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 om={id:"bv-local-tags",async suggest(e,t){const o=await fetch("/bv_nodepack/completion/search",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({term:e.term.trim(),limit:e.limit,datasets:Kv()}),signal:t});if(!o.ok)return[];const r=await o.json();return(Array.isArray(r?.results)?r.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:{}}]:[]})}},B0=["fontFamily","fontSize","fontStyle","fontWeight","letterSpacing","lineHeight","textTransform","textIndent","textAlign","wordSpacing","paddingTop","paddingRight","paddingBottom","paddingLeft","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth"];function z0(e,t=e.selectionStart??e.value.length){const o=e.getBoundingClientRect(),r=window.getComputedStyle(e),n=e.offsetWidth||o.width,i=e.offsetHeight||o.height,a=o.width/n,l=o.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:r.boxSizing,whiteSpace:"pre-wrap",overflowWrap:"break-word",overflow:"hidden"}),B0.forEach(w=>{c.style[w]=r[w]}),c.textContent=e.value.slice(0,t);const d=document.createElement("span");d.textContent=e.value.slice(t,t+1)||"​",c.append(d),document.body.append(c),c.scrollTop=e.scrollTop,c.scrollLeft=e.scrollLeft;const f=c.getBoundingClientRect(),u=d.getBoundingClientRect(),p=Number.parseFloat(r.lineHeight)||Number.parseFloat(r.fontSize)*1.2||16;c.remove();const g=o.left+(u.left-f.left)*a,x=o.top+(u.top-f.top)*l;return{left:g,top:x,bottom:x+p*l}}function Hl(e,t,o=210){const i=e.getBoundingClientRect(),a=t==="caret"?z0(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)),d=Math.max(4,Math.min(a.left,window.innerWidth-c-4)),f=a.bottom+4,u=f+o<=window.innerHeight-4?f:Math.max(4,a.top-o-4);return{left:d,top:u,width:c}}function rm({suggestions:e,selected:t,position:o,onAccept:r,onHeight:n}){const i=m.useRef(null);return m.useLayoutEffect(()=>{i.current&&n?.(i.current.offsetHeight)}),s.jsx("div",{ref:i,className:"bv-completion-popup bv-global-completion-popup",style:o,role:"listbox",children:e.map((a,l)=>s.jsxs(se,{density:"compact",intent:"ghost",className:l===t?"active":"",onPointerDown:c=>{c.preventDefault(),r(l)},children:[s.jsx("span",{children:a.label}),s.jsx("small",{children:[a.category,a.detail,a.source].filter(Boolean).join(" · ")})]},a.id))})}function $l({value:e,onValue:t,completionContext:o,onKeyDown:r,onBlur:n,onSelect:i,...a}){const l=Gv(),c=Yv(),d=m.useRef(null),[f,u]=m.useState([]),[p,g]=m.useState(0),[x,w]=m.useState(null),E=m.useRef(null),b=m.useRef(null),h=m.useRef(null),v=m.useRef(210),_=m.useRef(()=>{}),y=()=>{b.current?.abort(),u([]),w(null)},T=()=>{const C=d.current;C&&w(Hl(C,c,v.current))},L=(C,j,z=j)=>{if(!l||j!==z)return y();h.current!=null&&window.clearTimeout(h.current),b.current?.abort();const S=Qv(C,j,o);if(E.current=S,!S)return y();const k=new AbortController;b.current=k,h.current=window.setTimeout(async()=>{const I=await tm(S,[om],k.signal);if(k.signal.aborted)return;const D=d.current;u(I),g(0),w(I.length&&D?Hl(D,c):null)},120)};_.current=L;const B=(C=p)=>{const j=E.current,z=f[C];if(!j||!z)return;const S=em(e,j,z);t(S.text),y(),requestAnimationFrame(()=>{d.current?.focus(),d.current?.setSelectionRange(S.caret,S.caret)})};return m.useEffect(()=>{l||y()},[l]),m.useEffect(()=>{const C=()=>{const j=d.current;j&&document.activeElement===j&&_.current(j.value,j.selectionStart,j.selectionEnd)};return document.addEventListener("selectionchange",C),()=>document.removeEventListener("selectionchange",C)},[]),m.useEffect(()=>{x&&T()},[c]),m.useEffect(()=>{if(x)return window.addEventListener("scroll",T,!0),window.addEventListener("resize",T),()=>{window.removeEventListener("scroll",T,!0),window.removeEventListener("resize",T)}},[!!x,c]),m.useEffect(()=>()=>{b.current?.abort(),h.current!=null&&window.clearTimeout(h.current)},[]),s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"bv-textarea-shell resize-vertical",children:s.jsx(G_,{...a,ref:d,value:e,onChange:C=>{t(C.target.value),L(C.target.value,C.target.selectionStart,C.target.selectionEnd)},onSelect:C=>{L(C.currentTarget.value,C.currentTarget.selectionStart,C.currentTarget.selectionEnd),i?.(C)},onKeyDown:C=>{if(f.length){if(C.key==="ArrowDown"||C.key==="ArrowUp"){C.preventDefault(),C.stopPropagation(),g(j=>(j+(C.key==="ArrowDown"?1:-1)+f.length)%f.length);return}if(C.key==="Enter"||C.key==="Tab"){C.preventDefault(),C.stopPropagation(),B();return}if(C.key==="Escape"){C.preventDefault(),C.stopPropagation(),y();return}}r?.(C)},onBlur:C=>{window.setTimeout(y,120),n?.(C)}})}),l&&x&&s.jsx(rm,{suggestions:f,selected:p,position:x,onAccept:B,onHeight:C=>{Math.abs(C-v.current)<1||(v.current=C,T())}})]})}function pn({label:e,help:t,value:o,onChange:r,children:n,disabled:i,className:a=""}){const l=Te.Children.toArray(n).flatMap(c=>Te.isValidElement(c)?[{value:String(c.props.value??c.props.children??""),label:String(c.props.children??c.props.value??""),disabled:c.props.disabled}]:[]);return s.jsx("div",{className:a,children:s.jsx(ft,{label:e,help:t,value:o,onValue:r,options:l,disabled:i})})}function gn({onChange:e,...t}){return s.jsx(jt,{...t,onValue:e})}const Pp=({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))]}),ac=({title:e,scope:t,value:o,open:r,onOpen:n,onChange:i})=>s.jsx(Il,{value:r?[t]:[],onValue:a=>n(a.includes(t)),items:[{id:t,title:e,content:s.jsxs("div",{className:"bv-prompt-editor-fields",children:[s.jsx(ko,{label:"Positive",children:s.jsx($l,{value:o.positive_source,onValue:a=>i({...o,positive_source:a}),completionContext:{scope:t,polarity:"positive"}})}),s.jsx(ko,{label:"Negative",children:s.jsx($l,{value:o.negative_source,onValue:a=>i({...o,negative_source:a}),completionContext:{scope:t,polarity:"negative"}})})]})}]}),F0=({region:e,automaticColor:t,onRegion:o})=>s.jsxs("section",{className:"bv-inspector-section",children:[s.jsx("h3",{children:"Mask & appearance"}),s.jsx(gn,{label:"Feather",value:e.mask.feather,min:0,max:.5,step:.005,onChange:r=>o(n=>{n.mask.feather=r})}),s.jsx("div",{className:"region-color-control",children:s.jsxs("div",{className:"region-color-split",children:[s.jsx(Q_,{label:"Display color",help:"Editor display only. It does not change masks or sampling.",value:e.authoring.color,onValue:r=>o(n=>{n.authoring.color=r.toUpperCase()})}),s.jsx(se,{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:()=>o(r=>{t&&(r.authoring.color=t)}),children:"↶"})]})})]});function U0(e){const t=e.layer?.geometries.find(n=>n.type==="brush_stroke"),[o,r]=m.useState(e.mode??(e.layer?"selection":e.region?"region":"document"));return m.useEffect(()=>r(e.mode??(e.layer?"selection":e.region?"region":"document")),[e.layer?.id,e.mode,e.region?.id]),s.jsx(Eu,{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(se,{intent:"ghost",role:"tab","aria-selected":o==="selection",disabled:!e.layer,onClick:()=>r("selection"),children:"Selection"}),s.jsx(se,{intent:"ghost",role:"tab","aria-selected":o==="region",disabled:!e.region,onClick:()=>r("region"),children:"Region"}),s.jsx(se,{intent:"ghost",role:"tab","aria-selected":o==="document",onClick:()=>r("document"),children:"Document"})]}),s.jsxs("div",{className:"inspector-tab-panel",role:"tabpanel",hidden:o!=="selection",children:[e.region&&s.jsx(F0,{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(gn,{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(gn,{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(gn,{label:"Hardness",value:t.hardness,min:0,max:1,step:.05,onChange:n=>e.onBrushSetting("hardness",n)}),s.jsx(gn,{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(pn,{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(pn,{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:o!=="region",children:e.region&&s.jsxs("section",{className:"bv-inspector-section",children:[s.jsx("h3",{children:"Region"}),s.jsxs(pn,{label:"Usage",help:"Controls whether this region participates in the main render, Detailer output, or both.",value:e.region.usage,onChange:n=>e.onRegion(i=>{i.usage=n}),children:[s.jsx("option",{value:"generation",children:"Generation"}),s.jsx("option",{value:"detailer",children:"Detailer only"}),s.jsx("option",{value:"both",children:"Generation + Detailer"})]}),s.jsx(pn,{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(Pp,{stacks:e.loraStacks})}),s.jsx(gn,{label:"Strength",value:e.region.strength,min:0,max:10,step:.05,onChange:n=>e.onRegion(i=>{i.strength=n})}),s.jsx(ac,{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:o!=="document",children:s.jsxs("section",{className:"bv-inspector-section",children:[s.jsx("h3",{children:"Document Prompts"}),s.jsx(pn,{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(Pp,{stacks:e.loraStacks})}),s.jsxs(pn,{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(ac,{title:"Global",scope:"global",value:e.globalPrompts,open:e.promptSections.global,onOpen:n=>e.onPromptSection("global",n),onChange:e.onGlobalPrompts}),s.jsx(ac,{title:"Background",scope:"background",value:e.backgroundPrompts,open:e.promptSections.background,onOpen:n=>e.onPromptSection("background",n),onChange:e.onBackgroundPrompts})]})})]})})}const tt=(e,t=0,o=1)=>Math.max(t,Math.min(o,e));function W0(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 o=e.points.map(u=>u.x),r=e.points.map(u=>u.y);if(e.type==="polygon")return{x:Math.min(...o),y:Math.min(...r),width:Math.max(...o)-Math.min(...o),height:Math.max(...r)-Math.min(...r)};const n=Math.min(t.width,t.height),i=e.size*n/t.width/2,a=e.size*n/t.height/2,l=tt(Math.min(...o)-i),c=tt(Math.min(...r)-a),d=tt(Math.max(...o)+i),f=tt(Math.max(...r)+a);return{x:l,y:c,width:d-l,height:f-c}}function nm(e,t,o){const r=o.x-t.x,n=o.y-t.y;if(r===0&&n===0)return Math.hypot(e.x-t.x,e.y-t.y);const i=tt(((e.x-t.x)*r+(e.y-t.y)*n)/(r*r+n*n));return Math.hypot(e.x-(t.x+i*r),e.y-(t.y+i*n))}function V0(e,t,o={width:1,height:1}){if(e.type==="rect"||e.type==="raster_mask")return t.x>=e.x&&t.x<=e.x+e.width&&t.y>=e.y&&t.y<=e.y+e.height;if(e.type==="ellipse"){const a=e.width/2,l=e.height/2;return((t.x-e.x-a)/a)**2+((t.y-e.y-l)/l)**2<=1}if(e.type==="polygon"){let a=!1;for(let l=0,c=e.points.length-1;lt.y!=f.y>t.y&&t.x<(f.x-d.x)*(t.y-d.y)/(f.y-d.y)+d.x&&(a=!a)}return a}const r=a=>({...a,x:a.x*o.width,y:a.y*o.height}),n=e.size*Math.min(o.width,o.height)/2,i=r(t);return e.points.length===1?Math.hypot(i.x-e.points[0].x*o.width,i.y-e.points[0].y*o.height)<=n:e.points.slice(1).some((a,l)=>nm(i,r(e.points[l]),r(a))<=n)}function Es(e,t){const o=e.map(l=>W0(l,t)),r=Math.min(...o.map(l=>l.x)),n=Math.min(...o.map(l=>l.y)),i=Math.max(...o.map(l=>l.x+l.width)),a=Math.max(...o.map(l=>l.y+l.height));return{x:r,y:n,width:i-r,height:a-n}}function Bp(e,t,o,r){const n=Es(e,r);return t=tt(t,-n.x,1-n.x-n.width),o=tt(o,-n.y,1-n.y-n.height),e.map(i=>{const a=Yt(i);return a.type==="rect"||a.type==="ellipse"||a.type==="raster_mask"?(a.x+=t,a.y+=o):a.points=a.points.map(l=>({...l,x:l.x+t,y:l.y+o})),a})}function im(e,t,o){const r=Es(e,o);t={x:tt(t.x,0,.998),y:tt(t.y,0,.998),width:tt(t.width,.002,1),height:tt(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(r.width,1e-6),i=t.height/Math.max(r.height,1e-6);return e.map(a=>{const l=Yt(a);return l.type==="rect"||l.type==="ellipse"||l.type==="raster_mask"?(l.x=t.x+(l.x-r.x)*n,l.y=t.y+(l.y-r.y)*i,l.width*=n,l.height*=i):(l.points=l.points.map(c=>({...c,x:t.x+(c.x-r.x)*n,y:t.y+(c.y-r.y)*i})),l.type==="brush_stroke"&&(l.size=tt(l.size*Math.sqrt(n*i),.001,1))),l})}function H0(e,t,o,r,n=!1,i){const a=Es(e,i);let l=a.x,c=a.y,d=l+a.width,f=c+a.height;if(t.includes("w")&&(l=tt(l+o,0,d-.002)),t.includes("e")&&(d=tt(d+o,l+.002,1)),t.includes("n")&&(c=tt(c+r,0,f-.002)),t.includes("s")&&(f=tt(f+r,c+.002,1)),n&&t.length===2){const u=a.width/Math.max(a.height,1e-4),p=d-l,g=f-c;if(p/g>u){const x=p/u;t.includes("n")?c=tt(f-x):f=tt(c+x)}else{const x=g*u;t.includes("w")?l=tt(d-x):d=tt(l+x)}}return im(e,{x:l,y:c,width:d-l,height:f-c},i)}function $0(e,t,o){return nm(e,t,o)}function Y0(e,t=.0015){if(e.length<=2)return e;const o=[e[0]];for(const n of e.slice(1,-1))Math.hypot(n.x-o[o.length-1].x,n.y-o[o.length-1].y)>=t&&o.push(n);o.push(e[e.length-1]);const r=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]]:[...r(n.slice(0,a+1)).slice(0,-1),...r(n.slice(a))]};return r(o)}const zp=e=>e.layer_id??e.id,X0=e=>e.authoring??{name:"Layer",visible:!0,locked:!1};function G0(e,t,o,r){if(r==="replace")return{ids:[t],primary:t,anchor:t};if(r==="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&&o.includes(e.anchor)?e.anchor:e.primary;if(!n)return{ids:[t],primary:t,anchor:t};const i=o.indexOf(n),a=o.indexOf(t);return i<0||a<0?{ids:[t],primary:t,anchor:t}:{ids:o.slice(Math.min(i,a),Math.max(i,a)+1),primary:t,anchor:n}}function K0(e,t,o){const r=new Set(t);if(r.size<2||!r.has(o))return!1;const n=e.geometry.find(l=>zp(l)===o);if(!n)return!1;const i=X0(n);let a=!1;return e.geometry.forEach(l=>{const c=zp(l);r.has(c)&&(l.mask_group_id??(l.mask_group_id=c),l.layer_id=o,l.authoring={...i},a||(a=c!==o))}),a}function am(e,t){const o=new Map;e.forEach(r=>{r.mask_group_id&&(o.has(r.mask_group_id)||o.set(r.mask_group_id,t()),r.mask_group_id=o.get(r.mask_group_id))})}const q0="bv-regional-editor-state-v1:",et=(e,t)=>typeof e=="number"&&Number.isFinite(e)?e:t,wt=(e,t,o)=>Math.max(t,Math.min(o,e)),J0=["select","rect-add","rect-subtract","ellipse-add","ellipse-subtract","polygon-add","polygon-subtract","brush-add","brush-subtract"];function lm(e){return`${q0}${e}`}function Z0(e,t,o={width:520,height:560}){return{x:wt(et(e.x,t.width-o.width-24),-o.width+52,t.width-52),y:wt(et(e.y,84),72,Math.max(72,t.height-52))}}function Yl(e,t){const o=wt(et(e.width,520),Math.min(360,t.width),Math.max(360,t.width-32)),r=wt(et(e.height,640),Math.min(320,t.height),Math.max(320,t.height-32));return{...Z0({x:et(e.x,t.width-o-24),y:et(e.y,84)},t,{width:o}),width:o,height:r}}function Fp(e,t){return e.mode==="workspace"?nn({x:24,y:58,width:t.width-48,height:t.height-82},t,"workspace"):e.windows.floating}function nn(e,t,o){const r=Math.min(780,Math.max(320,t.width-16)),n=Math.min(520,Math.max(300,t.height-16)),i=Math.max(r,t.width),a=Math.max(n,t.height),l=wt(et(e.width,r),r,i),c=wt(et(e.height,n),n,a),d=o==="workspace"?8:0;return{x:wt(et(e.x,d),d-l+80,t.width-d-80),y:wt(et(e.y,58),0,t.height-42),width:l,height:c}}function Hu(e={width:window.innerWidth,height:window.innerHeight}){const t=nn({x:24,y:58,width:e.width-48,height:e.height-82},e,"workspace"),o=Math.min(1100,e.width-32),r=Math.min(760,e.height-80),n=nn({x:Math.max(16,e.width-o-32),y:64,width:o,height:r},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:Yl({x:e.width-544,y:84,width:520,height:640},e)}}function Q0(e,t={width:window.innerWidth,height:window.innerHeight}){const o=Hu(t),r=e&&typeof e=="object"?e:{},n=r.mode==="floating"?"floating":"workspace",i=r.windows&&typeof r.windows=="object"?r.windows:o.windows,a=r.panels&&typeof r.panels=="object"?r.panels:o.panels,l=r.artboard&&typeof r.artboard=="object"?r.artboard:o.artboard,c=r.brush&&typeof r.brush=="object"?r.brush:o.brush;return{version:1,mode:n,windows:{workspace:nn(i.workspace??o.windows.workspace,t,"workspace"),floating:nn(i.floating??o.windows.floating,t,"floating")},panels:{left:wt(et(a.left,290),210,620),right:wt(et(a.right,340),210,620)},artboard:{zoom:wt(et(l.zoom,1),.02,8),panX:et(l.panX,0),panY:et(l.panY,0),fit:typeof l.fit=="boolean"?l.fit:!0},selectedRegionId:typeof r.selectedRegionId=="string"?r.selectedRegionId:null,selectedLayerId:typeof r.selectedLayerId=="string"?r.selectedLayerId:null,displayOpacity:wt(et(r.displayOpacity,.5),.05,1),backgroundOpacity:wt(et(r.backgroundOpacity,1),0,1),isolate:r.isolate===!0,tool:r.tool==="rect"?"rect-add":J0.includes(r.tool)?r.tool:"select",binaryMaskPreview:r.binaryMaskPreview===!0,brush:{size:wt(et(c.size,.04),.001,1),hardness:wt(et(c.hardness,.75),0,1),opacity:wt(et(c.opacity,1),0,1),shape:c.shape==="square"?"square":"round",pressureMode:c.pressureMode==="stylus"?"stylus":"constant"},openMenu:["file","edit","view","artboard","layers","help"].includes(r.openMenu)?r.openMenu:null,promptSections:{region:r.promptSections?.region===!0,global:r.promptSections?.global===!0,background:r.promptSections?.background===!0},quickPromptTarget:typeof r.quickPromptTarget=="string"&&r.quickPromptTarget?r.quickPromptTarget:"global",quickPromptWindow:Yl(r.quickPromptWindow??o.quickPromptWindow,t)}}function sl(e,t=localStorage,o={width:window.innerWidth,height:window.innerHeight}){try{return Q0(JSON.parse(t.getItem(lm(e))||"null"),o)}catch{return Hu(o)}}function yd(e,t,o=localStorage){try{return o.setItem(lm(e),JSON.stringify(t)),!0}catch{return!1}}function e1(e,t,o,r=8){if(e.length!==t*o)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=r&&(n[y]=a,l[f++]=y)}}i.push({label:a,x:u,y:p,width:g-u+1,height:x-p+1,pixels:w})}return{labels:n,areas:i}}const _d=(e,t)=>{const o=document.createElement("canvas");return o.width=e,o.height=t,o},t1=e=>new Promise((t,o)=>{const r=new Image;r.onload=()=>t(r),r.onerror=()=>o(new Error("Raster layer image could not be decoded")),r.src=e});async function o1(e,t,o,r){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*o,t.y*r,t.width*o,t.height*r);else if(t.type==="ellipse")e.beginPath(),e.ellipse((t.x+t.width/2)*o,(t.y+t.height/2)*r,t.width*o/2,t.height*r/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*o,n.y*r):e.moveTo(n.x*o,n.y*r)),e.closePath(),e.fill();else if(t.type==="raster_mask")e.drawImage(await t1(t.data_url),t.x*o,t.y*r,t.width*o,t.height*r);else{const n=Math.min(o,r),i=t.points,a=t.size*n,l=t.shape==="square"?"square":"round",c=(u,p,g=0)=>{const x=a*u.pressure*p;e.filter=g>0?`blur(${g}px)`:"none",e.beginPath(),t.shape==="square"?e.rect(u.x*o-x/2,u.y*r-x/2,x,x):e.arc(u.x*o,u.y*r,x/2,0,Math.PI*2),e.fill()},d=(u,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)):(d(1,f),t.hardness>0&&d(t.hardness))}e.restore()}async function r1(e,t,o){const r=_d(t,o),n=r.getContext("2d",{willReadFrequently:!0}),i=new Map;e.filter(a=>a.enabled!==!1).forEach(a=>{const l=ha(a),c=i.get(l);c?c.push(a):i.set(l,[a])});for(const a of i.values()){const l=_d(t,o),c=l.getContext("2d");for(const d of a)await o1(c,d,t,o);n.drawImage(l,0,0)}return r}async function n1(e,t,o){const i=(await r1(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 u=0;uu.pixels>1);if(d.length<2)return[];const f={...e[0].authoring??{name:"Layer",visible:!0,locked:!1}};return d.map((u,p)=>{const g=_d(u.width,u.height),x=g.getContext("2d"),w=x.createImageData(u.width,u.height);for(let b=0;b({schema:"bv.regional.lora_bindings",version:1,document_id:e,global_stack_id:null,regions:{}});function i1(e,t,o){if(!t)return!1;const r=o.filter(n=>n.id===t);return r.length>1&&r[0].nodeId!==e}function $u(e,t){if(e==null||e==="")return Ts(t);const o=typeof e=="string"?JSON.parse(e):structuredClone(e);if(o?.schema!=="bv.regional.lora_bindings"||o?.version!==1||typeof o?.regions!="object"||Array.isArray(o.regions))throw new Error("Not a valid BV regional LoRA bindings v1 value");if(o.document_id&&o.document_id!==t)throw new Error("LoRA bindings target a different BV Regional document");const r={};for(const[n,i]of Object.entries(o.regions))typeof i=="string"&&i&&(r[n]=i);return{schema:"bv.regional.lora_bindings",version:1,document_id:t,global_stack_id:typeof o.global_stack_id=="string"&&o.global_stack_id?o.global_stack_id:null,regions:r}}function jn(e,t){const o=Object.fromEntries(Object.entries(e.regions).filter(([r])=>t.has(r)));return{...e,regions:o}}function lc(e,t){const o=structuredClone(e);return{document:o,loraBindings:structuredClone(jn(t,new Set(o.regions.map(r=>r.id))))}}function a1(e,t,o){const r=t.find((c,d)=>t.findIndex(f=>f.id===c.id)!==d);if(r)return[`Duplicate LoRA stack ID: ${r.id}`];const n=t.find((c,d)=>t.findIndex(f=>f.name.localeCompare(c.name,void 0,{sensitivity:"accent"})===0)!==d);if(n)return[`Duplicate LoRA stack name: ${n.name}`];const i=o&&Object.keys(e.regions).find(c=>!o.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 l1(e,t,o){const r=new Map(t.map(i=>[i.id,i.name])),n=[];e.global_stack_id&&n.push(`Global: ${r.get(e.global_stack_id)??"Missing stack"}`);for(const[i,a]of Object.entries(e.regions))n.push(`${o[i]??"Missing region"}: ${r.get(a)??"Missing stack"}`);return n.length?`${n.join(" · ")} · source values unchanged`:"No LoRA stacks assigned"}const Xl=(e,t)=>e.regions.find(o=>o.id===t)??null,wd=(e,t)=>e?Co(e).find(o=>o.id===t)??null:null,kd=e=>e.kind==="layer"||e.kind==="geometry"?e.layerId:null;function s1(e,t){const o=Xl(e,t.source.regionId),r=Xl(e,t.target.regionId);if(!o||!r||o.authoring.locked||r.authoring.locked||t.source.kind!=="region"&&wd(o,t.source.layerId)?.authoring.locked)return!1;const n=kd(t.target);return!(n&&wd(r,n)?.authoring.locked)}function c1(e,t,o,r){if(!o||r==="inside"){e.geometry.push(...t);return}const n=e.geometry.map((a,l)=>It(a)===o?l:-1).filter(a=>a>=0);if(!n.length){e.geometry.push(...t);return}const i=r==="before"?n[n.length-1]+1:n[0];e.geometry.splice(i,0,...t)}function d1(e,t,o){if(!s1(e,t))return!1;const r=structuredClone(e.regions),n=()=>e.regions.every(u=>zb(u.geometry))?!0:(e.regions=r,!1);if(t.source.kind==="region"){if(t.target.kind!=="region"||t.position==="inside"||t.source.regionId===t.target.regionId)return!1;const u=e.regions.findIndex(x=>x.id===t.source.regionId),[p]=e.regions.splice(u,1),g=e.regions.findIndex(x=>x.id===t.target.regionId);return e.regions.splice(t.position==="before"?g:g+1,0,p),e.regions.forEach((x,w)=>{x.priority=w}),n()}const i=Xl(e,t.source.regionId),a=Xl(e,t.target.regionId);if(t.source.kind==="layer"){const u=t.source;if(t.target.kind==="geometry"||u.layerId===kd(t.target))return!1;const p=i.geometry.filter(g=>It(g)===u.layerId);return p.length?(i.geometry=i.geometry.filter(g=>It(g)!==u.layerId),c1(a,p,kd(t.target),t.position),n()):!1}const l=t.source,c=i.geometry.findIndex(u=>u.id===l.geometryId);if(c<0||t.target.kind==="region"&&t.position!=="inside")return!1;const[d]=i.geometry.splice(c,1);if(t.target.kind==="region")return d.layer_id=o(),delete d.mask_group_id,d.authoring={...io(d)},a.geometry.push(d),n();const f=t.target.layerId;if((f!==l.layerId||a!==i)&&(d.mask_group_id??(d.mask_group_id=l.layerId),d.layer_id=f,d.authoring={...wd(a,f).authoring}),t.target.kind==="layer"||t.position==="inside"){const u=a.geometry.map((p,g)=>It(p)===f?g:-1).filter(p=>p>=0);a.geometry.splice(u.length?u[u.length-1]+1:a.geometry.length,0,d)}else{const u=t.target,p=a.geometry.findIndex(g=>g.id===u.geometryId);a.geometry.splice(t.position==="before"?p:p+1,0,d)}return n()}const Dr=e=>ea(Nt().rootGraph??Nt().graph,e),Up=e=>e?.widgets?.find(t=>t.name==="regional_json"),Ua=e=>e?.widgets?.find(t=>t.name==="lora_bindings_json"),Wp=(e,t)=>e&&t?e.geometry.filter(o=>It(o)===t):[],Mr=R0,sc=(e,t)=>{const o=e.currentTarget.getBoundingClientRect();return{x:Math.max(0,Math.min(1,(e.clientX-o.left)/o.width)),y:Math.max(0,Math.min(1,(e.clientY-o.top)/o.height)),pressure:t==="stylus"&&e.pointerType==="pen"?Math.max(.01,e.pressure):1}};function Vp(e,t){const o=URL.createObjectURL(new Blob([JSON.stringify(t,null,2)],{type:"application/json"})),r=document.createElement("a");r.href=o,r.download=e,r.click(),URL.revokeObjectURL(o)}function u1(e){const t=new Map(e.map(o=>[o.id,Lt()]));return Yt(e).map(o=>{o.id=t.get(o.id),o.parent_region_id=o.parent_region_id?t.get(o.parent_region_id)??null:null,am(o.geometry,Lt);const r=new Map;return o.geometry.forEach(n=>{const i=It(n);r.has(i)||r.set(i,Lt()),n.id=Lt(),n.layer_id=r.get(i)}),o})}function f1({open:e,activationToken:t=0,nodes:o,initialNode:r,backgrounds:n,loraStacks:i,onClose:a}){const[l,c]=m.useState(r),[d,f]=m.useState(null),[u,p]=m.useState(null),[g,x]=m.useState(null),[w,E]=m.useState([]),[b,h]=m.useState(null),[v,_]=m.useState(null),[y,T]=m.useState("select"),[L,B]=m.useState({size:.04,hardness:.75,opacity:1,shape:"round",pressureMode:"constant"}),[C,j]=m.useState(.5),[z,S]=m.useState(1),[k,I]=m.useState(!1),[D,R]=m.useState([]),[O,M]=m.useState([]),[V,F]=m.useState(null),[ne,Y]=m.useState(null),[K,Z]=m.useState(""),[$,Q]=m.useState(()=>Hu()),[re,ae]=m.useState(0),[Le,ke]=m.useState([]),[ve,Dt]=m.useState(()=>Ts("")),J=Su(),le=m.useRef(null),ce=m.useRef(!1),X=m.useRef(t),fe=m.useRef(null),pe=m.useCallback(N=>Q(P=>{const W=P.artboard;return W.zoom===N.zoom&&W.panX===N.panX&&W.panY===N.panY&&W.fit===N.fit?P:{...P,artboard:N}}),[]),ge=m.useCallback(N=>Q(P=>P.openMenu===N?P:{...P,openMenu:N}),[]);m.useEffect(()=>{const N=ce.current,P=X.current!==t;if(ce.current=e,X.current=t,!e||!P)return;const W=r??o[0]??null,H=Dr(l),q=Dr(W);N&&H&&q!==H&&Yn()==="keep"?ke(ue=>[...new Set([...ue,H])].filter(Re=>Re!==q)):q&&ke(ue=>ue.filter(Re=>Re!==q)),fe.current=N?{mode:$.mode,geometry:Fp($,{width:window.innerWidth,height:window.innerHeight})}:null,c(W)},[t,r,o,e]),m.useEffect(()=>{h(null)},[l,e]),m.useEffect(()=>{if(!(!e||!l))try{const N=rn(Up(l)?.value);N.regions=Ip(N.regions),Mr(N.regions);const P=$u(Ua(l)?.value,N.document_id),W=jn(P,new Set(N.regions.map(ho=>ho.id))),H=Ua(l);H&&JSON.stringify(P)!==JSON.stringify(W)&&(H.value=JSON.stringify(W),H.callback?.(H.value),l.graph?.setDirtyCanvas?.(!0,!0));const q=sl(N.document_id),ue=N.regions.some(ho=>ho.id===q.selectedRegionId)?q.selectedRegionId:N.regions[0]?.id??null,Re=fe.current;fe.current=null,Re&&(q.mode=Re.mode,q.windows[Re.mode]=Re.geometry);const st=N.regions.find(ho=>ho.id===ue),Wt=st&&Co(st).some(ho=>ho.id===q.selectedLayerId)?q.selectedLayerId:null;Q(q),f(N),Dt(W),p(ue),x(Wt),E(Wt?[Wt]:[]),_(Wt),T(q.tool),B(q.brush),j(q.displayOpacity),S(q.backgroundOpacity),I(q.isolate&&!!Wt),R([]),M([]),Z("")}catch(N){Z(N instanceof Error?N.message:String(N))}},[l,e]),m.useEffect(()=>{d&&yd(d.document_id,{...$,selectedRegionId:u,selectedLayerId:g,displayOpacity:C,backgroundOpacity:z,isolate:k,tool:y,brush:L})},[z,L,C,d,k,g,u,y,$]),m.useEffect(()=>{if(!e)return;const N=()=>Q(P=>({...P,windows:{workspace:nn(P.windows.workspace,{width:window.innerWidth,height:window.innerHeight},"workspace"),floating:nn(P.windows.floating,{width:window.innerWidth,height:window.innerHeight},"floating")}}));return window.addEventListener("resize",N),()=>window.removeEventListener("resize",N)},[e]);const Ce=d?.regions.find(N=>N.id===u)??null,Qe=Wp(Ce,g),Be=b?Qe.filter(N=>N.id===b):Qe,_e=Ce&&g?Co(Ce).find(N=>N.id===g)??null:null,xe=Ce?Co(Ce).filter(N=>w.includes(N.id)):[],ze=xe.length>1&&xe.every(N=>!N.authoring.locked),Je=!!_e&&!_e.authoring.locked,Fe=N=>{x(N),E(N?[N]:[]),_(N),h(null)},Po=(N,P,W)=>{const H=d?.regions.find(Wt=>Wt.id===N);if(!H)return;const q=N===u,ue=[...Co(H)].reverse().map(Wt=>Wt.id),st=G0(q?{ids:w,primary:g,anchor:v}:{ids:[],primary:null,anchor:null},P,ue,W);p(N),E(st.ids),x(st.primary),_(st.anchor),I(!1),h(null)},cn=V&&g&&V.every(N=>It(N)===g)?le.current&&"commit"in le.current&&le.current.commit==="subtract"?[...Be,...V]:V:Be,Nr=cn.length&&d?Es(cn,d.canvas):null,Eo=m.useCallback((N,P=!0,W=ve)=>{if(!l)return;P&&d&&(R(Re=>[...Re.slice(-99),lc(d,ve)]),M([]));const H=jn(W,new Set(N.regions.map(Re=>Re.id)));f(N);const q=Up(l);q&&(q.value=JSON.stringify(N),q.callback?.(q.value)),Dt(H);const ue=Ua(l);ue&&(ue.value=JSON.stringify(H),ue.callback?.(ue.value)),l.graph?.setDirtyCanvas?.(!0,!0)},[d,ve,l]),Ne=m.useCallback((N,P=!0)=>{if(!d)return;const W=Yt(d);N(W),Eo(W,P)},[d,Eo]),rr=m.useCallback(N=>{if(!l)return;const P=d?jn(N,new Set(d.regions.map(H=>H.id))):N;Dt(P);const W=Ua(l);W&&(W.value=JSON.stringify(P),W.callback?.(W.value)),l.graph?.setDirtyCanvas?.(!0,!0)},[d,l]),va=N=>rr({...ve,global_stack_id:N}),ma=(N,P)=>{const W={...ve.regions};P?W[N]=P:delete W[N],rr({...ve,regions:W})},xa=N=>Ne(P=>{const W=P.regions.find(H=>H.id===u);W&&N(W)}),Or=(N,P)=>Ne(W=>{const H=W.regions.find(q=>q.id===u);H&&P(Wp(H,N),H)}),po=m.useCallback(()=>{le.current=null,F(null)},[]),ya=m.useCallback(()=>{if(le.current?.mode!=="draw-polygon"||!V?.length)return;const N=V.map(P=>P.type==="polygon"?{...P,points:P.points.filter((W,H,q)=>H===0||Math.hypot(W.x-q[H-1].x,W.y-q[H-1].y)>.001)}:P);if(N.some(P=>P.type!=="polygon"||P.points.length<3))return po();Ne(P=>{const W=P.regions.find(H=>H.id===u);W&&W.geometry.push(...N)}),po()},[po,V,Ne,u]),Ss=m.useCallback(()=>{if(!d||!D.length)return;const N=D[D.length-1];R(D.slice(0,-1)),M([lc(d,ve),...O]),Eo(Yt(N.document),!1,Yt(N.loraBindings))},[d,O,D,ve,Eo]),Ls=m.useCallback(()=>{if(!d||!O.length)return;const N=O[0];M(O.slice(1)),R([...D,lc(d,ve)]),Eo(Yt(N.document),!1,Yt(N.loraBindings))},[d,O,D,ve,Eo]),Cs=N=>{Or(N,(P,W)=>{W.geometry=W.geometry.filter(H=>It(H)!==N)}),w.includes(N)&&Fe(null)},xm=N=>Ne(P=>{const W=P.regions.find(q=>q.id===u),H=W?.geometry.find(q=>q.id===N);H&&(H.enabled=H.enabled===!1)}),ym=N=>{const P=d?.regions.find(W=>W.id===u);if(!P||!fd(P.geometry,N)){Oo({title:"Operation cannot be removed",message:"This operation is the additive base for later subtract operations. Delete or move those operations first.",tone:"warning",duration:5e3});return}Ne(W=>{const H=W.regions.find(q=>q.id===u);H&&(H.geometry=H.geometry.filter(q=>q.id!==N))}),b===N&&h(null)},Ku=()=>{if(!u||!g||!ze)return;const N=g;Ne(P=>{const W=P.regions.find(H=>H.id===u);W&&K0(W,w,N)}),Fe(N)},_m=async()=>{if(!(!d||!u||!g||!_e||!Je))try{const N=await n1(_e.geometries,d.canvas,Lt);if(N.length<2){Oo({title:"Layer was not split",message:"The selected layer contains fewer than two disconnected visible areas.",tone:"info",duration:4500});return}Ne(W=>{const H=W.regions.find(ue=>ue.id===u);if(!H)return;const q=H.geometry.findIndex(ue=>It(ue)===g);H.geometry=H.geometry.filter(ue=>It(ue)!==g),H.geometry.splice(Math.max(0,q),0,...N)});const P=N.map(W=>It(W));E(P),x(P[0]),_(P[0])}catch(N){Oo({title:"Split failed",message:String(N),tone:"danger",duration:6e3})}};m.useEffect(()=>{if(!e)return;const N=P=>{if(P.key==="Escape"&&le.current){P.preventDefault(),P.stopImmediatePropagation(),po();return}if(P.key==="Enter"&&le.current?.mode==="draw-polygon"){P.preventDefault(),P.stopImmediatePropagation(),ya();return}if((P.ctrlKey||P.metaKey)&&P.key.toLowerCase()==="e"&&ze){P.preventDefault(),P.stopImmediatePropagation(),Ku();return}if((P.key==="Delete"||P.key==="Backspace")&&g&&!(P.target instanceof HTMLInputElement||P.target instanceof HTMLTextAreaElement)){P.preventDefault(),P.stopImmediatePropagation(),Cs(g);return}!(P.ctrlKey||P.metaKey)||P.key.toLowerCase()!=="z"||(P.preventDefault(),P.stopImmediatePropagation(),P.shiftKey?Ls():Ss())};return window.addEventListener("keydown",N,!0),()=>window.removeEventListener("keydown",N,!0)},[po,ze,Cs,ya,e,Ls,g,w,Ss]);const wm=N=>{if(!d||!Ce||Ce.authoring.locked)return;const P=sc(N,L.pressureMode),W=N.target.closest?.("[data-handle]")?.getAttribute("data-handle");if(y==="select"){if(N.currentTarget.setPointerCapture(N.pointerId),F(null),W&&_e&&!_e.authoring.locked){le.current={mode:"resize",start:P,original:Yt(Be),handle:W};return}const Qt=[...Co(Ce)].reverse().find(Vt=>Vt.enabled&&Vt.authoring.visible&&Vt.geometries.filter(To=>To.operation==="add").some(To=>V0(To,P,d.canvas)));Fe(Qt?.id??null),Qt&&!Qt.authoring.locked&&(le.current={mode:"move",start:P,startScreen:{x:N.clientX,y:N.clientY},original:Yt(Qt.geometries),started:!1});return}const H=y.endsWith("subtract");if(H&&(!g||_e?.authoring.locked))return;if(y.startsWith("polygon")&&le.current?.mode==="draw-polygon"){const Qt=V?.find(Vt=>Vt.type==="polygon")?.points.length??0;if(E0(Qt,le.current.startScreen,{x:N.clientX,y:N.clientY})){ya();return}F(Vt=>Vt?.map(To=>To.type==="polygon"?{...To,points:[...To.points,P]}:To)??null);return}const q=Lt(),ue=H?null:w0(_e),Re=H?g:ue??q,st=y.startsWith("rect")?"Rectangle":y.startsWith("ellipse")?"Ellipse":y.startsWith("polygon")?"Polygon":"Brush",Wt=H||ue?_e?.authoring:{name:`${st} ${Co(Ce).length+1}`,visible:!0,locked:!1},ho=H?[...new Set(Be.map(ha))]:[void 0];if(y.startsWith("rect")||y.startsWith("ellipse")){N.currentTarget.setPointerCapture(N.pointerId);const Qt=y.startsWith("rect")?"rect":"ellipse";F(ho.map((Vt,To)=>({id:To?Lt():q,layer_id:Re,mask_group_id:Vt,type:Qt,operation:H?"subtract":"add",enabled:!0,authoring:Wt,x:P.x,y:P.y,width:.001,height:.001}))),le.current={mode:"draw-box",start:P,commit:H?"subtract":"add"},H||Fe(Re)}else y.startsWith("polygon")?(F(ho.map((Qt,Vt)=>({id:Vt?Lt():q,layer_id:Re,mask_group_id:Qt,type:"polygon",operation:H?"subtract":"add",enabled:!0,authoring:Wt,points:[P]}))),le.current={mode:"draw-polygon",start:P,startScreen:{x:N.clientX,y:N.clientY},commit:H?"subtract":"add"},H||Fe(Re)):(N.currentTarget.setPointerCapture(N.pointerId),F(ho.map((Qt,Vt)=>({id:Vt?Lt():q,layer_id:Re,mask_group_id:Qt,type:"brush_stroke",operation:y==="brush-add"?"add":"subtract",enabled:!0,authoring:Wt,size:L.size,hardness:L.hardness,opacity:L.opacity,shape:L.shape,pressure_mode:L.pressureMode,points:[P]}))),le.current={mode:"draw-brush",start:P,commit:y==="brush-add"?"add":"subtract"},y==="brush-add"&&Fe(Re))},km=N=>{if(!d)return;const P=sc(N,L.pressureMode);Y(P);const W=le.current;if(W)if(W.mode==="draw-box"&&(V?.[0]?.type==="rect"||V?.[0]?.type==="ellipse"))F(V.map(H=>H.type==="rect"||H.type==="ellipse"?{...H,x:Math.min(W.start.x,P.x),y:Math.min(W.start.y,P.y),width:Math.max(.001,Math.abs(P.x-W.start.x)),height:Math.max(.001,Math.abs(P.y-W.start.y))}:H));else if(W.mode==="draw-brush"&&V?.[0]?.type==="brush_stroke")F(V.map(H=>H.type==="brush_stroke"?{...H,points:[...H.points,P]}:H));else if(W.mode==="move"){if(!W.started&&!k0(W.startScreen,{x:N.clientX,y:N.clientY}))return;W.started=!0,F(Bp(W.original,P.x-W.start.x,P.y-W.start.y,d.canvas))}else W.mode==="resize"&&F(H0(W.original,W.handle,P.x-W.start.x,P.y-W.start.y,N.shiftKey,d.canvas))},Em=N=>{if(!d||!le.current||!V)return po();const P=le.current,W=sc(N,L.pressureMode);if(P.mode==="draw-polygon")return;let H=S0(P.mode)?V.map(q=>q.type==="brush_stroke"?{...q,points:Y0([...q.points,W])}:q):V;if(P.mode==="draw-box"&&(H[0].type==="rect"||H[0].type==="ellipse")&&(H[0].width<=.002||H[0].height<=.002))return po();Ne(q=>{const ue=q.regions.find(Re=>Re.id===u);if(ue)if(P.mode.startsWith("draw"))ue.geometry.push(...H);else{const Re=new Map(H.map(st=>[st.id,st]));ue.geometry=ue.geometry.map(st=>Re.get(st.id)??st)}}),po()},Tm=N=>{le.current?.mode==="draw-polygon"&&(N.preventDefault(),ya())},Rm=(N,P)=>Ne(W=>{const H=W.regions.findIndex(ue=>ue.id===N),q=H+P;q<0||q>=W.regions.length||([W.regions[H],W.regions[q]]=[W.regions[q],W.regions[H]],Mr(W.regions))}),Sm=(N,P)=>Or(N,(W,H)=>{const q=Co(H),ue=q.findIndex(st=>st.id===N),Re=ue+P;Re<0||Re>=q.length||([q[ue],q[Re]]=[q[Re],q[ue]],H.geometry=q.flatMap(st=>st.geometries))}),Lm=N=>{let P=!1,W=null;if(Ne(q=>{P=d1(q,N,()=>W=Lt()),Mr(q.regions)}),!P)return;if(p(N.target.regionId),N.source.kind==="region"){Fe(null);return}const H=N.source.kind==="layer"?N.source.layerId:N.target.kind==="region"?W:N.target.layerId;x(H),E(H?[H]:[]),_(H),h(N.source.kind==="geometry"?N.source.geometryId:null),I(!1)},Cm=(N,P)=>Or(N,W=>{if(W.length)if(P==="enabled"){const H=!W.some(q=>q.enabled!==!1);W.forEach(q=>{q.enabled=H})}else{const H=!io(W[0])[P];W.forEach(q=>{q.authoring={...io(q),[P]:H}})}}),Nm=N=>Or(N,(P,W)=>{const H=Lt(),q=Bp(Yt(P),.02,.02,d.canvas);am(q,Lt),q.forEach((ue,Re)=>{ue.id=Lt(),ue.layer_id=H,ue.authoring={...io(ue),name:`${io(ue).name} Copy`,visible:!0,locked:!1},Re&&(ue.authoring=q[0].authoring)}),W.geometry.push(...q),Fe(H)}),Om=N=>{const P=d?.regions.find(W=>W.id===N);P&&J.confirm({title:`Delete region “${P.name}”?`,message:`This removes ${Co(P).length} layer(s) and clears child-region parent references.`,confirmLabel:"Delete region",danger:!0,action:()=>{Ne(W=>{W.regions=W.regions.filter(H=>H.id!==N),W.regions.forEach(H=>{H.parent_region_id===N&&(H.parent_region_id=null)}),Mr(W.regions)}),p(d?.regions.find(W=>W.id!==N)?.id??null),Fe(null)}})},Am=async N=>{try{if(!d)return;const P=tw(rn(await N.text()),d.document_id);P.regions=Ip(P.regions),Mr(P.regions),Eo(P),p(P.regions[0]?.id??null),Fe(null)}catch(P){Oo({title:"Document import failed",message:String(P),tone:"danger",duration:6e3})}},Dm=async N=>{try{const P=JSON.parse(await N.text());if(P?.schema!=="bv.regions"||![1,2].includes(P?.version)||!Array.isArray(P.regions))throw new Error("Not a BV Regions v1/v2 export");const W=P.version===1?P.regions.map(H=>({...H,usage:"generation"})):P.regions;Ne(H=>{H.regions.push(...u1(W)),Mr(H.regions)})}catch(P){Oo({title:"Region import failed",message:String(P),tone:"danger",duration:6e3})}},Mm=ga(l);if(!e)return null;const qu=Fp($,{width:window.innerWidth,height:window.innerHeight}),Ju=(N,P,W=!0)=>{const H=Dr(l);qo("regional",N),N!==H&&(ke(q=>P?q.filter(ue=>ue!==N):[...new Set([...q,H])].filter(ue=>ue&&ue!==N)),W&&(fe.current={mode:$.mode,geometry:qu}),c(o.find(q=>Dr(q)===N)??null))},Zu=d?a1(ve,i,new Set(d.regions.map(N=>N.id))):[],jm=d?l1(ve,i,Object.fromEntries(d.regions.map(N=>[N.id,N.name]))):"",Ns=N=>d?s.jsx(U0,{mode:N,region:Ce,layer:_e,bounds:Nr,canvas:d.canvas,automaticRegionColor:Ce?Pb(d.regions.indexOf(Ce)):null,globalPrompts:d.prompts.global,backgroundPrompts:d.prompts.background,negativeMode:d.negative_mode,promptSections:$.promptSections,loraBindings:ve,loraStacks:i,onGlobalLoraStack:va,onRegionLoraStack:ma,onPromptSection:(P,W)=>Q(H=>({...H,promptSections:{...H.promptSections,[P]:W}})),onNegativeMode:P=>Ne(W=>{W.negative_mode=P}),onGlobalPrompts:P=>Ne(W=>{W.prompts.global=P}),onBackgroundPrompts:P=>Ne(W=>{W.prompts.background=P}),onRegion:xa,onLayerBounds:P=>g&&Or(g,(W,H)=>{const q=new Map(im(W,P,d.canvas).map(ue=>[ue.id,ue]));H.geometry=H.geometry.map(ue=>q.get(ue.id)??ue)}),onBrushSetting:(P,W)=>g&&Or(g,H=>H.forEach(q=>{q.type==="brush_stroke"&&Object.assign(q,{[P]:W})}))}):null;return s.jsxs(s.Fragment,{children:[Le.map(N=>{const P=o.find(W=>Dr(W)===N);return P?s.jsx(ks,{title:`Regional Editor · ${P.title||"BV Regional Prompt"} · #${P.id}`,onRestore:()=>Ju(N,!1,!1),onClose:()=>ke(W=>W.filter(H=>H!==N))},N):null}),s.jsx(ti,{open:e,activationToken:t,title:"BV Regional Editor",menuVisible:Mm,onMenuVisible:N=>Qn(l,N),context:s.jsx(ba,{label:"Regional prompt document",value:Dr(l),onNavigate:Ju,options:o.filter(N=>sn(N)).map(N=>({value:Dr(N),label:`${N.title||"BV Regional Prompt"} · #${N.id}`}))}),center:s.jsx(P0,{openMenu:$.openMenu,onOpenMenu:ge,displayOpacity:C,backgroundOpacity:z,isolate:k,binaryMaskPreview:$.binaryMaskPreview,hasSelection:!!g,onDisplayOpacity:j,onBackgroundOpacity:S,onToggleIsolate:()=>I(N=>!N),onToggleBinaryMaskPreview:()=>{po(),Q(N=>({...N,binaryMaskPreview:!N.binaryMaskPreview}))},onExportDocument:()=>d&&Vp(`${d.title||"bv-regional"}.json`,d),onExportRegions:()=>d&&Vp(`${d.title||"bv-regions"}.regions.json`,{schema:"bv.regions",version:2,canvas:d.canvas,regions:d.regions}),onImportDocument:Am,onImportRegions:Dm,onUndo:Ss,onRedo:Ls,canUndo:!!D.length,canRedo:!!O.length,canMergeLayers:ze,onMergeLayers:Ku,canvas:d?.canvas??{width:1024,height:1024},onCanvas:N=>Ne(P=>{P.canvas=N})}),mode:$.mode,initialGeometry:qu,minSize:{width:780,height:520},className:"bv-regional-shell",bodyClassName:"bv-regional-window-body",onModeChange:N=>Q(P=>({...P,mode:N})),onGeometry:N=>Q(P=>({...P,windows:{...P.windows,floating:N}})),onClose:a,status:d?s.jsxs(s.Fragment,{children:[s.jsx("span",{children:Zu[0]?`⚠ ${Zu[0]}`:`✓ ${jm}`}),s.jsxs("span",{children:[d.regions.length," regions · layout adjusted for this session"]})]}):null,actions:d?s.jsx(Dv,{storageId:`regional-editor:${d.document_id}`,editorType:"regional",onClick:()=>ae(N=>N+1)}):null,children:K?s.jsx("div",{className:"bv-regional-error",children:K}):d&&s.jsx(s.Fragment,{children:s.jsx("main",{className:"bv-regional-dock-host",children:s.jsx(Cv,{storageId:`regional-editor:${d.document_id}`,resetSignal:re,defaultModel:{global:{tabEnableClose:!1,tabEnablePopout:!1,tabEnablePopoutIcon:!1,tabEnablePopoutFloatIcon:!0,tabSetMinWidth:180,tabSetMinHeight:120},borders:[],layout:{type:"row",children:[{type:"row",weight:22,minWidth:220,children:[{type:"tabset",weight:55,children:[{type:"tab",id:"regions",name:"Regions",component:"regions",enablePopoutFloatIcon:!0}]},{type:"tabset",weight:45,children:[{type:"tab",id:"selection",name:"Selection",component:"selection",enablePopoutFloatIcon:!0}]}]},{type:"tabset",weight:54,minWidth:320,children:[{type:"tab",id:"canvas",name:"Canvas",component:"canvas",enablePopoutFloatIcon:!0}]},{type:"row",weight:24,minWidth:260,children:[{type:"tabset",weight:65,children:[{type:"tab",id:"global",name:"Global",component:"global",enablePopoutFloatIcon:!0}]},{type:"tabset",weight:35,children:[{type:"tab",id:"region",name:"Region",component:"region",enablePopoutFloatIcon:!0}]}]}]}},panels:[{id:"regions",title:"Regions",weight:22,minWidth:220,content:s.jsx(rw,{regions:d.regions,selectedRegionId:u,selectedLayerId:g,selectedLayerIds:w,selectedGeometryId:b,onSelectRegion:N=>{p(N),Fe(null),I(!1)},onSelectLayer:Po,onSelectGeometry:(N,P,W)=>{p(N),x(P),E([P]),_(P),h(W),I(!1)},onToggleGeometry:xm,onDeleteGeometry:ym,onAddRegion:()=>Ne(N=>{const P=ew(N.regions.length);N.regions.unshift(P),Mr(N.regions),p(P.id),Fe(null)}),onRenameRegion:(N,P)=>Ne(W=>{W.regions.find(H=>H.id===N).name=P}),onRenameLayer:(N,P)=>Or(N,W=>W.forEach(H=>{H.authoring={...io(H),name:P}})),onToggleRegion:(N,P)=>Ne(W=>{const H=W.regions.find(q=>q.id===N);P==="enabled"?H.enabled=!H.enabled:P==="visible"?H.authoring.visible=!H.authoring.visible:H.authoring.locked=!H.authoring.locked}),onToggleLayer:Cm,onMoveRegion:Rm,onMoveLayer:Sm,onTreeMove:Lm,onDeleteRegion:Om,onDeleteLayer:Cs,onDuplicateLayer:Nm,canSplitDisconnectedAreas:Je,onSplitDisconnectedAreas:_m})},{id:"canvas",title:"Canvas",weight:54,minWidth:320,content:s.jsx(A0,{document:d,background:n[d.document_id],selectedRegionId:u,selectedLayerId:g,draft:V,selectionBounds:Nr,cursor:ne,tool:y,brush:L,canSubtract:!!_e&&!_e.authoring.locked,displayOpacity:C,backgroundOpacity:z,isolate:k,binaryMaskPreview:$.binaryMaskPreview,initialView:$.artboard,onView:pe,onTool:N=>{T(N),po()},onBrush:B,onPointerDown:wm,onPointerMove:km,onPointerUp:Em,onPointerCancel:po,onPointerLeave:()=>{le.current||Y(null)},onDoubleClick:Tm},d.document_id)},{id:"global",title:"Global",weight:12,minWidth:240,content:Ns("document")},{id:"selection",title:"Selection",weight:12,minWidth:240,content:Ns("selection")},{id:"region",title:"Region",weight:12,minWidth:240,content:Ns("region")}]})})})}),J.dialog]})}const jr=e=>ea(Nt().rootGraph??Nt().graph,e),Hp=e=>e?.widgets?.find(t=>t.name==="regional_json"),cc=e=>e?.widgets?.find(t=>t.name==="lora_bindings_json"),p1=(e,t)=>t==="global"||t==="background"||e.regions.some(o=>o.id===t),h1=(e,t)=>t==="global"?e.prompts.global:t==="background"?e.prompts.background:e.regions.find(o=>o.id===t)?.prompts??e.prompts.global;function g1({open:e,activationToken:t=0,nodes:o,initialNode:r,loraStacks:n,onClose:i,onOpenEditor:a}){const[l,c]=m.useState(r),[d,f]=m.useState(null),[u,p]=m.useState(()=>Ts("")),[g,x]=m.useState("global"),[w,E]=m.useState(()=>Yl({x:window.innerWidth-544,y:84,width:520,height:640},{width:window.innerWidth,height:window.innerHeight})),[b,h]=m.useState(""),[v,_]=m.useState([]),y=m.useRef(null),T=m.useRef(!1),L=m.useRef(t);m.useEffect(()=>{const R=T.current,O=L.current!==t;if(T.current=e,L.current=t,!e||!O)return;const M=r??o[0]??null,V=jr(l),F=jr(M);R&&V&&F!==V&&Yn()==="keep"?_(ne=>[...new Set([...ne,V])].filter(Y=>Y!==F)):F&&_(ne=>ne.filter(Y=>Y!==F)),y.current=R?w:null,c(M)},[t,r,o,e]),m.useEffect(()=>{if(l)try{const R=rn(Hp(l)?.value),O=$u(cc(l)?.value,R.document_id),M=jn(O,new Set(R.regions.map(Y=>Y.id))),V=cc(l);V&&JSON.stringify(O)!==JSON.stringify(M)&&(V.value=JSON.stringify(M),V.callback?.(V.value),l.graph?.setDirtyCanvas?.(!0,!0));const F=sl(R.document_id),ne=p1(R,F.quickPromptTarget)?F.quickPromptTarget:"global";f(R),p(M),x(ne),E(y.current??F.quickPromptWindow),y.current=null,h("")}catch(R){f(null),h(R instanceof Error?R.message:String(R))}},[l,e]);const B=m.useMemo(()=>d?h1(d,g):null,[d,g]),C=R=>{if(x(R),!d)return;const O=sl(d.document_id);yd(d.document_id,{...O,quickPromptTarget:R})},j=R=>{if(!d)return;const O=sl(d.document_id);yd(d.document_id,{...O,quickPromptWindow:R})},z=R=>{if(!d||!l)return;const O=Yt(d);if(g==="global")O.prompts.global=R;else if(g==="background")O.prompts.background=R;else{const V=O.regions.find(F=>F.id===g);if(!V)return;V.prompts=R}f(O);const M=Hp(l);M&&(M.value=JSON.stringify(O),M.callback?.(M.value)),l.graph?.setDirtyCanvas?.(!0,!0)},S=R=>{if(!d||!l)return;let O;if(g==="global"||g==="background")O={...u,global_stack_id:R};else{const V={...u.regions};R?V[g]=R:delete V[g],O={...u,regions:V}}p(O);const M=cc(l);M&&(M.value=JSON.stringify(O),M.callback?.(M.value)),l.graph?.setDirtyCanvas?.(!0,!0)},k=g==="global"||g==="background"?u.global_stack_id??"":u.regions[g]??"",I=(R,O,M=!0)=>{const V=jr(l);qo("quick",R),R!==V&&(_(F=>O?F.filter(ne=>ne!==R):[...new Set([...F,V])].filter(ne=>ne&&ne!==R)),y.current=M?w:null,c(o.find(F=>jr(F)===R)??null))},D=ga(l);return s.jsxs(s.Fragment,{children:[v.map(R=>{const O=o.find(M=>jr(M)===R);return O?s.jsx(ks,{title:`Quick Edit · ${O.title||"BV Regional Prompt"} · #${O.id}`,onRestore:()=>I(R,!1,!1),onClose:()=>_(M=>M.filter(V=>V!==R))},R):null}),s.jsx(ti,{open:e,activationToken:t,title:"Regional Quick Edit",menuVisible:D,onMenuVisible:R=>Qn(l,R),context:s.jsx(ba,{label:"Regional Prompt Node",value:jr(l),options:o.filter(R=>sn(R)).map(R=>({value:jr(R),label:`${R.title||"BV Regional Prompt"} · #${R.id}`})),onNavigate:I}),allowWorkspace:!1,initialGeometry:w,minSize:{width:360,height:320},className:"bv-quick-prompt-window bv-density-compact",onClose:i,onGeometry:R=>{const O=Yl(R,{width:window.innerWidth,height:window.innerHeight});E(O),j(O)},status:s.jsx(Tb,{tone:"success",dot:!0,children:"Autosaved"}),actions:s.jsx(se,{intent:"primary",disabled:!l||!d,onClick:()=>l&&a(l),children:"Open Full Editor"}),children:s.jsx("div",{className:"bv-quick-prompt-body",children:b?s.jsx(jo,{tone:"danger",title:"Prompt document unavailable",children:b}):d&&B&&s.jsxs(s.Fragment,{children:[s.jsx(ft,{label:"Prompt Target",value:g,onValue:C,options:[{value:"global",label:"Global"},{value:"background",label:"Background"},...d.regions.map(R=>({value:R.id,label:R.name}))]}),s.jsx(ft,{label:g==="global"||g==="background"?"Global LoRA Stack":"Additional LoRA Stack",help:g==="global"||g==="background"?"Applied globally and inherited by every region.":"Added to the global stack for this region.",value:k,onValue:R=>S(R||null),options:[{value:"",label:"None"},...n.map(R=>({value:R.id,label:R.name}))]}),s.jsxs("div",{className:"bv-prompt-editor-fields",children:[s.jsx(ko,{label:"Positive",children:s.jsx($l,{autoFocus:!0,value:B.positive_source,onValue:R=>z({...B,positive_source:R}),completionContext:{scope:g==="global"||g==="background"?g:"region",polarity:"positive"}})}),s.jsx(ko,{label:"Negative",children:s.jsx($l,{value:B.negative_source,onValue:R=>z({...B,negative_source:R}),completionContext:{scope:g==="global"||g==="background"?g:"region",polarity:"negative"}})})]})]})})})]})}function sm(e,t){const o=t?e.filter(n=>n.enabled!==!1&&(n.usage===t||n.usage==="both"||!n.usage&&t==="generation")):e,r=new Map;for(const n of o)r.set(n.name,(r.get(n.name)??0)+1);return o.map(n=>({...n,label:r.get(n.name)===1?n.name:`${n.name} · ${n.id.slice(0,8)}`}))}function b1(e){const t=new Map;return e.forEach(o=>t.set(o.title,(t.get(o.title)??0)+1)),e.map(o=>({...o,label:t.get(o.title)>1?`${o.title} · #${o.nodeId}`:`${o.title} · #${o.nodeId}`}))}function v1(e,t,o){const r=typeof e=="string"?e:"";return t.some(n=>n.documentId===r)?r:o?t[0]?.documentId??"":""}function m1(e,t,o){Jv(o);const r=document.createElement("div");r.className="bv-ui bv-settings-datasets";const n=Jn(r),i=Zv;return n.render(m.createElement(i,{onSelectionChange:a=>t(JSON.stringify(a))})),r}const pr=new Map;let fi=null;function x1(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 $p(e){if(pr.has(e)||!x1(e))return;let t=[],o=0,r=null,n=null,i=null,a=null,l=null,c=210;const d=()=>{n?.abort(),n=null,t=[],r=null,l?.unmount(),l=null,a?.remove(),a=null},f=()=>{if(!a)return;const h=Hl(e,xd(),c);u(h)},u=(h=Hl(e,xd(),c))=>{a||(a=document.createElement("div"),a.className="bv-ui bv-ui-portal",document.body.append(a),l=Jn(a)),l.render(m.createElement(rm,{suggestions:t,selected:o,position:h,onAccept:g,onHeight:v=>{Math.abs(v-c)<1||(c=v,f())}}))},p=()=>u(),g=(h=o)=>{const v=t[h];if(!r||!v)return;const _=em(e.value,r,v);e.value=_.text,e.dispatchEvent(new InputEvent("input",{bubbles:!0,inputType:"insertText",data:v.insertText})),e.dispatchEvent(new Event("change",{bubbles:!0})),d(),requestAnimationFrame(()=>{e.focus(),e.setSelectionRange(_.caret,_.caret)})},x=()=>{if(!Vu()||e.selectionStart!==e.selectionEnd||(i!=null&&window.clearTimeout(i),n?.abort(),r=Qv(e.value,e.selectionStart??e.value.length,{scope:"generic",polarity:"positive"}),!r))return d();const h=r;n=new AbortController;const v=n;i=window.setTimeout(async()=>{const _=await tm(h,[om],v.signal);v.signal.aborted||document.activeElement!==e||(t=_,o=0,_.length?p():d())},120)},w=h=>{t.length&&(h.key==="ArrowDown"||h.key==="ArrowUp"?(h.preventDefault(),h.stopPropagation(),h.stopImmediatePropagation(),o=(o+(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(),d()))},E=()=>window.setTimeout(()=>{a?.contains(document.activeElement)||d()},120),b=()=>{document.activeElement===e&&x()};e.addEventListener("input",x),e.addEventListener("select",x),document.addEventListener("selectionchange",b),e.addEventListener("keydown",w,!0),e.addEventListener("blur",E),window.addEventListener("resize",f),window.addEventListener("scroll",f,!0),pr.set(e,{close:d,destroy:()=>{d(),e.removeEventListener("input",x),e.removeEventListener("select",x),document.removeEventListener("selectionchange",b),e.removeEventListener("keydown",w,!0),e.removeEventListener("blur",E),window.removeEventListener("resize",f),window.removeEventListener("scroll",f,!0)}})}function Yp(e){e instanceof HTMLTextAreaElement&&$p(e),e.querySelectorAll?.("textarea").forEach(t=>$p(t))}function y1(e){(e instanceof HTMLTextAreaElement?[e]:[...e.querySelectorAll?.("textarea")??[]]).forEach(o=>{pr.get(o)?.destroy(),pr.delete(o)})}function _1(){if(fi)return fi;Yp(document);const e=new MutationObserver(r=>r.forEach(n=>{n.addedNodes.forEach(i=>{i instanceof Element&&Yp(i)}),n.removedNodes.forEach(i=>{i instanceof Element&&y1(i)})}));e.observe(document.body,{childList:!0,subtree:!0});const t=()=>{Vu()||pr.forEach(r=>r.close())},o=()=>pr.forEach(r=>r.close());return window.addEventListener(ia,t),window.addEventListener(aa,o),fi=()=>{e.disconnect(),window.removeEventListener(ia,t),window.removeEventListener(aa,o),pr.forEach(r=>r.destroy()),pr.clear(),fi=null},fi}function Xp(e){return e?.extensionManager?.workflow?.activeWorkflow??e?.workflowManager?.activeWorkflow??e?.graph??null}function w1(e,t,o,r=(i,a)=>globalThis.setInterval(i,a),n=i=>globalThis.clearInterval(i)){const i=Xp(e);let a=!1;const l=()=>{a||Xp(e)===i||(a=!0,o())};t.addEventListener("graphChanged",l);const c=r(l,250);return()=>{t.removeEventListener("graphChanged",l),n(c)}}const cm=["region","global_influence","background_influence","primary_region_influence","context_regions_json"],k1=e=>cm.map(t=>e?.find(o=>o.name===t)?.value),E1=e=>Array.isArray(e)&&e.length===cm.length+1&&e[3]==null&&typeof e[4]=="number"&&typeof e[5]=="string"?[...e.slice(0,3),...e.slice(4)]:e,zo=(e,t,o,r)=>{const n=Number(e);return Number.isFinite(n)?Math.max(o,Math.min(r,n)):t},dm=()=>({global_influence:1,background_influence:.35,primary_region_influence:1,context_region_influence:1}),um=()=>({roi_padding:.15,threshold:.5,dilation:0,crop_factor:1.5,drop_size:10}),Yu=e=>e.filter(t=>t.enabled!==!1&&(t.usage==="detailer"||t.usage==="both")).sort((t,o)=>(t.priority??0)-(o.priority??0)),Ed=e=>({schema:"bv.detailer_plan",version:1,jobs:Yu(e).map(t=>({region_ids:[t.id],primary_region_id:t.id,mask_composition:"union",prompt_composition:"context",conditioning:dm(),detector:um()}))}),cl=(e,t)=>{const o=new Set(Yu(t).map(i=>i.id));let r;try{r=String(e??"").trim()?JSON.parse(String(e)):Ed(t)}catch{r=Ed(t)}return{schema:"bv.detailer_plan",version:1,jobs:Array.isArray(r?.jobs)?r.jobs.flatMap(i=>{const a=Array.isArray(i?.region_ids)?[...new Set(i.region_ids.map(String).filter(d=>o.has(d)))]:[];if(!a.length)return[];const l=i.conditioning??{},c=i.detector??{};return[{region_ids:a,primary_region_id:a.includes(String(i.primary_region_id))?String(i.primary_region_id):a[0],mask_composition:["union","intersection","subtract"].includes(i.mask_composition)?i.mask_composition:"union",prompt_composition:i.prompt_composition==="primary"?"primary":"context",...String(i.detector_id??"").trim()?{detector_id:String(i.detector_id).trim()}:{},conditioning:{global_influence:zo(l.global_influence,1,0,2),background_influence:zo(l.background_influence,.35,0,2),primary_region_influence:zo(l.primary_region_influence,1,0,2),context_region_influence:zo(l.context_region_influence,1,0,2)},detector:{roi_padding:zo(c.roi_padding,.15,0,2),threshold:zo(c.threshold,.5,0,1),dilation:Math.round(zo(c.dilation,0,-512,512)),crop_factor:zo(c.crop_factor,1.5,1,20),drop_size:Math.round(zo(c.drop_size,10,1,8192)),...String(c.query??"").trim()?{query:String(c.query).trim()}:{},...Array.isArray(c.labels)?{labels:c.labels.map(String).map(d=>d.trim()).filter(Boolean)}:{}}}]}):[]}},dc=e=>JSON.stringify(e),T1=e=>structuredClone(e);function R1({regions:e,detectorIds:t,stored:o,save:r,close:n,nodeId:i="",nodes:a=[],onNavigate:l=()=>{},currentNode:c}){const d=Yu(e),f=m.useMemo(()=>cl(o,e),[e,o]),u=ms(f),p=u.value,[g,x]=m.useState(()=>dc(f));xs(u);const w=dc(p)!==g,[E,b]=m.useState(null),h=()=>{const k=dc(p);r(k),x(k),u.clear()},v=k=>w?b(()=>k):k(),_=()=>v(n),y=ga(c),T=m.useMemo(()=>k=>s.jsx(ti,{...k,title:`${k.title} · #${i}`,shortTitle:"Detailer Plan",menuVisible:y,onMenuVisible:I=>Qn(c,I),onClose:_,context:s.jsx(ba,{label:"Detailer Plan Node",value:i,options:a.map(I=>({value:I.id,label:I.label})),onNavigate:(I,D)=>D?v(()=>l(I,!0)):l(I,!1)})}),[c,w,y,i,a,l]),[L,B]=m.useState([]),C=k=>u.commit(I=>{const D=T1(I);return k(D),D}),j=()=>C(k=>{const I=d[0];I&&k.jobs.push({region_ids:[I.id],primary_region_id:I.id,mask_composition:"union",prompt_composition:"context",conditioning:dm(),detector:um()})}),z=k=>[{value:"",label:"No detector · use composed region mask"},...[...new Set([...k&&!t.includes(k)?[k]:[],...t])].map(I=>({value:I,label:t.includes(I)?I:`Missing · ${I}`}))],S=p.jobs.map((k,I)=>({id:`job-${I}`,title:`Job ${I+1}`,description:k.region_ids.map(D=>d.find(R=>R.id===D)?.name??D).join(" + ")||"No region",summary:s.jsxs("div",{className:"bv-editor-item-compact-summary",children:[s.jsxs("span",{children:[k.region_ids.length," region",k.region_ids.length===1?"":"s"]}),s.jsx("span",{children:k.detector_id||"Composed mask"}),s.jsx("span",{children:k.region_ids.length?"Ready":"Needs region"})]}),content:s.jsxs("div",{className:"bv-editor-item-details",children:[s.jsxs("div",{className:"bv-editor-item-summary",children:[s.jsx(J_,{label:"Regions",value:k.region_ids,minSelected:1,options:d.map(D=>({value:D.id,label:D.name})),onValue:D=>C(R=>{const O=R.jobs[I];O.region_ids=D,D.includes(O.primary_region_id)||(O.primary_region_id=D[0]??"")})}),s.jsxs(Ln,{children:[s.jsx(ft,{label:"Detector assignment",value:k.detector_id??"",options:z(k.detector_id),onValue:D=>C(R=>{R.jobs[I].detector_id=D||void 0})}),k.region_ids.length>1&&s.jsx(ft,{label:"Primary region",value:k.primary_region_id,options:k.region_ids.map(D=>({value:D,label:d.find(R=>R.id===D)?.name??D})),onValue:D=>C(R=>{R.jobs[I].primary_region_id=D})})]})]}),s.jsx(Il,{value:L,onValue:B,items:[{id:`composition-${I}`,title:"Mask and prompt composition",content:s.jsxs(Ln,{children:[s.jsx(ft,{label:"Mask composition",value:k.mask_composition,options:[{value:"union",label:"Union"},{value:"intersection",label:"Intersection"},{value:"subtract",label:"Subtract in listed order"}],onValue:D=>C(R=>{R.jobs[I].mask_composition=D})}),s.jsx(ft,{label:"Prompt composition",value:k.prompt_composition,options:[{value:"context",label:"Primary and context regions"},{value:"primary",label:"Primary region only"}],onValue:D=>C(R=>{R.jobs[I].prompt_composition=D})})]})},{id:`conditioning-${I}`,title:"Conditioning strengths",content:s.jsx(Ln,{minimum:150,children:[["Global influence","global_influence"],["Background influence","background_influence"],["Primary region influence","primary_region_influence"],["Context region influence","context_region_influence"]].map(([D,R])=>s.jsx(jt,{label:D,value:k.conditioning[R],min:0,max:2,step:.05,onValue:O=>C(M=>{M.jobs[I].conditioning[R]=O})},R))})},{id:`detection-${I}`,title:"Detector and ROI settings",content:s.jsxs(Ln,{minimum:150,children:[s.jsx(jt,{label:"ROI padding",value:k.detector.roi_padding,min:0,max:2,step:.01,onValue:D=>C(R=>{R.jobs[I].detector.roi_padding=D})}),s.jsx(jt,{label:"Threshold",value:k.detector.threshold,min:0,max:1,step:.01,onValue:D=>C(R=>{R.jobs[I].detector.threshold=D})}),s.jsx(jt,{label:"Dilation",value:k.detector.dilation,min:-512,max:512,step:1,slider:!1,onValue:D=>C(R=>{R.jobs[I].detector.dilation=D})}),s.jsx(jt,{label:"Crop factor",value:k.detector.crop_factor,min:1,max:20,step:.1,onValue:D=>C(R=>{R.jobs[I].detector.crop_factor=D})}),s.jsx(jt,{label:"Drop size",value:k.detector.drop_size,min:1,max:8192,step:1,slider:!1,onValue:D=>C(R=>{R.jobs[I].detector.drop_size=D})}),s.jsx(on,{label:"Detector query",value:k.detector.query??"",onValue:D=>C(R=>{R.jobs[I].detector.query=D.trim()||void 0})}),s.jsx(on,{label:"Accepted labels",value:(k.detector.labels??[]).join(", "),onValue:D=>C(R=>{R.jobs[I].detector.labels=D.split(",").map(O=>O.trim()).filter(Boolean)})})]})}]})]})}));return s.jsxs(s.Fragment,{children:[s.jsx(T,{open:!0,title:"Regional Detailer Plan",initialGeometry:{width:1040,height:720},minSize:{width:420,height:360},onClose:n,status:w?"Unsaved plan changes":"Plan saved",actions:s.jsx(Fu,{primary:s.jsx(se,{intent:"primary",disabled:p.jobs.some(k=>!k.region_ids.length),onClick:h,children:"Save plan"}),secondary:s.jsxs(s.Fragment,{children:[s.jsx(se,{onClick:j,disabled:!d.length,children:"Add job"}),s.jsx(Ul,{label:"Detailer Plan",value:{schema:"bv.editor-draft",version:1,type:"detailer-plan",data:p},onImport:k=>{if(k?.schema!=="bv.editor-draft"||k?.version!==1||k?.type!=="detailer-plan"||!k?.data)throw new Error("Draft type or version does not match this editor.");u.replace(cl(k.data,e))}})]}),overflow:[{id:"undo",label:"Undo",disabled:!u.canUndo,onSelect:u.undo},{id:"redo",label:"Redo",disabled:!u.canRedo,onSelect:u.redo},{id:"discard",label:"Discard changes",disabled:!w,onSelect:()=>u.replace(cl(g,e),!0)},{id:"restore",label:"Restore defaults",onSelect:()=>u.commit(Ed(e))}]}),children:s.jsxs(Eu,{density:"compact",className:"bv-editor-dialog",children:[!t.length&&p.jobs.length>0&&s.jsx(jo,{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."}),d.length?s.jsx(bs,{items:S,onReorder:k=>C(I=>{I.jobs=k.map(D=>I.jobs[Number(D.id.slice(4))])}),onRemove:k=>C(I=>{I.jobs.splice(Number(k.slice(4)),1)})}):s.jsx(vs,{title:"No eligible regions",description:"Enable a region with Detailer or Both usage first."})]})}),s.jsx(Ru,{open:!!E,editorName:"Detailer Plan",onKeep:()=>b(null),onDiscard:()=>{const k=E;b(null),k?.()},onSave:()=>{h();const k=E;b(null),k?.()}})]})}const S1=(e,t,o,r,n,i,a,l)=>{Ou((c,d)=>m.createElement(R1,{regions:e,detectorIds:t,stored:o,save:r,close:c,activationToken:d,nodeId:n.split(":").slice(1).join(":"),nodes:i,onNavigate:a,currentNode:l}),{key:n})},Gl=()=>({schema:"bv.detector_registry_config",version:1,detectors:[]}),Di=e=>{try{const t=String(e??"").trim()?JSON.parse(String(e)):Gl();return{schema:"bv.detector_registry_config",version:1,detectors:Array.isArray(t?.detectors)?t.detectors.flatMap(r=>{const n=String(r?.id??"").trim(),i=String(r?.model_name??"").trim();if(!n||!i)return[];const a=r.provider==="onnx"?"onnx":"ultralytics",l=String(r.sam_model_name??"").trim();return[{id:n,provider:a,model_name:i,...l?{sam_model_name:l,sam_device_mode:["Prefer GPU","CPU"].includes(r.sam_device_mode)?r.sam_device_mode:"AUTO"}:{}}]}):[]}}catch{return Gl()}},uc=e=>JSON.stringify(e);function L1({catalog:e,stored:t,save:o,close:r,nodeId:n="",nodes:i=[],onNavigate:a=()=>{},currentNode:l}){const c=m.useMemo(()=>Di(t),[t]),d=m.useMemo(()=>new Set(c.detectors.map(R=>R.id)),[c]),f=ms(c),u=f.value,[p,g]=m.useState(()=>uc(c));xs(f);const x=uc(u)!==p,w=Su(),[E,b]=m.useState(null),h=()=>{const R=uc(u);o(R),g(R),f.clear()},v=R=>x?b(()=>R):R(),_=()=>v(r),y=ga(l),T=m.useMemo(()=>R=>s.jsx(ti,{...R,title:`${R.title} · #${n}`,shortTitle:"Registry",menuVisible:y,onMenuVisible:O=>Qn(l,O),onClose:_,context:s.jsx(ba,{label:"Detector Registry Node",value:n,options:i.map(O=>({value:O.id,label:O.label})),onNavigate:(O,M)=>M?v(()=>a(O,!0)):a(O,!1)})}),[l,x,y,n,i,a]),[L,B]=m.useState([]),C=R=>f.commit(O=>{const M=structuredClone(O);return R(M),M}),j=()=>{let R=u.detectors.length+1,O=`detector-${R}`;for(;u.detectors.some(M=>M.id===O);)O=`detector-${++R}`;return O},z=u.detectors.map(R=>R.id.trim()),S=z.find((R,O)=>R&&z.indexOf(R)!==O),k=u.detectors.some(R=>!R.id.trim()||!R.model_name),I=()=>C(R=>{const O=e.ultralytics.length?"ultralytics":"onnx";R.detectors.push({id:j(),provider:O,model_name:e[O][0]??""})}),D=()=>{u.detectors.length?w.confirm({title:"Clear Detector Registry?",message:"Existing Detailer jobs will keep missing references until reassigned.",confirmLabel:"Clear registry",danger:!0,action:()=>f.commit(Gl())}):f.commit(Gl())};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:r,status:x?"Unsaved registry changes":"Registry saved",actions:s.jsx(Fu,{primary:s.jsx(se,{intent:"primary",disabled:!!(S||k),onClick:h,children:"Save registry"}),secondary:s.jsxs(s.Fragment,{children:[s.jsx(se,{onClick:I,children:"Add detector"}),s.jsx(Ul,{label:"Detector Registry",value:{schema:"bv.editor-draft",version:1,type:"detector-registry",data:u},onImport:R=>{if(R?.schema!=="bv.editor-draft"||R?.version!==1||R?.type!=="detector-registry"||!R?.data)throw new Error("Draft type or version does not match this editor.");f.replace(Di(R.data))}})]}),overflow:[{id:"undo",label:"Undo",disabled:!f.canUndo,onSelect:f.undo},{id:"redo",label:"Redo",disabled:!f.canRedo,onSelect:f.redo},{id:"discard",label:"Discard changes",disabled:!x,onSelect:()=>f.replace(Di(p),!0)},{id:"clear",label:"Clear registry…",onSelect:D}]}),children:s.jsxs(Eu,{density:"compact",className:"bv-editor-dialog",children:[S||k?s.jsx(jo,{tone:"danger",title:"Registry needs attention",children:S?`Detector ID “${S}” is used more than once.`:"Every detector needs a unique ID and a detection model."}):s.jsxs(jo,{tone:"success",title:"Registry valid",children:[u.detectors.length," detector",u.detectors.length===1?"":"s"," ready to save."]}),s.jsxs("div",{className:"bv-card-list",children:[!u.detectors.length&&s.jsx(vs,{title:"No detectors configured",description:"Add a detector to make it selectable in Regional Detailer jobs."}),s.jsx(Il,{value:L,onValue:B,items:u.detectors.map((R,O)=>({id:`detector-${O}`,title:s.jsxs("span",{className:"bv-detector-summary",children:[s.jsx("strong",{children:R.id||"New detector"}),s.jsx("span",{children:R.provider==="onnx"?"ONNX":"Ultralytics"}),s.jsx("span",{children:R.model_name||"No model selected"}),s.jsx("span",{children:R.id.trim()&&R.model_name?"Ready":"Needs attention"})]}),content:s.jsxs("div",{className:"bv-detector-details",children:[s.jsxs("div",{className:"bv-editor-item-actions",children:[s.jsx(se,{intent:"ghost",onClick:()=>C(M=>{M.detectors.splice(O+1,0,{...M.detectors[O],id:j()})}),children:"Duplicate"}),s.jsx(se,{intent:"ghost",className:"bv-subtle-danger",onClick:()=>{const M=()=>C(V=>{V.detectors.splice(O,1)});d.has(R.id)?w.confirm({title:`Remove detector “${R.id}”?`,message:"Existing Detailer jobs will show it as missing until reassigned.",confirmLabel:"Remove detector",danger:!0,action:M}):M()},children:"Remove"})]}),s.jsxs(Ln,{children:[s.jsx(on,{label:"Detector ID",value:R.id,readOnly:d.has(R.id),help:d.has(R.id)?"Stable job reference. Create a new detector instead of renaming it.":"Choose once; the ID becomes immutable after saving.",onValue:M=>C(V=>{V.detectors[O].id=M.trim()})}),s.jsx(ft,{label:"Provider",value:R.provider,options:[{value:"ultralytics",label:"Ultralytics"},{value:"onnx",label:"ONNX"}],onValue:M=>C(V=>{const F=V.detectors[O];F.provider=M,F.model_name=e[F.provider][0]??""})}),s.jsx(ft,{label:"Detection model",value:R.model_name,options:e[R.provider].map(M=>({value:M,label:M})),onValue:M=>C(V=>{V.detectors[O].model_name=M})})]}),s.jsx(Il,{value:L,onValue:B,items:[{id:`sam-${O}`,title:R.sam_model_name?"SAM refinement enabled":"Optional SAM refinement",content:s.jsxs(Ln,{children:[s.jsx(ft,{label:"SAM model",value:R.sam_model_name??"",options:[{value:"",label:"No SAM refinement"},...e.sam.map(M=>({value:M,label:M}))],onValue:M=>C(V=>{const F=V.detectors[O];F.sam_model_name=M||void 0,M||delete F.sam_device_mode})}),R.sam_model_name&&s.jsx(ft,{label:"Execution device",value:R.sam_device_mode??"AUTO",options:["AUTO","Prefer GPU","CPU"].map(M=>({value:M,label:M})),onValue:M=>C(V=>{V.detectors[O].sam_device_mode=M})})]})}]})]})}))})]})]})}),w.dialog,s.jsx(Ru,{open:!!E,editorName:"Detector Registry",onKeep:()=>b(null),onDiscard:()=>{const R=E;b(null),R?.()},onSave:()=>{h();const R=E;b(null),R?.()}})]})}const C1=async(e,t,o,r,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();Ou((d,f)=>m.createElement(L1,{catalog:c,stored:t,save:o,close:d,activationToken:f,nodeId:r.split(":").slice(1).join(":"),nodes:n,onNavigate:i,currentNode:a}),{key:r})},N1=10,O1=(e,t=N1)=>{const o=[...new Set(e.filter(i=>Number.isInteger(i)&&i>=1&&i<=t))],r=o.length?Math.max(...o):0,n=Math.min(t,r+1);return Array.from({length:Math.max(1,n)},(i,a)=>a+1)},A1=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"]),D1={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"},M1={"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"}},fc=(e,t)=>M1[e]?.[t]??D1[t]??t.split("_").join(" ");function j1({label:e,configured:t,close:o,onSave:r,onDelete:n}){const[i,a]=m.useState(""),[l,c]=m.useState(""),[d,f]=m.useState(!1),u=async p=>{f(!0),c("");try{const g=await p();g?c(g):o()}finally{f(!1)}};return s.jsxs(fa,{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:o,footer:s.jsxs(s.Fragment,{children:[s.jsx(se,{intent:"danger",disabled:!t||d,onClick:()=>u(n),children:"Delete key"}),s.jsx(se,{intent:"ghost",disabled:d,onClick:o,children:"Cancel"}),s.jsx(se,{intent:"primary",loading:d,disabled:!i.trim(),onClick:()=>u(()=>r(i)),children:"Save key"})]}),children:[s.jsx(jo,{tone:t?"info":"warning",children:t?"A key is configured. Enter a new key to replace it.":"No key is configured."}),s.jsx(Z_,{label:"API key",value:i,onValue:a}),l&&s.jsx(jo,{tone:"danger",children:l})]})}let pc=null;const Td=(e,t=!1)=>((t||!pc)&&(pc=fetch(e.apiURL("/bv_nodepack/remote_llm/providers")).then(async o=>{if(!o.ok)throw new Error(await o.text());const r=await o.json();return Array.isArray(r.profiles)?r.profiles:[]})),pc),Vo=(e,t)=>e.widgets?.find(o=>o.name===t),Kl=(e,t,o)=>{const r=t.find(l=>l.label===String(Vo(e,"provider_profile")?.value??""));if(!r)return;const n=Vo(e,"custom_endpoint"),i=Vo(e,"model");if(n&&((!r.allow_custom_endpoint||!String(n.value??"").trim())&&(n.value=r.endpoint),n.disabled=!1,n.element&&(n.element.readOnly=!r.allow_custom_endpoint),n.label=r.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),d=t.find(f=>f.label===String(Vo(e,"provider_profile")?.value??""));return d&&!d.allow_custom_endpoint&&(n.value=d.endpoint),c}}if(i&&o&&o!==r.label){const l=t.find(d=>d.label===o),c=String(i.value??"").trim();(!c||c===l?.default_model)&&(i.value=r.default_model)}const a=Vo(e,"configure_api_key");a&&(a.disabled=r.auth_mode==="none",a.label=r.auth_mode==="none"?"✓ No API key required":`${r.configured?"✓":"⚠"} Configure ${r.label} API Key`),e.setDirtyCanvas?.(!0,!0)},I1=(e,t,o)=>{const r=o.find(n=>n.label===String(Vo(t,"provider_profile")?.value??""))??o[0];r&&r.auth_mode!=="none"&&Ou(n=>m.createElement(j1,{label:r.label,configured:r.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:r.id,api_key:i})});if(!a.ok)return(await a.json().catch(()=>null))?.error??"Could not save API key.";r.configured=!0,Kl(t,o),Td(e,!0)},onDelete:async()=>{if(!(await fetch(e.apiURL(`/bv_nodepack/remote_llm/api_key/${encodeURIComponent(r.id)}`),{method:"DELETE"})).ok)return"Could not delete API key.";r.configured=!1,Kl(t,o),Td(e,!0)}}))},Gp=(e,t)=>{Td(t).then(o=>{let r=String(Vo(e,"provider_profile")?.value??"");const n=Vo(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 Kl(e,o,r),r=l,c}}let i=Vo(e,"configure_api_key");i||(i=e.addWidget("button","configure_api_key",null,()=>I1(t,e,o),{serialize:!1}),i.serialize=!1),Kl(e,o)}).catch(o=>console.error("BV Remote LLM settings unavailable",o))},Xu="BV Control Center",ql=0,P1=2,B1=4,yi="bvControlBaseMode",z1="bv-open-control-rack",fm=320,F1=48,Kp="bv_control_conflict_status",hc=new Set;function U1(e){return e==="activate"?{mode:ql,priority:3}:e==="mute"?{mode:P1,priority:2}:{mode:B1,priority:1}}function qp(e){const t=new Set(jl(Nt()).map(o=>o.id));return{...e,controls:e.controls.map(o=>({...o,assignments:o.assignments.map(r=>({...r,unresolved:!t.has(r.groupId)}))}))}}function W1(e){return m_(e,t=>wb(t,Xu))}function V1(e){for(const r of hc){const n=r.properties?.[yi];r.mode=e.forceActive?ql:typeof n=="number"?n:r.mode,r.properties&&delete r.properties[yi],r.setDirtyCanvas?.(!0,!0)}hc.clear();const t=new Map(jl(Nt()).map(r=>[r.id,r])),o=new Map;for(const r of e.controls)if(r.enabled)for(const n of r.assignments){const i=t.get(n.groupId);if(i)for(const a of W1(i)){const l=U1(n.action),c=o.get(a);(!c||l.priority>c.priority)&&o.set(a,l)}}for(const[r,n]of o)r.properties??(r.properties={}),typeof r.properties[yi]!="number"&&(r.properties[yi]=typeof r.mode=="number"?r.mode:ql),r.mode=n.mode,hc.add(r),r.setDirtyCanvas?.(!0,!0)}function H1(e,t){const o=e.inputs[t],r=e.widgets?.find(n=>n.name===o.name);r&&e.removeWidget?.(r),o.link!=null&&e.disconnectInput(t),e.removeInput(t)}function $1(e,t){const o=kb(t),r=x_(o);let n=e.widgets?.find(i=>i.name===Kp);n||(n=e.addCustomWidget({name:Kp,type:"custom",value:r,y:0,options:{},serialize:!1,computeSize:()=>[0,24],computeLayoutSize:()=>({minHeight:24,maxHeight:24,minWidth:fm}),mouse:()=>!1,draw(i,a,l,c,d){i.save(),i.beginPath(),i.rect(10,c,Math.max(0,l-20),d),i.clip(),i.fillStyle=this.__bvHasConflict?"#ffbd66":"#8fc9a3",i.font="12px sans-serif",i.textBaseline="middle",i.fillText(String(this.value??""),14,c+d/2),i.restore()}})),n.value=r,n.__bvHasConflict=o.length>0,n.tooltip=o.map(i=>`${i.groupPath}: ${i.winnerAction} wins`).join(` +`)}function pm(e,t){e.mode=ql,e.properties&&delete e.properties[yi];let o=e.widgets?.find(c=>c.name==="configure_control_center");o||(o=e.addWidget("button","configure_control_center",null,()=>window.dispatchEvent(new Event(z1)),{serialize:!1})),o.label="Configure Control Center",o.serialize=!1;const r=new Set(t.controls.map(c=>`bvcc_${c.id}`));for(let c=e.inputs.length-1;c>=0;c--){const d=e.inputs[c];d.name.startsWith("bvcc_")&&!r.has(d.name)&&H1(e,c)}for(const c of t.controls){const d=`bvcc_${c.id}`,f=g=>{const x=tn(),w={...x,controls:x.controls.map(E=>E.id===c.id?{...E,enabled:!!g}:E)};ku(w)};let u=e.inputs.find(g=>g.name===d);u||(u=e.addInput(d,"BOOLEAN",{label:c.name,nameLocked:!0,widget:{name:d}})),u.label=c.name;let p=e.widgets?.find(g=>g.name===d);p&&!p.__bvControlCallbackBound&&(e.removeWidget?.(p),p=null),p||(p=e.addWidget("toggle",d,c.enabled,f,{on:"ACTIVE",off:"INACTIVE"})),p.__bvControlCallbackBound=!0,p.label=c.name,p.value=c.enabled,p.serialize=!0,p.options??(p.options={}),p.options.on="ACTIVE",p.options.off="INACTIVE",p.callback=f,u.widget={name:d}}$1(e,t);const n=e.widgets?.find(c=>c.name==="bv_control_config_json");n&&(n.value=JSON.stringify(qp(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(qp(tn()))),e.serialize_widgets=!0;const i=e.size??[0,0],a=e.computeSize?.()??i,l=Math.max(fm,(a[0]??0)+F1);e.setSize?.([Math.max(i[0]??0,l),a[1]??i[1]??0]),e.setDirtyCanvas?.(!0,!0)}function hm(e=tn()){for(const{node:t}of b_(Nt(),Xu))pm(t,e);V1(e)}window.addEventListener(Hn,e=>hm(e.detail));Nt().registerExtension({name:"bv_nodepack.control_center",async beforeRegisterNodeDef(e,t){if(t.name!==Xu)return;const o=e.prototype.onNodeCreated;e.prototype.onNodeCreated=function(){const r=o?.apply(this,arguments);return pm(this,tn()),r}},afterConfigureGraph(){hm()}});const lt=Nt(),xo=Qi();M0(e=>lt.ui?.settings?.setSettingValue?.(Pv,e));j0(e=>lt.ui?.settings?.setSettingValue?.(Bv,e));D0(e=>lt.ui?.settings?.setSettingValue?.(zv,e));uw(e=>lt.ui?.settings?.setSettingValue?.(Du,e));const Rd="bv-open-control-rack",In="bv-open-regional-editor",Mi="bv-open-regional-quick-edit",hr="bv-regional-document-changed",Jp="bv-nodepack-styles",gm="BV.DebugBridge.Enabled";let Gr=!1,Wa=null;const Y1=()=>{const e=lt.extensionManager?.workflow?.activeWorkflow??lt.workflowManager?.activeWorkflow;return String(e?.filename??e?.path??"Current workflow")},bm=async e=>{Gr=!!e;const t=await fetch(xo.apiURL("/bv_nodepack/debug/session"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({enabled:Gr})});if(!t.ok)throw new Error(`BV Debug Bridge session failed: ${t.status} ${await t.text()}`)},vm=async()=>{if(!Gr)return!1;const e=await lt.graphToPrompt(),t=await fetch(xo.apiURL("/bv_nodepack/debug/snapshot"),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:e.output,workflow_name:Y1()})});if(!t.ok)throw new Error(`BV Debug Bridge snapshot failed: ${t.status} ${await t.text()}`);return!0},Jl=()=>{Gr&&(Wa!=null&&window.clearTimeout(Wa),Wa=window.setTimeout(()=>{Wa=null,vm().catch(e=>console.error(e))},600))},Ao=e=>{e.type="converted-widget",e.hidden=!0,e.computeSize=()=>[0,-4],e.element&&(e.element.style.display="none")},X1=(e,t,o)=>{if(!t||!o||t===o)return;const r=e.widgets?.indexOf(t)??-1;if(r<0)return;e.widgets.splice(r,1);const n=e.widgets.indexOf(o);e.widgets.splice(n<0?e.widgets.length:n,0,t)},G1=e=>{const t=[e.widgets?.find(o=>o.name==="region_selector"),...e.__bvDetailerContextWidgets??[]].filter(Boolean);for(const o of t){const r=e.widgets?.indexOf(o)??-1;r>=0&&e.widgets.splice(r,1),o.onRemove?.()}e.__bvDetailerContextWidgets=[]},Rs=e=>{const t=e.inputs?.find(a=>a.name==="regional"||a.name==="regional_prompt"),o=e.graph??lt.graph,r=t?.link==null?null:o?.links?.[t.link]??o?._links?.get?.(t.link),n=r?o?.getNodeById?.(r.origin_id):null;if(n?.type!=="BV Regional Prompt")return null;const i=n.widgets?.find(a=>a.name==="regional_json")?.value;try{return rn(i)}catch{return null}},K1=e=>{const t=e.graph??lt.graph,o=e.inputs?.find(l=>l.name==="detector_registry"),r=o?.link==null?null:t?.links?.[o.link]??t?._links?.get?.(o.link),n=r?t?.getNodeById?.(r.origin_id):null;if(n?.type!=="BV Detector Registry")return[];const i=n.widgets?.find(l=>l.name==="config_json")?.value,a=Di(i).detectors.map(l=>l.id);for(const l of n.inputs??[]){if(!String(l.name).startsWith("external_detector_")||l.link==null)continue;const c=t?.links?.[l.link]??t?._links?.get?.(l.link),d=c?t?.getNodeById?.(c.origin_id):null,f=String(d?.widgets?.find(u=>u.name==="detector_id")?.value??"").trim();f&&a.push(f)}return[...new Set(a)].sort((l,c)=>l.localeCompare(c))},gc=e=>{const t=/^external_detector_(\d+)$/,o=(e.inputs??[]).flatMap(n=>{const i=t.exec(String(n.name));return i&&n.link!=null?[Number(i[1])]:[]}),r=new Set(O1(o));for(let n=(e.inputs?.length??0)-1;n>=0;n--){const i=e.inputs[n],a=t.exec(String(i.name));a&&i.link==null&&!r.has(Number(a[1]))&&e.removeInput(n)}for(const n of[...r].sort((i,a)=>i-a)){const i=`external_detector_${n}`;e.inputs?.some(a=>a.name===i)||e.addInput(i,"BV_DETECTOR_BINDING",{label:`external detector ${n}`,nameLocked:!0})}e.setDirtyCanvas?.(!0,!0)},Zp=(e,t)=>{for(const o of e.inputs??[])o.label=fc(t,String(o.name));for(const o of e.outputs??[])o.label=fc(t,String(o.name));for(const o of e.widgets??[])String(o.name).startsWith("configure_")||(o.label=fc(t,String(o.name)));e.setDirtyCanvas?.(!0,!0)},Sd=e=>{const t=e.widgets?.find(i=>i.name==="config_json"),o=e.widgets?.find(i=>i.name==="configure_detailer_plan");if(!t||!o)return;Ao(t);const r=Rs(e),n=r?cl(t.value,r.regions).jobs.length:0;o.label=r?`Configure Detailer Plan · ${n} Job${n===1?"":"s"}`:"Connect a BV Regional Prompt",o.disabled=!r,e.setDirtyCanvas?.(!0,!0)},Qp=e=>{const t=e.widgets?.find(r=>r.name==="config_json");if(!t)return;Ao(t);let o=e.widgets?.find(r=>r.name==="configure_detailer_plan");o||(o=e.addWidget("button","configure_detailer_plan",null,()=>{const r=Rs(e);r&&(qo("detailer",Ie(e)),S1(r.regions,K1(e),t.value,n=>{t.value=n,Sd(e),e.graph?.setDirtyCanvas?.(!0,!0)},`detailer-plan:${Ie(e)}`,Bt("BV Regional Detailer Plan").filter(sn).map(n=>({id:Ie(n),label:`${n.title||"BV Regional Detailer Plan"} · #${n.id}`})),(n,i)=>{const a=Bt("BV Regional Detailer Plan").find(c=>Ie(c)===n),l=a?.widgets?.find(c=>c.name==="configure_detailer_plan");l&&Au(`detailer-plan:${Ie(e)}`,`detailer-plan:${Ie(a)}`,()=>l.callback?.(),i)},e))},{serialize:!1}),o.serialize=!1),Sd(e)},eh=e=>{try{const t=JSON.parse(String(e??"[]"));return Array.isArray(t)?t.filter(o=>o&&typeof o.region_id=="string").map(o=>({region_id:o.region_id,influence:Math.max(0,Math.min(2,Number.isFinite(+o.influence)?+o.influence:1))})):[]}catch{return[]}},Gu=e=>{if(e.comfyClass!=="BV Regional Detailer Mask"&&e.type!=="BV Regional Detailer Mask")return;const t=e.widgets?.find(f=>f.name==="context_regions_json");if(!t)return;Ao(t);const o=Rs(e);if(!o)return;for(const f of e.__bvDetailerContextWidgets??[]){const u=e.widgets?.indexOf(f)??-1;u>=0&&e.widgets.splice(u,1),f.onRemove?.()}const r=String(e.widgets?.find(f=>f.name==="region")?.value??""),n=(o?.regions??[]).filter(f=>f.enabled!==!1&&f.id!==r),i=new Set,a=eh(t.value).filter(f=>f.region_id!==r&&!i.has(f.region_id)&&!!i.add(f.region_id));t.value=JSON.stringify(a);const l=[],c=f=>{t.value=JSON.stringify(f),queueMicrotask(()=>Gu(e))};for(let f=0;f<=a.length;f++){const u=a[f],p=new Set(a.filter((E,b)=>b!==f).map(E=>E.region_id)),g=sm(n.filter(E=>!p.has(E.id))),x=u&&!g.some(E=>E.id===u.region_id)?`Missing region · ${u.region_id.slice(0,8)}`:null,w=e.addWidget("combo",`context_region_${f+1}`,u?g.find(E=>E.id===u.region_id)?.label??x??"None":"None",E=>{if(E==="None")return c(a.slice(0,f));const b=g.find(v=>v.label===E);if(!b)return;const h=a.slice();h[f]={region_id:b.id,influence:u?.influence??1},c(h)},{values:["None",...x?[x]:[],...g.map(E=>E.label)],serialize:!1});if(w.label=`context region ${f+1}`,w.serialize=!1,l.push(w),u){const E=e.addWidget("number",`context_influence_${f+1}`,u.influence,b=>{const h=eh(t.value);h[f]&&(h[f].influence=Math.max(0,Math.min(2,+b))),t.value=JSON.stringify(h)},{min:0,max:2,step:.05,precision:2,serialize:!1});E.label=`context influence ${f+1}`,E.serialize=!1,l.push(E)}}e.__bvDetailerContextWidgets=l;const d=e.computeSize?.();d&&e.setSize&&e.setSize([Math.max(e.size?.[0]??0,d[0]),d[1]]),e.setDirtyCanvas?.(!0,!0),e.graph?.setDirtyCanvas?.(!0,!0)},dl=e=>{const t=e.widgets?.find(f=>f.name==="region"),o=e.widgets?.find(f=>f.name==="region_selector");if(!t||!o)return;const r=Rs(e);if(!r){o.options??(o.options={}),o.options.values=["Connect a BV Regional Prompt"],o.value=o.options.values[0],o.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=sm(r.regions,n),a=String(t.value??""),l=i.some(f=>f.id===a)?a:a||i[0]?.id||"";t.value=l,e.__bvRegionChoices=i,o.options??(o.options={});const c=l&&!i.some(f=>f.id===l)?`Missing region · ${l.slice(0,8)}`:null;o.options.values=i.length||c?[...c?[c]:[],...i.map(f=>f.label)]:["Connect a BV Regional Prompt"],o.value=i.find(f=>f.id===l)?.label??c??o.options.values[0];const d=e.widgets?.find(f=>f.name==="scope");o.disabled=d&&d.value!=="region"||!i.length,Gu(e),e.setDirtyCanvas?.(!0,!0)},th=e=>{const t=e.widgets?.find(n=>n.name==="region");if(!t)return;Ao(t);let o=e.widgets?.find(n=>n.name==="region_selector");o||(o=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,Gu(e))},{values:["Connect a BV Regional Prompt"],serialize:!1}),o.label="region",o.serialize=!1),(e.comfyClass==="BV Regional Detailer Mask"||e.type==="BV Regional Detailer Mask")&&X1(e,o,e.widgets?.find(n=>n.name==="primary_region_influence"));const r=e.widgets?.find(n=>n.name==="scope");if(r&&!r.__bvRegionSelectorHooked){r.__bvRegionSelectorHooked=!0;const n=r.callback;r.callback=function(){const i=n?.apply(this,arguments);return dl(e),i}}if(!e.__bvRegionDocumentListener){e.__bvRegionDocumentListener=()=>dl(e),window.addEventListener(hr,e.__bvRegionDocumentListener);const n=e.onRemoved;e.onRemoved=function(){return window.removeEventListener(hr,e.__bvRegionDocumentListener),n?.apply(this,arguments)}}dl(e)},Bt=e=>{const t=[],o=r=>{for(const n of r?._nodes??[])n.type===e&&t.push(n),n.subgraph&&o(n.subgraph)};return o(lt.graph),t},Kr=()=>{const e=lt.graph,t=[],o=r=>{for(const n of r?._nodes??[])n.type==="BV Regional Prompt"&&t.push(n),n.subgraph&&o(n.subgraph)};return o(e),t},ji=()=>{const e=Bt("BV Control Center").length>0,t=Kr().length>0,o=t||["BV Regional Detailer Plan","BV Detector Registry","BV Smart Pipe","BV Smart Pipe Merge"].some(n=>Bt(n).length>0),r=o||t;document.body.classList.toggle("bv-toolbar-no-control",!e),document.body.classList.toggle("bv-toolbar-no-editor",!o),document.body.classList.toggle("bv-toolbar-no-quick",!t),document.body.classList.toggle("bv-toolbar-no-overview",!r),window.dispatchEvent(new CustomEvent("bv-toolbar-capabilities-changed",{detail:{control:e,quick:t,full:o,overview:r}}))},mm=e=>ju(lt.rootGraph??lt.graph,t=>t===e)[0],Ie=e=>mm(e)?.key??String(e.id),Va=(e,t)=>{const o=mm(e);return{label:String(e.title||t),meta:`${o?.breadcrumb?`${o.breadcrumb} · `:""}#${e.id}`}},Zl=(e,t,o,r)=>{const n=r.widgets?.find(c=>c.name===o);if(!n||n.disabled)return;const i=Ie(r),a=zr(e),l=()=>n.callback?.();a&&a!==i?Au(`${t}:${a}`,`${t}:${i}`,l,Yn()==="replace"):l(),qo(e,i)},oh=(e,t)=>{e==="regional"?window.dispatchEvent(new CustomEvent(In,{detail:{node:t}})):e==="detailer"?Zl("detailer","detailer-plan","configure_detailer_plan",t):e==="detector"?Zl("detector","detector-registry","configure_detector_registry",t):window.dispatchEvent(new CustomEvent("bv-open-smart-pipe-editor",{detail:{node:t,kind:e}}))},q1=()=>{const e=[{type:"regional",nodes:Kr()},{type:"detailer",nodes:Bt("BV Regional Detailer Plan")},{type:"detector",nodes:Bt("BV Detector Registry")},{type:"pipe",nodes:Bt("BV Smart Pipe")},{type:"merge",nodes:Bt("BV Smart Pipe Merge")}],t=p0(),o=t&&zr(t),r=e.find(i=>i.type===t)?.nodes.find(i=>Ie(i)===o);if(r){oh(t,r);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&&(oh(n.type,n.node),t&&Oo({title:"Previous editor unavailable",message:"Opened the first available BV editor instead.",tone:"warning",duration:4e3}))},Ld=()=>{const e=lt.graph,t=[],o=r=>{for(const n of r?._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&&o(n.subgraph)}};return o(e),t.sort((r,n)=>r.name.localeCompare(n.name))},J1=()=>b1(Kr().flatMap(e=>{try{const t=rn(e.widgets?.find(o=>o.name==="regional_json")?.value);return[{documentId:t.document_id,nodeId:String(e.id),title:e.title||t.title||"BV Regional Prompt"}]}catch{return[]}})),rh=(e,t=!1)=>{const o=e.widgets?.find(a=>a.name==="document_id"),r=e.widgets?.find(a=>a.name==="target_editor");if(!o||!r)return;const n=J1(),i=v1(o.value,n,t);o.value=i,e.__bvDocumentTargets=n,r.options??(r.options={}),r.options.values=n.length?n.map(a=>a.label):["No BV Regional Prompt available"],r.value=n.find(a=>a.documentId===i)?.label??(i?`Missing target · ${i.slice(0,8)}`:r.options.values[0]),r.disabled=!n.length,e.setDirtyCanvas?.(!0,!0)},nh=(e,t=!1)=>{const o=e.widgets?.find(n=>n.name==="document_id");if(!o)return;Ao(o);let r=e.widgets?.find(n=>n.name==="target_editor");if(r||(r=e.addWidget("combo","target_editor","No BV Regional Prompt available",n=>{const i=e.__bvDocumentTargets?.find(a=>a.label===n);i&&(o.value=i.documentId)},{values:["No BV Regional Prompt available"],serialize:!1}),r.label="target_editor",r.serialize=!1),!e.__bvDocumentTargetListener){e.__bvDocumentTargetListener=()=>rh(e,!1),window.addEventListener(hr,e.__bvDocumentTargetListener);const n=e.onRemoved;e.onRemoved=function(){return window.removeEventListener(hr,e.__bvDocumentTargetListener),n?.apply(this,arguments)}}rh(e,t)},ih=(e,t=!1)=>{const o=e.widgets?.find(r=>r.name==="regional_json");if(o)try{const r=t?wp():rn(o.value);!t&&Kr().some(a=>{if(a===e)return!1;try{return rn(a.widgets?.find(l=>l.name==="regional_json")?.value).document_id===r.document_id}catch{return!1}})&&(r.document_id=crypto.randomUUID()),o.value=JSON.stringify(r);const i=e.widgets?.find(a=>a.name==="lora_bindings_json");if(i)try{const a={...$u(i.value,t?"":r.document_id),document_id:r.document_id};i.value=JSON.stringify(jn(a,new Set(r.regions.map(l=>l.id))))}catch{i.value=JSON.stringify(Ts(r.document_id))}}catch{o.value=JSON.stringify(wp())}};function Z1(){const[e,t]=m.useState(!1),[o,r]=m.useState(!1),[n,i]=m.useState(!1),[a,l]=m.useState(0),[c,d]=m.useState(!1),[f,u]=m.useState(0),[p,g]=m.useState(null),[x,w]=m.useState([]),[E,b]=m.useState({}),[h,v]=m.useState([]),_=m.useCallback((y=!1)=>{const T=Kr(),L=Bt("BV Regional Detailer Plan"),B=Bt("BV Detector Registry"),C=[...Bt("BV Smart Pipe"),...Bt("BV Smart Pipe Merge")],j=(S,k)=>{const I=!sn(S);return I&&!y?null:{...k,hidden:I,onReveal:I?()=>Qn(S,!0):void 0}};return[{id:"regional",label:"Regional Prompts",items:T.map(S=>{const k=Va(S,"BV Regional Prompt"),I=zr("regional")===Ie(S);return j(S,{id:Ie(S),...k,meta:`${k.meta}${I?" · Last active":""}`,onSelect:()=>window.dispatchEvent(new CustomEvent(In,{detail:{node:S}})),secondary:{label:`Quick edit ${k.label}`,onSelect:()=>window.dispatchEvent(new CustomEvent(Mi,{detail:{node:S}}))}})}).filter(Boolean)},{id:"detailer",label:"Detailer Plan",items:L.map(S=>{const k=Va(S,"BV Regional Detailer Plan"),I=S.widgets?.find(R=>R.name==="configure_detailer_plan"),D=zr("detailer")===Ie(S);return j(S,{id:Ie(S),...k,disabled:!I||I.disabled,meta:`${k.meta}${I?.disabled?" · Connect Regional Prompt":D?" · Last active":""}`,onSelect:()=>Zl("detailer","detailer-plan","configure_detailer_plan",S)})}).filter(Boolean)},{id:"detector",label:"Detector Registry",items:B.map(S=>{const k=Va(S,"BV Detector Registry"),I=zr("detector")===Ie(S);return j(S,{id:Ie(S),...k,meta:`${k.meta}${I?" · Last active":""}`,onSelect:()=>Zl("detector","detector-registry","configure_detector_registry",S)})}).filter(Boolean)},{id:"smart-pipe",label:"Smart Pipes",items:C.map(S=>{const k=String(S.type??S.comfyClass)==="BV Smart Pipe Merge"?"merge":"pipe",I=Va(S,k==="merge"?"Smart Pipe Merge":"Smart Pipe");return j(S,{id:Ie(S),...I,meta:`${I.meta} · ${k==="merge"?"Merge":"Pipe"}`,onSelect:()=>window.dispatchEvent(new CustomEvent("bv-open-smart-pipe-editor",{detail:{node:S,kind:k}}))})}).filter(Boolean)}]},[]);return m.useEffect(()=>{if(!(!n&&!c))return w1(lt,xo,()=>{i(!1),d(!1)})},[c,n]),m.useEffect(()=>{const y=()=>t(!0);return window.addEventListener(Rd,y),()=>window.removeEventListener(Rd,y)},[]),m.useEffect(()=>{const y=T=>r(!!T.detail?.control);return window.addEventListener("bv-toolbar-capabilities-changed",y),ji(),()=>window.removeEventListener("bv-toolbar-capabilities-changed",y)},[]),m.useEffect(()=>{const y=T=>{const L=T.detail?.node??null,B=Kr();v(Ld()),w(B);const C=L??B.find(j=>Ie(j)===zr("quick"))??B[0]??null;C&&qo("quick",Ie(C)),g(C),i(!1),d(!0),u(j=>j+1)};return window.addEventListener(Mi,y),()=>window.removeEventListener(Mi,y)},[]),m.useEffect(()=>{const y=T=>{const L=T.detail?.output,B=L?.bv_regional_background?.[0]?.document_id,C=L?.images?.[L.images.length-1];if(!B||!C)return;const j=new URLSearchParams({filename:C.filename,type:C.type,subfolder:C.subfolder||""});b(z=>({...z,[B]:xo.apiURL(`/view?${j}`)}))};return xo.addEventListener("executed",y),()=>xo.removeEventListener("executed",y)},[]),m.useEffect(()=>{const y=T=>{const L=T.detail?.node??null,B=Kr();v(Ld()),w(B);const C=L??B.find(j=>Ie(j)===zr("regional"))??B[0]??null;C&&qo("regional",Ie(C)),g(C),C&&c&&String(p?.id)===String(C.id)&&d(!1),i(!0),l(j=>j+1)};return window.addEventListener(In,y),()=>window.removeEventListener(In,y)},[c,p]),s.jsxs(s.Fragment,{children:[s.jsx(d0,{}),s.jsx(Rw,{getColumns:_}),s.jsx(b0,{}),s.jsx(g0,{open:e,hasControlNodes:o,onClose:()=>t(!1)}),s.jsx(f1,{open:n,activationToken:a,nodes:x,initialNode:p,backgrounds:E,loraStacks:h,onClose:()=>i(!1)}),s.jsx(g1,{open:c,activationToken:f,nodes:x,initialNode:p,loraStacks:h,onClose:()=>d(!1),onOpenEditor:y=>{qo("regional",Ie(y)),g(y),d(!1),i(!0),l(T=>T+1)}})]})}const ah="bv-root";function Q1(){if(!document.getElementById(Jp)){const t=document.createElement("style");t.id=Jp,t.textContent=`${_0} +${y0}`,document.head.appendChild(t)}let e=document.getElementById(ah);e||(e=document.createElement("div"),e.id=ah,document.body.appendChild(e),bc.createRoot(e).render(s.jsx(Te.StrictMode,{children:s.jsx(Z1,{})})))}lt.registerExtension({name:"bv_nodepack.control_rack_portal",setup(){Q1(),gw(lt.ui?.settings),_1(),Gr=!!lt.ui?.settings?.getSettingValue?.(gm,!1),bm(Gr).then(()=>{Gr&&Jl()}).catch(e=>console.error(e)),xo.addEventListener("graphChanged",Jl),xo.addEventListener("graphChanged",ji)}});lt.registerExtension({name:"bv_nodepack.regional_editor",settings:[{id:Fb,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=>Vb(e)},{id:Ub,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=>Hb(e)},{id:Du,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=>Mu(e,!1)},{id:gm,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=>{bm(!!e).then(()=>{e&&Jl()}).catch(t=>console.error(t))}},{id:Pv,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=>Xv(!!e)},{id:zv,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=>$v(e)},{id:Bv,name:"Completion Datasets",type:m1,defaultValue:"",category:["BV Node Pack","Prompting","Completion datasets"],tooltip:"Choose one or more local CSV/TSV datasets for BV Prompt Autocomplete.",onChange:e=>Jv(e)}],commands:[{id:"bv.regional.openEditor",label:"Open BV Regional Editor",icon:"icon-[lucide--layers]",function:()=>{window.dispatchEvent(new CustomEvent(In))}},{id:"bv.debugBridge.publishSnapshot",label:"Refresh BV Debug Bridge Snapshot",icon:"icon-[lucide--radio-tower]",function:()=>vm().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(Rd))},{icon:"icon-[lucide--scan-search]",class:"bv-regional-action bv-regional-action-editor",tooltip:"Open last BV editor",onClick:q1},{icon:"icon-[lucide--layers]",class:"bv-regional-action bv-regional-action-quick",tooltip:"Quick edit BV Regional prompts",onClick:()=>window.dispatchEvent(new CustomEvent(Mi))},{icon:"icon-[lucide--chevron-down]",class:"bv-regional-action bv-regional-action-menu",tooltip:"Choose BV window",onClick:()=>window.dispatchEvent(new CustomEvent(Bl))}],beforeRegisterNodeDef(e,t){if(["BV Control Center","BV Regional Prompt","BV Regional Detailer Plan","BV Detector Registry","BV Smart Pipe","BV Smart Pipe Merge"].includes(t.name)){const i=e.prototype.onNodeCreated,a=e.prototype.onRemoved;e.prototype.onNodeCreated=function(){const l=i?.apply(this,arguments);return t.name!=="BV Control Center"&&(this.properties??(this.properties={}),typeof this.properties.bvWindowMenuVisible!="boolean"&&(this.properties.bvWindowMenuVisible=!["BV Smart Pipe","BV Smart Pipe Merge"].includes(t.name))),queueMicrotask(ji),l},e.prototype.onRemoved=function(){const l=a?.apply(this,arguments);return queueMicrotask(ji),l}}if(A1.has(t.name)){const i=e.prototype.onNodeCreated,a=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const l=i?.apply(this,arguments);return queueMicrotask(()=>Zp(this,t.name)),l},e.prototype.onConfigure=function(l){const c=a?.call(this,l);return queueMicrotask(()=>Zp(this,t.name)),c}}if(t.name==="BV Detector Registry"){const i=d=>{const f=d.widgets?.find(g=>g.name==="config_json");if(!f)return;Ao(f);let u=d.widgets?.find(g=>g.name==="configure_detector_registry");u||(u=d.addWidget("button","configure_detector_registry",null,()=>{qo("detector",Ie(d)),C1(xo,f.value,g=>{f.value=g,i(d),d.graph?.setDirtyCanvas?.(!0,!0)},`detector-registry:${Ie(d)}`,Bt("BV Detector Registry").filter(sn).map(g=>({id:Ie(g),label:`${g.title||"BV Detector Registry"} · #${g.id}`})),(g,x)=>{const w=Bt("BV Detector Registry").find(b=>Ie(b)===g),E=w?.widgets?.find(b=>b.name==="configure_detector_registry");E&&Au(`detector-registry:${Ie(d)}`,`detector-registry:${Ie(w)}`,()=>E.callback?.(),x)},d).catch(g=>console.error(g))},{serialize:!1}),u.serialize=!1);const p=Di(f.value).detectors.length;u.label=`Configure Detector Registry · ${p} Detector${p===1?"":"s"}`,d.setDirtyCanvas?.(!0,!0)},a=e.prototype.onNodeCreated,l=e.prototype.onConfigure,c=e.prototype.onConnectionsChange;e.prototype.onNodeCreated=function(){const d=a?.apply(this,arguments);return queueMicrotask(()=>{i(this),gc(this)}),d},e.prototype.onConfigure=function(){const d=l?.apply(this,arguments);return queueMicrotask(()=>{i(this),gc(this)}),d},e.prototype.onConnectionsChange=function(){const d=c?.apply(this,arguments);return queueMicrotask(()=>gc(this)),d};return}if(t.name==="BV Regional Detailer Plan"){const i=e.prototype.onNodeCreated,a=e.prototype.onConfigure,l=e.prototype.onConnectionsChange;e.prototype.onNodeCreated=function(){const c=i?.apply(this,arguments);return queueMicrotask(()=>Qp(this)),c},e.prototype.onConfigure=function(){const c=a?.apply(this,arguments);return queueMicrotask(()=>Qp(this)),c},e.prototype.onConnectionsChange=function(){const c=l?.apply(this,arguments);return queueMicrotask(()=>Sd(this)),c};return}if(t.name==="BV Remote LLM Provider"){const i=e.prototype.onNodeCreated,a=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const l=i?.apply(this,arguments);return queueMicrotask(()=>Gp(this,xo)),l},e.prototype.onConfigure=function(l){Array.isArray(l?.widgets_values)&&l.widgets_values.length>=6&&/^[A-Za-z_][A-Za-z0-9_]*$/.test(String(l.widgets_values[3]??""))&&(l={...l,widgets_values:[...l.widgets_values.slice(0,3),...l.widgets_values.slice(4)]});const c=a?.call(this,l);return queueMicrotask(()=>Gp(this,xo)),c};return}if(t.name==="BV Named LoRA Stack"){const i=c=>{const d=c.widgets?.find(u=>u.name==="stack_id");if(!d)return;const f=String(d.value??"").trim();(!f||i1(String(c.id),f,Ld()))&&(d.value=crypto.randomUUID(),c.setDirtyCanvas?.(!0,!0)),Ao(d)},a=e.prototype.onNodeCreated,l=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const c=a?.apply(this,arguments);return i(this),c},e.prototype.onConfigure=function(){const c=l?.apply(this,arguments);return queueMicrotask(()=>i(this)),c};return}if(t.name==="BV Regional Image Send"||t.name==="BV Regional Image Save"){const i=e.prototype.onNodeCreated,a=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const l=i?.apply(this,arguments);return queueMicrotask(()=>nh(this,!0)),l},e.prototype.onConfigure=function(){const l=a?.apply(this,arguments);return queueMicrotask(()=>nh(this,!1)),l};return}if(["BV Regional Select","BV Regional Deconstructor","BV Regional Detailer Mask"].includes(t.name)){const i=e.prototype.onNodeCreated,a=e.prototype.onConfigure,l=e.prototype.onConnectionsChange;e.prototype.onNodeCreated=function(){const d=i?.apply(this,arguments);return th(this),d};const c=e.prototype.onSerialize;e.prototype.onConfigure=function(d){t.name==="BV Regional Detailer Mask"&&(G1(this),d?.widgets_values&&(d={...d,widgets_values:E1(d.widgets_values)}));const f=a?.call(this,d);return queueMicrotask(()=>th(this)),f},e.prototype.onSerialize=function(d){const f=c?.apply(this,arguments);return t.name==="BV Regional Detailer Mask"&&(d.widgets_values=k1(this.widgets)),f},e.prototype.onConnectionsChange=function(){const d=l?.apply(this,arguments);return queueMicrotask(()=>dl(this)),d};return}if(t.name!=="BV Regional Prompt")return;const o=e.prototype.onNodeCreated,r=e.prototype.onConfigure;e.prototype.onNodeCreated=function(){const i=o?.apply(this,arguments);ih(this,!0);const a=this.widgets?.find(c=>c.name==="regional_json"),l=this.widgets?.find(c=>c.name==="lora_bindings_json");if(l&&Ao(l),a&&(Ao(a),!a.__bvRegionalDocumentHooked)){a.__bvRegionalDocumentHooked=!0;const c=a.callback;a.callback=function(){const d=c?.apply(this,arguments);return window.dispatchEvent(new CustomEvent(hr)),d}}if(!this.widgets?.find(c=>c.name==="open_regional_editor")){const c=this.addWidget("button","open_regional_editor",null,()=>window.dispatchEvent(new CustomEvent(In,{detail:{node:this}})),{serialize:!1});c.label="Open Regional Editor",c.serialize=!1}if(!this.widgets?.find(c=>c.name==="quick_edit_regional_prompts")){const c=this.addWidget("button","quick_edit_regional_prompts",null,()=>window.dispatchEvent(new CustomEvent(Mi,{detail:{node:this}})),{serialize:!1});c.label="Quick Edit Prompts",c.serialize=!1}return this.setSize?.([Math.max(this.size?.[0]??0,220),this.computeSize?.()[1]??60]),window.dispatchEvent(new CustomEvent(hr)),i},e.prototype.onConfigure=function(){const i=r?.apply(this,arguments);ih(this,!1);const a=this.widgets?.find(l=>l.name==="lora_bindings_json");return a&&Ao(a),window.dispatchEvent(new CustomEvent(hr)),i};const n=e.prototype.onRemoved;e.prototype.onRemoved=function(){const i=n?.apply(this,arguments);return window.dispatchEvent(new CustomEvent(hr)),i}},afterConfigureGraph(){Jl(),queueMicrotask(ji)}}); diff --git a/pyproject.toml b/pyproject.toml index 26a973c..69e93df 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "bv_nodepack" -version = "0.18.0" +version = "0.18.1" description = "Visual regional prompting with sequential regional detailer plans, detector-aware Impact integration, regional LoRA hooks, native composition modes and model-specific attention backends, plus Smart Pipes and ComfyUI workflow tools." authors = [ {name = "BlackVortex", email = "blackvortexx@proton.me"} diff --git a/tests/completion_global_adapter.test.mjs b/tests/completion_global_adapter.test.mjs index 4f89e84..5d457d3 100644 --- a/tests/completion_global_adapter.test.mjs +++ b/tests/completion_global_adapter.test.mjs @@ -15,5 +15,16 @@ test("global completion targets native multiline widgets and provides an explici test("global completion reevaluates suggestions when the caret moves", () => { assert.match(source, /addEventListener\("select", search\)/); assert.match(source, /removeEventListener\("select", search\)/); + assert.match(source, /document\.addEventListener\("selectionchange", selectionChanged\)/); + assert.match(source, /document\.removeEventListener\("selectionchange", selectionChanged\)/); assert.match(promptTextareaSource, /onSelect=\{event => \{ search\(/); + assert.match(promptTextareaSource, /document\.addEventListener\("selectionchange", selectionChanged\)/); + assert.match(promptTextareaSource, /document\.removeEventListener\("selectionchange", selectionChanged\)/); +}); + +test("BV prompt completion follows scrolling fields and corrects for measured popup height", () => { + assert.match(promptTextareaSource, /addEventListener\("scroll",\s*position,\s*true\)/); + assert.match(promptTextareaSource, /addEventListener\("resize",\s*position\)/); + assert.match(promptTextareaSource, /onHeight=/); + assert.match(source, /onHeight:/); }); diff --git a/tests/completion_position.test.mjs b/tests/completion_position.test.mjs new file mode 100644 index 0000000..2d9d45f --- /dev/null +++ b/tests/completion_position.test.mjs @@ -0,0 +1,44 @@ +import assert from "node:assert/strict"; +import test from "node:test"; +import { textareaCaretRect } from "../ui/src/completion/position.ts"; + +test("caret positioning preserves textarea layout before mapping through canvas zoom", () => { + const originalDocument = globalThis.document; + const originalWindow = globalThis.window; + let mirror; + const marker = { + style: {}, + getBoundingClientRect: () => mirror.style.width === "600px" + ? { left: 200, top: 80 } + : { left: 250, top: 180 }, + }; + mirror = { + style: {}, + setAttribute: () => {}, + append: () => {}, + remove: () => {}, + getBoundingClientRect: () => ({ left: 0, top: 0 }), + scrollTop: 0, + scrollLeft: 0, + textContent: "", + }; + globalThis.document = { createElement: tag => tag === "span" ? marker : mirror, body: { append: () => {} } }; + globalThis.window = { + getComputedStyle: () => ({ boxSizing: "border-box", lineHeight: "20px", fontSize: "16px" }), + }; + const textarea = { + value: "long transformed prompt", + selectionStart: 12, + scrollTop: 0, + scrollLeft: 0, + offsetWidth: 600, + offsetHeight: 200, + getBoundingClientRect: () => ({ left: 100, top: 50, width: 300, height: 100 }), + }; + try { + assert.deepEqual(textareaCaretRect(textarea), { left: 200, top: 90, bottom: 100 }); + } finally { + globalThis.document = originalDocument; + globalThis.window = originalWindow; + } +}); diff --git a/tests/regional_interaction.test.mjs b/tests/regional_interaction.test.mjs index a5d986a..408a1fe 100644 --- a/tests/regional_interaction.test.mjs +++ b/tests/regional_interaction.test.mjs @@ -1,6 +1,6 @@ import assert from "node:assert/strict"; import test from "node:test"; -import { addGeometryLayerTarget, regionsInPaintOrder, regionsInPriorityOrder, shouldAppendFinalBrushPoint, shouldStartSelectionMove, synchronizeRegionPriorities } from "../ui/src/regional/interaction.ts"; +import { addGeometryLayerTarget, regionsInPaintOrder, regionsInPriorityOrder, shouldAppendFinalBrushPoint, shouldClosePolygon, shouldStartSelectionMove, synchronizeRegionPriorities } from "../ui/src/regional/interaction.ts"; import { mergeSelectedLayers, selectLayers, splitCompoundLayer } from "../ui/src/regional/layerOperations.ts"; import { connectedAreas } from "../ui/src/regional/connectedComponents.ts"; @@ -31,6 +31,13 @@ test("only drawing appends the pointer-up point to a brush stroke", () => { assert.equal(shouldAppendFinalBrushPoint("resize"), false); }); +test("polygon closes when a later click returns to its first point", () => { + const first = { x: 120, y: 80 }; + assert.equal(shouldClosePolygon(3, first, { x: 126, y: 86 }), true); + assert.equal(shouldClosePolygon(3, first, { x: 140, y: 80 }), false); + assert.equal(shouldClosePolygon(2, first, first), false); +}); + test("add geometry extends the selected editable layer regardless of its existing geometry type", () => { const layer = { id: "brush-layer", enabled: true, authoring: { locked: false }, geometries: [{ type: "brush_stroke" }] }; assert.equal(addGeometryLayerTarget(layer), "brush-layer"); diff --git a/tests/ui_control_integration.test.mjs b/tests/ui_control_integration.test.mjs index 35c3c68..b1f44b4 100644 --- a/tests/ui_control_integration.test.mjs +++ b/tests/ui_control_integration.test.mjs @@ -327,6 +327,21 @@ test("regional toolbar uses compact framework buttons and theme-colored outline assert.match(styles, /\.bv-toolbar \.bv-button>svg\s*\{[^}]*fill:none[^}]*stroke:currentColor/s); }); +test("regional drawing toolbar remains pointer-interactive inside the passive artboard overlay", () => { + assert.match(styles, /\.artboard-tools\s*\{[^}]*pointer-events:\s*none/s); + assert.match(styles, /\.artboard-tools\s+\.bv-toolbar\s*\{[^}]*pointer-events:\s*auto/s); +}); + +test("active polygon input closes from a single click near its first screen point", () => { + assert.match(regionalEditor, /shouldClosePolygon\([^)]*event\.clientX[^)]*event\.clientY[^)]*\)\)\s*\{\s*finalizePolygon\(\)/s); +}); + +test("completion popup overrides generic button layout with compact left-aligned BV styling", () => { + assert.match(styles, /\.bv-completion-popup \.bv-button\s*\{[^}]*justify-content:stretch[^}]*justify-items:start/s); + assert.match(styles, /\.bv-completion-popup button\s*\{[^}]*color:\s*var\(--bv-ui-text\)/s); + assert.match(styles, /\.bv-completion-popup small\s*\{[^}]*color:\s*var\(--bv-ui-muted\)/s); +}); + test("regional default layout separates geometric tools left from prompting right", () => { const selectionStart = options.indexOf('activeTab !== "selection"'); const regionStart = options.indexOf('activeTab !== "region"'); diff --git a/ui/package-lock.json b/ui/package-lock.json index 34bbd30..967b133 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -1,12 +1,12 @@ { "name": "bv_nodepack", - "version": "0.17.0", + "version": "0.18.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "bv_nodepack", - "version": "0.17.0", + "version": "0.18.1", "dependencies": { "flexlayout-react": "0.10.5", "prismjs": "^1.30.0", diff --git a/ui/package.json b/ui/package.json index bbedc1c..1d53c18 100644 --- a/ui/package.json +++ b/ui/package.json @@ -1,7 +1,7 @@ { "name": "bv_nodepack", "private": true, - "version": "0.18.0", + "version": "0.18.1", "type": "module", "scripts": { "build": "vite build", diff --git a/ui/src/completion/CompletionPopup.tsx b/ui/src/completion/CompletionPopup.tsx index d19dd45..79ef96d 100644 --- a/ui/src/completion/CompletionPopup.tsx +++ b/ui/src/completion/CompletionPopup.tsx @@ -1,9 +1,11 @@ -import type { CSSProperties } from "react"; +import { useLayoutEffect, useRef, type CSSProperties } from "react"; import type { CompletionSuggestion } from "./engine"; import { Button } from "../ui"; -export function CompletionPopup({ suggestions, selected, position, onAccept }: { suggestions: CompletionSuggestion[]; selected: number; position: { left: number; top: number; width: number }; onAccept: (index: number) => void }) { - return
- {suggestions.map((item, index) => )} +export function CompletionPopup({ suggestions, selected, position, onAccept, onHeight }: { suggestions: CompletionSuggestion[]; selected: number; position: { left: number; top: number; width: number }; onAccept: (index: number) => void; onHeight?: (height: number) => void }) { + const popup = useRef(null); + useLayoutEffect(() => { if (popup.current) onHeight?.(popup.current.offsetHeight); }); + return
+ {suggestions.map((item, index) => )}
; } diff --git a/ui/src/completion/PromptTextarea.tsx b/ui/src/completion/PromptTextarea.tsx index 7c2254f..fbf3dbd 100644 --- a/ui/src/completion/PromptTextarea.tsx +++ b/ui/src/completion/PromptTextarea.tsx @@ -18,8 +18,11 @@ export default function PromptTextarea({ value, onValue, completionContext, onKe const requestRef = useRef>(null); const abortRef = useRef(null); const timerRef = useRef(null); + const popupHeightRef = useRef(210); + const searchRef = useRef<(text: string, caret: number, selectionEnd?: number) => void>(() => {}); const close = () => { abortRef.current?.abort(); setSuggestions([]); setPopup(null); }; + const position = () => { const element = textarea.current; if (element) setPopup(completionPopupPosition(element, placement, popupHeightRef.current)); }; const search = (text: string, caret: number, selectionEnd = caret) => { if (!enabled) return close(); if (caret !== selectionEnd) return close(); @@ -37,6 +40,7 @@ export default function PromptTextarea({ value, onValue, completionContext, onKe setPopup(items.length && element ? completionPopupPosition(element, placement) : null); }, 120); }; + searchRef.current = search; const accept = (index = selected) => { const request = requestRef.current, suggestion = suggestions[index]; if (!request || !suggestion) return; @@ -46,7 +50,18 @@ export default function PromptTextarea({ value, onValue, completionContext, onKe }; useEffect(() => { if (!enabled) close(); }, [enabled]); - useEffect(() => { if (popup && textarea.current) setPopup(completionPopupPosition(textarea.current, placement)); }, [placement]); + useEffect(() => { + const selectionChanged = () => { const element = textarea.current; if (element && document.activeElement === element) searchRef.current(element.value, element.selectionStart, element.selectionEnd); }; + document.addEventListener("selectionchange", selectionChanged); + return () => document.removeEventListener("selectionchange", selectionChanged); + }, []); + useEffect(() => { if (popup) position(); }, [placement]); + useEffect(() => { + if (!popup) return; + window.addEventListener("scroll", position, true); + window.addEventListener("resize", position); + return () => { window.removeEventListener("scroll", position, true); window.removeEventListener("resize", position); }; + }, [Boolean(popup), placement]); useEffect(() => () => { abortRef.current?.abort(); if (timerRef.current != null) window.clearTimeout(timerRef.current); }, []); return <> { onValue(event.target.value); search(event.target.value, event.target.selectionStart, event.target.selectionEnd); }} onSelect={event => { search(event.currentTarget.value, event.currentTarget.selectionStart, event.currentTarget.selectionEnd); onSelect?.(event); }} onKeyDown={event => { @@ -57,6 +72,12 @@ export default function PromptTextarea({ value, onValue, completionContext, onKe } onKeyDown?.(event); }} onBlur={event => { window.setTimeout(close, 120); onBlur?.(event); }}/> - {enabled && popup && } + {enabled && popup && { if (Math.abs(height - popupHeightRef.current) < 1) return; popupHeightRef.current = height; position(); }} + />} ; } diff --git a/ui/src/completion/globalTextareaAdapter.ts b/ui/src/completion/globalTextareaAdapter.ts index a88222c..c313859 100644 --- a/ui/src/completion/globalTextareaAdapter.ts +++ b/ui/src/completion/globalTextareaAdapter.ts @@ -25,6 +25,7 @@ function attach(textarea: HTMLTextAreaElement) { let timer: number | null = null; let popup: HTMLDivElement | null = null; let popupRoot: Root | null = null; + let popupHeight = 210; const close = () => { abort?.abort(); @@ -38,12 +39,12 @@ function attach(textarea: HTMLTextAreaElement) { }; const position = () => { if (!popup) return; - const next = completionPopupPosition(textarea, completionPlacement(), popup.offsetHeight || 210); + const next = completionPopupPosition(textarea, completionPlacement(), popupHeight); renderPopup(next); }; - const renderPopup = (coordinates = completionPopupPosition(textarea, completionPlacement(), popup?.offsetHeight || 210)) => { + const renderPopup = (coordinates = completionPopupPosition(textarea, completionPlacement(), popupHeight)) => { if (!popup) { popup = document.createElement("div"); popup.className = "bv-ui bv-ui-portal"; document.body.append(popup); popupRoot = createRoot(popup); } - popupRoot!.render(createElement(CompletionPopup, { suggestions, selected, position: coordinates, onAccept: accept })); + popupRoot!.render(createElement(CompletionPopup, { suggestions, selected, position: coordinates, onAccept: accept, onHeight: (height: number) => { if (Math.abs(height - popupHeight) < 1) return; popupHeight = height; position(); } })); }; const render = () => renderPopup(); const accept = (index = selected) => { @@ -87,8 +88,10 @@ function attach(textarea: HTMLTextAreaElement) { } }; const blur = () => window.setTimeout(() => { if (!popup?.contains(document.activeElement)) close(); }, 120); + const selectionChanged = () => { if (document.activeElement === textarea) search(); }; textarea.addEventListener("input", search); textarea.addEventListener("select", search); + document.addEventListener("selectionchange", selectionChanged); textarea.addEventListener("keydown", keydown, true); textarea.addEventListener("blur", blur); window.addEventListener("resize", position); @@ -97,6 +100,7 @@ function attach(textarea: HTMLTextAreaElement) { close(); textarea.removeEventListener("input", search); textarea.removeEventListener("select", search); + document.removeEventListener("selectionchange", selectionChanged); textarea.removeEventListener("keydown", keydown, true); textarea.removeEventListener("blur", blur); window.removeEventListener("resize", position); diff --git a/ui/src/completion/position.ts b/ui/src/completion/position.ts index c5f18c2..766f70b 100644 --- a/ui/src/completion/position.ts +++ b/ui/src/completion/position.ts @@ -11,12 +11,16 @@ const COPIED_STYLES = [ export function textareaCaretRect(textarea: HTMLTextAreaElement, caret = textarea.selectionStart ?? textarea.value.length) { const bounds = textarea.getBoundingClientRect(); const style = window.getComputedStyle(textarea); + const layoutWidth = textarea.offsetWidth || bounds.width; + const layoutHeight = textarea.offsetHeight || bounds.height; + const scaleX = bounds.width / layoutWidth; + const scaleY = bounds.height / layoutHeight; const mirror = document.createElement("div"); mirror.setAttribute("aria-hidden", "true"); Object.assign(mirror.style, { position: "fixed", visibility: "hidden", pointerEvents: "none", - left: `${bounds.left}px`, top: `${bounds.top}px`, width: `${bounds.width}px`, - height: `${bounds.height}px`, boxSizing: style.boxSizing, + left: "0", top: "0", width: `${layoutWidth}px`, + height: `${layoutHeight}px`, boxSizing: style.boxSizing, whiteSpace: "pre-wrap", overflowWrap: "break-word", overflow: "hidden", }); COPIED_STYLES.forEach(property => { mirror.style[property] = style[property]; }); @@ -27,10 +31,13 @@ export function textareaCaretRect(textarea: HTMLTextAreaElement, caret = textare document.body.append(mirror); mirror.scrollTop = textarea.scrollTop; mirror.scrollLeft = textarea.scrollLeft; + const mirrorRect = mirror.getBoundingClientRect(); const markerRect = marker.getBoundingClientRect(); const lineHeight = Number.parseFloat(style.lineHeight) || Number.parseFloat(style.fontSize) * 1.2 || 16; mirror.remove(); - return { left: markerRect.left, top: markerRect.top, bottom: markerRect.top + lineHeight }; + const left = bounds.left + (markerRect.left - mirrorRect.left) * scaleX; + const top = bounds.top + (markerRect.top - mirrorRect.top) * scaleY; + return { left, top, bottom: top + lineHeight * scaleY }; } export function completionPopupPosition(textarea: HTMLTextAreaElement, placement: CompletionPlacement, popupHeight = 210): CompletionPopupPosition { diff --git a/ui/src/index.css b/ui/src/index.css index f79a42f..bc7b6b9 100644 --- a/ui/src/index.css +++ b/ui/src/index.css @@ -221,11 +221,12 @@ @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; 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: 1px; padding: 6px 8px; color: var(--bv-text-color); text-align: left; background: transparent; border: 0; border-radius: var(--bv-ui-radius-sm); cursor: pointer; } +.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(141,112,255,.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-muted-text-color); text-overflow: ellipsis; white-space: nowrap; } +.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; } @@ -394,6 +395,7 @@ .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:#d8d0ff; background:rgba(141,112,255,.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: translateX(-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; } diff --git a/ui/src/regional/RegionalEditor.tsx b/ui/src/regional/RegionalEditor.tsx index 9cb0195..451e13e 100644 --- a/ui/src/regional/RegionalEditor.tsx +++ b/ui/src/regional/RegionalEditor.tsx @@ -4,7 +4,7 @@ import EditorMenus from "./EditorMenus"; import OptionsPanel from "./OptionsPanel"; import type { BrushSettings, Tool } from "../ui/components"; import { Bounds, boundsOfLayer, Handle, hitTest, moveLayer, resizeLayer, setLayerBounds, simplifyPoints } from "./geometry"; -import { addGeometryLayerTarget, regionsInPriorityOrder, shouldAppendFinalBrushPoint, shouldStartSelectionMove, synchronizeRegionPriorities } from "./interaction"; +import { addGeometryLayerTarget, regionsInPriorityOrder, shouldAppendFinalBrushPoint, shouldClosePolygon, shouldStartSelectionMove, synchronizeRegionPriorities } from "./interaction"; import { automaticRegionColor, clone, Geometry, geometryAuthoring, geometryLayerId, geometryLayers, geometryMaskGroupId, newRegion, parseDocument, Point, preserveDocumentIdentity, RegionalDocument, Region, uuid } from "./model"; import { mergeSelectedLayers, remapMaskGroups, selectLayers } from "./layerOperations"; import { activeWindowGeometry, clampWindowGeometry, defaultEditorState, EditorViewState, loadEditorState, saveEditorState } from "./editorState"; @@ -25,7 +25,8 @@ type NodeRef = { id: number | string; title?: string; widgets?: Array<{ name: st const keyFor=(node:NodeRef|null|undefined)=>scopedNodeKey((getApp() as any).rootGraph??(getApp() as any).graph,node); type Props = { open: boolean; activationToken?:number; nodes: NodeRef[]; initialNode: NodeRef | null; backgrounds: Record; loraStacks: NamedLoraStack[]; onClose: () => void }; type Gesture = - | { mode: "draw-box" | "draw-brush" | "draw-polygon"; start: Point; commit: "add" | "subtract" } + | { mode: "draw-box" | "draw-brush"; start: Point; commit: "add" | "subtract" } + | { mode: "draw-polygon"; start: Point; startScreen: { x: number; y: number }; commit: "add" | "subtract" } | { mode: "move"; start: Point; startScreen: { x: number; y: number }; original: Geometry[]; started: boolean } | { mode: "resize"; start: Point; original: Geometry[]; handle: Handle }; @@ -246,7 +247,11 @@ export default function RegionalEditor({ open, activationToken=0, nodes, initial } const subtract = tool.endsWith("subtract"); if (subtract && (!selectedLayerId || selectedLayer?.authoring.locked)) return; - if (tool.startsWith("polygon") && gesture.current?.mode === "draw-polygon") { setDraft(current => current?.map(item => item.type === "polygon" ? { ...item, points: [...item.points, point] } : item) ?? null); return; } + if (tool.startsWith("polygon") && gesture.current?.mode === "draw-polygon") { + const pointCount = draft?.find(item => item.type === "polygon")?.points.length ?? 0; + if (shouldClosePolygon(pointCount, gesture.current.startScreen, { x: event.clientX, y: event.clientY })) { finalizePolygon(); return; } + setDraft(current => current?.map(item => item.type === "polygon" ? { ...item, points: [...item.points, point] } : item) ?? null); return; + } const id = uuid(), reusableLayerId = !subtract ? addGeometryLayerTarget(selectedLayer) : null; const layerId = subtract ? selectedLayerId! : reusableLayerId ?? id; const shapeName = tool.startsWith("rect") ? "Rectangle" : tool.startsWith("ellipse") ? "Ellipse" : tool.startsWith("polygon") ? "Polygon" : "Brush"; @@ -259,7 +264,7 @@ export default function RegionalEditor({ open, activationToken=0, nodes, initial gesture.current = { mode: "draw-box", start: point, commit: subtract ? "subtract" : "add" }; if (!subtract) replaceLayerSelection(layerId); } else if (tool.startsWith("polygon")) { setDraft(maskGroups.map((maskGroupId, index) => ({ id: index ? uuid() : id, layer_id: layerId, mask_group_id: maskGroupId, type: "polygon", operation: subtract ? "subtract" : "add", enabled: true, authoring, points: [point] }))); - gesture.current = { mode: "draw-polygon", start: point, commit: subtract ? "subtract" : "add" }; if (!subtract) replaceLayerSelection(layerId); + gesture.current = { mode: "draw-polygon", start: point, startScreen: { x: event.clientX, y: event.clientY }, commit: subtract ? "subtract" : "add" }; if (!subtract) replaceLayerSelection(layerId); } else { event.currentTarget.setPointerCapture(event.pointerId); setDraft(maskGroups.map((maskGroupId, index) => ({ id: index ? uuid() : id, layer_id: layerId, mask_group_id: maskGroupId, type: "brush_stroke", operation: tool === "brush-add" ? "add" : "subtract", enabled: true, authoring, size: brush.size, hardness: brush.hardness, opacity: brush.opacity, shape: brush.shape, pressure_mode: brush.pressureMode, points: [point] }))); diff --git a/ui/src/regional/interaction.ts b/ui/src/regional/interaction.ts index c39b4c7..d08e66d 100644 --- a/ui/src/regional/interaction.ts +++ b/ui/src/regional/interaction.ts @@ -15,6 +15,10 @@ export function shouldStartSelectionMove(start: ScreenPoint, current: ScreenPoin return Math.hypot(current.x - start.x, current.y - start.y) >= threshold; } +export function shouldClosePolygon(pointCount: number, start: ScreenPoint, current: ScreenPoint, threshold = 12) { + return pointCount >= 3 && Math.hypot(current.x - start.x, current.y - start.y) <= threshold; +} + export function regionsInPaintOrder(regions: T[]) { return [...regions].sort((left, right) => right.priority - left.priority); }