var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;li[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var l=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.iterator;function m(e){return typeof e!=`object`||!e?null:(e=p&&e[p]||e[`@@iterator`],typeof e==`function`?e:null)}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,_={};function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`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`)},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function y(){}y.prototype=v.prototype;function b(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}var x=b.prototype=new y;x.constructor=b,g(x,v.prototype),x.isPureReactComponent=!0;var S=Array.isArray;function C(){}var w={H:null,A:null,T:null,S:null},T=Object.prototype.hasOwnProperty;function E(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function D(e,t){return E(e.type,t,e.props)}function O(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function ee(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var te=/\/+/g;function ne(e,t){return typeof e==`object`&&e&&e.key!=null?ee(``+e.key):t.toString(36)}function k(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(C,C):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function A(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,A(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+ne(e,0):a,S(o)?(i=``,c!=null&&(i=c.replace(te,`$&/`)+`/`),A(o,r,i,``,function(e){return e})):o!=null&&(O(o)&&(o=D(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(te,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(S(e))for(var u=0;u{t.exports=l()})),d=o((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0>>1,a=e[r];if(0>>1;ri(c,n))li(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(li(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function b(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function x(e){if(h=!1,b(e),!m)if(n(c)!==null)m=!0,S||(S=!0,O());else{var t=n(l);t!==null&&ne(x,t.startTime-e)}}var S=!1,C=-1,w=5,T=-1;function E(){return g?!0:!(e.unstable_now()-Tt&&E());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,b(t),i=!0;break b}d===n(c)&&r(c),b(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&ne(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}i=void 0}}finally{i?O():S=!1}}}var O;if(typeof y==`function`)O=function(){y(D)};else if(typeof MessageChannel<`u`){var ee=new MessageChannel,te=ee.port2;ee.port1.onmessage=D,O=function(){te.postMessage(null)}}else O=function(){_(D,0)};function ne(t,n){C=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(C),C=-1):h=!0,ne(x,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,S||(S=!0,O()))),r},e.unstable_shouldYield=E,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),f=o(((e,t)=>{t.exports=d()})),p=o((e=>{var t=u();function n(e){var t=`https://react.dev/errors/`+e;if(1{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=p()})),h=o((e=>{var t=f(),n=u(),r=m();function i(e){var t=`https://react.dev/errors/`+e;if(1F||(e.current=ie[F],ie[F]=null,F--)}function R(e,t){F++,ie[F]=e.current,e.current=t}var ae=I(null),oe=I(null),se=I(null),ce=I(null);function le(e,t){switch(R(se,t),R(oe,e),R(ae,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Vd(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Vd(t),e=Hd(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}L(ae),R(ae,e)}function z(){L(ae),L(oe),L(se)}function B(e){e.memoizedState!==null&&R(ce,e);var t=ae.current,n=Hd(t,e.type);t!==n&&(R(oe,e),R(ae,n))}function ue(e){oe.current===e&&(L(ae),L(oe)),ce.current===e&&(L(ce),Qf._currentValue=P)}var de,fe;function pe(e){if(de===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);de=t&&t[1]||``,fe=-1)`:-1i||c[r]!==l[i]){var u=` `+c[r].replace(` at new `,` at `);return e.displayName&&u.includes(``)&&(u=u.replace(``,e.displayName)),u}while(1<=r&&0<=i);break}}}finally{me=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:``)?pe(n):``}function ge(e,t){switch(e.tag){case 26:case 27:case 5:return pe(e.type);case 16:return pe(`Lazy`);case 13:return e.child!==t&&t!==null?pe(`Suspense Fallback`):pe(`Suspense`);case 19:return pe(`SuspenseList`);case 0:case 15:return he(e.type,!1);case 11:return he(e.type.render,!1);case 1:return he(e.type,!0);case 31:return pe(`Activity`);default:return``}}function _e(e){try{var t=``,n=null;do t+=ge(e,n),n=e,e=e.return;while(e);return t}catch(e){return` Error generating stack: `+e.message+` `+e.stack}}var ve=Object.prototype.hasOwnProperty,ye=t.unstable_scheduleCallback,be=t.unstable_cancelCallback,xe=t.unstable_shouldYield,V=t.unstable_requestPaint,Se=t.unstable_now,Ce=t.unstable_getCurrentPriorityLevel,we=t.unstable_ImmediatePriority,H=t.unstable_UserBlockingPriority,U=t.unstable_NormalPriority,Te=t.unstable_LowPriority,Ee=t.unstable_IdlePriority,De=t.log,Oe=t.unstable_setDisableYieldValue,ke=null,Ae=null;function je(e){if(typeof De==`function`&&Oe(e),Ae&&typeof Ae.setStrictMode==`function`)try{Ae.setStrictMode(ke,e)}catch{}}var Me=Math.clz32?Math.clz32:Fe,Ne=Math.log,Pe=Math.LN2;function Fe(e){return e>>>=0,e===0?32:31-(Ne(e)/Pe|0)|0}var Ie=256,Le=262144,Re=4194304;function ze(e){var t=e&42;if(t!==0)return t;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:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function Be(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=ze(n))):i=ze(o):i=ze(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=ze(n))):i=ze(o)):i=ze(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function Ve(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function He(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32: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 t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Ue(){var e=Re;return Re<<=1,!(Re&62914560)&&(Re=4194304),e}function We(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Ge(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Ke(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0`u`||window.document===void 0||window.document.createElement===void 0),an=!1;if(rn)try{var on={};Object.defineProperty(on,"passive",{get:function(){an=!0}}),window.addEventListener(`test`,on,on),window.removeEventListener(`test`,on,on)}catch{an=!1}var sn=null,cn=null,ln=null;function un(){if(ln)return ln;var e,t=cn,n=t.length,r,i=`value`in sn?sn.value:sn.textContent,a=i.length;for(e=0;e=Hn),Gn=` `,Kn=!1;function qn(e,t){switch(e){case`keyup`:return Bn.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function Jn(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var Yn=!1;function Xn(e,t){switch(e){case`compositionend`:return Jn(t);case`keypress`:return t.which===32?(Kn=!0,Gn):null;case`textInput`:return e=t.data,e===Gn&&Kn?null:e;default:return null}}function Zn(e,t){if(Yn)return e===`compositionend`||!Vn&&qn(e,t)?(e=un(),ln=cn=sn=null,Yn=!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:n,offset:t-e};e=r}a:{for(;n;){if(n.nextSibling){n=n.nextSibling;break a}n=n.parentNode}n=void 0}n=yr(n)}}function xr(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?xr(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Sr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=jt(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==`string`}catch{n=!1}if(n)e=t.contentWindow;else break;t=jt(e.document)}return t}function Cr(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`)}var wr=rn&&`documentMode`in document&&11>=document.documentMode,Tr=null,Er=null,Dr=null,Or=!1;function kr(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Or||Tr==null||Tr!==jt(r)||(r=Tr,`selectionStart`in r&&Cr(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}),Dr&&vr(Dr,r)||(Dr=r,r=Ed(Er,`onSelect`),0>=o,i-=o,xi=1<<32-Me(t)+i|n<h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),W&&Ci(i,h),l;if(d===null){for(;hg?(_=h,h=null):_=h.sibling;var y=p(a,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(a,h),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(a,h),W&&Ci(a,g),u;if(h===null){for(;!v.done;g++,v=c.next())v=f(a,v.value,l),v!==null&&(s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return W&&Ci(a,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,a,g,v.value,l),v!==null&&(e&&v.alternate!==null&&h.delete(v.key===null?g:v.key),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(a,e)}),W&&Ci(a,g),u}function b(e,r,o,c){if(typeof o==`object`&&o&&o.type===y&&o.key===null&&(o=o.props.children),typeof o==`object`&&o){switch(o.$$typeof){case _:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===y){if(r.tag===7){n(e,r.sibling),c=a(r,o.props.children),c.return=e,e=c;break a}}else if(r.elementType===l||typeof l==`object`&&l&&l.$$typeof===O&&Ca(l)===r.type){n(e,r.sibling),c=a(r,o.props),Aa(c,o),c.return=e,e=c;break a}n(e,r);break}else t(e,r);r=r.sibling}o.type===y?(c=ci(o.props.children,e.mode,c,o.key),c.return=e,e=c):(c=si(o.type,o.key,o.props,null,e.mode,c),Aa(c,o),c.return=e,e=c)}return s(e);case v:a:{for(l=o.key;r!==null;){if(r.key===l)if(r.tag===4&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),c=a(r,o.children||[]),c.return=e,e=c;break a}else{n(e,r);break}else t(e,r);r=r.sibling}c=di(o,e.mode,c),c.return=e,e=c}return s(e);case O:return o=Ca(o),b(e,r,o,c)}if(j(o))return h(e,r,o,c);if(k(o)){if(l=k(o),typeof l!=`function`)throw Error(i(150));return o=l.call(o),g(e,r,o,c)}if(typeof o.then==`function`)return b(e,r,ka(o),c);if(o.$$typeof===C)return b(e,r,Zi(e,o),c);ja(e,o)}return typeof o==`string`&&o!==``||typeof o==`number`||typeof o==`bigint`?(o=``+o,r!==null&&r.tag===6?(n(e,r.sibling),c=a(r,o),c.return=e,e=c):(n(e,r),c=li(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{Oa=0;var i=b(e,t,n,r);return Da=null,i}catch(t){if(t===_a||t===ya)throw t;var a=ri(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var Na=Ma(!0),Pa=Ma(!1),Fa=!1;function Ia(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function La(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Ra(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function za(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,q&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=ei(e),$r(e,null,n),t}return Xr(e,r,t,n),ei(e)}function Ba(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194048)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Je(e,n)}}function Va(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};a===null?i=a=o:a=a.next=o,n=n.next}while(n!==null);a===null?i=a=t:a=a.next=t}else i=a=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var Ha=!1;function Ua(){if(Ha){var e=ca;if(e!==null)throw e}}function Wa(e,t,n,r){Ha=!1;var i=e.updateQueue;Fa=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,o===null?a=l:o.next=l,o=c;var u=e.alternate;u!==null&&(u=u.updateQueue,s=u.lastBaseUpdate,s!==o&&(s===null?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(a!==null){var d=i.baseState;o=0,u=l=c=null,s=a;do{var f=s.lane&-536870913,p=f!==s.lane;if(p?(Y&f)===f:(r&f)===f){f!==0&&f===sa&&(Ha=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var m=e,g=s;f=t;var _=n;switch(g.tag){case 1:if(m=g.payload,typeof m==`function`){d=m.call(_,d,f);break a}d=m;break a;case 3:m.flags=m.flags&-65537|128;case 0:if(m=g.payload,f=typeof m==`function`?m.call(_,d,f):m,f==null)break a;d=h({},d,f);break a;case 2:Fa=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=p,c=d):u=u.next=p,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,i.shared.pending=null}}while(1);u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,a===null&&(i.shared.lanes=0),Gl|=o,e.lanes=o,e.memoizedState=d}}function Ga(e,t){if(typeof e!=`function`)throw Error(i(191,e));e.call(t)}function Ka(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ea?a:8;var o=M.T,s={};M.T=s,js(e,!1,t,n);try{var c=i(),l=M.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?As(e,t,da(c,r),pu(e)):As(e,t,r,pu(e))}catch(n){As(e,t,{then:function(){},status:`rejected`,reason:n},pu())}finally{N.p=a,o!==null&&s.types!==null&&(o.types=s.types),M.T=o}}function bs(){}function xs(e,t,n,r){if(e.tag!==5)throw Error(i(476));var a=Ss(e).queue;ys(e,a,t,P,n===null?bs:function(){return Cs(e),n(r)})}function Ss(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:P,baseState:P,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Mo,lastRenderedState:P},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Mo,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function Cs(e){var t=Ss(e);t.next===null&&(t=e.alternate.memoizedState),As(e,t.next.queue,{},pu())}function ws(){return Xi(Qf)}function Ts(){return Do().memoizedState}function Es(){return Do().memoizedState}function Ds(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=pu();e=Ra(n);var r=za(t,e,n);r!==null&&(hu(r,t,n),Ba(r,t,n)),t={cache:ra()},e.payload=t;return}t=t.return}}function Os(e,t,n){var r=pu();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},Ms(e)?Ns(t,n):(n=Zr(e,t,n,r),n!==null&&(hu(n,e,r),Ps(n,t,r)))}function ks(e,t,n){As(e,t,n,pu())}function As(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(Ms(e))Ns(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,_r(s,o))return Xr(e,t,i,0),Rl===null&&Yr(),!1}catch{}if(n=Zr(e,t,i,r),n!==null)return hu(n,e,r),Ps(n,t,r),!0}return!1}function js(e,t,n,r){if(r={lane:2,revertLane:dd(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},Ms(e)){if(t)throw Error(i(479))}else t=Zr(e,n,r,2),t!==null&&hu(t,e,2)}function Ms(e){var t=e.alternate;return e===G||t!==null&&t===G}function Ns(e,t){uo=lo=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Ps(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Je(e,n)}}var Fs={readContext:Xi,use:Ao,useCallback:_o,useContext:_o,useEffect:_o,useImperativeHandle:_o,useLayoutEffect:_o,useInsertionEffect:_o,useMemo:_o,useReducer:_o,useRef:_o,useState:_o,useDebugValue:_o,useDeferredValue:_o,useTransition:_o,useSyncExternalStore:_o,useId:_o,useHostTransitionStatus:_o,useFormState:_o,useActionState:_o,useOptimistic:_o,useMemoCache:_o,useCacheRefresh:_o};Fs.useEffectEvent=_o;var Is={readContext:Xi,use:Ao,useCallback:function(e,t){return Eo().memoizedState=[e,t===void 0?null:t],e},useContext:Xi,useEffect:os,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),is(4194308,4,fs.bind(null,t,e),n)},useLayoutEffect:function(e,t){return is(4194308,4,e,t)},useInsertionEffect:function(e,t){is(4,2,e,t)},useMemo:function(e,t){var n=Eo();t=t===void 0?null:t;var r=e();if(fo){je(!0);try{e()}finally{je(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=Eo();if(n!==void 0){var i=n(t);if(fo){je(!0);try{n(t)}finally{je(!1)}}}else i=t;return r.memoizedState=r.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},r.queue=e,e=e.dispatch=Os.bind(null,G,e),[r.memoizedState,e]},useRef:function(e){var t=Eo();return e={current:e},t.memoizedState=e},useState:function(e){e=Ho(e);var t=e.queue,n=ks.bind(null,G,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:ms,useDeferredValue:function(e,t){return _s(Eo(),e,t)},useTransition:function(){var e=Ho(!1);return e=ys.bind(null,G,e.queue,!0,!1),Eo().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=G,a=Eo();if(W){if(n===void 0)throw Error(i(407));n=n()}else{if(n=t(),Rl===null)throw Error(i(349));Y&127||Lo(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,os(zo.bind(null,r,o,e),[e]),r.flags|=2048,ns(9,{destroy:void 0},Ro.bind(null,r,o,n,t),null),n},useId:function(){var e=Eo(),t=Rl.identifierPrefix;if(W){var n=Si,r=xi;n=(r&~(1<<32-Me(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=po++,0<\/script>`,o=o.removeChild(o.firstChild);break;case`select`:o=typeof r.is==`string`?s.createElement(`select`,{is:r.is}):s.createElement(`select`),r.multiple?o.multiple=!0:r.size&&(o.size=r.size);break;default:o=typeof r.is==`string`?s.createElement(a,{is:r.is}):s.createElement(a)}}o[tt]=t,o[nt]=r;a:for(s=t.child;s!==null;){if(s.tag===5||s.tag===6)o.appendChild(s.stateNode);else if(s.tag!==4&&s.tag!==27&&s.child!==null){s.child.return=s,s=s.child;continue}if(s===t)break a;for(;s.sibling===null;){if(s.return===null||s.return===t)break a;s=s.return}s.sibling.return=s.return,s=s.sibling}t.stateNode=o;a:switch(Pd(o,a,r),a){case`button`:case`input`:case`select`:case`textarea`:r=!!r.autoFocus;break a;case`img`:r=!0;break a;default:r=!1}r&&Ac(t)}}return Fc(t),jc(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&Ac(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(i(166));if(e=se.current,Ii(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,a=Oi,a!==null)switch(a.tag){case 27:case 5:r=a.memoizedProps}e[tt]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||Md(e.nodeValue,n)),e||Ni(t,!0)}else e=Bd(e).createTextNode(r),e[tt]=t,t.stateNode=e}return Fc(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=Ii(t),n!==null){if(e===null){if(!r)throw Error(i(318));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(i(557));e[tt]=t}else Li(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Fc(t),e=!1}else n=Ri(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(io(t),t):(io(t),null);if(t.flags&128)throw Error(i(558))}return Fc(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(a=Ii(t),r!==null&&r.dehydrated!==null){if(e===null){if(!a)throw Error(i(318));if(a=t.memoizedState,a=a===null?null:a.dehydrated,!a)throw Error(i(317));a[tt]=t}else Li(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Fc(t),a=!1}else a=Ri(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),a=!0;if(!a)return t.flags&256?(io(t),t):(io(t),null)}return io(t),t.flags&128?(t.lanes=n,t):(n=r!==null,e=e!==null&&e.memoizedState!==null,n&&(r=t.child,a=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(a=r.alternate.memoizedState.cachePool.pool),o=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(o=r.memoizedState.cachePool.pool),o!==a&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),Nc(t,t.updateQueue),Fc(t),null);case 4:return z(),e===null&&Sd(t.stateNode.containerInfo),Fc(t),null;case 10:return Wi(t.type),Fc(t),null;case 19:if(L(ao),r=t.memoizedState,r===null)return Fc(t),null;if(a=(t.flags&128)!=0,o=r.rendering,o===null)if(a)Pc(r,!1);else{if(Wl!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=oo(e),o!==null){for(t.flags|=128,Pc(r,!1),e=o.updateQueue,t.updateQueue=e,Nc(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)oi(n,e),n=n.sibling;return R(ao,ao.current&1|2),W&&Ci(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&Se()>tu&&(t.flags|=128,a=!0,Pc(r,!1),t.lanes=4194304)}else{if(!a)if(e=oo(o),e!==null){if(t.flags|=128,a=!0,e=e.updateQueue,t.updateQueue=e,Nc(t,e),Pc(r,!0),r.tail===null&&r.tailMode===`hidden`&&!o.alternate&&!W)return Fc(t),null}else 2*Se()-r.renderingStartTime>tu&&n!==536870912&&(t.flags|=128,a=!0,Pc(r,!1),t.lanes=4194304);r.isBackwards?(o.sibling=t.child,t.child=o):(e=r.last,e===null?t.child=o:e.sibling=o,r.last=o)}return r.tail===null?(Fc(t),null):(e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=Se(),e.sibling=null,n=ao.current,R(ao,a?n&1|2:n&1),W&&Ci(t,r.treeForkCount),e);case 22:case 23:return io(t),Za(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(Fc(t),t.subtreeFlags&6&&(t.flags|=8192)):Fc(t),n=t.updateQueue,n!==null&&Nc(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),e!==null&&L(pa),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),Wi(na),Fc(t),null;case 25:return null;case 30:return null}throw Error(i(156,t.tag))}function Lc(e,t){switch(Ei(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Wi(na),z(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return ue(t),null;case 31:if(t.memoizedState!==null){if(io(t),t.alternate===null)throw Error(i(340));Li()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(io(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(i(340));Li()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return L(ao),null;case 4:return z(),null;case 10:return Wi(t.type),null;case 22:case 23:return io(t),Za(),e!==null&&L(pa),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return Wi(na),null;case 25:return null;default:return null}}function Rc(e,t){switch(Ei(t),t.tag){case 3:Wi(na),z();break;case 26:case 27:case 5:ue(t);break;case 4:z();break;case 31:t.memoizedState!==null&&io(t);break;case 13:io(t);break;case 19:L(ao);break;case 10:Wi(t.type);break;case 22:case 23:io(t),Za(),e!==null&&L(pa);break;case 24:Wi(na)}}function zc(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){Z(t,t.return,e)}}function Bc(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){Z(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){Z(t,t.return,e)}}function Vc(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{Ka(t,n)}catch(t){Z(e,e.return,t)}}}function Hc(e,t,n){n.props=Us(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){Z(e,t,n)}}function Uc(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){Z(e,t,n)}}function Wc(e,t){var n=e.ref,r=e.refCleanup;if(n!==null)if(typeof r==`function`)try{r()}catch(n){Z(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){Z(e,t,n)}else n.current=null}function Gc(e){var t=e.type,n=e.memoizedProps,r=e.stateNode;try{a:switch(t){case`button`:case`input`:case`select`:case`textarea`:n.autoFocus&&r.focus();break a;case`img`:n.src?r.src=n.src:n.srcSet&&(r.srcset=n.srcSet)}}catch(t){Z(e,e.return,t)}}function Kc(e,t,n){try{var r=e.stateNode;Fd(r,e.type,n,t),r[nt]=t}catch(t){Z(e,e.return,t)}}function qc(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&Zd(e.type)||e.tag===4}function Jc(e){a:for(;;){for(;e.sibling===null;){if(e.return===null||qc(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.tag===27&&Zd(e.type)||e.flags&2||e.child===null||e.tag===4)continue a;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Yc(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n).insertBefore(e,t):(t=n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n,t.appendChild(e),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Jt));else if(r!==4&&(r===27&&Zd(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(Yc(e,t,n),e=e.sibling;e!==null;)Yc(e,t,n),e=e.sibling}function Xc(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(r===27&&Zd(e.type)&&(n=e.stateNode),e=e.child,e!==null))for(Xc(e,t,n),e=e.sibling;e!==null;)Xc(e,t,n),e=e.sibling}function Zc(e){var t=e.stateNode,n=e.memoizedProps;try{for(var r=e.type,i=t.attributes;i.length;)t.removeAttributeNode(i[0]);Pd(t,r,n),t[tt]=e,t[nt]=n}catch(t){Z(e,e.return,t)}}var Qc=!1,$c=!1,el=!1,tl=typeof WeakSet==`function`?WeakSet:Set,nl=null;function rl(e,t){if(e=e.containerInfo,Rd=sp,e=Sr(e),Cr(e)){if(`selectionStart`in e)var n={start:e.selectionStart,end:e.selectionEnd};else a:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var a=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break a}var s=0,c=-1,l=-1,u=0,d=0,f=e,p=null;b:for(;;){for(var m;f!==n||a!==0&&f.nodeType!==3||(c=s+a),f!==o||r!==0&&f.nodeType!==3||(l=s+r),f.nodeType===3&&(s+=f.nodeValue.length),(m=f.firstChild)!==null;)p=f,f=m;for(;;){if(f===e)break b;if(p===n&&++u===a&&(c=s),p===o&&++d===r&&(l=s),(m=f.nextSibling)!==null)break;f=p,p=f.parentNode}f=m}n=c===-1||l===-1?null:{start:c,end:l}}else n=null}n||={start:0,end:0}}else n=null;for(zd={focusedElem:e,selectionRange:n},sp=!1,nl=t;nl!==null;)if(t=nl,e=t.child,t.subtreeFlags&1028&&e!==null)e.return=t,nl=e;else for(;nl!==null;){switch(t=nl,o=t.alternate,e=t.flags,t.tag){case 0:if(e&4&&(e=t.updateQueue,e=e===null?null:e.events,e!==null))for(n=0;n title`))),Pd(o,r,n),o[tt]=e,mt(o),r=o;break a;case`link`:var s=Vf(`link`,`href`,a).get(r+(n.href||``));if(s){for(var c=0;cg&&(o=g,g=h,h=o);var _=br(s,h),v=br(s,g);if(_&&v&&(p.rangeCount!==1||p.anchorNode!==_.node||p.anchorOffset!==_.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var y=d.createRange();y.setStart(_.node,_.offset),p.removeAllRanges(),h>g?(p.addRange(y),p.extend(v.node,v.offset)):(y.setEnd(v.node,v.offset),p.addRange(y))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==`function`&&s.focus(),s=0;sn?32:n,M.T=null,n=lu,lu=null;var o=au,s=su;if(iu=0,ou=au=null,su=0,q&6)throw Error(i(331));var c=q;if(q|=4,Nl(o.current),Tl(o,o.current,s,n),q=c,id(0,!1),Ae&&typeof Ae.onPostCommitFiberRoot==`function`)try{Ae.onPostCommitFiberRoot(ke,o)}catch{}return!0}finally{N.p=a,M.T=r,Vu(e,t)}}function Wu(e,t,n){t=pi(n,t),t=Ys(e.stateNode,t,2),e=za(e,t,2),e!==null&&(Ge(e,2),rd(e))}function Z(e,t,n){if(e.tag===3)Wu(e,e,n);else for(;t!==null;){if(t.tag===3){Wu(t,e,n);break}else if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(ru===null||!ru.has(r))){e=pi(n,e),n=Xs(2),r=za(t,n,2),r!==null&&(Zs(n,r,t,e),Ge(r,2),rd(r));break}}t=t.return}}function Gu(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new Ll;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(Hl=!0,i.add(n),e=Ku.bind(null,e,t,n),t.then(e,e))}function Ku(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,Rl===e&&(Y&n)===n&&(Wl===4||Wl===3&&(Y&62914560)===Y&&300>Se()-$l?!(q&2)&&Su(e,0):ql|=n,Yl===Y&&(Yl=0)),rd(e)}function qu(e,t){t===0&&(t=Ue()),e=Qr(e,t),e!==null&&(Ge(e,t),rd(e))}function Ju(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),qu(e,n)}function Yu(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}r!==null&&r.delete(t),qu(e,n)}function Xu(e,t){return ye(e,t)}var Zu=null,Qu=null,$u=!1,ed=!1,td=!1,nd=0;function rd(e){e!==Qu&&e.next===null&&(Qu===null?Zu=Qu=e:Qu=Qu.next=e),ed=!0,$u||($u=!0,ud())}function id(e,t){if(!td&&ed){td=!0;do for(var n=!1,r=Zu;r!==null;){if(!t)if(e!==0){var i=r.pendingLanes;if(i===0)var a=0;else{var o=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-Me(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,ld(r,a))}else a=Y,a=Be(r,r===Rl?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||Ve(r,a)||(n=!0,ld(r,a));r=r.next}while(n);td=!1}}function ad(){od()}function od(){ed=$u=!1;var e=0;nd!==0&&Gd()&&(e=nd);for(var t=Se(),n=null,r=Zu;r!==null;){var i=r.next,a=sd(r,t);a===0?(r.next=null,n===null?Zu=i:n.next=i,i===null&&(Qu=n)):(n=r,(e!==0||a&3)&&(ed=!0)),r=i}iu!==0&&iu!==5||id(e,!1),nd!==0&&(nd=0)}function sd(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,a=e.pendingLanes&-62914561;0s)break;var u=c.transferSize,d=c.initiatorType;u&&Id(d)&&(c=c.responseEnd,o+=u*(c`u`?null:document;function xf(e,t,n){var r=bf;if(r&&typeof t==`string`&&t){var i=Nt(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),hf.has(i)||(hf.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),Pd(t,`link`,e),mt(t),r.head.appendChild(t)))}}function Sf(e){_f.D(e),xf(`dns-prefetch`,e,null)}function Cf(e,t){_f.C(e,t),xf(`preconnect`,e,t)}function wf(e,t,n){_f.L(e,t,n);var r=bf;if(r&&e&&t){var i=`link[rel="preload"][as="`+Nt(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+Nt(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+Nt(n.imageSizes)+`"]`)):i+=`[href="`+Nt(e)+`"]`;var a=i;switch(t){case`style`:a=Af(e);break;case`script`:a=Pf(e)}mf.has(a)||(e=h({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),mf.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(jf(a))||t===`script`&&r.querySelector(Ff(a))||(t=r.createElement(`link`),Pd(t,`link`,e),mt(t),r.head.appendChild(t)))}}function Tf(e,t){_f.m(e,t);var n=bf;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+Nt(r)+`"][href="`+Nt(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Pf(e)}if(!mf.has(a)&&(e=h({rel:`modulepreload`,href:e},t),mf.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(Ff(a)))return}r=n.createElement(`link`),Pd(r,`link`,e),mt(r),n.head.appendChild(r)}}}function Ef(e,t,n){_f.S(e,t,n);var r=bf;if(r&&e){var i=pt(r).hoistableStyles,a=Af(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(jf(a)))s.loading=5;else{e=h({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=mf.get(a))&&Rf(e,n);var c=o=r.createElement(`link`);mt(c),Pd(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Lf(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function Df(e,t){_f.X(e,t);var n=bf;if(n&&e){var r=pt(n).hoistableScripts,i=Pf(e),a=r.get(i);a||(a=n.querySelector(Ff(i)),a||(e=h({src:e,async:!0},t),(t=mf.get(i))&&zf(e,t),a=n.createElement(`script`),mt(a),Pd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Of(e,t){_f.M(e,t);var n=bf;if(n&&e){var r=pt(n).hoistableScripts,i=Pf(e),a=r.get(i);a||(a=n.querySelector(Ff(i)),a||(e=h({src:e,async:!0,type:`module`},t),(t=mf.get(i))&&zf(e,t),a=n.createElement(`script`),mt(a),Pd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function kf(e,t,n,r){var a=(a=se.current)?gf(a):null;if(!a)throw Error(i(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(t=Af(n.href),n=pt(a).hoistableStyles,r=n.get(t),r||(r={type:`style`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Af(n.href);var o=pt(a).hoistableStyles,s=o.get(e);if(s||(a=a.ownerDocument||a,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=a.querySelector(jf(e)))&&!o._p&&(s.instance=o,s.state.loading=5),mf.has(e)||(n={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},mf.set(e,n),o||Nf(a,e,n,s.state))),t&&r===null)throw Error(i(528,``));return s}if(t&&r!==null)throw Error(i(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(t=Pf(n),n=pt(a).hoistableScripts,r=n.get(t),r||(r={type:`script`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(i(444,e))}}function Af(e){return`href="`+Nt(e)+`"`}function jf(e){return`link[rel="stylesheet"][`+e+`]`}function Mf(e){return h({},e,{"data-precedence":e.precedence,precedence:null})}function Nf(e,t,n,r){e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)?r.loading=1:(t=e.createElement(`link`),r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2}),Pd(t,`link`,n),mt(t),e.head.appendChild(t))}function Pf(e){return`[src="`+Nt(e)+`"]`}function Ff(e){return`script[async]`+e}function If(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+Nt(n.href)+`"]`);if(r)return t.instance=r,mt(r),r;var a=h({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),mt(r),Pd(r,`style`,a),Lf(r,n.precedence,e),t.instance=r;case`stylesheet`:a=Af(n.href);var o=e.querySelector(jf(a));if(o)return t.state.loading|=4,t.instance=o,mt(o),o;r=Mf(n),(a=mf.get(a))&&Rf(r,a),o=(e.ownerDocument||e).createElement(`link`),mt(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),Pd(o,`link`,r),t.state.loading|=4,Lf(o,n.precedence,e),t.instance=o;case`script`:return o=Pf(n.src),(a=e.querySelector(Ff(o)))?(t.instance=a,mt(a),a):(r=n,(a=mf.get(o))&&(r=h({},n),zf(r,a)),e=e.ownerDocument||e,a=e.createElement(`script`),mt(a),Pd(a,`link`,r),e.head.appendChild(a),t.instance=a);case`void`:return null;default:throw Error(i(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Lf(r,n.precedence,e));return t.instance}function Lf(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o title`):null)}function Uf(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function Wf(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Gf(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Af(r.href),a=t.querySelector(jf(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=Jf.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,mt(a);return}a=t.ownerDocument||t,r=Mf(r),(i=mf.get(i))&&Rf(r,i),a=a.createElement(`link`),mt(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),Pd(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=Jf.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var Kf=0;function qf(e,t){return e.stylesheets&&e.count===0&&Xf(e,e.stylesheets),0Kf?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function Jf(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Xf(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Yf=null;function Xf(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Yf=new Map,t.forEach(Zf,e),Yf=null,Jf.call(e))}function Zf(e,t){if(!(t.state.loading&4)){var n=Yf.get(e);if(n)var r=n.get(null);else{n=new Map,Yf.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=h()})),_=c(u(),1),v=c(g(),1),y=-1;function b(){return--y,y}var x={background:`Hintergründe`,pump:`Pumpen`,heat_generation:`Wärmeerzeugung`,cold_generation:`Kälteerzeugung`,heat_recovery:`Wärmetauscher / WRG`,valve:`Ventile`,fan:`Ventilatoren`,sensor:`Fühler`,text:`Text / Label`,custom:`Sonstige`},S=[{key:``,label:`Frei wählen`,value:``},{key:`heating_supply`,label:`Vorlauf Rot`,value:`#dc2626`},{key:`heating_return`,label:`Rücklauf Dunkelblau`,value:`#1d4ed8`},{key:`cold_water`,label:`Kaltwasser Blau`,value:`#0ea5e9`},{key:`warm_water`,label:`Warmwasser Orange`,value:`#f97316`},{key:`gas`,label:`Gas Gelb`,value:`#eab308`},{key:`air_supply`,label:`Zuluft Grün`,value:`#22c55e`},{key:`air_exhaust`,label:`Abluft Braun`,value:`#92400e`},{key:`neutral`,label:`Neutral Grau`,value:`#94a3b8`},{key:`black`,label:`Schwarz`,value:`#020617`},{key:`white`,label:`Weiß`,value:`#ffffff`}],C=[{value:`Arial, sans-serif`,label:`Arial`},{value:`"Segoe UI", sans-serif`,label:`Segoe UI`},{value:`Verdana, sans-serif`,label:`Verdana`},{value:`Tahoma, sans-serif`,label:`Tahoma`},{value:`Georgia, serif`,label:`Georgia`},{value:`"Times New Roman", serif`,label:`Times New Roman`},{value:`"Courier New", monospace`,label:`Courier New`},{value:`ui-monospace, Consolas, monospace`,label:`Monospace`}],w={sensor:{element_type:`value`,name:`Fühler`,label:`Fühler`,w:190,h:86,style_json:{kind:`sensor`,subtype:`sensor`,color:`#f59e0b`,marker:`T`,markerColor:`#f59e0b`,strokeColor:`#60a5fa`,strokeWidth:3,showBorder:!0,fillColor:`transparent`,markerTextColor:`#0f172a`,markerSize:34,markerFontSize:13,labelColor:`rgba(209, 213, 219, 0.78)`,labelFontSize:12,valueColor:`#ffffff`,valueFontSize:20,unitMode:`auto`,decimals:1}},setpoint:{element_type:`value`,name:`Sollwert`,label:`Sollwert`,w:210,h:96,style_json:{kind:`setpoint`,subtype:`setpoint`,color:`#38bdf8`,marker:`SP`,markerColor:`#38bdf8`,markerTextColor:`#0f172a`,markerSize:34,markerFontSize:13,labelColor:`rgba(209, 213, 219, 0.78)`,labelFontSize:12,valueColor:`#ffffff`,valueFontSize:20,unitMode:`auto`,decimals:1,strokeColor:`#60a5fa`,strokeWidth:3,showBorder:!0,fillColor:`#082f49`,fillMode:`linear`,gradientColor:`#2563eb`,gradientAngle:110,gradientOrigin:`center`}},scale_bar:{element_type:`value`,name:`Skalenbalken`,label:`Skalenbalken`,w:360,h:110,style_json:{kind:`scale_bar`,orientation:`horizontal`,min:0,max:100,majorStep:20,minorDivisions:4,labelMode:`all`,labelFontSize:12,labelOffset:0,barColor:`#334155`,fillEnabled:!1,fillColor:`#38bdf8`,needleColor:`#f8fafc`,pointerStyle:`triangle`,decimals:1,ranges:[],point:null}},dial_gauge:{element_type:`value`,name:`Zeigerinstrument`,label:`Zeigerinstrument`,w:260,h:210,style_json:{kind:`dial_gauge`,min:0,max:100,majorStep:20,minorDivisions:4,labelMode:`all`,labelFontSize:12,labelOffset:0,barColor:`#334155`,fillEnabled:!1,fillColor:`#38bdf8`,needleColor:`#f8fafc`,pointerStyle:`needle`,decimals:1,ranges:[],point:null}},trend_chart:{element_type:`value`,name:`Trendgraph`,label:`Trendgraph`,w:560,h:320,style_json:{kind:`trend_chart`,series:[],range:`24h`,interval:`auto`,aggregate:`mean`,refreshSeconds:60,displayMode:`line`,interpolation:`linear`,connectNulls:!0,lineWidth:3,fillOpacity:.18,showLegend:!0,backgroundColor:`rgba(15, 23, 42, 0.46)`,borderColor:`rgba(148, 163, 184, 0.42)`,radius:14}},sankey_chart:{element_type:`value`,name:`Sankey`,label:`Sankey`,w:620,h:340,style_json:{kind:`sankey_chart`,nodes:[{id:`sankey-node-1`,label:`Quelle`,column:0,order:0,color:`#38bdf8`},{id:`sankey-node-2`,label:`Verbraucher`,column:1,order:0,color:`#22c55e`}],links:[{id:`sankey-link-1`,sourceId:`sankey-node-1`,targetId:`sankey-node-2`,label:`Fluss 1`,sourceMode:`static`,staticValue:`10`,color:`#38bdf8`,opacity:.46,thicknessFactor:1}],unit:``,decimals:1,refreshSeconds:30,nodeWidth:26,nodeRadius:10,nodeGap:14,minLinkWidth:4,linkOpacity:.46,curve:.42,minNodeHeight:24,backgroundColor:`rgba(15, 23, 42, 0.46)`,borderColor:`rgba(148, 163, 184, 0.42)`,labelColor:`#e2e8f0`,radius:14,showValues:!0}},text:{element_type:`text`,name:`Text`,label:`Text`,w:190,h:60,style_json:{subtype:`text`,color:`#ffffff`,fontSize:22,fontFamily:`Arial, sans-serif`,textRules:[]}},link:{element_type:`text`,name:`Link`,label:`Link`,w:220,h:60,style_json:{subtype:`link`,color:`#93c5fd`,fontSize:22,fontFamily:`Arial, sans-serif`,textRules:[],linkMode:`page`,linkPageId:``,linkUrl:``,linkTarget:`same_tab`,renderAsButton:!1,buttonShape:`rounded`,buttonRadius:16,buttonFill:`rgba(37, 99, 235, 0.78)`,buttonBorderColor:`rgba(147, 197, 253, 0.72)`}},menu:{element_type:`text`,name:`Menü`,label:`Menü`,w:320,h:120,style_json:{subtype:`menu`,color:`#93c5fd`,fontSize:18,fontFamily:`Arial, sans-serif`,menuOrientation:`vertical`,menuGap:8,menuButtonSize:42,linkTarget:`same_tab`,renderAsButton:!0,buttonShape:`rounded`,buttonRadius:16,buttonFill:`rgba(37, 99, 235, 0.78)`,buttonBorderColor:`rgba(147, 197, 253, 0.72)`,menuItems:[{id:`menu-1`,label:`Link 1`,linkMode:`page`,linkPageId:``,linkUrl:``,linkTarget:`same_tab`},{id:`menu-2`,label:`Link 2`,linkMode:`page`,linkPageId:``,linkUrl:``,linkTarget:`same_tab`}]}}},T={background:`🖼️`,pump:`💧`,heat_generation:`🔥`,cold_generation:`❄️`,heat_recovery:`♻️`,valve:`⚙️`,fan:`🌀`,sensor:`🌡️`,text:`🏷️`,custom:`▦`};function E(e,t=null){if(!e)return t;if(typeof e==`object`)return e;try{return JSON.parse(e)}catch{return t}}function D(e){return{id:Number(e.id||0),asset_id:Number(e.asset_id||0),state_key:e.state_key||``,label:e.label||``,image_file:e.image_file||``,sort_order:Number(e.sort_order||100),is_default:!!Number(e.is_default||0)}}function O(e){return{id:e.id?Number(e.id):0,element_id:e.element_id?Number(e.element_id):0,asset_state_id:e.asset_state_id?Number(e.asset_state_id):0,variable_type:e.variable_type||`digital`,external_id:e.external_id||``,variable_id:e.variable_id?Number(e.variable_id):``,point_key:e.point_key||``,point_label:e.point_label||``,operator:e.operator||`eq`,compare_value:e.compare_value??``,priority:Number(e.priority||100),state_key:e.state_key||``,state_label:e.state_label||``,image_file:e.image_file||``}}function ee(e){return{id:Number(e.id||0),asset_id:e.asset_id?Number(e.asset_id):null,asset_name:e.asset_name||``,asset_type:e.asset_type||``,asset_states:Array.isArray(e.asset_states)?e.asset_states.map(D):[],element_type:e.element_type||`shape`,name:e.name||``,variable_id:e.variable_id?Number(e.variable_id):``,label:e.label||e.name||``,x:Number(e.x||0),y:Number(e.y||0),w:Number(e.w||120),h:Number(e.h||120),rotation:Number(e.rotation||0),z_index:Number(e.z_index||10),opacity:Number(e.opacity??1),state_rules:E(e.state_rules,null),style_json:E(e.style_json,{}),is_locked:!!Number(e.is_locked||0),rules:Array.isArray(e.rules)?e.rules.map(O):[]}}function te(e){return{id:Number(e.id||0),project_id:e.project_id?Number(e.project_id):null,name:e.name||``,description:e.description||``,asset_type:e.asset_type||`custom`,is_global:!!Number(e.is_global??1),states:Array.isArray(e.states)?e.states.map(D):[]}}function ne(e){return{...e,id:Number(e.id||0),project_id:Number(e.project_id||0),width:Number(e.width||1920),height:Number(e.height||1080),background_color:e.background_color||`#0f172a`,background_image:e.background_image||``,grid_enabled:!!Number(e.grid_enabled??1),grid_size:Number(e.grid_size||40),snap_enabled:!!Number(e.snap_enabled??1)}}function k(e){return[e?.type||e?.variable_type||``,e?.external_id||``,e?.variable_id||``,e?.point_key||``].join(`|`)}function A(e){if(!e)return[];let t=e?.type||e?.variable_type||``,n=[],r=t=>{n.push([t||``,e?.external_id||``,e?.variable_id||``,e?.point_key||``].join(`|`))};return e.source_key&&n.push(e.source_key),r(t),t===`alarm`&&r(`digital`),t===`digital`&&r(`alarm`),[...new Set(n.filter(Boolean))]}function re(e){if(!e)return!1;let t=e.value!==null&&e.value!==void 0&&String(e.value).trim()!==``,n=e.value_formatted!==null&&e.value_formatted!==void 0&&String(e.value_formatted).trim()!==``;return t||n}function j(e,t={}){if(!e||!t)return null;if((e.type||e.variable_type)===`static`){let t=e.static_value??e.value??e.value_formatted??``;return{...e,type:`static`,value:t,value_formatted:String(t),label:e.point_label||e.label||`Fester Wert`,quality:`static`}}let n=null;for(let r of A(e)){let e=t[r];if(e&&(n||=e,re(e)))return e}if(e.variable_id&&t[String(e.variable_id)]){let r=t[String(e.variable_id)];if(re(r))return r;n||=r}return n}function M(e,t={}){if(!e||typeof e!=`object`||Array.isArray(e))return e;let n=e.templatePlaceholderKey||(e.type===`placeholder`||e.variable_type===`placeholder`?e.point_key:``);if(!n)return e;let r=t?.templateBindings;if(!r||typeof r!=`object`||Array.isArray(r))return e;let i=r[n];return i?{...e,...i,templatePlaceholderKey:n}:e}function N(e){return e?String(e.value??e.value_formatted??``).trim():``}function P(e,t){let n=N(t),r=String(e.compare_value??``).trim(),i=Number(String(n).replace(`,`,`.`)),a=Number(String(r).replace(`,`,`.`));switch(e.operator){case`truthy`:return[`1`,`true`,`on`,`ein`,`ja`,`yes`].includes(n.toLowerCase());case`falsy`:return[`0`,`false`,`off`,`aus`,`nein`,`no`].includes(n.toLowerCase());case`neq`:return n!==r;case`gt`:return!Number.isNaN(i)&&!Number.isNaN(a)&&i>a;case`gte`:return!Number.isNaN(i)&&!Number.isNaN(a)&&i>=a;case`lt`:return!Number.isNaN(i)&&!Number.isNaN(a)&&iMath.max(0,Math.min(255,Number(e||0)));return`#`+[r(e),r(t),r(n)].map(e=>e.toString(16).padStart(2,`0`)).join(``)}function R(e,t,n=30){let r=b();return{...JSON.parse(JSON.stringify(e)),id:r,x:F(Number(e.x||0)+n,t),y:F(Number(e.y||0)+n,t),z_index:Number(e.z_index||10)+1}}function ae(){(0,_.useEffect)(()=>{function e(){let e=document.getElementById(`root`);if(!e)return;let t=e.getBoundingClientRect().top,n=Math.max(320,window.innerHeight-t);document.documentElement.style.setProperty(`--visu-root-height`,`${n}px`)}return e(),window.addEventListener(`resize`,e),setTimeout(e,50),setTimeout(e,300),()=>window.removeEventListener(`resize`,e)},[])}function oe(e){let t=new Map;return e.forEach(e=>{let n=String(e.project_id);t.has(n)||t.set(n,{project_id:e.project_id,year:e.year,project_number:e.project_number,project_name:e.project_name,customer_name:e.customer_name,pages:[]}),t.get(n).pages.push(e)}),Array.from(t.values()).sort((e,t)=>{let n=Number(e.year||0),r=Number(t.year||0);return n===r?String(e.project_number||``).localeCompare(String(t.project_number||``),`de`,{numeric:!0,sensitivity:`base`}):r-n})}function se(e,t=1,n=`…`){if(!e)return n;let r=String(e.value_formatted??e.value??``).trim(),i=String(e.value??e.value_formatted??``).replace(`,`,`.`).match(/-?\d+(?:\.\d+)?/);if(!i)return r||n;let a=Number(i[0]);if(!Number.isFinite(a))return r||n;let o=Number(t??1),s=Number.isFinite(o)?Math.max(0,Math.min(8,Math.round(o))):1,c=a.toLocaleString(`de-DE`,{minimumFractionDigits:s,maximumFractionDigits:s}),l=String(e.value_formatted??``).trim().replace(/^-?\s*\d+(?:[.,]\d+)?\s*/,``).trim();return l?`${c} ${l}`:c}function ce(e){let t=e.fillColor||`#082f49`,n=e.gradientColor||`#2563eb`;return e.fillMode===`solid`?t:e.fillMode===`radial`?`radial-gradient(circle, ${t}, ${n})`:`linear-gradient(${Number(e.gradientAngle??110)}deg, ${t}, ${n})`}var le=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),z=o(((e,t)=>{t.exports=le()}))();function B(e,t,n){return Math.max(t,Math.min(n,e))}function ue(e,t){return j(M(e.point||{},e),t)}function de(e,t){let n=String(e?.value??e?.value_formatted??``).replace(`,`,`.`).match(/-?\d+(?:\.\d+)?/);return n?Number(n[0]):t}function fe(e,t){let n=Number(e.min??0),r=Number(e.max??100),i=r===n?n+1:r,a=Math.min(n,i),o=Math.max(n,i),s=ue(e,t),c=B(de(s,a+(o-a)*.55),a,o),l=(c-a)/(o-a),u=Number(e.decimals??1),d=Number.isFinite(u)?Math.max(0,Math.min(8,Math.round(u))):1;return{low:a,high:o,value:c,ratio:l,point:s,display:s?se(s,d):c.toLocaleString(`de-DE`,{minimumFractionDigits:d,maximumFractionDigits:d})}}function pe(e,t,n){let r=Math.max(1e-4,Number(n||(t-e)/5)),i=[e];for(let n=e+r;n({start:B((Number(e.from??t)-t)/(n-t),0,1),end:B((Number(e.to??n)-t)/(n-t),0,1),color:e.color||`#22c55e`})).filter(e=>e.end>e.start)}function ge(e){return Number(e).toLocaleString(`de-DE`,{maximumFractionDigits:2})}function _e({style:e,x:t,y:n}){let r=e.needleColor||`#f8fafc`;return e.pointerStyle===`line`?(0,z.jsx)(`line`,{className:`instrument-pointer-line`,x1:t,x2:t,y1:n-18,y2:n+18,style:{stroke:r}}):e.pointerStyle===`diamond`?(0,z.jsx)(`path`,{className:`instrument-pointer`,d:`M ${t} ${n-15} l 8 8 l -8 8 l -8 -8 z`,style:{fill:r}}):(0,z.jsx)(`path`,{className:`instrument-pointer`,d:`M ${t} ${n-15} l -7 -10 h 14 z`,style:{fill:r}})}function ve({style:e,x:t,y:n}){let r=e.needleColor||`#f8fafc`;return e.pointerStyle===`line`?(0,z.jsx)(`line`,{className:`instrument-pointer-line`,x1:t-18,x2:t+18,y1:n,y2:n,style:{stroke:r}}):e.pointerStyle===`diamond`?(0,z.jsx)(`path`,{className:`instrument-pointer`,d:`M ${t+9} ${n} l 8 -8 l 8 8 l -8 8 z`,style:{fill:r}}):(0,z.jsx)(`path`,{className:`instrument-pointer`,d:`M ${t+9} ${n} l 13 -7 v 14 z`,style:{fill:r}})}function ye({element:e,style:t,config:n}){let r=Math.max(80,Number(e.w||360)),i=Math.max(70,Number(e.h||110)),a=r-22,o=Math.min(44,i*.4),s=a-22,c=pe(n.low,n.high,t.majorStep),l=Math.max(0,Math.round(Number(t.minorDivisions??4))),u=Math.max(8,Number(t.labelFontSize??12)),d=o+25+Number(t.labelOffset??0),f=he(t,n.low,n.high);return(0,z.jsxs)(`svg`,{className:`instrument-svg`,viewBox:`0 0 ${r} ${i}`,children:[(0,z.jsx)(`line`,{className:`instrument-rail`,x1:22,x2:a,y1:o,y2:o,style:{stroke:t.barColor||`#334155`}}),f.map((e,t)=>(0,z.jsx)(`line`,{className:`instrument-range`,x1:22+e.start*s,x2:22+e.end*s,y1:o,y2:o,style:{stroke:e.color}},t)),t.fillEnabled&&(0,z.jsx)(`line`,{className:`instrument-fill`,x1:22,x2:22+n.ratio*s,y1:o,y2:o,style:{stroke:t.fillColor||`#38bdf8`}}),c.flatMap((e,r)=>{let i=(e-n.low)/(n.high-n.low),a=22+i*s,f=[(0,z.jsx)(`line`,{className:`instrument-major`,x1:a,x2:a,y1:o+8,y2:o+18},`major-${r}`)];if(r0){let e=(c[r+1]-n.low)/(n.high-n.low);for(let t=1;t(0,z.jsx)(`line`,{className:`instrument-range`,x1:o,x2:o,y1:a-e.start*s,y2:a-e.end*s,style:{stroke:e.color}},t)),t.fillEnabled&&(0,z.jsx)(`line`,{className:`instrument-fill`,x1:o,x2:o,y1:a,y2:a-n.ratio*s,style:{stroke:t.fillColor||`#38bdf8`}}),c.flatMap((e,r)=>{let i=(e-n.low)/(n.high-n.low),f=a-i*s,p=[(0,z.jsx)(`line`,{className:`instrument-major`,x1:o-18,x2:o-8,y1:f,y2:f},`major-${r}`)];if(r0){let e=(c[r+1]-n.low)/(n.high-n.low);for(let t=1;t180)} 1 ${o.x} ${o.y}`}function Se({element:e,style:t,config:n}){let r=Math.max(140,Number(e.w||260)),i=Math.max(120,Number(e.h||210)),a=r/2,o=i*.6,s=Math.max(34,Math.min(r*.38,i*.43)),c=-135,l=pe(n.low,n.high,t.majorStep),u=Math.max(0,Math.round(Number(t.minorDivisions??4))),d=Math.max(8,Number(t.labelFontSize??12)),f=s+22+Number(t.labelOffset??0),p=he(t,n.low,n.high),m=c+n.ratio*270,h=xe(a,o,s-12,m),g=xe(a,o,10,m-90),_=xe(a,o,10,m+90);return(0,z.jsxs)(`svg`,{className:`instrument-svg`,viewBox:`0 0 ${r} ${i}`,children:[(0,z.jsx)(`path`,{className:`instrument-dial-rail`,d:V(a,o,s,c,135),style:{stroke:t.barColor||`#334155`}}),p.map((e,t)=>(0,z.jsx)(`path`,{className:`instrument-dial-range`,d:V(a,o,s,c+e.start*270,c+e.end*270),style:{stroke:e.color}},t)),t.fillEnabled&&n.ratio>0&&(0,z.jsx)(`path`,{className:`instrument-dial-fill`,d:V(a,o,s,c,c+n.ratio*270),style:{stroke:t.fillColor||`#38bdf8`}}),l.flatMap((e,r)=>{let i=(e-n.low)/(n.high-n.low),p=c+i*270,m=xe(a,o,s-8,p),h=xe(a,o,s-20,p),g=xe(a,o,f,p),_=[(0,z.jsx)(`line`,{className:`instrument-major`,x1:h.x,y1:h.y,x2:m.x,y2:m.y},`major-${r}`)];if(r0){let e=(l[r+1]-n.low)/(n.high-n.low);for(let t=1;t{t!=null&&t!==``&&n.searchParams.set(e,t)});let r=await fetch(n.toString(),{credentials:`same-origin`,headers:{Accept:`application/json`}}),i=await r.text(),a;try{a=JSON.parse(i)}catch{throw Error(i||`API liefert kein JSON`)}if(!r.ok||!a.ok)throw Error(a.error||`API Fehler`);return a}async function U(e,t={}){let n=new FormData;n.append(`action`,e),Object.entries(t).forEach(([e,t])=>{n.append(e,t??``)});let r=await fetch(we,{method:`POST`,credentials:`same-origin`,headers:{Accept:`application/json`},body:n}),i=await r.text(),a;try{a=JSON.parse(i)}catch{throw Error(i||`API liefert kein JSON`)}if(!r.ok||!a.ok)throw Error(a.error||`API Fehler`);return a}async function Te(e){let t=await fetch(we,{method:`POST`,credentials:`same-origin`,headers:{Accept:`application/json`},body:e}),n=await t.text(),r;try{r=JSON.parse(n)}catch{throw Error(n||`API liefert kein JSON`)}if(!t.ok||!r.ok)throw Error(r.error||`API Fehler`);return r}var Ee=4,De=124,Oe=12,ke=[{key:`simple_value`,label:`Einfacher Wert`},{key:`value_table`,label:`Wertetabelle`},{key:`scale_bar`,label:`Werteskala`},{key:`dial_gauge`,label:`Zeigerinstrument`}],Ae=[{value:`all`,label:`Alle Hauptwerte`},{value:`ends`,label:`Nur Anfang und Ende`},{value:`none`,label:`Keine Zahlen`}],je=[{value:`triangle`,label:`Dreieck`},{value:`line`,label:`Markierungslinie`},{value:`diamond`,label:`Raute`}],Me=[{value:`needle`,label:`Standardzeiger`},{value:`slim`,label:`Dünner Zeiger`},{value:`wedge`,label:`Breiter Zeiger`}];function Ne(e){return e?{type:e.type||``,external_id:e.external_id||``,variable_id:e.variable_id||``,point_key:e.point_key||``,point_label:e.label||e.point_label||``}:null}function Pe(e){return e===`scale_bar`?{...JSON.parse(JSON.stringify(w.scale_bar.style_json)),point:null}:e===`dial_gauge`?{...JSON.parse(JSON.stringify(w.dial_gauge.style_json)),point:null}:e===`value_table`?{rows:[]}:{point:null,decimals:1}}function Fe(e){let t=e.widget_type||`simple_value`,n=Pe(t),r=E(e.config_json,{})||{};return{id:Number(e.id||0),widget_type:t,title:e.title||``,project_id:Number(e.project_id||0),grid_x:Math.max(0,Number(e.grid_x||0)),grid_y:Math.max(0,Number(e.grid_y||0)),grid_w:Math.max(1,Math.min(4,Number(e.grid_w||1))),grid_h:Math.max(1,Math.min(4,Number(e.grid_h||1))),sort_order:Number(e.sort_order||100),config:{...n,...r}}}function Ie(e){let t={},n=e=>e&&(e.value!==null&&e.value!==void 0&&String(e.value).trim()!==``||e.value_formatted!==null&&e.value_formatted!==void 0&&String(e.value_formatted).trim()!==``);return(e||[]).forEach(e=>{if(e?.source_key&&(t[e.source_key]=e,e.variable_id)){let r=String(e.variable_id);(!t[r]||!n(t[r])||n(e))&&(t[r]=e)}}),t}function Le(e,t,n){return!t||!n?null:j(n,e[t]||{})}function Re(e){return ke.find(t=>t.key===e)?.label||e}function ze(e,t){return!(e.grid_x+e.grid_w<=t.grid_x||t.grid_x+t.grid_w<=e.grid_x||e.grid_y+e.grid_h<=t.grid_y||t.grid_y+t.grid_h<=e.grid_y)}function Be(e,t,n=0){return e.grid_x<0||e.grid_y<0||e.grid_w<1||e.grid_h<1||e.grid_x+e.grid_w>Ee?!1:!t.some(t=>Number(t.id)!==Number(n)&&ze(e,t))}function Ve(e,t,n=0,r=0){for(let i=Math.max(0,r);i<240;i+=1)for(let r=0;r<=Ee-e.grid_w;r+=1){let a={...e,grid_x:r,grid_y:i};if(Be(a,t,n))return a}return{...e,grid_x:0,grid_y:Math.max(0,r)}}function He(e,t,n=0){let r={...e,grid_w:Math.max(1,Math.min(4,Number(e.grid_w||1))),grid_h:Math.max(1,Math.min(4,Number(e.grid_h||1))),grid_x:Math.max(0,Math.min(Ee-Math.max(1,Math.min(4,Number(e.grid_w||1))),Number(e.grid_x||0))),grid_y:Math.max(0,Number(e.grid_y||0))};return Be(r,t,n)?r:Ve(r,t,n,r.grid_y)}function Ue({value:e,onChange:t}){let[n,r]=(0,_.useState)([]),[i,a]=(0,_.useState)(``),[o,s]=(0,_.useState)(``);(0,_.useEffect)(()=>{H(`projects`).then(e=>r(e.projects||[])).catch(e=>s(e.message))},[]);let c=n.filter(e=>[e.year,e.project_number,e.name,e.customer_name].filter(Boolean).join(` `).toLowerCase().includes(i.toLowerCase()));return(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Projekt`}),(0,z.jsx)(`input`,{type:`text`,value:i,onChange:e=>a(e.target.value),placeholder:`Projekt suchen…`,className:`form-input`}),(0,z.jsxs)(`select`,{value:e,onChange:e=>t(Number(e.target.value||0)),className:`form-input`,children:[(0,z.jsx)(`option`,{value:``,children:`Projekt auswählen…`}),c.map(e=>(0,z.jsxs)(`option`,{value:e.id,children:[e.year,` | `,e.project_number,` | `,e.name,e.customer_name?` | ${e.customer_name}`:``]},e.id))]}),o&&(0,z.jsx)(`div`,{className:`tiny-error`,children:o})]})}function We({projectId:e,value:t,onChange:n}){let[r,i]=(0,_.useState)([]),[a,o]=(0,_.useState)(``),[s,c]=(0,_.useState)(!1),[l,u]=(0,_.useState)(``);(0,_.useEffect)(()=>{if(!e){i([]);return}c(!0),u(``),H(`project_values`,{project_id:e}).then(e=>i(e.values||[])).catch(e=>u(e.message)).finally(()=>c(!1))},[e]);let d=r.filter(e=>[e.type,e.label,e.point_key,e.variable_id,e.value_formatted].filter(Boolean).join(` `).toLowerCase().includes(a.toLowerCase()));function f(e){let t=r.find(t=>t.source_key===e);n(t?Ne(t):null)}return(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Wert`}),(0,z.jsx)(`input`,{value:a,onChange:e=>o(e.target.value),placeholder:`Wert suchen…`,className:`form-input`,disabled:!e}),(0,z.jsxs)(`select`,{value:t||``,onChange:e=>f(e.target.value),className:`form-input`,disabled:!e,children:[(0,z.jsx)(`option`,{value:``,children:e?`Wert auswählen…`:`Erst Projekt wählen…`}),d.map(e=>(0,z.jsxs)(`option`,{value:e.source_key,children:[e.label,` `,e.value_formatted?`(${e.value_formatted})`:``]},e.source_key))]}),s&&(0,z.jsx)(`div`,{className:`small-muted`,children:`Werte werden geladen…`}),l&&(0,z.jsx)(`div`,{className:`tiny-error`,children:l})]})}function Ge({label:e,value:t,onChange:n}){let r=/^#[0-9a-fA-F]{6}$/.test(t||``)?t:`#000000`;return(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:e}),(0,z.jsxs)(`div`,{className:`dashboard-color-row`,children:[(0,z.jsx)(`input`,{type:`color`,value:r,onChange:e=>n(e.target.value)}),(0,z.jsx)(`input`,{className:`form-input`,value:t||``,onChange:e=>n(e.target.value)})]})]})}function Ke({ranges:e,onChange:t}){function n(n,r){let i=[...e];i[n]={...i[n],...r},t(i)}return(0,z.jsxs)(`div`,{className:`dashboard-ranges`,children:[(0,z.jsx)(`div`,{className:`small-title`,children:`Farbbereiche`}),(e||[]).map((r,i)=>(0,z.jsxs)(`div`,{className:`dashboard-range-row`,children:[(0,z.jsx)(`input`,{type:`number`,value:Number(r.from??0),onChange:e=>n(i,{from:Number(e.target.value||0)}),placeholder:`Von`}),(0,z.jsx)(`input`,{type:`number`,value:Number(r.to??0),onChange:e=>n(i,{to:Number(e.target.value||0)}),placeholder:`Bis`}),(0,z.jsx)(`input`,{type:`color`,value:r.color||`#22c55e`,onChange:e=>n(i,{color:e.target.value})}),(0,z.jsx)(`button`,{type:`button`,className:`btn small`,onClick:()=>t(e.filter((e,t)=>t!==i)),children:`Entfernen`})]},i)),(0,z.jsx)(`button`,{type:`button`,className:`btn small`,onClick:()=>t([...e||[],{from:0,to:10,color:`#22c55e`}]),children:`+ Bereich`})]})}function qe({open:e,draft:t,onClose:n,onSave:r}){let[i,a]=(0,_.useState)(null);if((0,_.useEffect)(()=>{a(t?JSON.parse(JSON.stringify(t)):null)},[t]),!e||!i)return null;function o(e,t){a(n=>({...n,[e]:t}))}function s(e){a(t=>({...t,config:{...t.config,...e}}))}function c(e,t){let n=[...i.config.rows||[]];n[e]={...n[e],...t},s({rows:n})}return(0,z.jsx)(`div`,{className:`modal-backdrop`,onPointerDown:n,children:(0,z.jsxs)(`div`,{className:`asset-modal dashboard-widget-modal`,onPointerDown:e=>e.stopPropagation(),children:[(0,z.jsxs)(`div`,{className:`modal-head`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`eyebrow`,children:`Dashboard`}),(0,z.jsx)(`h2`,{children:i.id?`Widget bearbeiten`:`Widget hinzufügen`})]}),(0,z.jsx)(`button`,{type:`button`,className:`icon-close`,onClick:n,children:`✕`})]}),(0,z.jsxs)(`div`,{className:`dashboard-widget-form`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Typ`}),(0,z.jsx)(`input`,{className:`form-input`,value:Re(i.widget_type),readOnly:!0})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Titel`}),(0,z.jsx)(`input`,{className:`form-input`,value:i.title,onChange:e=>o(`title`,e.target.value),placeholder:`Optionaler Titel`})]}),(0,z.jsx)(Ue,{value:i.project_id,onChange:e=>o(`project_id`,e)}),i.widget_type===`simple_value`&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(We,{projectId:i.project_id,value:i.config.point?k(i.config.point):``,onChange:e=>s({point:e})}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Nachkommastellen`}),(0,z.jsx)(`input`,{type:`number`,min:`0`,max:`8`,value:Number(i.config.decimals??1),onChange:e=>s({decimals:Math.max(0,Math.min(8,Number(e.target.value||1)))})})]})]}),i.widget_type===`value_table`&&(0,z.jsxs)(`div`,{className:`dashboard-table-editor`,children:[(0,z.jsx)(`div`,{className:`small-title`,children:`Tabellenwerte`}),(i.config.rows||[]).map((e,t)=>(0,z.jsxs)(`div`,{className:`dashboard-table-row`,children:[(0,z.jsx)(`input`,{className:`form-input`,value:e.label||``,onChange:e=>c(t,{label:e.target.value}),placeholder:`Label`}),(0,z.jsx)(We,{projectId:i.project_id,value:e.point?k(e.point):``,onChange:e=>c(t,{point:e})}),(0,z.jsx)(`input`,{className:`form-input`,type:`number`,min:`0`,max:`8`,value:Number(e.decimals??1),onChange:e=>c(t,{decimals:Math.max(0,Math.min(8,Number(e.target.value||1)))}),placeholder:`Nachkommastellen`}),(0,z.jsx)(`button`,{type:`button`,className:`btn small`,onClick:()=>s({rows:i.config.rows.filter((e,n)=>n!==t)}),children:`Entfernen`})]},t)),(0,z.jsx)(`button`,{type:`button`,className:`btn small`,onClick:()=>s({rows:[...i.config.rows||[],{label:``,point:null,decimals:1}]}),children:`+ Wert hinzufügen`})]}),[`scale_bar`,`dial_gauge`].includes(i.widget_type)&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(We,{projectId:i.project_id,value:i.config.point?k(i.config.point):``,onChange:e=>s({point:e})}),i.widget_type===`scale_bar`&&(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Ausrichtung`}),(0,z.jsxs)(`select`,{value:i.config.orientation||`horizontal`,onChange:e=>s({orientation:e.target.value}),children:[(0,z.jsx)(`option`,{value:`horizontal`,children:`Horizontal`}),(0,z.jsx)(`option`,{value:`vertical`,children:`Vertikal`})]})]}),(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Minimum`}),(0,z.jsx)(`input`,{type:`number`,value:Number(i.config.min??0),onChange:e=>s({min:Number(e.target.value||0)})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Maximum`}),(0,z.jsx)(`input`,{type:`number`,value:Number(i.config.max??100),onChange:e=>s({max:Number(e.target.value||100)})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Hauptstrich`}),(0,z.jsx)(`input`,{type:`number`,min:`1`,value:Number(i.config.majorStep??20),onChange:e=>s({majorStep:Number(e.target.value||20)})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Unterteilungen`}),(0,z.jsx)(`input`,{type:`number`,min:`0`,max:`10`,value:Number(i.config.minorDivisions??4),onChange:e=>s({minorDivisions:Number(e.target.value||4)})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Nachkommastellen`}),(0,z.jsx)(`input`,{type:`number`,min:`0`,max:`8`,value:Number(i.config.decimals??1),onChange:e=>s({decimals:Math.max(0,Math.min(8,Number(e.target.value||1)))})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Zahlenmodus`}),(0,z.jsx)(`select`,{value:i.config.labelMode||`all`,onChange:e=>s({labelMode:e.target.value}),children:Ae.map(e=>(0,z.jsx)(`option`,{value:e.value,children:e.label},e.value))})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Zahlengröße`}),(0,z.jsx)(`input`,{type:`number`,min:`8`,max:`32`,value:Number(i.config.labelFontSize??12),onChange:e=>s({labelFontSize:Number(e.target.value||12)})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Zahlenposition`}),(0,z.jsx)(`input`,{type:`number`,min:`-90`,max:`48`,value:Number(i.config.labelOffset??0),onChange:e=>s({labelOffset:Number(e.target.value||0)})})]})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Zeiger`}),(0,z.jsx)(`select`,{value:i.config.pointerStyle||(i.widget_type===`dial_gauge`?`needle`:`triangle`),onChange:e=>s({pointerStyle:e.target.value}),children:(i.widget_type===`dial_gauge`?Me:je).map(e=>(0,z.jsx)(`option`,{value:e.value,children:e.label},e.value))})]}),(0,z.jsx)(Ge,{label:`Skalenfarbe`,value:i.config.barColor||`#334155`,onChange:e=>s({barColor:e})}),(0,z.jsx)(Ge,{label:`Zeigerfarbe`,value:i.config.needleColor||`#f8fafc`,onChange:e=>s({needleColor:e})}),(0,z.jsxs)(`label`,{className:`check-line`,children:[(0,z.jsx)(`input`,{type:`checkbox`,checked:!!i.config.fillEnabled,onChange:e=>s({fillEnabled:e.target.checked})}),`Füllanzeige aktivieren`]}),i.config.fillEnabled&&(0,z.jsx)(Ge,{label:`Füllfarbe`,value:i.config.fillColor||`#38bdf8`,onChange:e=>s({fillColor:e})}),(0,z.jsx)(Ke,{ranges:i.config.ranges||[],onChange:e=>s({ranges:e})})]}),(0,z.jsxs)(`div`,{className:`dashboard-widget-form-actions`,children:[(0,z.jsx)(`button`,{type:`button`,className:`btn primary`,onClick:()=>r(i),children:`Speichern`}),(0,z.jsx)(`button`,{type:`button`,className:`btn`,onClick:n,children:`Abbrechen`})]})]})]})})}function Je({onCreated:e,compact:t=!1}){let[n,r]=(0,_.useState)(0),[i,a]=(0,_.useState)(``),[o,s]=(0,_.useState)(``),[c,l]=(0,_.useState)(1920),[u,d]=(0,_.useState)(1080),[f,p]=(0,_.useState)(!1),[m,h]=(0,_.useState)(``);async function g(t){if(t.preventDefault(),h(``),!n)return h(`Bitte Projekt auswählen.`);if(!i.trim())return h(`Bitte Namen eintragen.`);p(!0);try{let t=await U(`page_create`,{project_id:n,name:i,description:o,width:c,height:u});e?.(t.page_id)}catch(e){h(e.message)}finally{p(!1)}}return(0,z.jsxs)(`form`,{className:`create-form ${t?`compact`:``}`,onSubmit:g,children:[(0,z.jsxs)(`div`,{className:`form-head`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`eyebrow`,children:`Neue Seite`}),(0,z.jsx)(`h2`,{children:`Visualisierung anlegen`})]}),(0,z.jsx)(`span`,{children:`SE-Cloud Vis`})]}),(0,z.jsxs)(`div`,{className:`form-grid ${t?`compact`:``}`,children:[(0,z.jsx)(Ue,{value:n,onChange:r}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Name`}),(0,z.jsx)(`input`,{className:`form-input`,value:i,onChange:e=>a(e.target.value),placeholder:`z.B. Heizzentrale`})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Breite`}),(0,z.jsx)(`input`,{className:`form-input`,type:`number`,value:c,onChange:e=>l(Number(e.target.value||1920))})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Höhe`}),(0,z.jsx)(`input`,{className:`form-input`,type:`number`,value:u,onChange:e=>d(Number(e.target.value||1080))})]}),(0,z.jsxs)(`div`,{className:`field form-wide`,children:[(0,z.jsx)(`label`,{children:`Beschreibung`}),(0,z.jsx)(`input`,{className:`form-input`,value:o,onChange:e=>s(e.target.value),placeholder:`Optional`})]}),(0,z.jsx)(`div`,{className:`form-action`,children:(0,z.jsx)(`button`,{className:`btn primary`,disabled:f,children:f?`Speichert…`:`+ Anlegen`})})]}),m&&(0,z.jsx)(`div`,{className:`error-box small`,children:m})]})}function Ye({open:e,onClose:t,onCreated:n}){return e?(0,z.jsx)(`div`,{className:`modal-backdrop`,onPointerDown:t,children:(0,z.jsxs)(`div`,{className:`asset-modal dashboard-widget-modal`,onPointerDown:e=>e.stopPropagation(),children:[(0,z.jsxs)(`div`,{className:`modal-head`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`eyebrow`,children:`Neue Seite`}),(0,z.jsx)(`h2`,{children:`Visualisierung anlegen`})]}),(0,z.jsx)(`button`,{type:`button`,className:`icon-close`,onClick:t,children:`✕`})]}),(0,z.jsx)(Je,{onCreated:e=>{t(),n?.(e)},compact:!0})]})}):null}function Xe({pages:e,canDesign:t,canEdit:n,onDelete:r}){let[i,a]=(0,_.useState)(``),[o,s]=(0,_.useState)({}),c=(0,_.useMemo)(()=>{let t=i.trim().toLowerCase();return t?e.filter(e=>[e.name,e.description,e.year,e.project_number,e.project_name,e.customer_name].filter(Boolean).join(` `).toLowerCase().includes(t)):e},[e,i]),l=(0,_.useMemo)(()=>oe(c),[c]);(0,_.useEffect)(()=>{l.length!==0&&(Object.keys(o).length>0||s({[l[0].project_id]:!0}))},[l,o]);function u(e){s(t=>({...t,[e]:!t[e]}))}return(0,z.jsxs)(`aside`,{className:`viewer-tree overview-tree`,children:[(0,z.jsx)(`div`,{className:`viewer-tree-title`,children:`Visualisierungen`}),(0,z.jsx)(`input`,{className:`form-input viewer-tree-search`,value:i,onChange:e=>a(e.target.value),placeholder:`Projekt oder Bild suchen…`}),l.length===0&&(0,z.jsx)(`div`,{className:`empty-mini`,children:`Keine sichtbaren Visualisierungen gefunden.`}),(0,z.jsx)(`div`,{className:`viewer-tree-project-list`,children:l.map(e=>{let i=!!o[e.project_id];return(0,z.jsxs)(`div`,{className:`viewer-tree-project-block`,children:[(0,z.jsxs)(`button`,{type:`button`,className:`viewer-tree-project-toggle`,onClick:()=>u(e.project_id),children:[(0,z.jsx)(`span`,{className:`viewer-tree-arrow`,children:i?`▾`:`▸`}),(0,z.jsxs)(`span`,{className:`viewer-tree-project-text`,children:[(0,z.jsxs)(`strong`,{children:[e.year,` · `,e.project_number]}),(0,z.jsx)(`small`,{children:e.project_name}),e.customer_name&&(0,z.jsx)(`small`,{className:`viewer-tree-customer`,children:e.customer_name})]}),(0,z.jsx)(`em`,{children:e.pages.length})]}),i&&(0,z.jsx)(`div`,{className:`viewer-tree-list`,children:e.pages.map(e=>(0,z.jsxs)(`div`,{className:`viewer-tree-row`,children:[(0,z.jsxs)(`a`,{href:`/visu/?mode=viewer&page_id=${e.id}`,children:[(0,z.jsx)(`span`,{children:e.name}),(0,z.jsxs)(`small`,{children:[e.width,`×`,e.height]})]}),(0,z.jsxs)(`div`,{className:`overview-tree-actions`,children:[t&&(0,z.jsx)(`a`,{className:`viewer-tree-edit`,href:`/visu/?mode=designer&page_id=${e.id}`,title:`Bearbeiten`,children:`✏️`}),n&&(0,z.jsx)(`button`,{type:`button`,className:`viewer-tree-edit overview-tree-delete`,title:`Deaktivieren`,onClick:()=>r(e.id),children:`🗑️`})]})]},e.id))})]},e.project_id)})})]})}function Ze({widget:e,projectValues:t}){if(e.widget_type===`simple_value`){let n=Le(t,e.project_id,e.config.point);return(0,z.jsxs)(`div`,{className:`dashboard-value-widget`,children:[(0,z.jsx)(`div`,{className:`dashboard-value-label`,children:e.config.point?.point_label||e.title||`Wert`}),(0,z.jsx)(`div`,{className:`dashboard-value-number`,children:se(n,e.config.decimals??1)})]})}if(e.widget_type===`value_table`){let n=Array.isArray(e.config.rows)?e.config.rows:[];return(0,z.jsxs)(`div`,{className:`dashboard-table-widget`,children:[n.length===0&&(0,z.jsx)(`div`,{className:`small-muted`,children:`Noch keine Werte verknüpft.`}),n.map((n,r)=>{let i=Le(t,e.project_id,n.point);return(0,z.jsxs)(`div`,{className:`dashboard-table-value-row`,children:[(0,z.jsx)(`span`,{children:n.label||n.point?.point_label||`Wert ${r+1}`}),(0,z.jsx)(`strong`,{children:se(i,n.decimals??1)})]},r)})]})}let n={...e.config,kind:e.widget_type===`dial_gauge`?`dial_gauge`:`scale_bar`};return(0,z.jsx)(`div`,{className:`dashboard-instrument-widget`,children:(0,z.jsx)(Ce,{element:{w:Math.max(180,e.grid_w*220-26),h:Math.max(120,e.grid_h*De-54),style_json:n},liveValues:t[e.project_id]||{}})})}function Qe({mode:e,pageCount:t=0,widgetCount:n=0}){return(0,z.jsxs)(`div`,{className:`overview-mode-tabs`,children:[(0,z.jsx)(`a`,{href:`/visu/?mode=dashboard`,className:`btn small ${e===`dashboard`?`primary`:``}`,children:`Dashboard`}),(0,z.jsx)(`a`,{href:`/visu/?mode=manage`,className:`btn small ${e===`manage`?`primary`:``}`,children:`Verwaltung`}),(0,z.jsx)(`a`,{href:`/visu/?mode=templates`,className:`btn small`,children:`Templates`}),(0,z.jsx)(`a`,{href:`/visu/?mode=monitoring`,className:`btn small`,children:`Datenpunkte`}),(0,z.jsx)(`a`,{href:`/visu/?mode=virtual_points`,className:`btn small`,children:`Virtuelle Datenpunkte`}),(0,z.jsx)(`a`,{href:`/visu/?mode=csv_exports`,className:`btn small`,children:`CSV Exporte`}),(0,z.jsx)(`span`,{children:e===`dashboard`?`${n} Widget(s)`:`${t} Seite(n)`})]})}function $e({pages:e,canDesign:t,canEdit:n,onDelete:r}){return(0,z.jsx)(`div`,{className:`project-visu-grid manage-page-grid`,children:(0,_.useMemo)(()=>oe(e),[e]).map(e=>(0,z.jsxs)(`article`,{className:`project-visu-card`,children:[(0,z.jsxs)(`div`,{className:`project-visu-head`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`div`,{className:`project-visu-title`,children:[e.year,` · `,e.project_number,` · `,e.project_name]}),e.customer_name&&(0,z.jsx)(`div`,{className:`project-visu-meta`,children:e.customer_name})]}),(0,z.jsxs)(`span`,{children:[e.pages.length,` Bild(er)`]})]}),(0,z.jsx)(`div`,{className:`project-page-grid`,children:e.pages.map(e=>(0,z.jsxs)(`div`,{className:`visu-card compact`,children:[(0,z.jsx)(`div`,{className:`visu-title`,children:e.name}),(0,z.jsxs)(`div`,{className:`visu-meta`,children:[e.width,`×`,e.height]}),e.description&&(0,z.jsx)(`div`,{className:`visu-description`,children:e.description}),(0,z.jsxs)(`div`,{className:`visu-actions`,children:[(0,z.jsx)(`a`,{href:`/visu/?mode=viewer&page_id=${e.id}`,className:`mini-btn`,children:`Anzeigen`}),t&&(0,z.jsx)(`a`,{href:`/visu/?mode=designer&page_id=${e.id}`,className:`mini-btn`,children:`✏️ Bearbeiten`}),n&&(0,z.jsx)(`button`,{type:`button`,className:`mini-btn danger`,onClick:()=>r(e.id),children:`Löschen`})]})]},e.id))})]},e.project_id))})}function et({mode:e=`dashboard`}){let t=(0,_.useRef)(null),n=e!==`manage`,[r,i]=(0,_.useState)([]),[a,o]=(0,_.useState)([]),[s,c]=(0,_.useState)({}),[l,u]=(0,_.useState)(!1),[d,f]=(0,_.useState)(!1),[p,m]=(0,_.useState)(!0),[h,g]=(0,_.useState)(``),[v,y]=(0,_.useState)(``),[b,x]=(0,_.useState)(null),[S,C]=(0,_.useState)(null),[w,T]=(0,_.useState)(!1);function E(e){window.location.href=`/visu/?mode=designer&page_id=${e}`}async function D(){let e=await H(`pages`);i(e.pages||[]),u(!!e.can_edit),f(!!e.can_design)}async function O(){o(((await H(`dashboard_widgets`)).widgets||[]).map(Fe))}(0,_.useEffect)(()=>{m(!0),g(``),(n?Promise.all([D(),O()]):Promise.all([D()])).catch(e=>g(e.message)).finally(()=>m(!1))},[n]);let ee=(0,_.useMemo)(()=>{let e=new Set;return a.forEach(t=>{t.project_id>0&&e.add(t.project_id)}),Array.from(e)},[a]),te=(0,_.useMemo)(()=>{let e={};return r.forEach(t=>{!t.project_id||e[t.project_id]||(e[t.project_id]=[t.year,t.project_number,t.project_name].filter(Boolean).join(` · `))}),e},[r]);(0,_.useMemo)(()=>oe(r),[r]),(0,_.useEffect)(()=>{if(!n){c({});return}if(ee.length===0){c({});return}let e=!1;async function t(){try{let t=await Promise.all(ee.map(async e=>[e,Ie((await H(`project_values`,{project_id:e})).values||[])]));e||c(Object.fromEntries(t))}catch(t){e||y(t.message)}}y(``),t();let r=window.setInterval(t,5e3);return()=>{e=!0,window.clearInterval(r)}},[n,ee]),(0,_.useEffect)(()=>{if(!S)return;function e(){let e=t.current?.getBoundingClientRect();if(!e)return null;let n=(e.width-Oe*(Ee-1))/Ee;return{rect:e,cellWidth:n,fullWidth:n+Oe,fullHeight:136}}function n(t){let n=e();if(!n)return;if(S.mode===`move`){let e=t.clientX-n.rect.left,r=t.clientY-n.rect.top,i=Math.max(0,Math.min(Ee-S.preview.grid_w,Math.round(e/n.fullWidth))),a=Math.max(0,Math.round(r/n.fullHeight));C(e=>({...e,preview:{...e.preview,grid_x:i,grid_y:a}}));return}let r=t.clientX-S.startX,i=t.clientY-S.startY,a=Math.max(1,Math.min(4,S.startW+Math.round(r/n.fullWidth))),o=Math.max(1,Math.min(4,S.startH+Math.round(i/n.fullHeight))),s=Math.max(0,Math.min(Ee-a,S.preview.grid_x));C(e=>({...e,preview:{...e.preview,grid_w:a,grid_h:o,grid_x:s}}))}async function r(){let e=a.find(e=>Number(e.id)===Number(S.widgetId));if(!e){C(null);return}let t=He({...e,...S.preview},a,e.id);o(a.map(n=>Number(n.id)===Number(e.id)?{...n,...t}:n)),C(null);try{await ne({...e,...t})}catch{await O()}}return window.addEventListener(`pointermove`,n),window.addEventListener(`pointerup`,r,{once:!0}),()=>{window.removeEventListener(`pointermove`,n),window.removeEventListener(`pointerup`,r)}},[S,a]);async function ne(e){let t=await U(`dashboard_widget_save`,{widget_id:e.id||``,widget_type:e.widget_type,title:e.title||``,project_id:e.project_id||``,grid_x:e.grid_x,grid_y:e.grid_y,grid_w:e.grid_w,grid_h:e.grid_h,sort_order:e.sort_order??100,config_json:JSON.stringify(e.config||{})}),n={...e,id:Number(t.widget_id||e.id||0)};return o(e=>e.some(e=>Number(e.id)===Number(n.id))?e.map(e=>Number(e.id)===Number(n.id)?n:e):[...e,n]),n}async function k(e){if(confirm(`Visualisierung wirklich deaktivieren?`))try{await U(`page_delete`,{page_id:e}),await D()}catch(e){alert(e.message)}}async function A(e){if(confirm(`Widget wirklich löschen?`))try{await U(`dashboard_widget_delete`,{widget_id:e}),o(t=>t.filter(t=>Number(t.id)!==Number(e)))}catch(e){alert(e.message)}}function re(e){let t=e===`simple_value`?{grid_w:1,grid_h:1}:{grid_w:2,grid_h:2};return{id:0,widget_type:e,title:``,project_id:0,grid_x:0,grid_y:0,grid_w:t.grid_w,grid_h:t.grid_h,sort_order:a.length*10+100,config:Pe(e)}}async function j(e){try{await ne(He(e,a,e.id)),x(null)}catch(e){alert(e.message)}}function M(e){return!S||Number(S.widgetId)!==Number(e.id)?e:{...e,...S.preview}}return n?(0,z.jsxs)(`div`,{className:`page-shell full overview-full`,children:[(0,z.jsxs)(`section`,{className:`glass-card overview-main-card`,children:[(0,z.jsxs)(`div`,{className:`section-head`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`eyebrow`,children:`SE-Cloud Vis`}),(0,z.jsx)(`h2`,{children:`Dashboard`})]}),(0,z.jsx)(Qe,{mode:`dashboard`,pageCount:r.length,widgetCount:a.length})]}),h&&(0,z.jsx)(`div`,{className:`error-box`,children:h}),!h&&(0,z.jsxs)(`div`,{className:`overview-main-layout`,children:[(0,z.jsx)(Xe,{pages:r,canDesign:d,canEdit:l,onDelete:k}),(0,z.jsxs)(`div`,{className:`overview-dashboard-card`,children:[(0,z.jsxs)(`div`,{className:`dashboard-toolbar`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`small-title`,children:`Dashboard`}),(0,z.jsx)(`div`,{className:`small-muted`,children:`Widgets lassen sich per Ziehen verschieben und unten rechts in der Größe ändern.`})]}),(0,z.jsx)(`div`,{className:`dashboard-toolbar-actions`,children:ke.map(e=>(0,z.jsxs)(`button`,{type:`button`,className:`btn small`,onClick:()=>x(re(e.key)),children:[`+ `,e.label]},e.key))})]}),v&&(0,z.jsx)(`div`,{className:`error-box small`,children:v}),(0,z.jsxs)(`div`,{ref:t,className:`dashboard-grid`,style:{"--dashboard-columns":Ee,"--dashboard-row-height":`${De}px`,"--dashboard-gap":`${Oe}px`},children:[a.length===0&&(0,z.jsx)(`div`,{className:`dashboard-empty`,children:`Noch keine Dashboard-Widgets angelegt.`}),a.map(e=>{let t=M(e);return(0,z.jsxs)(`article`,{className:`dashboard-widget ${S?.widgetId===e.id?`is-moving`:``}`,style:{gridColumn:`${t.grid_x+1} / span ${t.grid_w}`,gridRow:`${t.grid_y+1} / span ${t.grid_h}`},children:[(0,z.jsxs)(`div`,{className:`dashboard-widget-header`,onPointerDown:n=>{n.button===0&&(n.target.closest(`button, a`)||C({mode:`move`,widgetId:e.id,preview:{grid_x:t.grid_x,grid_y:t.grid_y,grid_w:t.grid_w,grid_h:t.grid_h}}))},children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:e.title||Re(e.widget_type)}),(0,z.jsx)(`small`,{children:te[e.project_id]||`Kein Projekt gewählt`})]}),(0,z.jsxs)(`div`,{className:`dashboard-widget-actions`,children:[(0,z.jsx)(`button`,{type:`button`,className:`icon-btn subtle-icon`,title:`Bearbeiten`,onPointerDown:e=>e.stopPropagation(),onClick:()=>x(e),children:`✎`}),(0,z.jsx)(`button`,{type:`button`,className:`icon-btn subtle-icon`,title:`Löschen`,onPointerDown:e=>e.stopPropagation(),onClick:()=>A(e.id),children:`✕`})]})]}),(0,z.jsx)(`div`,{className:`dashboard-widget-body`,children:(0,z.jsx)(Ze,{widget:e,projectValues:s})}),(0,z.jsx)(`button`,{type:`button`,className:`dashboard-resize-handle`,title:`Größe ändern`,onPointerDown:n=>{n.stopPropagation(),C({mode:`resize`,widgetId:e.id,startX:n.clientX,startY:n.clientY,startW:t.grid_w,startH:t.grid_h,preview:{grid_x:t.grid_x,grid_y:t.grid_y,grid_w:t.grid_w,grid_h:t.grid_h}})},children:`◢`})]},e.id||`${e.widget_type}-${e.grid_x}-${e.grid_y}`)})]})]})]})]}),(0,z.jsx)(qe,{open:!!b,draft:b,onClose:()=>x(null),onSave:j})]}):(0,z.jsxs)(`div`,{className:`page-shell full overview-full`,children:[(0,z.jsxs)(`section`,{className:`glass-card overview-main-card manage-main-card`,children:[(0,z.jsxs)(`div`,{className:`section-head`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`eyebrow`,children:`SE-Cloud Vis`}),(0,z.jsx)(`h2`,{children:`Verwaltung`})]}),(0,z.jsxs)(`div`,{className:`manage-head-actions`,children:[l&&(0,z.jsx)(`button`,{type:`button`,className:`btn small primary`,onClick:()=>T(!0),children:`+ Neue Seite`}),(0,z.jsx)(Qe,{mode:`manage`,pageCount:r.length,widgetCount:a.length})]})]}),h&&(0,z.jsx)(`div`,{className:`error-box`,children:h}),!h&&(0,z.jsx)(`div`,{className:`overview-manage-layout single-column`,children:(0,z.jsx)($e,{pages:r,canDesign:d,canEdit:l,onDelete:k})})]}),(0,z.jsx)(Ye,{open:w,onClose:()=>T(!1),onCreated:E})]})}var tt=m(),nt={top_left:{x:0,y:0},top_center:{x:50,y:0},top_right:{x:100,y:0},middle_left:{x:0,y:50},center:{x:50,y:50},middle_right:{x:100,y:50},bottom_left:{x:0,y:100},bottom_center:{x:50,y:100},bottom_right:{x:100,y:100}};function rt(e,t){return j(e,t)}function it(e,t){let n={fillColor:e.fillColor||`transparent`,gradientColor:e.gradientColor||e.fillColor||`#000000`},r=Array.isArray(e.colorRules)?[...e.colorRules].sort((e,t)=>Number(e.priority||100)-Number(t.priority||100)):[];for(let i of r){let r=M(i,e),a=rt(r,t);if(a&&P(r,a))return{fillColor:r.fillColor||n.fillColor,gradientColor:r.gradientColor||n.gradientColor}}return n}function at(e){return nt[e.gradientOrigin]||{x:Number(e.gradientOriginX??50),y:Number(e.gradientOriginY??50)}}function ot(e,t){let n=rt(M(e.flowPoint||{},e),t),r=Number(N(n).replace(`,`,`.`)),i=Number(e.flowMin??0),a=Number(e.flowMax??100)-i,o=Number.isFinite(r)&&a!==0?(r-i)/a:.5;o=Math.max(0,Math.min(1,o)),e.flowInvertSpeed&&(o=1-o);let s=Math.max(.2,Number(e.flowSlowSeconds??5)),c=Math.max(.1,Number(e.flowFastSeconds??.7));return{duration:s-o*(s-c),reverse:e.flowDirection===`reverse`}}function st(e){switch(e){case`diamond`:return`M 0 0 L -5 -5 L -10 0 L -5 5 z`;case`chevron`:return`M 0 0 L -7 -5 L -7 -2.5 L -10 -2.5 L -3 0 L -10 2.5 L -7 2.5 L -7 5 z`;case`kite`:return`M 0 0 L -6 -5 L -10 0 L -6 5 z`;default:return`M 0 0 L -10 -5 L -10 5 z`}}function ct(e){return{x:Number(e?.x??0),y:Number(e?.y??0)}}function lt(e,t){return Math.atan2(t.y-e.y,t.x-e.x)*180/Math.PI}function ut({id:e,type:t,size:n,angle:r,gap:i,point:a,color:o}){let s=Math.max(.6,Number(n||20)/10),c=r*Math.PI/180,l=a.x+Math.cos(c)*Number(i||0),u=a.y+Math.sin(c)*Number(i||0);return(0,z.jsx)(`path`,{d:st(t),fill:o,transform:`translate(${l} ${u}) rotate(${r}) scale(${s})`},e)}function dt({element:e,liveValues:t={},pointEditMode:n=!1,onPointPointerDown:r}){let i=e.style_json||{},a=i.strokeColor||i.color||`#60a5fa`,o=Number(i.strokeWidth||i.thickness||4),s=Math.max(8,Number(i.arrowSize??20)),c=Math.max(-120,Math.min(120,Number(i.arrowGap??0))),l=Math.max(-120,Math.min(120,Number(i.startArrowGap??c))),u=Math.max(-120,Math.min(120,Number(i.endArrowGap??c))),d=i.subtype||`rect`,f=it(i,t),p=i.fillMode||`solid`,m=String(e.id).replace(/[^a-zA-Z0-9_-]/g,``),h=`shape-fill-${m}`,g=p===`solid`?f.fillColor:`url(#${h})`,_=Array.isArray(i.points)?i.points.map(ct):[],v=_.map(e=>`${e.x},${e.y}`).join(` `),y=at(i),b=y.x===50&&y.y===50,x=ot(i,t),S=d===`polyline`&&!!i.flowEnabled,C=_.length>1?{from:_[0],to:_[1]}:null,w=_.length>1?{from:_[_.length-2],to:_[_.length-1]}:null,T=C?lt(C.from,C.to):0,E=w?lt(w.from,w.to):0,D=Number(i.startArrowRotation??0),O=Number(i.endArrowRotation??0),ee=i.startArrow===`outward`?T+180+D:T+D,te=i.endArrow===`outward`?E+O:E+180+O;return(0,z.jsxs)(`svg`,{viewBox:`0 0 ${e.w} ${e.h}`,className:`shape-svg`,children:[(0,z.jsxs)(`defs`,{children:[p===`radial`&&(0,z.jsxs)(`radialGradient`,{id:h,cx:`${y.x}%`,cy:`${y.y}%`,r:`72%`,children:[(0,z.jsx)(`stop`,{offset:`0%`,stopColor:f.fillColor}),(0,z.jsx)(`stop`,{offset:`100%`,stopColor:f.gradientColor})]}),p===`linear`&&(0,z.jsx)(`linearGradient`,{id:h,x1:b?`0%`:`${y.x}%`,y1:b?`50%`:`${y.y}%`,x2:b?`100%`:`${100-y.x}%`,y2:b?`50%`:`${100-y.y}%`,gradientTransform:`rotate(${Number(i.gradientAngle||0)} 0.5 0.5)`,children:b?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`stop`,{offset:`0%`,stopColor:f.gradientColor}),(0,z.jsx)(`stop`,{offset:`50%`,stopColor:f.fillColor}),(0,z.jsx)(`stop`,{offset:`100%`,stopColor:f.gradientColor})]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`stop`,{offset:`0%`,stopColor:f.fillColor}),(0,z.jsx)(`stop`,{offset:`100%`,stopColor:f.gradientColor})]})})]}),d===`polyline`&&(0,z.jsxs)(z.Fragment,{children:[i.fillClosed&&_.length>2&&(0,z.jsx)(`polygon`,{points:v,fill:g,stroke:`none`}),(0,z.jsx)(`polyline`,{points:v,fill:`none`,stroke:a,strokeWidth:o,strokeLinecap:`round`,strokeLinejoin:`round`}),S&&(0,z.jsx)(`polyline`,{points:v,className:`shape-flow-line`,fill:`none`,stroke:i.flowColor||`#e0f2fe`,strokeWidth:Math.max(2,o*.55),strokeDasharray:`14 18`,strokeLinecap:`round`,strokeLinejoin:`round`,style:{animationDuration:`${x.duration.toFixed(2)}s`,animationDirection:x.reverse?`reverse`:`normal`}}),i.startArrow!==`none`&&C&&ut({id:`start-${m}`,type:i.startArrowType||`triangle`,size:s,angle:ee,gap:l,point:_[0],color:a}),i.endArrow!==`none`&&w&&ut({id:`end-${m}`,type:i.endArrowType||`triangle`,size:s,angle:te,gap:u,point:_[_.length-1],color:a})]}),d===`polygon`&&(0,z.jsx)(`polygon`,{points:v,fill:g,stroke:a,strokeWidth:o,strokeLinecap:`round`,strokeLinejoin:`round`}),(d===`ellipse`||d===`circle`)&&(0,z.jsx)(`ellipse`,{cx:e.w/2,cy:e.h/2,rx:Math.max(1,e.w/2-o),ry:Math.max(1,e.h/2-o),fill:g,stroke:a,strokeWidth:o}),d===`rect`&&(0,z.jsx)(`rect`,{x:o/2,y:o/2,width:Math.max(1,e.w-o),height:Math.max(1,e.h-o),rx:Number(i.radius||0),fill:g,stroke:a,strokeWidth:o}),n&&_.map((e,t)=>(0,z.jsx)(`circle`,{cx:e.x,cy:e.y,r:`7`,className:`poly-point`,onPointerDown:e=>r(e,t)},t))]})}var ft={top_left:{x:0,y:0},top_center:{x:50,y:0},top_right:{x:100,y:0},middle_left:{x:0,y:50},center:{x:50,y:50},middle_right:{x:100,y:50},bottom_left:{x:0,y:100},bottom_center:{x:50,y:100},bottom_right:{x:100,y:100}};function pt(e){return ft[e.gradientOrigin]||{x:Number(e.gradientOriginX??50),y:Number(e.gradientOriginY??50)}}function mt(e,t){let n=e.style_json||{};if((n.subtype||`text`)!==`text`)return e.label||`Text`;let r=Array.isArray(n.textRules)?[...n.textRules].sort((e,t)=>Number(e.priority||100)-Number(t.priority||100)):[];for(let e of r){let r=M(e,n),i=j(r,t);if(i&&P(r,i))return r.text||``}return e.label||`Text`}function ht(e){return e?e.linkMode===`page`&&e.linkPageId?`/visu/?mode=viewer&page_id=${e.linkPageId}`:e.linkMode===`external`&&e.linkUrl?e.linkUrl:``:``}function gt(e){return!Array.isArray(e.menuItems)||e.menuItems.length===0?[]:e.menuItems.map((t,n)=>({id:t.id||`menu-${n+1}`,label:t.label||`Link ${n+1}`,linkMode:t.linkMode||`page`,linkPageId:t.linkPageId||``,linkUrl:t.linkUrl||``,linkTarget:t.linkTarget||e.linkTarget||`same_tab`}))}function _t(e){return e.buttonShape===`rect`?0:Math.max(0,Number(e.buttonRadius??16))}function vt(e){return{borderRadius:`${_t(e)}px`,background:e.buttonFill||`rgba(37, 99, 235, 0.78)`,border:`1px solid ${e.buttonBorderColor||`rgba(147, 197, 253, 0.72)`}`,boxShadow:`0 10px 24px rgba(15, 23, 42, 0.24)`,textDecoration:`none`}}function yt(e){let t=Number(e.strokeWidth??0),n=e.fillColor||`transparent`,r=e.gradientColor||`#1d4ed8`,i=e.fillMode||`solid`,a=pt(e),o=i===`linear`?a.x===50&&a.y===50?`linear-gradient(${Number(e.gradientAngle||0)}deg, ${r} 0%, ${n} 50%, ${r} 100%)`:`linear-gradient(${Number(e.gradientAngle||0)}deg, ${n}, ${r})`:i===`radial`?`radial-gradient(circle at ${a.x}% ${a.y}%, ${n}, ${r})`:n;return{border:`${Math.max(0,t)}px solid ${e.strokeColor||e.color||`#60a5fa`}`,background:o,borderRadius:`${Number(e.radius||0)}px`}}function bt({href:e,targetMode:t,interactive:n,children:r,className:i,style:a}){let o=t===`new_tab`?`_blank`:void 0,s=o?`noreferrer noopener`:void 0;return!n||!e?(0,z.jsx)(`span`,{className:i,style:a,children:r}):(0,z.jsx)(`a`,{className:i,style:a,href:e,target:o,rel:s,children:r})}function xt({element:e,liveValues:t={},interactive:n=!1}){let r=e.style_json||{},i=r.subtype||`text`,a=mt(e,t),o=!!r.renderAsButton&&(i===`link`||i===`menu`),s=r.menuOrientation===`horizontal`?`horizontal`:`vertical`,c=Math.max(22,Number(r.menuButtonSize??42)),l={color:r.color||`#ffffff`,fontSize:r.fontSize||20,fontFamily:r.fontFamily||C[0].value,...yt(r)};if(i===`menu`){let e=gt(r);return(0,z.jsx)(`div`,{className:`text-element text-menu ${s===`horizontal`?`is-horizontal`:`is-vertical`} ${o?`has-button-items`:``}`,style:{...l,gap:`${Math.max(0,Number(r.menuGap??8))}px`},children:e.map(e=>(0,z.jsx)(bt,{href:ht(e),targetMode:e.linkTarget,interactive:n,className:`text-menu-item ${o?`as-button`:``}`,style:o?{...vt(r),width:s===`horizontal`?`${c}px`:`100%`,height:s===`vertical`?`${c}px`:`100%`,minHeight:s===`vertical`?`${c}px`:`100%`,flex:`0 0 auto`}:void 0,children:e.label},e.id))})}return i===`link`?(0,z.jsx)(`div`,{className:`text-element`,style:l,children:(0,z.jsx)(bt,{href:ht(r),targetMode:r.linkTarget||`same_tab`,interactive:n,className:`text-link-anchor ${o?`as-button`:``}`,style:o?{...vt(r),width:`100%`,height:`100%`}:void 0,children:a})}):(0,z.jsx)(`div`,{className:`text-element`,style:l,children:a})}var St=[{value:`15m`,label:`15 Min`},{value:`1h`,label:`1 h`},{value:`6h`,label:`6 h`},{value:`12h`,label:`12 h`},{value:`24h`,label:`24 h`},{value:`7d`,label:`7 Tage`},{value:`30d`,label:`30 Tage`},{value:`90d`,label:`90 Tage`},{value:`180d`,label:`6 Monate`}];function Ct(e){if(e==null||e===``)return null;let t=Number(String(e).replace(`,`,`.`));return Number.isFinite(t)?t:null}function wt(e){if(!e)return``;let t=new Date(e);return Number.isNaN(t.getTime())?``:t.toLocaleString(`de-DE`,{hour:`2-digit`,minute:`2-digit`})}function Tt(e){if(!e)return``;let t=new Date(e);return Number.isNaN(t.getTime())?``:t.toLocaleString(`de-DE`,{year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}function Et(e){return Number.isFinite(e)?e.toLocaleString(`de-DE`,{maximumFractionDigits:2}):``}function Dt(e,t=0,n=100){let r=e.filter(e=>Number.isFinite(e));if(!r.length)return{min:t,max:n};let i=Math.min(...r),a=Math.max(...r);i===a&&(--i,a+=1);let o=(a-i)*.08;return{min:i-o,max:a+o}}function Ot(e){return e.filter(e=>Number.isFinite(e.y))}function kt(e){let t=[],n=[];return e.forEach(e=>{if(!Number.isFinite(e.y)){n.length&&t.push(n),n=[];return}n.push(e)}),n.length&&t.push(n),t}function At(e,t,n){let r=[],i=!1;return e.forEach(e=>{if(!Number.isFinite(e.y)){i=!1;return}r.push(`${i?`L`:`M`} ${t(e.x).toFixed(2)} ${n(e.y).toFixed(2)}`),i=!0}),r.join(` `)}function jt(e,t,n){let r=Ot(e);if(r.length===0)return``;if(r.length===1)return`M ${t(r[0].x).toFixed(2)} ${n(r[0].y).toFixed(2)}`;let i=r.map(e=>({x:t(e.x),y:n(e.y)})),a=[],o=Array(i.length).fill(0);for(let e=0;e9){let a=3/Math.sqrt(i);o[e]=a*n*t,o[e+1]=a*r*t}}let s=[`M ${i[0].x.toFixed(2)} ${i[0].y.toFixed(2)}`];for(let e=0;er===`smooth`?jt(e,t,n):r===`step`?Mt(e,t,n):At(e,t,n)).join(` `)}function Pt(e,t,n,r,i=!0){return(i?[Ot(e)]:kt(e)).filter(e=>e.length>0).map(e=>{let i=e[0],a=e[e.length-1];return[`M ${t(i.x).toFixed(2)} ${r.toFixed(2)}`,...e.map(e=>`L ${t(e.x).toFixed(2)} ${n(e.y).toFixed(2)}`),`L ${t(a.x).toFixed(2)} ${r.toFixed(2)}`,`Z`].join(` `)}).join(` `)}function Ft({element:e,interactive:t=!1,tooltipsEnabled:n=!1,timeRange:r,customTimeRange:i,controlsMode:a=`local`,onTimeRangeChange:o,onShowTooltip:s,onMoveTooltip:c,onHideTooltip:l,onExpand:u}){let d=e.style_json||{},f=Array.isArray(d.series)?d.series:[],p=Math.max(0,Number(d.refreshSeconds??60)),m=(0,_.useRef)(null),h=(0,_.useRef)(null),[g,v]=(0,_.useState)(d.range||`24h`),[y,b]=(0,_.useState)(null),[x,S]=(0,_.useState)(null),[C,w]=(0,_.useState)(null),[T,E]=(0,_.useState)(``),[D,O]=(0,_.useState)(!1),[ee,te]=(0,_.useState)(null),ne=JSON.stringify({series:f,range:r||g||d.range||`24h`,interval:d.interval||`auto`,aggregate:d.aggregate||`mean`,customRange:i||y});(0,_.useEffect)(()=>{a!==`global`&&(v(d.range||`24h`),b(null))},[a,e.id,d.range]),(0,_.useEffect)(()=>{n||te(null)},[n]),(0,_.useEffect)(()=>{let e=!0,t=null;async function n(){if(!f.length){w(null),E(``);return}O(!0);try{let t={series_json:JSON.stringify(f),range:r||g||d.range||`24h`,interval:d.interval||`auto`,aggregate:d.aggregate||`mean`},n=i||y;n&&(t.start=String(n.start),t.end=String(n.end));let a=await U(`trend_data`,t);if(!e)return;w(a.data||null),E(``)}catch(t){if(!e)return;E(t.message||`Trenddaten konnten nicht geladen werden.`)}finally{e&&O(!1)}}return n(),p>0&&(t=window.setInterval(n,p*1e3)),()=>{e=!1,t&&window.clearInterval(t)}},[ne,p]);let k=(0,_.useMemo)(()=>{let e=C?.series||[],t=[],n=e.map((e,n)=>{let r=f.find(t=>String(t.id)===String(e.id))||f[n]||{},i=(e.values||[]).map(e=>({x:Date.parse(e.time),time:e.time,y:Ct(e.value)})).filter(e=>Number.isFinite(e.x));return i.forEach(e=>{Number.isFinite(e.y)&&t.push(e)}),{...e,...r,color:r.color||e.color||`#38bdf8`,label:r.label||e.label||`Trend ${n+1}`,unit:r.unit||``,yAxis:Math.max(1,Math.min(4,Number(r.yAxis||1))),points:i}}),r=t.map(e=>e.x),i=t.map(e=>e.y),a=r.length?Math.min(...r):Date.now()-36e5,o=r.length?Math.max(...r):Date.now(),{min:s,max:c}=Dt(i,Number(d.min??0),Number(d.max??100)),l={};return[1,2,3,4].forEach(e=>{let t=Dt(n.filter(t=>Number(t.yAxis||1)===e).flatMap(e=>e.points.map(e=>e.y).filter(e=>Number.isFinite(e))),s,c),r=n.find(t=>Number(t.yAxis||1)===e&&t.unit)?.unit||``,i=n.find(t=>Number(t.yAxis||1)===e)?.color||`#cbd5e1`;l[e]={...t,unit:r,color:i}}),{series:n,xMin:a,xMax:o===a?a+1:o,yMin:s,yMax:c,yAxes:l}},[C,f,d.min,d.max]),A=Math.max(240,Number(e.w||520)),re=Math.max(160,Number(e.h||300)),j=d.showLegend!==!1&&k.series.length>0,M=[1,2,3,4].filter(e=>k.series.some(t=>Number(t.yAxis||1)===e)),N=t?j?78:58:j?52:42,P={left:48,right:22+Math.max(0,M.length-1)*42,top:38,bottom:N},ie=Math.max(20,A-P.left-P.right),F=Math.max(20,re-P.top-P.bottom),I=e=>P.left+(e-k.xMin)/(k.xMax-k.xMin)*ie,L=(e,t=1)=>{let n=k.yAxes?.[t]||{min:k.yMin,max:k.yMax};return P.top+(1-(e-n.min)/(n.max-n.min))*F},R=P.top+F,ae=(e=1)=>{let t=k.yAxes?.[e]||{min:k.yMin,max:k.yMax};return[0,.25,.5,.75,1].map(e=>t.min+(t.max-t.min)*e)},oe=[k.xMin,k.xMin+(k.xMax-k.xMin)/2,k.xMax],se=d.backgroundColor||`rgba(15, 23, 42, 0.46)`,ce=d.borderColor||`rgba(148, 163, 184, 0.42)`,le=i||y?`custom`:r||g||d.range||`24h`,B=d.displayMode||`line`,ue=d.interpolation||`linear`,de=d.connectNulls!==!1;function fe(e){let t=m.current?.getBoundingClientRect();return t?{x:(e.clientX-t.left)/Math.max(1,t.width)*A,y:(e.clientY-t.top)/Math.max(1,t.height)*re}:null}function pe(e){let t=(Math.max(P.left,Math.min(A-P.right,e))-P.left)/ie;return k.xMin+t*(k.xMax-k.xMin)}function me(e){let t=fe(e);if(!t)return null;let n=null;return k.series.forEach(e=>{e.points.forEach(r=>{if(!Number.isFinite(r.y))return;let i=I(r.x)-t.x,a=L(r.y)-t.y,o=Math.sqrt(i*i+a*a);(!n||oA-P.right||n.yR||(e.preventDefault(),e.stopPropagation(),te(null),h.current={startX:n.x,currentX:n.x},S({startX:n.x,currentX:n.x}))}function ge(e){if(h.current){let t=fe(e);if(!t)return;h.current.currentX=t.x,S({startX:h.current.startX,currentX:t.x});return}if(!t||!n)return;let r=me(e);if(!r){te(null),l?.();return}te({x:I(r.point.x),y:L(r.point.y,r.serie.yAxis||1),color:r.serie.color||`#38bdf8`}),s?.(e,[{key:`${r.serie.id||r.serie.label}-${r.point.time}`,label:r.serie.label||`Trend`,value:`${Et(r.point.y)}${r.serie.unit?` ${r.serie.unit}`:``}`,updated:Tt(r.point.time),quality:`trend`,pointKey:r.serie.tag_value||``,type:r.serie.measurement||`Influx`,group:r.serie.tag_key||``,source:r.serie.database||``}],`Trendwert`),c?.(e)}function _e(){if(!h.current)return;let{startX:e,currentX:t}=h.current;if(h.current=null,S(null),te(null),Math.abs(t-e)<12)return;let n=pe(Math.min(e,t)),r=pe(Math.max(e,t));if(a===`global`){o?.({customRange:{start:Math.round(n),end:Math.round(r)}});return}b({start:Math.round(n),end:Math.round(r)})}function ve(e=d.range||`24h`){if(a===`global`){o?.({range:e,customRange:null});return}v(e),b(null)}function ye(e){t&&(e.preventDefault(),e.stopPropagation(),ve(g||d.range||`24h`))}return(0,z.jsxs)(`div`,{className:`trend-chart`,style:{background:se,borderColor:ce},children:[(0,z.jsxs)(`svg`,{ref:m,viewBox:`0 0 ${A} ${re}`,preserveAspectRatio:`none`,onPointerDown:he,onPointerMove:ge,onPointerUp:_e,onDoubleClick:ye,onPointerLeave:()=>{h.current=null,S(null),te(null),l?.()},children:[(0,z.jsx)(`rect`,{x:`0.5`,y:`0.5`,width:A-1,height:re-1,rx:Number(d.radius??14),className:`trend-chart-frame`}),B!==`donut`&&B!==`digital_bar`&&M.map(e=>{let t=e===M[0],n=M.indexOf(e)*42,r=t?P.left-8:A-P.right+8+n,i=t?`end`:`start`,a=ae(e),o=k.yAxes?.[e]||{};return(0,z.jsxs)(`g`,{children:[a.map(n=>{let a=L(n,e);return(0,z.jsxs)(`g`,{children:[t&&(0,z.jsx)(`line`,{x1:P.left,x2:A-P.right,y1:a,y2:a,className:`trend-grid-line`}),(0,z.jsx)(`text`,{x:r,y:a+4,className:`trend-axis-label`,textAnchor:i,style:{fill:o.color},children:Et(n)})]},`${e}-${n}`)}),o.unit&&(0,z.jsx)(`text`,{x:r,y:P.top-12,className:`trend-axis-label`,textAnchor:i,style:{fill:o.color},children:o.unit})]},e)}),B!==`donut`&&oe.map(e=>(0,z.jsx)(`text`,{x:I(e),y:R+24,className:`trend-axis-label trend-x-label`,textAnchor:`middle`,children:wt(e)},e)),B!==`donut`&&B!==`digital_bar`&&(0,z.jsx)(`line`,{x1:P.left,x2:P.left,y1:P.top,y2:R,className:`trend-axis`}),B!==`donut`&&B!==`digital_bar`&&M.slice(1).map((e,t)=>(0,z.jsx)(`line`,{x1:A-P.right+6+t*42,x2:A-P.right+6+t*42,y1:P.top,y2:R,className:`trend-axis`},e)),B!==`donut`&&(0,z.jsx)(`line`,{x1:P.left,x2:A-P.right,y1:R,y2:R,className:`trend-axis`}),B===`digital_bar`&&k.series.map((e,t)=>{let n=F/Math.max(1,k.series.length),r=P.top+n*t+5,i=Math.max(8,n-10),a=e.color||`#22c55e`,o=e.points.filter(e=>Number.isFinite(e.x)).sort((e,t)=>e.x-t.x);return(0,z.jsxs)(`g`,{children:[(0,z.jsx)(`text`,{x:P.left-8,y:r+i/2+4,className:`trend-axis-label`,textAnchor:`end`,children:e.label||`Trend ${t+1}`}),o.map((n,s)=>{let c=o[s+1],l=I(n.x),u=c?I(c.x):A-P.right,d=Number(n.y)>=1;return(0,z.jsx)(`rect`,{x:l,y:r,width:Math.max(1,u-l),height:i,fill:d?a:`rgba(2, 6, 23, 0.58)`,opacity:d?.74:.5},`${e.id||t}-${s}`)})]},e.id||t)}),B===`vertical_bar`&&k.series.map((e,t)=>{let n=e.points.filter(e=>Number.isFinite(e.y)),r=e.color||`#38bdf8`,i=ie/Math.max(1,n.length),a=Math.max(2,Math.min(28,i/Math.max(1,k.series.length)-2));return(0,z.jsx)(`g`,{children:n.map((n,o)=>{let s=I(n.x)-i/2+t*(a+2),c=L(n.y,e.yAxis||1);return(0,z.jsx)(`rect`,{x:s,y:Math.min(c,R),width:a,height:Math.max(1,Math.abs(R-c)),rx:`2`,fill:r,opacity:`0.82`},`${e.id||t}-${o}`)})},e.id||t)}),B===`donut`&&(()=>{let e=A/2,t=P.top+F/2,n=Math.max(18,Math.min(ie,F)/2-10),r=Math.max(12,n*.28),i=k.series.map((e,t)=>{let n=[...e.points].reverse().find(e=>Number.isFinite(e.y));return{serie:e,index:t,value:Math.max(0,Math.abs(Number(n?.y||0)))}}).filter(e=>e.value>0),a=i.reduce((e,t)=>e+t.value,0)||1,o=0;return(0,z.jsxs)(`g`,{children:[(0,z.jsx)(`circle`,{cx:e,cy:t,r:n,fill:`none`,stroke:`rgba(15,23,42,0.58)`,strokeWidth:r}),i.map(i=>{let s=i.value/a,c=`${(s*100).toFixed(3)} ${(100-s*100).toFixed(3)}`,l=o;return o-=s*100,(0,z.jsx)(`circle`,{cx:e,cy:t,r:n,fill:`none`,stroke:i.serie.color||`#38bdf8`,strokeWidth:r,strokeDasharray:c,strokeDashoffset:l,pathLength:`100`,transform:`rotate(-90 ${e} ${t})`},i.serie.id||i.index)}),(0,z.jsx)(`text`,{x:e,y:t+5,className:`trend-axis-label`,textAnchor:`middle`,children:Et(a)})]})})(),B===`line`&&k.series.map((e,t)=>{let n=t=>L(t,e.yAxis||1),r=Nt(e.points,I,n,ue,de),i=Pt(e.points,I,n,R,de),a=e.color||`#38bdf8`,o=Math.max(1,Number(e.lineWidth??d.lineWidth??3)),s=Math.max(0,Math.min(.8,Number(e.fillOpacity??d.fillOpacity??.18)));return(0,z.jsxs)(`g`,{children:[e.fillEnabled&&i&&(0,z.jsx)(`path`,{d:i,fill:a,opacity:s}),r&&(0,z.jsx)(`path`,{d:r,fill:`none`,stroke:a,strokeWidth:o,strokeLinecap:`round`,strokeLinejoin:`round`,vectorEffect:`non-scaling-stroke`})]},e.id||t)}),ee&&(0,z.jsx)(`circle`,{cx:ee.x,cy:ee.y,r:`5`,fill:ee.color,className:`trend-hover-point`}),x&&(0,z.jsx)(`rect`,{x:Math.min(x.startX,x.currentX),y:P.top,width:Math.abs(x.currentX-x.startX),height:F,className:`trend-selection`})]}),(0,z.jsxs)(`div`,{className:`trend-chart-head`,children:[(0,z.jsx)(`strong`,{children:e.label||e.name||`Trendgraph`}),(0,z.jsxs)(`span`,{children:[le===`custom`?`Auswahl`:le,` · `,C?.interval||d.interval||`auto`]})]}),j&&(0,z.jsx)(`div`,{className:`trend-legend ${t?`has-footer`:``}`,children:k.series.map((e,t)=>(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`i`,{style:{background:e.color||`#38bdf8`}}),e.label||`Trend ${t+1}`]},e.id||t))}),!f.length&&(0,z.jsx)(`div`,{className:`trend-empty`,children:`Datenpunkte auswählen`}),D&&!C&&(0,z.jsx)(`div`,{className:`trend-empty`,children:`Trend wird geladen...`}),T&&(0,z.jsx)(`div`,{className:`trend-error`,children:T}),t&&(0,z.jsxs)(`div`,{className:`trend-footer`,onPointerDown:e=>e.stopPropagation(),children:[a!==`global`&&(0,z.jsxs)(`select`,{value:y?`custom`:g||d.range||`24h`,onChange:e=>{e.target.value!==`custom`&&ve(e.target.value)},children:[y&&(0,z.jsx)(`option`,{value:`custom`,children:`Auswahl`}),St.map(e=>(0,z.jsx)(`option`,{value:e.value,children:e.label},e.value))]}),a!==`global`&&y&&(0,z.jsx)(`button`,{type:`button`,onClick:()=>ve(g||d.range||`24h`),children:`Reset`}),(0,z.jsx)(`button`,{type:`button`,title:`Trend auf Canvas vergrößern`,onClick:()=>u?.(e),children:`⤢`})]})]})}function It(e){if(e==null||e===``)return null;let t=String(e).replace(`,`,`.`).match(/-?\d+(?:\.\d+)?/);return t?Number(t[0]):null}function Lt(e,t=1,n=``){if(!Number.isFinite(e))return`--`;let r=e.toLocaleString(`de-DE`,{minimumFractionDigits:Math.max(0,Math.min(8,t)),maximumFractionDigits:Math.max(0,Math.min(8,t))});return n?`${r} ${n}`:r}function Rt(e){return JSON.stringify({database:e?.influx?.database||``,measurement:e?.influx?.measurement||``,tag_key:e?.influx?.tag_key||``,tag_value:e?.influx?.tag_value||``})}function zt(e){return!!(e?.sourceMode===`influx`&&e?.influx?.database&&e?.influx?.measurement&&e?.influx?.tag_key&&e?.influx?.tag_value)}function Bt(e,t,n,r){if(e?.sourceMode===`static`)return It(e.staticValue);if(e?.sourceMode===`point`){let r=j(M(e.point||{},t),n);return It(r?.value??r?.value_formatted)}return e?.sourceMode===`influx`?It(r[e.id]):null}function Vt({element:e,liveValues:t={}}){let n=e?.style_json||{},r=Array.isArray(n.nodes)?n.nodes:[],i=Array.isArray(n.links)?n.links:[],a=Math.max(0,Number(n.refreshSeconds??30)),[o,s]=(0,_.useState)({}),c=(0,_.useMemo)(()=>i.filter(zt),[i]);(0,_.useEffect)(()=>{let e=!0,t=null;async function n(){if(!c.length){s({});return}try{let t=await U(`influx_latest_values`,{series_json:JSON.stringify(c.map(e=>({id:e.id,database:e.influx.database,measurement:e.influx.measurement,tag_key:e.influx.tag_key,tag_value:e.influx.tag_value})))});if(!e)return;let n={};(t.series||[]).forEach(e=>{n[e.id]=e.value}),s(n)}catch{e&&s({})}}return n(),a>0&&c.length&&(t=window.setInterval(n,a*1e3)),()=>{e=!1,t&&window.clearInterval(t)}},[a,JSON.stringify(c.map(e=>({id:e.id,signature:Rt(e)})))]);let l=Math.max(260,Number(e?.w||560)),u=Math.max(180,Number(e?.h||320)),d=(0,_.useMemo)(()=>{let e=new Map(r.map((e,t)=>[e.id||`node-${t}`,{...e,id:e.id||`node-${t}`,label:e.label||`Knoten ${t+1}`,column:Number(e.column??0),order:Number(e.order??t),color:e.color||`#38bdf8`,incoming:[],outgoing:[]}])),a=i.map((r,i)=>{let a=r.sourceId||``,s=r.targetId||``,c=e.get(a),l=e.get(s),u=Bt(r,n,t,o);return!c||!l||!Number.isFinite(u)||u<=0?null:{...r,id:r.id||`link-${i}`,sourceId:a,targetId:s,label:r.label||``,color:r.color||c.color||`#38bdf8`,opacity:Math.max(.08,Math.min(1,Number(r.opacity??n.linkOpacity??.46))),thicknessFactor:Math.max(.25,Number(r.thicknessFactor??1)),value:u,source:c,target:l}}).filter(Boolean);a.forEach(e=>{e.source.outgoing.push(e),e.target.incoming.push(e)});let s=Array.from(e.values());s.forEach(e=>{let t=e.incoming.reduce((e,t)=>e+t.value,0),n=e.outgoing.reduce((e,t)=>e+t.value,0);e.total=Math.max(t,n,1e-4)});let c=new Map;s.forEach(e=>{let t=Number.isFinite(e.column)?e.column:0;c.has(t)||c.set(t,[]),c.get(t).push(e)});let d=Array.from(c.keys()).sort((e,t)=>e-t),f=Math.max(18,Number(n.nodeWidth??26)),p=Math.max(0,Number(n.nodeRadius??10)),m=Math.max(6,Number(n.nodeGap??14)),h=Math.max(40,u-18-18),g=Number(n.scaleFactor??1);if(!(g>0)){let e=d.map(e=>{let t=(c.get(e)||[]).sort((e,t)=>e.order-t.order),n=t.reduce((e,t)=>e+t.total,0),r=Math.max(0,t.length-1)*m;return n>0?(h-r)/n:0}).filter(e=>e>0);g=e.length?Math.min(...e):18}let _=Math.max(20,Number(n.minNodeHeight??24)),v=Math.max(1,d.length-1),y=Math.max(40,l-16-16-f);d.forEach(e=>{let t=(c.get(e)||[]).sort((e,t)=>e.order-t.order),n=t.map(e=>Math.max(e.total*g,_)),r=n.reduce((e,t)=>e+t,0),i=18+Math.max(0,h-r-Math.max(0,t.length-1)*m)/2;t.forEach((t,r)=>{let a=n[r],o=Math.max(1,t.total*g);t.w=f,t.h=a,t.flowHeight=Math.min(o,a),t.flowOffset=(a-t.flowHeight)/2,t.x=16+(d.length===1?y/2:(e-d[0])/v*y),t.y=i,t.radius=p,t.outCursor=0,t.inCursor=0,i+=a+m})});let b=Math.max(1,Number(n.minLinkWidth??4)),x=Math.max(.15,Math.min(.6,Number(n.curve??.42)));return{nodes:s,links:a.map(e=>{let t=Math.max(b,e.value*g*e.thicknessFactor),n=Math.max(b,e.value*g*e.thicknessFactor),r=e.source.y+e.source.flowOffset+e.source.outCursor,i=e.target.y+e.target.flowOffset+e.target.inCursor;e.source.outCursor+=t,e.target.inCursor+=n;let a=e.source.x+f,o=e.target.x;if(![a,o,r,i,t,n].every(Number.isFinite))return null;let s=Math.max(20,(o-a)*x),c=r,l=r+t,u=i,d=i+n,p=[`M ${a.toFixed(2)} ${c.toFixed(2)}`,`C ${(a+s).toFixed(2)} ${c.toFixed(2)} ${(o-s).toFixed(2)} ${u.toFixed(2)} ${o.toFixed(2)} ${u.toFixed(2)}`,`L ${o.toFixed(2)} ${d.toFixed(2)}`,`C ${(o-s).toFixed(2)} ${d.toFixed(2)} ${(a+s).toFixed(2)} ${l.toFixed(2)} ${a.toFixed(2)} ${l.toFixed(2)}`,`Z`].join(` `);return{...e,width:t,path:p,labelX:a+(o-a)/2,labelY:(c+l+u+d)/4}}).filter(Boolean)}},[r,i,n,l,u,t,o]),f=n.backgroundColor||`rgba(15, 23, 42, 0.42)`,p=n.borderColor||`rgba(148, 163, 184, 0.38)`,m=n.labelColor||`#e2e8f0`,h=Math.max(.2,Math.min(1,Number(n.nodeOpacity??.9))),g=n.showValues!==!1,v=n.showLegend!==!1;return(0,z.jsxs)(`div`,{className:`sankey-chart`,style:{background:f,borderColor:p},children:[(0,z.jsxs)(`svg`,{viewBox:`0 0 ${l} ${u}`,preserveAspectRatio:`none`,children:[(0,z.jsx)(`rect`,{x:`0.5`,y:`0.5`,width:l-1,height:u-1,rx:Number(n.radius??14),className:`trend-chart-frame`}),d.links.map(e=>(0,z.jsxs)(`g`,{children:[(0,z.jsx)(`path`,{d:e.path,fill:e.color,opacity:e.opacity}),g&&e.label&&(0,z.jsx)(`text`,{x:e.labelX,y:e.labelY,className:`sankey-link-label`,textAnchor:`middle`,style:{fill:m},children:e.label})]},e.id)),d.nodes.map(e=>(0,z.jsxs)(`g`,{children:[(0,z.jsx)(`rect`,{x:e.x,y:e.y,width:e.w,height:e.h,rx:e.radius,fill:e.color,opacity:h}),(0,z.jsx)(`text`,{x:e.x+e.w+8,y:e.y+16,className:`sankey-node-label`,style:{fill:m},children:e.label})]},e.id))]}),(0,z.jsxs)(`div`,{className:`sankey-chart-head`,children:[(0,z.jsx)(`strong`,{children:e.label||e.name||`Sankey`}),(0,z.jsxs)(`span`,{children:[d.links.length,` Flüsse · `,d.nodes.length,` Knoten`]})]}),v&&g&&d.links.length>0&&(0,z.jsx)(`div`,{className:`sankey-legend`,children:d.links.slice(0,6).map(e=>(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`i`,{style:{background:e.color}}),e.label||`${e.source.label} → ${e.target.label}`,`: `,Lt(e.value,Number(n.decimals??1),n.unit||``)]},e.id))}),d.links.length===0&&(0,z.jsx)(`div`,{className:`trend-empty`,children:`Sankey-Flüsse konfigurieren`})]})}var Ht=`visu:last-viewer-page`;function Ut(e){let t=Number(e||0);t>0&&sessionStorage.setItem(Ht,String(t))}function Wt(e){let t=Number(sessionStorage.getItem(`visu:last-viewer-page`)||0),n=e.find(e=>Number(e.id)===t)||e[0];return n?`/visu/?mode=viewer&page_id=${n.id}`:`/visu/?mode=dashboard`}function Gt({className:e=`btn`,label:t=`Anzeigen`,disabled:n=!1}){let[r,i]=(0,_.useState)(()=>{let e=Number(sessionStorage.getItem(`visu:last-viewer-page`)||0);return e>0?`/visu/?mode=viewer&page_id=${e}`:`/visu/?mode=dashboard`});return(0,_.useEffect)(()=>{let e=!0;return H(`pages`).then(t=>{e&&i(Wt(t.pages||[]))}).catch(()=>{}),()=>{e=!1}},[]),n?(0,z.jsx)(`span`,{className:e,children:t}):(0,z.jsx)(`a`,{href:r,className:e,children:t})}function Kt(e,t=``){if(!e)return null;if((e.type||e.variable_type)===`static`){let n=e.static_value??e.value??``;return{type:`static`,variable_type:`static`,external_id:``,variable_id:``,point_key:``,point_label:e.point_label||e.label||`Fester Wert ${n}`,label:e.label||e.point_label||`Fester Wert ${n}`,static_value:n,value:n,value_formatted:String(n),templatePlaceholderKey:t}}return{type:e.type||e.variable_type||``,variable_type:e.type||e.variable_type||``,external_id:e.external_id||``,variable_id:e.variable_id||``,point_key:e.point_key||``,point_label:e.point_label||e.label||``,label:e.label||e.point_label||``,templatePlaceholderKey:t}}function qt(e){return!!(e&&typeof e==`object`&&!Array.isArray(e)&&(e.variable_type===`placeholder`||e.type===`placeholder`)&&e.point_key)}function Jt(e,t){if(Array.isArray(e))return e.map(e=>Jt(e,t));if(!e||typeof e!=`object`)return e;let n={};if(Object.entries(e).forEach(([e,r])=>{n[e]=Jt(r,t)}),qt(e)){let r=Kt(t[e.point_key],e.point_key);return r?{...n,...r}:{...n,templatePlaceholderKey:e.point_key}}return n}function Yt(e,t={}){if(Array.isArray(e))return e.forEach(e=>Yt(e,t)),t;if(!e||typeof e!=`object`)return t;let n=e.style_json?.templateBindings;return n&&typeof n==`object`&&!Array.isArray(n)&&Object.entries(n).forEach(([e,n])=>{n&&!t[e]&&(t[e]=Kt(n,e))}),e.templatePlaceholderKey&&!t[e.templatePlaceholderKey]&&(t[e.templatePlaceholderKey]=Kt(e,e.templatePlaceholderKey)),Object.values(e).forEach(e=>Yt(e,t)),t}function Xt(e,t){return String(e?.style_json?.templateElementUid||e?.style_json?.templateElementId||e?.id||`index-${t}`)}function Zt(e){return{minX:Math.min(...e.map(e=>Number(e.x||0))),minY:Math.min(...e.map(e=>Number(e.y||0))),minZ:Math.min(...e.map(e=>Number(e.z_index||10)))}}async function Qt(e,t){let n=new Map;if(e.forEach(e=>{let t=e.style_json||{};!t.templateGroupId||!t.templateSourceId||(n.has(t.templateGroupId)||n.set(t.templateGroupId,[]),n.get(t.templateGroupId).push(e))}),n.size===0)return e;let r=new Map,i=new Map;for(let[e,a]of n.entries()){let n=a[0]?.style_json||{},o=Number(n.templateSourceId||0);if(!o)continue;i.has(o)||i.set(o,await t(o));let s=i.get(o),c=Array.isArray(s?.elements)?s.elements.map(ee):[];if(c.length===0)continue;let l=Yt(a),u=Zt(a),d=Zt(c),f=new Map;a.forEach((e,t)=>{f.set(Xt(e,t),e)});let p=c.map((t,r)=>{let i=Xt(t,r),c=f.get(i)||a[r],p=Jt(t,l),m=p.style_json||{};return ee({...p,id:c?.id||b(),x:Number(p.x||0)-d.minX+u.minX,y:Number(p.y||0)-d.minY+u.minY,z_index:Number(p.z_index||10)-d.minZ+u.minZ,style_json:{...m,templateGroupId:e,templateSourceId:o,templateElementId:i,templateName:s?.template?.name||n.templateName||`Template`,templatePlaceholders:s?.placeholders||n.templatePlaceholders||[],templateBindings:l}})});r.set(e,p)}let a=[],o=new Set;return e.forEach(e=>{let t=e.style_json?.templateGroupId;if(t&&r.has(t)){o.has(t)||(a.push(...r.get(t)),o.add(t));return}a.push(e)}),a}var $t=`visu.viewer.tooltips.enabled`,en=`visu.viewer.tooltips.position`,tn=300,nn=220,rn=10,an=`visu.viewer.trend.range`,on=[{value:`15m`,label:`15 Min`},{value:`1h`,label:`1 h`},{value:`6h`,label:`6 h`},{value:`12h`,label:`12 h`},{value:`24h`,label:`24 h`},{value:`7d`,label:`7 Tage`},{value:`30d`,label:`30 Tage`},{value:`90d`,label:`90 Tage`},{value:`180d`,label:`6 Monate`}];function sn(e,t,n){return Math.max(t,Math.min(n,e))}function cn(e,t){let n=e.style_json||{},r=[...e.rules||[]].sort((e,t)=>Number(e.priority||100)-Number(t.priority||100));for(let e of r){let r=M(e,n),i=j(r,t);if(i&&P(r,i))return{image:r.image_file||``,hasState:!0}}let i=e.asset_states?.find(e=>e.is_default)||e.asset_states?.[0]||null;return i?{image:i.image_file||``,hasState:!0}:e.style_json?.default_image?{image:e.style_json.default_image,hasState:!0}:{image:``,hasState:!1}}function ln(){try{return sessionStorage.getItem($t)!==`0`}catch{return!0}}function un(){try{return sessionStorage.getItem(en)||`cursor`}catch{return`cursor`}}function dn(){try{return sessionStorage.getItem(an)||`24h`}catch{return`24h`}}function fn(e){let t=Number(e);return!Number.isFinite(t)||t<0?`Unbekannt`:t<60?`vor ${Math.round(t)} s`:t<3600?`vor ${Math.round(t/60)} min`:t<86400?`vor ${Math.round(t/3600)} h`:`vor ${Math.round(t/86400)} d`}function pn(e,t={}){return t.unitMode===`custom`?String(t.unit||``).trim():t.unitMode===`hidden`?``:String(e?.unit||``).trim()}function mn(e,t={},n){let r=se(e,t.decimals??1,n),i=pn(e,t);return!i||r.includes(i)?r:`${r} ${i}`}function hn(e){let t=new Set;return Object.values(e||{}).filter(e=>{if(!e||typeof e!=`object`)return!1;let n=e.source_key||[e.type,e.external_id,e.variable_id,e.point_key].join(`|`);return t.has(n)?!1:(t.add(n),!0)})}function gn(e,t=`,`){let n=String(e??``);return/["\r\n]/.test(n)||n.includes(t)?`"${n.replace(/"/g,`""`)}"`:n}function _n(e,t,n={}){let r=new Set,i=[];for(let a of e){let e=M(a,n);if(!e)continue;let o=k(e);if(!o||r.has(o))continue;r.add(o);let s=j(e,t);i.push({key:o,label:s?.label||e.point_label||e.label||`Datenpunkt`,value:s?se(s,1):`Keine Live-Daten`,updated:fn(s?.age_s),quality:s?.quality??`Unbekannt`,unit:s?.unit||``,pointKey:s?.point_key||e.point_key||``,type:s?.type||e.variable_type||``,group:s?.group||``,source:s?.external_id||e.external_id||``,point:s})}return i}function vn(e,t){let n=e.style_json||{};if(e.element_type===`asset`)return _n(e.rules||[],t,n);if(e.element_type===`shape`)return _n([...Array.isArray(n.colorRules)?n.colorRules:[],n.flowPoint||null],t,n);if(e.element_type===`text`)return _n(n.textRules||[],t,n);if(e.element_type===`value`){let r=[n.point||null];return!n.point&&e.variable_id&&r.push({variable_id:e.variable_id,point_label:e.label||e.name||`Datenpunkt`}),_n(r,t,n)}return[]}function yn({tooltip:e}){return e?.items?.length?(0,tt.createPortal)((0,z.jsxs)(`div`,{className:`viewer-tooltip ${e.align===`right`?`align-right`:``}`,style:{left:e.x,top:e.y},children:[e.title&&(0,z.jsx)(`div`,{className:`viewer-tooltip-title`,children:e.title}),(0,z.jsx)(`div`,{className:`viewer-tooltip-list`,children:e.items.map(e=>(0,z.jsxs)(`div`,{className:`viewer-tooltip-row`,children:[(0,z.jsx)(`strong`,{children:e.label}),(0,z.jsx)(`span`,{children:e.value}),e.pointKey&&(0,z.jsxs)(`small`,{children:[`Datenpunkt: `,e.pointKey]}),e.type&&(0,z.jsxs)(`small`,{children:[`Typ: `,e.type]}),e.group&&(0,z.jsxs)(`small`,{children:[`Gruppe: `,e.group]}),(0,z.jsxs)(`small`,{children:[`Zuletzt aktualisiert: `,e.updated]}),(0,z.jsxs)(`small`,{children:[`Qualität: `,e.quality??`Unbekannt`]})]},e.key))})]}),document.body):null}function bn({element:e,liveValues:t,tooltipsEnabled:n,onShowTooltip:r,onMoveTooltip:i,onHideTooltip:a}){let o=e.style_json?.attachedValues||[],s=e.style_json||{};return!Array.isArray(o)||o.length===0?null:(0,z.jsx)(z.Fragment,{children:o.slice(0,3).map((e,o)=>{let c=j(M(e,s),t),l=se(c,e.decimals??1),u=Number(e.fontSize||13),d=_n([e],t,s);return(0,z.jsxs)(`div`,{className:`attached-value`,style:{left:`${e.x??50}%`,top:`${e.y??100}%`,fontSize:`${u}px`},onPointerEnter:n&&d.length>0?t=>{t.stopPropagation(),r(t,d,e.label||c?.label||`Wert ${o+1}`)}:void 0,onPointerMove:n&&d.length>0?e=>{e.stopPropagation(),i(e)}:void 0,onPointerLeave:n&&d.length>0?e=>{e.stopPropagation(),a(e)}:void 0,children:[(0,z.jsx)(`span`,{style:{fontSize:`${Math.max(8,u-4)}px`},children:e.label||c?.raw_label||`Wert ${o+1}`}),(0,z.jsx)(`strong`,{style:{fontSize:`${u}px`},children:l})]},o)})})}function xn({pageId:e,element:t,point:n,canWrite:r,onWritten:i}){let[a,o]=(0,_.useState)(!1),[s,c]=(0,_.useState)(``),[l,u]=(0,_.useState)(!1);if(t.style_json?.kind!==`setpoint`||!r)return null;async function d(n){n.preventDefault(),u(!0);try{await U(`set_value`,{page_id:e,external_id:t.style_json?.point?.external_id||``,variable_id:t.style_json?.point?.variable_id||``,point_key:t.style_json?.point?.point_key||``,value:s}),o(!1),c(``),await i?.()}catch(e){alert(e.message)}finally{u(!1)}}return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`button`,{type:`button`,className:`setpoint-edit-btn`,onClick:e=>{e.stopPropagation(),o(!0)},children:`✎`}),a&&(0,z.jsx)(`div`,{className:`setpoint-popover`,onPointerDown:e=>e.stopPropagation(),children:(0,z.jsxs)(`form`,{onSubmit:d,children:[(0,z.jsx)(`div`,{className:`small-title`,children:`Sollwert schreiben`}),(0,z.jsx)(`div`,{className:`small-muted`,children:t.label}),(0,z.jsx)(`input`,{className:`form-input`,value:s,onChange:e=>c(e.target.value),placeholder:String(n?.value??``),autoFocus:!0}),(0,z.jsxs)(`div`,{className:`setpoint-actions`,children:[(0,z.jsx)(`button`,{className:`btn small primary`,disabled:l,children:l?`…`:`Schreiben`}),(0,z.jsx)(`button`,{type:`button`,className:`btn small`,onClick:()=>o(!1),children:`Abbrechen`})]})]})})]})}function Sn({pageId:e,element:t,liveValue:n,liveValues:r,canWriteSetpoints:i,onSetpointWritten:a,tooltipsEnabled:o,onShowTooltip:s,onMoveTooltip:c,onHideTooltip:l,onExpandTrend:u,trendRange:d,trendCustomRange:f,onTrendRangeChange:p}){let m=t.style_json||{},h=m.color||`#60a5fa`,g=`translate(${t.x}px, ${t.y}px) rotate(${t.rotation||0}deg)`;if(!ie(t,r))return null;let _=vn(t,r),v=t.label||t.name||`Datenpunkt`,y=o&&_.length>0?{onPointerEnter:e=>s(e,_,v),onPointerMove:c,onPointerLeave:l}:{};return(0,z.jsxs)(`div`,{className:`canvas-element`,style:{width:t.w,height:t.h,transform:g,zIndex:t.z_index||10,opacity:t.opacity??1},...y,children:[t.element_type===`asset`&&(0,z.jsxs)(z.Fragment,{children:[(()=>{let e=cn(t,r);return e.image?(0,z.jsx)(`img`,{className:`asset-canvas-image`,src:e.image,alt:t.label||t.name||``,draggable:!1}):e.hasState?null:(0,z.jsx)(`div`,{className:`asset-missing`,children:`Kein Zustand`})})(),(0,z.jsx)(bn,{element:t,liveValues:r,tooltipsEnabled:o,onShowTooltip:s,onMoveTooltip:c,onHideTooltip:l})]}),t.element_type===`text`&&(0,z.jsx)(xt,{element:t,liveValues:r,interactive:!0}),t.element_type===`value`&&m.kind===`trend_chart`&&(0,z.jsx)(Ft,{element:t,interactive:!0,tooltipsEnabled:o,timeRange:d,customTimeRange:f,controlsMode:`global`,onTimeRangeChange:p,onShowTooltip:s,onMoveTooltip:c,onHideTooltip:l,onExpand:u}),t.element_type===`value`&&m.kind===`sankey_chart`&&(0,z.jsx)(Vt,{element:t,liveValues:r}),t.element_type===`value`&&[`scale_bar`,`dial_gauge`].includes(m.kind)&&(0,z.jsx)(Ce,{element:t,liveValues:r}),t.element_type===`value`&&![`scale_bar`,`dial_gauge`,`trend_chart`,`sankey_chart`].includes(m.kind)&&(0,z.jsxs)(`div`,{className:`sensor-element ${m.kind===`setpoint`?`is-setpoint`:``}`,style:{borderColor:m.strokeColor||h,background:m.kind===`setpoint`?ce(m):void 0},children:[(0,z.jsx)(`div`,{className:`sensor-marker`,style:{background:m.markerColor||h},children:m.marker||(m.kind===`setpoint`?`SP`:`T`)}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`sensor-label`,children:t.label||(m.kind===`setpoint`?`Sollwert`:`Fühler`)}),(0,z.jsx)(`div`,{className:`sensor-value`,children:mn(n,m)})]}),(0,z.jsx)(xn,{pageId:e,element:t,point:n,canWrite:i,onWritten:a})]}),t.element_type===`shape`&&(0,z.jsx)(dt,{element:t,liveValues:r})]})}function Cn({currentPageId:e,canDesign:t,onToggle:n}){let[r,i]=(0,_.useState)([]),[a,o]=(0,_.useState)(``),[s,c]=(0,_.useState)({}),[l,u]=(0,_.useState)(``);(0,_.useEffect)(()=>{H(`pages`).then(t=>{let n=t.pages||[];i(n);let r=n.find(t=>Number(t.id)===Number(e));r?.project_id&&c(e=>({...e,[r.project_id]:!0}))}).catch(e=>u(e.message))},[e]);let d=(0,_.useMemo)(()=>{let e=a.trim().toLowerCase();return e?r.filter(t=>[t.name,t.description,t.year,t.project_number,t.project_name,t.customer_name].filter(Boolean).join(` `).toLowerCase().includes(e)):r},[r,a]),f=(0,_.useMemo)(()=>oe(d),[d]);function p(e){c(t=>({...t,[e]:!t[e]}))}return l?(0,z.jsx)(`aside`,{className:`viewer-tree`,children:(0,z.jsx)(`div`,{className:`tiny-error`,children:l})}):(0,z.jsxs)(`aside`,{className:`viewer-tree`,children:[(0,z.jsx)(`div`,{className:`viewer-tree-title`,children:`Visualisierungen`}),(0,z.jsx)(`input`,{className:`form-input viewer-tree-search`,value:a,onChange:e=>o(e.target.value),placeholder:`Projekt oder Bild suchen…`}),f.length===0&&(0,z.jsx)(`div`,{className:`empty-mini`,children:`Keine sichtbaren Visualisierungen gefunden.`}),(0,z.jsx)(`div`,{className:`viewer-tree-project-list`,children:f.map(n=>{let r=!!s[n.project_id];return(0,z.jsxs)(`div`,{className:`viewer-tree-project-block ${n.pages.some(t=>Number(t.id)===Number(e))?`has-current-page`:``}`,children:[(0,z.jsxs)(`button`,{type:`button`,className:`viewer-tree-project-toggle`,onClick:()=>p(n.project_id),children:[(0,z.jsx)(`span`,{className:`viewer-tree-arrow`,children:r?`▾`:`▸`}),(0,z.jsxs)(`span`,{className:`viewer-tree-project-text`,children:[(0,z.jsxs)(`strong`,{children:[n.year,` · `,n.project_number]}),(0,z.jsx)(`small`,{children:n.project_name}),n.customer_name&&(0,z.jsx)(`small`,{className:`viewer-tree-customer`,children:n.customer_name})]}),(0,z.jsx)(`em`,{children:n.pages.length})]}),r&&(0,z.jsx)(`div`,{className:`viewer-tree-list`,children:n.pages.map(n=>(0,z.jsxs)(`div`,{className:`viewer-tree-row ${Number(n.id)===Number(e)?`active`:``}`,children:[(0,z.jsxs)(`a`,{href:`/visu/?mode=viewer&page_id=${n.id}`,children:[(0,z.jsx)(`span`,{children:n.name}),(0,z.jsxs)(`small`,{children:[n.width,`×`,n.height]})]}),t&&(0,z.jsx)(`a`,{className:`viewer-tree-edit`,href:`/visu/?mode=designer&page_id=${n.id}`,title:`Bearbeiten`,children:`✏️`})]},n.id))})]},n.project_id)})}),(0,z.jsx)(`button`,{type:`button`,className:`viewer-tree-collapse`,title:`Liste einklappen`,onClick:n,children:`◂`})]})}function wn({pageId:e}){let t=(0,_.useRef)(null),n=(0,_.useRef)(null),r=(0,_.useRef)(null),i=(0,_.useRef)(!1),[a,o]=(0,_.useState)(null),[s,c]=(0,_.useState)([]),[l,u]=(0,_.useState)({}),[d,f]=(0,_.useState)(!1),[p,m]=(0,_.useState)(!1),[h,g]=(0,_.useState)(``),[v,y]=(0,_.useState)(!!e),[b,x]=(0,_.useState)(!0),[S,C]=(0,_.useState)(1),[w,T]=(0,_.useState)(!1),[E,D]=(0,_.useState)(ln),[O,te]=(0,_.useState)(un),[k,A]=(0,_.useState)(null),[re,N]=(0,_.useState)(null),[P,ie]=(0,_.useState)(dn),[F,I]=(0,_.useState)(null);(0,_.useEffect)(()=>{Ut(e)},[e]);async function L(){if(!i.current){i.current=!0;try{let t=await H(`live_values`,{page_id:e});u(t.values||{}),f(!!t.can_write_setpoints)}finally{i.current=!1}}}(0,_.useEffect)(()=>{if(!e){y(!1);return}N(null),H(`page`,{id:e}).then(async e=>{let t=await Qt((e.elements||[]).map(ee),e=>H(`template`,{id:e})),n=t.find(e=>e.element_type===`value`&&e.style_json?.kind===`trend_chart`);o(ne(e.page||{})),c(t),ie(n?.style_json?.range||dn()),I(null),f(!!e.can_write_setpoints),m(!!e.can_design)}).catch(e=>g(e.message)).finally(()=>y(!1))},[e]),(0,_.useEffect)(()=>{if(!e)return;let t=!1;async function n(){if(!i.current){i.current=!0;try{let n=await H(`live_values`,{page_id:e});t||(u(n.values||{}),f(!!n.can_write_setpoints))}catch{}finally{i.current=!1}}}n();let r=setInterval(n,1e4);return()=>{t=!0,clearInterval(r)}},[e]),(0,_.useEffect)(()=>{if(!a||!t.current)return;function e(){let e=t.current;if(!e)return;let n=Math.max(120,e.clientWidth-40),r=Math.max(120,e.clientHeight-40),i=n/Math.max(1,Number(a.width||1)),o=r/Math.max(1,Number(a.height||1));C(Math.max(.08,Math.min(2.5,Math.min(i,o))))}e();let n=new ResizeObserver(e);return n.observe(t.current),window.addEventListener(`resize`,e),()=>{n.disconnect(),window.removeEventListener(`resize`,e)}},[a?.id,a?.width,a?.height,b,w]),(0,_.useEffect)(()=>{try{sessionStorage.setItem($t,E?`1`:`0`)}catch{}},[E]),(0,_.useEffect)(()=>{try{sessionStorage.setItem(en,O)}catch{}},[O]),(0,_.useEffect)(()=>{E||A(null)},[E]),(0,_.useEffect)(()=>{!E||O===`cursor`||A(e=>e&&{...e,...ae(null)})},[O,S,b,w,E]),(0,_.useEffect)(()=>{try{sessionStorage.setItem(an,P)}catch{}},[P]);function R(e){if(e?.customRange){I(e.customRange);return}ie(e?.range||`24h`),I(null)}function ae(e){let r={left:8,top:8,right:window.innerWidth-8,bottom:window.innerHeight-8};if(O===`cursor`&&e){let t=e.clientX+rn,n=e.clientY+rn;return t+tn>r.right&&(t=e.clientX-tn-rn),n+nn>r.bottom&&(n=e.clientY-nn-rn),{x:sn(t,r.left,Math.max(r.left,r.right-tn)),y:sn(n,r.top,Math.max(r.top,r.bottom-nn)),align:`left`}}let i=n.current?.getBoundingClientRect(),a=t.current?.getBoundingClientRect(),o=i&&a?{left:Math.max(i.left,a.left),top:Math.max(i.top,a.top),right:Math.min(i.right,a.right),bottom:Math.min(i.bottom,a.bottom)}:i||a;if(!o)return{x:r.left+rn,y:r.top+rn,align:`left`};let s=Math.max(r.left,o.left+rn),c=Math.min(r.right,o.right-rn),l=Math.max(r.top,o.top+rn);return{x:sn(O===`corner-right`?c-tn:s,r.left,Math.max(r.left,r.right-tn)),y:sn(l,r.top,Math.max(r.top,r.bottom-nn)),align:`left`}}function oe(e,t,n=``){!E||!Array.isArray(t)||t.length===0||A({...ae(e),title:n,items:t})}function se(e){O===`cursor`&&A(t=>t&&{...t,...ae(e)})}function ce(){A(null)}function le(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.click(),setTimeout(()=>URL.revokeObjectURL(n),1e3)}function B(e,t){if(!(e instanceof Element)||!(t instanceof Element))return;let n=window.getComputedStyle(e);t.setAttribute(`style`,Array.from(n).map(e=>`${e}:${n.getPropertyValue(e)};`).join(``)),Array.from(e.children).forEach((e,n)=>{B(e,t.children[n])})}function ue(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t(r.result),r.onerror=()=>n(Error(`Bild konnte nicht eingebettet werden.`)),r.readAsDataURL(e)})}async function de(e){if(!e||e.startsWith(`data:`))return e;let t=new URL(e,window.location.href).toString(),n=await fetch(t,{credentials:`same-origin`});if(!n.ok)throw Error(`Bild konnte nicht geladen werden.`);return ue(await n.blob())}async function fe(e){let t=Array.from(e.querySelectorAll(`img`));await Promise.all(t.map(async e=>{let t=e.getAttribute(`src`)||e.src;if(!(!t||t.startsWith(`data:`)))try{e.setAttribute(`src`,await de(t))}catch{}}));let n=[e,...Array.from(e.querySelectorAll(`*`))];await Promise.all(n.map(async e=>{let t=e.style?.backgroundImage||``,n=t.match(/url\(["']?([^"')]+)["']?\)/)?.[1];if(!(!n||n.startsWith(`data:`)))try{e.style.backgroundImage=t.replace(n,await de(n))}catch{}}))}function pe(e){let t=new Uint8Array(e.length);for(let n=0;n> endobj `,`2 0 obj << /Type /Pages /Count 1 /Kids [3 0 R] >> endobj `,`3 0 obj\n<< /Type /Page /Parent 2 0 R /MediaBox [0 0 ${i} ${a}] /Resources << /XObject << /Im0 4 0 R >> >> /Contents 5 0 R >>\nendobj\n`,`4 0 obj\n<< /Type /XObject /Subtype /Image /Width ${t} /Height ${n} /ColorSpace /DeviceRGB /BitsPerComponent 8 /Filter /DCTDecode /Length ${r.length} >>\nstream\n${r}\nendstream\nendobj\n`,`5 0 obj\n<< /Length ${`q\n${i} 0 0 ${a} 0 0 cm\n/Im0 Do\nQ\n`.length} >>\nstream\nq\n${i} 0 0 ${a} 0 0 cm\n/Im0 Do\nQ\nendstream\nendobj\n`],s=`%PDF-1.4 `,c=[0];o.forEach(e=>{c.push(s.length),s+=e});let l=s.length;return s+=`xref\n0 ${o.length+1}\n0000000000 65535 f \n`,c.slice(1).forEach(e=>{s+=`${String(e).padStart(10,`0`)} 00000 n \n`}),s+=`trailer\n<< /Size ${o.length+1} /Root 1 0 R >>\nstartxref\n${l}\n%%EOF`,new Blob([pe(s)],{type:`application/pdf`})}async function he(){let e=r.current;if(!e||!a)throw Error(`Canvas nicht gefunden.`);let t=e.cloneNode(!0);B(e,t),t.setAttribute(`xmlns`,`http://www.w3.org/1999/xhtml`),t.style.transform=`none`,t.style.width=`${a.width}px`,t.style.height=`${a.height}px`,await fe(t);let n=` ${new XMLSerializer().serializeToString(t)} `,i=new Image;i.decoding=`async`,i.src=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(n)}`,await new Promise((e,t)=>{i.onload=e,i.onerror=()=>t(Error(`Canvas-Export konnte nicht gerendert werden.`))});let o=document.createElement(`canvas`);return o.width=a.width,o.height=a.height,o.getContext(`2d`).drawImage(i,0,0),o}async function ge(e){try{let t=await he(),n=(a?.name||`visualisierung`).replace(/[^a-z0-9_-]+/gi,`_`);if(e===`pdf`){le(me(t.toDataURL(`image/jpeg`,.92),t.width,t.height),`${n}.pdf`);return}let r=e===`jpg`?`image/jpeg`:`image/png`,i=e===`jpg`?`jpg`:`png`;t.toBlob(e=>{e&&le(e,`${n}.${i}`)},r,.92)}catch(e){alert(e.message||`Export fehlgeschlagen.`)}}function _e(e=`,`){let t=hn(l),n=[[`Label`,`Wert`,`Einheit`,`Typ`,`Gruppe`,`Datenpunkt`,`Quelle`,`Qualitaet`,`Alter Sekunden`].map(t=>gn(t,e)).join(e),...t.map(t=>[t.label||t.raw_label||``,t.value??t.value_formatted??``,t.unit||``,t.type||``,t.group||``,t.point_key||``,t.external_id||``,t.quality||``,t.age_s??``].map(t=>gn(t,e)).join(e))];le(new Blob([`\uFEFF${n.join(`\r `)}`],{type:`text/csv;charset=utf-8`}),`${(a?.name||`visualisierung`).replace(/[^a-z0-9_-]+/gi,`_`)}_werte.csv`)}return(0,z.jsx)(`div`,{className:`page-shell full viewer-full`,children:(0,z.jsxs)(`section`,{className:`glass-card visu-workspace viewer-workspace ${w?`focus-mode`:``}`,children:[!w&&(0,z.jsxs)(`div`,{className:`section-head visu-topbar`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`eyebrow`,children:`Viewer`}),(0,z.jsx)(`h1`,{children:a?.name||`Visualisierung #${e||`?`}`}),a&&(0,z.jsxs)(`p`,{className:`subline`,children:[a.year,` · `,a.project_number,` · `,a.project_name]})]}),(0,z.jsxs)(`div`,{className:`designer-actions`,children:[(0,z.jsx)(`button`,{type:`button`,className:`btn`,title:`Canvas maximieren`,onClick:()=>{T(!0),x(!1)},children:`⤢`}),(0,z.jsxs)(`div`,{className:`viewer-trend-timebar`,children:[(0,z.jsx)(`span`,{children:`Trendzeit`}),(0,z.jsxs)(`select`,{className:`form-input viewer-trend-range-select`,value:F?`custom`:P,onChange:e=>R({range:e.target.value}),children:[F&&(0,z.jsx)(`option`,{value:`custom`,children:`Auswahl`}),on.map(e=>(0,z.jsx)(`option`,{value:e.value,children:e.label},e.value))]}),F&&(0,z.jsx)(`button`,{type:`button`,className:`btn small`,onClick:()=>R({range:P}),children:`Reset`})]}),(0,z.jsxs)(`details`,{className:`export-menu`,children:[(0,z.jsx)(`summary`,{className:`btn`,children:`Export`}),(0,z.jsxs)(`div`,{className:`export-menu-panel`,children:[(0,z.jsx)(`button`,{type:`button`,className:`mini-btn`,onClick:()=>ge(`png`),children:`PNG`}),(0,z.jsx)(`button`,{type:`button`,className:`mini-btn`,onClick:()=>ge(`jpg`),children:`JPG`}),(0,z.jsx)(`button`,{type:`button`,className:`mini-btn`,onClick:()=>ge(`pdf`),children:`PDF`}),(0,z.jsx)(`button`,{type:`button`,className:`mini-btn`,onClick:()=>_e(`,`),children:`Werte CSV (,)`}),(0,z.jsx)(`button`,{type:`button`,className:`mini-btn`,onClick:()=>_e(`;`),children:`Werte CSV (;)`})]})]}),(0,z.jsxs)(`button`,{type:`button`,className:`btn ${E?`primary`:``}`,onClick:()=>D(e=>!e),children:[`Tooltips `,E?`an`:`aus`]}),(0,z.jsxs)(`select`,{className:`form-input viewer-tooltip-position-select`,value:O,onChange:e=>te(e.target.value),title:`Tooltip-Position`,children:[(0,z.jsx)(`option`,{value:`cursor`,children:`Tooltip an Maus`}),(0,z.jsx)(`option`,{value:`corner-left`,children:`Canvas oben links`}),(0,z.jsx)(`option`,{value:`corner-right`,children:`Canvas oben rechts`})]}),(0,z.jsx)(`a`,{href:`/visu/?mode=dashboard`,className:`btn`,children:`Dashboard`}),(0,z.jsx)(`a`,{href:`/visu/?mode=manage`,className:`btn`,children:`Verwaltung`}),(0,z.jsx)(`a`,{href:`/visu/?mode=templates`,className:`btn`,children:`Templates`}),(0,z.jsx)(`a`,{href:`/visu/?mode=monitoring`,className:`btn`,children:`Datenpunkte`}),(0,z.jsx)(`a`,{href:`/visu/?mode=virtual_points`,className:`btn`,children:`Virtuelle Datenpunkte`}),(0,z.jsx)(`a`,{href:`/visu/?mode=csv_exports`,className:`btn`,children:`CSV Exporte`}),(0,z.jsx)(`a`,{href:`/visu/?mode=viewer&page_id=${e}`,className:`btn primary`,children:`Anzeigen`}),e>0&&p&&(0,z.jsx)(`a`,{href:`/visu/?mode=designer&page_id=${e}`,className:`btn`,children:`✏️ Bearbeiten`})]})]}),v&&(0,z.jsx)(`div`,{className:`empty-box`,children:`Visualisierung wird geladen…`}),h&&(0,z.jsx)(`div`,{className:`error-box`,children:h}),a&&(0,z.jsxs)(`div`,{className:`viewer-layout ${b&&!w?``:`tree-collapsed`} ${w?`focus-active`:``}`,children:[b&&!w&&(0,z.jsx)(Cn,{currentPageId:e,canDesign:p,onToggle:()=>x(!1)}),(0,z.jsxs)(`div`,{ref:t,className:`viewer-scroll`,children:[w&&(0,z.jsx)(`button`,{type:`button`,className:`viewer-focus-toggle`,title:`Canvasansicht verlassen`,onClick:()=>T(!1),children:`⤡`}),!b&&(0,z.jsx)(`button`,{type:`button`,className:`viewer-tree-collapse viewer-tree-collapse-floating`,title:`Liste einblenden`,onClick:()=>x(!0),children:`▸`}),(0,z.jsx)(`div`,{className:`viewer-stage`,children:(0,z.jsx)(`div`,{ref:n,className:`viewer-fit-plane`,style:{width:`${a.width*S}px`,height:`${a.height*S}px`},children:(0,z.jsxs)(`div`,{ref:r,className:`viewer-canvas ${a?.grid_enabled?`grid-on`:`grid-off`}`,style:{width:`${a.width}px`,height:`${a.height}px`,transform:`scale(${S})`,backgroundColor:a?.background_color||`#0f172a`,backgroundImage:a?.background_image?`url(${a.background_image})`:void 0,"--grid-size":`${a?.grid_size||40}px`},children:[s.map(t=>{let n=t.style_json||{},r=n.point?M(n.point,n):null;return(0,z.jsx)(Sn,{pageId:e,element:t,liveValue:(r?j(r,l):null)||j(t,l),liveValues:l,canWriteSetpoints:d,onSetpointWritten:L,tooltipsEnabled:E,onShowTooltip:oe,onMoveTooltip:se,onHideTooltip:ce,onExpandTrend:e=>N(e),trendRange:P,trendCustomRange:F,onTrendRangeChange:R},t.id)}),re&&(0,z.jsxs)(`div`,{className:`trend-expanded-canvas`,style:{width:a.width,height:a.height,zIndex:999999},children:[(0,z.jsx)(Ft,{element:{...re,w:a.width,h:a.height},interactive:!0,tooltipsEnabled:E,timeRange:P,customTimeRange:F,controlsMode:`global`,onTimeRangeChange:R,onShowTooltip:oe,onMoveTooltip:se,onHideTooltip:ce,onExpand:()=>{}}),(0,z.jsx)(`button`,{type:`button`,className:`trend-expanded-close`,onClick:()=>N(null),children:`×`})]})]})})})]})]}),(0,z.jsx)(yn,{tooltip:k})]})})}function Tn(e){return`${e}-${Date.now()}-${Math.round(Math.random()*1e5)}`}function En(e){return[`influx`,e.database||``,e.measurement||``,e.tag_key||``,e.tag_value||``].join(`|`)}function Dn(e){return String(e?.measurement||``).trim()}function On(e){return e?{type:e.type||``,variable_type:e.type||e.variable_type||``,external_id:e.external_id||``,variable_id:e.variable_id||``,point_key:e.point_key||``,point_label:e.label||e.point_label||``,label:e.label||e.point_label||``,source_key:e.source_key||k(e)}:null}function kn(e){return[`#38bdf8`,`#0ea5e9`,`#22c55e`,`#f59e0b`,`#f97316`,`#a78bfa`,`#ef4444`,`#14b8a6`][e%8]}function An({projectId:e,value:t,onChange:n,disabled:r=!1}){let[i,a]=(0,_.useState)([]),[o,s]=(0,_.useState)(``),[c,l]=(0,_.useState)(!1);(0,_.useEffect)(()=>{if(!e){a([]);return}let t=!0;return l(!0),H(`project_values`,{project_id:e}).then(e=>{t&&a(e.values||[])}).catch(()=>{t&&a([])}).finally(()=>{t&&l(!1)}),()=>{t=!1}},[e]);let u=(0,_.useMemo)(()=>i.filter(e=>[e.type,e.label,e.point_key,e.variable_id,e.value_formatted,e.group].filter(Boolean).join(` `).toLowerCase().includes(o.trim().toLowerCase())),[i,o]);function d(e){let t=i.find(t=>t.source_key===e);n(t?On(t):null)}return(0,z.jsxs)(`div`,{className:`field compact-field`,children:[(0,z.jsx)(`label`,{children:`API / VDP Quelle`}),(0,z.jsx)(`input`,{className:`form-input`,disabled:r,value:o,onChange:e=>s(e.target.value),placeholder:c?`Laedt...`:`Datenpunkt suchen`}),(0,z.jsxs)(`select`,{className:`form-input`,disabled:r||c,value:t||``,onChange:e=>d(e.target.value),children:[(0,z.jsx)(`option`,{value:``,children:`Quelle waehlen`}),u.slice(0,500).map(e=>(0,z.jsx)(`option`,{value:e.source_key,children:e.label},e.source_key))]})]})}function jn({value:e,onChange:t,disabled:n=!1}){let[r,i]=(0,_.useState)([]),[a,o]=(0,_.useState)(e?.database||``),[s,c]=(0,_.useState)([]),[l,u]=(0,_.useState)(``),[d,f]=(0,_.useState)(e?.measurement||``),[p,m]=(0,_.useState)(!1);(0,_.useEffect)(()=>{let e=!0;return m(!0),H(`trend_sources`,{database:a}).then(t=>{e&&(i(t.databases||[]),o(e=>e||t.selected_database||t.databases?.[0]||``),c(t.points||[]))}).catch(()=>{e&&(i([]),c([]))}).finally(()=>{e&&m(!1)}),()=>{e=!1}},[a]);let h=(0,_.useMemo)(()=>Array.from(new Set(s.map(Dn).filter(Boolean))).sort((e,t)=>e.localeCompare(t,`de`,{numeric:!0,sensitivity:`base`})),[s]),g=(0,_.useMemo)(()=>s.filter(e=>{let t=`${e.measurement} ${e.tag_key} ${e.tag_value} ${e.label}`.toLowerCase(),n=!l.trim()||t.includes(l.trim().toLowerCase()),r=!d||Dn(e)===d;return n&&r}),[s,l,d]);function v(e){let n=s.find(t=>En(t)===e);t(n?{database:n.database,measurement:n.measurement,tag_key:n.tag_key,tag_value:n.tag_value,label:n.label||n.tag_value}:null)}return(0,z.jsxs)(`div`,{className:`sankey-influx-picker`,children:[(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsxs)(`div`,{className:`field compact-field`,children:[(0,z.jsx)(`label`,{children:`Influx DB`}),(0,z.jsxs)(`select`,{className:`form-input`,disabled:n||p,value:a,onChange:e=>o(e.target.value),children:[(0,z.jsx)(`option`,{value:``,children:`DB waehlen`}),r.map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))]})]}),(0,z.jsxs)(`div`,{className:`field compact-field`,children:[(0,z.jsx)(`label`,{children:`Measurement`}),(0,z.jsxs)(`select`,{className:`form-input`,disabled:n||p,value:d,onChange:e=>f(e.target.value),children:[(0,z.jsx)(`option`,{value:``,children:`Alle Measurements`}),h.map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))]})]})]}),(0,z.jsxs)(`div`,{className:`field compact-field`,children:[(0,z.jsx)(`label`,{children:`Influx Quelle`}),(0,z.jsx)(`input`,{className:`form-input`,disabled:n,value:l,onChange:e=>u(e.target.value),placeholder:p?`Laedt...`:`Measurement / Tag suchen`}),(0,z.jsxs)(`select`,{className:`form-input`,disabled:n||p,value:e?En(e):``,onChange:e=>v(e.target.value),children:[(0,z.jsx)(`option`,{value:``,children:`Influx Punkt waehlen`}),g.slice(0,500).map(e=>(0,z.jsxs)(`option`,{value:En(e),children:[e.measurement,` - `,e.tag_value]},En(e)))]})]})]})}function Mn({selected:e,page:t,onChange:n,disabled:r=!1}){let i=e?.style_json||{};if(!e||e.element_type!==`value`||i.kind!==`sankey_chart`)return null;let a=Array.isArray(i.nodes)?i.nodes:[],o=Array.isArray(i.links)?i.links:[];function s(t){n({...e,style_json:{...i,...t}})}function c(e,t){let n=[...a];n[e]={...n[e],...t},s({nodes:n})}function l(){let e=a.reduce((e,t)=>Math.max(e,Number(t.column??0)),0);s({nodes:[...a,{id:Tn(`sankey-node`),label:`Knoten ${a.length+1}`,column:a.length?e+1:0,order:a.length,color:kn(a.length)}]})}function u(e){let t=a.filter((t,n)=>n!==e),n=a[e]?.id;s({nodes:t,links:o.filter(e=>e.sourceId!==n&&e.targetId!==n)})}function d(e,t){let n=[...o];n[e]={...n[e],...t},s({links:n})}function f(){s({links:[...o,{id:Tn(`sankey-link`),sourceId:a[0]?.id||``,targetId:a[1]?.id||a[0]?.id||``,label:`Section ${o.length+1}`,sourceMode:`static`,staticValue:`10`,point:null,influx:null,color:`#38bdf8`,opacity:Number(i.linkOpacity??.46),thicknessFactor:1}]})}function p(e){s({links:o.filter((t,n)=>n!==e)})}let m=o.filter(e=>e.sourceMode===`influx`).length,h=o.filter(e=>e.sourceMode===`point`).length;return(0,z.jsxs)(`div`,{className:`sankey-editor`,children:[(0,z.jsxs)(`div`,{className:`sankey-overview-strip`,children:[(0,z.jsxs)(`div`,{className:`sankey-overview-card`,children:[(0,z.jsx)(`span`,{children:`Knoten`}),(0,z.jsx)(`strong`,{children:a.length})]}),(0,z.jsxs)(`div`,{className:`sankey-overview-card`,children:[(0,z.jsx)(`span`,{children:`Sections`}),(0,z.jsx)(`strong`,{children:o.length})]}),(0,z.jsxs)(`div`,{className:`sankey-overview-card`,children:[(0,z.jsx)(`span`,{children:`API / VDP`}),(0,z.jsx)(`strong`,{children:h})]}),(0,z.jsxs)(`div`,{className:`sankey-overview-card`,children:[(0,z.jsx)(`span`,{children:`Influx`}),(0,z.jsx)(`strong`,{children:m})]})]}),(0,z.jsxs)(`div`,{className:`sankey-control-grid`,children:[(0,z.jsxs)(`div`,{className:`sankey-control-card`,children:[(0,z.jsx)(`div`,{className:`small-title`,children:`Daten`}),(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Aktualisierung (s)`}),(0,z.jsx)(`input`,{disabled:r,type:`number`,min:`0`,value:Number(i.refreshSeconds??30),onChange:e=>s({refreshSeconds:Math.max(0,Number(e.target.value||0))})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Nachkommastellen`}),(0,z.jsx)(`input`,{disabled:r,type:`number`,min:`0`,max:`8`,value:Number(i.decimals??1),onChange:e=>s({decimals:Math.max(0,Math.min(8,Number(e.target.value||0)))})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Einheit`}),(0,z.jsx)(`input`,{disabled:r,value:i.unit||``,onChange:e=>s({unit:e.target.value}),placeholder:`z.B. kW`})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Eckenradius`}),(0,z.jsx)(`input`,{disabled:r,type:`number`,min:`0`,max:`40`,value:Number(i.radius??14),onChange:e=>s({radius:Number(e.target.value||14)})})]})]})]}),(0,z.jsxs)(`div`,{className:`sankey-control-card`,children:[(0,z.jsx)(`div`,{className:`small-title`,children:`Look and Feel`}),(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsxs)(`div`,{className:`field compact-field`,children:[(0,z.jsx)(`label`,{children:`Hintergrund`}),(0,z.jsx)(`input`,{disabled:r,type:`color`,value:i.backgroundColorHex||`#0f172a`,onChange:e=>s({backgroundColor:e.target.value,backgroundColorHex:e.target.value})})]}),(0,z.jsxs)(`div`,{className:`field compact-field`,children:[(0,z.jsx)(`label`,{children:`Rahmen`}),(0,z.jsx)(`input`,{disabled:r,type:`color`,value:i.borderColorHex||`#94a3b8`,onChange:e=>s({borderColor:e.target.value,borderColorHex:e.target.value})})]}),(0,z.jsxs)(`div`,{className:`field compact-field`,children:[(0,z.jsx)(`label`,{children:`Textfarbe`}),(0,z.jsx)(`input`,{disabled:r,type:`color`,value:i.labelColor||`#e2e8f0`,onChange:e=>s({labelColor:e.target.value})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Kurve`}),(0,z.jsx)(`input`,{disabled:r,type:`range`,min:`0.15`,max:`0.6`,step:`0.01`,value:Number(i.curve??.42),onChange:e=>s({curve:Number(e.target.value)})})]})]}),(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Link Deckkraft`}),(0,z.jsx)(`input`,{disabled:r,type:`range`,min:`0.1`,max:`1`,step:`0.05`,value:Number(i.linkOpacity??.46),onChange:e=>s({linkOpacity:Number(e.target.value)})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Knoten Deckkraft`}),(0,z.jsx)(`input`,{disabled:r,type:`range`,min:`0.2`,max:`1`,step:`0.05`,value:Number(i.nodeOpacity??.9),onChange:e=>s({nodeOpacity:Number(e.target.value)})})]})]}),(0,z.jsxs)(`label`,{className:`check-line`,children:[(0,z.jsx)(`input`,{disabled:r,type:`checkbox`,checked:i.showValues!==!1,onChange:e=>s({showValues:e.target.checked})}),`Werte / Labels anzeigen`]}),(0,z.jsxs)(`label`,{className:`check-line`,children:[(0,z.jsx)(`input`,{disabled:r,type:`checkbox`,checked:i.showLegend!==!1,onChange:e=>s({showLegend:e.target.checked})}),`Legende anzeigen`]})]}),(0,z.jsxs)(`div`,{className:`sankey-control-card`,children:[(0,z.jsx)(`div`,{className:`small-title`,children:`Geometrie`}),(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Knotenbreite`}),(0,z.jsx)(`input`,{disabled:r,type:`number`,min:`12`,max:`80`,value:Number(i.nodeWidth??26),onChange:e=>s({nodeWidth:Number(e.target.value||26)})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Knotenradius`}),(0,z.jsx)(`input`,{disabled:r,type:`number`,min:`0`,max:`40`,value:Number(i.nodeRadius??10),onChange:e=>s({nodeRadius:Number(e.target.value||10)})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Knotenabstand`}),(0,z.jsx)(`input`,{disabled:r,type:`number`,min:`4`,max:`80`,value:Number(i.nodeGap??14),onChange:e=>s({nodeGap:Number(e.target.value||14)})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Mindestdicke Fluss`}),(0,z.jsx)(`input`,{disabled:r,type:`number`,min:`1`,max:`40`,value:Number(i.minLinkWidth??4),onChange:e=>s({minLinkWidth:Number(e.target.value||4)})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Mindesthoehe Knoten`}),(0,z.jsx)(`input`,{disabled:r,type:`number`,min:`10`,max:`80`,value:Number(i.minNodeHeight??24),onChange:e=>s({minNodeHeight:Number(e.target.value||24)})})]})]})]})]}),(0,z.jsxs)(`div`,{className:`sankey-node-list`,children:[(0,z.jsxs)(`div`,{className:`sankey-section-head`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`small-title`,children:`Knoten`}),(0,z.jsx)(`div`,{className:`small-muted`,children:`Spalten und Reihenfolge bestimmen das Grundlayout.`})]}),(0,z.jsx)(`button`,{disabled:r,type:`button`,className:`btn small`,onClick:l,children:`+ Knoten`})]}),a.map((e,t)=>(0,z.jsxs)(`div`,{className:`sankey-node-row`,children:[(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsxs)(`div`,{className:`field compact-field`,children:[(0,z.jsx)(`label`,{children:`Name`}),(0,z.jsx)(`input`,{disabled:r,value:e.label||``,onChange:e=>c(t,{label:e.target.value})})]}),(0,z.jsxs)(`div`,{className:`field compact-field`,children:[(0,z.jsx)(`label`,{children:`Farbe`}),(0,z.jsx)(`input`,{disabled:r,type:`color`,value:e.color||`#38bdf8`,onChange:e=>c(t,{color:e.target.value})})]}),(0,z.jsxs)(`div`,{className:`field compact-field`,children:[(0,z.jsx)(`label`,{children:`Spalte`}),(0,z.jsx)(`input`,{disabled:r,type:`number`,min:`0`,max:`12`,value:Number(e.column??0),onChange:e=>c(t,{column:Number(e.target.value||0)})})]}),(0,z.jsxs)(`div`,{className:`field compact-field`,children:[(0,z.jsx)(`label`,{children:`Reihenfolge`}),(0,z.jsx)(`input`,{disabled:r,type:`number`,min:`0`,max:`99`,value:Number(e.order??t),onChange:e=>c(t,{order:Number(e.target.value||0)})})]})]}),(0,z.jsxs)(`div`,{className:`rule-footer`,children:[(0,z.jsx)(`span`,{children:e.id}),(0,z.jsx)(`button`,{disabled:r,type:`button`,className:`mini-btn danger`,onClick:()=>u(t),children:`Entfernen`})]})]},e.id||t)),a.length===0&&(0,z.jsx)(`div`,{className:`empty-mini`,children:`Noch keine Knoten vorhanden.`})]}),(0,z.jsxs)(`div`,{className:`sankey-link-list`,children:[(0,z.jsxs)(`div`,{className:`sankey-section-head`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`small-title`,children:`Sections / Fluesse`}),(0,z.jsx)(`div`,{className:`small-muted`,children:`Jede Section verbindet genau zwei Knoten und kann statisch, per API/VDP oder per Influx gespeist werden.`})]}),(0,z.jsx)(`button`,{disabled:r||a.length<2,type:`button`,className:`btn small`,onClick:f,children:`+ Section`})]}),o.map((e,n)=>(0,z.jsxs)(`div`,{className:`sankey-link-row`,children:[(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsxs)(`div`,{className:`field compact-field`,children:[(0,z.jsx)(`label`,{children:`Bezeichnung`}),(0,z.jsx)(`input`,{disabled:r,value:e.label||``,onChange:e=>d(n,{label:e.target.value}),placeholder:`z.B. Waermemenge`})]}),(0,z.jsxs)(`div`,{className:`field compact-field`,children:[(0,z.jsx)(`label`,{children:`Von`}),(0,z.jsxs)(`select`,{className:`form-input`,disabled:r,value:e.sourceId||``,onChange:e=>d(n,{sourceId:e.target.value}),children:[(0,z.jsx)(`option`,{value:``,children:`Knoten waehlen`}),a.map(e=>(0,z.jsx)(`option`,{value:e.id,children:e.label},e.id))]})]}),(0,z.jsxs)(`div`,{className:`field compact-field`,children:[(0,z.jsx)(`label`,{children:`Nach`}),(0,z.jsxs)(`select`,{className:`form-input`,disabled:r,value:e.targetId||``,onChange:e=>d(n,{targetId:e.target.value}),children:[(0,z.jsx)(`option`,{value:``,children:`Knoten waehlen`}),a.map(e=>(0,z.jsx)(`option`,{value:e.id,children:e.label},e.id))]})]}),(0,z.jsxs)(`div`,{className:`field compact-field`,children:[(0,z.jsx)(`label`,{children:`Quelle`}),(0,z.jsxs)(`select`,{className:`form-input`,disabled:r,value:e.sourceMode||`static`,onChange:e=>d(n,{sourceMode:e.target.value}),children:[(0,z.jsx)(`option`,{value:`static`,children:`Fester Wert`}),(0,z.jsx)(`option`,{value:`point`,children:`API / VDP`}),(0,z.jsx)(`option`,{value:`influx`,children:`Influx`})]})]}),(0,z.jsxs)(`div`,{className:`field compact-field`,children:[(0,z.jsx)(`label`,{children:`Farbe`}),(0,z.jsx)(`input`,{disabled:r,type:`color`,value:e.color||`#38bdf8`,onChange:e=>d(n,{color:e.target.value})})]}),(0,z.jsxs)(`div`,{className:`field compact-field`,children:[(0,z.jsx)(`label`,{children:`Dickenfaktor`}),(0,z.jsx)(`input`,{disabled:r,type:`number`,min:`0.25`,step:`0.25`,value:Number(e.thicknessFactor??1),onChange:e=>d(n,{thicknessFactor:Math.max(.25,Number(e.target.value||1))})})]}),(0,z.jsxs)(`div`,{className:`field compact-field`,children:[(0,z.jsx)(`label`,{children:`Deckkraft`}),(0,z.jsx)(`input`,{disabled:r,type:`range`,min:`0.1`,max:`1`,step:`0.05`,value:Number(e.opacity??i.linkOpacity??.46),onChange:e=>d(n,{opacity:Number(e.target.value)})})]})]}),e.sourceMode===`static`&&(0,z.jsxs)(`div`,{className:`field compact-field`,children:[(0,z.jsx)(`label`,{children:`Fester Wert`}),(0,z.jsx)(`input`,{disabled:r,value:e.staticValue??``,onChange:e=>d(n,{staticValue:e.target.value}),placeholder:`z.B. 125`})]}),e.sourceMode===`point`&&(0,z.jsx)(An,{projectId:t?.project_id,disabled:r,value:e.point?k(e.point):``,onChange:e=>d(n,{point:e})}),e.sourceMode===`influx`&&(0,z.jsx)(jn,{disabled:r,value:e.influx||null,onChange:e=>d(n,{influx:e})}),(0,z.jsxs)(`div`,{className:`rule-footer`,children:[(0,z.jsx)(`span`,{children:e.sourceMode===`point`?e.point?.point_label||e.point?.label||`API / VDP`:e.sourceMode===`influx`?e.influx?.label||e.influx?.tag_value||`Influx`:`Statisch`}),(0,z.jsx)(`button`,{disabled:r,type:`button`,className:`mini-btn danger`,onClick:()=>p(n),children:`Entfernen`})]})]},e.id||n)),o.length===0&&(0,z.jsx)(`div`,{className:`empty-mini`,children:`Noch keine Fluesse vorhanden.`})]})]})}var Nn=null,Pn=null;function Fn({projectId:e,value:t,onChange:n,onlyWritable:r=!1}){let[i,a]=(0,_.useState)([]),[o,s]=(0,_.useState)(``),[c,l]=(0,_.useState)(!1),[u,d]=(0,_.useState)(``);(0,_.useEffect)(()=>{if(!e){a([]);return}l(!0),d(``),H(`project_values`,{project_id:e}).then(e=>a(e.values||[])).catch(e=>d(e.message)).finally(()=>l(!1))},[e]);let f=i.filter(e=>r&&!e.writable?!1:[e.type,e.external_id,e.isp_number,e.label,e.point_key,e.variable_id,e.value_formatted,e.value].filter(Boolean).join(` `).toLowerCase().includes(o.toLowerCase()));function p(e){n(i.find(t=>t.source_key===e)||null)}return(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:r?`Sollwert suchen`:`Wert suchen`}),(0,z.jsx)(`input`,{value:o,onChange:e=>s(e.target.value),placeholder:`z.B. Temperatur, Druck, Sollwert…`,className:`form-input`}),(0,z.jsxs)(`select`,{value:t||``,onChange:e=>p(e.target.value),className:`form-input`,children:[(0,z.jsx)(`option`,{value:``,children:`Kein Wert`}),f.map(e=>(0,z.jsxs)(`option`,{value:e.source_key,children:[e.label,` `,e.value_formatted?`(${e.value_formatted})`:``]},e.source_key))]}),c&&(0,z.jsx)(`div`,{className:`small-muted`,children:`Werte werden geladen…`}),u&&(0,z.jsx)(`div`,{className:`tiny-error`,children:u})]})}function In({label:e,value:t,onChange:n}){let r=I(t),i=/^#[0-9a-fA-F]{6}$/.test(t||``)?t:`#000000`;function a(e){let t=S.find(t=>t.key===e.target.value);t?.value&&n(t.value)}return(0,z.jsxs)(`div`,{className:`color-editor`,children:[(0,z.jsx)(`label`,{children:e}),(0,z.jsxs)(`div`,{className:`color-main-row`,children:[(0,z.jsx)(`input`,{type:`color`,value:i,onChange:e=>n(e.target.value)}),(0,z.jsx)(`input`,{className:`form-input`,value:t||`#ffffff`,onChange:e=>n(e.target.value),placeholder:`#ffffff`})]}),(0,z.jsxs)(`div`,{className:`rgb-row`,children:[(0,z.jsx)(`input`,{value:r.r,onChange:e=>n(L(e.target.value,r.g,r.b))}),(0,z.jsx)(`input`,{value:r.g,onChange:e=>n(L(r.r,e.target.value,r.b))}),(0,z.jsx)(`input`,{value:r.b,onChange:e=>n(L(r.r,r.g,e.target.value))})]}),(0,z.jsx)(`select`,{className:`form-input`,onChange:a,value:``,children:S.map(e=>(0,z.jsx)(`option`,{value:e.key,children:e.label},e.key))})]})}function Ln({strokeColor:e,fillColor:t,onStroke:n,onFill:r}){return(0,z.jsxs)(`div`,{className:`color-pair-editor`,children:[(0,z.jsx)(In,{label:`Rahmen / Linie`,value:e||`#60a5fa`,onChange:n}),(0,z.jsxs)(`div`,{className:`color-copy-buttons`,children:[(0,z.jsx)(`button`,{type:`button`,onClick:()=>r(e||`#60a5fa`),title:`Rahmenfarbe zu Füllfarbe`,children:`↓`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>n(t||`#000000`),title:`Füllfarbe zu Rahmenfarbe`,children:`↑`})]}),(0,z.jsx)(In,{label:`Füllfarbe`,value:t||`#000000`,onChange:r})]})}function Rn({style:e,updateStyle:t,disabled:n=!1}){let r=e.strokeColor||e.color||`#60a5fa`,i=e.markerColor||e.color||`#f59e0b`,a=e.fillColor||`transparent`;return(0,z.jsxs)(`div`,{className:`sensor-color-editor`,children:[(0,z.jsx)(In,{label:`Rahmen`,value:r,onChange:e=>t(`strokeColor`,e)}),(0,z.jsxs)(`div`,{className:`sensor-copy-grid`,children:[(0,z.jsx)(`button`,{disabled:n,type:`button`,title:`Rahmen auf Punkt`,onClick:()=>t(`markerColor`,r),children:`R → P`}),(0,z.jsx)(`button`,{disabled:n,type:`button`,title:`Punkt auf Rahmen`,onClick:()=>t(`strokeColor`,i),children:`P → R`}),(0,z.jsx)(`button`,{disabled:n,type:`button`,title:`Rahmen auf Füllung`,onClick:()=>t(`fillColor`,r),children:`R → F`}),(0,z.jsx)(`button`,{disabled:n,type:`button`,title:`Füllung auf Rahmen`,onClick:()=>t(`strokeColor`,a),children:`F → R`}),(0,z.jsx)(`button`,{disabled:n,type:`button`,title:`Punkt auf Füllung`,onClick:()=>t(`fillColor`,i),children:`P → F`}),(0,z.jsx)(`button`,{disabled:n,type:`button`,title:`Füllung auf Punkt`,onClick:()=>t(`markerColor`,a),children:`F → P`})]}),(0,z.jsx)(In,{label:`Punkt`,value:i,onChange:e=>t(`markerColor`,e)}),(0,z.jsx)(In,{label:`Füllung`,value:a,onChange:e=>t(`fillColor`,e)})]})}function zn({page:e,registerSave:t,onSaved:n,onDirty:r,onPatch:i,onSaveAll:a,disabled:o=!1}){let s=(0,_.useRef)(null),[c,l]=(0,_.useState)(e?.background_color||`#0f172a`),[u,d]=(0,_.useState)(!!e?.grid_enabled),[f,p]=(0,_.useState)(!!e?.snap_enabled),[m,h]=(0,_.useState)(Number(e?.grid_size||40)),[g,v]=(0,_.useState)(Number(e?.width||1920)),[y,b]=(0,_.useState)(Number(e?.height||1080)),[x,S]=(0,_.useState)(!1),[C,w]=(0,_.useState)(``);(0,_.useEffect)(()=>{l(e?.background_color||`#0f172a`),d(!!e?.grid_enabled),p(!!e?.snap_enabled),h(Number(e?.grid_size||40)),v(Number(e?.width||1920)),b(Number(e?.height||1080))},[e?.id,e?.background_color,e?.grid_enabled,e?.snap_enabled,e?.grid_size,e?.width,e?.height]);async function T({silent:t=!1}={}){if(!e?.id||!s.current)return!0;w(``),S(!0);let r=new FormData(s.current);r.append(`action`,e.is_template?`template_settings_save`:`page_settings_save`),r.append(e.is_template?`template_id`:`page_id`,e.id),e.is_template&&(r.set(`name`,e.name||`Template`),r.set(`description`,e.description||``),r.set(`placeholders_json`,JSON.stringify(e.template_placeholders||[]))),r.set(`background_color`,c),r.set(`grid_enabled`,u?`1`:``),r.set(`snap_enabled`,f?`1`:``),r.set(`grid_size`,String(m)),r.set(`width`,String(g)),r.set(`height`,String(y));try{return await Te(r),t||await n?.(),{background_color:c,grid_enabled:u,snap_enabled:f,grid_size:m,width:g,height:y}}catch(e){return w(e.message),!1}finally{S(!1)}}(0,_.useEffect)(()=>{t?.(()=>T({silent:!0}))},[e?.id,c,u,f,m,g,y]);async function E(e){if(e.preventDefault(),a){await a();return}await T({silent:!1})&&await n?.()}function D(e,t,n){e(n),i?.({[t]:n}),r?.()}return(0,z.jsxs)(`details`,{className:`property-section toolbox-section`,children:[(0,z.jsx)(`summary`,{children:`Zeichenfläche`}),(0,z.jsxs)(`form`,{ref:s,className:`page-settings property-section-body toolbox-section-body`,onSubmit:E,children:[(0,z.jsxs)(`div`,{className:`settings-grid`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Breite`}),(0,z.jsx)(`input`,{disabled:o,type:`number`,min:`320`,max:`10000`,value:g,onChange:e=>D(v,`width`,Number(e.target.value||1920))})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Höhe`}),(0,z.jsx)(`input`,{disabled:o,type:`number`,min:`240`,max:`10000`,value:y,onChange:e=>D(b,`height`,Number(e.target.value||1080))})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Hintergrund`}),(0,z.jsx)(`input`,{disabled:o,type:`color`,value:c,onChange:e=>D(l,`background_color`,e.target.value)})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Rastergröße`}),(0,z.jsx)(`input`,{disabled:o,type:`number`,min:`5`,max:`200`,value:m,onChange:e=>D(h,`grid_size`,Number(e.target.value||40))})]}),(0,z.jsxs)(`label`,{className:`check-line`,children:[(0,z.jsx)(`input`,{disabled:o,type:`checkbox`,checked:u,onChange:e=>D(d,`grid_enabled`,e.target.checked)}),`Raster anzeigen`]}),(0,z.jsxs)(`label`,{className:`check-line`,children:[(0,z.jsx)(`input`,{disabled:o,type:`checkbox`,checked:f,onChange:e=>D(p,`snap_enabled`,e.target.checked)}),`Einrasten`]})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Hintergrundbild`}),(0,z.jsx)(`input`,{disabled:o,name:`background_image`,type:`file`,accept:`image/png,image/jpeg,image/webp,image/svg+xml`,className:`form-input`,onChange:()=>r?.()})]}),e?.background_image&&(0,z.jsxs)(`label`,{className:`check-line`,children:[(0,z.jsx)(`input`,{disabled:o,name:`remove_background_image`,type:`checkbox`,onChange:()=>r?.()}),`Hintergrundbild entfernen`]}),(0,z.jsx)(`button`,{className:`btn small primary`,disabled:x||o,children:x?`Speichert...`:`Zeichenfläche speichern`}),C&&(0,z.jsx)(`div`,{className:`error-box small`,children:C})]})]})}function Bn({open:e,projectId:t,value:n,onSelect:r,onClose:i}){let[a,o]=(0,_.useState)([]),[s,c]=(0,_.useState)(!1),[l,u]=(0,_.useState)(!1),[d,f]=(0,_.useState)(``);async function p(){c(!0),f(``);try{o((await H(`image_library`,{project_id:t||``})).images||[])}catch(e){f(e.message)}finally{c(!1)}}(0,_.useEffect)(()=>{e&&p()},[e,t]);async function m(e){let n=Array.from(e||[]);if(!n.length)return;let r=new FormData;r.append(`action`,`image_library_upload`),r.append(`project_id`,t||``),n.forEach(e=>r.append(`images[]`,e)),u(!0),f(``);try{await Te(r),await p()}catch(e){f(e.message)}finally{u(!1)}}async function h(e){if(!(!e?.id||Number(e.usage_count||0)>0))try{await U(`image_library_delete`,{image_id:e.id}),await p()}catch(e){f(e.message)}}return e?(0,tt.createPortal)((0,z.jsx)(`div`,{className:`modal-backdrop`,onMouseDown:e=>{e.target===e.currentTarget&&i?.()},children:(0,z.jsxs)(`div`,{className:`asset-modal image-library-modal`,role:`dialog`,"aria-modal":`true`,children:[(0,z.jsxs)(`div`,{className:`modal-head`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`p`,{className:`eyebrow`,children:`Bilderbibliothek`}),(0,z.jsx)(`h2`,{children:`Bild auswählen`})]}),(0,z.jsx)(`button`,{type:`button`,className:`btn small`,onClick:i,children:`Schließen`})]}),(0,z.jsxs)(`div`,{className:`image-library-drop`,onDragOver:e=>e.preventDefault(),onDrop:e=>{e.preventDefault(),m(e.dataTransfer.files)},children:[(0,z.jsx)(`strong`,{children:l?`Upload laeuft...`:`Bilder hier ablegen`}),(0,z.jsx)(`span`,{children:`PNG, JPG, WEBP oder SVG. Mehrere Dateien sind erlaubt.`}),(0,z.jsx)(`input`,{type:`file`,multiple:!0,accept:`image/png,image/jpeg,image/webp,image/svg+xml`,onChange:e=>m(e.target.files)})]}),d&&(0,z.jsx)(`div`,{className:`error-box small`,children:d}),s&&(0,z.jsx)(`div`,{className:`small-muted`,children:`Bilder werden geladen...`}),(0,z.jsx)(`div`,{className:`image-library-grid`,children:a.map(e=>{let t=Number(e.usage_count||0)>0;return(0,z.jsxs)(`div`,{className:`image-library-card ${n&&n===e.file_url?`is-selected`:``}`,children:[(0,z.jsx)(`button`,{type:`button`,className:`image-library-preview`,onClick:()=>{r?.(e.file_url),i?.()},children:(0,z.jsx)(`img`,{src:e.file_url,alt:e.original_name||`Bild`})}),(0,z.jsxs)(`div`,{className:`image-library-info`,children:[(0,z.jsx)(`strong`,{title:e.original_name||e.file_url,children:e.original_name||`Bild`}),(0,z.jsx)(`span`,{children:t?`${e.usage_count}x verwendet`:`Nicht verwendet`})]}),(0,z.jsx)(`button`,{type:`button`,className:`mini-btn danger`,disabled:t,title:t?`Bild wird verwendet`:`Bild loeschen`,onClick:()=>h(e),children:`Loeschen`})]},e.id||e.file_url)})})]})}),document.body):null}function Vn({assetId:e,projectId:t,state:n,isFirstState:r=!1,onDone:i}){let[a,o]=(0,_.useState)(``),[s,c]=(0,_.useState)(``),[l,u]=(0,_.useState)(100),[d,f]=(0,_.useState)(!1),[p,m]=(0,_.useState)(!1),[h,g]=(0,_.useState)(``),[v,y]=(0,_.useState)(!1),[b,x]=(0,_.useState)(``);(0,_.useEffect)(()=>{n?(o(n.label||``),c(n.state_key||``),u(n.sort_order||100),f(!!n.is_default)):(o(``),c(``),u(100),f(r)),g(``),x(``)},[n,r]);async function S(t){t.preventDefault(),x(``),y(!0);let r=t.currentTarget,a=new FormData(r);a.append(`action`,n?`asset_state_update`:`asset_state_create`),a.append(`asset_id`,e),n&&a.append(`state_id`,n.id);try{await Te(a),r.reset(),g(``),n||(o(``),c(``),u(100),f(!1)),await i?.({created:!n})}catch(e){x(e.message)}finally{y(!1)}}return(0,z.jsxs)(`form`,{className:`state-form compact`,onSubmit:S,children:[(0,z.jsx)(`div`,{className:`small-title`,children:n?`Zustand bearbeiten`:`Zustand hinzufügen`}),(0,z.jsx)(`input`,{name:`label`,className:`form-input`,value:a,onChange:e=>o(e.target.value),placeholder:`Name`,required:!0}),(0,z.jsx)(`input`,{name:`state_key`,className:`form-input`,value:s,onChange:e=>c(e.target.value),placeholder:`Key optional`}),(0,z.jsxs)(`div`,{className:`asset-form-grid`,children:[(0,z.jsx)(`input`,{name:`sort_order`,className:`form-input`,type:`number`,value:l,onChange:e=>u(Number(e.target.value||100))}),(0,z.jsxs)(`label`,{className:`check-line`,children:[(0,z.jsx)(`input`,{name:`is_default`,type:`checkbox`,checked:r||d,onChange:e=>{r||f(e.target.checked)}}),`Default`]})]}),r&&(0,z.jsx)(`div`,{className:`small-muted`,children:`Der erste Zustand wird automatisch als Default verwendet.`}),(0,z.jsx)(`input`,{type:`hidden`,name:`image_library_url`,value:h}),(0,z.jsxs)(`div`,{className:`state-image-picker`,children:[(h||n?.image_file)&&(0,z.jsx)(`div`,{className:`state-image-picker-preview`,children:(0,z.jsx)(`img`,{src:h||n.image_file,alt:``})}),(0,z.jsxs)(`div`,{className:`state-image-picker-actions`,children:[(0,z.jsx)(`button`,{type:`button`,className:`btn small`,onClick:()=>m(!0),children:`Aus Bibliothek`}),h&&(0,z.jsx)(`button`,{type:`button`,className:`btn small ghost`,onClick:()=>g(``),children:`Auswahl entfernen`})]})]}),(0,z.jsx)(`input`,{name:`image_file`,className:`form-input`,type:`file`,accept:`image/png,image/jpeg,image/webp,image/svg+xml`}),(0,z.jsx)(`div`,{className:`small-muted`,children:`Optional. Ohne Bild kann der Zustand trotzdem für Regeln verwendet werden. Neue Uploads landen automatisch in der Bibliothek.`}),(0,z.jsx)(`button`,{className:`btn primary small`,disabled:v,children:v?`…`:n?`Speichern`:`+ Zustand`}),b&&(0,z.jsx)(`div`,{className:`error-box small`,children:b}),(0,z.jsx)(Bn,{open:p,projectId:t,value:h,onSelect:g,onClose:()=>m(!1)})]})}function Hn({asset:e,onDone:t}){let[n,r]=(0,_.useState)(null),[i,a]=(0,_.useState)(``);(0,_.useEffect)(()=>{if(!i)return;let e=window.setTimeout(()=>a(``),3200);return()=>window.clearTimeout(e)},[i]);async function o(e){if(confirm(`Zustand wirklich löschen?`))try{await U(`asset_state_delete`,{state_id:e}),await t?.()}catch(e){alert(e.message)}}return(0,z.jsxs)(`div`,{className:`states-editor compact`,children:[(0,z.jsx)(`div`,{className:`small-title`,children:`Zustände`}),i&&(0,z.jsx)(`div`,{className:`success-notice`,role:`status`,children:i}),(0,z.jsx)(`div`,{className:`state-list`,children:(e.states||[]).map(e=>(0,z.jsxs)(`div`,{className:`state-row`,children:[(0,z.jsx)(`div`,{className:`state-image`,children:e.image_file?(0,z.jsx)(`img`,{src:e.image_file,alt:``}):(0,z.jsx)(`span`,{children:`Ohne Bild`})}),(0,z.jsxs)(`div`,{className:`state-info`,children:[(0,z.jsx)(`strong`,{children:e.label}),(0,z.jsxs)(`span`,{children:[e.is_default?`Default · `:``,e.state_key]})]}),(0,z.jsx)(`button`,{type:`button`,className:`icon-btn`,title:`Bearbeiten`,onClick:()=>r(e),children:`Edit`}),(0,z.jsx)(`button`,{type:`button`,className:`icon-btn danger-icon`,title:`Löschen`,onClick:()=>o(e.id),children:`Del`})]},e.id))}),(0,z.jsx)(Vn,{assetId:e.id,projectId:e.project_id||``,state:n,isFirstState:!n&&(e.states||[]).length===0,onDone:async({created:e}={})=>{r(null),e&&a(`Zustand eingefügt. Er kann später jederzeit bearbeitet werden.`),await t?.()}})]})}function Un({open:e,projectId:t,editing:n,onClose:r,onDone:i}){let[a,o]=(0,_.useState)(``),[s,c]=(0,_.useState)(``),[l,u]=(0,_.useState)(`pump`),[d,f]=(0,_.useState)(!0),[p,m]=(0,_.useState)(null),[h,g]=(0,_.useState)(!1),[v,y]=(0,_.useState)(``);if((0,_.useEffect)(()=>{e&&(n?(o(n.name||``),c(n.description||``),u(n.asset_type||`custom`),f(!!n.is_global),m(n)):(o(``),c(``),u(`pump`),f(!0),m(null)),y(``))},[e,n]),!e)return null;async function b(e){e.preventDefault(),y(``),g(!0);try{let e=await U(n?`asset_update`:`asset_create`,{asset_id:n?.id||``,project_id:t||``,name:a,description:s,asset_type:l,is_global:d?`1`:`0`});m({...n||{},id:n?.id||e.asset_id,name:a,description:s,asset_type:l,is_global:d,states:n?.states||[]}),await i?.()}catch(e){y(e.message)}finally{g(!1)}}return(0,z.jsx)(`div`,{className:`modal-backdrop`,onPointerDown:r,children:(0,z.jsxs)(`div`,{className:`asset-modal`,onPointerDown:e=>e.stopPropagation(),children:[(0,z.jsxs)(`div`,{className:`modal-head`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`eyebrow`,children:`Symbolverwaltung`}),(0,z.jsx)(`h2`,{children:n?`Symbol bearbeiten`:`Symbol erstellen`})]}),(0,z.jsx)(`button`,{type:`button`,className:`icon-close`,onClick:r,children:`?`})]}),(0,z.jsxs)(`form`,{onSubmit:b,className:`asset-modal-form`,children:[(0,z.jsxs)(`div`,{className:`modal-grid`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Name`}),(0,z.jsx)(`input`,{className:`form-input`,value:a,onChange:e=>o(e.target.value),placeholder:`z.B. Pumpe Grundfos`,required:!0})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Art`}),(0,z.jsxs)(`select`,{className:`form-input`,value:l,onChange:e=>u(e.target.value),children:[(0,z.jsx)(`option`,{value:`pump`,children:`Pumpe`}),(0,z.jsx)(`option`,{value:`heat_generation`,children:`Wärmeerzeugung`}),(0,z.jsx)(`option`,{value:`cold_generation`,children:`Kälteerzeugung`}),(0,z.jsx)(`option`,{value:`heat_recovery`,children:`Wärmetauscher / WRG`}),(0,z.jsx)(`option`,{value:`valve`,children:`Ventil`}),(0,z.jsx)(`option`,{value:`fan`,children:`Ventilator`}),(0,z.jsx)(`option`,{value:`sensor`,children:`Fühler`}),(0,z.jsx)(`option`,{value:`background`,children:`Hintergrund`}),(0,z.jsx)(`option`,{value:`custom`,children:`Sonstiges`})]})]}),(0,z.jsxs)(`label`,{className:`check-line modal-check`,children:[(0,z.jsx)(`input`,{type:`checkbox`,checked:d,onChange:e=>f(e.target.checked)}),`Globales Symbol`]}),(0,z.jsxs)(`div`,{className:`field modal-wide`,children:[(0,z.jsx)(`label`,{children:`Beschreibung`}),(0,z.jsx)(`input`,{className:`form-input`,value:s,onChange:e=>c(e.target.value),placeholder:`Optional`})]})]}),(0,z.jsxs)(`div`,{className:`modal-actions`,children:[(0,z.jsx)(`button`,{className:`btn primary`,disabled:h,children:h?`Speichert…`:`Symbol speichern`}),(0,z.jsx)(`button`,{type:`button`,className:`btn`,onClick:r,children:`Schließen`})]}),v&&(0,z.jsx)(`div`,{className:`error-box small`,children:v})]}),p&&(0,z.jsx)(Hn,{asset:p,onDone:async()=>{let e=await i?.(),t=Array.isArray(e)?e.find(e=>Number(e.id)===Number(p.id)):null;t&&m(t)}})]})})}function Wn({projectId:e,onPickAsset:t}){let[n,r]=(0,_.useState)([]),[i,a]=(0,_.useState)(``),[o,s]=(0,_.useState)(``),[c,l]=(0,_.useState)(!1),[u,d]=(0,_.useState)(null),[f,p]=(0,_.useState)(null);async function m(){s(``);try{let t=((await H(`assets`,{project_id:e||``})).assets||[]).map(te);return r(t),t}catch(e){return s(e.message),r([]),[]}}(0,_.useEffect)(()=>{m()},[e]),(0,_.useEffect)(()=>{if(!f)return;function e(){p(null)}return window.addEventListener(`pointerdown`,e),window.addEventListener(`scroll`,e,!0),()=>{window.removeEventListener(`pointerdown`,e),window.removeEventListener(`scroll`,e,!0)}},[f]);let h=n.filter(e=>[e.name,e.asset_type,e.description].filter(Boolean).join(` `).toLowerCase().includes(i.toLowerCase())).reduce((e,t)=>{let n=t.asset_type||`custom`;return e[n]||(e[n]=[]),e[n].push(t),e},{}),g=Object.keys(h).sort((e,t)=>{let n=x[e]||e,r=x[t]||t;return n.localeCompare(r,`de`)});async function v(e){if(confirm(`Symbol wirklich löschen? Alle Zustände werden ebenfalls gelöscht.`))try{await U(`asset_delete`,{asset_id:e}),await m(),p(null)}catch(e){alert(e.message)}}function y(e,t){e.preventDefault(),e.stopPropagation();let n=Qn(e.clientX,e.clientY,{itemCount:2});p({x:n.x,y:n.y,asset:t})}return(0,z.jsxs)(`div`,{className:`asset-bottom-bar`,children:[(0,z.jsxs)(`div`,{className:`asset-bottom-head`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:`Symbole`}),(0,z.jsx)(`span`,{children:` gruppiert nach Art`})]}),(0,z.jsxs)(`div`,{className:`asset-bottom-actions`,children:[(0,z.jsx)(`input`,{className:`form-input asset-search`,value:i,onChange:e=>a(e.target.value),placeholder:`Symbol suchen…`}),(0,z.jsx)(`button`,{type:`button`,className:`btn small primary`,onClick:()=>{d(null),l(!0)},children:`+ Symbol`})]})]}),o&&(0,z.jsx)(`div`,{className:`error-box small`,children:o}),(0,z.jsx)(`div`,{className:`asset-category-strip full`,children:g.map(e=>(0,z.jsxs)(`div`,{className:`asset-category`,children:[(0,z.jsxs)(`div`,{className:`asset-category-title`,"data-icon":T[e]||T.custom,children:[(0,z.jsx)(`span`,{children:x[e]||e}),(0,z.jsx)(`em`,{children:h[e].length})]}),(0,z.jsx)(`div`,{className:`asset-row-scroll`,children:h[e].map(e=>{let n=e.states.find(e=>e.is_default)?.image_file||e.states[0]?.image_file||``;return(0,z.jsx)(`div`,{className:`asset-tile`,onContextMenu:t=>y(t,e),children:(0,z.jsxs)(`button`,{type:`button`,className:`asset-tile-main`,onClick:()=>t(e),onContextMenu:t=>y(t,e),title:`Einfügen`,children:[(0,z.jsx)(`div`,{className:`asset-preview`,children:n?(0,z.jsx)(`img`,{src:n,alt:``}):(0,z.jsx)(`span`,{children:`??`})}),(0,z.jsx)(`strong`,{children:e.name})]})},e.id)})})]},e))}),f&&(0,tt.createPortal)((0,z.jsxs)(`div`,{className:`context-menu asset-context-menu`,style:{left:f.x,top:f.y},onPointerDown:e=>e.stopPropagation(),onContextMenu:e=>e.preventDefault(),children:[(0,z.jsx)(`button`,{type:`button`,onClick:()=>{d(f.asset),l(!0),p(null)},children:`✏ Bearbeiten`}),(0,z.jsx)(`button`,{type:`button`,className:`danger-row`,onClick:()=>v(f.asset.id),children:`🗑 Löschen`})]}),document.body),(0,z.jsx)(Un,{open:c,projectId:e,editing:u,onClose:()=>{l(!1),d(null)},onDone:m})]})}function Gn({element:e,liveValues:t}){let n=e.style_json?.attachedValues||[],r=e.style_json||{};return!Array.isArray(n)||n.length===0?null:(0,z.jsx)(z.Fragment,{children:n.slice(0,3).map((e,n)=>{let i=j(M(e,r),t),a=se(i,e.decimals??1),o=Number(e.fontSize||13);return(0,z.jsxs)(`div`,{className:`attached-value`,style:{left:`${e.x??50}%`,top:`${e.y??100}%`,fontSize:`${o}px`},children:[(0,z.jsx)(`span`,{style:{fontSize:`${Math.max(8,o-4)}px`},children:e.label||i?.raw_label||`Wert ${n+1}`}),(0,z.jsx)(`strong`,{style:{fontSize:`${o}px`},children:a})]},n)})})}function Kn(e,t,n=[]){let r=e.style_json||{},i=[...e.rules||[]].sort((e,t)=>Number(e.priority||100)-Number(t.priority||100));for(let e of i){let n=M(e,r),i=j(n,t);if(i&&P(n,i))return{image:n.image_file||``,hasState:!0}}let a=e.asset_states?.find(e=>e.is_default)||e.asset_states?.[0]||null;if(a)return{image:a.image_file||``,hasState:!0};let o=n.find(t=>Number(t.id)===Number(e.asset_id)),s=o?.states?.find(e=>e.is_default)||o?.states?.[0]||null;return s?{image:s.image_file||``,hasState:!0}:e.style_json?.default_image?{image:e.style_json.default_image,hasState:!0}:{image:``,hasState:!1}}function qn({onResizeStart:e}){return(0,z.jsx)(z.Fragment,{children:[`nw`,`n`,`ne`,`e`,`se`,`s`,`sw`,`w`].map(t=>(0,z.jsx)(`span`,{className:`resize-handle handle-${t}`,onPointerDown:n=>e(n,t)},t))})}function Jn({element:e,selected:t,liveValues:n={},assets:r=[],pointEditMode:i=!1,lockedAsTemplate:a=!1,onPointerDown:o,onDoubleClick:s,onResizeStart:c,onPointPointerDown:l,onContextMenu:u}){let d=e.style_json||{},f=d.color||`#60a5fa`,p=`translate(${e.x}px, ${e.y}px) rotate(${e.rotation||0}deg)`;return ie(e,n)?(0,z.jsxs)(`div`,{className:`canvas-element ${t?`is-selected`:``} ${i?`is-point-edit`:``}`,style:{width:e.w,height:e.h,transform:p,zIndex:e.z_index||10,opacity:e.opacity??1},onPointerDown:t=>o(t,e.id),onDoubleClick:t=>{t.preventDefault(),t.stopPropagation(),s?.(t,e.id)},onContextMenu:t=>u?.(t,e.id),children:[e.element_type===`asset`&&(0,z.jsxs)(z.Fragment,{children:[(()=>{let t=Kn(e,n,r);return t.image?(0,z.jsx)(`img`,{className:`asset-canvas-image`,src:t.image,alt:e.label||e.name||``,draggable:!1}):t.hasState?null:(0,z.jsx)(`div`,{className:`asset-missing`,children:`Kein Zustand`})})(),(0,z.jsx)(Gn,{element:e,liveValues:n})]}),e.element_type===`text`&&(0,z.jsx)(xt,{element:e,liveValues:n,interactive:!1}),e.element_type===`value`&&d.kind===`trend_chart`&&(0,z.jsx)(Ft,{element:e}),e.element_type===`value`&&d.kind===`sankey_chart`&&(0,z.jsx)(Vt,{element:e}),e.element_type===`value`&&[`scale_bar`,`dial_gauge`].includes(d.kind)&&(0,z.jsx)(Ce,{element:e,liveValues:n}),e.element_type===`value`&&![`scale_bar`,`dial_gauge`,`trend_chart`,`sankey_chart`].includes(d.kind)&&(0,z.jsxs)(`div`,{className:`sensor-element ${d.kind===`setpoint`?`is-setpoint`:``}`,style:{borderColor:d.showBorder===!1?`transparent`:d.strokeColor||f,borderWidth:`${Number(d.strokeWidth??3)}px`,background:d.fillColor&&d.fillColor!==`transparent`?d.kind===`setpoint`?ce(d):d.fillColor:`transparent`,"--sensor-label-color":d.labelColor||`rgba(209, 213, 219, 0.78)`,"--sensor-label-size":`${Number(d.labelFontSize??12)}px`},children:[(0,z.jsx)(`div`,{className:`sensor-marker`,style:{background:d.markerColor||f,color:d.markerTextColor||`#0f172a`,width:`${Number(d.markerSize??34)}px`,height:`${Number(d.markerSize??34)}px`,fontSize:`${Number(d.markerFontSize??13)}px`},children:d.marker||(d.kind===`setpoint`?`SP`:`T`)}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`sensor-label`,children:e.label||(d.kind===`setpoint`?`Sollwert`:`Fühler`)}),(0,z.jsx)(`div`,{className:`sensor-value`,style:{color:d.valueColor||`#ffffff`,fontSize:`${Number(d.valueFontSize??20)}px`},children:se({value:23.4},d.decimals??1)})]})]}),e.element_type===`shape`&&(0,z.jsx)(dt,{element:e,pointEditMode:i,onPointPointerDown:l}),t&&c&&!i&&!a&&(0,z.jsx)(qn,{onResizeStart:(t,n)=>c(t,e.id,n)})]}):null}function Yn({menu:e,onClose:t,onCopy:n,onPaste:r,onDelete:i,onEditPoints:a,onEditTemplateBindings:o,onBringFront:s,onSendBack:c,onZPlus:l,onZMinus:u}){return e?(0,z.jsxs)(`div`,{className:`context-menu`,style:{left:e.x,top:e.y},onPointerDown:e=>e.stopPropagation(),onContextMenu:e=>e.preventDefault(),children:[e.elementId&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`button`,{type:`button`,onClick:()=>{n(e.elementId),t()},children:`📋 Kopieren`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>{s(e.elementId),t()},children:`↑ Ganz nach vorne`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>{l(e.elementId),t()},children:`↗ Eins nach vorne`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>{u(e.elementId),t()},children:`↘ Eins nach hinten`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>{c(e.elementId),t()},children:`↓ Ganz nach hinten`}),e.isTemplateGroup&&(0,z.jsx)(`button`,{type:`button`,onClick:()=>{o?.(e.templateGroupId),t()},children:`Platzhalter ändern`}),e.canEditPoints&&!e.isTemplateGroup&&(0,z.jsx)(`button`,{type:`button`,onClick:()=>{a(e.elementId),t()},children:`✍ Punkte bearbeiten`}),(0,z.jsx)(`button`,{type:`button`,className:`danger-row`,onClick:()=>{i(e.elementId),t()},children:`Entfernen`})]}),!e.elementId&&(0,z.jsx)(`button`,{type:`button`,onClick:()=>{r(e.canvasPoint),t()},children:`📥 Einfügen`})]}):null}function Xn({page:e,selected:t,assets:n,onChange:r}){if(!t||t.element_type!==`asset`)return null;let i=n.find(e=>Number(e.id)===Number(t.asset_id)),a=new Map;[...t.asset_states||[],...i?.states||[]].forEach(e=>{e?.id&&a.set(Number(e.id),e)});let o=Array.from(a.values()).sort((e,t)=>Number(t.is_default||0)-Number(e.is_default||0)||Number(e.sort_order||100)-Number(t.sort_order||100));function s(e,n){let i=[...t.rules||[]];i[e]={...i[e],...n},r({...t,rules:i})}function c(){let e=o[0];if(!e){alert(`Das Symbol hat noch keine Zustände.`);return}r({...t,rules:[...t.rules||[],{asset_state_id:e.id,variable_type:`digital`,external_id:``,variable_id:``,point_key:``,point_label:``,operator:`eq`,compare_value:`1`,priority:100,image_file:e.image_file,state_label:e.label}]})}function l(e){let n=[...t.rules||[]];n.splice(e,1),r({...t,rules:n})}return(0,z.jsxs)(`div`,{className:`rules-editor`,children:[(0,z.jsx)(`div`,{className:`small-title`,children:`Zustandsregeln`}),(t.rules||[]).map((t,n)=>(0,z.jsxs)(`div`,{className:`rule-box`,children:[(0,z.jsxs)(`select`,{className:`form-input`,value:t.asset_state_id||``,onChange:e=>{let t=o.find(t=>Number(t.id)===Number(e.target.value));s(n,{asset_state_id:Number(e.target.value||0),image_file:t?.image_file||``,state_label:t?.label||``})},children:[(0,z.jsx)(`option`,{value:``,children:`Zustand wählen`}),o.map(e=>(0,z.jsxs)(`option`,{value:e.id,children:[e.label,e.image_file?``:` (ohne Bild)`]},e.id))]}),(0,z.jsx)(br,{page:e,value:k(t),onChange:e=>{if(!e){s(n,{variable_type:`digital`,external_id:``,variable_id:``,point_key:``,point_label:``});return}s(n,{variable_type:e.type,external_id:e.external_id,variable_id:e.variable_id||``,point_key:e.point_key||``,point_label:e.label||``})}}),(0,z.jsxs)(`div`,{className:`rule-grid`,children:[(0,z.jsxs)(`select`,{className:`form-input`,value:t.operator||`eq`,onChange:e=>s(n,{operator:e.target.value}),children:[(0,z.jsx)(`option`,{value:`eq`,children:`=`}),(0,z.jsx)(`option`,{value:`neq`,children:`!=`}),(0,z.jsx)(`option`,{value:`gt`,children:`>`}),(0,z.jsx)(`option`,{value:`gte`,children:`>=`}),(0,z.jsx)(`option`,{value:`lt`,children:`<`}),(0,z.jsx)(`option`,{value:`lte`,children:`<=`}),(0,z.jsx)(`option`,{value:`contains`,children:`enthält`}),(0,z.jsx)(`option`,{value:`not_contains`,children:`enthält nicht`}),(0,z.jsx)(`option`,{value:`truthy`,children:`wahr`}),(0,z.jsx)(`option`,{value:`falsy`,children:`falsch`})]}),(0,z.jsx)(`input`,{className:`form-input`,value:t.compare_value??``,onChange:e=>s(n,{compare_value:e.target.value}),placeholder:`Wert`}),(0,z.jsx)(`input`,{className:`form-input`,type:`number`,value:t.priority||100,onChange:e=>s(n,{priority:Number(e.target.value||100)})})]}),(0,z.jsxs)(`div`,{className:`rule-footer`,children:[(0,z.jsx)(`span`,{children:t.point_label||`Kein Wert gewählt`}),(0,z.jsx)(`button`,{type:`button`,className:`mini-btn danger`,onClick:()=>l(n),children:`Regel löschen`})]})]},n)),(0,z.jsx)(`button`,{type:`button`,className:`btn small`,onClick:c,children:`+ Regel hinzufügen`})]})}function Zn({page:e,selected:t,onChange:n,disabled:r=!1}){if(!t||t.element_type!==`shape`)return null;let i=t.style_json||{},a=Array.isArray(i.colorRules)?i.colorRules:[];function o(e){n({...t,style_json:{...i,colorRules:e}})}function s(e,t){let n=[...a];n[e]={...n[e],...t},o(n)}function c(){o([...a,{variable_type:`digital`,external_id:``,variable_id:``,point_key:``,point_label:``,operator:`eq`,compare_value:`1`,priority:100,fillColor:i.fillColor||`#60a5fa`,gradientColor:i.gradientColor||i.fillColor||`#1d4ed8`}])}function l(e){let t=[...a];t.splice(e,1),o(t)}return(0,z.jsxs)(`div`,{className:`rules-editor`,children:[(0,z.jsx)(`div`,{className:`small-title`,children:`Farbregeln`}),(0,z.jsx)(`div`,{className:`small-muted`,children:`Die erste passende Regel ersetzt die Füllfarbe.`}),a.map((t,n)=>(0,z.jsxs)(`div`,{className:`rule-box`,children:[(0,z.jsx)(In,{label:`Füllfarbe bei Treffer`,value:t.fillColor||`#60a5fa`,onChange:e=>s(n,{fillColor:e})}),(i.fillMode===`linear`||i.fillMode===`radial`)&&(0,z.jsx)(In,{label:`Zweite Farbe bei Treffer`,value:t.gradientColor||i.gradientColor||`#1d4ed8`,onChange:e=>s(n,{gradientColor:e})}),(0,z.jsx)(br,{page:e,value:k(t),onChange:e=>{if(!e){s(n,{variable_type:`digital`,external_id:``,variable_id:``,point_key:``,point_label:``});return}s(n,{variable_type:e.type,external_id:e.external_id,variable_id:e.variable_id||``,point_key:e.point_key||``,point_label:e.label||``})}}),(0,z.jsxs)(`div`,{className:`rule-grid`,children:[(0,z.jsxs)(`select`,{disabled:r,className:`form-input`,value:t.operator||`eq`,onChange:e=>s(n,{operator:e.target.value}),children:[(0,z.jsx)(`option`,{value:`eq`,children:`=`}),(0,z.jsx)(`option`,{value:`neq`,children:`!=`}),(0,z.jsx)(`option`,{value:`gt`,children:`>`}),(0,z.jsx)(`option`,{value:`gte`,children:`>=`}),(0,z.jsx)(`option`,{value:`lt`,children:`<`}),(0,z.jsx)(`option`,{value:`lte`,children:`<=`}),(0,z.jsx)(`option`,{value:`contains`,children:`enthält`}),(0,z.jsx)(`option`,{value:`not_contains`,children:`enthält nicht`}),(0,z.jsx)(`option`,{value:`truthy`,children:`wahr`}),(0,z.jsx)(`option`,{value:`falsy`,children:`falsch`})]}),(0,z.jsx)(`input`,{disabled:r,className:`form-input`,value:t.compare_value??``,onChange:e=>s(n,{compare_value:e.target.value}),placeholder:`Wert`}),(0,z.jsx)(`input`,{disabled:r,className:`form-input`,type:`number`,value:t.priority||100,onChange:e=>s(n,{priority:Number(e.target.value||100)})})]}),(0,z.jsxs)(`div`,{className:`rule-footer`,children:[(0,z.jsx)(`span`,{children:t.point_label||`Kein Wert gewählt`}),(0,z.jsx)(`button`,{disabled:r,type:`button`,className:`mini-btn danger`,onClick:()=>l(n),children:`Regel löschen`})]})]},n)),(0,z.jsx)(`button`,{disabled:r,type:`button`,className:`btn small`,onClick:c,children:`+ Farbregel hinzufügen`})]})}function Qn(e,t,n={}){let r=14+(Number(n.itemCount||0)||(n.elementId?6+ +!!n.canEditPoints:1))*30,i=e,a=t;return i+190+8>window.innerWidth&&(i=e-190),a+r+8>window.innerHeight&&(a=t-r),{x:Math.max(8,Math.min(i,window.innerWidth-190-8)),y:Math.max(8,Math.min(a,window.innerHeight-r-8))}}function $n(e=`Link`){return{id:`menu-${Math.abs(b())}`,label:e,linkMode:`page`,linkPageId:``,linkUrl:``,linkTarget:`same_tab`}}function er(){return Nn?Promise.resolve(Nn):Pn||(Pn=H(`pages`).then(e=>(Nn=e.pages||[],Nn)).finally(()=>{Pn=null}),Pn)}function tr(e){return Array.isArray(e)?e.map((e,t)=>({id:e.id||`menu-${t+1}`,label:e.label||`Link ${t+1}`,linkMode:e.linkMode||`page`,linkPageId:e.linkPageId||``,linkUrl:e.linkUrl||``,linkTarget:e.linkTarget||`same_tab`})):[]}function nr({value:e,onChange:t,disabled:n=!1}){let[r,i]=(0,_.useState)([]),[a,o]=(0,_.useState)(``);(0,_.useEffect)(()=>{er().then(e=>i(e||[])).catch(e=>o(e.message))},[]);let s=oe(r);return(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Zielseite`}),(0,z.jsxs)(`select`,{disabled:n,value:String(e||``),onChange:e=>t(e.target.value),children:[(0,z.jsx)(`option`,{value:``,children:`Seite wählen…`}),s.map(e=>(0,z.jsx)(`optgroup`,{label:`${e.year||``} · ${e.project_number||``} · ${e.project_name||``}`,children:e.pages.map(e=>(0,z.jsx)(`option`,{value:e.id,children:e.name},e.id))},e.project_id))]}),a&&(0,z.jsx)(`div`,{className:`tiny-error`,children:a})]})}function rr({value:e,onChange:t,disabled:n=!1}){let r=e.linkMode||`page`,i=e.linkTarget||`same_tab`;function a(n){t({...e,...n})}return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Ziel`}),(0,z.jsxs)(`select`,{disabled:n,value:r,onChange:e=>a({linkMode:e.target.value}),children:[(0,z.jsx)(`option`,{value:`page`,children:`Andere Visualisierung`}),(0,z.jsx)(`option`,{value:`external`,children:`Externe Website`}),(0,z.jsx)(`option`,{value:`none`,children:`Kein Link`})]})]}),r===`page`&&(0,z.jsx)(nr,{value:e.linkPageId||``,onChange:e=>a({linkPageId:e}),disabled:n}),r===`external`&&(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Externe URL`}),(0,z.jsx)(`input`,{disabled:n,value:e.linkUrl||``,onChange:e=>a({linkUrl:e.target.value}),placeholder:`https://example.com`})]}),r!==`none`&&(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Öffnen`}),(0,z.jsxs)(`select`,{disabled:n,value:i,onChange:e=>a({linkTarget:e.target.value}),children:[(0,z.jsx)(`option`,{value:`same_tab`,children:`Im selben Tab`}),(0,z.jsx)(`option`,{value:`new_tab`,children:`In neuem Tab`})]})]})]})}function ir({page:e,selected:t,onChange:n,disabled:r=!1}){if(!t||![`asset`,`shape`,`text`].includes(t.element_type))return null;let i=t.style_json||{},a=i.visibilityRule||{},o=!!a.enabled;function s(e){n({...t,style_json:{...i,visibilityRule:{enabled:!0,variable_type:`digital`,external_id:``,variable_id:``,point_key:``,point_label:``,operator:`eq`,compare_value:`1`,...a,...e}}})}function c(e){if(e){s({enabled:!0});return}n({...t,style_json:{...i,visibilityRule:{...a,enabled:!1}}})}return(0,z.jsxs)(`div`,{className:`rules-editor`,children:[(0,z.jsxs)(`label`,{className:`check-line`,children:[(0,z.jsx)(`input`,{disabled:r,type:`checkbox`,checked:o,onChange:e=>c(e.target.checked)}),`Element per Wert ausblenden`]}),o&&(0,z.jsxs)(`div`,{className:`rule-box`,children:[(0,z.jsx)(br,{page:e,value:k(a),onChange:e=>{if(!e){s({variable_type:`digital`,external_id:``,variable_id:``,point_key:``,point_label:``});return}s({variable_type:e.type,external_id:e.external_id,variable_id:e.variable_id||``,point_key:e.point_key||``,point_label:e.label||``})}}),(0,z.jsxs)(`div`,{className:`rule-grid`,children:[(0,z.jsxs)(`select`,{disabled:r,className:`form-input`,value:a.operator||`eq`,onChange:e=>s({operator:e.target.value}),children:[(0,z.jsx)(`option`,{value:`eq`,children:`=`}),(0,z.jsx)(`option`,{value:`neq`,children:`!=`}),(0,z.jsx)(`option`,{value:`gt`,children:`>`}),(0,z.jsx)(`option`,{value:`gte`,children:`>=`}),(0,z.jsx)(`option`,{value:`lt`,children:`<`}),(0,z.jsx)(`option`,{value:`lte`,children:`<=`}),(0,z.jsx)(`option`,{value:`contains`,children:`enthält`}),(0,z.jsx)(`option`,{value:`not_contains`,children:`enthält nicht`}),(0,z.jsx)(`option`,{value:`truthy`,children:`wahr`}),(0,z.jsx)(`option`,{value:`falsy`,children:`falsch`})]}),(0,z.jsx)(`input`,{disabled:r||[`truthy`,`falsy`].includes(a.operator),className:`form-input`,value:a.compare_value??`1`,onChange:e=>s({compare_value:e.target.value}),placeholder:`Wert`}),(0,z.jsx)(`input`,{disabled:r,className:`form-input`,type:`number`,min:`1`,value:Number(a.priority||100),onChange:e=>s({priority:Number(e.target.value||100)}),title:`Priorität`})]}),(0,z.jsx)(`div`,{className:`small-muted`,children:`Wenn diese Bedingung zutrifft, wird das Element im Viewer ausgeblendet.`})]})]})}function ar({page:e,selected:t,onChange:n,disabled:r=!1}){if(!t||t.element_type!==`text`)return null;let i=t.style_json||{},a=Array.isArray(i.textRules)?i.textRules:[];function o(e){n({...t,style_json:{...i,textRules:e}})}function s(e,t){let n=[...a];n[e]={...n[e],...t},o(n)}function c(){o([...a,{text:t.label||`Text`,variable_type:`digital`,external_id:``,variable_id:``,point_key:``,point_label:``,operator:`eq`,compare_value:`1`,priority:100}])}function l(e){let t=[...a];t.splice(e,1),o(t)}return(0,z.jsxs)(`div`,{className:`rules-editor`,children:[(0,z.jsx)(`div`,{className:`small-title`,children:`Textzustände`}),(0,z.jsx)(`div`,{className:`small-muted`,children:`Die erste passende Regel ersetzt den Standardtext.`}),a.map((t,n)=>(0,z.jsxs)(`div`,{className:`rule-box`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Text bei Treffer`}),(0,z.jsx)(`input`,{disabled:r,value:t.text||``,onChange:e=>s(n,{text:e.target.value})})]}),(0,z.jsx)(br,{page:e,value:k(t),onChange:e=>{if(!e){s(n,{variable_type:`digital`,external_id:``,variable_id:``,point_key:``,point_label:``});return}s(n,{variable_type:e.type,external_id:e.external_id,variable_id:e.variable_id||``,point_key:e.point_key||``,point_label:e.label||``})}}),(0,z.jsxs)(`div`,{className:`rule-grid`,children:[(0,z.jsxs)(`select`,{disabled:r,className:`form-input`,value:t.operator||`eq`,onChange:e=>s(n,{operator:e.target.value}),children:[(0,z.jsx)(`option`,{value:`eq`,children:`=`}),(0,z.jsx)(`option`,{value:`neq`,children:`!=`}),(0,z.jsx)(`option`,{value:`gt`,children:`>`}),(0,z.jsx)(`option`,{value:`gte`,children:`>=`}),(0,z.jsx)(`option`,{value:`lt`,children:`<`}),(0,z.jsx)(`option`,{value:`lte`,children:`<=`}),(0,z.jsx)(`option`,{value:`contains`,children:`enthält`}),(0,z.jsx)(`option`,{value:`not_contains`,children:`enthält nicht`}),(0,z.jsx)(`option`,{value:`truthy`,children:`wahr`}),(0,z.jsx)(`option`,{value:`falsy`,children:`falsch`})]}),(0,z.jsx)(`input`,{disabled:r,className:`form-input`,value:t.compare_value??``,onChange:e=>s(n,{compare_value:e.target.value}),placeholder:`Wert`}),(0,z.jsx)(`input`,{disabled:r,className:`form-input`,type:`number`,value:t.priority||100,onChange:e=>s(n,{priority:Number(e.target.value||100)})})]}),(0,z.jsxs)(`div`,{className:`rule-footer`,children:[(0,z.jsx)(`span`,{children:t.point_label||`Kein Wert gewählt`}),(0,z.jsx)(`button`,{disabled:r,type:`button`,className:`mini-btn danger`,onClick:()=>l(n),children:`Regel löschen`})]})]},n)),(0,z.jsx)(`button`,{disabled:r,type:`button`,className:`btn small`,onClick:c,children:`+ Textzustand hinzufügen`})]})}var or=[{key:`top_left`,label:`Links oben`},{key:`top_center`,label:`Oben`},{key:`top_right`,label:`Rechts oben`},{key:`middle_left`,label:`Links`},{key:`center`,label:`Mitte`},{key:`middle_right`,label:`Rechts`},{key:`bottom_left`,label:`Links unten`},{key:`bottom_center`,label:`Unten`},{key:`bottom_right`,label:`Rechts unten`}],sr=[{value:`triangle`,label:`Dreieck`},{value:`diamond`,label:`Raute`},{value:`chevron`,label:`Chevron`},{value:`kite`,label:`Kite`}];function cr({value:e,onChange:t,disabled:n=!1}){return(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Startpunkt des Verlaufs`}),(0,z.jsx)(`div`,{className:`gradient-origin-picker`,children:or.map(r=>(0,z.jsx)(`button`,{disabled:n,type:`button`,className:e===r.key?`active`:``,title:r.label,"aria-label":r.label,onClick:()=>t(r.key),children:(0,z.jsx)(`span`,{})},r.key))})]})}function lr({value:e=0,onChange:t,disabled:n=!1}){return(0,z.jsx)(`div`,{className:`rotation-jumps arrow-rotation-jumps`,children:[-90,0,90].map(r=>(0,z.jsxs)(`button`,{disabled:n,type:`button`,className:`btn small ${Number(e||0)===r?`primary`:``}`,onClick:()=>t(r),children:[r>0?`+`:``,r,`°`]},r))})}function ur({page:e,selected:t,onChange:n,disabled:r=!1}){let i=t?.style_json||{},a=Number(i.arrowGap??0),o=i.arrowGapLinked!==!1,s=Number(i.startArrowGap??a),c=Number(i.endArrowGap??a),[l,u]=(0,_.useState)(String(s)),[d,f]=(0,_.useState)(String(c));if((0,_.useEffect)(()=>{u(String(s)),f(String(c))},[t?.id,s,c]),!t||t.element_type!==`shape`||t.style_json?.subtype!==`polyline`)return null;function p(e){n({...t,style_json:{...i,...e}})}function m(e,t){if(!/^-?\d*$/.test(t)||(e===`start`&&u(t),e===`end`&&f(t),t===``||t===`-`))return;let n=Math.max(-120,Math.min(120,Number(t)));if(o){u(String(n)),f(String(n)),p({arrowGapLinked:!0,arrowGap:n,startArrowGap:n,endArrowGap:n});return}p(e===`start`?{startArrowGap:n}:{endArrowGap:n})}function h(e){let t=e===`start`?l:d,n=e===`start`?s:c;if(t===``||t===`-`||Number.isNaN(Number(t))){e===`start`&&u(String(n)),e===`end`&&f(String(n));return}m(e,t)}function g(){if(!o){let e=Math.max(-120,Math.min(120,Number(l===`-`||l===``?s:l)));u(String(e)),f(String(e)),p({arrowGapLinked:!0,arrowGap:e,startArrowGap:e,endArrowGap:e});return}p({arrowGapLinked:!1,startArrowGap:s,endArrowGap:c})}return(0,z.jsxs)(`div`,{className:`rules-editor line-flow-editor`,children:[(0,z.jsx)(`div`,{className:`small-title`,children:`Linienfluss und Pfeile`}),(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Pfeil am Anfang`}),(0,z.jsxs)(`select`,{disabled:r,value:i.startArrow||`none`,onChange:e=>p({startArrow:e.target.value}),children:[(0,z.jsx)(`option`,{value:`none`,children:`Keiner`}),(0,z.jsx)(`option`,{value:`outward`,children:`Nach außen`}),(0,z.jsx)(`option`,{value:`inward`,children:`In die Linie`})]})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Pfeil am Ende`}),(0,z.jsxs)(`select`,{disabled:r,value:i.endArrow||`none`,onChange:e=>p({endArrow:e.target.value}),children:[(0,z.jsx)(`option`,{value:`none`,children:`Keiner`}),(0,z.jsx)(`option`,{value:`outward`,children:`Nach außen`}),(0,z.jsx)(`option`,{value:`inward`,children:`In die Linie`})]})]})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Pfeilgröße`}),(0,z.jsx)(`input`,{disabled:r,type:`number`,min:`8`,max:`120`,value:Number(i.arrowSize??20),onChange:e=>p({arrowSize:Math.max(8,Math.min(120,Number(e.target.value||20)))})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Pfeilabstand`}),(0,z.jsxs)(`div`,{className:`linked-gap-row`,children:[(0,z.jsx)(`input`,{disabled:r,type:`text`,inputMode:`numeric`,value:l,onChange:e=>m(`start`,e.target.value),onBlur:()=>h(`start`),placeholder:`-120 bis 120`}),(0,z.jsx)(`button`,{disabled:r,type:`button`,className:`icon-btn subtle-icon ${o?`is-active`:``}`,title:o?`Abstände gekoppelt`:`Abstände entkoppelt`,onClick:g,children:`?`}),(0,z.jsx)(`input`,{disabled:r,type:`text`,inputMode:`numeric`,value:d,onChange:e=>m(`end`,e.target.value),onBlur:()=>h(`end`),placeholder:`-120 bis 120`})]})]}),(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsxs)(`div`,{className:`rule-box`,children:[(0,z.jsx)(`div`,{className:`small-title`,children:`Pfeil Anfang`}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Art`}),(0,z.jsx)(`select`,{disabled:r||(i.startArrow||`none`)===`none`,value:i.startArrowType||`triangle`,onChange:e=>p({startArrowType:e.target.value}),children:sr.map(e=>(0,z.jsx)(`option`,{value:e.value,children:e.label},e.value))})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Drehung`}),(0,z.jsx)(lr,{disabled:r||(i.startArrow||`none`)===`none`,value:Number(i.startArrowRotation??0),onChange:e=>p({startArrowRotation:e})})]})]}),(0,z.jsxs)(`div`,{className:`rule-box`,children:[(0,z.jsx)(`div`,{className:`small-title`,children:`Pfeil Ende`}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Art`}),(0,z.jsx)(`select`,{disabled:r||(i.endArrow||`none`)===`none`,value:i.endArrowType||`triangle`,onChange:e=>p({endArrowType:e.target.value}),children:sr.map(e=>(0,z.jsx)(`option`,{value:e.value,children:e.label},e.value))})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Drehung`}),(0,z.jsx)(lr,{disabled:r||(i.endArrow||`none`)===`none`,value:Number(i.endArrowRotation??0),onChange:e=>p({endArrowRotation:e})})]})]})]}),(0,z.jsxs)(`label`,{className:`check-line`,children:[(0,z.jsx)(`input`,{disabled:r,type:`checkbox`,checked:!!i.flowEnabled,onChange:e=>p({flowEnabled:e.target.checked})}),`Animierten Fluss anzeigen`]}),i.flowEnabled&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(br,{page:e,value:i.flowPoint?k(i.flowPoint):``,onChange:e=>p({flowPoint:e?{type:e.type,external_id:e.external_id,variable_id:e.variable_id||``,point_key:e.point_key||``,point_label:e.label||``}:null})}),(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Minimalwert`}),(0,z.jsx)(`input`,{disabled:r,type:`number`,value:Number(i.flowMin??0),onChange:e=>p({flowMin:Number(e.target.value||0)})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Maximalwert`}),(0,z.jsx)(`input`,{disabled:r,type:`number`,value:Number(i.flowMax??100),onChange:e=>p({flowMax:Number(e.target.value||100)})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Langsam (Sek.)`}),(0,z.jsx)(`input`,{disabled:r,type:`number`,min:`0.2`,step:`0.1`,value:Number(i.flowSlowSeconds??5),onChange:e=>p({flowSlowSeconds:Number(e.target.value||5)})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Schnell (Sek.)`}),(0,z.jsx)(`input`,{disabled:r,type:`number`,min:`0.1`,step:`0.1`,value:Number(i.flowFastSeconds??.7),onChange:e=>p({flowFastSeconds:Number(e.target.value||.7)})})]})]}),(0,z.jsx)(In,{label:`Flussfarbe`,value:i.flowColor||`#e0f2fe`,onChange:e=>p({flowColor:e})}),(0,z.jsxs)(`label`,{className:`check-line`,children:[(0,z.jsx)(`input`,{disabled:r,type:`checkbox`,checked:i.flowDirection===`reverse`,onChange:e=>p({flowDirection:e.target.checked?`reverse`:`forward`})}),`Flussrichtung umkehren`]}),(0,z.jsxs)(`label`,{className:`check-line`,children:[(0,z.jsx)(`input`,{disabled:r,type:`checkbox`,checked:!!i.flowInvertSpeed,onChange:e=>p({flowInvertSpeed:e.target.checked})}),`Geschwindigkeit invertieren (Minimum schnell)`]})]})]})}function dr({page:e,selected:t,onChange:n}){if(!t||t.element_type!==`asset`)return null;let r=Array.isArray(t.style_json?.attachedValues)?t.style_json.attachedValues:[];function i(e){n({...t,style_json:{...t.style_json,attachedValues:e.slice(0,3)}})}function a(e,t){let n=[...r];n[e]={...n[e],...t},i(n)}function o(){if(r.length>=3){alert(`Maximal 3 Werte pro Symbol.`);return}i([...r,{label:`Wert ${r.length+1}`,x:50,y:105,fontSize:13,decimals:1,type:``,external_id:``,variable_id:``,point_key:``}])}function s(e){let t=[...r];t.splice(e,1),i(t)}return(0,z.jsxs)(`div`,{className:`attached-editor`,children:[(0,z.jsx)(`div`,{className:`small-title`,children:`Angeheftete Werte`}),r.map((t,n)=>(0,z.jsxs)(`div`,{className:`attached-editor-row`,children:[(0,z.jsx)(`input`,{className:`form-input`,value:t.label||``,onChange:e=>a(n,{label:e.target.value}),placeholder:`Label`}),(0,z.jsx)(br,{page:e,value:k(t),onChange:e=>{if(!e){a(n,{type:``,external_id:``,variable_id:``,point_key:``,point_label:``});return}a(n,{type:e.type,external_id:e.external_id,variable_id:e.variable_id||``,point_key:e.point_key||``,point_label:e.label||``,label:t.label||e.raw_label||e.label||`Wert ${n+1}`})}}),(0,z.jsxs)(`div`,{className:`prop-grid-3`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`X %`}),(0,z.jsx)(`input`,{type:`number`,value:t.x??50,onChange:e=>a(n,{x:Number(e.target.value||0)})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Y %`}),(0,z.jsx)(`input`,{type:`number`,value:t.y??105,onChange:e=>a(n,{y:Number(e.target.value||0)})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Größe`}),(0,z.jsx)(`input`,{type:`number`,min:`8`,max:`80`,value:t.fontSize??13,onChange:e=>a(n,{fontSize:Number(e.target.value||13)})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Nachkommastellen`}),(0,z.jsx)(`input`,{type:`number`,min:`0`,max:`8`,value:t.decimals??1,onChange:e=>a(n,{decimals:Math.max(0,Math.min(8,Number(e.target.value||0)))})})]})]}),(0,z.jsx)(`button`,{type:`button`,className:`mini-btn danger`,onClick:()=>s(n),children:`Wert löschen`})]},n)),(0,z.jsx)(`button`,{type:`button`,className:`btn small`,onClick:o,children:`+ Wert hinzufügen`})]})}function fr({selected:e,onChange:t,disabled:n=!1}){let r=e?.style_json||{};if(!e||e.element_type!==`value`||![`scale_bar`,`dial_gauge`].includes(r.kind))return null;let i=Array.isArray(r.ranges)?r.ranges:[];function a(n){t({...e,style_json:{...r,...n}})}function o(e,t){let n=[...i];n[e]={...n[e],...t},a({ranges:n})}function s(){a({ranges:[...i,{from:Number(r.min??0),to:Number(r.max??100),color:`#22c55e`}]})}function c(e){let t=[...i];t.splice(e,1),a({ranges:t})}return(0,z.jsxs)(`div`,{className:`instrument-editor`,children:[r.kind===`scale_bar`&&(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Ausrichtung`}),(0,z.jsxs)(`select`,{disabled:n,value:r.orientation||`horizontal`,onChange:e=>a({orientation:e.target.value}),children:[(0,z.jsx)(`option`,{value:`horizontal`,children:`Horizontal`}),(0,z.jsx)(`option`,{value:`vertical`,children:`Vertikal`})]})]}),(0,z.jsxs)(`label`,{className:`check-line`,children:[(0,z.jsx)(`input`,{disabled:n,type:`checkbox`,checked:!!r.fillEnabled,onChange:e=>a({fillEnabled:e.target.checked})}),r.kind===`dial_gauge`?`Füllbogen für aktuellen Wert anzeigen`:`Füllbalken für aktuellen Wert anzeigen`]}),r.fillEnabled&&(0,z.jsx)(In,{label:r.kind===`dial_gauge`?`Füllbogenfarbe`:`Füllbalkenfarbe`,value:r.fillColor||`#38bdf8`,onChange:e=>a({fillColor:e})}),(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Minimum`}),(0,z.jsx)(`input`,{disabled:n,type:`number`,value:Number(r.min??0),onChange:e=>a({min:Number(e.target.value||0)})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Maximum`}),(0,z.jsx)(`input`,{disabled:n,type:`number`,value:Number(r.max??100),onChange:e=>a({max:Number(e.target.value||100)})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Hauptstriche alle`}),(0,z.jsx)(`input`,{disabled:n,type:`number`,min:`0.001`,step:`any`,value:Number(r.majorStep??20),onChange:e=>a({majorStep:Math.max(.001,Number(e.target.value||20))})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Unterteilungen`}),(0,z.jsx)(`input`,{disabled:n,type:`number`,min:`0`,max:`20`,value:Number(r.minorDivisions??4),onChange:e=>a({minorDivisions:Math.max(0,Number(e.target.value||0))})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Nachkommastellen`}),(0,z.jsx)(`input`,{disabled:n,type:`number`,min:`0`,max:`8`,value:Number(r.decimals??1),onChange:e=>a({decimals:Math.max(0,Math.min(8,Number(e.target.value||0)))})})]})]}),(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Zahlen anzeigen`}),(0,z.jsxs)(`select`,{disabled:n,value:r.labelMode||`all`,onChange:e=>a({labelMode:e.target.value}),children:[(0,z.jsx)(`option`,{value:`all`,children:`Alle Hauptwerte`}),(0,z.jsx)(`option`,{value:`ends`,children:`Nur Anfang / Ende`}),(0,z.jsx)(`option`,{value:`none`,children:`Ausblenden`})]})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Zahlengröße`}),(0,z.jsx)(`input`,{disabled:n,type:`number`,min:`8`,max:`48`,value:Number(r.labelFontSize??12),onChange:e=>a({labelFontSize:Number(e.target.value||12)})})]})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsxs)(`label`,{children:[`Zahlenposition: `,Number(r.labelOffset??0),` (außen + / innen -)`]}),(0,z.jsx)(`input`,{disabled:n,type:`range`,min:`-90`,max:`48`,value:Number(r.labelOffset??0),onChange:e=>a({labelOffset:Number(e.target.value)})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Zeigerform`}),r.kind===`scale_bar`?(0,z.jsxs)(`select`,{disabled:n,value:r.pointerStyle||`triangle`,onChange:e=>a({pointerStyle:e.target.value}),children:[(0,z.jsx)(`option`,{value:`triangle`,children:`Dreieck`}),(0,z.jsx)(`option`,{value:`line`,children:`Markierungslinie`}),(0,z.jsx)(`option`,{value:`diamond`,children:`Raute`})]}):(0,z.jsxs)(`select`,{disabled:n,value:r.pointerStyle||`needle`,onChange:e=>a({pointerStyle:e.target.value}),children:[(0,z.jsx)(`option`,{value:`needle`,children:`Standardzeiger`}),(0,z.jsx)(`option`,{value:`slim`,children:`Dünner Zeiger`}),(0,z.jsx)(`option`,{value:`wedge`,children:`Breiter Zeiger`})]})]}),(0,z.jsxs)(`div`,{className:`prop-grid-2 instrument-colors`,children:[(0,z.jsx)(In,{label:`Skalen-Hintergrund`,value:r.barColor||`#334155`,onChange:e=>a({barColor:e})}),(0,z.jsx)(In,{label:r.kind===`dial_gauge`?`Zeiger`:`Wertzeiger`,value:r.needleColor||`#f8fafc`,onChange:e=>a({needleColor:e})})]}),(0,z.jsxs)(`div`,{className:`instrument-ranges`,children:[(0,z.jsx)(`div`,{className:`small-title`,children:`Farbbereiche der Skala`}),i.map((e,t)=>(0,z.jsxs)(`div`,{className:`instrument-range-row`,children:[(0,z.jsx)(`input`,{disabled:n,type:`number`,value:Number(e.from??0),onChange:e=>o(t,{from:Number(e.target.value||0)}),"aria-label":`Von`}),(0,z.jsx)(`input`,{disabled:n,type:`number`,value:Number(e.to??0),onChange:e=>o(t,{to:Number(e.target.value||0)}),"aria-label":`Bis`}),(0,z.jsx)(`input`,{disabled:n,type:`color`,value:e.color||`#22c55e`,onChange:e=>o(t,{color:e.target.value}),"aria-label":`Farbe`}),(0,z.jsx)(`button`,{disabled:n,className:`mini-btn danger`,type:`button`,onClick:()=>c(t),"aria-label":`Bereich löschen`,children:`×`})]},t)),(0,z.jsx)(`button`,{disabled:n,type:`button`,className:`btn small`,onClick:s,children:`+ Farbbereich`})]})]})}function pr(e){return e?[`influx`,e.database||``,e.measurement||``,e.tag_key||``,e.tag_value||``].join(`|`):``}function mr(e){return String(e?.measurement||``).trim()}function hr({selected:e,page:t,onChange:n,disabled:r=!1}){let i=e?.style_json||{},a=Array.isArray(i.series)?i.series:[],[o,s]=(0,_.useState)([]),[c,l]=(0,_.useState)(a[0]?.database||``),[u,d]=(0,_.useState)([]),[f,p]=(0,_.useState)(``),[m,h]=(0,_.useState)(a[0]?.measurement||``),[g,v]=(0,_.useState)(!1),[y,b]=(0,_.useState)(``);if((0,_.useEffect)(()=>{let e=!0;return v(!0),b(``),H(`trend_sources`,{database:c}).then(t=>{e&&(s(t.databases||[]),l(e=>e||t.selected_database||t.databases?.[0]||``),d(t.points||[]))}).catch(t=>{e&&b(t.message)}).finally(()=>{e&&v(!1)}),()=>{e=!1}},[c]),(0,_.useEffect)(()=>{m&&(u.some(e=>mr(e)===m)||h(``))},[m,u]),!e||e.element_type!==`value`||i.kind!==`trend_chart`)return null;function x(t){n({...e,style_json:{...i,...t}})}function S(e,t){let n=[...a];n[e]={...n[e],...t},x({series:n})}function C(e=null){let t=e||E[0],n=[`#38bdf8`,`#f97316`,`#22c55e`,`#a78bfa`,`#f43f5e`,`#eab308`];if(!t){x({series:[...a,{id:`trend-${Date.now()}`,label:`Trend ${a.length+1}`,color:n[a.length%n.length],lineWidth:Number(i.lineWidth??3),fillEnabled:!1,fillOpacity:Number(i.fillOpacity??.18)}]});return}x({series:[...a,{id:`trend-${Date.now()}`,database:t.database,measurement:t.measurement,tag_key:t.tag_key,tag_value:t.tag_value,label:t.tag_value||t.label||`Trend ${a.length+1}`,color:n[a.length%n.length],lineWidth:Number(i.lineWidth??3),fillEnabled:!1,fillOpacity:Number(i.fillOpacity??.18)}]})}function w(e){x({series:a.filter((t,n)=>n!==e)})}function T(e,t){let n=u.find(e=>pr(e)===t);n&&S(e,{database:n.database,measurement:n.measurement,tag_key:n.tag_key,tag_value:n.tag_value,label:a[e]?.label||n.tag_value||n.label})}let E=u.filter(e=>{let t=`${e.measurement} ${e.tag_key} ${e.tag_value} ${e.label}`.toLowerCase(),n=!f.trim()||t.includes(f.trim().toLowerCase()),r=!m||mr(e)===m;return n&&r}),D=Array.from(new Set(u.map(mr).filter(Boolean))).sort((e,t)=>e.localeCompare(t,`de`,{numeric:!0,sensitivity:`base`}));return(0,z.jsxs)(`div`,{className:`trend-editor`,children:[(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Influx DB`}),(0,z.jsxs)(`select`,{disabled:r||g,value:c,onChange:e=>l(e.target.value),children:[(0,z.jsx)(`option`,{value:``,children:`DB waehlen`}),o.map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))]})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Datenpunkt suchen`}),(0,z.jsx)(`input`,{disabled:r,value:f,onChange:e=>p(e.target.value),placeholder:`Measurement, Tag, Wert...`})]})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Measurement / FROM`}),(0,z.jsxs)(`select`,{disabled:r||g,value:m,onChange:e=>h(e.target.value),children:[(0,z.jsx)(`option`,{value:``,children:`Alle Measurements`}),D.map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))]})]}),y&&(0,z.jsx)(`div`,{className:`error-box small`,children:y}),g&&(0,z.jsx)(`div`,{className:`small-muted`,children:`Influx-Datenpunkte werden geladen...`}),(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Zeitbereich`}),(0,z.jsxs)(`select`,{disabled:r,value:i.range||`24h`,onChange:e=>x({range:e.target.value}),children:[(0,z.jsx)(`option`,{value:`15m`,children:`15 Minuten`}),(0,z.jsx)(`option`,{value:`1h`,children:`1 Stunde`}),(0,z.jsx)(`option`,{value:`6h`,children:`6 Stunden`}),(0,z.jsx)(`option`,{value:`12h`,children:`12 Stunden`}),(0,z.jsx)(`option`,{value:`24h`,children:`24 Stunden`}),(0,z.jsx)(`option`,{value:`7d`,children:`7 Tage`}),(0,z.jsx)(`option`,{value:`30d`,children:`30 Tage`}),(0,z.jsx)(`option`,{value:`90d`,children:`90 Tage`}),(0,z.jsx)(`option`,{value:`180d`,children:`6 Monate`})]})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Intervall`}),(0,z.jsxs)(`select`,{disabled:r,value:i.interval||`auto`,onChange:e=>x({interval:e.target.value}),children:[(0,z.jsx)(`option`,{value:`auto`,children:`Auto`}),(0,z.jsx)(`option`,{value:`10s`,children:`10 Sekunden`}),(0,z.jsx)(`option`,{value:`30s`,children:`30 Sekunden`}),(0,z.jsx)(`option`,{value:`1m`,children:`1 Minute`}),(0,z.jsx)(`option`,{value:`5m`,children:`5 Minuten`}),(0,z.jsx)(`option`,{value:`10m`,children:`10 Minuten`}),(0,z.jsx)(`option`,{value:`15m`,children:`15 Minuten`}),(0,z.jsx)(`option`,{value:`30m`,children:`30 Minuten`}),(0,z.jsx)(`option`,{value:`1h`,children:`1 Stunde`}),(0,z.jsx)(`option`,{value:`6h`,children:`6 Stunden`}),(0,z.jsx)(`option`,{value:`12h`,children:`12 Stunden`}),(0,z.jsx)(`option`,{value:`1d`,children:`1 Tag`})]})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Aggregation`}),(0,z.jsxs)(`select`,{disabled:r,value:i.aggregate||`mean`,onChange:e=>x({aggregate:e.target.value}),children:[(0,z.jsx)(`option`,{value:`mean`,children:`Mittelwert`}),(0,z.jsx)(`option`,{value:`last`,children:`Letzter Wert`}),(0,z.jsx)(`option`,{value:`min`,children:`Minimum`}),(0,z.jsx)(`option`,{value:`max`,children:`Maximum`})]})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Aktualisierung (s)`}),(0,z.jsx)(`input`,{disabled:r,type:`number`,min:`0`,value:Number(i.refreshSeconds??60),onChange:e=>x({refreshSeconds:Math.max(0,Number(e.target.value||0))})})]})]}),(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Trend-Art`}),(0,z.jsxs)(`select`,{disabled:r,value:i.displayMode||`line`,onChange:e=>x({displayMode:e.target.value}),children:[(0,z.jsx)(`option`,{value:`line`,children:`Linie`}),(0,z.jsx)(`option`,{value:`digital_bar`,children:`Liegende Digital-Balken`}),(0,z.jsx)(`option`,{value:`vertical_bar`,children:`Stehende Balken`}),(0,z.jsx)(`option`,{value:`donut`,children:`Donut / Kuchen`})]})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Linieninterpolation`}),(0,z.jsxs)(`select`,{disabled:r||(i.displayMode||`line`)!==`line`,value:i.interpolation||`linear`,onChange:e=>x({interpolation:e.target.value}),children:[(0,z.jsx)(`option`,{value:`linear`,children:`Gerade`}),(0,z.jsx)(`option`,{value:`smooth`,children:`Verrundet`}),(0,z.jsx)(`option`,{value:`step`,children:`Stufe`})]})]})]}),(0,z.jsxs)(`label`,{className:`check-line`,children:[(0,z.jsx)(`input`,{disabled:r,type:`checkbox`,checked:i.showLegend!==!1,onChange:e=>x({showLegend:e.target.checked})}),`Legende anzeigen`]}),(0,z.jsxs)(`label`,{className:`check-line`,children:[(0,z.jsx)(`input`,{disabled:r,type:`checkbox`,checked:i.connectNulls!==!1,onChange:e=>x({connectNulls:e.target.checked})}),`NULL-Werte verbinden`]}),(0,z.jsxs)(`div`,{className:`trend-series-list`,children:[(0,z.jsx)(`div`,{className:`small-title`,children:`Datenreihen`}),a.map((e,t)=>{let n=pr(e),a=u.some(e=>pr(e)===n);return(0,z.jsxs)(`div`,{className:`trend-series-row`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Datenpunkt`}),(0,z.jsxs)(`select`,{disabled:r,value:n,onChange:e=>T(t,e.target.value),children:[!a&&n&&(0,z.jsxs)(`option`,{value:n,children:[e.measurement,` · `,e.tag_value]}),(0,z.jsx)(`option`,{value:``,children:`Datenpunkt waehlen`}),E.slice(0,400).map(e=>(0,z.jsxs)(`option`,{value:pr(e),children:[e.measurement,` · `,e.tag_value]},pr(e)))]})]}),(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Name`}),(0,z.jsx)(`input`,{disabled:r,value:e.label||``,onChange:e=>S(t,{label:e.target.value})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Farbe`}),(0,z.jsx)(`input`,{disabled:r,type:`color`,value:e.color||`#38bdf8`,onChange:e=>S(t,{color:e.target.value})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Y-Achse`}),(0,z.jsxs)(`select`,{disabled:r,value:Number(e.yAxis||1),onChange:e=>S(t,{yAxis:Number(e.target.value||1)}),children:[(0,z.jsx)(`option`,{value:1,children:`Achse 1 links`}),(0,z.jsx)(`option`,{value:2,children:`Achse 2 rechts`}),(0,z.jsx)(`option`,{value:3,children:`Achse 3 rechts`}),(0,z.jsx)(`option`,{value:4,children:`Achse 4 rechts`})]})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Einheit`}),(0,z.jsx)(`input`,{disabled:r,value:e.unit||``,onChange:e=>S(t,{unit:e.target.value}),placeholder:`z.B. °C, bar, kW`})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Linienstarke`}),(0,z.jsx)(`input`,{disabled:r,type:`number`,min:`1`,max:`16`,value:Number(e.lineWidth??i.lineWidth??3),onChange:e=>S(t,{lineWidth:Math.max(1,Number(e.target.value||1))})})]}),(0,z.jsxs)(`label`,{className:`check-line`,children:[(0,z.jsx)(`input`,{disabled:r,type:`checkbox`,checked:!!e.fillEnabled,onChange:e=>S(t,{fillEnabled:e.target.checked})}),`Flaeche fuellen`]})]}),e.fillEnabled&&(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Fuellung Deckkraft`}),(0,z.jsx)(`input`,{disabled:r,type:`range`,min:`0`,max:`0.8`,step:`0.05`,value:Number(e.fillOpacity??i.fillOpacity??.18),onChange:e=>S(t,{fillOpacity:Number(e.target.value)})})]}),(0,z.jsxs)(`div`,{className:`rule-footer`,children:[(0,z.jsxs)(`span`,{children:[`Reihe `,t+1]}),(0,z.jsx)(`button`,{disabled:r,type:`button`,className:`mini-btn danger`,onClick:()=>w(t),children:`Entfernen`})]})]},e.id||t)}),a.length===0&&(0,z.jsx)(`div`,{className:`empty-mini`,children:`Noch keine Datenreihe im Graph.`}),(0,z.jsx)(`button`,{disabled:r,type:`button`,className:`btn small`,onClick:()=>C(),children:`+ Datenreihe hinzufuegen`})]}),(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsx)(In,{label:`Hintergrund`,value:i.backgroundColor||`rgba(15, 23, 42, 0.46)`,onChange:e=>x({backgroundColor:e})}),(0,z.jsx)(In,{label:`Rahmen`,value:i.borderColor||`rgba(148, 163, 184, 0.42)`,onChange:e=>x({borderColor:e})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Radius`}),(0,z.jsxs)(`div`,{className:`range-input-row`,children:[(0,z.jsx)(`input`,{disabled:r,type:`range`,min:`0`,max:`80`,value:Number(i.radius??14),onChange:e=>x({radius:Number(e.target.value||0)})}),(0,z.jsx)(`input`,{disabled:r,type:`number`,min:`0`,max:`80`,value:Number(i.radius??14),onChange:e=>x({radius:Number(e.target.value||0)})})]})]})]})}function gr({title:e,children:t,open:n=!1}){return(0,z.jsxs)(`details`,{className:`property-section`,open:n,children:[(0,z.jsx)(`summary`,{children:e}),(0,z.jsx)(`div`,{className:`property-section-body`,children:t})]})}function _r({page:e,selected:t,assets:n,pointEditElementId:r,onChange:i,onDelete:a,onBringFront:o,onSendBack:s,onZPlus:c,onZMinus:l,onStartPointEdit:u,onFinishPointEdit:d,disabled:f=!1}){if(!t)return(0,z.jsxs)(`aside`,{className:`properties`,children:[(0,z.jsx)(`h3`,{children:`Eigenschaften`}),(0,z.jsx)(`div`,{className:`empty-mini`,children:`Element auswählen.`})]});let p=t.style_json||{},m=t.element_type===`shape`,h=m&&p.subtype===`polyline`,g=t.element_type===`value`&&[`scale_bar`,`dial_gauge`].includes(p.kind),_=t.element_type===`value`&&p.kind===`trend_chart`,v=t.element_type===`value`&&p.kind===`sankey_chart`,y=r===t.id;function b(e,n){i({...t,[e]:n})}function x(e,n){i({...t,style_json:{...p,[e]:n}})}function S(e){i({...t,style_json:{...p,...e}})}function w(e){let t={subtype:e};e===`link`&&(t.textRules=[],t.linkMode=p.linkMode||`page`,t.linkPageId=p.linkPageId||``,t.linkUrl=p.linkUrl||``,t.linkTarget=p.linkTarget||`same_tab`,t.renderAsButton=!!p.renderAsButton,t.buttonShape=p.buttonShape||`rounded`,t.buttonRadius=Number(p.buttonRadius??16),t.buttonFill=p.buttonFill||`rgba(37, 99, 235, 0.78)`,t.buttonBorderColor=p.buttonBorderColor||`rgba(147, 197, 253, 0.72)`),e===`menu`&&(t.menuOrientation=p.menuOrientation||`vertical`,t.menuGap=Number(p.menuGap??8),t.menuButtonSize=Number(p.menuButtonSize??42),t.renderAsButton=p.renderAsButton??!0,t.buttonShape=p.buttonShape||`rounded`,t.buttonRadius=Number(p.buttonRadius??16),t.buttonFill=p.buttonFill||`rgba(37, 99, 235, 0.78)`,t.buttonBorderColor=p.buttonBorderColor||`rgba(147, 197, 253, 0.72)`,t.menuItems=tr(p.menuItems).length?tr(p.menuItems):[$n(`Link 1`),$n(`Link 2`)]),S(t)}let T=p.subtype||`text`,E=tr(p.menuItems);function D(e,t){let n=[...E];n[e]={...n[e],...t},x(`menuItems`,n)}function O(){x(`menuItems`,[...E,$n(`Link ${E.length+1}`)])}function ee(e){let t=E.filter((t,n)=>n!==e);x(`menuItems`,t.length?t:[$n(`Link 1`)])}function te(e){let n=t.w>0&&t.h>0?t.w/t.h:1;i({...t,style_json:{...p,aspectLocked:e,aspectRatio:n}})}function ne(e){let n=Math.max(1,Number(e||1));if(p.aspectLocked){let e=Number(p.aspectRatio||t.w/t.h||1);i({...t,w:n,h:Math.max(1,Math.round(n/e))});return}b(`w`,n)}function A(e){let n=Math.max(1,Number(e||1));if(p.aspectLocked){let e=Number(p.aspectRatio||t.w/t.h||1);i({...t,h:n,w:Math.max(1,Math.round(n*e))});return}b(`h`,n)}return(0,z.jsxs)(`aside`,{className:`properties`,children:[(0,z.jsx)(`h3`,{children:`Eigenschaften`}),(0,z.jsxs)(`div`,{className:`properties-scroll`,children:[(0,z.jsxs)(gr,{title:`Allgemein`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Name`}),(0,z.jsx)(`input`,{disabled:f,value:t.name||``,onChange:e=>b(`name`,e.target.value)})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Label`}),(0,z.jsx)(`input`,{disabled:f,value:t.label||``,onChange:e=>b(`label`,e.target.value)})]})]}),t.element_type===`value`&&!_&&!v&&(0,z.jsxs)(gr,{title:`Wertzuordnung`,open:!0,children:[(0,z.jsx)(br,{page:e,onlyWritable:p.kind===`setpoint`,value:p.point?k(p.point):``,onChange:e=>{if(!e){i({...t,variable_id:``,style_json:{...p,point:null}});return}i({...t,variable_id:e.variable_id||``,label:t.label||e.raw_label||e.label||``,style_json:{...p,point:{type:e.type,external_id:e.external_id,variable_id:e.variable_id||``,point_key:e.point_key||``,point_label:e.label||``}}})}}),!g&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Kennung`}),(0,z.jsx)(`input`,{disabled:f,value:p.marker||``,onChange:e=>x(`marker`,e.target.value),placeholder:`T, P, F, SP`})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Kennung Farbe`}),(0,z.jsx)(`input`,{disabled:f,type:`color`,value:p.markerColor||p.color||`#f59e0b`,onChange:e=>x(`markerColor`,e.target.value)})]})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Nachkommastellen`}),(0,z.jsx)(`input`,{disabled:f,type:`number`,min:`0`,max:`8`,value:Number(p.decimals??1),onChange:e=>x(`decimals`,Math.max(0,Math.min(8,Number(e.target.value||0))))})]}),(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Einheit`}),(0,z.jsxs)(`select`,{disabled:f,value:p.unitMode||`auto`,onChange:e=>x(`unitMode`,e.target.value),children:[(0,z.jsx)(`option`,{value:`auto`,children:`Aus Datenpunkt`}),(0,z.jsx)(`option`,{value:`custom`,children:`Eigene Einheit`}),(0,z.jsx)(`option`,{value:`hidden`,children:`Ausblenden`})]})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Eigene Einheit`}),(0,z.jsx)(`input`,{disabled:f||p.unitMode!==`custom`,value:p.unit||``,onChange:e=>x(`unit`,e.target.value),placeholder:`z.B. °C, bar`})]})]})]})]}),t.element_type===`value`&&!g&&!_&&!v&&(0,z.jsxs)(gr,{title:`Wert-Darstellung`,children:[(0,z.jsxs)(`label`,{className:`check-line`,children:[(0,z.jsx)(`input`,{disabled:f,type:`checkbox`,checked:p.showBorder!==!1,onChange:e=>x(`showBorder`,e.target.checked)}),`Rahmen anzeigen`]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Rahmenstärke`}),(0,z.jsx)(`input`,{disabled:f||p.showBorder===!1,type:`number`,min:`0`,max:`16`,value:Number(p.strokeWidth??3),onChange:e=>x(`strokeWidth`,Math.max(0,Math.min(16,Number(e.target.value||0))))})]}),(0,z.jsx)(Rn,{style:p,updateStyle:x,disabled:f}),(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Kennung Größe`}),(0,z.jsx)(`input`,{disabled:f,type:`number`,min:`8`,max:`80`,value:Number(p.markerSize??34),onChange:e=>x(`markerSize`,Number(e.target.value||34))})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Kennung Schrift`}),(0,z.jsx)(`input`,{disabled:f,type:`number`,min:`6`,max:`48`,value:Number(p.markerFontSize??13),onChange:e=>x(`markerFontSize`,Number(e.target.value||13))})]})]}),(0,z.jsx)(In,{label:`Kennung Textfarbe`,value:p.markerTextColor||`#0f172a`,onChange:e=>x(`markerTextColor`,e)}),(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Label Schriftgröße`}),(0,z.jsx)(`input`,{disabled:f,type:`number`,min:`6`,max:`48`,value:Number(p.labelFontSize??12),onChange:e=>x(`labelFontSize`,Number(e.target.value||12))})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Wert Schriftgröße`}),(0,z.jsx)(`input`,{disabled:f,type:`number`,min:`8`,max:`80`,value:Number(p.valueFontSize??20),onChange:e=>x(`valueFontSize`,Number(e.target.value||20))})]})]}),(0,z.jsx)(In,{label:`Label Textfarbe`,value:p.labelColor||`#cbd5e1`,onChange:e=>x(`labelColor`,e)}),(0,z.jsx)(In,{label:`Wert Textfarbe`,value:p.valueColor||`#ffffff`,onChange:e=>x(`valueColor`,e)})]}),t.element_type===`value`&&p.kind===`setpoint`&&(0,z.jsxs)(gr,{title:`Sollwert-Darstellung`,children:[(0,z.jsx)(Ln,{strokeColor:p.strokeColor||p.color||`#60a5fa`,fillColor:p.fillColor||`#082f49`,onStroke:e=>x(`strokeColor`,e),onFill:e=>x(`fillColor`,e)}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Hintergrund`}),(0,z.jsxs)(`select`,{disabled:f,value:p.fillMode||`linear`,onChange:e=>x(`fillMode`,e.target.value),children:[(0,z.jsx)(`option`,{value:`solid`,children:`Einfarbig`}),(0,z.jsx)(`option`,{value:`linear`,children:`Linearer Verlauf`}),(0,z.jsx)(`option`,{value:`radial`,children:`Radialer Verlauf`})]})]}),(p.fillMode||`linear`)!==`solid`&&(0,z.jsx)(In,{label:`Zweite Verlaufsfarbe`,value:p.gradientColor||`#2563eb`,onChange:e=>x(`gradientColor`,e)}),(p.fillMode||`linear`)===`linear`&&(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsxs)(`label`,{children:[`Verlaufsrichtung: `,Number(p.gradientAngle??110),`°`]}),(0,z.jsx)(`input`,{disabled:f,type:`range`,min:`0`,max:`360`,value:Number(p.gradientAngle??110),onChange:e=>x(`gradientAngle`,Number(e.target.value))})]})]}),g&&(0,z.jsx)(gr,{title:`Skala und Anzeige`,children:(0,z.jsx)(fr,{selected:t,onChange:i,disabled:f})}),_&&(0,z.jsx)(gr,{title:`Trenddaten`,open:!0,children:(0,z.jsx)(hr,{selected:t,page:e,onChange:i,disabled:f})}),v&&(0,z.jsx)(gr,{title:`Sankey-Daten`,open:!0,children:(0,z.jsx)(Mn,{selected:t,page:e,onChange:i,disabled:f})}),(0,z.jsxs)(gr,{title:`Position und Darstellung`,open:!g,children:[(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`X`}),(0,z.jsx)(`input`,{disabled:f,type:`number`,value:Math.round(t.x),onChange:e=>b(`x`,Number(e.target.value||0))})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Y`}),(0,z.jsx)(`input`,{disabled:f,type:`number`,value:Math.round(t.y),onChange:e=>b(`y`,Number(e.target.value||0))})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Breite`}),(0,z.jsx)(`input`,{disabled:f,type:`number`,value:Math.round(t.w),onChange:e=>ne(e.target.value)})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Höhe`}),(0,z.jsx)(`input`,{disabled:f,type:`number`,value:Math.round(t.h),onChange:e=>A(e.target.value)})]})]}),t.element_type===`asset`&&(0,z.jsx)(`button`,{type:`button`,disabled:f,className:`btn small ${p.aspectLocked??!0?`primary`:``}`,onClick:()=>te(!(p.aspectLocked??!0)),title:`Seitenverhältnis verknüpfen`,children:p.aspectLocked??!0?`🔗 Verhältnis an`:`⛓️‍💥 Verhältnis aus`}),t.element_type===`text`&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Schriftgröße`}),(0,z.jsx)(`input`,{disabled:f,type:`number`,value:p.fontSize||20,onChange:e=>x(`fontSize`,Number(e.target.value||20))})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Schriftart`}),(0,z.jsx)(`select`,{disabled:f,value:p.fontFamily||C[0].value,onChange:e=>x(`fontFamily`,e.target.value),children:C.map(e=>(0,z.jsx)(`option`,{value:e.value,style:{fontFamily:e.value},children:e.label},e.value))})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Typ`}),(0,z.jsxs)(`select`,{disabled:f,value:T,onChange:e=>w(e.target.value),children:[(0,z.jsx)(`option`,{value:`text`,children:`Text`}),(0,z.jsx)(`option`,{value:`link`,children:`Link`}),(0,z.jsx)(`option`,{value:`menu`,children:`Menü`})]})]})]}),t.element_type===`text`&&[`link`,`menu`].includes(T)&&(0,z.jsxs)(`div`,{className:`attached-editor-row`,children:[(0,z.jsx)(`div`,{className:`small-title`,children:`Button-Darstellung`}),(0,z.jsxs)(`label`,{className:`check-line`,children:[(0,z.jsx)(`input`,{disabled:f,type:`checkbox`,checked:!!p.renderAsButton,onChange:e=>x(`renderAsButton`,e.target.checked)}),T===`menu`?`Links als Buttons darstellen`:`Als Button darstellen`]}),!!p.renderAsButton&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Form`}),(0,z.jsxs)(`select`,{disabled:f,value:p.buttonShape||`rounded`,onChange:e=>x(`buttonShape`,e.target.value),children:[(0,z.jsx)(`option`,{value:`rect`,children:`Rechteckig`}),(0,z.jsx)(`option`,{value:`rounded`,children:`Abgerundet`})]})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Radius`}),(0,z.jsxs)(`div`,{className:`range-input-row`,children:[(0,z.jsx)(`input`,{disabled:f||(p.buttonShape||`rounded`)===`rect`,type:`range`,min:`0`,max:`80`,value:Number(p.buttonRadius??16),onChange:e=>x(`buttonRadius`,Number(e.target.value||0))}),(0,z.jsx)(`input`,{disabled:f||(p.buttonShape||`rounded`)===`rect`,type:`number`,min:`0`,max:`80`,value:Number(p.buttonRadius??16),onChange:e=>x(`buttonRadius`,Number(e.target.value||0))})]})]}),T===`menu`&&(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:(p.menuOrientation||`vertical`)===`horizontal`?`Buttonbreite`:`Buttonhöhe`}),(0,z.jsx)(`input`,{disabled:f,type:`number`,min:`22`,max:`320`,value:Number(p.menuButtonSize??42),onChange:e=>x(`menuButtonSize`,Math.max(22,Number(e.target.value||22)))})]})]})]}),t.element_type===`text`&&(0,z.jsxs)(`div`,{className:`attached-editor-row`,children:[(0,z.jsx)(`div`,{className:`small-title`,children:`Rahmen und Füllung`}),(0,z.jsx)(Ln,{strokeColor:p.strokeColor||p.color||`#60a5fa`,fillColor:p.fillColor||`transparent`,onStroke:e=>x(`strokeColor`,e),onFill:e=>x(`fillColor`,e)}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Füllung`}),(0,z.jsxs)(`select`,{disabled:f,value:p.fillMode||`solid`,onChange:e=>x(`fillMode`,e.target.value),children:[(0,z.jsx)(`option`,{value:`solid`,children:`Einfarbig`}),(0,z.jsx)(`option`,{value:`linear`,children:`Linearer Verlauf`}),(0,z.jsx)(`option`,{value:`radial`,children:`Radialer Verlauf`})]})]}),(p.fillMode===`linear`||p.fillMode===`radial`)&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(In,{label:`Zweite Verlaufsfarbe`,value:p.gradientColor||`#1d4ed8`,onChange:e=>x(`gradientColor`,e)}),(0,z.jsx)(cr,{value:p.gradientOrigin||`center`,disabled:f,onChange:e=>x(`gradientOrigin`,e)})]}),p.fillMode===`linear`&&(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsxs)(`label`,{children:[`Verlaufsrichtung: `,Number(p.gradientAngle||0),`°`]}),(0,z.jsx)(`input`,{disabled:f,type:`range`,min:`0`,max:`360`,value:Number(p.gradientAngle||0),onChange:e=>x(`gradientAngle`,Number(e.target.value))})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Linienstärke`}),(0,z.jsx)(`input`,{disabled:f,type:`number`,value:Number(p.strokeWidth??0),onChange:e=>x(`strokeWidth`,Number(e.target.value||0))})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Radius`}),(0,z.jsxs)(`div`,{className:`range-input-row`,children:[(0,z.jsx)(`input`,{disabled:f,type:`range`,min:`0`,max:`200`,value:Number(p.radius||0),onChange:e=>x(`radius`,Number(e.target.value||0))}),(0,z.jsx)(`input`,{disabled:f,type:`number`,min:`0`,max:`200`,value:Number(p.radius||0),onChange:e=>x(`radius`,Number(e.target.value||0))})]})]})]})]}),(0,z.jsxs)(gr,{title:`Ebene`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Z-Ebene`}),(0,z.jsx)(`input`,{disabled:f,type:`number`,value:t.z_index||10,onChange:e=>b(`z_index`,Number(e.target.value||10))})]}),(0,z.jsxs)(`div`,{className:`z-buttons`,children:[(0,z.jsx)(`button`,{disabled:f,type:`button`,className:`btn small`,onClick:()=>o(t.id),children:`Ganz vorne`}),(0,z.jsx)(`button`,{disabled:f,type:`button`,className:`btn small`,onClick:()=>s(t.id),children:`Ganz hinten`}),(0,z.jsx)(`button`,{disabled:f,type:`button`,className:`btn small`,onClick:()=>c(t.id),children:`+1`}),(0,z.jsx)(`button`,{disabled:f,type:`button`,className:`btn small`,onClick:()=>l(t.id),children:`-1`})]})]}),(0,z.jsxs)(gr,{title:`Rotation und Deckkraft`,open:!g,children:[!h&&(0,z.jsxs)(`div`,{className:`rotation-editor`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Drehung`}),(0,z.jsxs)(`div`,{className:`rotation-input-row`,children:[(0,z.jsx)(`input`,{disabled:f,type:`number`,value:Number(t.rotation||0),onChange:e=>b(`rotation`,Number(e.target.value||0))}),(0,z.jsx)(`span`,{children:`°`})]}),(0,z.jsx)(`input`,{disabled:f,type:`range`,min:`-180`,max:`180`,value:t.rotation||0,onChange:e=>b(`rotation`,Number(e.target.value))})]}),(0,z.jsx)(`div`,{className:`rotation-jumps`,children:[-180,-90,-45,45,90,180].map(e=>(0,z.jsxs)(`button`,{disabled:f,type:`button`,className:`btn small`,onClick:()=>b(`rotation`,Number(t.rotation||0)+e),children:[e>0?`+`:``,e,`°`]},e))})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsxs)(`label`,{children:[`Deckkraft: `,Math.round((t.opacity??1)*100),`%`]}),(0,z.jsx)(`input`,{disabled:f,type:`range`,min:`0`,max:`1`,step:`0.05`,value:t.opacity??1,onChange:e=>b(`opacity`,Number(e.target.value))})]})]}),m&&(0,z.jsxs)(gr,{title:`Form und Füllung`,children:[(0,z.jsx)(Ln,{strokeColor:p.strokeColor||p.color||`#60a5fa`,fillColor:p.fillColor||`#000000`,onStroke:e=>x(`strokeColor`,e),onFill:e=>x(`fillColor`,e)}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Füllung`}),(0,z.jsxs)(`select`,{disabled:f,value:p.fillMode||`solid`,onChange:e=>x(`fillMode`,e.target.value),children:[(0,z.jsx)(`option`,{value:`solid`,children:`Einfarbig`}),(0,z.jsx)(`option`,{value:`linear`,children:`Linearer Verlauf`}),(0,z.jsx)(`option`,{value:`radial`,children:`Radialer Verlauf`})]})]}),(p.fillMode===`linear`||p.fillMode===`radial`)&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(In,{label:`Zweite Verlaufsfarbe`,value:p.gradientColor||`#1d4ed8`,onChange:e=>x(`gradientColor`,e)}),(0,z.jsx)(cr,{value:p.gradientOrigin||`center`,disabled:f,onChange:e=>x(`gradientOrigin`,e)})]}),p.fillMode===`linear`&&(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsxs)(`label`,{children:[`Verlaufsrichtung: `,Number(p.gradientAngle||0),`°`]}),(0,z.jsx)(`input`,{disabled:f,type:`range`,min:`0`,max:`360`,value:Number(p.gradientAngle||0),onChange:e=>x(`gradientAngle`,Number(e.target.value))})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Linienstärke`}),(0,z.jsx)(`input`,{disabled:f,type:`number`,value:p.strokeWidth||4,onChange:e=>x(`strokeWidth`,Number(e.target.value||1))})]}),p.subtype===`rect`&&(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Radius`}),(0,z.jsxs)(`div`,{className:`range-input-row`,children:[(0,z.jsx)(`input`,{disabled:f,type:`range`,min:`0`,max:`200`,value:Number(p.radius||0),onChange:e=>x(`radius`,Number(e.target.value||0))}),(0,z.jsx)(`input`,{disabled:f,type:`number`,min:`0`,max:`200`,value:Number(p.radius||0),onChange:e=>x(`radius`,Number(e.target.value||0))})]})]}),h&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{className:`check-line`,children:[(0,z.jsx)(`input`,{disabled:f,type:`checkbox`,checked:!!p.fillClosed,onChange:e=>x(`fillClosed`,e.target.checked)}),`Fläche schließen und füllen`]}),y?(0,z.jsx)(`button`,{type:`button`,className:`btn small primary`,onClick:d,children:`✓ Punkte übernehmen`}):(0,z.jsx)(`button`,{disabled:f,type:`button`,className:`btn small`,onClick:()=>u(t.id),children:`?? Punkte bearbeiten`})]})]}),m&&p.subtype===`polygon`&&(0,z.jsx)(gr,{title:`Punkte`,open:!0,children:y?(0,z.jsx)(`button`,{type:`button`,className:`btn small primary`,onClick:d,children:`Punkte übernehmen`}):(0,z.jsx)(`button`,{disabled:f,type:`button`,className:`btn small`,onClick:()=>u(t.id),children:`Punkte bearbeiten`})}),m&&(0,z.jsxs)(gr,{title:`Dynamik und Regeln`,children:[(0,z.jsx)(ir,{page:e,selected:t,onChange:i,disabled:f}),(0,z.jsx)(ur,{page:e,selected:t,onChange:i,disabled:f}),(0,z.jsx)(Zn,{page:e,selected:t,onChange:i,disabled:f})]}),t.element_type===`text`&&(0,z.jsxs)(gr,{title:`Text und Zustände`,open:!0,children:[(0,z.jsx)(In,{label:`Textfarbe`,value:p.color||`#ffffff`,onChange:e=>x(`color`,e)}),(0,z.jsx)(ir,{page:e,selected:t,onChange:i,disabled:f}),T===`link`&&(0,z.jsx)(z.Fragment,{children:(0,z.jsxs)(`div`,{className:`attached-editor-row`,children:[(0,z.jsx)(`div`,{className:`small-title`,children:`Linkziel`}),(0,z.jsx)(rr,{value:p,onChange:e=>S(e),disabled:f})]})}),T===`menu`&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Anordnung`}),(0,z.jsxs)(`select`,{disabled:f,value:p.menuOrientation||`vertical`,onChange:e=>x(`menuOrientation`,e.target.value),children:[(0,z.jsx)(`option`,{value:`vertical`,children:`Vertikal`}),(0,z.jsx)(`option`,{value:`horizontal`,children:`Horizontal`})]})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Abstand`}),(0,z.jsx)(`input`,{disabled:f,type:`number`,min:`0`,value:Number(p.menuGap??8),onChange:e=>x(`menuGap`,Math.max(0,Number(e.target.value||0)))})]})]}),(0,z.jsxs)(`div`,{className:`attached-editor`,children:[(0,z.jsx)(`div`,{className:`small-title`,children:`Menülinks`}),E.map((e,t)=>(0,z.jsxs)(`div`,{className:`attached-editor-row`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Bezeichnung`}),(0,z.jsx)(`input`,{disabled:f,value:e.label||``,onChange:e=>D(t,{label:e.target.value}),placeholder:`Link ${t+1}`})]}),(0,z.jsx)(rr,{value:e,onChange:e=>D(t,e),disabled:f}),(0,z.jsxs)(`div`,{className:`rule-footer`,children:[(0,z.jsxs)(`span`,{children:[`Eintrag `,t+1]}),(0,z.jsx)(`button`,{disabled:f,type:`button`,className:`mini-btn danger`,onClick:()=>ee(t),children:`Entfernen`})]})]},e.id||t)),(0,z.jsx)(`button`,{disabled:f,type:`button`,className:`btn small`,onClick:O,children:`+ Menülink hinzufügen`})]})]}),T===`text`&&(0,z.jsx)(ar,{page:e,selected:t,onChange:i,disabled:f})]}),t.element_type===`asset`&&(0,z.jsxs)(gr,{title:`Symbolzustände und Werte`,children:[(0,z.jsx)(ir,{page:e,selected:t,onChange:i,disabled:f}),(0,z.jsx)(dr,{page:e,selected:t,onChange:i}),(0,z.jsx)(Xn,{page:e,selected:t,assets:n,onChange:i})]})]}),(0,z.jsx)(`div`,{className:`properties-footer`,children:(0,z.jsx)(`button`,{disabled:f,type:`button`,className:`btn small danger`,onClick:()=>a(t.id),children:`Löschen`})})]})}function vr({placeholders:e=[],value:t,onChange:n}){let r=Array.isArray(e)?e:[];function i(e){let t=String(e||``).split(`|`).pop(),i=r.find(e=>e.key===t);if(!i){n(null);return}n({type:`placeholder`,variable_type:`placeholder`,external_id:``,variable_id:``,point_key:i.key,point_label:i.label||i.key,label:i.label||i.key,source_key:`placeholder|||${i.key}`})}return(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Platzhalter`}),(0,z.jsxs)(`select`,{className:`form-input`,value:t||``,onChange:e=>i(e.target.value),children:[(0,z.jsx)(`option`,{value:``,children:`Platzhalter wählen…`}),r.map(e=>(0,z.jsx)(`option`,{value:`placeholder|||${e.key}`,children:e.label||e.key},e.key))]}),r.length===0&&(0,z.jsx)(`div`,{className:`small-muted`,children:`Noch keine Platzhalter im Template.`})]})}function yr({page:e,onChange:t,onDirty:n,disabled:r=!1}){let[i,a]=(0,_.useState)(``);if(!e?.is_template)return null;let o=Array.isArray(e.template_placeholders)?e.template_placeholders:[];function s(e){return String(e||``).trim().toLowerCase().replace(/[^a-z0-9_]+/g,`_`).replace(/^_+|_+$/g,``)}function c(r){t({...e,template_placeholders:r}),n?.()}function l(){let e=i.trim(),t=s(e)||`platzhalter_${o.length+1}`,n=t,r=2;for(;o.some(e=>e.key===n);)n=`${t}_${r}`,r+=1;c([...o,{key:n,label:e||n,type:`analog`}]),a(``)}function u(e,t){c(o.map((n,r)=>r===e?{...n,...t}:n))}function d(e){c(o.filter((t,n)=>n!==e))}return(0,z.jsxs)(`details`,{className:`property-section toolbox-section`,open:!0,children:[(0,z.jsx)(`summary`,{children:`Platzhalter`}),(0,z.jsxs)(`div`,{className:`property-section-body toolbox-section-body`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Neuer Platzhalter`}),(0,z.jsx)(`input`,{disabled:r,value:i,onChange:e=>a(e.target.value),placeholder:`z.B. Vorlauf Temperatur`})]}),(0,z.jsx)(`button`,{disabled:r||!i.trim(),type:`button`,className:`btn small`,onClick:l,children:`+ Platzhalter`}),o.map((e,t)=>(0,z.jsxs)(`div`,{className:`attached-editor-row`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Name`}),(0,z.jsx)(`input`,{disabled:r,value:e.label||``,onChange:e=>u(t,{label:e.target.value})})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Schlüssel`}),(0,z.jsx)(`input`,{disabled:!0,value:e.key||``})]}),(0,z.jsx)(`button`,{disabled:r,type:`button`,className:`mini-btn danger`,onClick:()=>d(t),children:`Entfernen`})]},e.key||t))]})]})}function br({page:e,value:t,onChange:n,onlyWritable:r=!1}){return e?.is_template?(0,z.jsx)(vr,{placeholders:e.template_placeholders||[],value:t,onChange:n}):(0,z.jsx)(Fn,{projectId:e?.project_id,onlyWritable:r,value:t,onChange:n})}function xr(e,t=``){let n=String(e??``);return{type:`static`,variable_type:`static`,external_id:``,variable_id:``,point_key:``,point_label:`Fester Wert ${n}`,label:`Fester Wert ${n}`,static_value:n,value:n,value_formatted:n,templatePlaceholderKey:t,source_key:`static||||${n}`}}function Sr({page:e,placeholderKey:t,value:n,onChange:r}){let i=(n?.type||n?.variable_type)===`static`,[a,o]=(0,_.useState)(i?`static`:`point`);(0,_.useEffect)(()=>{o(i?`static`:`point`)},[i]);function s(e){o(e),e===`static`&&r(xr(n?.static_value??n?.value??``,t))}return(0,z.jsxs)(`div`,{className:`template-binding-field`,children:[(0,z.jsxs)(`div`,{className:`segmented tiny`,children:[(0,z.jsx)(`button`,{type:`button`,className:a===`point`?`active`:``,onClick:()=>s(`point`),children:`Datenpunkt`}),(0,z.jsx)(`button`,{type:`button`,className:a===`static`?`active`:``,onClick:()=>s(`static`),children:`Fester Wert`})]}),a===`static`?(0,z.jsxs)(`div`,{className:`field compact-field`,children:[(0,z.jsx)(`label`,{children:`Fester Wert`}),(0,z.jsx)(`input`,{className:`form-input`,value:n?.static_value??n?.value??``,onChange:e=>r(xr(e.target.value,t)),placeholder:`z.B. 1 oder 0`})]}):(0,z.jsx)(br,{page:e,value:n&&!i?k(n):``,onChange:r})]})}function Cr(e,t=``){if(!e)return null;if((e.type||e.variable_type)===`static`){let n=e.static_value??e.value??``;return{type:`static`,variable_type:`static`,external_id:``,variable_id:``,point_key:``,point_label:e.point_label||e.label||`Fester Wert ${n}`,label:e.label||e.point_label||`Fester Wert ${n}`,static_value:n,value:n,value_formatted:String(n),templatePlaceholderKey:t}}return{type:e.type||e.variable_type||``,variable_type:e.type||e.variable_type||``,external_id:e.external_id||``,variable_id:e.variable_id||``,point_key:e.point_key||``,point_label:e.point_label||e.label||``,label:e.label||e.point_label||``,templatePlaceholderKey:t}}function wr(e={}){let t={};return Object.entries(e||{}).forEach(([e,n])=>{let r=Cr(n,e);r&&(t[e]=r)}),t}function Tr(e){return!!(e&&typeof e==`object`&&!Array.isArray(e)&&(e.variable_type===`placeholder`||e.type===`placeholder`)&&e.point_key)}function Er(e,t){if(Array.isArray(e))return e.map(e=>Er(e,t));if(!e||typeof e!=`object`)return e;let n={};if(Object.entries(e).forEach(([e,r])=>{n[e]=Er(r,t)}),Tr(e)){let r=Cr(t[e.point_key],e.point_key);return r?{...n,...r}:{...n,templatePlaceholderKey:e.point_key}}return n}function Dr(e,t){if(Array.isArray(e))return e.map(e=>Dr(e,t));if(!e||typeof e!=`object`)return e;let n={};Object.entries(e).forEach(([e,r])=>{n[e]=Dr(r,t)});let r=e.templatePlaceholderKey;return r&&t[r]?{...n,...Cr(t[r],r)}:n}function Or(e,t={}){if(Array.isArray(e))return e.forEach(e=>Or(e,t)),t;if(!e||typeof e!=`object`)return t;let n=e.style_json?.templateBindings;return n&&typeof n==`object`&&!Array.isArray(n)&&Object.entries(n).forEach(([e,n])=>{n&&!t[e]&&(t[e]=Cr(n,e))}),e.templatePlaceholderKey&&!t[e.templatePlaceholderKey]&&(t[e.templatePlaceholderKey]=Cr(e,e.templatePlaceholderKey)),Object.values(e).forEach(e=>Or(e,t)),t}function kr(e={}){let{templateGroupId:t,templateSourceId:n,templateElementId:r,templateName:i,templatePlaceholders:a,templateBindings:o,...s}=e||{};return s}function Ar(e){let t=new Set;return(e||[]).map(e=>{let n=ee(e),r=b();for(;t.has(r);)r=b();return t.add(r),{...n,id:r,style_json:kr(n.style_json)}})}function jr({open:e,page:t,onClose:n,onInsert:r}){let[i,a]=(0,_.useState)([]),[o,s]=(0,_.useState)(``),[c,l]=(0,_.useState)(null),[u,d]=(0,_.useState)({}),[f,p]=(0,_.useState)(!1),[m,h]=(0,_.useState)(``);if((0,_.useEffect)(()=>{e&&(h(``),p(!0),H(`templates`).then(e=>{let t=e.templates||[];a(t),s(e=>e||String(t[0]?.id||``))}).catch(e=>h(e.message)).finally(()=>p(!1)))},[e]),(0,_.useEffect)(()=>{if(!e||!o){l(null),d({});return}h(``),p(!0),H(`template`,{id:o}).then(e=>{l(e),d({})}).catch(e=>h(e.message)).finally(()=>p(!1))},[e,o]),!e)return null;let g=c?.placeholders||[],v=c?.elements||[];function y(e,t){d(n=>({...n,[e]:t}))}function b(){r(v,u,{id:c?.template?.id||o,name:c?.template?.name||`Template`,placeholders:g}),n()}return(0,tt.createPortal)((0,z.jsx)(`div`,{className:`modal-backdrop`,onPointerDown:n,children:(0,z.jsxs)(`div`,{className:`asset-modal dashboard-widget-modal`,onPointerDown:e=>e.stopPropagation(),children:[(0,z.jsxs)(`div`,{className:`modal-head`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`eyebrow`,children:`Template`}),(0,z.jsx)(`h2`,{children:`Template laden`}),(0,z.jsx)(`p`,{className:`subline`,children:`Platzhalter werden beim Einfuegen mit echten Projektwerten verknuepft.`})]}),(0,z.jsx)(`button`,{type:`button`,className:`icon-close`,onClick:n,children:`x`})]}),m&&(0,z.jsx)(`div`,{className:`error-box small`,children:m}),(0,z.jsxs)(`div`,{className:`asset-modal-form`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Template`}),(0,z.jsxs)(`select`,{className:`form-input`,value:o,onChange:e=>s(e.target.value),children:[(0,z.jsx)(`option`,{value:``,children:`Template waehlen`}),i.map(e=>(0,z.jsx)(`option`,{value:e.id,children:e.name},e.id))]})]}),f&&(0,z.jsx)(`div`,{className:`small-muted`,children:`Template wird geladen...`}),c&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`div`,{className:`small-muted`,children:[v.length,` Element(e), `,g.length,` Platzhalter`]}),g.map(e=>(0,z.jsxs)(`div`,{className:`template-map-row`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:e.label||e.key}),(0,z.jsx)(`div`,{className:`small-muted`,children:e.key})]}),(0,z.jsx)(Sr,{page:t,placeholderKey:e.key,value:u[e.key]||null,onChange:t=>y(e.key,t)})]},e.key)),g.length===0&&(0,z.jsx)(`div`,{className:`empty-mini`,children:`Dieses Template hat keine Platzhalter.`})]})]}),(0,z.jsxs)(`div`,{className:`modal-actions`,children:[(0,z.jsx)(`button`,{type:`button`,className:`btn primary`,disabled:!c||v.length===0,onClick:b,children:`Einfuegen`}),(0,z.jsx)(`button`,{type:`button`,className:`btn`,onClick:n,children:`Abbrechen`})]})]})}),document.body)}function Mr({open:e,page:t,groupElements:n=[],onClose:r,onApply:i}){let a=n[0]?.style_json||{},o=Array.isArray(a.templatePlaceholders)?a.templatePlaceholders:[],[s,c]=(0,_.useState)({});if((0,_.useEffect)(()=>{if(!e)return;let t={};n.forEach(e=>Or(e,t)),c(t)},[e,n]),!e)return null;function l(e,t){c(n=>({...n,[e]:t}))}function u(){i(s),r()}return(0,tt.createPortal)((0,z.jsx)(`div`,{className:`modal-backdrop`,onPointerDown:r,children:(0,z.jsxs)(`div`,{className:`asset-modal dashboard-widget-modal`,onPointerDown:e=>e.stopPropagation(),children:[(0,z.jsxs)(`div`,{className:`modal-head`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`eyebrow`,children:`Template`}),(0,z.jsx)(`h2`,{children:`Platzhalter ändern`}),(0,z.jsx)(`p`,{className:`subline`,children:a.templateName||`Geladenes Template`})]}),(0,z.jsx)(`button`,{type:`button`,className:`icon-close`,onClick:r,children:`x`})]}),(0,z.jsxs)(`div`,{className:`asset-modal-form`,children:[o.map(e=>(0,z.jsxs)(`div`,{className:`template-map-row`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:e.label||e.key}),(0,z.jsx)(`div`,{className:`small-muted`,children:e.key})]}),(0,z.jsx)(Sr,{page:t,placeholderKey:e.key,value:s[e.key]||null,onChange:t=>l(e.key,t)})]},e.key)),o.length===0&&(0,z.jsx)(`div`,{className:`empty-mini`,children:`Dieses Template hat keine gespeicherten Platzhalter-Infos.`})]}),(0,z.jsxs)(`div`,{className:`modal-actions`,children:[(0,z.jsx)(`button`,{type:`button`,className:`btn primary`,disabled:o.length===0,onClick:u,children:`Übernehmen`}),(0,z.jsx)(`button`,{type:`button`,className:`btn`,onClick:r,children:`Abbrechen`})]})]})}),document.body)}function Nr(e){if(e.element_type===`asset`)return`Symbol`;if(e.element_type===`value`){let t=e.style_json?.kind;return t===`sensor`?`Fühler / Wert`:t===`setpoint`?`Sollwert`:t===`scale_bar`?`Skalenbalken`:t===`dial_gauge`?`Zeigerinstrument`:t===`trend_chart`?`Trendgraph`:t===`sankey_chart`?`Sankey`:`Wert`}if(e.element_type===`text`)return e.style_json?.textType===`link`?`Link`:e.style_json?.textType===`menu`?`Menü`:`Text`;if(e.element_type===`shape`){let t=e.style_json?.subtype;return t===`polyline`?`Linienzug`:t===`polygon`?`Polygon`:t===`circle`?`Kreis`:t===`ellipse`?`Ellipse`:`Rechteck`}return e.element_type||`Element`}function Pr(e){return e.name||e.label||e.asset_name||Nr(e)}function Fr(e){let t=e.filter(Boolean);if(t.length===0)return{x:0,y:0,w:0,h:0,minZ:0,maxZ:0};let n=Math.min(...t.map(e=>Number(e.x||0))),r=Math.min(...t.map(e=>Number(e.y||0))),i=Math.max(...t.map(e=>Number(e.x||0)+Number(e.w||0))),a=Math.max(...t.map(e=>Number(e.y||0)+Number(e.h||0))),o=t.map(e=>Number(e.z_index||10));return{x:n,y:r,w:Math.max(1,i-n),h:Math.max(1,a-r),minZ:Math.min(...o),maxZ:Math.max(...o)}}function Ir(e){let t=[],n=new Set;return e.forEach(r=>{let i=r.style_json?.templateGroupId||``;if(!i){t.push({id:r.id,ids:[r.id],type:Nr(r),name:Pr(r),bounds:Fr([r]),z:Number(r.z_index||10),isTemplateGroup:!1});return}if(n.has(i))return;n.add(i);let a=e.filter(e=>e.style_json?.templateGroupId===i),o=a[0]||r,s=Fr(a);t.push({id:o.id,ids:a.map(e=>e.id),type:`Template`,name:o.style_json?.templateName||o.name||`Template`,bounds:s,z:s.maxZ,isTemplateGroup:!0,count:a.length})}),t}function Lr({elements:e,selectedIds:t,onSelect:n,disabled:r=!1}){let i=Ir(e).sort((e,t)=>Number(t.z||0)-Number(e.z||0));return(0,z.jsxs)(`details`,{className:`property-section toolbox-section element-list-panel`,open:!0,children:[(0,z.jsx)(`summary`,{children:`Elementliste`}),(0,z.jsxs)(`div`,{className:`property-section-body toolbox-section-body element-list-body`,children:[i.length===0&&(0,z.jsx)(`div`,{className:`small-muted`,children:`Noch keine Elemente auf der Zeichenfläche.`}),i.map(e=>{let i=e.ids.every(e=>t.includes(e));return(0,z.jsxs)(`button`,{type:`button`,disabled:r,className:`element-list-item ${e.isTemplateGroup?`is-template-group`:``} ${i?`is-selected`:``}`,onClick:t=>n(e.id,t.ctrlKey||t.metaKey),title:`${e.type} - X ${Math.round(e.bounds.x||0)}, Y ${Math.round(e.bounds.y||0)}`,children:[(0,z.jsxs)(`span`,{className:`element-list-type`,children:[e.type,e.count?` - ${e.count} Elemente`:``]}),(0,z.jsx)(`strong`,{children:e.name}),(0,z.jsxs)(`em`,{children:[Math.round(e.bounds.x||0),` / `,Math.round(e.bounds.y||0)]})]},e.isTemplateGroup?`template-${e.id}`:e.id)})]})]})}function Rr({pageId:e=0,templateId:t=0,templateMode:n=!1}){let r=(0,_.useRef)(null),i=(0,_.useRef)(null),a=(0,_.useRef)(null),o=(0,_.useRef)(null),s=(0,_.useRef)(null),c=(0,_.useRef)({past:[],future:[]}),l=(0,_.useRef)(!1),u=(0,_.useRef)(null),[d,f]=(0,_.useState)(null),[p,m]=(0,_.useState)([]),[h,g]=(0,_.useState)([]),[v,y]=(0,_.useState)(null),[x,S]=(0,_.useState)([]),[C,T]=(0,_.useState)(``),[E,D]=(0,_.useState)(!!(n?t:e)),[O,k]=(0,_.useState)(!1),[A,re]=(0,_.useState)(!1),[j,M]=(0,_.useState)(!0),[N,P]=(0,_.useState)(.6),[ie,I]=(0,_.useState)(null),[L,ae]=(0,_.useState)(!1),[oe,se]=(0,_.useState)(``),[ce,le]=(0,_.useState)(null),[B,ue]=(0,_.useState)([]),[de,fe]=(0,_.useState)(null),[pe,me]=(0,_.useState)(null),[he,ge]=(0,_.useState)(!1),[,_e]=(0,_.useState)(0),ve=p.find(e=>e.id===v)||null,ye=n?``:ve?.style_json?.templateGroupId||``;ye&&p.filter(e=>e.style_json?.templateGroupId===ye);let be=oe?p.filter(e=>e.style_json?.templateGroupId===oe):[],xe=n?[]:[...new Set(x.map(e=>p.find(t=>t.id===e)?.style_json?.templateGroupId||``).filter(Boolean))].map(e=>{let t=p.filter(t=>t.style_json?.templateGroupId===e),n=t[0]||null,r=Fr(t);return{templateGroupId:e,name:n?.style_json?.templateName||n?.name||`Template`,bounds:r}}),V=de!==null,Se=c.current.past.length>0,Ce=c.current.future.length>0;function we(e,t=e[0]||null){let n=[...new Set(e.filter(e=>e!=null))];S(n),y(t&&n.includes(t)?t:n[0]||null)}function Te(){S([]),y(null)}function Ee(e=null){let t=x.length?x:e?Ke(e):[],n=new Set(t);return p.filter(e=>n.has(e.id)).map(e=>JSON.parse(JSON.stringify(e)))}function De(){l.current=!0,re(!0)}function Oe(){l.current=!1,re(!1)}(0,_.useEffect)(()=>{if(!(n?t:e)){D(!1);return}Oe(),c.current={past:[],future:[]},_e(e=>e+1),ke()},[e,t,n]),(0,_.useEffect)(()=>{!d?.project_id&&!d?.is_template||Ae()},[d?.project_id,d?.is_template]),(0,_.useEffect)(()=>{function e(e){let t=document.activeElement?.tagName?.toLowerCase();[`input`,`textarea`,`select`].includes(t)||((e.ctrlKey||e.metaKey)&&e.key.toLowerCase()===`c`&&(e.preventDefault(),tt()),(e.ctrlKey||e.metaKey)&&e.key.toLowerCase()===`v`&&(e.preventDefault(),s.current&&it()),(e.ctrlKey||e.metaKey)&&e.key.toLowerCase()===`d`&&(e.preventDefault(),at()),(e.key===`Delete`||e.key===`Del`)&&ve&&!V&&(e.preventDefault(),Ye(ve.id)),e.key===`Escape`&&(I(null),le(null),ue([]),fe(null)))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[ve,d,p,V]),(0,_.useEffect)(()=>()=>{window.removeEventListener(`pointermove`,pt),window.removeEventListener(`pointerup`,mt)},[]),(0,_.useEffect)(()=>{function e(e){l.current&&(e.preventDefault(),e.returnValue=``)}return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[]),(0,_.useEffect)(()=>{if(!j)return;let e=window.setInterval(()=>{l.current&&!O&&!V&&u.current?.()},300*1e3);return()=>window.clearInterval(e)},[j,O,V]);async function ke(){D(!0);try{let r=n?await H(`template`,{id:t}):await H(`page`,{id:e}),i=n?{...ne(r.template||{}),id:Number(t),project_id:0,is_template:!0,template_placeholders:r.placeholders||[]}:ne(r.page||{}),a=n?Ar(r.elements||[]):(r.elements||[]).map(ee),o=n?a:await Qt(a,e=>H(`template`,{id:e}));f(i),m(o)}catch(e){T(e.message)}finally{D(!1)}}function Ae(){H(`assets`,{project_id:d?.project_id||``}).then(e=>g((e.assets||[]).map(te))).catch(()=>g([]))}function je(e){o.current=e}function Me(e){let t=r.current?.getBoundingClientRect();return t?{x:F((e.clientX-t.left)/N,d),y:F((e.clientY-t.top)/N,d)}:{x:0,y:0}}function Ne(e){return JSON.parse(JSON.stringify(e))}function Pe(e){c.current.past.push(Ne(e)),c.current.past=c.current.past.slice(-80),c.current.future=[],_e(e=>e+1),De()}function Fe(){Pe(p)}function Ie(){let e=c.current.past.pop();e&&(c.current.future.push(Ne(p)),m(e),S(t=>t.filter(t=>e.some(e=>e.id===t))),y(t=>e.some(e=>e.id===t)?t:null),_e(e=>e+1),De())}function Le(){let e=c.current.future.pop();e&&(c.current.past.push(Ne(p)),m(e),S(t=>t.filter(t=>e.some(e=>e.id===t))),y(t=>e.some(e=>e.id===t)?t:null),_e(e=>e+1),De())}function Re(e){if(V)return;let t=w[e];if(!t)return;let n=b(),r=p.length?Math.max(...p.map(e=>Number(e.z_index||10)))+1:10,i={id:n,asset_id:null,asset_name:``,asset_type:``,asset_states:[],element_type:t.element_type,name:t.name,variable_id:``,label:t.label,x:F(80+p.length*14,d),y:F(80+p.length*14,d),w:t.w,h:t.h,rotation:0,z_index:r,opacity:1,state_rules:null,style_json:JSON.parse(JSON.stringify(t.style_json||{})),is_locked:!1,rules:[]};Fe(),m(e=>[...e,i]),we([n])}function ze(e){if(V)return;let t=b(),n=p.length?Math.max(...p.map(e=>Number(e.z_index||10)))+1:10,r=e===`ellipse`?{w:180,h:120}:{w:160,h:100},i={id:t,asset_id:null,asset_name:``,asset_type:``,asset_states:[],element_type:`shape`,name:e===`ellipse`?`Ellipse`:e===`circle`?`Kreis`:`Rechteck`,variable_id:``,label:``,x:F(100+p.length*14,d),y:F(100+p.length*14,d),w:e===`circle`?120:r.w,h:e===`circle`?120:r.h,rotation:0,z_index:n,opacity:1,state_rules:null,style_json:{subtype:e,strokeColor:`#60a5fa`,fillColor:`transparent`,fillMode:`solid`,gradientColor:`#1d4ed8`,gradientAngle:0,gradientOrigin:`center`,gradientOriginX:50,gradientOriginY:50,colorRules:[],strokeWidth:4,radius:e===`rect`?10:0,aspectLocked:e===`circle`,aspectRatio:1},is_locked:!1,rules:[]};Fe(),m(e=>[...e,i]),we([t])}function Be(){V||(le(`polyline`),ue([]),Te(),fe(null))}function Ve(){V||(le(`polygon`),ue([]),Te(),fe(null))}function He(e){if(V)return;let t=b(),n=p.length?Math.max(...p.map(e=>Number(e.z_index||10)))+1:10,r=e.states.find(e=>e.is_default)||e.states[0],i={id:t,asset_id:Number(e.id),asset_name:e.name,asset_type:e.asset_type,asset_states:e.states||[],element_type:`asset`,name:e.name,variable_id:``,label:e.name,x:F(120,d),y:F(120,d),w:140,h:140,rotation:0,z_index:n,opacity:1,state_rules:null,style_json:{subtype:`asset_symbol`,default_image:r?.image_file||``,attachedValues:[],aspectLocked:!0,aspectRatio:1},is_locked:!1,rules:[]};Fe(),m(e=>[...e,i]),we([t])}function Ue(e,t){Fe(),m(n=>n.map(n=>n.id===e?typeof t==`function`?t(n):{...n,...t}:n))}function We(e){!n&&e?.style_json?.templateGroupId||(Fe(),m(t=>t.map(t=>t.id===e.id?e:t)))}function Ge(e){return n?``:p.find(t=>t.id===e)?.style_json?.templateGroupId||``}function Ke(e){let t=Ge(e);return t?p.filter(e=>e.style_json?.templateGroupId===t).map(e=>e.id):[e]}function qe(e){let t=Ke(e);if(t.every(e=>x.includes(e))){we(x.filter(e=>!t.includes(e)));return}we([...x,...t],e)}function Je(e,t=!1){if(!V){if(t){qe(e);return}we(Ke(e),e)}}function Ye(e){if(V)return;let t=x.includes(e)&&x.length>1?x:Ke(e);Fe(),m(e=>e.filter(e=>!t.includes(e.id))),t.includes(v)&&Te(),de===e&&fe(null)}function Xe(e,t){let n=Ge(e);if(!n)return!1;let r=p.filter(e=>e.style_json?.templateGroupId===n).sort((e,t)=>Number(e.z_index||10)-Number(t.z_index||10));return r.length?(Fe(),m(e=>{let n=e.length?Math.max(...e.map(e=>Number(e.z_index||10))):10,i=e.length?Math.min(...e.map(e=>Number(e.z_index||10))):10,a=new Map;return r.forEach((e,o)=>{t===`front`&&a.set(e.id,n+o+1),t===`back`&&a.set(e.id,i-r.length+o),t===`plus`&&a.set(e.id,Number(e.z_index||10)+1),t===`minus`&&a.set(e.id,Number(e.z_index||10)-1)}),e.map(e=>a.has(e.id)?{...e,z_index:a.get(e.id)}:e)}),!0):!1}function Ze(e){Xe(e,`front`)||Ue(e,{z_index:(p.length?Math.max(...p.map(e=>Number(e.z_index||10))):10)+1})}function Qe(e){Xe(e,`back`)||Ue(e,{z_index:(p.length?Math.min(...p.map(e=>Number(e.z_index||10))):10)-1})}function $e(e){Xe(e,`plus`)||Ue(e,e=>({...e,z_index:Number(e.z_index||10)+1}))}function et(e){Xe(e,`minus`)||Ue(e,e=>({...e,z_index:Number(e.z_index||10)-1}))}function tt(e=null){let t=Ee(e);t.length&&(s.current={type:`elements`,items:t})}function nt(e){let t=r.current?.getBoundingClientRect();return t?{x:(e.clientX-t.left)/N,y:(e.clientY-t.top)/N}:{x:0,y:0}}function rt(e){tt(e)}function it(e=null){if(V||!s.current)return;let t=s.current?.type===`elements`?s.current.items:[s.current];if(!Array.isArray(t)||t.length===0)return;let n=Math.min(...t.map(e=>Number(e.x||0))),r=Math.min(...t.map(e=>Number(e.y||0))),i=e?Number(e.x||0)-n:30,a=e?Number(e.y||0)-r:30,o=p.length?Math.max(...p.map(e=>Number(e.z_index||10))):10,c=new Map,l=t.map((e,t)=>{let n=R(e,d,0),r=e.style_json?.templateGroupId,s=n.style_json||{};return r&&(c.has(r)||c.set(r,`template-group-${Date.now()}-${Math.abs(b())}-${c.size}`),s={...s,templateGroupId:c.get(r)}),{...n,x:F(Number(e.x||0)+i,d),y:F(Number(e.y||0)+a,d),z_index:o+t+1,style_json:s}});l.length&&(Fe(),m(e=>[...e,...l]),we(l.map(e=>e.id),l[0].id))}function at(){tt(),it()}function ot(e,t,r={}){if(n||V||!Array.isArray(e)||e.length===0)return;let i=p.length?Math.max(...p.map(e=>Number(e.z_index||10)))+1:10,a=`template-group-${Date.now()}-${Math.abs(b())}`,o=wr(t),s=e.map((e,n)=>{let s=Er(e,t);return ee({...s,id:b(),x:F(Number(s.x||0),d),y:F(Number(s.y||0),d),z_index:i+n,style_json:{...s.style_json||{},templateGroupId:a,templateSourceId:Number(r.id||0),templateElementId:String(e.style_json?.templateElementUid||e.id||s.id||n),templateName:r.name||`Template`,templatePlaceholders:r.placeholders||[],templateBindings:o}})});Fe(),m(e=>[...e,...s]),we(s.map(e=>e.id),s[0]?.id||null)}function st(e,t){if(e.button===1){ct(e);return}if(e.button!==0)return;e.preventDefault(),e.stopPropagation();let n=p.find(e=>e.id===t);if(!n||n.is_locked||de===t||V)return;let r=Ke(t);if(e.ctrlKey||e.metaKey){qe(t);return}let i=(x.includes(t)?x:r).map(e=>p.find(t=>t.id===e)).filter(e=>e&&!e.is_locked);x.includes(t)?y(t):we(r,t),a.current={mode:i.length>1?`move-group`:`move`,id:t,groupStarts:i.length>1?Object.fromEntries(i.map(e=>[e.id,{x:e.x,y:e.y}])):null,groupBounds:i.length>1?Fr(i):null,startClientX:e.clientX,startClientY:e.clientY,startX:n.x,startY:n.y,startW:n.w,startH:n.h,before:Ne(p),changed:!1},window.addEventListener(`pointermove`,pt),window.addEventListener(`pointerup`,mt)}function ct(e){let t=i.current;t&&(e.preventDefault(),e.stopPropagation(),ge(!0),a.current={mode:`pan`,startClientX:e.clientX,startClientY:e.clientY,scrollLeft:t.scrollLeft,scrollTop:t.scrollTop,changed:!1},window.addEventListener(`pointermove`,pt),window.addEventListener(`pointerup`,mt))}function lt(e,t,r){e.preventDefault(),e.stopPropagation();let i=p.find(e=>e.id===t);!i||i.is_locked||V||!n&&i.style_json?.templateGroupId||(we([t]),a.current={mode:`resize`,handle:r,id:t,startClientX:e.clientX,startClientY:e.clientY,startX:i.x,startY:i.y,startW:i.w,startH:i.h,aspectRatio:i.w>0&&i.h>0?i.w/i.h:1,aspectLocked:!!i.style_json?.aspectLocked,before:Ne(p),changed:!1},window.addEventListener(`pointermove`,pt),window.addEventListener(`pointerup`,mt))}function ut(e,t){let n=Ge(t);n&&(we(Ke(t),t),se(n))}function dt(e){if(!oe)return;let t=wr(e);Fe(),m(e=>e.map(e=>{if(e.style_json?.templateGroupId!==oe)return e;let n=Dr(e,t);return{...n,style_json:{...n.style_json||{},templateBindings:t}}}))}function ft(e,t){e.preventDefault(),e.stopPropagation();let n=p.find(e=>e.id===de);if(!n)return;let r=Array.isArray(n.style_json?.points)?n.style_json.points:[];a.current={mode:`point`,id:n.id,pointIndex:t,startClientX:e.clientX,startClientY:e.clientY,startPoint:r[t],before:Ne(p),changed:!1},window.addEventListener(`pointermove`,pt),window.addEventListener(`pointerup`,mt)}function pt(e){let t=a.current;if(!t)return;if(t.changed=!0,t.mode===`pan`){let n=i.current;if(!n)return;n.scrollLeft=t.scrollLeft-(e.clientX-t.startClientX),n.scrollTop=t.scrollTop-(e.clientY-t.startClientY);return}if(t.mode===`marquee`){let n=nt(e),r={x:Math.min(t.startPoint.x,n.x),y:Math.min(t.startPoint.y,n.y),w:Math.abs(n.x-t.startPoint.x),h:Math.abs(n.y-t.startPoint.y)},i=[];p.forEach(e=>{e.is_locked||Number(e.x||0)r.x&&Number(e.y||0)r.y&&i.push(...Ke(e.id))});let a=t.additive?[...new Set([...t.baseSelection||[],...i])]:[...new Set(i)];me(r),we(a,a[0]||null);return}let n=(e.clientX-t.startClientX)/N,r=(e.clientY-t.startClientY)/N,o=t.mode===`move-group`&&t.groupBounds?F(Math.round(t.groupBounds.x+n),d)-t.groupBounds.x:n,s=t.mode===`move-group`&&t.groupBounds?F(Math.round(t.groupBounds.y+r),d)-t.groupBounds.y:r;m(e=>e.map(e=>{if(t.mode===`move-group`){let n=t.groupStarts?.[e.id];return n?{...e,x:Math.round(n.x+o),y:Math.round(n.y+s)}:e}if(e.id!==t.id)return e;if(t.mode===`move`)return{...e,x:F(Math.round(t.startX+n),d),y:F(Math.round(t.startY+r),d)};if(t.mode===`point`){let i=Array.isArray(e.style_json?.points)?[...e.style_json.points]:[],a={x:F(Math.round((t.startPoint?.x||0)+n),d),y:F(Math.round((t.startPoint?.y||0)+r),d)};return i[t.pointIndex]=a,{...e,style_json:{...e.style_json,points:i}}}let i=t.handle||``,a=t.startX,c=t.startY,l=t.startW,u=t.startH;return i.includes(`e`)&&(l=t.startW+n),i.includes(`s`)&&(u=t.startH+r),i.includes(`w`)&&(a=t.startX+n,l=t.startW-n),i.includes(`n`)&&(c=t.startY+r,u=t.startH-r),l<10&&(l=10,a=e.x),u<10&&(u=10,c=e.y),t.aspectLocked&&(Math.abs(n)>Math.abs(r)?u=l/t.aspectRatio:l=u*t.aspectRatio),{...e,x:F(Math.round(a),d),y:F(Math.round(c),d),w:Math.max(10,F(Math.round(l),d)||10),h:Math.max(10,F(Math.round(u),d)||10)}}))}function mt(){let e=a.current;e?.changed&&e.before&&Pe(e.before),a.current=null,ge(!1),me(null),window.removeEventListener(`pointermove`,pt),window.removeEventListener(`pointerup`,mt)}function ht(e){if(e.button===1){ct(e);return}if(e.button===0){if(e.preventDefault(),ce===`polyline`||ce===`polygon`){let t=Me(e);ue(e=>[...e,t]);return}if(!V){let t=nt(e);a.current={mode:`marquee`,startClientX:e.clientX,startClientY:e.clientY,startPoint:t,baseSelection:e.ctrlKey||e.metaKey?x:[],additive:e.ctrlKey||e.metaKey,changed:!1},me({x:t.x,y:t.y,w:0,h:0}),!e.ctrlKey&&!e.metaKey&&Te(),I(null),window.addEventListener(`pointermove`,pt),window.addEventListener(`pointerup`,mt)}}}function gt(e){if(ce!==`polyline`&&ce!==`polygon`)return;e.preventDefault();let t=ce===`polygon`;if(B.length<(t?3:2)){le(null),ue([]);return}let n=Math.min(...B.map(e=>e.x)),r=Math.min(...B.map(e=>e.y)),i=Math.max(...B.map(e=>e.x)),a=Math.max(...B.map(e=>e.y)),o=B.map(e=>({x:e.x-n,y:e.y-r})),s=b(),c=p.length?Math.max(...p.map(e=>Number(e.z_index||10)))+1:10,l={id:s,asset_id:null,asset_name:``,asset_type:``,asset_states:[],element_type:`shape`,name:t?`Polygon`:`Linienzug`,variable_id:``,label:``,x:n,y:r,w:Math.max(10,i-n),h:Math.max(10,a-r),rotation:0,z_index:c,opacity:1,state_rules:null,style_json:{subtype:t?`polygon`:`polyline`,points:o,strokeColor:`#60a5fa`,fillColor:t?`#1d4ed8`:`transparent`,fillMode:`solid`,gradientColor:`#0ea5e9`,gradientAngle:0,gradientOrigin:`center`,gradientOriginX:50,gradientOriginY:50,colorRules:[],strokeWidth:6,fillClosed:t,startArrow:`none`,endArrow:`none`,arrowSize:20,arrowGap:0,arrowGapLinked:!0,startArrowGap:0,endArrowGap:0,startArrowType:`triangle`,endArrowType:`triangle`,startArrowRotation:0,endArrowRotation:0,flowEnabled:!1,flowPoint:null,flowMin:0,flowMax:100,flowSlowSeconds:5,flowFastSeconds:.7,flowDirection:`forward`,flowInvertSpeed:!1,flowColor:`#e0f2fe`},is_locked:!1,rules:[]};Fe(),m(e=>[...e,l]),we([s]),le(null),ue([])}function _t(e){e.preventDefault();let t=e.deltaY>0?-.05:.05;P(e=>Math.max(.15,Math.min(2.5,Number((e+t).toFixed(2)))))}function vt(e,t){e.preventDefault(),e.stopPropagation();let n=p.find(e=>e.id===t),i=Ge(t),a=Qn(e.clientX,e.clientY,{elementId:t,canEditPoints:!i&&n?.element_type===`shape`&&[`polyline`,`polygon`].includes(n?.style_json?.subtype),boundsRect:r.current?.getBoundingClientRect()});we(i?p.filter(e=>e.style_json?.templateGroupId===i).map(e=>e.id):[t],t),I({x:a.x,y:a.y,elementId:t,isTemplateGroup:!!i,templateGroupId:i,canEditPoints:!i&&n?.element_type===`shape`&&[`polyline`,`polygon`].includes(n?.style_json?.subtype)})}function yt(e){e.preventDefault();let t=Qn(e.clientX,e.clientY,{boundsRect:r.current?.getBoundingClientRect()});I({x:t.x,y:t.y,elementId:null,canvasPoint:Me(e)})}async function bt(){if(!((n?!t:!e)||V)){k(!0),T(``);try{let r=d;if(o.current){let e=await o.current();if(!e)throw Error(`Zeichenflächen-Einstellungen konnten nicht gespeichert werden.`);typeof e==`object`&&(r={...d,...e},f(r))}let i=p.map(e=>{let t=n?kr(e.style_json):e.style_json;return n&&(t={...t||{},templateElementUid:t?.templateElementUid||`template-el-${Date.now()}-${Math.abs(b())}`}),{...e,id:n||e.id>0?e.id:0,variable_id:e.variable_id||null,style_json:t}});n?await U(`template_save`,{template_id:t,name:r?.name||`Template`,description:r?.description||``,width:r?.width||1920,height:r?.height||1080,background_color:r?.background_color||`#0f172a`,grid_enabled:r?.grid_enabled?`1`:``,snap_enabled:r?.snap_enabled?`1`:``,grid_size:r?.grid_size||40,placeholders_json:JSON.stringify(r?.template_placeholders||[]),elements_json:JSON.stringify(i)}):await U(`elements_save`,{page_id:e,elements_json:JSON.stringify(i)}),await ke(),Oe()}catch(e){T(e.message)}finally{k(!1)}}}return u.current=bt,!n&&!e?(0,z.jsx)(`div`,{className:`page-shell`,children:(0,z.jsx)(`section`,{className:`glass-card`,children:(0,z.jsxs)(`div`,{className:`section-head`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`eyebrow`,children:`Designer`}),(0,z.jsx)(`h1`,{children:`Keine Seite gewählt`})]}),(0,z.jsxs)(`div`,{className:`designer-actions`,children:[(0,z.jsx)(Gt,{}),(0,z.jsx)(`a`,{href:`/visu/?mode=dashboard`,className:`btn`,children:`Dashboard`}),(0,z.jsx)(`a`,{href:`/visu/?mode=manage`,className:`btn`,children:`Verwaltung`}),(0,z.jsx)(`a`,{href:`/visu/?mode=templates`,className:`btn`,children:`Templates`}),(0,z.jsx)(`a`,{href:`/visu/?mode=monitoring`,className:`btn`,children:`Datenpunkte`}),(0,z.jsx)(`a`,{href:`/visu/?mode=virtual_points`,className:`btn`,children:`Virtuelle Datenpunkte`}),(0,z.jsx)(`a`,{href:`/visu/?mode=csv_exports`,className:`btn`,children:`CSV Exporte`})]})]})})}):(0,z.jsx)(`div`,{className:`page-shell full`,children:(0,z.jsxs)(`section`,{className:`glass-card visu-workspace`,children:[V&&(0,z.jsxs)(`div`,{className:`point-edit-topbar`,children:[(0,z.jsx)(`strong`,{children:ve?.style_json?.subtype===`polygon`?`Polygon bearbeiten`:`Linienzug bearbeiten`}),(0,z.jsx)(`span`,{children:`Punkte verschieben und anschließend bestätigen.`}),(0,z.jsx)(`button`,{type:`button`,className:`btn small primary`,onClick:()=>fe(null),children:`✓ Änderungen übernehmen`})]}),(0,z.jsxs)(`div`,{className:`section-head visu-topbar`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`eyebrow`,children:n?`Template Designer`:`Designer`}),(0,z.jsx)(`h1`,{children:d?.name||(n?`Template #${t}`:`Seite #${e}`)}),d&&!n&&(0,z.jsxs)(`p`,{className:`subline`,children:[d.year,` · `,d.project_number,` · `,d.project_name]}),d&&n&&(0,z.jsx)(`p`,{className:`subline`,children:d.description||`Template mit Platzhaltern`})]}),(0,z.jsxs)(`div`,{className:`designer-actions`,children:[ce&&(0,z.jsxs)(`button`,{className:`btn danger`,onClick:()=>{le(null),ue([])},children:[ce===`polygon`?`Polygon`:`Linienzug`,` abbrechen`]}),!n&&(0,z.jsx)(`button`,{className:`btn`,type:`button`,onClick:()=>ae(!0),disabled:V,children:`Template laden`}),(0,z.jsx)(`button`,{className:`btn primary`,onClick:bt,disabled:O||V,children:O?`Speichert…`:`💾 Speichern`}),(0,z.jsxs)(`label`,{className:`autosave-toggle`,title:`Änderungen alle 5 Minuten automatisch speichern`,children:[(0,z.jsx)(`input`,{type:`checkbox`,checked:j,onChange:e=>M(e.target.checked)}),`Auto (5 Min.)`]}),A&&(0,z.jsx)(`span`,{className:`unsaved-badge`,children:`Nicht gespeichert`}),n&&(0,z.jsx)(Gt,{className:`btn ${V?`disabled-link`:``}`,disabled:V}),(0,z.jsx)(`a`,{className:`btn ${V?`disabled-link`:``}`,href:V?void 0:`/visu/?mode=dashboard`,children:`Dashboard`}),(0,z.jsx)(`a`,{className:`btn ${V?`disabled-link`:``}`,href:V?void 0:`/visu/?mode=manage`,children:`Verwaltung`}),(0,z.jsx)(`a`,{className:`btn ${V?`disabled-link`:``}`,href:V?void 0:`/visu/?mode=templates`,children:`Templates`}),(0,z.jsx)(`a`,{className:`btn ${V?`disabled-link`:``}`,href:V?void 0:`/visu/?mode=monitoring`,children:`Datenpunkte`}),(0,z.jsx)(`a`,{className:`btn ${V?`disabled-link`:``}`,href:V?void 0:`/visu/?mode=virtual_points`,children:`Virtuelle Datenpunkte`}),(0,z.jsx)(`a`,{className:`btn ${V?`disabled-link`:``}`,href:V?void 0:`/visu/?mode=csv_exports`,children:`CSV Exporte`}),!n&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`a`,{className:`btn ${V?`disabled-link`:``}`,href:V?void 0:`/visu/?mode=viewer&page_id=${e}`,children:`Anzeigen`}),(0,z.jsx)(`a`,{className:`btn primary ${V?`disabled-link`:``}`,href:V?void 0:`/visu/?mode=designer&page_id=${e}`,children:`Designer`})]})]})]}),E&&(0,z.jsx)(`div`,{className:`empty-box`,children:`Visualisierung wird geladen…`}),C&&(0,z.jsx)(`div`,{className:`error-box`,children:C}),(0,z.jsxs)(`div`,{className:`designer-layout`,children:[(0,z.jsxs)(`aside`,{className:`toolbox`,children:[(0,z.jsx)(`h3`,{children:`Werkzeugkasten`}),(0,z.jsx)(`button`,{disabled:V,className:`tool-btn`,type:`button`,onClick:()=>Re(`sensor`),children:`🌡️ Fühler / Wert`}),(0,z.jsx)(`button`,{disabled:V,className:`tool-btn`,type:`button`,onClick:()=>Re(`setpoint`),children:`🎚️ Sollwert`}),(0,z.jsx)(`button`,{disabled:V,className:`tool-btn`,type:`button`,onClick:()=>Re(`scale_bar`),children:`▤ Skalenbalken`}),(0,z.jsx)(`button`,{disabled:V,className:`tool-btn`,type:`button`,onClick:()=>Re(`dial_gauge`),children:`◔ Zeigerinstrument`}),(0,z.jsx)(`button`,{disabled:V,className:`tool-btn`,type:`button`,onClick:()=>Re(`trend_chart`),children:`📈 Trendgraph`}),(0,z.jsx)(`button`,{disabled:V,className:`tool-btn`,type:`button`,onClick:()=>Re(`sankey_chart`),children:`↝ Sankey`}),(0,z.jsx)(`button`,{disabled:V,className:`tool-btn ${ce===`polyline`?`active`:``}`,type:`button`,onClick:Be,children:`〰️ Linienzug`}),(0,z.jsx)(`button`,{disabled:V,className:`tool-btn ${ce===`polygon`?`active`:``}`,type:`button`,onClick:Ve,children:`Polygon / Freiform`}),(0,z.jsx)(`button`,{disabled:V,className:`tool-btn`,type:`button`,onClick:()=>ze(`rect`),children:`▭ Rechteck`}),(0,z.jsx)(`button`,{disabled:V,className:`tool-btn`,type:`button`,onClick:()=>ze(`circle`),children:`○ Kreis`}),(0,z.jsx)(`button`,{disabled:V,className:`tool-btn`,type:`button`,onClick:()=>ze(`ellipse`),children:`⬭ Ellipse`}),(0,z.jsx)(`button`,{disabled:V,className:`tool-btn`,type:`button`,onClick:()=>Re(`text`),children:`🏷️ Text`}),(0,z.jsx)(`button`,{disabled:V,className:`tool-btn`,type:`button`,onClick:()=>Re(`link`),children:`🔗 Link`}),(0,z.jsx)(`button`,{disabled:V,className:`tool-btn`,type:`button`,onClick:()=>Re(`menu`),children:`☰ Menü`}),ce&&(0,z.jsxs)(`div`,{className:`draw-hint`,children:[ce===`polygon`?`Polygon`:`Linienzug`,` aktiv. Klicken setzt Punkte, Doppelklick beendet. Raster wird beachtet.`]}),(0,z.jsx)(Lr,{elements:p,selectedIds:x,onSelect:Je,disabled:V}),d&&(0,z.jsx)(zn,{page:d,registerSave:je,onSaved:ke,onDirty:De,onPatch:e=>f(t=>t&&{...t,...e}),onSaveAll:bt,disabled:V}),d?.is_template&&(0,z.jsx)(yr,{page:d,onChange:f,onDirty:De,disabled:V})]}),(0,z.jsxs)(`main`,{className:`canvas-wrap`,children:[(0,z.jsxs)(`div`,{className:`canvas-toolbar`,children:[(0,z.jsxs)(`span`,{children:[p.length,` Element(e)`]}),(0,z.jsxs)(`div`,{className:`canvas-toolbar-actions`,children:[(0,z.jsx)(`button`,{type:`button`,className:`btn small`,disabled:!Se||V,onClick:Ie,children:`Rückgängig`}),(0,z.jsx)(`button`,{type:`button`,className:`btn small`,disabled:!Ce||V,onClick:Le,children:`Wiederholen`}),(0,z.jsxs)(`label`,{className:`zoom-control`,children:[`Zoom`,(0,z.jsx)(`input`,{type:`range`,min:`0.15`,max:`2.5`,step:`0.05`,value:N,onChange:e=>P(Number(e.target.value))}),(0,z.jsxs)(`strong`,{children:[Math.round(N*100),`%`]})]})]})]}),(0,z.jsx)(`div`,{ref:i,className:`canvas-scroll ${he?`is-panning`:``}`,onWheel:_t,onAuxClick:e=>e.preventDefault(),children:(0,z.jsx)(`div`,{className:`canvas-zoom-plane`,style:{width:d?`${d.width*N}px`:`1152px`,height:d?`${d.height*N}px`:`648px`},children:(0,z.jsxs)(`div`,{ref:r,className:`canvas ${d?.grid_enabled?`grid-on`:`grid-off`} ${ce?`is-drawing`:``} ${pe?`is-selecting`:``}`,style:{width:d?`${d.width}px`:`1920px`,height:d?`${d.height}px`:`1080px`,transform:`scale(${N})`,backgroundColor:d?.background_color||`#0f172a`,backgroundImage:d?.background_image?`url(${d.background_image})`:void 0,"--grid-size":`${d?.grid_size||40}px`},onPointerDown:ht,onDoubleClick:gt,onContextMenu:yt,children:[p.map(e=>(0,z.jsx)(Jn,{element:e,selected:x.includes(e.id)&&!(!n&&e.style_json?.templateGroupId),assets:h,pointEditMode:de===e.id,lockedAsTemplate:!n&&!!e.style_json?.templateGroupId,onPointerDown:st,onDoubleClick:ut,onResizeStart:x.length===1?lt:null,onPointPointerDown:ft,onContextMenu:vt},e.id)),xe.map(e=>(0,z.jsx)(`div`,{className:`template-group-selection`,style:{width:e.bounds.w,height:e.bounds.h,transform:`translate(${e.bounds.x}px, ${e.bounds.y}px)`},children:(0,z.jsx)(`span`,{children:e.name})},e.templateGroupId)),(ce===`polyline`||ce===`polygon`)&&B.length>0&&(0,z.jsxs)(`svg`,{className:`draft-line-layer`,children:[ce===`polygon`&&B.length>2&&(0,z.jsx)(`polygon`,{points:B.map(e=>`${e.x},${e.y}`).join(` `),fill:`rgba(37, 99, 235, 0.25)`,stroke:`none`}),(0,z.jsx)(`polyline`,{points:B.map(e=>`${e.x},${e.y}`).join(` `),fill:`none`,stroke:`#93c5fd`,strokeWidth:`5`,strokeLinecap:`round`,strokeLinejoin:`round`}),B.map((e,t)=>(0,z.jsx)(`circle`,{cx:e.x,cy:e.y,r:`7`,fill:`#bfdbfe`,stroke:`#1d4ed8`,strokeWidth:`3`},t))]}),pe&&(0,z.jsx)(`div`,{className:`selection-marquee`,style:{left:`${pe.x}px`,top:`${pe.y}px`,width:`${pe.w}px`,height:`${pe.h}px`}})]})})}),(0,z.jsx)(Wn,{projectId:d?.project_id,onPickAsset:He})]}),(0,z.jsx)(_r,{page:d,selected:x.length===1&&!ye?ve:null,assets:h,pointEditElementId:de,disabled:V&&ve?.id!==de,onChange:We,onDelete:Ye,onBringFront:Ze,onSendBack:Qe,onZPlus:$e,onZMinus:et,onStartPointEdit:e=>fe(e),onFinishPointEdit:()=>fe(null)},ve?.id??`no-selection`)]}),(0,z.jsx)(Yn,{menu:ie,onClose:()=>I(null),onCopy:rt,onPaste:it,onDelete:Ye,onEditPoints:e=>fe(e),onEditTemplateBindings:e=>se(e),onBringFront:Ze,onSendBack:Qe,onZPlus:$e,onZMinus:et}),!n&&(0,z.jsx)(jr,{open:L,page:d,onClose:()=>ae(!1),onInsert:ot}),!n&&(0,z.jsx)(Mr,{open:!!oe,page:d,groupElements:be,onClose:()=>se(``),onApply:dt})]})})}function zr({templateId:e=0}){let t=(0,_.useRef)(null),[n,r]=(0,_.useState)([]),[i,a]=(0,_.useState)(``),[o,s]=(0,_.useState)(``),[c,l]=(0,_.useState)(``),[u,d]=(0,_.useState)(!1);async function f(){d(!0),l(``);try{r((await H(`templates`)).templates||[])}catch(e){l(e.message)}finally{d(!1)}}if((0,_.useEffect)(()=>{e>0||f()},[e]),e>0)return(0,z.jsx)(Rr,{templateMode:!0,templateId:e});async function p(e){e.preventDefault(),l(``);try{let e=await U(`template_save`,{template_id:0,name:i.trim()||`Neues Template`,description:o,width:1920,height:1080,background_color:`#0f172a`,grid_enabled:`1`,snap_enabled:`1`,grid_size:40,placeholders_json:`[]`,elements_json:`[]`});window.location.href=`/visu/?mode=templates&template_id=${e.template_id}`}catch(e){l(e.message)}}async function m(e){if(confirm(`Template wirklich löschen?`))try{await U(`template_delete`,{template_id:e}),await f()}catch(e){l(e.message)}}async function h(e){try{let t=await H(`template`,{id:e}),n={version:1,template:t.template,placeholders:t.placeholders||[],elements:t.elements||[]},r=new Blob([JSON.stringify(n,null,2)],{type:`application/json`}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=`${t.template?.name||`visu-template`}.json`,a.click(),URL.revokeObjectURL(i)}catch(e){l(e.message)}}async function g(e){if(e)try{await U(`template_import`,{import_json:await e.text()}),await f(),t.current.value=``}catch(e){l(e.message)}}return(0,z.jsx)(`div`,{className:`page-shell full`,children:(0,z.jsxs)(`section`,{className:`glass-card overview-full`,children:[(0,z.jsxs)(`div`,{className:`section-head visu-topbar`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`eyebrow`,children:`Templates`}),(0,z.jsx)(`h1`,{children:`Template-Verwaltung`}),(0,z.jsx)(`p`,{className:`subline`,children:`Vorlagen mit Platzhaltern für wiederkehrende Visualisierungen.`})]}),(0,z.jsxs)(`div`,{className:`designer-actions`,children:[(0,z.jsx)(Gt,{}),(0,z.jsx)(`a`,{href:`/visu/?mode=dashboard`,className:`btn`,children:`Dashboard`}),(0,z.jsx)(`a`,{href:`/visu/?mode=manage`,className:`btn`,children:`Verwaltung`}),(0,z.jsx)(`a`,{href:`/visu/?mode=templates`,className:`btn primary`,children:`Templates`}),(0,z.jsx)(`a`,{href:`/visu/?mode=monitoring`,className:`btn`,children:`Datenpunkte`}),(0,z.jsx)(`a`,{href:`/visu/?mode=virtual_points`,className:`btn`,children:`Virtuelle Datenpunkte`}),(0,z.jsx)(`a`,{href:`/visu/?mode=csv_exports`,className:`btn`,children:`CSV Exporte`})]})]}),(0,z.jsxs)(`div`,{className:`overview-manage-layout single-column`,children:[(0,z.jsxs)(`form`,{className:`overview-create compact`,onSubmit:p,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Name`}),(0,z.jsx)(`input`,{value:i,onChange:e=>a(e.target.value),placeholder:`z.B. Heizkreis Standard`})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Beschreibung`}),(0,z.jsx)(`input`,{value:o,onChange:e=>s(e.target.value),placeholder:`Optional`})]}),(0,z.jsx)(`button`,{className:`btn primary`,type:`submit`,children:`+ Template`}),(0,z.jsx)(`button`,{className:`btn`,type:`button`,onClick:()=>t.current?.click(),children:`Import`}),(0,z.jsx)(`input`,{ref:t,type:`file`,accept:`application/json,.json`,hidden:!0,onChange:e=>g(e.target.files?.[0])})]}),c&&(0,z.jsx)(`div`,{className:`error-box small`,children:c}),u&&(0,z.jsx)(`div`,{className:`empty-mini`,children:`Templates werden geladen…`}),(0,z.jsx)(`div`,{className:`project-page-grid`,children:n.map(e=>(0,z.jsxs)(`div`,{className:`visu-card compact`,children:[(0,z.jsx)(`div`,{className:`visu-title`,children:e.name}),(0,z.jsxs)(`div`,{className:`visu-meta`,children:[e.width,`×`,e.height,e.placeholder_count?` · ${e.placeholder_count} Platzhalter`:``]}),e.description&&(0,z.jsx)(`div`,{className:`visu-description`,children:e.description}),(0,z.jsxs)(`div`,{className:`visu-actions`,children:[(0,z.jsx)(`a`,{className:`mini-btn`,href:`/visu/?mode=templates&template_id=${e.id}`,children:`Bearbeiten`}),(0,z.jsx)(`button`,{className:`mini-btn`,type:`button`,onClick:()=>h(e.id),children:`Export`}),(0,z.jsx)(`button`,{className:`mini-btn danger`,type:`button`,onClick:()=>m(e.id),children:`Löschen`})]})]},e.id))})]})]})})}var Br=[{value:`15m`,label:`15 Min`},{value:`1h`,label:`1 h`},{value:`6h`,label:`6 h`},{value:`12h`,label:`12 h`},{value:`24h`,label:`24 h`},{value:`7d`,label:`7 Tage`},{value:`30d`,label:`30 Tage`},{value:`90d`,label:`90 Tage`},{value:`180d`,label:`6 Monate`}],Vr=[`auto`,`10s`,`30s`,`1m`,`5m`,`10m`,`15m`,`30m`,`1h`,`6h`,`12h`,`1d`],Hr=[{value:`mean`,label:`Mittelwert`},{value:`last`,label:`Letzter Wert`},{value:`min`,label:`Minimum`},{value:`max`,label:`Maximum`}];function Ur(e){return[`influx`,e.database||``,e.measurement||``,e.tag_key||``,e.tag_value||``].join(`|`)}function Wr(e){return String(e?.measurement||``).trim()}function Gr(e,t=`,`){let n=String(e??``);return/["\r\n]/.test(n)||n.includes(t)?`"${n.replace(/"/g,`""`)}"`:n}function Kr(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.click(),setTimeout(()=>URL.revokeObjectURL(n),1e3)}function qr(e,t=8){let n=[];for(let r=0;re.value!==null&&e.value!==void 0&&e.value!==``);return t?{value:t.value,time:t.time}:{value:``,time:``}}function Yr(){let[e,t]=(0,_.useState)([]),[n,r]=(0,_.useState)(``),[i,a]=(0,_.useState)([]),[o,s]=(0,_.useState)([]),[c,l]=(0,_.useState)([]),[u,d]=(0,_.useState)(0),[f,p]=(0,_.useState)(`Neue Selection`),[m,h]=(0,_.useState)(``),[g,v]=(0,_.useState)(``),[y,b]=(0,_.useState)(`24h`),[x,S]=(0,_.useState)(`auto`),[C,w]=(0,_.useState)(`last`),[T,E]=(0,_.useState)(`;`),[D,O]=(0,_.useState)({}),[ee,te]=(0,_.useState)(!1),[ne,k]=(0,_.useState)(!1),[A,re]=(0,_.useState)(``);async function j(){l((await H(`monitoring_selections`)).selections||[])}(0,_.useEffect)(()=>{j().catch(e=>re(e.message))},[]),(0,_.useEffect)(()=>{let e=!0;return te(!0),re(``),H(`trend_sources`,{database:n}).then(n=>{e&&(t(n.databases||[]),r(e=>e||n.selected_database||n.databases?.[0]||``),a(n.points||[]))}).catch(t=>{e&&re(t.message)}).finally(()=>{e&&te(!1)}),()=>{e=!1}},[n]),(0,_.useEffect)(()=>{g&&(i.some(e=>Wr(e)===g)||v(``))},[g,i]),(0,_.useEffect)(()=>{let e=!0;async function t(){if(!o.length){O({});return}let t={};for(let e of qr(o,8))((await U(`trend_data`,{series_json:JSON.stringify(e.map((e,t)=>({...e,id:Ur(e)||`selection-${t}`,label:e.tag_value||e.label}))),range:y,interval:`auto`,aggregate:`last`})).data?.series||[]).forEach(e=>{t[Ur(e)]=Jr(e)});e&&O(t)}return t().catch(t=>{e&&re(t.message)}),()=>{e=!1}},[o,y]);let M=(0,_.useMemo)(()=>Array.from(new Set(i.map(Wr).filter(Boolean))).sort((e,t)=>e.localeCompare(t,`de`,{numeric:!0,sensitivity:`base`})),[i]),N=(0,_.useMemo)(()=>{let e=m.trim().toLowerCase();return i.filter(t=>{let n=`${t.measurement} ${t.tag_key} ${t.tag_value} ${t.label}`.toLowerCase(),r=!e||n.includes(e),i=!g||Wr(t)===g;return r&&i})},[i,m,g]),P=new Set(o.map(Ur));function ie(e){P.has(Ur(e))||s(t=>[...t,e])}function F(e){s(t=>t.filter(t=>Ur(t)!==e))}async function I(){let e=f.trim()||`Selection ${c.length+1}`;re(``),k(!0);try{d((await U(`monitoring_selection_save`,{selection_id:u||``,name:e,database_name:n,range_value:y,interval_value:x,aggregate_value:C,csv_delimiter:T,points_json:JSON.stringify(o)})).selection_id||u),p(e),await j()}catch(e){re(e.message)}finally{k(!1)}}function L(e){s(e.points||[]),p(e.name||`Selection`),d(Number(e.id||0)),r(e.database_name||n),b(e.range_value||`24h`),S(e.interval_value||`auto`),w(e.aggregate_value||`last`),E(e.csv_delimiter||e.delimiter_value||`;`)}async function R(e){if(e?.id){re(``);try{await U(`monitoring_selection_delete`,{selection_id:e.id}),Number(e.id)===Number(u)&&d(0),await j()}catch(e){re(e.message)}}}function ae(){let e=[[`Datenpunkt`,`Measurement`,`Tag`,`Wert`,`Zeit`,`Datenbank`].map(e=>Gr(e,T)).join(T),...o.map(e=>{let t=D[Ur(e)]||{};return[e.tag_value,e.measurement,e.tag_key,t.value??``,t.time??``,e.database].map(e=>Gr(e,T)).join(T)})];Kr(new Blob([`\uFEFF${e.join(`\r `)}`],{type:`text/csv;charset=utf-8`}),`${f||`monitoring_selection`}_lastvalues.csv`)}async function oe(e=`csv`){let t=new Map,n=[`Zeit`,...o.map(e=>e.tag_value||e.label)];for(let e of qr(o,8))((await U(`trend_data`,{series_json:JSON.stringify(e.map(e=>({...e,id:Ur(e),label:e.tag_value||e.label}))),range:y,interval:x,aggregate:C})).data?.series||[]).forEach(e=>{(e.values||[]).forEach(n=>{t.has(n.time)||t.set(n.time,{Zeit:n.time}),t.get(n.time)[e.label]=n.value??``})});let r=Array.from(t.values()).sort((e,t)=>String(e.Zeit).localeCompare(String(t.Zeit)));if(e===`xls`){let e=[``,`${n.map(e=>``).join(``)}`,...r.map(e=>`${n.map(t=>``).join(``)}`),`
${String(e).replace(/[<>&]/g,``)}
${String(e[t]??``).replace(/[<>&]/g,``)}
`].join(``);Kr(new Blob([e],{type:`application/vnd.ms-excel;charset=utf-8`}),`${f||`monitoring_selection`}_trend.xls`);return}let i=[n.map(e=>Gr(e,T)).join(T),...r.map(e=>n.map(t=>Gr(e[t]??``,T)).join(T))];Kr(new Blob([`\uFEFF${i.join(`\r `)}`],{type:`text/csv;charset=utf-8`}),`${f||`monitoring_selection`}_trend.csv`)}return(0,z.jsx)(`div`,{className:`page-shell full viewer-full`,children:(0,z.jsxs)(`section`,{className:`glass-card visu-workspace monitoring-page`,children:[(0,z.jsxs)(`div`,{className:`section-head visu-topbar`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`eyebrow`,children:`Monitoring`}),(0,z.jsx)(`h1`,{children:`Datenpunkt-Uebersicht`}),(0,z.jsx)(`p`,{className:`subline`,children:`Datenpunkte auswaehlen, Selections speichern und manuelle CSV- oder Excel-Exporte ziehen.`})]}),(0,z.jsxs)(`div`,{className:`designer-actions`,children:[(0,z.jsx)(Gt,{}),(0,z.jsx)(`a`,{href:`/visu/?mode=dashboard`,className:`btn`,children:`Dashboard`}),(0,z.jsx)(`a`,{href:`/visu/?mode=manage`,className:`btn`,children:`Verwaltung`}),(0,z.jsx)(`a`,{href:`/visu/?mode=templates`,className:`btn`,children:`Templates`}),(0,z.jsx)(`a`,{href:`/visu/?mode=monitoring`,className:`btn primary`,children:`Datenpunkte`}),(0,z.jsx)(`a`,{href:`/visu/?mode=virtual_points`,className:`btn`,children:`Virtuelle Datenpunkte`}),(0,z.jsx)(`a`,{href:`/visu/?mode=csv_exports`,className:`btn`,children:`CSV Exporte`})]})]}),A&&(0,z.jsx)(`div`,{className:`error-box small`,children:A}),(0,z.jsxs)(`div`,{className:`monitoring-layout`,children:[(0,z.jsxs)(`div`,{className:`monitoring-panel`,children:[(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Influx DB`}),(0,z.jsx)(`select`,{value:n,onChange:e=>r(e.target.value),children:e.map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Measurement / FROM`}),(0,z.jsxs)(`select`,{value:g,onChange:e=>v(e.target.value),children:[(0,z.jsx)(`option`,{value:``,children:`Alle Measurements`}),M.map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))]})]})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Suchen`}),(0,z.jsx)(`input`,{value:m,onChange:e=>h(e.target.value),placeholder:`Measurement, Tag, Datenpunkt...`})]}),ee&&(0,z.jsx)(`div`,{className:`small-muted`,children:`Datenpunkte werden geladen...`}),(0,z.jsx)(`div`,{className:`monitoring-point-list`,children:N.map(e=>(0,z.jsxs)(`button`,{type:`button`,className:`monitoring-point-row ${P.has(Ur(e))?`is-selected`:``}`,onClick:()=>ie(e),children:[(0,z.jsx)(`strong`,{children:e.tag_value}),(0,z.jsxs)(`span`,{children:[e.measurement,` - `,e.tag_key]})]},Ur(e)))})]}),(0,z.jsxs)(`div`,{className:`monitoring-panel`,children:[(0,z.jsxs)(`div`,{className:`monitoring-selection-head`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Selection Name`}),(0,z.jsx)(`input`,{value:f,onChange:e=>p(e.target.value)})]}),(0,z.jsx)(`button`,{type:`button`,className:`btn primary`,disabled:ne,onClick:I,children:ne?`Speichert...`:`Speichern`})]}),(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Zeitbereich`}),(0,z.jsx)(`select`,{value:y,onChange:e=>b(e.target.value),children:Br.map(e=>(0,z.jsx)(`option`,{value:e.value,children:e.label},e.value))})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Intervall`}),(0,z.jsx)(`select`,{value:x,onChange:e=>S(e.target.value),children:Vr.map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Aggregation`}),(0,z.jsx)(`select`,{value:C,onChange:e=>w(e.target.value),children:Hr.map(e=>(0,z.jsx)(`option`,{value:e.value,children:e.label},e.value))})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`CSV Trennzeichen`}),(0,z.jsxs)(`select`,{value:T,onChange:e=>E(e.target.value),children:[(0,z.jsx)(`option`,{value:`,`,children:`Komma (,)`}),(0,z.jsx)(`option`,{value:`;`,children:`Semikolon (;)`}),(0,z.jsx)(`option`,{value:`\\t`,children:`Tab`})]})]})]}),(0,z.jsxs)(`div`,{className:`designer-actions`,children:[(0,z.jsx)(`button`,{type:`button`,className:`btn small`,disabled:!o.length,onClick:ae,children:`LastValues CSV`}),(0,z.jsx)(`button`,{type:`button`,className:`btn small`,disabled:!o.length,onClick:()=>oe(`csv`),children:`Trend CSV`}),(0,z.jsx)(`button`,{type:`button`,className:`btn small`,disabled:!o.length,onClick:()=>oe(`xls`),children:`Excel`}),(0,z.jsx)(`a`,{href:`/visu/?mode=csv_exports`,className:`btn small`,children:`Zyklische Exporte`})]}),(0,z.jsx)(`div`,{className:`monitoring-selection-list`,children:o.map(e=>{let t=D[Ur(e)]||{};return(0,z.jsxs)(`div`,{className:`monitoring-selection-row`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:e.tag_value}),(0,z.jsxs)(`span`,{children:[t.value!==``&&t.value!==void 0?t.value:`...`,` `,t.time?`- ${new Date(t.time).toLocaleString(`de-DE`)}`:``]})]}),(0,z.jsx)(`button`,{type:`button`,className:`mini-btn danger`,onClick:()=>F(Ur(e)),children:`Entfernen`})]},Ur(e))})}),(0,z.jsxs)(`div`,{className:`monitoring-saved-list`,children:[(0,z.jsx)(`div`,{className:`small-title`,children:`Gespeicherte Selections`}),c.map(e=>(0,z.jsxs)(`div`,{className:`monitoring-saved-row`,children:[(0,z.jsx)(`button`,{type:`button`,className:`mini-btn`,onClick:()=>L(e),children:e.name}),(0,z.jsx)(`button`,{type:`button`,className:`mini-btn danger`,onClick:()=>R(e),children:`Loeschen`})]},e.id||e.name))]})]})]})]})})}var Xr=[{value:`trend_csv`,label:`Trend CSV`},{value:`lastvalues_csv`,label:`LastValues CSV`}],Zr=[{value:`interval`,label:`Taeglich im Intervall`},{value:`daily`,label:`Taeglich`},{value:`weekly`,label:`Woechentlich`},{value:`monthly`,label:`Monatlich`}],Qr=[{value:1,label:`Mo`},{value:2,label:`Di`},{value:3,label:`Mi`},{value:4,label:`Do`},{value:5,label:`Fr`},{value:6,label:`Sa`},{value:7,label:`So`}];function $r(e){return String(e||``).split(`,`).map(e=>Number(e)).filter((e,t,n)=>e>=1&&e<=7&&n.indexOf(e)===t)}function ei(e){return[...e].sort((e,t)=>e-t).join(`,`)}function ti(e){if(!e)return`-`;let t=new Date(e);return Number.isNaN(t.getTime())?String(e):t.toLocaleString(`de-DE`)}function ni(e){let t=Number(e||0);return t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:t<1024*1024*1024?`${(t/(1024*1024)).toFixed(1)} MB`:`${(t/(1024*1024*1024)).toFixed(1)} GB`}function ri(e){return{idle:`Idle`,running:`Laeuft`,success:`OK`,error:`Fehler`,queued:`Queue`,deleted:`Geloescht`}[e]||e||`-`}function ii(e=0,t=0){return{id:0,project_id:e,selection_id:t,name:``,export_kind:`trend_csv`,csv_delimiter:`;`,enabled:!0,schedule_kind:`daily`,interval_minutes:60,time_of_day:`06:00`,weekdays:[1,2,3,4,5],month_day:1,target_dir:`csv_exports`,filename_pattern:`{selection}_{yyyy}-{mm}-{dd}_{hh}-{ii}-{ss}.csv`,retention_days:30,next_run_at:``,last_status:`idle`,last_error:``}}function ai(e){return{id:Number(e.id||0),project_id:Number(e.project_id||0),selection_id:Number(e.selection_id||0),name:e.name||``,export_kind:e.export_kind||`trend_csv`,csv_delimiter:e.csv_delimiter||`;`,enabled:Number(e.enabled??1)===1,schedule_kind:e.schedule_kind||`daily`,interval_minutes:Number(e.interval_minutes||60),time_of_day:e.time_of_day||`00:00`,weekdays:$r(e.weekdays),month_day:Number(e.month_day||1),target_dir:e.target_dir||`csv_exports`,filename_pattern:e.filename_pattern||`{selection}_{yyyy}-{mm}-{dd}_{hh}-{ii}-{ss}.csv`,retention_days:Number(e.retention_days||30),next_run_at:e.next_run_at||``,last_status:e.last_status||`idle`,last_error:e.last_error||``}}function oi(){let[e,t]=(0,_.useState)([]),[n,r]=(0,_.useState)([]),[i,a]=(0,_.useState)(0),[o,s]=(0,_.useState)([]),[c,l]=(0,_.useState)([]),[u,d]=(0,_.useState)(ii()),[f,p]=(0,_.useState)(!1),[m,h]=(0,_.useState)(!1),[g,v]=(0,_.useState)(``);async function y(){let e=(await H(`projects`)).projects||[];t(e),a(t=>t||Number(e[0]?.id||0))}async function b(){let e=await H(`monitoring_selections`);r(e.selections||[]),d(t=>t.selection_id?t:{...t,selection_id:Number(e.selections?.[0]?.id||0)})}async function x(e){if(!e){s([]),l([]);return}p(!0);try{let[t,n]=await Promise.all([H(`csv_export_jobs`,{project_id:e}),H(`csv_export_files`,{project_id:e})]);s(t.jobs||[]),l(n.files||[])}catch(e){v(e.message)}finally{p(!1)}}(0,_.useEffect)(()=>{y().catch(e=>v(e.message)),b().catch(e=>v(e.message))},[]),(0,_.useEffect)(()=>{i&&x(i).catch(e=>v(e.message))},[i]),(0,_.useEffect)(()=>{if(!i)return;let e=window.setInterval(()=>{x(i).catch(()=>{})},15e3);return()=>window.clearInterval(e)},[i]),(0,_.useEffect)(()=>{d(e=>e.project_id===i?e:{...e,project_id:i})},[i]);function S(){d(ii(i,Number(n[0]?.id||0)))}function C(e){d(ai(e)),a(Number(e.project_id||i||0))}async function w(){if(!i){v(`Bitte zuerst ein Projekt fuer den Exportjob waehlen.`);return}if(!u.selection_id){v(`Bitte zuerst eine gespeicherte Selection fuer den Exportjob waehlen.`);return}h(!0),v(``);try{await U(`csv_export_job_save`,{job_id:u.id||``,project_id:i,selection_id:u.selection_id,name:u.name,export_kind:u.export_kind,csv_delimiter:u.csv_delimiter,enabled:u.enabled?`1`:``,schedule_kind:u.schedule_kind,interval_minutes:u.interval_minutes,time_of_day:u.time_of_day,weekdays:ei(u.weekdays),month_day:u.month_day,target_dir:u.target_dir,filename_pattern:u.filename_pattern,retention_days:u.retention_days}),await x(i),S()}catch(e){v(e.message)}finally{h(!1)}}async function T(e){if(e?.id){v(``);try{await U(`csv_export_job_delete`,{job_id:e.id}),await x(i),Number(u.id)===Number(e.id)&&S()}catch(e){v(e.message)}}}async function E(e){if(e?.id){v(``);try{await U(`csv_export_file_delete`,{file_id:e.id}),await x(i)}catch(e){v(e.message)}}}function D(e){d(t=>({...t,weekdays:t.weekdays.includes(e)?t.weekdays.filter(t=>t!==e):[...t.weekdays,e]}))}return(0,z.jsx)(`div`,{className:`page-shell full viewer-full`,children:(0,z.jsxs)(`section`,{className:`glass-card visu-workspace monitoring-page`,children:[(0,z.jsxs)(`div`,{className:`section-head visu-topbar`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`eyebrow`,children:`CSV Exporte`}),(0,z.jsx)(`h1`,{children:`Zyklische Exportjobs`}),(0,z.jsx)(`p`,{className:`subline`,children:`Eigene Seite fuer Scheduler, CSV Pool und wiederkehrende Dateiexporte.`})]}),(0,z.jsxs)(`div`,{className:`designer-actions`,children:[(0,z.jsx)(Gt,{}),(0,z.jsx)(`a`,{href:`/visu/?mode=dashboard`,className:`btn`,children:`Dashboard`}),(0,z.jsx)(`a`,{href:`/visu/?mode=manage`,className:`btn`,children:`Verwaltung`}),(0,z.jsx)(`a`,{href:`/visu/?mode=templates`,className:`btn`,children:`Templates`}),(0,z.jsx)(`a`,{href:`/visu/?mode=monitoring`,className:`btn`,children:`Datenpunkte`}),(0,z.jsx)(`a`,{href:`/visu/?mode=virtual_points`,className:`btn`,children:`Virtuelle Datenpunkte`}),(0,z.jsx)(`a`,{href:`/visu/?mode=csv_exports`,className:`btn primary`,children:`CSV Exporte`})]})]}),g&&(0,z.jsx)(`div`,{className:`error-box small`,children:g}),(0,z.jsxs)(`div`,{className:`monitoring-export-layout`,children:[(0,z.jsxs)(`div`,{className:`monitoring-panel`,children:[(0,z.jsxs)(`div`,{className:`monitoring-export-head`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`eyebrow`,children:`Scheduler`}),(0,z.jsx)(`h2`,{children:`Exportjobs`}),(0,z.jsx)(`p`,{className:`small-muted`,children:`Projekt waehlen, gespeicherte Selection zuweisen und den Laufplan hinterlegen.`})]}),(0,z.jsx)(`button`,{type:`button`,className:`btn small`,onClick:S,children:`+ Neuer Job`})]}),(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Projekt`}),(0,z.jsxs)(`select`,{value:i||``,onChange:e=>a(Number(e.target.value||0)),children:[(0,z.jsx)(`option`,{value:``,children:`Projekt waehlen`}),e.map(e=>(0,z.jsxs)(`option`,{value:e.id,children:[e.year,` - `,e.project_number,` - `,e.name]},e.id))]})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Gespeicherte Selection`}),(0,z.jsxs)(`select`,{value:u.selection_id||``,onChange:e=>d(t=>({...t,selection_id:Number(e.target.value||0)})),children:[(0,z.jsx)(`option`,{value:``,children:`Selection waehlen`}),n.map(e=>(0,z.jsx)(`option`,{value:e.id,children:e.name},e.id))]})]})]}),(0,z.jsxs)(`div`,{className:`monitoring-job-list`,children:[f&&(0,z.jsx)(`div`,{className:`small-muted`,children:`Exportjobs werden geladen...`}),o.map(e=>(0,z.jsxs)(`div`,{className:`monitoring-job-row`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:e.name}),(0,z.jsxs)(`span`,{children:[e.selection_name||`Selection #${e.selection_id}`,` - `,ri(e.last_status),` - Next: `,ti(e.next_run_at)]})]}),(0,z.jsxs)(`div`,{className:`monitoring-row-actions`,children:[(0,z.jsx)(`button`,{type:`button`,className:`mini-btn`,onClick:()=>C(e),children:`Bearbeiten`}),(0,z.jsx)(`button`,{type:`button`,className:`mini-btn danger`,onClick:()=>T(e),children:`Loeschen`})]})]},e.id)),!f&&o.length===0&&(0,z.jsx)(`div`,{className:`empty-mini`,children:`Noch keine Exportjobs fuer dieses Projekt vorhanden.`})]}),(0,z.jsxs)(`div`,{className:`monitoring-job-form`,children:[(0,z.jsxs)(`div`,{className:`prop-grid-2`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Job Name`}),(0,z.jsx)(`input`,{value:u.name,onChange:e=>d(t=>({...t,name:e.target.value})),placeholder:`z.B. Tagesexport HKL`})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Exporttyp`}),(0,z.jsx)(`select`,{value:u.export_kind,onChange:e=>d(t=>({...t,export_kind:e.target.value})),children:Xr.map(e=>(0,z.jsx)(`option`,{value:e.value,children:e.label},e.value))})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`CSV Trennzeichen`}),(0,z.jsxs)(`select`,{value:u.csv_delimiter,onChange:e=>d(t=>({...t,csv_delimiter:e.target.value})),children:[(0,z.jsx)(`option`,{value:`,`,children:`Komma (,)`}),(0,z.jsx)(`option`,{value:`;`,children:`Semikolon (;)`}),(0,z.jsx)(`option`,{value:`\\t`,children:`Tab`})]})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Planung`}),(0,z.jsx)(`select`,{value:u.schedule_kind,onChange:e=>d(t=>({...t,schedule_kind:e.target.value})),children:Zr.map(e=>(0,z.jsx)(`option`,{value:e.value,children:e.label},e.value))})]})]}),(0,z.jsxs)(`div`,{className:`prop-grid-3`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Intervall (Min)`}),(0,z.jsx)(`input`,{type:`number`,min:`1`,disabled:u.schedule_kind!==`interval`,value:Number(u.interval_minutes||60),onChange:e=>d(t=>({...t,interval_minutes:Number(e.target.value||60)}))})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Uhrzeit`}),(0,z.jsx)(`input`,{type:`time`,disabled:u.schedule_kind===`interval`,value:u.time_of_day||`06:00`,onChange:e=>d(t=>({...t,time_of_day:e.target.value}))})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Monatstag`}),(0,z.jsx)(`input`,{type:`number`,min:`1`,max:`31`,disabled:u.schedule_kind!==`monthly`,value:Number(u.month_day||1),onChange:e=>d(t=>({...t,month_day:Number(e.target.value||1)}))})]})]}),u.schedule_kind===`weekly`&&(0,z.jsx)(`div`,{className:`monitoring-weekdays`,children:Qr.map(e=>(0,z.jsxs)(`label`,{className:`monitoring-weekday ${u.weekdays.includes(e.value)?`is-selected`:``}`,children:[(0,z.jsx)(`input`,{type:`checkbox`,checked:u.weekdays.includes(e.value),onChange:()=>D(e.value)}),(0,z.jsx)(`span`,{children:e.label})]},e.value))}),(0,z.jsxs)(`label`,{className:`check-line`,children:[(0,z.jsx)(`input`,{type:`checkbox`,checked:!!u.enabled,onChange:e=>d(t=>({...t,enabled:e.target.checked}))}),`Job aktiv`]}),(0,z.jsxs)(`div`,{className:`monitoring-job-meta`,children:[(0,z.jsxs)(`span`,{children:[`Status: `,ri(u.last_status)]}),(0,z.jsxs)(`span`,{children:[`Naechster Lauf: `,ti(u.next_run_at)]}),u.last_error?(0,z.jsxs)(`span`,{className:`danger-text`,children:[`Letzter Fehler: `,u.last_error]}):null]}),(0,z.jsxs)(`div`,{className:`designer-actions`,children:[(0,z.jsx)(`button`,{type:`button`,className:`btn primary`,disabled:m,onClick:w,children:m?`Speichert...`:`Exportjob speichern`}),(0,z.jsx)(`button`,{type:`button`,className:`btn`,onClick:S,children:`Formular leeren`})]})]})]}),(0,z.jsxs)(`div`,{className:`monitoring-panel`,children:[(0,z.jsx)(`div`,{className:`monitoring-export-head`,children:(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`eyebrow`,children:`CSV Pool`}),(0,z.jsx)(`h2`,{children:`Exportdateien`}),(0,z.jsx)(`p`,{className:`small-muted`,children:`Vorhandene CSV-Dateien werden hier 30 Tage vorgehalten und danach automatisch geloescht.`})]})}),(0,z.jsxs)(`div`,{className:`monitoring-file-list`,children:[f&&(0,z.jsx)(`div`,{className:`small-muted`,children:`Dateipool wird geladen...`}),c.map(e=>(0,z.jsxs)(`div`,{className:`monitoring-file-row`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:e.file_name}),(0,z.jsxs)(`span`,{children:[ri(e.status),` - `,ti(e.created_at),` - `,ni(e.file_size),` - `,e.row_count||0,` Zeilen`]})]}),(0,z.jsxs)(`div`,{className:`monitoring-row-actions`,children:[e.status===`success`&&(0,z.jsx)(`a`,{className:`mini-btn`,href:`/api/visu_api.php?action=csv_export_file_download&file_id=${e.id}`,children:`Download`}),(0,z.jsx)(`button`,{type:`button`,className:`mini-btn danger`,onClick:()=>E(e),children:`Loeschen`})]})]},e.id)),!f&&c.length===0&&(0,z.jsx)(`div`,{className:`empty-mini`,children:`Noch keine Exportdateien im Pool.`})]})]})]})]})})}function si(e){return`${e}-${Date.now()}-${Math.round(Math.random()*1e5)}`}function ci(e){return e?{type:e.type||``,variable_type:e.type||e.variable_type||``,external_id:e.external_id||``,variable_id:e.variable_id||``,point_key:e.point_key||``,point_label:e.label||e.point_label||``,label:e.label||e.point_label||``,source_key:e.source_key||k(e)}:null}function li(e){return e?.type===`point`?e.ref?.point_label||e.ref?.label||e.ref?.point_key||`[Quelle]`:e?.type===`number`?e.value||`0`:e?.type===`operator`?e.value||`+`:`?`}function ui(e){return e?.type===`point`?`Quelle`:e?.type===`number`?`Zahl`:e?.type===`operator`?`Operator`:`Baustein`}function di(e){return e.map(e=>li(e)).join(` `)}function fi(e){return String(e||``).toLowerCase().normalize(`NFD`).replace(/[\u0300-\u036f]/g,``).replace(/[^a-z0-9]+/g,`_`).replace(/^_+|_+$/g,``).replace(/_{2,}/g,`_`)}function pi(e){return e&&(e.value_formatted||e.value)||`--`}function mi(e){return!Array.isArray(e)||!e.length?[{id:si(`token-point`),type:`point`,ref:null},{id:si(`token-op`),type:`operator`,value:`+`},{id:si(`token-number`),type:`number`,value:`0`}]:e.map(e=>({...e,id:e.id||si(`token`)}))}function hi(e=0){return{id:0,project_id:e,point_key:``,name:``,description:``,unit:``,decimals:2,sort_order:100,formula:mi([])}}function gi(e,t){return{id:Number(e.id||0),project_id:Number(e.project_id||t||0),point_key:e.point_key||``,name:e.name||``,description:e.description||``,unit:e.unit||``,decimals:Number(e.decimals??2),sort_order:Number(e.sort_order??100),formula:mi(e.formula)}}function _i({value:e,onChange:t,disabled:n=!1}){let[r,i]=(0,_.useState)([]),[a,o]=(0,_.useState)(``);(0,_.useEffect)(()=>{H(`projects`).then(e=>i(e.projects||[])).catch(()=>i([]))},[]);let s=(0,_.useMemo)(()=>r.filter(e=>[e.year,e.project_number,e.name,e.customer_name].filter(Boolean).join(` `).toLowerCase().includes(a.trim().toLowerCase())),[r,a]);return(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Projekt`}),(0,z.jsx)(`input`,{className:`form-input`,disabled:n,value:a,onChange:e=>o(e.target.value),placeholder:`Projekt suchen`}),(0,z.jsxs)(`select`,{className:`form-input`,disabled:n,value:e||``,onChange:e=>t(Number(e.target.value||0)),children:[(0,z.jsx)(`option`,{value:``,children:`Projekt waehlen`}),s.map(e=>(0,z.jsxs)(`option`,{value:e.id,children:[e.year,` - `,e.project_number,` - `,e.name]},e.id))]})]})}function vi({projectId:e,value:t,onChange:n,excludePointKey:r=``,disabled:i=!1}){let[a,o]=(0,_.useState)([]),[s,c]=(0,_.useState)(``),[l,u]=(0,_.useState)(!1);(0,_.useEffect)(()=>{if(!e){o([]);return}let t=!0;return u(!0),H(`project_values`,{project_id:e}).then(e=>{t&&o(e.values||[])}).catch(()=>{t&&o([])}).finally(()=>{t&&u(!1)}),()=>{t=!1}},[e]);let d=(0,_.useMemo)(()=>a.filter(e=>r&&e.type===`virtual`&&e.point_key===r?!1:[e.type,e.label,e.point_key,e.value_formatted,e.group,e.external_id].filter(Boolean).join(` `).toLowerCase().includes(s.trim().toLowerCase())),[a,s,r]);function f(e){let t=a.find(t=>t.source_key===e);n(t?ci(t):null)}return(0,z.jsxs)(`div`,{className:`field compact-field`,children:[(0,z.jsx)(`label`,{children:`Quelle`}),(0,z.jsx)(`input`,{className:`form-input`,disabled:i,value:s,onChange:e=>c(e.target.value),placeholder:l?`Laedt...`:`Datenpunkt oder VDP suchen`}),(0,z.jsxs)(`select`,{className:`form-input`,disabled:i||l,value:t?.source_key||k(t)||``,onChange:e=>f(e.target.value),children:[(0,z.jsx)(`option`,{value:``,children:`Quelle waehlen`}),d.slice(0,500).map(e=>(0,z.jsx)(`option`,{value:e.source_key,children:e.label},e.source_key))]})]})}function yi({projectId:e,pointKey:t,targetLabel:n,targetPointKey:r,tokens:i,liveValuesMap:a,targetValue:o,onChange:s,disabled:c=!1}){let[l,u]=(0,_.useState)(-1);function d(e,t){let n=[...i];n[e]={...n[e],...t},s(n)}function f(e,t={}){s([...i,{id:si(`token-${e}`),type:e,...e===`number`?{value:`0`}:{},...e===`operator`?{value:`+`}:{},...e===`point`?{ref:null}:{},...t}])}function p(e){s(i.filter((t,n)=>n!==e))}function m(e,t){if(e<0||t<0||e===t)return;let n=[...i],[r]=n.splice(e,1);n.splice(t,0,r),s(n)}let h=di(i);return(0,z.jsxs)(`div`,{className:`vdp-formula-editor`,children:[(0,z.jsxs)(`div`,{className:`vdp-formula-head`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`small-title`,children:`Baustein-Editor`}),(0,z.jsx)(`div`,{className:`small-muted`,children:`Quellen, Zahlen und Operatoren von links nach rechts verbinden.`})]}),(0,z.jsxs)(`div`,{className:`vdp-flow-badge`,children:[i.length,` Bausteine`]})]}),(0,z.jsxs)(`div`,{className:`vdp-token-toolbar`,children:[(0,z.jsx)(`button`,{disabled:c,type:`button`,className:`btn small`,onClick:()=>f(`point`),children:`+ Quelle`}),(0,z.jsx)(`button`,{disabled:c,type:`button`,className:`btn small`,onClick:()=>f(`number`),children:`+ Zahl`}),[`+`,`-`,`*`,`/`,`(`,`)`].map(e=>(0,z.jsx)(`button`,{disabled:c,type:`button`,className:`btn small ghost`,onClick:()=>f(`operator`,{value:e}),children:e},e))]}),(0,z.jsx)(`div`,{className:`vdp-flow-stage`,children:(0,z.jsx)(`div`,{className:`vdp-flow-scroll`,children:(0,z.jsxs)(`div`,{className:`vdp-flow-list`,children:[i.map((n,r)=>(0,z.jsxs)(`div`,{className:`vdp-flow-item is-${n.type}`,draggable:!c,onDragStart:()=>u(r),onDragOver:e=>e.preventDefault(),onDrop:()=>{m(l,r),u(-1)},onDragEnd:()=>u(-1),children:[(0,z.jsx)(`div`,{className:`vdp-flow-link`,"aria-hidden":`true`,children:(0,z.jsx)(`span`,{})}),(0,z.jsxs)(`div`,{className:`vdp-token-card`,children:[(0,z.jsxs)(`div`,{className:`vdp-token-head`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:ui(n)}),(0,z.jsx)(`div`,{className:`small-muted`,children:li(n)})]}),(0,z.jsx)(`button`,{disabled:c,type:`button`,className:`mini-btn danger`,onClick:()=>p(r),children:`Entfernen`})]}),n.type===`point`&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(vi,{projectId:e,value:n.ref||null,excludePointKey:t,disabled:c,onChange:e=>d(r,{ref:e})}),(0,z.jsxs)(`div`,{className:`vdp-token-live`,children:[(0,z.jsx)(`span`,{children:`Aktuell`}),(0,z.jsx)(`strong`,{children:pi(j(n.ref||null,a))})]})]}),n.type===`number`&&(0,z.jsxs)(`div`,{className:`field compact-field`,children:[(0,z.jsx)(`label`,{children:`Wert`}),(0,z.jsx)(`input`,{className:`form-input`,disabled:c,value:n.value??`0`,onChange:e=>d(r,{value:e.target.value})})]}),n.type===`operator`&&(0,z.jsxs)(`div`,{className:`field compact-field`,children:[(0,z.jsx)(`label`,{children:`Operator`}),(0,z.jsx)(`select`,{className:`form-input`,disabled:c,value:n.value||`+`,onChange:e=>d(r,{value:e.target.value}),children:[`+`,`-`,`*`,`/`,`(`,`)`].map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))})]}),(0,z.jsxs)(`div`,{className:`vdp-token-actions`,children:[(0,z.jsx)(`button`,{disabled:c||r===0,type:`button`,className:`mini-btn`,onClick:()=>m(r,r-1),children:`<`}),(0,z.jsx)(`button`,{disabled:c||r>=i.length-1,type:`button`,className:`mini-btn`,onClick:()=>m(r,r+1),children:`>`})]})]})]},n.id||r)),(0,z.jsxs)(`div`,{className:`vdp-flow-target-wrap`,onDragOver:e=>e.preventDefault(),onDrop:()=>{m(l,Math.max(0,i.length-1)),u(-1)},children:[(0,z.jsx)(`div`,{className:`vdp-flow-link`,"aria-hidden":`true`,children:(0,z.jsx)(`span`,{})}),(0,z.jsxs)(`div`,{className:`vdp-flow-target`,children:[(0,z.jsx)(`div`,{className:`eyebrow`,children:`Ziel`}),(0,z.jsx)(`strong`,{children:n||`Neuer virtueller Datenpunkt`}),(0,z.jsx)(`span`,{children:r||`point_key fehlt noch`}),(0,z.jsxs)(`div`,{className:`vdp-flow-target-value`,children:[(0,z.jsx)(`span`,{children:`Aktuell`}),(0,z.jsx)(`strong`,{children:pi(o)})]})]})]})]})})}),(0,z.jsx)(`div`,{className:`vdp-formula-preview`,children:h||`Noch keine Formel vorhanden.`})]})}function bi(){let e=new URLSearchParams(window.location.search),[t,n]=(0,_.useState)(Number(e.get(`project_id`)||0)),[r,i]=(0,_.useState)([]),[a,o]=(0,_.useState)([]),[s,c]=(0,_.useState)(0),[l,u]=(0,_.useState)(hi(t)),[d,f]=(0,_.useState)(!1),[p,m]=(0,_.useState)(!1),[h,g]=(0,_.useState)(``),[v,y]=(0,_.useState)(!1);async function b(e){if(!e){o([]);return}try{o((await H(`project_values`,{project_id:e})).values||[])}catch{}}async function x(e){if(!e){i([]),o([]),c(0),u(hi(0));return}f(!0),g(``);try{let[t,n]=await Promise.all([H(`virtual_points`,{project_id:e}),H(`project_values`,{project_id:e})]),r=t.virtual_points||[];if(i(r),o(n.values||[]),y(!!t.can_edit),r.length>0){let t=r[0];c(Number(t.id||0)),u(gi(t,e))}else c(0),u(hi(e))}catch(e){g(e.message),i([]),o([])}finally{f(!1)}}(0,_.useEffect)(()=>{x(t)},[t]),(0,_.useEffect)(()=>{if(!t)return;let e=window.setInterval(()=>{b(t)},5e3);return()=>window.clearInterval(e)},[t]);let S=(0,_.useMemo)(()=>l.point_key||fi(l.name),[l.point_key,l.name]),C=(0,_.useMemo)(()=>{let e={};return a.forEach(t=>{t?.source_key&&(e[t.source_key]=t),t?.variable_id&&(e[String(t.variable_id)]=t)}),e},[a]),w=(0,_.useMemo)(()=>S&&a.find(e=>e.type===`virtual`&&e.point_key===S)||null,[a,S]);function T(e){c(Number(e.id||0)),u(gi(e,t))}function E(){c(0),u(hi(t))}async function D(){if(!t){g(`Bitte zuerst ein Projekt waehlen.`);return}m(!0),g(``);try{await U(`virtual_point_save`,{point_id:l.id||``,project_id:t,point_key:S,name:l.name,description:l.description,unit:l.unit,decimals:l.decimals,sort_order:l.sort_order,formula_json:JSON.stringify(l.formula||[])}),await x(t)}catch(e){g(e.message)}finally{m(!1)}}async function O(){if(l.id){g(``);try{await U(`virtual_point_delete`,{point_id:l.id}),await x(t)}catch(e){g(e.message)}}}return(0,z.jsx)(`div`,{className:`page-shell full viewer-full`,children:(0,z.jsxs)(`section`,{className:`glass-card visu-workspace monitoring-page`,children:[(0,z.jsxs)(`div`,{className:`section-head visu-topbar`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`eyebrow`,children:`Virtuelle Datenpunkte`}),(0,z.jsx)(`h1`,{children:`VDP Editor`}),(0,z.jsx)(`p`,{className:`subline`,children:`Projektbezogene Formeln als links-nach-rechts Bausteinkette bauen und wie normale Werte in der Visu verwenden.`})]}),(0,z.jsxs)(`div`,{className:`designer-actions`,children:[(0,z.jsx)(Gt,{}),(0,z.jsx)(`a`,{href:`/visu/?mode=dashboard`,className:`btn`,children:`Dashboard`}),(0,z.jsx)(`a`,{href:`/visu/?mode=manage`,className:`btn`,children:`Verwaltung`}),(0,z.jsx)(`a`,{href:`/visu/?mode=templates`,className:`btn`,children:`Templates`}),(0,z.jsx)(`a`,{href:`/visu/?mode=monitoring`,className:`btn`,children:`Datenpunkte`}),(0,z.jsx)(`a`,{href:`/visu/?mode=virtual_points`,className:`btn primary`,children:`Virtuelle Datenpunkte`}),(0,z.jsx)(`a`,{href:`/visu/?mode=csv_exports`,className:`btn`,children:`CSV Exporte`})]})]}),h&&(0,z.jsx)(`div`,{className:`error-box small`,children:h}),(0,z.jsxs)(`div`,{className:`vdp-layout`,children:[(0,z.jsxs)(`aside`,{className:`vdp-sidebar`,children:[(0,z.jsx)(_i,{value:t,onChange:n}),(0,z.jsx)(`button`,{type:`button`,className:`btn small primary`,disabled:!t||!v,onClick:E,children:`+ Neuer VDP`}),d&&(0,z.jsx)(`div`,{className:`small-muted`,children:`VDPs werden geladen...`}),(0,z.jsx)(`div`,{className:`vdp-point-list`,children:r.map(e=>(0,z.jsxs)(`button`,{type:`button`,className:`vdp-point-row ${Number(s)===Number(e.id)?`is-selected`:``}`,onClick:()=>T(e),children:[(0,z.jsx)(`strong`,{children:e.name}),(0,z.jsx)(`span`,{children:e.point_key})]},e.id))})]}),(0,z.jsxs)(`div`,{className:`vdp-editor-panel`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Name`}),(0,z.jsx)(`input`,{className:`form-input`,disabled:!v,value:l.name||``,onChange:e=>{let t=e.target.value;u(e=>({...e,name:t,point_key:fi(t)}))}})]}),(0,z.jsxs)(`div`,{className:`vdp-meta-grid`,children:[(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Punkt-Key (automatisch)`}),(0,z.jsx)(`input`,{className:`form-input`,disabled:!0,value:S||``,placeholder:`wird aus dem Namen erzeugt`})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Einheit`}),(0,z.jsx)(`input`,{className:`form-input`,disabled:!v,value:l.unit||``,onChange:e=>u(t=>({...t,unit:e.target.value})),placeholder:`z.B. kW`})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Nachkommastellen`}),(0,z.jsx)(`input`,{className:`form-input`,disabled:!v,type:`number`,min:`0`,max:`8`,value:Number(l.decimals??2),onChange:e=>u(t=>({...t,decimals:Math.max(0,Math.min(8,Number(e.target.value||0)))}))})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Sortierung`}),(0,z.jsx)(`input`,{className:`form-input`,disabled:!v,type:`number`,value:Number(l.sort_order??100),onChange:e=>u(t=>({...t,sort_order:Number(e.target.value||100)}))})]})]}),(0,z.jsxs)(`div`,{className:`field`,children:[(0,z.jsx)(`label`,{children:`Beschreibung`}),(0,z.jsx)(`textarea`,{className:`form-input`,disabled:!v,value:l.description||``,onChange:e=>u(t=>({...t,description:e.target.value})),rows:`3`})]}),(0,z.jsx)(yi,{projectId:t,pointKey:S,targetLabel:l.name,targetPointKey:S,tokens:Array.isArray(l.formula)?l.formula:[],liveValuesMap:C,targetValue:w,disabled:!v,onChange:e=>u(t=>({...t,formula:e}))}),(0,z.jsxs)(`div`,{className:`designer-actions`,children:[(0,z.jsx)(`button`,{type:`button`,className:`btn primary`,disabled:!v||p,onClick:D,children:p?`Speichert...`:`VDP speichern`}),(0,z.jsx)(`button`,{type:`button`,className:`btn danger`,disabled:!v||!l.id,onClick:O,children:`Loeschen`})]})]})]})]})})}function xi(){let e=new URLSearchParams(window.location.search);return{mode:e.get(`mode`)||`dashboard`,pageId:Number(e.get(`page_id`)||0),templateId:Number(e.get(`template_id`)||0)}}function Si(){ae();let e=(0,_.useMemo)(()=>xi(),[]);return e.mode===`designer`?(0,z.jsx)(Rr,{pageId:e.pageId}):e.mode===`templates`?(0,z.jsx)(zr,{templateId:e.templateId}):e.mode===`monitoring`?(0,z.jsx)(Yr,{}):e.mode===`csv_exports`?(0,z.jsx)(oi,{}):e.mode===`virtual_points`?(0,z.jsx)(bi,{}):e.mode===`viewer`?(0,z.jsx)(wn,{pageId:e.pageId}):e.mode===`manage`?(0,z.jsx)(et,{mode:`manage`}):(0,z.jsx)(et,{mode:`dashboard`})}v.createRoot(document.getElementById(`root`)).render((0,z.jsx)(_.StrictMode,{children:(0,z.jsx)(Si,{})}));