friend-assistant 0.1.65 → 0.1.67

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/jarvisTree-OK31Zc78.js","assets/jarvis-ui-C-tkFT8x.js","assets/jarvis-ui-CbruVJnv.css","assets/OrgParts-C_K6EFKg.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/jarvisTree-DB0IJJYC.js","assets/jarvis-ui-CVMi9VIt.js","assets/jarvis-ui-CbruVJnv.css","assets/OrgParts-XlLbDQwR.js"])))=>i.map(i=>d[i]);
2
2
  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,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,o)=>(o=n==null?{}:e(i(n)),c(r||!n||!n.__esModule||!a.call(n,`default`)?t(o,`default`,{value:n,enumerable:!0}):o,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),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var u=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.for(`react.view_transition`),m=Symbol.iterator;function h(e){return typeof e!=`object`||!e?null:(e=m&&e[m]||e[`@@iterator`],typeof e==`function`?e:null)}var g={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},_=Object.assign,v={};function y(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||g}y.prototype.isReactComponent={},y.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`)},y.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function b(){}b.prototype=y.prototype;function x(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||g}var S=x.prototype=new b;S.constructor=x,_(S,y.prototype),S.isPureReactComponent=!0;var C=Array.isArray;function w(){}var T={H:null,A:null,T:null,S:null},E=Object.prototype.hasOwnProperty;function D(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function O(e,t){return D(e.type,t,e.props)}function k(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function A(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var j=/\/+/g;function ee(e,t){return typeof e==`object`&&e&&e.key!=null?A(``+e.key):t.toString(36)}function M(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(w,w):(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 N(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,N(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+ee(e,0):a,C(o)?(i=``,c!=null&&(i=c.replace(j,`$&/`)+`/`),N(o,r,i,``,function(e){return e})):o!=null&&(k(o)&&(o=O(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(j,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(C(e))for(var u=0;u<e.length;u++)a=e[u],s=l+ee(a,u),c+=N(a,r,i,s,o);else if(u=h(e),typeof u==`function`)for(e=u.call(e),u=0;!(a=e.next()).done;)a=a.value,s=l+ee(a,u++),c+=N(a,r,i,s,o);else if(s===`object`){if(typeof e.then==`function`)return N(M(e),r,i,a,o);throw r=String(e),Error(`Objects are not valid as a React child (found: `+(r===`[object Object]`?`object with keys {`+Object.keys(e).join(`, `)+`}`:r)+`). If you meant to render a collection of children, use an array instead.`)}return c}function P(e,t,n){if(e==null)return e;var r=[],i=0;return N(e,r,``,``,function(e){return t.call(n,e,i++)}),r}function F(e){if(e._status===-1){var t=e._result,n=t();n.then(function(t){(e._status===0||e._status===-1)&&(e._status=1,e._result=t,n.status===void 0&&(n.status=`fulfilled`,n.value=t))},function(t){(e._status===0||e._status===-1)&&(e._status=2,e._result=t,n.status===void 0&&(n.status=`rejected`,n.reason=t))}),e._status===-1&&(e._status=0,e._result=n)}if(e._status===1)return e._result.default;throw e._result}var te=typeof reportError==`function`?reportError:function(e){if(typeof window==`object`&&typeof window.ErrorEvent==`function`){var t=new window.ErrorEvent(`error`,{bubbles:!0,cancelable:!0,message:typeof e==`object`&&e&&typeof e.message==`string`?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process==`object`&&typeof process.emit==`function`){process.emit(`uncaughtException`,e);return}console.error(e)};function ne(e){var t=T.T,n={};n.types=t===null?null:t.types,T.T=n;try{var r=e(),i=T.S;i!==null&&i(n,r),typeof r==`object`&&r&&typeof r.then==`function`&&r.then(w,te)}catch(e){te(e)}finally{t!==null&&n.types!==null&&(t.types=n.types),T.T=t}}function re(e){var t=T.T;if(t!==null){var n=t.types;n===null?t.types=[e]:n.indexOf(e)===-1&&n.push(e)}else ne(re.bind(null,e))}var I={map:P,forEach:function(e,t,n){P(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return P(e,function(){t++}),t},toArray:function(e){return P(e,function(e){return e})||[]},only:function(e){if(!k(e))throw Error(`React.Children.only expected to receive a single React element child.`);return e}};e.Activity=f,e.Children=I,e.Component=y,e.Fragment=r,e.Profiler=a,e.PureComponent=x,e.StrictMode=i,e.Suspense=l,e.ViewTransition=p,e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=T,e.__COMPILER_RUNTIME={__proto__:null,c:function(e){return T.H.useMemoCache(e)}},e.addTransitionType=re,e.cache=function(e){return function(){return e.apply(null,arguments)}},e.cacheSignal=function(){return null},e.cloneElement=function(e,t,n){if(e==null)throw Error(`The argument must be a React element, but you passed `+e+`.`);var r=_({},e.props),i=e.key;if(t!=null)for(a in t.key!==void 0&&(i=``+t.key),t)!E.call(t,a)||a===`key`||a===`__self`||a===`__source`||a===`ref`&&t.ref===void 0||(r[a]=t[a]);var a=arguments.length-2;if(a===1)r.children=n;else if(1<a){for(var o=Array(a),s=0;s<a;s++)o[s]=arguments[s+2];r.children=o}return D(e.type,i,r)},e.createContext=function(e){return e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null},e.Provider=e,e.Consumer={$$typeof:o,_context:e},e},e.createElement=function(e,t,n){var r,i={},a=null;if(t!=null)for(r in t.key!==void 0&&(a=``+t.key),t)E.call(t,r)&&r!==`key`&&r!==`__self`&&r!==`__source`&&(i[r]=t[r]);var o=arguments.length-2;if(o===1)i.children=n;else if(1<o){for(var s=Array(o),c=0;c<o;c++)s[c]=arguments[c+2];i.children=s}if(e&&e.defaultProps)for(r in o=e.defaultProps,o)i[r]===void 0&&(i[r]=o[r]);return D(e,a,i)},e.createRef=function(){return{current:null}},e.forwardRef=function(e){return{$$typeof:c,render:e}},e.isValidElement=k,e.lazy=function(e){return{$$typeof:d,_payload:{_status:-1,_result:e},_init:F}},e.memo=function(e,t){return{$$typeof:u,type:e,compare:t===void 0?null:t}},e.startTransition=ne,e.unstable_useCacheRefresh=function(){return T.H.useCacheRefresh()},e.use=function(e){return T.H.use(e)},e.useActionState=function(e,t,n){return T.H.useActionState(e,t,n)},e.useCallback=function(e,t){return T.H.useCallback(e,t)},e.useContext=function(e){return T.H.useContext(e)},e.useDebugValue=function(){},e.useDeferredValue=function(e,t){return T.H.useDeferredValue(e,t)},e.useEffect=function(e,t){return T.H.useEffect(e,t)},e.useEffectEvent=function(e){return T.H.useEffectEvent(e)},e.useId=function(){return T.H.useId()},e.useImperativeHandle=function(e,t,n){return T.H.useImperativeHandle(e,t,n)},e.useInsertionEffect=function(e,t){return T.H.useInsertionEffect(e,t)},e.useLayoutEffect=function(e,t){return T.H.useLayoutEffect(e,t)},e.useMemo=function(e,t){return T.H.useMemo(e,t)},e.useOptimistic=function(e,t){return T.H.useOptimistic(e,t)},e.useReducer=function(e,t,n){return T.H.useReducer(e,t,n)},e.useRef=function(e){return T.H.useRef(e)},e.useState=function(e){return T.H.useState(e)},e.useSyncExternalStore=function(e,t,n){return T.H.useSyncExternalStore(e,t,n)},e.useTransition=function(){return T.H.useTransition()},e.version=`19.3.0`})),d=o(((e,t)=>{t.exports=u()})),f=o((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0<n;){var r=n-1>>>1,a=e[r];if(0<i(a,t))e[r]=t,e[n]=a,n=r;else break a}}function n(e){return e.length===0?null:e[0]}function r(e){if(e.length===0)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;a:for(var r=0,a=e.length,o=a>>>1;r<o;){var s=2*(r+1)-1,c=e[s],l=s+1,u=e[l];if(0>i(c,n))l<a&&0>i(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(l<a&&0>i(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&&j(x,t.startTime-e)}}}var S=!1,C=-1,w=5,T=-1;function E(){return g?!0:!(e.unstable_now()-T<w)}function D(){if(g=!1,S){var t=e.unstable_now();T=t;var i=!0;try{a:{m=!1,h&&(h=!1,v(C),C=-1),p=!0;var a=f;try{b:{for(b(t),d=n(c);d!==null&&!(d.expirationTime>t&&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&&j(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 k=new MessageChannel,A=k.port2;k.port1.onmessage=D,O=function(){A.postMessage(null)}}else O=function(){_(D,0)};function j(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||125<e?console.error(`forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported`):w=0<e?Math.floor(1e3/e):5},e.unstable_getCurrentPriorityLevel=function(){return f},e.unstable_next=function(e){switch(f){case 1:case 2:case 3:var t=3;break;default:t=f}var n=f;f=t;try{return e()}finally{f=n}},e.unstable_requestPaint=function(){g=!0},e.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=f;f=e;try{return t()}finally{f=n}},e.unstable_scheduleCallback=function(r,i,a){var o=e.unstable_now();switch(typeof a==`object`&&a?(a=a.delay,a=typeof a==`number`&&0<a?o+a:o):a=o,r){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return s=a+s,r={id:u++,callback:i,priorityLevel:r,startTime:a,expirationTime:s,sortIndex:-1},a>o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(C),C=-1):h=!0,j(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}}}})),p=o(((e,t)=>{t.exports=f()})),m=o((e=>{var t=d();function n(e){var t=`https://react.dev/errors/`+e;if(1<arguments.length){t+=`?args[]=`+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+=`&args[]=`+encodeURIComponent(arguments[n])}return`Minified React error #`+e+`; visit `+t+` for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`}function r(){}var i={d:{f:r,r:function(){throw Error(n(522))},D:r,C:r,L:r,m:r,X:r,S:r,M:r},p:0,findDOMNode:null},a=Symbol.for(`react.portal`),o=Symbol.for(`react.recoverable`),s=Symbol.for(`react.optimistic_key`);function c(e,t,n){var r=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:a,key:r==null?null:r===s?s:``+r,children:e,containerInfo:t,implementation:n}}var l=t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function u(e,t){if(e===`font`)return``;if(typeof t==`string`)return t===`use-credentials`?t:``}e.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=i,e.browser=function(e){return{$$typeof:o,_reason:e}},e.createPortal=function(e,t){var r=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!t||t.nodeType!==1&&t.nodeType!==9&&t.nodeType!==11)throw Error(n(299));return c(e,t,null,r)},e.flushSync=function(e){var t=l.T,n=i.p;try{if(l.T=null,i.p=2,e)return e()}finally{l.T=t,i.p=n,i.d.f()}},e.preconnect=function(e,t){typeof e==`string`&&(t?(t=t.crossOrigin,t=typeof t==`string`?t===`use-credentials`?t:``:void 0):t=null,i.d.C(e,t))},e.prefetchDNS=function(e){typeof e==`string`&&i.d.D(e)},e.preinit=function(e,t){if(typeof e==`string`&&t&&typeof t.as==`string`){var n=t.as,r=u(n,t.crossOrigin),a=typeof t.integrity==`string`?t.integrity:void 0,o=typeof t.fetchPriority==`string`?t.fetchPriority:void 0;n===`style`?i.d.S(e,typeof t.precedence==`string`?t.precedence:void 0,{crossOrigin:r,integrity:a,fetchPriority:o}):n===`script`&&i.d.X(e,{crossOrigin:r,integrity:a,fetchPriority:o,nonce:typeof t.nonce==`string`?t.nonce:void 0})}},e.preinitModule=function(e,t){if(typeof e==`string`){if(typeof t==`object`&&t){if(t.as==null||t.as===`script`){var n=u(t.as,t.crossOrigin);i.d.M(e,{crossOrigin:n,integrity:typeof t.integrity==`string`?t.integrity:void 0,nonce:typeof t.nonce==`string`?t.nonce:void 0,fetchPriority:typeof t.fetchPriority==`string`?t.fetchPriority:void 0})}}else t??i.d.M(e)}},e.preload=function(e,t){if(typeof e==`string`&&typeof t==`object`&&t&&typeof t.as==`string`){var n=t.as,r=u(n,t.crossOrigin);i.d.L(e,n,{crossOrigin:r,integrity:typeof t.integrity==`string`?t.integrity:void 0,nonce:typeof t.nonce==`string`?t.nonce:void 0,type:typeof t.type==`string`?t.type:void 0,fetchPriority:typeof t.fetchPriority==`string`?t.fetchPriority:void 0,referrerPolicy:typeof t.referrerPolicy==`string`?t.referrerPolicy:void 0,imageSrcSet:typeof t.imageSrcSet==`string`?t.imageSrcSet:void 0,imageSizes:typeof t.imageSizes==`string`?t.imageSizes:void 0,media:typeof t.media==`string`?t.media:void 0})}},e.preloadModule=function(e,t){if(typeof e==`string`){if(t){var n=u(t.as,t.crossOrigin);i.d.m(e,{as:typeof t.as==`string`&&t.as!==`script`?t.as:void 0,crossOrigin:n,integrity:typeof t.integrity==`string`?t.integrity:void 0,nonce:typeof t.nonce==`string`?t.nonce:void 0,fetchPriority:typeof t.fetchPriority==`string`?t.fetchPriority:void 0})}else i.d.m(e)}},e.requestFormReset=function(e){i.d.r(e)},e.unstable_batchedUpdates=function(e,t){return e(t)},e.useFormState=function(e,t,n){return l.H.useFormState(e,t,n)},e.useFormStatus=function(){return l.H.useHostTransitionStatus()},e.version=`19.3.0`})),h=o(((e,t)=>{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=m()})),g=o((e=>{var t=p(),n=d(),r=h();function i(e){var t=`https://react.dev/errors/`+e;if(1<arguments.length){t+=`?args[]=`+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+=`&args[]=`+encodeURIComponent(arguments[n])}return`Minified React error #`+e+`; visit `+t+` for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`}function a(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function o(e){for(var t=e,n=t;n&&!n.alternate;)t=n,t.flags&4098&&(e=t.return),n=t.return;for(;t.return;)t=t.return;return t.tag===3?e:null}function s(e){if(e.tag===13){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function c(e){if(e.tag===31){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function l(e){if(o(e)!==e)throw Error(i(188))}function u(e){var t=e.alternate;if(!t){if(t=o(e),t===null)throw Error(i(188));return t===e?e:null}for(var n=e,r=t;;){var a=n.return;if(a===null)break;var s=a.alternate;if(s===null){if(r=a.return,r!==null){n=r;continue}break}if(a.child===s.child){for(s=a.child;s;){if(s===n)return l(a),e;if(s===r)return l(a),t;s=s.sibling}throw Error(i(188))}if(n.return!==r.return)n=a,r=s;else{for(var c=!1,u=a.child;u;){if(u===n){c=!0,n=a,r=s;break}if(u===r){c=!0,r=a,n=s;break}u=u.sibling}if(!c){for(u=s.child;u;){if(u===n){c=!0,n=s,r=a;break}if(u===r){c=!0,r=s,n=a;break}u=u.sibling}if(!c)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(n.tag!==3)throw Error(i(188));return n.stateNode.current===n?e:t}function f(e){var t=e.tag;if(t===5||t===26||t===27||t===6)return e;for(e=e.child;e!==null;){if(t=f(e),t!==null)return t;e=e.sibling}return null}function m(e,t,n,r,i,a){for(;e!==null;){if((e.tag===5||e.tag===27||e.tag===6)&&n(e,r,i,a)||(e.tag!==22||e.memoizedState===null)&&(t||e.tag!==5&&e.tag!==27)&&m(e.child,t,n,r,i,a))return!0;e=e.sibling}return!1}function g(e){for(e=e.return;e!==null;){if(e.tag===3||e.tag===5||e.tag===27)return e;e=e.return}return null}function _(e){var t=!1;for(e=e.return;e!==null&&(e.tag===4&&(t=!0),e.tag!==3&&e.tag!==5&&e.tag!==27);)e=e.return;return t}function v(e){var t=[null,null],n=g(e);return n===null||y(t,e,n.child,{foundSelf:!1}),t}function y(e,t,n,r){for(;n!==null;){if(n===t)r.foundSelf=!0;else if(n.tag===5||n.tag===27||n.tag===6){if(r.foundSelf)return e[1]=n,!0;e[0]=n}else if((n.tag!==22||n.memoizedState===null)&&y(e,t,n.child,r))return!0;n=n.sibling}return!1}function b(e){switch(e.tag){case 5:case 27:case 6:return e.stateNode;case 3:return e.stateNode.containerInfo;default:throw Error(i(559))}}var x=null,S=null;function C(e,t,n){return e===n||e===t&&(x=e,!0)}function w(e,t,n){return e===n?(S=e,!1):e===t&&(S!==null&&(x=e),!0)}function T(e){if(e===null)return null;do e=e===null?null:e.return;while(e&&e.tag!==5&&e.tag!==27&&e.tag!==3);return e||null}function E(e,t,n){for(var r=0,i=e;i;i=n(i))r++;i=0;for(var a=t;a;a=n(a))i++;for(;0<r-i;)e=n(e),r--;for(;0<i-r;)t=n(t),i--;for(;r--;){if(e===t||t!==null&&e===t.alternate)return e;e=n(e),t=n(t)}return null}var D=Object.assign,O=Symbol.for(`react.element`),k=Symbol.for(`react.transitional.element`),A=Symbol.for(`react.portal`),j=Symbol.for(`react.fragment`),ee=Symbol.for(`react.strict_mode`),M=Symbol.for(`react.profiler`),N=Symbol.for(`react.consumer`),P=Symbol.for(`react.context`),F=Symbol.for(`react.forward_ref`),te=Symbol.for(`react.suspense`),ne=Symbol.for(`react.suspense_list`),re=Symbol.for(`react.memo`),I=Symbol.for(`react.lazy`),ie=Symbol.for(`react.activity`),ae=Symbol.for(`react.legacy_hidden`),oe=Symbol.for(`react.memo_cache_sentinel`),se=Symbol.for(`react.view_transition`),ce=Symbol.for(`react.recoverable`),le=Symbol.iterator;function L(e){return typeof e!=`object`||!e?null:(e=le&&e[le]||e[`@@iterator`],typeof e==`function`?e:null)}var ue=Symbol.for(`react.client.reference`);function de(e){if(e==null)return null;if(typeof e==`function`)return e.$$typeof===ue?null:e.displayName||e.name||null;if(typeof e==`string`)return e;switch(e){case j:return`Fragment`;case M:return`Profiler`;case ee:return`StrictMode`;case te:return`Suspense`;case ne:return`SuspenseList`;case ie:return`Activity`;case se:return`ViewTransition`}if(typeof e==`object`)switch(e.$$typeof){case A:return`Portal`;case P:return e.displayName||`Context`;case N:return(e._context.displayName||`Context`)+`.Consumer`;case F:var t=e.render;return e=e.displayName,e||=(e=t.displayName||t.name||``,e===``?`ForwardRef`:`ForwardRef(`+e+`)`),e;case re:return t=e.displayName||null,t===null?de(e.type)||`Memo`:t;case I:t=e._payload,e=e._init;try{return de(e(t))}catch{}}return null}var R=Array.isArray,z=n.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,B=r.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,fe={pending:!1,data:null,method:null,action:null},pe=[],me=-1;function V(e){return{current:e}}function he(e){0>me||(e.current=pe[me],pe[me]=null,me--)}function H(e,t){me++,pe[me]=e.current,e.current=t}var ge=V(null),_e=V(null),ve=V(null),U=V(null);function ye(e,t){switch(H(ve,t),H(_e,e),H(ge,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?fp(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=fp(t),e=pp(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}he(ge),H(ge,e)}function W(){he(ge),he(_e),he(ve)}function be(e){var t=e.memoizedState;t!==null&&(ch._currentValue=t.memoizedState,H(U,e)),t=ge.current;var n=pp(t,e.type);t!==n&&(H(_e,e),H(ge,n))}function xe(e){_e.current===e&&(he(ge),he(_e)),U.current===e&&(he(U),ch._currentValue=fe)}var Se,Ce;function we(e){if(Se===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);Se=t&&t[1]||``,Ce=-1<e.stack.indexOf(`
3
3
  at`)?` (<anonymous>)`:-1<e.stack.indexOf(`@`)?`@unknown:0:0`:``}return`
4
4
  `+Se+e+Ce}var Te=!1;function Ee(e,t){if(!e||Te)return``;Te=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var r={DetermineComponentFrameRoot:function(){try{if(t){var n=function(){throw Error()};if(Object.defineProperty(n.prototype,"props",{set:function(){throw Error()}}),typeof Reflect==`object`&&Reflect.construct){try{Reflect.construct(n,[])}catch(e){var r=e}Reflect.construct(e,[],n)}else{try{n.call()}catch(e){r=e}n=!1;try{var i=Object.getOwnPropertyDescriptor(e.prototype,`props`);Object.defineProperty(e.prototype,"props",{configurable:!0,set:function(){throw Error()}}),n=!0,new e}finally{n&&(i===void 0?delete e.prototype.props:Object.defineProperty(e.prototype,"props",i))}}}else{try{throw Error()}catch(e){r=e}(n=e())&&typeof n.catch==`function`&&n.catch(function(){})}}catch(e){if(e&&r&&typeof e.stack==`string`)return[e.stack,r.stack]}return[null,null]}};r.DetermineComponentFrameRoot.displayName=`DetermineComponentFrameRoot`;var i=Object.getOwnPropertyDescriptor(r.DetermineComponentFrameRoot,`name`);i&&i.configurable&&Object.defineProperty(r.DetermineComponentFrameRoot,"name",{value:`DetermineComponentFrameRoot`});var a=r.DetermineComponentFrameRoot(),o=a[0],s=a[1];if(o&&s){var c=o.split(`
@@ -63,7 +63,7 @@ some-mcp-server`})]}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(
63
63
 
64
64
  `)}return o.write(`payload.value = newResult;`),o.write(`return payload;`),o.compile()},o,s=Kt,c=!Un.jitless,l=c&&qt.value,u=t.catchall,d;e._zod.parse=(i,f)=>{d??=r.value;let p=i.value;return s(p)?c&&l&&f?.async===!1&&f.jitless!==!0?(o||=a(t.shape),i=o(i,f),u?ya([],p,i,f,d,e,f?.abortEarly===!0):i):n(i,f):(i.issues.push({expected:`object`,code:`invalid_type`,input:p,inst:e}),i)}});function Sa(e,t,n,r){for(let n of e)if(n.issues.length===0)return t.value=n.value,t;let i=e.filter(e=>!pn(e));return i.length===1?(t.value=i[0].value,i[0]):(t.issues.push({code:`invalid_union`,input:t.value,inst:n,errors:e.map(e=>e.issues.map(e=>vn(e,r,Wn())))}),t)}var Ca=K(`$ZodUnion`,(e,t)=>{yi.init(e,t),Nn(e,`optin`,e=>e.def.options.some(e=>e._zod.optin===`defaulted`)?`defaulted`:e.def.options.some(e=>e._zod.optin!==void 0)?`optional`:void 0),Nn(e,`optout`,e=>e.def.options.some(e=>e._zod.optout===`optional`)?`optional`:void 0),Nn(e,`values`,e=>{if(e.def.options.every(e=>e._zod.values))return new Set(e.def.options.flatMap(e=>Array.from(e._zod.values)))}),Nn(e,`pattern`,e=>{if(e.def.options.every(e=>e._zod.pattern)){let t=e.def.options.map(e=>e._zod.pattern);return RegExp(`^(${t.map(e=>Nt(e.source)).join(`|`)})$`)}});let n=t.options.length===1?t.options[0]._zod.run:null;e._zod.parse=(r,i)=>{if(n)return n(r,i);let a=!1,o=[];for(let e of t.options){let t=e._zod.run({value:r.value,issues:[]},i);if(t instanceof Promise)o.push(t),a=!0;else{if(t.issues.length===0)return t;o.push(t)}}return a?Promise.all(o).then(t=>Sa(t,r,e,i)):Sa(o,r,e,i)}});function wa(e){let t=new Map;for(let n of e.options){let r=n._zod.propValues?.[e.discriminator];if(!r||r.size===0)throw Error(`Invalid discriminated union option at index "${e.options.indexOf(n)}"`);for(let e of r)if(t.has(e)){if(e!==void 0)throw Error(`Duplicate discriminator value "${String(e)}"`);t.set(e,null)}else t.set(e,n)}return t}var Ta=K(`$ZodDiscriminatedUnion`,(e,t)=>{t.inclusive=!1,Ca.init(e,t);let n=e._zod.parse;Nn(e,`propValues`,e=>{let t={},n=0;for(let r of e.def.options){let i=r._zod.propValues;if(!i||Object.keys(i).length===0)throw Error(`Invalid discriminated union option at index "${e.def.options.indexOf(r)}"`);i[e.def.discriminator]?.has(void 0)&&n++;for(let[e,n]of Object.entries(i)){Object.prototype.hasOwnProperty.call(t,e)||Ft(t,e,new Set);for(let r of n)t[e].add(r)}}return!e.def.unionFallback&&n>1&&t[e.def.discriminator]?.delete(void 0),t}),t.options.forEach((e,n)=>{let r=It(e._zod.def);if(r&&!Object.prototype.hasOwnProperty.call(r,t.discriminator))throw Error(`Invalid discriminated union option at index "${n}"`)});let r=jt(()=>wa(t));e._zod.parse=(i,a)=>{let o=i.value;if(!Kt(o))return i.issues.push({code:`invalid_type`,expected:`object`,input:o,inst:e}),i;let s=o?.[t.discriminator],c=r.value.get(s);return c&&(s!==void 0||a.direction!==`backward`)?c._zod.run(i,a):t.unionFallback||a.direction===`backward`?n(i,a):(i.issues.push({code:`invalid_union`,errors:[],note:`No matching discriminator`,discriminator:t.discriminator,options:Array.from(r.value.keys()).filter(e=>r.value.get(e)!==null),input:o,path:[t.discriminator],inst:e}),i)}}),Ea=K(`$ZodIntersection`,(e,t)=>{yi.init(e,t),e._zod.parse=(e,n)=>{let r=e.value,i=t.left._zod.run({value:r,issues:[]},n),a=t.right._zod.run({value:r,issues:[]},n);return i instanceof Promise||a instanceof Promise?Promise.all([i,a]).then(([t,n])=>Oa(e,t,n)):Oa(e,i,a)}});function Da(e,t){if(e===t||e instanceof Date&&t instanceof Date&&+e==+t)return{valid:!0,data:e};if(Jt(e)&&Jt(t)){let n=Object.keys(t),r=Object.keys(e).filter(e=>n.indexOf(e)!==-1),i={...e,...t};Object.prototype.hasOwnProperty.call(i,`__proto__`)&&delete i.__proto__;for(let n of r){if(n===`__proto__`)continue;let r=Da(e[n],t[n]);if(!r.valid)return{valid:!1,mergeErrorPath:[n,...r.mergeErrorPath]};i[n]=r.data}return{valid:!0,data:i}}if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return{valid:!1,mergeErrorPath:[]};let n=[];for(let r=0;r<e.length;r++){let i=e[r],a=t[r],o=Da(i,a);if(!o.valid)return{valid:!1,mergeErrorPath:[r,...o.mergeErrorPath]};n.push(o.data)}return{valid:!0,data:n}}return{valid:!1,mergeErrorPath:[]}}function Oa(e,t,n){let r=new Map,i,a=new Map,o=(e,t)=>{let n;if(e.code===`unrecognized_keys`&&!e.path?.length)i??=e,n=e.keys;else if(e.code===`invalid_key`&&e.origin===`record`&&e.path?.length===1){let t=String(e.path[0]);a.has(t)||a.set(t,e),n=[t]}else return!1;for(let e of n)r.has(e)||r.set(e,{}),r.get(e)[t]=!0;return!0};for(let n of t.issues)o(n,`l`)||e.issues.push(n);for(let t of n.issues)o(t,`r`)||e.issues.push(t);let s=[...r].filter(([,e])=>e.l&&e.r).map(([e])=>e);if(s.length){let t=i?s.filter(e=>i.keys.includes(e)):[];t.length&&e.issues.push({...i,keys:t});for(let n of s)!t.includes(n)&&a.has(n)&&e.issues.push(a.get(n))}let c=Da(t.value,n.value);if(!c.valid){if(pn(e))return e;throw Error(`Unmergable intersection. Error path: ${JSON.stringify(c.mergeErrorPath)}`)}return e.value=c.data,e}var ka=K(`$ZodRecord`,(e,t)=>{yi.init(e,t);let n=Un.memoizer;n?.attach(e),e._zod.parse=(r,i)=>{let a=r.value;if(!Jt(a))return r.issues.push({expected:`record`,code:`invalid_type`,input:a,inst:e}),r;let o=[],s=t.keyType._zod.values;if(s&&!t.partial){r.value=n?n.alloc(e,r,{},i):{};let c=new Set;for(let n of s)if(typeof n==`string`||typeof n==`number`||typeof n==`symbol`){if(c.add(typeof n==`number`?n.toString():n),n===`__proto__`)continue;let s=t.keyType._zod.run({value:n,issues:[]},i);if(s instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);if(s.issues.length){r.issues.push({code:`invalid_key`,origin:`record`,issues:s.issues.map(e=>vn(e,i,Wn())),input:n,path:[n],inst:e});continue}let l=s.value;if(l===`__proto__`)continue;let u=t.valueType._zod.run({value:a[n],issues:[]},i);u instanceof Promise?o.push(u.then(e=>{e.issues.length&&r.issues.push(...hn(n,e.issues)),r.value[l]=e.value})):(u.issues.length&&r.issues.push(...hn(n,u.issues)),r.value[l]=u.value)}let l;for(let e in a)if(!c.has(e)){if(t.mode===`loose`){if(e===`__proto__`)continue;r.value[e]=a[e]}else l??=[],l.push(e)}l&&l.length>0&&r.issues.push({code:`unrecognized_keys`,input:a,inst:e,keys:l,continue:!0})}else{r.value=n?n.alloc(e,r,{},i):{};let c;for(let n of Reflect.ownKeys(a)){if(n===`__proto__`||!Object.prototype.propertyIsEnumerable.call(a,n))continue;let l=t.keyType._zod.run({value:n,issues:[]},i);if(l instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);if(typeof n==`string`&&Yr.test(n)&&l.issues.length){let e=t.keyType._zod.run({value:Number(n),issues:[]},i);if(e instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);e.issues.length===0&&(l=e)}if(l.issues.length){t.mode===`loose`?r.value[n]=a[n]:s?(c??=[],c.push(n)):r.issues.push({code:`invalid_key`,origin:`record`,issues:l.issues.map(e=>vn(e,i,Wn())),input:n,path:[n],inst:e});continue}let u=l.value;if(u===`__proto__`)continue;let d=t.valueType._zod.run({value:a[n],issues:[]},i);d instanceof Promise?o.push(d.then(e=>{e.issues.length&&r.issues.push(...hn(n,e.issues)),r.value[u]=e.value})):(d.issues.length&&r.issues.push(...hn(n,d.issues)),r.value[u]=d.value)}c&&c.length>0&&r.issues.push({code:`unrecognized_keys`,input:a,inst:e,keys:c,continue:!0})}return o.length?Promise.all(o).then(()=>r):r}}),Aa=K(`$ZodEnum`,(e,t)=>{yi.init(e,t);let n=Dt(t.entries),r=new Set(n);e._zod.values=r,Nn(e,`pattern`,e=>{let t=Dt(e.def.entries).filter(e=>Xt.has(typeof e));return RegExp(t.length?`^(${t.map(e=>Zt(e.toString())).join(`|`)})$`:`^[^\\s\\S]$`)}),e._zod.parse=(t,i)=>{let a=t.value;return r.has(a)||t.issues.push({code:`invalid_value`,values:n,input:a,inst:e}),t}}),ja=K(`$ZodLiteral`,(e,t)=>{yi.init(e,t);let n=new Set(t.values);e._zod.values=n,Nn(e,`pattern`,e=>{let t=e.def.values;return RegExp(t.length?`^(${t.map(e=>typeof e==`string`?Zt(e):e?Zt(e.toString()):String(e)).join(`|`)})$`:`^[^\\s\\S]$`)}),e._zod.parse=(r,i)=>{let a=r.value;return n.has(a)||r.issues.push({code:`invalid_value`,values:t.values,input:a,inst:e}),r}}),Ma=K(`$ZodTransform`,(e,t)=>{yi.init(e,t),e._zod.optin=`optional`,Un.memoizer?.guard(e),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new Hn(e.constructor.name);let i=t.transform(n.value,n);if(r.async)return(i instanceof Promise?i:Promise.resolve(i)).then(e=>(n.value=e,n));if(i instanceof Promise)throw new Vn;return n.value=i,n}});function Na(e,t){return e.value=t.issues.length?void 0:t.value,e}var Pa=K(`$ZodOptional`,(e,t)=>{yi.init(e,t),Nn(e,`optin`,e=>e.def.innerType._zod.optin===`defaulted`?`defaulted`:`optional`),e._zod.optout=`optional`,Nn(e,`values`,e=>{let t=e.def.innerType._zod.values;return t?new Set([...t,void 0]):void 0}),Nn(e,`pattern`,e=>{let t=e.def.innerType._zod.pattern;return t?RegExp(`^(${Nt(t.source)})?$`):void 0}),e._zod.parse=(e,n)=>{if(e.value===void 0){if(t.innerType._zod.optin!==`defaulted`)return e;let r=t.innerType._zod.run({value:e.value,issues:[]},n);return r instanceof Promise?r.then(t=>Na(e,t)):Na(e,r)}return t.innerType._zod.run(e,n)}}),Fa=K(`$ZodExactOptional`,(e,t)=>{Pa.init(e,t),Nn(e,`values`,e=>e.def.innerType._zod.values),Nn(e,`pattern`,e=>e.def.innerType._zod.pattern),e._zod.parse=(e,n)=>t.innerType._zod.run(e,n)}),Ia=K(`$ZodNullable`,(e,t)=>{yi.init(e,t),Nn(e,`optin`,e=>e.def.innerType._zod.optin),Nn(e,`optout`,e=>e.def.innerType._zod.optout),Nn(e,`pattern`,e=>{let t=e.def.innerType._zod.pattern;return t?RegExp(`^(${Nt(t.source)}|null)$`):void 0}),Nn(e,`values`,e=>e.def.innerType._zod.values?new Set([...e.def.innerType._zod.values,null]):void 0),e._zod.parse=(e,n)=>e.value===null?e:t.innerType._zod.run(e,n)}),La=K(`$ZodDefault`,(e,t)=>{yi.init(e,t),e._zod.optin=`defaulted`,Nn(e,`values`,e=>e.def.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);if(e.value===void 0)return e.value=t.defaultValue,e;let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(e=>Ra(e,t)):Ra(r,t)}});function Ra(e,t){return e.value===void 0&&(e.value=t.defaultValue),e}var za=K(`$ZodPrefault`,(e,t)=>{yi.init(e,t),e._zod.optin=`defaulted`,Nn(e,`values`,e=>e.def.innerType._zod.values),e._zod.parse=(e,n)=>(n.direction===`backward`||e.value===void 0&&(e.value=t.defaultValue),t.innerType._zod.run(e,n))}),Ba=K(`$ZodNonOptional`,(e,t)=>{yi.init(e,t),Nn(e,`values`,e=>{let t=e.def.innerType._zod.values;return t?new Set([...t].filter(e=>e!==void 0)):void 0}),e._zod.parse=(n,r)=>{let i=t.innerType._zod.run(n,r);return i instanceof Promise?i.then(t=>Va(t,e)):Va(i,e)}});function Va(e,t){return!e.issues.length&&e.value===void 0&&e.issues.push({code:`invalid_type`,expected:`nonoptional`,input:e.value,inst:t}),e}function Ha(e,t,n,r){return t.issues.length?(e.value=n.catchValue({...t,value:e.value,error:{issues:t.issues.map(e=>vn(e,r,Wn()))},input:e.value}),e):(e.value=t.value,t.memo&&(e.memo=!0),e)}var Ua=K(`$ZodCatch`,(e,t)=>{yi.init(e,t),Nn(e,`optin`,e=>e.def.innerType._zod.optin===`defaulted`?`defaulted`:`optional`),Nn(e,`optout`,e=>e.def.innerType._zod.optout),Nn(e,`values`,e=>e.def.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run({value:e.value,issues:[]},n);return r instanceof Promise?r.then(r=>Ha(e,r,t,n)):Ha(e,r,t,n)}}),Wa=K(`$ZodPipe`,(e,t)=>{yi.init(e,t),Nn(e,`values`,e=>e.def.in._zod.values),Nn(e,`optin`,e=>e.def.in._zod.optin),Nn(e,`optout`,e=>e.def.out._zod.optout),Nn(e,`propValues`,e=>e.def.in._zod.propValues),e._zod.parse=(e,n)=>{if(n.direction===`backward`){let r=t.out._zod.run(e,n);return r instanceof Promise?r.then(e=>Ga(e,t.in,n)):Ga(r,t.in,n)}let r=t.in._zod.run(e,n);return r instanceof Promise?r.then(e=>Ga(e,t.out,n)):Ga(r,t.out,n)}});function Ga(e,t,n){return e.issues.some(e=>e.code!==`unrecognized_keys`)?(e.aborted=!0,e):t._zod.run({value:e.value,issues:e.issues},n)}var Ka=K(`$ZodReadonly`,(e,t)=>{yi.init(e,t),Nn(e,`propValues`,e=>e.def.innerType._zod.propValues),Nn(e,`values`,e=>e.def.innerType._zod.values),Nn(e,`optin`,e=>e.def.innerType?._zod?.optin),Nn(e,`optout`,e=>e.def.innerType?._zod?.optout),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(qa):qa(r)}});function qa(e){return e.memo||(e.value=Object.freeze(e.value)),e}var Ja=K(`$ZodCustom`,(e,t)=>{$r.init(e,t),yi.init(e,t),e._zod.parse=(e,t)=>e,e._zod.check=n=>{let r=n.value,i=t.fn(r);if(i instanceof Promise)return i.then(t=>Ya(t,n,r,e));Ya(i,n,r,e)}});function Ya(e,t,n,r){if(!e){let e={code:`custom`,input:n,inst:r,path:[...r._zod.def.path??[]],continue:!r._zod.def.abort};r._zod.def.params&&(e.params=r._zod.def.params),t.issues.push(Cn(e))}}var Xa=class extends Error{constructor(){super(`Cannot parse a reference cycle that closes through a transform`),this.name=`ZodCyclicError`}},Za=`~memo`,Qa=[];function $a(e){return typeof e==`object`&&!!e}function eo(e){return e.map(e=>e.path?{...e,path:e.path.slice()}:{...e})}var to=new WeakMap,no=0,ro=1,io=2;function ao(e,t,n){let r=to.get(e);if(r!==void 0)return r?io:no;if(t.has(e))return io;t.add(e);let i=no,a=e=>{if(i!==io&&e?._zod){let r=ao(e,t,n);r>i&&(i=r)}},o=(e,r)=>{let i=no;for(let a of Reflect.ownKeys(e)){let o=Object.getOwnPropertyDescriptor(e,a);if(r&&!o.enumerable)continue;let s=o.get?ro:o.value?._zod?ao(o.value,t,n):no;s>i&&(i=s)}return i},s=e=>{e>i&&(i=e)},c=e._zod.def;switch(c.type){case`object`:{let e=It(c);s(e?o(e,!0):ro),a(c.catchall);break}case`array`:a(c.element);break;case`tuple`:for(let e of c.items)a(e);a(c.rest);break;case`record`:case`map`:a(c.keyType),a(c.valueType);break;case`set`:a(c.valueType);break;case`union`:for(let e of c.options)a(e);break;case`intersection`:a(c.left),a(c.right);break;case`optional`:case`nullable`:case`default`:case`prefault`:case`catch`:case`readonly`:case`nonoptional`:case`promise`:case`success`:a(c.innerType);break;case`pipe`:a(c.in),a(c.out);break;case`function`:a(c.input),a(c.output);break;case`lazy`:{let r=c._cachedInner??(n?e._zod.innerType:void 0);s(r?ao(r,t,!1):ro);break}case`template_literal`:case`string`:case`number`:case`int`:case`boolean`:case`bigint`:case`symbol`:case`undefined`:case`null`:case`void`:case`never`:case`any`:case`unknown`:case`date`:case`nan`:case`enum`:case`literal`:case`file`:case`transform`:case`custom`:break;default:for(let e in c){let t=Object.getOwnPropertyDescriptor(c,e);if(!t||t.get)continue;let n=t.value;if(n&&typeof n==`object`){if(n._zod)a(n);else if(Array.isArray(n))for(let e of n)a(e)}}}return t.delete(e),oo(e,i)}function oo(e,t){return t!==ro&&to.set(e,t===io),t}function so(e,t){let n=e.buckets.get(t);return n||(n=new WeakMap,e.buckets.set(t,n)),n}var co,lo=[],uo={alloc(e,t,n){let r=co;if(!r)return n;co=void 0;let i={value:n,issues:null};return r.set(t.value,i),lo.push(i),n},guard(e){var t;(t=e._zod).deferred??(t.deferred=[]),e._zod.deferred.push(()=>{let t=e._zod.parse,n=(e,n)=>{if(n.direction!==`backward`&&po(n,e.value))throw new Xa;return t(e,n)};e._zod.parse=n,e._zod.run===t&&(e._zod.run=n)})},attach(e){var t;let n,r=!1,i,a;(t=e._zod).deferred??(t.deferred=[]),e._zod.deferred.push(()=>{let t=e._zod.parse,o=(s,c)=>{if(n===void 0){let i=ao(e,new Set,!1);if(i===no)return e._zod.parse=t,e._zod.run===o&&(e._zod.run=t),t(s,c);i===io||r?n=!0:r=!0}let l=s.value;if(!$a(l))return t(s,c);let u=c[Za];u||(u={buckets:new WeakMap,backEdges:void 0},c[Za]=u);let d;i===c?d=a:(d=so(u,e),i=c,a=d);let f=d.get(l);if(f)return s.value=f.value,f.issues?f.issues.length&&s.issues.push(...eo(f.issues)):(s.memo=!0,u.backEdges??(u.backEdges=new WeakSet),u.backEdges.add(f.value)),s;co=d;let p=lo.length,m=t(s,c);co=void 0;let h=lo.length>p?lo.pop():void 0;return m instanceof Promise?m.then(e=>(h&&(h.issues=e.issues.length?eo(e.issues):Qa),e)):(h&&(h.issues=m.issues.length?eo(m.issues):Qa),m)};e._zod.parse=o,e._zod.run===t&&(e._zod.run=o)})}};function fo(){return uo}function po(e,t){let n=e[Za]?.backEdges;return n!==void 0&&$a(t)&&n.has(t)}var mo=()=>{let e={string:{unit:`characters`,verb:`to have`},file:{unit:`bytes`,verb:`to have`},array:{unit:`items`,verb:`to have`},set:{unit:`items`,verb:`to have`},map:{unit:`entries`,verb:`to have`}};function t(t){return e[t]??null}let n={regex:`input`,email:`email address`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO datetime`,date:`ISO date`,time:`ISO time`,duration:`ISO duration`,ipv4:`IPv4 address`,ipv6:`IPv6 address`,mac:`MAC address`,cidrv4:`IPv4 range`,cidrv6:`IPv6 range`,base64:`base64-encoded string`,base64url:`base64url-encoded string`,json_string:`JSON string`,e164:`E.164 number`,currency_code:`currency code`,credit_card:`credit card number`,iban:`IBAN`,jwt:`JWT`,template_literal:`input`},r={nan:`NaN`};function i(e,t){return e===`number`&&typeof t==`number`&&!Number.isFinite(t)?String(t):r[e]??e}return e=>{switch(e.code){case`invalid_type`:return`Invalid input: expected ${i(e.expected)}, received ${i(Sn(e.input),e.input)}`;case`invalid_value`:return e.values.length===1?`Invalid input: expected ${$t(e.values[0])}`:`Invalid option: expected one of ${Ot(e.values,`|`)}`;case`too_big`:{let n=e.exact?`exactly `:e.inclusive?`<=`:`<`,r=t(e.origin);return r?`Too big: expected ${e.origin??`value`} to have ${n}${e.maximum.toString()} ${r.unit??`elements`}`:`Too big: expected ${e.origin??`value`} to be ${n}${e.maximum.toString()}`}case`too_small`:{let n=e.exact?`exactly `:e.inclusive?`>=`:`>`,r=t(e.origin);return r?`Too small: expected ${e.origin} to have ${n}${e.minimum.toString()} ${r.unit}`:`Too small: expected ${e.origin} to be ${n}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Invalid string: must start with "${t.prefix}"`:t.format===`ends_with`?`Invalid string: must end with "${t.suffix}"`:t.format===`includes`?`Invalid string: must include "${t.includes}"`:t.format===`regex`?`Invalid string: must match pattern ${t.pattern}`:`Invalid ${n[t.format]??e.format}`}case`not_multiple_of`:return`Invalid number: must be a multiple of ${e.divisor}`;case`unrecognized_keys`:return`Unrecognized key${e.keys.length>1?`s`:``}: ${Ot(e.keys,`, `)}`;case`invalid_key`:return`Invalid key in ${e.origin}`;case`invalid_union`:return e.options&&Array.isArray(e.options)&&e.options.length>0?`Invalid discriminator value. Expected ${e.options.map(e=>`'${e}'`).join(` | `)}`:e.inclusive===!1?`Invalid input: more than one option matched`:`Invalid input`;case`invalid_element`:return`Invalid value in ${e.origin}`;default:return`Invalid input`}}};function ho(){return{localeError:mo()}}var go,_o=class{constructor(){this._map=new WeakMap,this._idmap=new Map}add(e,...t){let n=t[0];return this._map.set(e,n),n&&typeof n==`object`&&`id`in n&&this._idmap.set(n.id,e),this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(e){let t=this._map.get(e);return t&&typeof t==`object`&&`id`in t&&this._idmap.delete(t.id),this._map.delete(e),this}get(e){let t=e._zod.parent;if(t){let n={...this.get(t)??{}};delete n.id;let r={...n,...this._map.get(e)};return Object.keys(r).length?r:void 0}return this._map.get(e)}has(e){return this._map.has(e)}};function vo(){return new _o}(go=globalThis).__zod_globalRegistry??(go.__zod_globalRegistry=vo());var yo=globalThis.__zod_globalRegistry;function bo(e){return e.checks&&=[...e.checks],e}function xo(e,t){return new e(bo({type:`string`,...G(t)}))}function So(e,t){return new e({type:`string`,format:`email`,check:`string_format`,abort:!1,...G(t)})}function Co(e,t){return new e({type:`string`,format:`guid`,check:`string_format`,abort:!1,...G(t)})}function wo(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,...G(t)})}function To(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v4`,...G(t)})}function Eo(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v6`,...G(t)})}function Do(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v7`,...G(t)})}function Oo(e,t){return new e({type:`string`,format:`url`,check:`string_format`,abort:!1,...G(t)})}function ko(e,t){return new e({type:`string`,format:`emoji`,check:`string_format`,abort:!1,...G(t)})}function Ao(e,t){return new e({type:`string`,format:`nanoid`,check:`string_format`,abort:!1,...G(t)})}function jo(e,t){return new e({type:`string`,format:`cuid`,check:`string_format`,abort:!1,...G(t)})}function Mo(e,t){return new e({type:`string`,format:`cuid2`,check:`string_format`,abort:!1,...G(t)})}function No(e,t){return new e({type:`string`,format:`ulid`,check:`string_format`,abort:!1,...G(t)})}function Po(e,t){return new e({type:`string`,format:`xid`,check:`string_format`,abort:!1,...G(t)})}function Fo(e,t){return new e({type:`string`,format:`ksuid`,check:`string_format`,abort:!1,...G(t)})}function Io(e,t){return new e({type:`string`,format:`ipv4`,check:`string_format`,abort:!1,...G(t)})}function Lo(e,t){return new e({type:`string`,format:`ipv6`,check:`string_format`,abort:!1,...G(t)})}function Ro(e,t){return new e({type:`string`,format:`cidrv4`,check:`string_format`,abort:!1,...G(t)})}function zo(e,t){return new e({type:`string`,format:`cidrv6`,check:`string_format`,abort:!1,...G(t)})}function Bo(e,t){return new e({type:`string`,format:`base64`,check:`string_format`,abort:!1,...G(t)})}function Vo(e,t){return new e({type:`string`,format:`base64url`,check:`string_format`,abort:!1,...G(t)})}function Ho(e,t){return new e({type:`string`,format:`e164`,check:`string_format`,abort:!1,...G(t)})}function Uo(e,t){return new e({type:`string`,format:`jwt`,check:`string_format`,abort:!1,...G(t)})}function Wo(e,t){return new e({type:`string`,format:`datetime`,check:`string_format`,offset:!1,local:!1,precision:null,...G(t)})}function Go(e,t){return new e({type:`string`,format:`date`,check:`string_format`,...G(t)})}function Ko(e,t){return new e({type:`string`,format:`time`,check:`string_format`,precision:null,...G(t)})}function qo(e,t){return new e({type:`string`,format:`duration`,check:`string_format`,...G(t)})}function Jo(e,t){return new e(bo({type:`number`,checks:[],...G(t)}))}function Yo(e,t){return new e({type:`number`,check:`number_format`,abort:!1,format:`safeint`,...G(t)})}function Xo(e,t){return new e({type:`boolean`,...G(t)})}function Zo(e){return new e({type:`unknown`})}function Qo(e,t){return new e({type:`never`,...G(t)})}function $o(e,t){return new ni({check:`less_than`,...G(t),value:e,inclusive:!1})}function es(e,t){return new ni({check:`less_than`,...G(t),value:e,inclusive:!0})}function ts(e,t){return new ri({check:`greater_than`,...G(t),value:e,inclusive:!1})}function ns(e,t){return new ri({check:`greater_than`,...G(t),value:e,inclusive:!0})}function rs(e,t){return new ii({check:`multiple_of`,...G(t),value:e})}function is(e,t){return new oi({check:`max_length`,...G(t),maximum:e})}function as(e,t){return new si({check:`min_length`,...G(t),minimum:e})}function os(e,t){return new ci({check:`length_equals`,...G(t),length:e})}function ss(e,t){return new ui({check:`string_format`,format:`regex`,...G(t),pattern:e})}function cs(e){return new di({check:`string_format`,format:`lowercase`,...G(e)})}function ls(e){return new fi({check:`string_format`,format:`uppercase`,...G(e)})}function us(e,t){return new pi({check:`string_format`,format:`includes`,...G(t),includes:e})}function ds(e,t){return new mi({check:`string_format`,format:`starts_with`,...G(t),prefix:e})}function fs(e,t){return new hi({check:`string_format`,format:`ends_with`,...G(t),suffix:e})}function ps(e){return new gi({check:`overwrite`,tx:e})}function ms(e){return ps(t=>t.normalize(e))}function hs(){return ps(e=>e.trim())}function gs(){return ps(e=>e.toLowerCase())}function _s(){return ps(e=>e.toUpperCase())}function vs(){return ps(e=>Wt(e))}function ys(e,t,n){return new e({type:`array`,element:t,...G(n)})}function bs(e,t,n){return new e({type:`custom`,check:`custom`,fn:t,...G(n)})}function xs(e,t){let n=Ss(t=>(t.addIssue=e=>{if(typeof e==`string`)t.issues.push(Cn(e,t.value,n._zod.def));else{let r=e;r.fatal&&(r.continue=!1),r.code??=`custom`,`input`in r||(r.input=t.value),r.inst??=n,r.continue??=!n._zod.def.abort,t.issues.push(Cn(r))}},e(t.value,t)),t);return n}function Ss(e,t){let n=new $r({check:`custom`,...G(t)});return n._zod.check=e,n}function Cs(e,...t){for(let n of t)for(let t of Reflect.ownKeys(n))Object.prototype.propertyIsEnumerable.call(n,t)&&Ft(e,t,n[t]);return e}function ws(e){let t=e?.target??`draft-2020-12`;return t===`draft-4`&&(t=`draft-04`),t===`draft-7`&&(t=`draft-07`),{processors:e.processors??{},metadataRegistry:e?.metadata??yo,target:t,unrepresentable:e?.unrepresentable??`throw`,override:e?.override??(()=>{}),io:e?.io??`output`,counter:0,seen:new Map,sharedDefsExtractedFor:void 0,sharedEmitDoneFor:void 0,cycles:e?.cycles??`ref`,reused:e?.reused??`inline`,intersections:[],deferred:[],external:e?.external??void 0}}function Ts(e,t,n,r,i){let a=typeof t.unrepresentable==`function`?t.unrepresentable({zodSchema:e,path:r.path,message:i}):t.unrepresentable;if(a===`any`)return!1;if(a===void 0||a===`throw`)throw Error(i);return Object.assign(n,a),!0}function Es(e,t,n={path:[],schemaPath:[]}){var r;let i=e._zod.def,a=t.seen.get(e);if(a)return a.count++,n.schemaPath.includes(e)&&(a.cycle=n.path),a.schema;let o={schema:{},count:1,cycle:void 0,path:n.path};t.seen.set(e,o),t.sharedDefsExtractedFor=void 0,t.sharedEmitDoneFor=void 0;let s=e._zod.toJSONSchema?.();if(s)o.schema=s;else{let r={...n,schemaPath:[...n.schemaPath,e],path:n.path};if(e._zod.processJSONSchema)e._zod.processJSONSchema(t,o.schema,r);else{let n=o.schema,a=t.processors[i.type];if(!a)throw Error(`[toJSONSchema]: Non-representable type encountered: ${i.type}`);a(e,t,n,r)}let a=e._zod.parent;a&&(o.ref||=a,Es(a,t,r),t.seen.get(a).isParent=!0)}let c=t.metadataRegistry.get(e);return c&&Cs(o.schema,c),t.io===`input`&&Is(e)&&(delete o.schema.examples,delete o.schema.default),t.io===`input`&&`_prefault`in o.schema&&((r=o.schema).default??(r.default=o.schema._prefault)),delete o.schema._prefault,t.seen.get(e).schema}function Ds(e){return e.replace(/~/g,`~0`).replace(/\//g,`~1`)}function Os(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);if(e.external&&e.sharedDefsExtractedFor===e.external)return;let r=new Map;for(let t of e.seen.entries()){let n=e.metadataRegistry.get(t[0])?.id;if(n){let e=r.get(n);if(e&&e!==t[0])throw Error(`Duplicate schema id "${n}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);r.set(n,t[0])}}let i=t=>{let r=e.target===`draft-2020-12`?`$defs`:`definitions`;if(e.external){let n=e.external.registry.get(t[0])?.id,i=e.external.uri??(e=>e);if(n)return{ref:i(n)};let a=t[1].defId??t[1].schema.id??`schema${e.counter++}`;return t[1].defId=a,{defId:a,ref:`${i(`__shared`)}#/${r}/${Ds(a)}`}}let i=`#/${r}/`;if(t[1]===n&&!t[1].schema.id)return{ref:`#`};let a=t[1].schema.id??`__schema${e.counter++}`;return{defId:a,ref:i+Ds(a)}},a=e=>{if(e[1].schema.$ref)return;let t=e[1],{ref:n,defId:r}=i(e);t.def={...t.schema},r&&(t.defId=r);let a=t.schema;for(let e in a)delete a[e];a.$ref=n};if(e.cycles===`throw`)for(let t of e.seen.entries()){let e=t[1];if(e.cycle)throw Error(`Cycle detected: #/${e.cycle?.join(`/`)}/<root>
65
65
 
66
- Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let n of e.seen.entries()){let r=n[1];if(t===n[0]){a(n);continue}if(e.external){let r=e.external.registry.get(n[0])?.id;if(t!==n[0]&&r){a(n);continue}}if(e.metadataRegistry.get(n[0])?.id){a(n);continue}if(r.cycle){a(n);continue}r.count>1&&e.reused===`ref`&&a(n)}e.external&&(e.sharedDefsExtractedFor=e.external)}function ks(e){let t=e.anyOf;if(!Array.isArray(t)||t.length===0||e.type!==void 0)return;let n=[];for(let e of t){if(!e||typeof e!=`object`)return;ks(e);let t=Object.keys(e);if(t.length!==1||t[0]!==`type`)return;let r=e.type;for(let e of Array.isArray(r)?r:[r]){if(typeof e!=`string`)return;n.includes(e)||n.push(e)}}delete e.anyOf,e.type=n.length===1?n[0]:n}var As=new Set([`type`,`properties`,`required`,`additionalProperties`]),js=[`oneOf`,`anyOf`];function Ms(e){let t=e.additionalProperties;return t===void 0||t===!1||typeof t!=`object`||!t?null:Object.keys(t).length?t:null}function Ns(e){let t=[];for(let n of e){if(typeof n!=`object`||n.type!==`object`)return null;for(let e in n)if(!As.has(e))return null;t.push(n)}let n={},r=new Set;for(let e of t){for(let r in e.properties){if(Object.prototype.hasOwnProperty.call(n,r))continue;let e=[];for(let n of t){let t=n.properties?.[r]??Ms(n);t!=null&&(e.some(e=>JSON.stringify(e)===JSON.stringify(t))||e.push(t))}Ft(n,r,e.length===1?e[0]:Ns(e)??{allOf:e})}for(let t of e.required??[])r.add(t)}let i={type:`object`,properties:n};if(r.size&&(i.required=[...r]),t.every(e=>e.additionalProperties===!1))i.additionalProperties=!1;else{let e=[];for(let n of t){let t=Ms(n);t&&!e.some(e=>JSON.stringify(e)===JSON.stringify(t))&&e.push(t)}e.length===1?i.additionalProperties=e[0]:e.length>1&&(i.additionalProperties={allOf:e})}return i}function Ps(e){let t=e.allOf;if(!Array.isArray(t)||t.length<2)return;for(let t of As)if(t in e)return;let n=t.filter(e=>js.some(t=>Array.isArray(e[t]))),r=null;if(!n.length)r=Ns(t);else{let e=n[0],i=js.find(t=>Array.isArray(e[t]));if(Object.keys(e).length!==1)return;let a=t.filter(t=>t!==e),o=e[i].map(e=>Ns([...a,e]));if(o.some(e=>!e))return;r={[i]:o}}r&&(delete e.allOf,Cs(e,r))}function Fs(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=t=>{let n=e.seen.get(t);if(n.ref===null)return;let i=n.def??n.schema,a={...i},o=n.ref;if(n.ref=null,o){r(o);let n=e.seen.get(o),s=n.schema;if(s.$ref&&(e.target===`draft-07`||e.target===`draft-04`||e.target===`openapi-3.0`)?(i.allOf=i.allOf??[],i.allOf.push(s)):Cs(i,s),Cs(i,a),t._zod.parent===o)for(let e in i)e!==`$ref`&&e!==`allOf`&&(e in a||delete i[e]);if(s.$ref&&n.def)for(let e in i)e!==`$ref`&&e!==`allOf`&&e in n.def&&JSON.stringify(i[e])===JSON.stringify(n.def[e])&&delete i[e]}let s=t._zod.parent;if(s&&s!==o){r(s);let t=e.seen.get(s);if(t?.schema.$ref&&(i.$ref=t.schema.$ref,t.def))for(let e in i)e!==`$ref`&&e!==`allOf`&&e in t.def&&JSON.stringify(i[e])===JSON.stringify(t.def[e])&&delete i[e]}e.override({zodSchema:t,jsonSchema:i,path:n.path??[]})};if(!e.external||e.sharedEmitDoneFor!==e.external){for(let t of[...e.seen.entries()].reverse())r(t[0]);if(e.target!==`openapi-3.0`)for(let t of e.seen.entries())ks(t[1].def??t[1].schema);for(let t of e.deferred)t();if(e.intersections.length){let t=new Map;for(let n of e.seen.values())for(let e of[n.schema,n.def]){let n=e?.allOf;if(!Array.isArray(n))continue;let r=t.get(n);r?r.push(e):t.set(n,[e])}for(let n of e.intersections)for(let e of t.get(n)??[])Ps(e)}}let i={};if(e.target===`draft-2020-12`?i.$schema=`https://json-schema.org/draft/2020-12/schema`:e.target===`draft-07`?i.$schema=`http://json-schema.org/draft-07/schema#`:e.target===`draft-04`?i.$schema=`http://json-schema.org/draft-04/schema#`:e.target,e.external?.uri){let n=e.external.registry.get(t)?.id;if(!n)throw Error("Schema is missing an `id` property");i.$id=e.external.uri(n)}Cs(i,n.defId?n.schema:n.def??n.schema);let a=e.metadataRegistry.get(t)?.id;a!==void 0&&i.id===a&&delete i.id;let o=e.external?.defs??{};if(!e.external||e.sharedEmitDoneFor!==e.external)for(let t of e.seen.entries()){let e=t[1];e.def&&e.defId&&(e.def.id===e.defId&&delete e.def.id,Ft(o,e.defId,e.def))}e.external&&(e.sharedEmitDoneFor=e.external),e.external||Object.keys(o).length>0&&(e.target===`draft-2020-12`?i.$defs=o:i.definitions=o);try{let n=JSON.parse(JSON.stringify(i));return Object.defineProperty(n,"~standard",{value:{...t[`~standard`],jsonSchema:{input:Rs(t,`input`,e.processors),output:Rs(t,`output`,e.processors)}},enumerable:!1,writable:!1}),n}catch{throw Error(`Error converting schema to JSON.`)}}function Is(e,t){let n=t??{seen:new Set};if(n.seen.has(e))return!1;n.seen.add(e);let r=e._zod.def;if(r.type===`transform`)return!0;if(r.type===`array`)return Is(r.element,n);if(r.type===`set`)return Is(r.valueType,n);if(r.type===`lazy`)return Is(r.getter(),n);if(r.type===`promise`||r.type===`optional`||r.type===`nonoptional`||r.type===`nullable`||r.type===`readonly`||r.type==="default"||r.type===`prefault`||r.type===`catch`)return Is(r.innerType,n);if(r.type===`intersection`)return Is(r.left,n)||Is(r.right,n);if(r.type===`record`||r.type===`map`)return Is(r.keyType,n)||Is(r.valueType,n);if(r.type===`pipe`)return e._zod.traits.has(`$ZodCodec`)?!0:Is(r.in,n)||Is(r.out,n);if(r.type===`object`){for(let e in r.shape)if(Is(r.shape[e],n))return!0;return!1}if(r.type===`union`){for(let e of r.options)if(Is(e,n))return!0;return!1}if(r.type===`tuple`){for(let e of r.items)if(Is(e,n))return!0;return!!(r.rest&&Is(r.rest,n))}return!1}var Ls=(e,t={})=>n=>{let r=ws({...n,processors:t});return Es(e,r),Os(r,e),Fs(r,e)},Rs=(e,t,n={})=>r=>{let{libraryOptions:i,target:a}=r??{},o=ws({...i??{},target:a,io:t,processors:n});return Es(e,o),Os(o,e),Fs(o,e)},zs=(e,t,n)=>{(e[t]===void 0||n>e[t])&&(e[t]=n)},Bs=(e,t,n)=>{(e[t]===void 0||n<e[t])&&(e[t]=n)},Vs=(e,t)=>{zs(e,`minimum`,t),Bs(e,`maximum`,t)},Hs=(e,t)=>{e.multipleOf??=[],e.multipleOf.includes(t)||e.multipleOf.push(t)},Us=(e,t)=>{e.patterns??=new Set,e.patterns.add(t)},Ws=(e,t)=>{e.mime=e.mime?e.mime.filter(e=>t.includes(e)):[...t]},Gs=(e,t)=>{e.format=t,t.includes(`int`)&&(e.isInt=!0)},Ks=(e,t)=>zs(e,`minimum`,t.minimum),qs=(e,t)=>Bs(e,`maximum`,t.maximum),Js=e=>(t,n)=>{Gs(t,n.format);let[r,i]=e[n.format];zs(t,`minimum`,r),Bs(t,`maximum`,i)},Ys={greater_than:(e,t)=>zs(e,t.inclusive?`minimum`:`exclusiveMinimum`,t.value),less_than:(e,t)=>Bs(e,t.inclusive?`maximum`:`exclusiveMaximum`,t.value),multiple_of:(e,t)=>Hs(e,t.value),number_format:Js(tn),bigint_format:Js(nn),min_length:Ks,max_length:qs,length_equals:(e,t)=>Vs(e,t.length),min_size:Ks,max_size:qs,size_equals:(e,t)=>Vs(e,t.size),string_format:(e,t)=>{Gs(e,t.format),t.pattern&&Us(e,t.pattern),(t.format===`base64`||t.format===`base64url`)&&(e.contentEncoding=t.format),(t.local||t.precision===-1)&&(e.laxFormat=!0)},mime_type:(e,t)=>Ws(e,t.mime)};function Xs(e){let t={},n=e._zod.def,r=e._zod.traits.has(`$ZodCheck`)?[e,...n.checks??[]]:n.checks??[];for(let e of r)Ys[e._zod.def.check]?.(t,e._zod.def);let i=e._zod.bag;i.minimum!==void 0&&zs(t,`minimum`,i.minimum),i.exclusiveMinimum!==void 0&&zs(t,`exclusiveMinimum`,i.exclusiveMinimum),i.maximum!==void 0&&Bs(t,`maximum`,i.maximum),i.exclusiveMaximum!==void 0&&Bs(t,`exclusiveMaximum`,i.exclusiveMaximum),i.multipleOf!==void 0&&Hs(t,i.multipleOf),i.format!==void 0&&(t.format??=i.format,i.format.includes(`int`)&&(t.isInt=!0)),i.mime&&Ws(t,i.mime);for(let e of i.patterns??[])Us(t,e);return t}var Zs={guid:`uuid`,url:`uri`,datetime:`date-time`,json_string:`json-string`,regex:``},Qs=new Map([[ta,Lr],[ra,Rr]]),$s=e=>Qs.get(e)??e,ec=(e,t,n,r)=>{let i=n;i.type=`string`;let{minimum:a,maximum:o,format:s,patterns:c,contentEncoding:l,laxFormat:u}=Xs(e);if(typeof a==`number`&&(i.minLength=a),typeof o==`number`&&(i.maxLength=o),s&&(i.format=Zs[s]??s,i.format===``&&delete i.format,(s===`time`||u)&&delete i.format),l&&(i.contentEncoding=l),c&&c.size>0){let e=[...c].map($s);e.length===1?i.pattern=e[0].source:e.length>1&&(i.allOf=[...e.map(e=>({...t.target===`draft-07`||t.target===`draft-04`||t.target===`openapi-3.0`?{type:`string`}:{},pattern:e.source}))])}},tc=(e,t,n,r)=>{let i=n,{minimum:a,maximum:o,multipleOf:s,exclusiveMaximum:c,exclusiveMinimum:l,isInt:u}=Xs(e);i.type=u?`integer`:`number`;let d=typeof l==`number`&&l>=(a??-1/0),f=typeof c==`number`&&c<=(o??1/0),p=t.target===`draft-04`||t.target===`openapi-3.0`;if(d?p?(i.minimum=l,i.exclusiveMinimum=!0):i.exclusiveMinimum=l:typeof a==`number`&&(i.minimum=a),f?p?(i.maximum=c,i.exclusiveMaximum=!0):i.exclusiveMaximum=c:typeof o==`number`&&(i.maximum=o),s){let n=new Set;for(let a of s)Number.isFinite(a)&&a!==0?n.add(Math.abs(a)):Ts(e,t,i,r,`A multipleOf divisor of ${a} cannot be represented in JSON Schema`);let[a,...o]=n;a!==void 0&&(i.multipleOf=a),o.length&&(i.allOf=[...i.allOf??[],...o.map(e=>({multipleOf:e}))])}},nc=(e,t,n,r)=>{n.type=`boolean`},rc=(e,t,n,r)=>{n.not={}},ic=(e,t,n,r)=>{let i=e._zod.def,a=Dt(i.entries);if(a.length===0){n.not={};return}a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),n.enum=a},ac=(e,t,n,r)=>{let i=e._zod.def;if(i.values.length===0){n.not={};return}let a=[];for(let o of i.values)if(o===void 0){if(Ts(e,t,n,r,"Literal `undefined` cannot be represented in JSON Schema"))return}else if(typeof o==`bigint`){if(Ts(e,t,n,r,`BigInt literals cannot be represented in JSON Schema`))return;a.push(Number(o))}else a.push(o);if(a.length!==0){if(a.length===1){let e=a[0];n.type=e===null?`null`:typeof e,t.target===`draft-04`||t.target===`openapi-3.0`?n.enum=[e]:n.const=e}else a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),a.every(e=>typeof e==`boolean`)&&(n.type=`boolean`),a.every(e=>e===null)&&(n.type=`null`),n.enum=a}},oc=(e,t,n,r)=>{Ts(e,t,n,r,`Custom types cannot be represented in JSON Schema`)},sc=(e,t,n,r)=>{Ts(e,t,n,r,`Transforms cannot be represented in JSON Schema`)},cc=(e,t,n,r)=>{let i=n,a=e._zod.def,{minimum:o,maximum:s}=Xs(e);typeof o==`number`&&(i.minItems=o),typeof s==`number`&&(i.maxItems=s),i.type=`array`,i.items=Es(a.element,t,{...r,path:[...r.path,`items`]})};function lc(e){let t=e._zod.def;return t.type===`pipe`&&t.in._zod.traits.has(`$ZodTransform`)?lc(t.out):t.type===`catch`?lc(t.innerType):e._zod.optin}var uc=(e,t,n,r)=>{let i=n,a=e._zod.def,o=a.shape;if(Object.getOwnPropertySymbols(o).length&&Ts(e,t,i,r,`Symbol keys cannot be represented in JSON Schema`))return;i.type=`object`,i.properties={};for(let e in o)Ft(i.properties,e,Es(o[e],t,{...r,path:[...r.path,`properties`,e]}));let s=[];for(let e of Object.keys(o)){let n=a.shape[e];(t.io===`input`?lc(n)===void 0:n._zod.optout===void 0)&&s.push(e)}s.length>0&&(i.required=s),a.catchall?._zod.def.type===`never`?i.additionalProperties=!1:a.catchall?a.catchall&&(i.additionalProperties=Es(a.catchall,t,{...r,path:[...r.path,`additionalProperties`]})):t.io===`output`&&(i.additionalProperties=!1)},dc=(e,t,n,r)=>{let i=e._zod.def,a=i.inclusive===!1,o=i.options.map((e,n)=>Es(e,t,{...r,path:[...r.path,a?`oneOf`:`anyOf`,n]}));a?n.oneOf=o:n.anyOf=o},fc=(e,t,n,r)=>{let i=e._zod.def,a=Es(i.left,t,{...r,path:[...r.path,`allOf`,0]}),o=Es(i.right,t,{...r,path:[...r.path,`allOf`,1]}),s=e=>`allOf`in e&&Object.keys(e).length===1,c=[...s(a)?a.allOf:[a],...s(o)?o.allOf:[o]];n.allOf=c,t.intersections.push(c)};function pc(e,t,n){if(t.$ref){if(n.has(t))return t;n.add(t);let r=e.get(t)?.def;if(!r)return t;let i=pc(e,r,n);return i===r?t:i}for(let r of[`anyOf`,`oneOf`]){let i=t[r];if(!Array.isArray(i))continue;let a=i.map(t=>pc(e,t,n));a.some((e,t)=>e!==i[t])&&(t={...t,[r]:a})}let r=Array.isArray(t.type)?t.type:[t.type],i=!r.includes(`string`)&&r.some(e=>e===`number`||e===`integer`),a=t.enum??(t.const===void 0?void 0:[t.const]);if(!i&&!a?.some(e=>typeof e==`number`))return t;let{minimum:o,maximum:s,exclusiveMinimum:c,exclusiveMaximum:l,multipleOf:u,format:d,id:f,...p}=t;return p.enum?p.enum=p.enum.map(e=>typeof e==`number`?String(e):e):typeof p.const==`number`&&(p.const=String(p.const)),i?(p.type=`string`,a||(p.pattern=(r.includes(`number`)?Yr:Jr).source),p):p}var mc=new WeakMap;function hc(e){let t=new Map;for(let n of e.seen.values())n.def&&!t.has(n.schema)&&t.set(n.schema,n);let n=new Map;for(let r of mc.get(e)??[]){let i=e.seen.get(r),a=(i?.def??i?.schema)?.propertyNames;if(!a||a===!0||n.has(a))continue;let o=pc(t,a,new Set);o!==a&&n.set(a,o)}if(n.size)for(let t of e.seen.values())for(let e of[t.schema,t.def]){let t=e&&n.get(e.propertyNames);t&&(e.propertyNames=t)}}var gc=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`;let o=a.keyType,s=Xs(o).patterns;if(a.mode===`loose`&&s&&s.size>0){let e=Es(a.valueType,t,{...r,path:[...r.path,`patternProperties`,`*`]});i.patternProperties={};for(let t of s)Ft(i.patternProperties,$s(t).source,e)}else{if(t.target===`draft-07`||t.target===`draft-2020-12`){i.propertyNames=Es(a.keyType,t,{...r,path:[...r.path,`propertyNames`]});let n=mc.get(t);n||(n=[],mc.set(t,n),t.deferred.push(()=>hc(t))),n.push(e)}i.additionalProperties=Es(a.valueType,t,{...r,path:[...r.path,`additionalProperties`]})}let c=o._zod.values,l=t.io===`input`&&lc(a.valueType)!==void 0;if(c&&!a.partial&&!l){let e=[...c].filter(e=>typeof e==`string`||typeof e==`number`);e.length>0&&(i.required=e.map(String))}},_c=(e,t,n,r)=>{let i=e._zod.def,a=Es(i.innerType,t,r),o=t.seen.get(e);t.target===`openapi-3.0`?(o.ref=i.innerType,n.nullable=!0):n.anyOf=[a,{type:`null`}]},vc=(e,t,n,r)=>{let i=e._zod.def;Es(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},yc=Symbol();function bc(e,t,n,r,i){let a=!1,o=JSON.stringify(e,(e,t)=>typeof t==`bigint`?(a=!0,null):t);return a?(Ts(t,n,r,i,`BigInt defaults cannot be represented in JSON Schema`),yc):JSON.parse(o)}var xc=(e,t,n,r)=>{let i=e._zod.def;Es(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o=bc(i.defaultValue,e,t,n,r);o!==yc&&(n.default=o)},Sc=(e,t,n,r)=>{let i=e._zod.def;Es(i.innerType,t,r);let a=t.seen.get(e);if(a.ref=i.innerType,t.io!==`input`)return;let o=bc(i.defaultValue,e,t,n,r);o!==yc&&(n._prefault=o)},Cc=(e,t,n,r)=>{let i=e._zod.def;Es(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o;try{o=i.catchValue(void 0)}catch{Ts(e,t,n,r,`Dynamic catch values are not supported in JSON Schema`);return}n.default=o},wc=(e,t,n,r)=>{let i=e._zod.def,a=i.in._zod.traits.has(`$ZodTransform`),o=t.io===`input`?a?i.out:i.in:i.out;Es(o,t,r);let s=t.seen.get(e);s.ref=o},Tc=(e,t,n,r)=>{let i=e._zod.def;Es(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.readOnly=!0},Ec=(e,t,n,r)=>{let i=e._zod.def;Es(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},Dc=new WeakSet([Object.prototype,Error.prototype]);function Oc(e,t,n){Object.defineProperty(e,t,{configurable:!0,enumerable:!1,get(){let e=n(this);return Object.defineProperty(this,t,{value:e,configurable:!0,writable:!0}),e},set(e){Object.defineProperty(this,t,{value:e,configurable:!0,writable:!0})}})}var kc=K(`ZodError`,(e,t)=>{Zn.init(e,t),e.name=`ZodError`;let n=Object.getPrototypeOf(e);Dc.has(n)||(Dc.add(n),Oc(n,`format`,e=>t=>er(e,t)),Oc(n,`flatten`,e=>t=>$n(e,t)),Oc(n,`addIssue`,e=>t=>{e.issues.push(t),e.message=JSON.stringify(e.issues,kt,2)}),Oc(n,`addIssues`,e=>t=>{e.issues.push(...t),e.message=JSON.stringify(e.issues,kt,2)}),Object.defineProperty(n,"isEmpty",{configurable:!0,enumerable:!1,get(){return this.issues.length===0}}))},void 0,{Parent:Error}),Ac=nr(kc),jc=rr(kc),Mc=ir(kc),Nc=or(kc),Pc=fr(kc),Fc=pr(kc),Ic=mr(kc),Lc=hr(kc),Rc=gr(kc),zc=_r(kc),Bc=vr(kc),Vc=yr(kc);function Hc(){Un.localeError||Wn(ho())}function Uc(){Un.memoizer||Wn({memoizer:fo()})}var Wc=K(`ZodType`,(e,t)=>(Hc(),yi.init(e,t),e.def=t,e.type=t.type,e),{check(...e){let t=this.def;return this.clone(Ht(t,{checks:[...t.checks??[],...e.map(e=>typeof e==`function`?{_zod:{check:e,def:{check:`custom`},onattach:[]}}:e)]}),{parent:!0})},with(...e){return this.check(...e)},clone(e,t){return Qt(this,e,t)},brand(){return this},register(e,t){return e.add(this,t),this},refine(e,t){return this.check(ou(e,t))},superRefine(e,t){return this.check(su(e,t))},overwrite(e){return this.check(ps(e))},optional(){return Hl(this)},exactOptional(){return Wl(this)},nullable(){return Kl(this)},nullish(){return Hl(Kl(this))},nonoptional(e){return Ql(this,e)},array(){return Dl(this)},or(e){return Al([this,e])},and(e){return Pl(this,e)},transform(e){return nu(this,Bl(e))},default(e){return Jl(this,e)},prefault(e){return Xl(this,e)},catch(e){return eu(this,e)},pipe(e){return nu(this,e)},readonly(){return iu(this)},describe(e){let t=this.clone();return yo.add(t,{description:e}),t},meta(...e){if(e.length===0)return yo.get(this);let t=this.clone();return yo.add(t,e[0]),t},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(e,...t){return t.length===0?e(this):e(this,...t)},get"~standard"(){return En(this,`~standard`,{...Si(this),jsonSchema:{input:Rs(this,`input`),output:Rs(this,`output`)}})},set"~standard"(e){Tn(this,`~standard`,e)},parse:function e(t,n){return Ac(this,t,n,{callee:e})},parseAsync:async function e(t,n){return await jc(this,t,n,{callee:e})},safeParse(e,t){return Mc(this,e,t)},async safeParseAsync(e,t){return Nc(this,e,t)},get spa(){return this?.safeParseAsync},set spa(e){Tn(this,`spa`,e)},validate(e,t){return lr(this,e,t)},validateAsync(e,t){return dr(this,e,t)},encode:function e(t,n){return Pc(this,t,n,{callee:e})},decode:function e(t,n){return Fc(this,t,n,{callee:e})},encodeAsync:async function e(t,n){return await Ic(this,t,n,{callee:e})},decodeAsync:async function e(t,n){return await Lc(this,t,n,{callee:e})},safeEncode(e,t){return Rc(this,e,t)},safeDecode(e,t){return zc(this,e,t)},async safeEncodeAsync(e,t){return Bc(this,e,t)},async safeDecodeAsync(e,t){return Vc(this,e,t)},toJSONSchema(e){return Ls(this,{})(e)},get description(){return yo.get(this)?.description},get _def(){return this._zod.def}}),Gc=K(`_ZodString`,(e,t)=>{Ci.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ec(e,t,n,r)},Dn({format:e=>Xs(e).format??null,minLength:e=>Xs(e).minimum??null,maxLength:e=>Xs(e).maximum??null},{regex(...e){return this.check(ss(...e))},includes(...e){return this.check(us(...e))},startsWith(...e){return this.check(ds(...e))},endsWith(...e){return this.check(fs(...e))},min(...e){return this.check(as(...e))},max(...e){return this.check(is(...e))},length(...e){return this.check(os(...e))},nonempty(...e){return this.check(as(1,...e))},lowercase(e){return this.check(cs(e))},uppercase(e){return this.check(ls(e))},trim(){return this.check(hs())},normalize(...e){return this.check(ms(...e))},toLowerCase(){return this.check(gs())},toUpperCase(){return this.check(_s())},slugify(){return this.check(vs())}})),Kc=K(`ZodString`,(e,t)=>{Ci.init(e,t),Gc.init(e,t)},{email(e){return this.check(So(Qc,e))},url(e){return this.check(Oo(tl,e))},jwt(e){return this.check(Uo(gl,e))},emoji(e){return this.check(ko(nl,e))},guid(e){return this.check(Co($c,e))},uuid(e){return this.check(wo(el,e))},uuidv4(e){return this.check(To(el,e))},uuidv6(e){return this.check(Eo(el,e))},uuidv7(e){return this.check(Do(el,e))},nanoid(e){return this.check(Ao(rl,e))},cuid(e){return this.check(jo(il,e))},cuid2(e){return this.check(Mo(al,e))},ulid(e){return this.check(No(ol,e))},base64(e){return this.check(Bo(pl,e))},base64url(e){return this.check(Vo(ml,e))},xid(e){return this.check(Po(sl,e))},ksuid(e){return this.check(Fo(cl,e))},ipv4(e){return this.check(Io(ll,e))},ipv6(e){return this.check(Lo(ul,e))},cidrv4(e){return this.check(Ro(dl,e))},cidrv6(e){return this.check(zo(fl,e))},e164(e){return this.check(Ho(hl,e))},datetime(e){return this.check(Wo(Jc,e))},date(e){return this.check(Go(Yc,e))},time(e){return this.check(Ko(Xc,e))},duration(e){return this.check(qo(Zc,e))}});function q(e){return xo(Kc,e)}var qc=K(`ZodStringFormat`,(e,t)=>{wi.init(e,t),Gc.init(e,t)}),Jc=K(`ZodISODateTime`,(e,t)=>{Ui.init(e,t),qc.init(e,t)}),Yc=K(`ZodISODate`,(e,t)=>{Wi.init(e,t),qc.init(e,t)}),Xc=K(`ZodISOTime`,(e,t)=>{Gi.init(e,t),qc.init(e,t)}),Zc=K(`ZodISODuration`,(e,t)=>{Ki.init(e,t),qc.init(e,t)}),Qc=K(`ZodEmail`,(e,t)=>{Di.init(e,t),qc.init(e,t)}),$c=K(`ZodGUID`,(e,t)=>{Ti.init(e,t),qc.init(e,t)}),el=K(`ZodUUID`,(e,t)=>{Ei.init(e,t),qc.init(e,t)}),tl=K(`ZodURL`,(e,t)=>{Fi.init(e,t),qc.init(e,t)}),nl=K(`ZodEmoji`,(e,t)=>{Ii.init(e,t),qc.init(e,t)}),rl=K(`ZodNanoID`,(e,t)=>{Li.init(e,t),qc.init(e,t)}),il=K(`ZodCUID`,(e,t)=>{Ri.init(e,t),qc.init(e,t)}),al=K(`ZodCUID2`,(e,t)=>{zi.init(e,t),qc.init(e,t)}),ol=K(`ZodULID`,(e,t)=>{Bi.init(e,t),qc.init(e,t)}),sl=K(`ZodXID`,(e,t)=>{Vi.init(e,t),qc.init(e,t)}),cl=K(`ZodKSUID`,(e,t)=>{Hi.init(e,t),qc.init(e,t)}),ll=K(`ZodIPv4`,(e,t)=>{qi.init(e,t),qc.init(e,t)}),ul=K(`ZodIPv6`,(e,t)=>{Xi.init(e,t),qc.init(e,t)}),dl=K(`ZodCIDRv4`,(e,t)=>{Zi.init(e,t),qc.init(e,t)}),fl=K(`ZodCIDRv6`,(e,t)=>{$i.init(e,t),qc.init(e,t)}),pl=K(`ZodBase64`,(e,t)=>{na.init(e,t),qc.init(e,t)}),ml=K(`ZodBase64URL`,(e,t)=>{aa.init(e,t),qc.init(e,t)}),hl=K(`ZodE164`,(e,t)=>{oa.init(e,t),qc.init(e,t)}),gl=K(`ZodJWT`,(e,t)=>{ca.init(e,t),qc.init(e,t)}),_l=K(`ZodNumber`,(e,t)=>{la.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>tc(e,t,n,r),e.isFinite=!0},Dn({minValue:e=>{let{minimum:t,exclusiveMinimum:n}=Xs(e);return Math.max(t??-1/0,n??-1/0)},maxValue:e=>{let{maximum:t,exclusiveMaximum:n}=Xs(e);return Math.min(t??1/0,n??1/0)},isInt:e=>{let{isInt:t,multipleOf:n}=Xs(e);return!!t||!!n?.some(Number.isSafeInteger)},format:e=>Xs(e).format??null},{gt(e,t){return this.check(ts(e,t))},gte(e,t){return this.check(ns(e,t))},min(e,t){return this.check(ns(e,t))},lt(e,t){return this.check($o(e,t))},lte(e,t){return this.check(es(e,t))},max(e,t){return this.check(es(e,t))},int(e){return this.check(yl(e))},safe(e){return this.check(yl(e))},positive(e){return this.check(ts(0,e))},nonnegative(e){return this.check(ns(0,e))},negative(e){return this.check($o(0,e))},nonpositive(e){return this.check(es(0,e))},multipleOf(e,t){return this.check(rs(e,t))},step(e,t){return this.check(rs(e,t))},finite(){return this}}));function J(e){return Jo(_l,e)}var vl=K(`ZodNumberFormat`,(e,t)=>{ua.init(e,t),_l.init(e,t)});function yl(e){return Yo(vl,e)}var bl=K(`ZodBoolean`,(e,t)=>{da.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>nc(e,t,n,r)});function xl(e){return Xo(bl,e)}var Sl=K(`ZodUnknown`,(e,t)=>{fa.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(e,t,n)=>void 0});function Cl(){return Zo(Sl)}var wl=K(`ZodNever`,(e,t)=>{pa.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>rc(e,t,n,r)});function Tl(e){return Qo(wl,e)}var El=K(`ZodArray`,(e,t)=>{Uc(),ha.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>cc(e,t,n,r),e.element=t.element},{min(e,t){return this.check(as(e,t))},nonempty(e){return this.check(as(1,e))},max(e,t){return this.check(is(e,t))},length(e,t){return this.check(os(e,t))},unwrap(){return this.element}});function Dl(e,t){return ys(El,e,t)}var Ol=K(`ZodObject`,(e,t)=>{Uc(),xa.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>uc(e,t,n,r),Pn(e,`shape`,e=>e._zod.def.shape,!1)},{keyof(){return X(Object.keys(this._zod.def.shape))},catchall(e){return this.clone(Ht(this._zod.def,{catchall:e}))},passthrough(){return this.clone(Ht(this._zod.def,{catchall:Cl()}))},loose(){return this.clone(Ht(this._zod.def,{catchall:Cl()}))},strict(){return this.clone(Ht(this._zod.def,{catchall:Tl()}))},strip(){return this.clone(Ht(this._zod.def,{catchall:void 0}))},extend(e){return sn(this,e)},safeExtend(e){return ln(this,e)},merge(e){return un(this,e)},pick(e){return rn(this,e)},omit(e){return on(this,e)},partial(...e){return dn(Vl,this,e[0])},exactPartial(...e){return dn(Ul,this,e[0],`exactPartial`)},required(...e){return fn(Zl,this,e[0])}});function Y(e,t){return new Ol({type:`object`,shape:e??{},...G(t)})}var kl=K(`ZodUnion`,(e,t)=>{Ca.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>dc(e,t,n,r),e.options=t.options});function Al(e,t){return new kl({type:`union`,options:e,...G(t)})}var jl=K(`ZodDiscriminatedUnion`,(e,t)=>{kl.init(e,t),Ta.init(e,t)});function Ml(e,t,n){return new jl({type:`union`,options:t,discriminator:e,...G(n)})}var Nl=K(`ZodIntersection`,(e,t)=>{Ea.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>fc(e,t,n,r)});function Pl(e,t){return new Nl({type:`intersection`,left:e,right:t})}var Fl=K(`ZodRecord`,(e,t)=>{Uc(),ka.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>gc(e,t,n,r),e.keyType=t.keyType,e.valueType=t.valueType});function Il(e,t,n){return!t||!t._zod?new Fl({type:`record`,keyType:q(),valueType:e,...G(t)}):new Fl({type:`record`,keyType:e,valueType:t,...G(n)})}var Ll=K(`ZodEnum`,(e,t)=>{Aa.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ic(e,t,n,r),e.enum=t.entries,e.options=[...e._zod.values];let n=new Set(Object.keys(t.entries));e.extract=(e,r)=>{let i={};for(let r of e)if(n.has(r))i[r]=t.entries[r];else throw Error(`Key ${r} not found in enum`);return new Ll({...t,checks:[],...G(r),entries:i})},e.exclude=(e,r)=>{let i={...t.entries};for(let t of e)if(n.has(t))delete i[t];else throw Error(`Key ${t} not found in enum`);return new Ll({...t,checks:[],...G(r),entries:i})}});function X(e,t){return new Ll({type:`enum`,entries:Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e,...G(t)})}var Rl=K(`ZodLiteral`,(e,t)=>{ja.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ac(e,t,n,r),e.values=new Set(t.values),Object.defineProperty(e,"value",{get(){if(t.values.length>1)throw Error("This schema contains multiple valid literal values. Use `.values` instead.");return t.values[0]}})});function Z(e,t){return new Rl({type:`literal`,values:Array.isArray(e)?e:[e],...G(t)})}var zl=K(`ZodTransform`,(e,t)=>{Uc(),Ma.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>sc(e,t,n,r),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new Hn(e.constructor.name);n.addIssue=r=>{if(typeof r==`string`)n.issues.push(Cn(r,n.value,t));else{let t=r;t.fatal&&(t.continue=!1),t.code??=`custom`,`input`in t||(t.input=n.value),t.inst??=e,n.issues.push(Cn(t))}};let i=t.transform(n.value,n);return i instanceof Promise?i.then(e=>(n.value=e,n)):(n.value=i,n)}});function Bl(e){return new zl({type:`transform`,transform:e})}var Vl=K(`ZodOptional`,(e,t)=>{Pa.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ec(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Hl(e){return new Vl({type:`optional`,innerType:e})}var Ul=K(`ZodExactOptional`,(e,t)=>{Fa.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ec(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Wl(e){return new Ul({type:`optional`,innerType:e})}var Gl=K(`ZodNullable`,(e,t)=>{Ia.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>_c(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Kl(e){return new Gl({type:`nullable`,innerType:e})}var ql=K(`ZodDefault`,(e,t)=>{La.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>xc(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function Jl(e,t){return new ql({type:`default`,innerType:e,get defaultValue(){return typeof t==`function`?t():Yt(t)}})}var Yl=K(`ZodPrefault`,(e,t)=>{za.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Sc(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Xl(e,t){return new Yl({type:`prefault`,innerType:e,get defaultValue(){return typeof t==`function`?t():Yt(t)}})}var Zl=K(`ZodNonOptional`,(e,t)=>{Ba.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>vc(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Ql(e,t){return new Zl({type:`nonoptional`,innerType:e,...G(t)})}var $l=K(`ZodCatch`,(e,t)=>{Ua.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Cc(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function eu(e,t){return new $l({type:`catch`,innerType:e,catchValue:typeof t==`function`?t:In(t)})}var tu=K(`ZodPipe`,(e,t)=>{Wa.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>wc(e,t,n,r),e.in=t.in,e.out=t.out});function nu(e,t){return new tu({type:`pipe`,in:e,out:t})}var ru=K(`ZodReadonly`,(e,t)=>{Ka.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Tc(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function iu(e){return new ru({type:`readonly`,innerType:e})}var au=K(`ZodCustom`,(e,t)=>{Ja.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>oc(e,t,n,r)});function ou(e,t={}){return bs(au,e,t)}function su(e,t){return xs(e,t)}var cu=X([`T0`,`T1`,`T2`,`T3`]);X([`owner`,`guest`,`member`,`voice-device`]);var lu={depth:6,nodes:120,text:2e3,items:200},uu={Row:{props:[`gap`,`wrap`],kids:!0,note:`puts its parts side by side`},Column:{props:[`gap`],kids:!0,note:`stacks its parts`},Grid:{props:[`columns`,`gap`],kids:!0,note:`a grid with this many columns`},JCard:{props:[`cardStyle`,`color`,`padding`],kids:!0,slots:[`header`,`footer`],note:`a card around its parts; cardStyle CornerBracket|Notched|SideRail|GlowBorder`},JHudFrame:{props:[`color`,`systemLabel`,`showTop`,`showBottom`,`showDots`,`showLive`,`showWaveform`,`showTicks`,`showRec`],kids:!0,slots:[`topContent`,`bottomContent`],note:`a HUD frame with bars around its parts`},JHudFrameCard:{props:[`frameStyle`,`color`,`title`,`showStatusDot`,`width`,`height`],kids:!0,note:`a titled frame card around its parts`},JHudBar:{props:[`position`,`color`,`animSpeed`,`systemLabel`,`showDots`,`showWaveform`,`showTicks`,`showLive`,`showRec`,`tickCount`,`tickActive`],kids:!0,note:`a top or bottom HUD bar`},JTabs:{props:[`color`],kids:!0,note:`tabs; put JTab parts inside it`},JTab:{props:[`tabKey`,`label`,`icon`,`badge`,`disabled`],kids:!0,note:`one tab and its panel (inside JTabs); tabKey is unique in its JTabs`},JAccordion:{props:[`title`,`icon`,`badge`,`defaultOpen`,`state`,`color`],kids:!0,note:`a section that opens and closes`},JFormField:{props:[`label`,`error`,`hint`,`required`],kids:!0,note:`a label, hint and error around a field`},JButton:{props:[`shape`,`color`,`size`,`variant`,`loading`,`disabled`],kids:!0,note:`a button as a picture: it does nothing when pressed`},JInput:{props:[`type`,`defaultValue`,`placeholder`,`disabled`,`readOnly`,`error`,`color`,`size`],note:`a text field as a picture (defaultValue shows text in it)`},JTextArea:{props:[`defaultValue`,`placeholder`,`disabled`,`readOnly`,`error`,`rows`,`color`,`size`],note:`a text area as a picture`},JSelect:{props:[`options`,`defaultValue`,`placeholder`,`disabled`,`color`,`size`],note:`options [{value, label}]`},JToggle:{props:[`defaultChecked`,`label`,`disabled`,`color`],note:`a switch`},JCheckbox:{props:[`defaultChecked`,`label`,`disabled`,`color`],note:`a checkbox`},JSlider:{props:[`defaultValue`,`min`,`max`,`step`,`showValue`,`disabled`,`color`],note:`a slider`},JSpinner:{props:[`size`,`color`,`label`,`showLabel`],note:`a loading arc`},JOrb:{props:[`systemName`,`size`,`color`,`state`,`listening`],note:`a pulsing orb`},JDonutChart:{props:[`data`,`size`,`thickness`,`centerValue`,`centerLabel`,`showLegend`],note:`data [{label, value, color?}]; size like 200px`},JRadarChart:{props:[`axes`,`size`,`rings`,`showLabels`],note:`axes [{label, value}]; size like 240px`},JStatCard:{props:[`title`,`value`,`state`,`sub`,`showStatusDot`,`badge`,`badgeColor`,`barValue`,`dataRows`,`color`],note:`value is a string; dataRows [{label, value}]; barValue 0-100`},JProgress:{props:[`value`,`label`,`state`,`variant`,`indeterminate`,`showPercent`,`total`],note:`value 0-100; variant bar|ticks`},JGaugeChart:{props:[`value`,`min`,`max`,`size`,`thickness`,`label`,`displayValue`,`showNeedle`,`showTicks`,`showMinMax`,`ticks`],note:`a radial gauge; size like 200px`},JBarChart:{props:[`data`,`height`,`orientation`,`showGrid`,`showAxisLabels`,`showValues`],note:`data [{label, value}]; height like 220px`},JLineChart:{props:[`data`,`height`,`showArea`,`showDots`,`showAxisLabels`,`showGrid`,`gridLines`],note:`data [{label, value}]; height like 200px`},JSparkline:{props:[`data`,`showArea`,`showTrend`,`height`,`width`],note:`data is a list of numbers; height and width like 40px`},JTable:{props:[`columns`,`rows`,`stateColumn`,`showFooter`,`footerLabel`],note:`columns [{key, label}]; rows [{key: value}]`},JBadge:{props:[`color`,`size`,`shape`,`blink`,`showDot`],kids:!0,note:`a small label; its text is the kids`},JStatusPill:{props:[`state`,`blink`],kids:!0,note:`a status dot and its text (the kids); state active|warning|error|success`},JAlert:{props:[`state`,`title`,`blink`],kids:!0,note:`a banner; its text is the kids`},JDataRow:{props:[`label`,`value`,`barPercent`,`state`],note:`a key, its value and an optional bar 0-100`},JHudLabel:{props:[`variant`,`text`,`subText`,`value`,`color`,`showDot`,`showLine`],note:`a labelled value; variant chip|arc|metric`},JArcMeter:{props:[`level`,`totalArcs`,`color`,`orientation`,`showLabel`,`label`,`showValue`],note:`a segmented level meter`},JArcReactor:{props:[`level`,`size`,`color`,`label`,`animated`],note:`level 0-100`},JHeatmap:{props:[`data`,`color`,`cellSize`,`gap`,`showValue`,`title`],note:`data is rows of [{value}]`},JActivityFeed:{props:[`items`,`maxRows`,`showTime`,`showSource`],note:`items [{id, time?, level?, message, source?}] oldest first`},JKPITicker:{props:[`items`,`speed`,`color`,`height`],note:`items [{label, value, delta?, trend?}]`},JHudClock:{props:[`analog`,`color`,`size`,`showDate`],note:`a clock`},JWaveform:{props:[`barCount`,`color`,`height`,`active`],note:`animated sound bars`},JDivider:{props:[`orientation`,`label`,`showDot`],note:`a line, with a label if given; orientation horizontal|vertical`},JNodeGraph:{props:[`nodes`,`edges`,`height`,`title`,`showLegend`],note:`nodes [{id, label, x, y, type?, color?, sub?, value?, pulse?}], edges [{from, to, color?, style?, arrow?, animated?}]; x and y in pixels`}},du=Object.keys(uu).filter(e=>![`Row`,`Column`,`Grid`].includes(e)),fu=e=>du.includes(e);function pu(e,t){let{kids:n,slots:r,...i}=t;return{c:e,p:i,...Array.isArray(n)?{kids:n}:{},...r&&typeof r==`object`?{slots:r}:{}}}var mu=/^(on[A-Z]|dangerously|style$|className$|ref$|key$|children$|href$|src$)/,hu=(e,t=0)=>{if(e===null||typeof e==`boolean`||typeof e==`number`&&Number.isFinite(e))return null;if(typeof e==`string`)return e.length>lu.text?`A text is too long.`:null;if(t>4)return`A prop is nested too deep.`;if(Array.isArray(e)){if(e.length>lu.items)return`A list is too long.`;for(let n of e){let e=hu(n,t+1);if(e)return e}return null}if(typeof e==`object`){for(let[n,r]of Object.entries(e)){if(mu.test(n))return`A prop may not have the key ${n}.`;let e=hu(r,t+1);if(e)return e}return null}return`Props must be plain data (text, numbers, true or false, lists and objects).`};function gu(e){let t=e&&typeof e==`object`?e.ui:void 0;if(!t||typeof t!=`object`)return`A jarvis object needs ui: a tree like {c: "JStatCard", p: {...}, kids: [...]}, where c is the component name.`;let n=0,r=(e,t)=>{if(typeof e==`string`)return e.length>lu.text?`A text is too long.`:null;if(!e||typeof e!=`object`||typeof e.c!=`string`)return`Every node needs c, the component name.`;if(t>lu.depth)return`The tree is too deep (at most ${lu.depth} levels).`;if(++n>lu.nodes)return`The tree has too many parts (at most ${lu.nodes}).`;let i=e,a=uu[i.c];if(!a)return`${i.c} is not available. Use one of: ${Object.keys(uu).join(`, `)}.`;for(let e of Object.keys(i.p??{})){if(mu.test(e))return`${i.c}: the prop ${e} is not allowed.`;if(!a.props.includes(e))return`${i.c} has no prop ${e}. Its props: ${a.props.join(`, `)||`none`}.`}let o=hu(i.p??{});if(o)return`${i.c}: ${o}`;for(let e of Object.keys(i.slots??{})){if(!a.slots?.includes(e))return`${i.c} has no slot ${e}.${a.slots?` Its slots: ${a.slots.join(`, `)}.`:``}`;let n=i.slots[e];if(!Array.isArray(n))return`${i.c}: the slot ${e} must be a list.`;for(let e of n){let n=r(e,t+1);if(n)return n}}if(i.kids!==void 0&&!Array.isArray(i.kids))return`${i.c}: kids must be a list.`;if(i.kids&&!a.kids&&i.kids.some(e=>typeof e!=`string`))return`${i.c} cannot contain other components.`;for(let e of i.kids??[]){let n=r(e,t+1);if(n)return n}return null};return r(t,1)}function _u(e,t){return gu({ui:pu(e,t)})}var vu=J().min(0).max(1),yu=Al([X([`auto`,`center`,`left`,`right`,`top`,`bottom`]),Y({x:vu,y:vu,w:vu,h:vu})]),bu=X([`ambient`,`conversation`,`focus`,`multi`]),xu=X([`idle`,`listening`,`thinking`,`speaking`]),Su=X([`sphere`,`orb`,`ring`]),Cu=[`card`,`stat`,`list`,`table`,`code`,`chart`,`gauge`,`timeline`,`graph`,`sandbox`,`markdown`,`image`,`video`,`pdf`,`gallery`,`group`,`tabs`,`progress`,`checklist`,`countdown`,`kv`,...du],wu=Y({id:q().min(1).max(64),type:X(Cu),props:Il(q(),Cl()),placement:yu,ttl:J().positive().max(3600).optional(),style:X([`glass`,`alert`]).optional(),layer:X([`base`,`overlay`]).optional(),pinned:xl().optional()}),Tu=X([`system`,`voice`,`network`,`feed`,`radar`,`tickets`]),Eu=Ml(`cmd`,[Y({cmd:Z(`scene`),mode:bu}),Y({cmd:Z(`show`),object:wu}),Y({cmd:Z(`update`),id:q(),props:Il(q(),Cl())}),Y({cmd:Z(`hide`),id:q()}),Y({cmd:Z(`clear`),keepInstruments:xl().optional()}),Y({cmd:Z(`widget`),show:Dl(Tu).max(6).optional(),hide:Dl(Tu).max(6).optional(),reset:xl().optional()}),Y({cmd:Z(`pin`),id:q()}),Y({cmd:Z(`unpin`),id:q()}),Y({cmd:Z(`place`),id:q(),placement:yu}),Y({cmd:Z(`presence`),state:xu.optional(),style:Su.optional()}),Y({cmd:Z(`mood`),accent:q().max(16).optional(),intensity:vu.optional()})]),Du=Y({scene:bu,objects:Dl(wu),presence:Y({state:xu,style:Su}),mood:Y({accent:q(),intensity:vu}),widgets:Dl(Tu).optional()}),Ou={center:[20,18,60,58],left:[3,12,30,70],right:[67,12,30,70],top:[20,4,60,30],bottom:[20,62,60,30]};Object.keys(Ou);var ku=[{id:`en_US-amy-medium`,name:`Amy`,gender:`female`,accent:`American`},{id:`en_US-kristin-medium`,name:`Kristin`,gender:`female`,accent:`American`},{id:`en_US-hfc_female-medium`,name:`Hannah`,gender:`female`,accent:`American`,note:`clear and steady`},{id:`en_GB-jenny_dioco-medium`,name:`Jenny`,gender:`female`,accent:`British`},{id:`en_GB-alba-medium`,name:`Alba`,gender:`female`,accent:`Scottish`},{id:`en_US-kathleen-low`,name:`Kathleen`,gender:`female`,accent:`American`,note:`smaller and faster`},{id:`en_US-ryan-medium`,name:`Ryan`,gender:`male`,accent:`American`},{id:`en_US-joe-medium`,name:`Joe`,gender:`male`,accent:`American`},{id:`en_US-norman-medium`,name:`Norman`,gender:`male`,accent:`American`},{id:`en_US-hfc_male-medium`,name:`Henry`,gender:`male`,accent:`American`,note:`clear and steady`},{id:`en_GB-alan-medium`,name:`Alan`,gender:`male`,accent:`British`},{id:`en_GB-northern_english_male-medium`,name:`Tom`,gender:`male`,accent:`Northern English`}],Au=[{id:`hi_IN-priyamvada-medium`,name:`Priyamvada`,gender:`female`,accent:`Hindi`,note:`for personal use (non-commercial licence)`},{id:`hi_IN-pratham-medium`,name:`Pratham`,gender:`male`,accent:`Hindi`,note:`for personal use (non-commercial licence)`},{id:`hi_IN-rohan-medium`,name:`Rohan`,gender:`male`,accent:`Hindi`}],ju=[{id:`mr_IN-google-medium`,name:`Marathi`,gender:`female`,accent:`Marathi`}],Mu={id:`en_US-lessac-medium`,name:`Lessac`,accent:`American`,note:`the original voice`},Nu=e=>e===Mu.id||ku.some(t=>t.id===e),Pu=[{id:`tiny`,name:`Tiny`,mb:75,note:`fastest, mishears a lot`},{id:`base`,name:`Base`,mb:145,note:`fast, struggles with Hindi, Marathi and distance`},{id:`small`,name:`Small`,mb:480,note:`recommended: much better, still quick`},{id:`medium`,name:`Medium`,mb:1500,note:`better again, slow on a PC without a graphics card`},{id:`large-v3-turbo`,name:`Large (turbo)`,mb:1600,note:`most accurate for Marathi; needs a fast PC`}],Fu=e=>`about ${e>=1e3?`${(e/1e3).toFixed(1)} GB`:`${e} MB`}`,Iu=[{id:`aurora`,name:`Aurora`,style:`sphere`,accent:`#3fd8ff`,intensity:.6},{id:`ocean`,name:`Ocean`,style:`sphere`,accent:`#2b7bff`,intensity:.6},{id:`ember`,name:`Ember`,style:`orb`,accent:`#ff9b3d`,intensity:.7},{id:`violet`,name:`Violet storm`,style:`orb`,accent:`#a066ff`,intensity:.8},{id:`matrix`,name:`Matrix`,style:`ring`,accent:`#3dff8c`,intensity:.6},{id:`rose`,name:`Rose`,style:`ring`,accent:`#ff6fae`,intensity:.7},{id:`ghost`,name:`Ghost`,style:`sphere`,accent:`#e8f4ff`,intensity:.4}],Lu=[`mp3`,`m4a`,`aac`,`ogg`,`opus`,`wav`,`flac`],Ru={maxTracks:{min:100,max:5e4,def:5e3},scanDepth:{min:1,max:12,def:6},volume:{min:0,max:100,def:70},searchLimit:{min:3,max:50,def:10}},zu=[`chat`,`tasks`,`plugins`,`settings`,`music`],Bu=[`toggle`,`play`,`pause`,`next`,`previous`],Vu=[`url`,`prompt`,`panel`,`music`];function Hu(e){let t=e&&typeof e==`object`?e:null;if(!t)return`A button needs a label and an action.`;let n=typeof t.label==`string`?t.label.trim():``;if(n.length<1||n.length>24)return`A button label is 1 to 24 characters.`;let r=typeof t.icon==`string`?t.icon.trim():``;if(r.length<1||[...r].length>4)return`A button icon is 1 to 4 characters (a symbol or an emoji).`;let i=t.action&&typeof t.action==`object`?t.action:null;if(!i||!Vu.includes(i.type)||typeof i.value!=`string`)return`A button needs an action: an address, a question, a panel or a music control.`;let a=i.value.trim();switch(i.type){case`url`:if(a.length>500)return`A button address is at most 500 characters.`;try{let e=new URL(a);return e.protocol===`https:`||e.protocol===`http:`?null:`A button address must start with https:// or http://.`}catch{return`A button address must start with https:// or http://.`}case`prompt`:return a.length>=1&&a.length<=500?null:`A question for the assistant is 1 to 500 characters.`;case`panel`:return zu.includes(a)?null:`A panel is one of: ${zu.join(`, `)}.`;default:return Bu.includes(a)?null:`A music control is one of: ${Bu.join(`, `)}.`}}function Uu(e){return e===``?null:e.length>260?`That program name is too long.`:/\s/.test(e)?`Use the program's name, or a short path with no spaces (or add the program to your PATH). Arguments cannot be added here.`:e.startsWith(`-`)||!/^[A-Za-z0-9._:\\/~+-]+$/.test(e)?`A program is a name or a path made of letters, digits and . _ : / \\ ~ + - only, and cannot start with a dash.`:null}var Wu=[`classic`,`orbital`],Gu=[`calm`,`standard`,`full`],Ku=[`system`,`voice`,`network`,`feed`,`radar`,`tickets`,`budget`,`approval`,`usage`],qu=/^[a-z0-9][a-z0-9-]{0,23}$/,Ju=q().regex(qu,`Lowercase letters, digits and dashes, up to 24 characters`),Yu=[`starting`,`running`,`waiting`,`idle`,`paused`,`stopped`,`failed`],Xu=[`todo`,`doing`,`review`,`done`,`blocked`];Y({id:Ju,title:q().min(1).max(40),instructions:q().max(4e3),model:q().max(100),permission:X([`default`,`acceptEdits`])}),Y({id:Ju,name:q().min(1).max(60),folder:q().min(1).max(260),goal:q().max(500),extraFolders:Dl(q().min(1).max(260)).max(5)}),Y({allowTools:Dl(q().min(1).max(60)).max(40),denyCommands:Dl(q().min(1).max(200)).max(40)});var Zu=Y({id:q().min(1).max(64),name:q().min(1).max(40),roleId:q().max(24),title:q().max(60),capabilities:q().max(200),managerId:q().max(64).nullable(),projectId:q().max(24),status:X(Yu),ticketId:J().int().nullable(),detail:q().max(80),tokens:J().min(0),budget:J().min(0).nullable(),startedAt:J().nullable()}),Qu=Y({id:J().int(),projectId:q().max(24),title:q().max(200),status:X(Xu),workerId:q().max(64).nullable()}),$u=Y({utilization:J().min(0).max(1),resetsAt:J()}),ed=Y({fiveHour:$u.nullable(),sevenDay:$u.nullable()}),td=[`text`,`tool`,`result`,`approval`,`error`],nd=[`local`,`spotify`,`soundcloud`,`audius`],rd=/^[0-9a-f]{16}$/,id=/^[0-9]{1,20}$/,ad=/^[A-Za-z0-9_-]{1,64}$/;function od(e){if(typeof e!=`string`)return null;if(rd.test(e))return{source:`local`,id:e};let t=e.indexOf(`:`);if(t<1)return null;let n=e.slice(0,t),r=e.slice(t+1);return!nd.includes(n)||!(n===`local`?rd:n===`soundcloud`?id:ad).test(r)?null:{source:n,id:r}}var sd=X([`minimal`,`companion`,`workspace`]),cd=Y({size:J().min(.5).max(1.5),reactivity:J().min(0).max(1),ambient:xl(),captions:xl(),captionSize:X([`small`,`medium`,`large`])}),ld={width:J().int().min(100).max(1e4),height:J().int().min(100).max(1e4),kind:X([`phone`,`tablet`,`desktop`]),orientation:X([`portrait`,`landscape`]),touch:xl()};Y(ld);var ud=Y({id:q(),tool:q(),summary:q(),tier:cu,needsPin:xl()}),dd=Y({id:q().refine(e=>od(e)!==null,`A track id or a source:id ref`),title:q().max(200),artist:q().max(200),album:q().max(200),durationSec:J().nullable()}),fd=Y({playing:xl(),trackId:q().max(80).nullable(),title:q().max(200),artist:q().max(200),album:q().max(200),position:J().min(0),duration:J().min(0),volume:J().min(0).max(100),muted:xl(),shuffle:xl(),repeat:X([`off`,`all`,`one`]),view:X([`mini`,`full`,`hidden`]),queue:Dl(Y({id:q().max(80),title:q().max(200)})).max(50),index:J().int().min(-1),active:xl()}),pd=Y({action:X([`play`,`pause`,`resume`,`toggle`,`stop`,`next`,`previous`,`seek`,`volume`,`mute`,`shuffle`,`repeat`,`view`,`queue.remove`,`queue.clear`,`jump`]),tracks:Dl(dd).max(500).optional(),mode:X([`replace`,`add`,`next`,`off`,`all`,`one`]).optional(),shuffle:xl().optional(),seconds:J().min(0).optional(),percent:J().min(0).max(100).optional(),level:J().min(0).max(100).optional(),delta:J().min(-100).max(100).optional(),on:xl().optional(),view:X([`mini`,`full`,`hidden`]).optional(),index:J().int().min(0).optional()}),md=Y({terminalLabel:q().max(24),clock:Y({hour12:xl(),seconds:xl(),locale:q().max(35)}),launcher:Dl(Y({id:q().max(20),label:q().max(24),icon:q().max(16),action:Y({type:X([`url`,`prompt`,`panel`,`music`]),value:q().max(500)})})).max(12),animations:X([`full`,`reduced`,`off`]),layout:X(Wu),density:X(Gu),widgets:Y(Object.fromEntries(Ku.map(e=>[e,xl().optional()]))),preview:xl().optional()}),hd=Y({folderSet:xl(),volume:J().min(0).max(100),shuffle:xl(),repeat:X([`off`,`all`,`one`]),visualizer:xl(),startView:X([`mini`,`full`]),output:X([`screen`,`host`]).optional()}),gd=Ml(`type`,[Y({type:Z(`music.command`)}).merge(pd),Y({type:Z(`music.host`),state:fd}),Y({type:Z(`stage`),command:Eu}),Y({type:Z(`caption.delta`),text:q()}),Y({type:Z(`caption.end`)}),Y({type:Z(`approval.request`)}).merge(ud),Y({type:Z(`approval.resolved`),id:q()}),Y({type:Z(`alert`),level:X([`info`,`warn`,`error`]),text:q()}),Y({type:Z(`chat.user`),text:q()}),Y({type:Z(`ui`),view:sd,look:cd.optional(),ownerName:q().max(40).optional(),assistantName:q().max(40).optional(),hud:md.optional(),music:hd.optional()}),Y({type:Z(`activity`),text:q().max(80).nullable()}),Y({type:Z(`hud.stats`),cpu:J().min(0).max(100),ramUsed:J().min(0),ramTotal:J().min(0),netDown:J().min(0),netUp:J().min(0)}),Y({type:Z(`status`),busy:xl(),deviceOnline:xl(),voiceAvailable:xl().optional(),voiceEnrolled:xl().optional(),message:q().optional()}),Y({type:Z(`voice.heard`),text:q(),trust:X([`owner`,`guest`,`unverified`,`member`]).optional(),speaker:q().max(60).optional()}),Y({type:Z(`voice.challenge`),id:q(),text:q()}),Y({type:Z(`voice.challenge.end`),id:q()}),Y({type:Z(`audio.chunk`),id:q(),seq:J().int().min(0),last:xl(),mime:q(),data:q()}),Y({type:Z(`audio.stop`)}),Y({type:Z(`audio.duck`),level:J().min(0).max(1)}),Y({type:Z(`camera.request`),id:q()}),Y({type:Z(`camera.cancel`),id:q()}),Y({type:Z(`ui.open`),panel:Z(`plugins`),integration:q().max(40).optional()}),Y({type:Z(`screen.request`),id:q()}),Y({type:Z(`screen.check`),id:q()}),Y({type:Z(`screen.cancel`),id:q()}),Y({type:Z(`snapshot`),stage:Du,pendingApproval:ud.nullable().optional()}),Y({type:Z(`error`),message:q()}),Y({type:Z(`office.state`),enabled:xl(),workers:Dl(Zu).max(100),tickets:Dl(Qu).max(500),quota:ed}),Y({type:Z(`office.feed`),workerId:q().max(64),at:J(),kind:X(td),text:q().max(200)})]),_d=Y({type:Z(`approval.respond`),id:q(),decision:X([`approve`,`deny`,`approve_always`]),pin:q().max(32).optional()});Ml(`type`,[Y({type:Z(`chat.send`),text:q().min(1).max(8e3)}),Y({type:Z(`stage.event`),objectId:q(),event:q().max(64)}),_d,Y({type:Z(`voice.interrupt`)}),Y({type:Z(`audio.activity`),active:xl()}),Y({type:Z(`voice.confirm`),id:q(),pin:q().max(32)}),Y({type:Z(`voice.cancel`),id:q()}),Y({type:Z(`camera.denied`),id:q(),reason:X([`off`,`no-camera`,`permission`,`busy`])}),Y({type:Z(`screen.checked`),id:q(),lines:Dl(q().max(200)).max(12)}),Y({type:Z(`screen.denied`),id:q(),reason:X([`unsupported`,`failed`,`busy`])}),Y({type:Z(`ui.panels`),open:Dl(X([`chat`,`tasks`])).max(2)}),Y({type:Z(`ui.screen`),...ld}),Y({type:Z(`stage.move`),objectId:q().max(64),rect:Y({x:J().min(0).max(1),y:J().min(0).max(1),w:J().min(0).max(1),h:J().min(0).max(1)})}),Y({type:Z(`stage.pin`),objectId:q().max(64),pinned:xl()}),Y({type:Z(`music.state`),state:fd}),Y({type:Z(`music.remote`),command:pd}),Y({type:Z(`ping`)}),Y({type:Z(`office.stop`),workerId:q().max(64).optional()}),Y({type:Z(`office.fire`),workerId:q().min(1).max(64)}),Y({type:Z(`office.say`),workerId:q().max(64),text:q().min(1).max(2e3)})]),Y({type:Z(`tool.exec`),id:q(),tool:q(),args:Cl(),approvedOutside:xl().optional()}),Ml(`type`,[Y({type:Z(`tool.result`),id:q(),result:Y({output:q(),truncated:xl()})}),Y({type:Z(`tool.error`),id:q(),error:q()})]),Y({path:q()}),Y({path:q()}),Y({path:q(),content:q()}),Y({}),Y({}),Y({command:q().min(1),cwd:q().optional()}),Y({city:q().min(1).max(80)}),Y({query:q().min(1).max(300),count:J().int().min(1).max(8).optional(),topic:X([`general`,`news`,`finance`]).optional(),timeRange:X([`day`,`week`,`month`,`year`]).optional(),includeDomains:Dl(q().max(100)).max(10).optional(),excludeDomains:Dl(q().max(100)).max(10).optional()}),Y({url:q().min(1).max(2e3)}),Y({kind:X([`candles`,`quote`,`announcements`,`results`,`insider`,`bulk`,`holdings`,`movers`,`active`,`volume`]),direction:X([`gainers`,`losers`]).optional(),universe:X([`NIFTY`,`BANKNIFTY`,`NIFTYNEXT50`,`FOSec`,`allSec`]).optional(),symbol:q().max(30).optional(),interval:X([`1m`,`5m`,`15m`,`30m`,`1h`,`1d`]).optional(),range:X([`1d`,`5d`,`1mo`,`3mo`,`6mo`,`1y`,`2y`]).optional()}),Y({symbols:Dl(q().max(30)).max(28).optional(),limit:J().int().min(1).max(15).optional()}),Y({symbol:q().min(1).max(30),side:X([`buy`,`sell`]),stop:J().positive(),target:J().positive(),runs:J().int().min(500).max(5e4).optional(),seed:J().int().optional()}),Y({plugin:q().min(1).max(40),name:q().min(1).max(40)}),Y({language:X([`python`,`node`,`shell`]),code:q().min(1).max(5e4),timeoutSec:J().int().min(1).max(60).optional()}),Y({text:q().min(1).max(4e3)}),Y({path:q().max(200).optional()}),Y({path:q().min(1).max(200),text:q().min(1).max(6e3),title:q().max(80).optional(),summary:q().max(160).optional(),folderSummary:q().max(160).optional(),related:Dl(q().max(200)).max(8).optional()}),Y({}),Y({from:q().min(1).max(200),to:q().min(1).max(200)}),Y({query:q().min(1).max(200)}),Y({path:q().min(1).max(200).optional(),id:J().int().positive().optional()}).refine(e=>!!e.path||!!e.id,{message:`Give the path of the note to forget.`}),Y({url:q().min(1).max(2e3)}),Y({url:q().min(1).max(2e3),fullPage:xl().optional()}),Y({}),Y({text:q().min(1).max(3e3)}),Y({to:X([`previous`,`default`])}),Y({title:q().min(1).max(1e3),inMinutes:J().int().min(1).max(525600).optional(),dueAt:q().max(40).optional(),repeat:X([`hourly`,`daily`,`weekly`]).optional()}),Y({}),Y({id:J().int().positive()}),Y({id:J().int().positive()}),Y({}),Y({path:q().min(1).max(1e3),id:q().min(1).max(64).optional(),title:q().max(120).optional(),placement:yu.optional()}),Y({}),Y({}),Y({id:q().min(1).max(40)}),Y({id:X([`telegram`,`twilio`,`zerodha`,`alexa`]).optional()}),Y({id:X([`telegram`,`twilio`,`zerodha`,`alexa`]),enabled:xl().optional(),accountSid:q().max(64).optional(),smsFrom:q().max(30).optional(),whatsappFrom:q().max(30).optional(),ownerNumber:q().max(30).optional()}).strict(),Y({id:X([`telegram`,`twilio`,`zerodha`,`alexa`])}),Y({id:X([`telegram`,`twilio`,`zerodha`,`alexa`])}),Y({channel:X([`telegram`,`sms`,`whatsapp`]),to:q().min(1).max(40),text:q().min(1).max(1500)}),Y({channel:X([`telegram`,`whatsapp`]),to:Z(`me`),path:q().min(1).max(500),caption:q().max(1e3).optional()}).strict(),Y({channel:X([`telegram`,`sms`,`whatsapp`]).optional(),unread:xl().optional(),limit:J().int().min(1).max(20).optional()}),Y({}).strict(),Y({}).strict(),Y({}).strict(),Y({}).strict(),Y({}).strict(),Y({}).strict(),Y({kind:X([`morning`,`close`,`custom`]).optional(),send:xl().optional()}).strict(),Y({name:q().min(1).max(60),kind:X([`morning`,`close`,`custom`]),time:q().regex(/^([01]\d|2[0-3]):[0-5]\d$/),days:Dl(J().int().min(1).max(7)).min(1).max(7).optional(),channel:X([`telegram`,`whatsapp`,`sms`]),commentary:xl().optional()}).strict(),Y({}).strict(),Y({id:J().int().min(1)}).strict(),Y({query:q().max(200).optional(),title:q().max(200).optional(),artist:q().max(200).optional(),album:q().max(200).optional(),shuffle:xl().optional(),mode:X([`replace`,`add`,`next`]).optional(),limit:J().int().min(1).max(500).optional(),source:X([`local`,`spotify`,`soundcloud`,`audius`,`any`]).optional()}).strict(),Y({action:X([`pause`,`resume`,`toggle`,`stop`,`next`,`previous`,`seek`,`volume`,`mute`,`shuffle`,`repeat`,`view`]),level:J().min(0).max(100).optional(),delta:J().min(-100).max(100).optional(),seconds:J().min(0).optional(),percent:J().min(0).max(100).optional(),on:xl().optional(),mode:X([`off`,`all`,`one`]).optional(),view:X([`mini`,`full`,`hidden`]).optional()}).strict(),Y({action:X([`add`,`remove`,`clear`,`show`]),query:q().max(200).optional(),index:J().int().min(1).optional(),source:X([`local`,`spotify`,`soundcloud`,`audius`,`any`]).optional()}).strict(),Y({query:q().max(200),limit:J().int().min(1).max(15).optional(),source:X([`local`,`spotify`,`soundcloud`,`audius`,`any`]).optional()}).strict(),Y({}).strict(),Y({url:q().max(2e3).optional(),query:q().max(200).optional(),output:X([`screen`,`host`]).optional(),start:J().min(0).max(86400).optional(),mode:X([`embed`,`stream`]).optional()}).strict(),Y({action:X([`pause`,`resume`,`stop`,`seek`,`volume`]),seconds:J().min(0).max(86400).optional(),level:J().min(0).max(100).optional()}).strict(),Y({}).strict(),Y({}),Y({settings:Il(q(),Cl())}),Y({style:Su.optional(),accent:q().regex(/^#[0-9a-fA-F]{6}$/).optional(),intensity:J().min(0).max(1).optional(),size:J().min(.5).max(1.5).optional(),reactivity:J().min(0).max(1).optional(),ambient:xl().optional(),captions:xl().optional(),captionSize:X([`small`,`medium`,`large`]).optional()}),Y({view:sd}),Y({}),Y({id:q().min(1).max(16),name:q().min(1).max(60),kind:X([`stdio`,`http`]),command:q().max(260).optional(),args:Dl(q().max(500)).max(20).optional(),url:q().max(2e3).optional()}),Y({id:q().min(1).max(16)}),Y({id:q().min(1).max(16)}),Y({id:q().min(1).max(16)}),Y({id:q().min(1).max(16)}),Y({}),Y({id:q().min(1).max(40),name:q().min(1).max(80),description:q().max(500).optional(),skills:Dl(Y({name:q().min(1).max(40),description:q().min(1).max(300),text:q().min(1).max(2e4)})).max(10).optional(),tools:Dl(Y({name:q().min(1).max(40),description:q().min(1).max(500),language:X([`python`,`node`,`shell`]),code:q().min(1).max(5e4),parameters:Il(q(),Y({type:X([`string`,`number`,`integer`,`boolean`]),description:q().max(300).optional(),enum:Dl(q().max(100)).max(50).optional()})).optional(),required:Dl(q()).optional()})).max(10).optional()}),Y({}),Y({id:q().min(1).max(40)}),Y({id:q().min(1).max(40)}),Y({id:q().min(1).max(40)}),Y({mode:bu}),Y({object:wu}),Y({}),Y({topic:X([`all`,`widgets`,`layout`,`overlay`,`theme`,`files`,`recipes`]).optional()}),Y({id:q(),props:Il(q(),Cl())}),Y({id:q()}),Y({show:Dl(X([`system`,`voice`,`network`,`feed`,`radar`,`tickets`])).max(6).optional(),hide:Dl(X([`system`,`voice`,`network`,`feed`,`radar`,`tickets`])).max(6).optional(),reset:xl().optional()}).refine(e=>!!e.show?.length||!!e.hide?.length||e.reset===!0,{message:`Name what to show or hide, or reset.`}),Y({}),Y({id:q()}),Y({id:q()}),Y({state:xu.optional(),style:Su.optional()}),Y({accent:q().max(16).optional(),intensity:J().min(0).max(1).optional()}),Y({}),Y({ticket:J().int()}),Y({project:q().min(1).max(24),title:q().min(1).max(40).optional(),instructions:q().max(4e3).optional(),capabilities:q().max(200).optional(),manager:q().min(1).max(64).optional(),role:q().min(1).max(24).optional(),name:q().min(1).max(30).optional()}).refine(e=>!!e.title||!!e.role,{message:`Give the job a title, or a starter role.`}),Y({worker:q().min(1).max(64),title:q().min(1).max(200),description:q().max(4e3).optional()}),Y({worker:q().min(1).max(64),text:q().min(1).max(2e3)}),Y({id:J().int(),decision:X([`allow`,`deny`,`ask_owner`]),reason:q().max(300).optional()}),Y({ticket:J().int(),accept:xl(),note:q().max(500).optional()}),Y({worker:q().min(1).max(64)}),Y({worker:q().min(1).max(64).optional()});var vd=new Set([`alexa`,`amazon`,`echo`,`skill`,`app`,`ask`,`tell`,`open`,`start`,`run`,`enable`,`launch`,`load`,`begin`,`use`]),yd=50;function bd(e){let t=e.trim().split(/\s+/).filter(Boolean);if(t.length<1)return`Enter the name you will say after "Alexa, ask".`;if(e.length>yd)return`That is too long (at most ${yd} characters).`;if(!/^[a-z' ]+$/.test(e))return`Use lower-case letters, spaces and apostrophes only. Spell numbers out as words.`;let n=t.find(e=>vd.has(e));return n?`The word "${n}" cannot be in the name (it is reserved by Alexa).`:null}var xd=2e3,Sd=3,Cd=e=>({queue:[],index:-1,playing:!1,position:0,duration:0,volume:e.volume,muted:!1,shuffle:e.shuffle,repeat:e.repeat,view:e.view});function wd(e,t=Math.random){let n=[...e];for(let e=n.length-1;e>0;e--){let r=Math.floor(t()*(e+1));[n[e],n[r]]=[n[r],n[e]]}return n}var Td=(e,t,n)=>Math.min(n,Math.max(t,e)),Ed=(e,t,n)=>({...e,index:t,playing:n,position:0,duration:0});function Dd(e,t,n={}){let r=n.shuffle??wd,i=e.queue.length-1;switch(t.type){case`play`:{if(t.tracks.length===0)return e;let n=t.tracks.slice(0,xd);if(t.mode===`replace`){let i=t.shuffle?r(n):n;return{...Ed(e,t.shuffle?0:Td(t.start??0,0,i.length-1),!0),queue:i,shuffle:t.shuffle?!0:e.shuffle}}if(e.queue.length===0)return{...Ed(e,0,!0),queue:n};let i=t.mode===`next`?e.index+1:e.queue.length;return{...e,queue:[...e.queue.slice(0,i),...n,...e.queue.slice(i)].slice(0,xd)}}case`next`:return i<0?e:e.index<i?Ed(e,e.index+1,!0):e.repeat===`off`?{...e,playing:!1,position:0}:Ed(e,0,!0);case`previous`:return i<0?e:e.position>Sd?{...e,position:0}:e.index>0?Ed(e,e.index-1,e.playing||!0):e.repeat===`all`?Ed(e,i,!0):{...e,position:0};case`ended`:return i<0?e:e.repeat===`one`?Ed(e,e.index,!0):e.index<i?Ed(e,e.index+1,!0):e.repeat===`all`?Ed(e,0,!0):{...e,playing:!1,position:0};case`failed`:return i<0?e:e.index<i?Ed(e,e.index+1,!0):{...e,playing:!1,position:0};case`pause`:return e.playing?{...e,playing:!1}:e;case`resume`:return e.index>=0&&!e.playing?{...e,playing:!0}:e;case`toggle`:return e.index<0?e:{...e,playing:!e.playing};case`stop`:return{...e,playing:!1,position:0};case`volume`:{let n=typeof t.level==`number`?Math.round(t.level):typeof t.delta==`number`?e.volume+Math.round(t.delta):e.volume;return{...e,volume:Td(n,0,100),muted:typeof t.level==`number`||(t.delta??0)>0?!1:e.muted}}case`mute`:return{...e,muted:t.on??!e.muted};case`seek`:{let n=typeof t.seconds==`number`?t.seconds:typeof t.percent==`number`?e.duration*Td(t.percent,0,100)/100:e.position;return{...e,position:Td(n,0,e.duration>0?e.duration:Math.max(n,0))}}case`repeat`:return{...e,repeat:t.mode};case`shuffle`:{if(!(t.on??!e.shuffle))return{...e,shuffle:!1};let n=e.queue.slice(0,e.index+1);return{...e,shuffle:!0,queue:[...n,...r(e.queue.slice(e.index+1))]}}case`view`:return{...e,view:t.view};case`remove`:{if(!Number.isInteger(t.index)||t.index<0||t.index>i)return e;let n=e.queue.filter((e,n)=>n!==t.index);return n.length===0?{...e,queue:n,index:-1,playing:!1,position:0,duration:0}:t.index<e.index?{...e,queue:n,index:e.index-1}:t.index>e.index?{...e,queue:n}:t.index<n.length?{...Ed(e,t.index,e.playing),queue:n}:e.repeat===`all`?{...Ed(e,0,e.playing),queue:n}:{...e,queue:n,index:n.length-1,playing:!1,position:0}}case`clear`:return{...e,queue:[],index:-1,playing:!1,position:0,duration:0};case`jump`:return Number.isInteger(t.index)&&t.index>=0&&t.index<=i?Ed(e,t.index,!0):e;case`time`:return{...e,position:Math.max(0,t.position),duration:Math.max(0,t.duration)}}}function Od(e){switch(e.action){case`play`:return{type:`play`,tracks:e.tracks??[],mode:e.mode===`add`||e.mode===`next`?e.mode:`replace`,...e.shuffle?{shuffle:!0}:{},...e.index===void 0?{}:{start:e.index}};case`pause`:case`resume`:case`toggle`:case`stop`:case`next`:case`previous`:return{type:e.action};case`seek`:return{type:`seek`,...e.seconds===void 0?{}:{seconds:e.seconds},...e.percent===void 0?{}:{percent:e.percent}};case`volume`:return{type:`volume`,...e.level===void 0?{}:{level:e.level},...e.delta===void 0?{}:{delta:e.delta}};case`mute`:return{type:`mute`,...e.on===void 0?{}:{on:e.on}};case`shuffle`:return{type:`shuffle`,...e.on===void 0?{}:{on:e.on}};case`repeat`:return e.mode===`off`||e.mode===`all`||e.mode===`one`?{type:`repeat`,mode:e.mode}:null;case`view`:return e.view?{type:`view`,view:e.view}:null;case`queue.remove`:return e.index===void 0?null:{type:`remove`,index:e.index};case`queue.clear`:return{type:`clear`};case`jump`:return e.index===void 0?null:{type:`jump`,index:e.index};default:return null}}function kd(e){switch(e.type){case`play`:return{action:`play`,tracks:e.tracks,mode:e.mode,...e.shuffle?{shuffle:!0}:{},...e.start===void 0?{}:{index:e.start}};case`next`:case`previous`:case`pause`:case`resume`:case`toggle`:case`stop`:return{action:e.type};case`volume`:return{action:`volume`,...e.level===void 0?{}:{level:e.level},...e.delta===void 0?{}:{delta:e.delta}};case`mute`:return{action:`mute`,...e.on===void 0?{}:{on:e.on}};case`seek`:return{action:`seek`,...e.seconds===void 0?{}:{seconds:e.seconds},...e.percent===void 0?{}:{percent:e.percent}};case`repeat`:return{action:`repeat`,mode:e.mode};case`shuffle`:return{action:`shuffle`,...e.on===void 0?{}:{on:e.on}};case`view`:return{action:`view`,view:e.view};case`remove`:return{action:`queue.remove`,index:e.index};case`clear`:return{action:`queue.clear`};case`jump`:return{action:`jump`,index:e.index};default:return null}}var Ad={style:`sphere`,accent:`#3fd8ff`,intensity:.6,size:1,reactivity:.7,ambient:!0,captions:!0,captionSize:`medium`,aiMayChange:!0},jd=new Set([`view`,`look`,`ownerName`]),Md=e=>Object.keys(e).some(e=>!jd.has(e));async function Nd(e={}){let t;try{t=await fetch(`/api/settings`,e)}catch{throw Error(`Could not reach Friend. Check the connection.`)}if(!t.ok){let e=``;try{e=(await t.json()).error??``}catch{}throw Error(e||(t.status===401?`Please sign in again.`:t.status===429?`Too many attempts. Wait a moment.`:`The request failed (${t.status}).`))}return await t.json()}var Pd={get:()=>Nd(),save:(e,t)=>Nd({method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify({...t?{pin:t}:{},settings:e})})};async function Fd(e){let t;try{t=await fetch(`/api/voice/preview`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({voice:e})})}catch{throw Error(`Could not reach Friend. Check the connection.`)}if(!t.ok){let e=``;try{e=(await t.json()).error??``}catch{}throw Error(e||`The request failed (${t.status}).`)}let n=URL.createObjectURL(await t.blob()),r=new Audio(n);r.addEventListener(`ended`,()=>URL.revokeObjectURL(n),{once:!0});try{await r.play()}catch{throw URL.revokeObjectURL(n),Error(`The browser blocked the sound. Click anywhere on the page, then try again.`)}}function Id(e,t,n,r=``,i={brave:``,tavily:``}){let a={};t.provider!==e.provider&&(a.provider=t.provider),t.model!==e.model&&(a.model=t.model),t.view!==e.view&&(a.view=t.view),(t.ownerName??``)!==(e.ownerName??``)&&(a.ownerName=t.ownerName??``),(t.approvals??`manual`)!==(e.approvals??`manual`)&&(a.approvals=t.approvals??`manual`),n.trim()&&(a.apiKey=n.trim());for(let n of[`ollama`,`claudeCode`,`voice`,`look`,`updates`,`session`,`memory`,`proactive`,`phoneApprovals`]){if(!t[n]||!e[n])continue;let r={};for(let i of Object.keys(t[n])){let a=t[n][i];a!==e[n][i]&&(r[i]=n===`voice`&&i===`language`?a??``:a)}Object.keys(r).length&&(a[n]=r)}if(e.music&&t.music){let n={};for(let r of Object.keys(t.music))JSON.stringify(t.music[r])!==JSON.stringify(e.music[r])&&(n[r]=t.music[r]);Object.keys(n).length&&(a.music=n)}if(e.hud&&t.hud){let n={};t.hud.terminalLabel!==e.hud.terminalLabel&&(n.terminalLabel=t.hud.terminalLabel),t.hud.animations!==e.hud.animations&&(n.animations=t.hud.animations),t.hud.layout!==e.hud.layout&&(n.layout=t.hud.layout),t.hud.density!==e.hud.density&&(n.density=t.hud.density),t.hud.preview===!0!=(e.hud.preview===!0)&&(n.preview=t.hud.preview===!0);let r={};for(let n of Ku)t.hud.widgets[n]!==e.hud.widgets[n]&&typeof t.hud.widgets[n]==`boolean`&&(r[n]=t.hud.widgets[n]);Object.keys(r).length&&(n.widgets=r);let i={};for(let n of Object.keys(t.hud.clock))t.hud.clock[n]!==e.hud.clock[n]&&(i[n]=t.hud.clock[n]);Object.keys(i).length&&(n.clock=i),JSON.stringify(t.hud.launcher)!==JSON.stringify(e.hud.launcher)&&(n.launcher=t.hud.launcher),Object.keys(n).length&&(a.hud=n)}if(e.office&&t.office){let n={},r=t.office,i=e.office;for(let e of[`enabled`,`maxConcurrent`,`startTimeoutSec`,`pauseAtWindow`,`notifyFriend`,`autonomy`,`decideTries`])r[e]!==i[e]&&(n[e]=r[e]);let o={};for(let e of[`perWorkerTokens`,`totalTokens`])r.budget[e]!==i.budget[e]&&(o[e]=r.budget[e]);Object.keys(o).length&&(n.budget=o),JSON.stringify(r.roles)!==JSON.stringify(i.roles)&&(n.roles=r.roles),JSON.stringify(r.projects)!==JSON.stringify(i.projects)&&(n.projects=r.projects);let s={};for(let e of[`allowTools`,`denyCommands`])JSON.stringify(r.policy[e])!==JSON.stringify(i.policy[e])&&(s[e]=r.policy[e]);Object.keys(s).length&&(n.policy=s),Object.keys(n).length&&(a.office=n)}if(e.web&&t.web){let n={};for(let r of[`enabled`,`provider`,`searxngUrl`])t.web[r]!==e.web[r]&&(n[r]=t.web[r]);i.brave.trim()&&(n.braveKey=i.brave.trim()),i.tavily.trim()&&(n.tavilyKey=i.tavily.trim()),Object.keys(n).length&&(a.web=n)}if(e.openai&&t.openai){let n={};for(let r of[`url`,`model`,`vision`])t.openai[r]!==e.openai[r]&&(n[r]=t.openai[r]);r.trim()&&(n.apiKey=r.trim()),Object.keys(n).length&&(a.openai=n)}return a}function Ld({label:e,value:t,onChange:n,min:r,max:i,step:a}){let[o,s]=(0,v.useState)(String(t));return(0,v.useEffect)(()=>{s(e=>Number(e)===t?e:String(t))},[t]),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:e}),(0,C.jsx)(`input`,{type:`number`,min:r,max:i,step:a,value:o,onChange:e=>{s(e.target.value),e.target.value.trim()!==``&&Number.isFinite(Number(e.target.value))&&n(Number(e.target.value))},onBlur:()=>s(String(t)),style:b})]})}async function Rd(e,t){let n;try{n=await fetch(e,t)}catch{throw Error(`Could not reach Friend. Check the connection.`)}let r={};try{r=await n.json()}catch{}if(!n.ok)throw Error(r.error??(n.status===401?`Please sign in again.`:`The request failed (${n.status}).`));return r}var zd={status:()=>Rd(`/api/alexa`),allow:async(e,t)=>void await Rd(`/api/alexa/devices/allow`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:e,pin:t})}),forget:async e=>void await Rd(`/api/alexa/devices/${encodeURIComponent(e)}`,{method:`DELETE`})},Bd=/^amzn1\.ask\.skill\.[A-Za-z0-9-]{8,80}$/;function Vd(e){return e.skillId.trim()&&!Bd.test(e.skillId.trim())?`A skill ID looks like amzn1.ask.skill.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (copy it from the console).`:e.invocationName.trim()?bd(e.invocationName):null}var Hd={"skill.json":`the skill's manifest (name, endpoint)`,"en-IN.json":`the English (India) interaction model`,"hi-IN.json":`the Hindi (India) interaction model`},Ud={"en-IN":`English (India)`,"hi-IN":`Hindi (India)`},Wd=e=>{let t=Math.max(0,Math.round((Date.now()-e)/6e4));return t<1?`just now`:t<60?`${t} min ago`:`${Math.round(t/60)} h ago`};function Gd({view:e,setView:t,api:n=zd}){let[r,i]=(0,v.useState)(null),[a,o]=(0,v.useState)(null),[s,c]=(0,v.useState)(``),[l,u]=(0,v.useState)(null),[d,f]=(0,v.useState)(!1),[p,m]=(0,v.useState)(!1),h=(0,v.useRef)(!0),g=(0,v.useCallback)(()=>n.status().then(e=>h.current&&i(e)).catch(()=>{}),[n]);(0,v.useEffect)(()=>(h.current=!0,g(),()=>{h.current=!1}),[g]);let _=async e=>{m(!0),u(null);try{await e()}catch(e){h.current&&u(e.message)}finally{h.current&&m(!1)}},y=Vd(e),x=r?.invocationName||e.invocationName,S=!!r?.endpoint&&!!r.invocationName;return(0,C.jsxs)(`div`,{className:`settings-section`,children:[(0,C.jsx)(`p`,{className:`auth-note`,children:`Friend talks to a skill of your own on Alexa. It is free: the skill stays in development mode in your own Amazon developer account and is never published, and only the Echo devices you allow can use it. Alexa can look things up and answer; anything that changes something is refused, or sent to your phone for a yes.`}),(0,C.jsx)(`h4`,{className:`plugins-heading`,children:`In the Alexa developer console`}),r&&r.endpoint?(0,C.jsxs)(`p`,{className:`auth-note`,children:[`Endpoint to paste (HTTPS, "My development endpoint has a certificate from a trusted certificate authority"): `,(0,C.jsx)(`code`,{children:r.endpoint}),` `,(0,C.jsx)(`button`,{type:`button`,style:b,onClick:()=>{navigator.clipboard?.writeText(r.endpoint).then(()=>f(!0),()=>{})},children:d?`Copied`:`Copy`})]}):r&&(0,C.jsx)(`p`,{className:`auth-note`,children:`No public address is set yet, so Amazon cannot reach Friend (friend config set publicUrl https://…).`}),(0,C.jsx)(`p`,{className:`auth-note`,children:`If your address changes later, paste the new address into the console again. Nothing else needs to change.`}),S?(0,C.jsx)(`ul`,{className:`plugins-list`,children:r.files.map(e=>(0,C.jsxs)(`li`,{children:[(0,C.jsx)(`a`,{href:`/api/alexa/package/${e}`,download:e,children:e}),` `,(0,C.jsx)(`small`,{className:`auth-note`,children:Hd[e]??``})]},e))}):r&&r.endpoint&&(0,C.jsx)(`p`,{className:`auth-note`,children:`Save an invocation name first; the files are made with it.`}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Skill ID`}),(0,C.jsx)(`input`,{value:e.skillId,autoComplete:`off`,onChange:n=>t({...e,skillId:n.target.value}),placeholder:`amzn1.ask.skill.…`,style:b})]}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Invocation name`}),(0,C.jsx)(`input`,{value:e.invocationName,autoComplete:`off`,onChange:n=>t({...e,invocationName:n.target.value}),placeholder:`jarvis assistant`,style:b})]}),y&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:y}),(0,C.jsxs)(`details`,{children:[(0,C.jsx)(`summary`,{className:`plugins-heading`,children:`Advanced`}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Skill name`}),(0,C.jsx)(`input`,{value:e.skillName,onChange:n=>t({...e,skillName:n.target.value}),style:b})]}),(0,C.jsx)(`div`,{className:`settings-field`,role:`group`,"aria-label":`Languages`,children:Object.entries(Ud).map(([n,r])=>(0,C.jsxs)(`label`,{className:`settings-check`,children:[(0,C.jsx)(`input`,{type:`checkbox`,checked:e.locales.includes(n),onChange:r=>{let i=r.target.checked?[...e.locales,n]:e.locales.filter(e=>e!==n);i.length>0&&t({...e,locales:Object.keys(Ud).filter(e=>i.includes(e))})}}),(0,C.jsx)(`span`,{children:r})]},n))}),(0,C.jsx)(Ld,{label:`Seconds to work on an answer`,value:e.answerSeconds,min:2,max:7.5,step:.5,onChange:n=>t({...e,answerSeconds:n})}),(0,C.jsx)(Ld,{label:`Minutes to keep a late answer`,value:e.holdMinutes,min:1,max:60,onChange:n=>t({...e,holdMinutes:n})}),(0,C.jsx)(Ld,{label:`Seconds to wait for your yes on your phone`,value:e.permissionSeconds,min:30,max:600,onChange:n=>t({...e,permissionSeconds:n})}),(0,C.jsx)(Ld,{label:`Requests a minute allowed`,value:e.requestsPerMinute,min:10,max:600,onChange:n=>t({...e,requestsPerMinute:n})}),(0,C.jsx)(Ld,{label:`Echo devices allowed`,value:e.maxDevices,min:1,max:50,onChange:n=>t({...e,maxDevices:n})}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Extra tools a voice may use without asking (one per line)`}),(0,C.jsx)(`textarea`,{rows:2,value:e.extraVoiceTools.join(`
66
+ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let n of e.seen.entries()){let r=n[1];if(t===n[0]){a(n);continue}if(e.external){let r=e.external.registry.get(n[0])?.id;if(t!==n[0]&&r){a(n);continue}}if(e.metadataRegistry.get(n[0])?.id){a(n);continue}if(r.cycle){a(n);continue}r.count>1&&e.reused===`ref`&&a(n)}e.external&&(e.sharedDefsExtractedFor=e.external)}function ks(e){let t=e.anyOf;if(!Array.isArray(t)||t.length===0||e.type!==void 0)return;let n=[];for(let e of t){if(!e||typeof e!=`object`)return;ks(e);let t=Object.keys(e);if(t.length!==1||t[0]!==`type`)return;let r=e.type;for(let e of Array.isArray(r)?r:[r]){if(typeof e!=`string`)return;n.includes(e)||n.push(e)}}delete e.anyOf,e.type=n.length===1?n[0]:n}var As=new Set([`type`,`properties`,`required`,`additionalProperties`]),js=[`oneOf`,`anyOf`];function Ms(e){let t=e.additionalProperties;return t===void 0||t===!1||typeof t!=`object`||!t?null:Object.keys(t).length?t:null}function Ns(e){let t=[];for(let n of e){if(typeof n!=`object`||n.type!==`object`)return null;for(let e in n)if(!As.has(e))return null;t.push(n)}let n={},r=new Set;for(let e of t){for(let r in e.properties){if(Object.prototype.hasOwnProperty.call(n,r))continue;let e=[];for(let n of t){let t=n.properties?.[r]??Ms(n);t!=null&&(e.some(e=>JSON.stringify(e)===JSON.stringify(t))||e.push(t))}Ft(n,r,e.length===1?e[0]:Ns(e)??{allOf:e})}for(let t of e.required??[])r.add(t)}let i={type:`object`,properties:n};if(r.size&&(i.required=[...r]),t.every(e=>e.additionalProperties===!1))i.additionalProperties=!1;else{let e=[];for(let n of t){let t=Ms(n);t&&!e.some(e=>JSON.stringify(e)===JSON.stringify(t))&&e.push(t)}e.length===1?i.additionalProperties=e[0]:e.length>1&&(i.additionalProperties={allOf:e})}return i}function Ps(e){let t=e.allOf;if(!Array.isArray(t)||t.length<2)return;for(let t of As)if(t in e)return;let n=t.filter(e=>js.some(t=>Array.isArray(e[t]))),r=null;if(!n.length)r=Ns(t);else{let e=n[0],i=js.find(t=>Array.isArray(e[t]));if(Object.keys(e).length!==1)return;let a=t.filter(t=>t!==e),o=e[i].map(e=>Ns([...a,e]));if(o.some(e=>!e))return;r={[i]:o}}r&&(delete e.allOf,Cs(e,r))}function Fs(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=t=>{let n=e.seen.get(t);if(n.ref===null)return;let i=n.def??n.schema,a={...i},o=n.ref;if(n.ref=null,o){r(o);let n=e.seen.get(o),s=n.schema;if(s.$ref&&(e.target===`draft-07`||e.target===`draft-04`||e.target===`openapi-3.0`)?(i.allOf=i.allOf??[],i.allOf.push(s)):Cs(i,s),Cs(i,a),t._zod.parent===o)for(let e in i)e!==`$ref`&&e!==`allOf`&&(e in a||delete i[e]);if(s.$ref&&n.def)for(let e in i)e!==`$ref`&&e!==`allOf`&&e in n.def&&JSON.stringify(i[e])===JSON.stringify(n.def[e])&&delete i[e]}let s=t._zod.parent;if(s&&s!==o){r(s);let t=e.seen.get(s);if(t?.schema.$ref&&(i.$ref=t.schema.$ref,t.def))for(let e in i)e!==`$ref`&&e!==`allOf`&&e in t.def&&JSON.stringify(i[e])===JSON.stringify(t.def[e])&&delete i[e]}e.override({zodSchema:t,jsonSchema:i,path:n.path??[]})};if(!e.external||e.sharedEmitDoneFor!==e.external){for(let t of[...e.seen.entries()].reverse())r(t[0]);if(e.target!==`openapi-3.0`)for(let t of e.seen.entries())ks(t[1].def??t[1].schema);for(let t of e.deferred)t();if(e.intersections.length){let t=new Map;for(let n of e.seen.values())for(let e of[n.schema,n.def]){let n=e?.allOf;if(!Array.isArray(n))continue;let r=t.get(n);r?r.push(e):t.set(n,[e])}for(let n of e.intersections)for(let e of t.get(n)??[])Ps(e)}}let i={};if(e.target===`draft-2020-12`?i.$schema=`https://json-schema.org/draft/2020-12/schema`:e.target===`draft-07`?i.$schema=`http://json-schema.org/draft-07/schema#`:e.target===`draft-04`?i.$schema=`http://json-schema.org/draft-04/schema#`:e.target,e.external?.uri){let n=e.external.registry.get(t)?.id;if(!n)throw Error("Schema is missing an `id` property");i.$id=e.external.uri(n)}Cs(i,n.defId?n.schema:n.def??n.schema);let a=e.metadataRegistry.get(t)?.id;a!==void 0&&i.id===a&&delete i.id;let o=e.external?.defs??{};if(!e.external||e.sharedEmitDoneFor!==e.external)for(let t of e.seen.entries()){let e=t[1];e.def&&e.defId&&(e.def.id===e.defId&&delete e.def.id,Ft(o,e.defId,e.def))}e.external&&(e.sharedEmitDoneFor=e.external),e.external||Object.keys(o).length>0&&(e.target===`draft-2020-12`?i.$defs=o:i.definitions=o);try{let n=JSON.parse(JSON.stringify(i));return Object.defineProperty(n,"~standard",{value:{...t[`~standard`],jsonSchema:{input:Rs(t,`input`,e.processors),output:Rs(t,`output`,e.processors)}},enumerable:!1,writable:!1}),n}catch{throw Error(`Error converting schema to JSON.`)}}function Is(e,t){let n=t??{seen:new Set};if(n.seen.has(e))return!1;n.seen.add(e);let r=e._zod.def;if(r.type===`transform`)return!0;if(r.type===`array`)return Is(r.element,n);if(r.type===`set`)return Is(r.valueType,n);if(r.type===`lazy`)return Is(r.getter(),n);if(r.type===`promise`||r.type===`optional`||r.type===`nonoptional`||r.type===`nullable`||r.type===`readonly`||r.type==="default"||r.type===`prefault`||r.type===`catch`)return Is(r.innerType,n);if(r.type===`intersection`)return Is(r.left,n)||Is(r.right,n);if(r.type===`record`||r.type===`map`)return Is(r.keyType,n)||Is(r.valueType,n);if(r.type===`pipe`)return e._zod.traits.has(`$ZodCodec`)?!0:Is(r.in,n)||Is(r.out,n);if(r.type===`object`){for(let e in r.shape)if(Is(r.shape[e],n))return!0;return!1}if(r.type===`union`){for(let e of r.options)if(Is(e,n))return!0;return!1}if(r.type===`tuple`){for(let e of r.items)if(Is(e,n))return!0;return!!(r.rest&&Is(r.rest,n))}return!1}var Ls=(e,t={})=>n=>{let r=ws({...n,processors:t});return Es(e,r),Os(r,e),Fs(r,e)},Rs=(e,t,n={})=>r=>{let{libraryOptions:i,target:a}=r??{},o=ws({...i??{},target:a,io:t,processors:n});return Es(e,o),Os(o,e),Fs(o,e)},zs=(e,t,n)=>{(e[t]===void 0||n>e[t])&&(e[t]=n)},Bs=(e,t,n)=>{(e[t]===void 0||n<e[t])&&(e[t]=n)},Vs=(e,t)=>{zs(e,`minimum`,t),Bs(e,`maximum`,t)},Hs=(e,t)=>{e.multipleOf??=[],e.multipleOf.includes(t)||e.multipleOf.push(t)},Us=(e,t)=>{e.patterns??=new Set,e.patterns.add(t)},Ws=(e,t)=>{e.mime=e.mime?e.mime.filter(e=>t.includes(e)):[...t]},Gs=(e,t)=>{e.format=t,t.includes(`int`)&&(e.isInt=!0)},Ks=(e,t)=>zs(e,`minimum`,t.minimum),qs=(e,t)=>Bs(e,`maximum`,t.maximum),Js=e=>(t,n)=>{Gs(t,n.format);let[r,i]=e[n.format];zs(t,`minimum`,r),Bs(t,`maximum`,i)},Ys={greater_than:(e,t)=>zs(e,t.inclusive?`minimum`:`exclusiveMinimum`,t.value),less_than:(e,t)=>Bs(e,t.inclusive?`maximum`:`exclusiveMaximum`,t.value),multiple_of:(e,t)=>Hs(e,t.value),number_format:Js(tn),bigint_format:Js(nn),min_length:Ks,max_length:qs,length_equals:(e,t)=>Vs(e,t.length),min_size:Ks,max_size:qs,size_equals:(e,t)=>Vs(e,t.size),string_format:(e,t)=>{Gs(e,t.format),t.pattern&&Us(e,t.pattern),(t.format===`base64`||t.format===`base64url`)&&(e.contentEncoding=t.format),(t.local||t.precision===-1)&&(e.laxFormat=!0)},mime_type:(e,t)=>Ws(e,t.mime)};function Xs(e){let t={},n=e._zod.def,r=e._zod.traits.has(`$ZodCheck`)?[e,...n.checks??[]]:n.checks??[];for(let e of r)Ys[e._zod.def.check]?.(t,e._zod.def);let i=e._zod.bag;i.minimum!==void 0&&zs(t,`minimum`,i.minimum),i.exclusiveMinimum!==void 0&&zs(t,`exclusiveMinimum`,i.exclusiveMinimum),i.maximum!==void 0&&Bs(t,`maximum`,i.maximum),i.exclusiveMaximum!==void 0&&Bs(t,`exclusiveMaximum`,i.exclusiveMaximum),i.multipleOf!==void 0&&Hs(t,i.multipleOf),i.format!==void 0&&(t.format??=i.format,i.format.includes(`int`)&&(t.isInt=!0)),i.mime&&Ws(t,i.mime);for(let e of i.patterns??[])Us(t,e);return t}var Zs={guid:`uuid`,url:`uri`,datetime:`date-time`,json_string:`json-string`,regex:``},Qs=new Map([[ta,Lr],[ra,Rr]]),$s=e=>Qs.get(e)??e,ec=(e,t,n,r)=>{let i=n;i.type=`string`;let{minimum:a,maximum:o,format:s,patterns:c,contentEncoding:l,laxFormat:u}=Xs(e);if(typeof a==`number`&&(i.minLength=a),typeof o==`number`&&(i.maxLength=o),s&&(i.format=Zs[s]??s,i.format===``&&delete i.format,(s===`time`||u)&&delete i.format),l&&(i.contentEncoding=l),c&&c.size>0){let e=[...c].map($s);e.length===1?i.pattern=e[0].source:e.length>1&&(i.allOf=[...e.map(e=>({...t.target===`draft-07`||t.target===`draft-04`||t.target===`openapi-3.0`?{type:`string`}:{},pattern:e.source}))])}},tc=(e,t,n,r)=>{let i=n,{minimum:a,maximum:o,multipleOf:s,exclusiveMaximum:c,exclusiveMinimum:l,isInt:u}=Xs(e);i.type=u?`integer`:`number`;let d=typeof l==`number`&&l>=(a??-1/0),f=typeof c==`number`&&c<=(o??1/0),p=t.target===`draft-04`||t.target===`openapi-3.0`;if(d?p?(i.minimum=l,i.exclusiveMinimum=!0):i.exclusiveMinimum=l:typeof a==`number`&&(i.minimum=a),f?p?(i.maximum=c,i.exclusiveMaximum=!0):i.exclusiveMaximum=c:typeof o==`number`&&(i.maximum=o),s){let n=new Set;for(let a of s)Number.isFinite(a)&&a!==0?n.add(Math.abs(a)):Ts(e,t,i,r,`A multipleOf divisor of ${a} cannot be represented in JSON Schema`);let[a,...o]=n;a!==void 0&&(i.multipleOf=a),o.length&&(i.allOf=[...i.allOf??[],...o.map(e=>({multipleOf:e}))])}},nc=(e,t,n,r)=>{n.type=`boolean`},rc=(e,t,n,r)=>{n.not={}},ic=(e,t,n,r)=>{let i=e._zod.def,a=Dt(i.entries);if(a.length===0){n.not={};return}a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),n.enum=a},ac=(e,t,n,r)=>{let i=e._zod.def;if(i.values.length===0){n.not={};return}let a=[];for(let o of i.values)if(o===void 0){if(Ts(e,t,n,r,"Literal `undefined` cannot be represented in JSON Schema"))return}else if(typeof o==`bigint`){if(Ts(e,t,n,r,`BigInt literals cannot be represented in JSON Schema`))return;a.push(Number(o))}else a.push(o);if(a.length!==0){if(a.length===1){let e=a[0];n.type=e===null?`null`:typeof e,t.target===`draft-04`||t.target===`openapi-3.0`?n.enum=[e]:n.const=e}else a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),a.every(e=>typeof e==`boolean`)&&(n.type=`boolean`),a.every(e=>e===null)&&(n.type=`null`),n.enum=a}},oc=(e,t,n,r)=>{Ts(e,t,n,r,`Custom types cannot be represented in JSON Schema`)},sc=(e,t,n,r)=>{Ts(e,t,n,r,`Transforms cannot be represented in JSON Schema`)},cc=(e,t,n,r)=>{let i=n,a=e._zod.def,{minimum:o,maximum:s}=Xs(e);typeof o==`number`&&(i.minItems=o),typeof s==`number`&&(i.maxItems=s),i.type=`array`,i.items=Es(a.element,t,{...r,path:[...r.path,`items`]})};function lc(e){let t=e._zod.def;return t.type===`pipe`&&t.in._zod.traits.has(`$ZodTransform`)?lc(t.out):t.type===`catch`?lc(t.innerType):e._zod.optin}var uc=(e,t,n,r)=>{let i=n,a=e._zod.def,o=a.shape;if(Object.getOwnPropertySymbols(o).length&&Ts(e,t,i,r,`Symbol keys cannot be represented in JSON Schema`))return;i.type=`object`,i.properties={};for(let e in o)Ft(i.properties,e,Es(o[e],t,{...r,path:[...r.path,`properties`,e]}));let s=[];for(let e of Object.keys(o)){let n=a.shape[e];(t.io===`input`?lc(n)===void 0:n._zod.optout===void 0)&&s.push(e)}s.length>0&&(i.required=s),a.catchall?._zod.def.type===`never`?i.additionalProperties=!1:a.catchall?a.catchall&&(i.additionalProperties=Es(a.catchall,t,{...r,path:[...r.path,`additionalProperties`]})):t.io===`output`&&(i.additionalProperties=!1)},dc=(e,t,n,r)=>{let i=e._zod.def,a=i.inclusive===!1,o=i.options.map((e,n)=>Es(e,t,{...r,path:[...r.path,a?`oneOf`:`anyOf`,n]}));a?n.oneOf=o:n.anyOf=o},fc=(e,t,n,r)=>{let i=e._zod.def,a=Es(i.left,t,{...r,path:[...r.path,`allOf`,0]}),o=Es(i.right,t,{...r,path:[...r.path,`allOf`,1]}),s=e=>`allOf`in e&&Object.keys(e).length===1,c=[...s(a)?a.allOf:[a],...s(o)?o.allOf:[o]];n.allOf=c,t.intersections.push(c)};function pc(e,t,n){if(t.$ref){if(n.has(t))return t;n.add(t);let r=e.get(t)?.def;if(!r)return t;let i=pc(e,r,n);return i===r?t:i}for(let r of[`anyOf`,`oneOf`]){let i=t[r];if(!Array.isArray(i))continue;let a=i.map(t=>pc(e,t,n));a.some((e,t)=>e!==i[t])&&(t={...t,[r]:a})}let r=Array.isArray(t.type)?t.type:[t.type],i=!r.includes(`string`)&&r.some(e=>e===`number`||e===`integer`),a=t.enum??(t.const===void 0?void 0:[t.const]);if(!i&&!a?.some(e=>typeof e==`number`))return t;let{minimum:o,maximum:s,exclusiveMinimum:c,exclusiveMaximum:l,multipleOf:u,format:d,id:f,...p}=t;return p.enum?p.enum=p.enum.map(e=>typeof e==`number`?String(e):e):typeof p.const==`number`&&(p.const=String(p.const)),i?(p.type=`string`,a||(p.pattern=(r.includes(`number`)?Yr:Jr).source),p):p}var mc=new WeakMap;function hc(e){let t=new Map;for(let n of e.seen.values())n.def&&!t.has(n.schema)&&t.set(n.schema,n);let n=new Map;for(let r of mc.get(e)??[]){let i=e.seen.get(r),a=(i?.def??i?.schema)?.propertyNames;if(!a||a===!0||n.has(a))continue;let o=pc(t,a,new Set);o!==a&&n.set(a,o)}if(n.size)for(let t of e.seen.values())for(let e of[t.schema,t.def]){let t=e&&n.get(e.propertyNames);t&&(e.propertyNames=t)}}var gc=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`;let o=a.keyType,s=Xs(o).patterns;if(a.mode===`loose`&&s&&s.size>0){let e=Es(a.valueType,t,{...r,path:[...r.path,`patternProperties`,`*`]});i.patternProperties={};for(let t of s)Ft(i.patternProperties,$s(t).source,e)}else{if(t.target===`draft-07`||t.target===`draft-2020-12`){i.propertyNames=Es(a.keyType,t,{...r,path:[...r.path,`propertyNames`]});let n=mc.get(t);n||(n=[],mc.set(t,n),t.deferred.push(()=>hc(t))),n.push(e)}i.additionalProperties=Es(a.valueType,t,{...r,path:[...r.path,`additionalProperties`]})}let c=o._zod.values,l=t.io===`input`&&lc(a.valueType)!==void 0;if(c&&!a.partial&&!l){let e=[...c].filter(e=>typeof e==`string`||typeof e==`number`);e.length>0&&(i.required=e.map(String))}},_c=(e,t,n,r)=>{let i=e._zod.def,a=Es(i.innerType,t,r),o=t.seen.get(e);t.target===`openapi-3.0`?(o.ref=i.innerType,n.nullable=!0):n.anyOf=[a,{type:`null`}]},vc=(e,t,n,r)=>{let i=e._zod.def;Es(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},yc=Symbol();function bc(e,t,n,r,i){let a=!1,o=JSON.stringify(e,(e,t)=>typeof t==`bigint`?(a=!0,null):t);return a?(Ts(t,n,r,i,`BigInt defaults cannot be represented in JSON Schema`),yc):JSON.parse(o)}var xc=(e,t,n,r)=>{let i=e._zod.def;Es(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o=bc(i.defaultValue,e,t,n,r);o!==yc&&(n.default=o)},Sc=(e,t,n,r)=>{let i=e._zod.def;Es(i.innerType,t,r);let a=t.seen.get(e);if(a.ref=i.innerType,t.io!==`input`)return;let o=bc(i.defaultValue,e,t,n,r);o!==yc&&(n._prefault=o)},Cc=(e,t,n,r)=>{let i=e._zod.def;Es(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o;try{o=i.catchValue(void 0)}catch{Ts(e,t,n,r,`Dynamic catch values are not supported in JSON Schema`);return}n.default=o},wc=(e,t,n,r)=>{let i=e._zod.def,a=i.in._zod.traits.has(`$ZodTransform`),o=t.io===`input`?a?i.out:i.in:i.out;Es(o,t,r);let s=t.seen.get(e);s.ref=o},Tc=(e,t,n,r)=>{let i=e._zod.def;Es(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.readOnly=!0},Ec=(e,t,n,r)=>{let i=e._zod.def;Es(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},Dc=new WeakSet([Object.prototype,Error.prototype]);function Oc(e,t,n){Object.defineProperty(e,t,{configurable:!0,enumerable:!1,get(){let e=n(this);return Object.defineProperty(this,t,{value:e,configurable:!0,writable:!0}),e},set(e){Object.defineProperty(this,t,{value:e,configurable:!0,writable:!0})}})}var kc=K(`ZodError`,(e,t)=>{Zn.init(e,t),e.name=`ZodError`;let n=Object.getPrototypeOf(e);Dc.has(n)||(Dc.add(n),Oc(n,`format`,e=>t=>er(e,t)),Oc(n,`flatten`,e=>t=>$n(e,t)),Oc(n,`addIssue`,e=>t=>{e.issues.push(t),e.message=JSON.stringify(e.issues,kt,2)}),Oc(n,`addIssues`,e=>t=>{e.issues.push(...t),e.message=JSON.stringify(e.issues,kt,2)}),Object.defineProperty(n,"isEmpty",{configurable:!0,enumerable:!1,get(){return this.issues.length===0}}))},void 0,{Parent:Error}),Ac=nr(kc),jc=rr(kc),Mc=ir(kc),Nc=or(kc),Pc=fr(kc),Fc=pr(kc),Ic=mr(kc),Lc=hr(kc),Rc=gr(kc),zc=_r(kc),Bc=vr(kc),Vc=yr(kc);function Hc(){Un.localeError||Wn(ho())}function Uc(){Un.memoizer||Wn({memoizer:fo()})}var Wc=K(`ZodType`,(e,t)=>(Hc(),yi.init(e,t),e.def=t,e.type=t.type,e),{check(...e){let t=this.def;return this.clone(Ht(t,{checks:[...t.checks??[],...e.map(e=>typeof e==`function`?{_zod:{check:e,def:{check:`custom`},onattach:[]}}:e)]}),{parent:!0})},with(...e){return this.check(...e)},clone(e,t){return Qt(this,e,t)},brand(){return this},register(e,t){return e.add(this,t),this},refine(e,t){return this.check(ou(e,t))},superRefine(e,t){return this.check(su(e,t))},overwrite(e){return this.check(ps(e))},optional(){return Hl(this)},exactOptional(){return Wl(this)},nullable(){return Kl(this)},nullish(){return Hl(Kl(this))},nonoptional(e){return Ql(this,e)},array(){return Dl(this)},or(e){return Al([this,e])},and(e){return Pl(this,e)},transform(e){return nu(this,Bl(e))},default(e){return Jl(this,e)},prefault(e){return Xl(this,e)},catch(e){return eu(this,e)},pipe(e){return nu(this,e)},readonly(){return iu(this)},describe(e){let t=this.clone();return yo.add(t,{description:e}),t},meta(...e){if(e.length===0)return yo.get(this);let t=this.clone();return yo.add(t,e[0]),t},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(e,...t){return t.length===0?e(this):e(this,...t)},get"~standard"(){return En(this,`~standard`,{...Si(this),jsonSchema:{input:Rs(this,`input`),output:Rs(this,`output`)}})},set"~standard"(e){Tn(this,`~standard`,e)},parse:function e(t,n){return Ac(this,t,n,{callee:e})},parseAsync:async function e(t,n){return await jc(this,t,n,{callee:e})},safeParse(e,t){return Mc(this,e,t)},async safeParseAsync(e,t){return Nc(this,e,t)},get spa(){return this?.safeParseAsync},set spa(e){Tn(this,`spa`,e)},validate(e,t){return lr(this,e,t)},validateAsync(e,t){return dr(this,e,t)},encode:function e(t,n){return Pc(this,t,n,{callee:e})},decode:function e(t,n){return Fc(this,t,n,{callee:e})},encodeAsync:async function e(t,n){return await Ic(this,t,n,{callee:e})},decodeAsync:async function e(t,n){return await Lc(this,t,n,{callee:e})},safeEncode(e,t){return Rc(this,e,t)},safeDecode(e,t){return zc(this,e,t)},async safeEncodeAsync(e,t){return Bc(this,e,t)},async safeDecodeAsync(e,t){return Vc(this,e,t)},toJSONSchema(e){return Ls(this,{})(e)},get description(){return yo.get(this)?.description},get _def(){return this._zod.def}}),Gc=K(`_ZodString`,(e,t)=>{Ci.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ec(e,t,n,r)},Dn({format:e=>Xs(e).format??null,minLength:e=>Xs(e).minimum??null,maxLength:e=>Xs(e).maximum??null},{regex(...e){return this.check(ss(...e))},includes(...e){return this.check(us(...e))},startsWith(...e){return this.check(ds(...e))},endsWith(...e){return this.check(fs(...e))},min(...e){return this.check(as(...e))},max(...e){return this.check(is(...e))},length(...e){return this.check(os(...e))},nonempty(...e){return this.check(as(1,...e))},lowercase(e){return this.check(cs(e))},uppercase(e){return this.check(ls(e))},trim(){return this.check(hs())},normalize(...e){return this.check(ms(...e))},toLowerCase(){return this.check(gs())},toUpperCase(){return this.check(_s())},slugify(){return this.check(vs())}})),Kc=K(`ZodString`,(e,t)=>{Ci.init(e,t),Gc.init(e,t)},{email(e){return this.check(So(Qc,e))},url(e){return this.check(Oo(tl,e))},jwt(e){return this.check(Uo(gl,e))},emoji(e){return this.check(ko(nl,e))},guid(e){return this.check(Co($c,e))},uuid(e){return this.check(wo(el,e))},uuidv4(e){return this.check(To(el,e))},uuidv6(e){return this.check(Eo(el,e))},uuidv7(e){return this.check(Do(el,e))},nanoid(e){return this.check(Ao(rl,e))},cuid(e){return this.check(jo(il,e))},cuid2(e){return this.check(Mo(al,e))},ulid(e){return this.check(No(ol,e))},base64(e){return this.check(Bo(pl,e))},base64url(e){return this.check(Vo(ml,e))},xid(e){return this.check(Po(sl,e))},ksuid(e){return this.check(Fo(cl,e))},ipv4(e){return this.check(Io(ll,e))},ipv6(e){return this.check(Lo(ul,e))},cidrv4(e){return this.check(Ro(dl,e))},cidrv6(e){return this.check(zo(fl,e))},e164(e){return this.check(Ho(hl,e))},datetime(e){return this.check(Wo(Jc,e))},date(e){return this.check(Go(Yc,e))},time(e){return this.check(Ko(Xc,e))},duration(e){return this.check(qo(Zc,e))}});function q(e){return xo(Kc,e)}var qc=K(`ZodStringFormat`,(e,t)=>{wi.init(e,t),Gc.init(e,t)}),Jc=K(`ZodISODateTime`,(e,t)=>{Ui.init(e,t),qc.init(e,t)}),Yc=K(`ZodISODate`,(e,t)=>{Wi.init(e,t),qc.init(e,t)}),Xc=K(`ZodISOTime`,(e,t)=>{Gi.init(e,t),qc.init(e,t)}),Zc=K(`ZodISODuration`,(e,t)=>{Ki.init(e,t),qc.init(e,t)}),Qc=K(`ZodEmail`,(e,t)=>{Di.init(e,t),qc.init(e,t)}),$c=K(`ZodGUID`,(e,t)=>{Ti.init(e,t),qc.init(e,t)}),el=K(`ZodUUID`,(e,t)=>{Ei.init(e,t),qc.init(e,t)}),tl=K(`ZodURL`,(e,t)=>{Fi.init(e,t),qc.init(e,t)}),nl=K(`ZodEmoji`,(e,t)=>{Ii.init(e,t),qc.init(e,t)}),rl=K(`ZodNanoID`,(e,t)=>{Li.init(e,t),qc.init(e,t)}),il=K(`ZodCUID`,(e,t)=>{Ri.init(e,t),qc.init(e,t)}),al=K(`ZodCUID2`,(e,t)=>{zi.init(e,t),qc.init(e,t)}),ol=K(`ZodULID`,(e,t)=>{Bi.init(e,t),qc.init(e,t)}),sl=K(`ZodXID`,(e,t)=>{Vi.init(e,t),qc.init(e,t)}),cl=K(`ZodKSUID`,(e,t)=>{Hi.init(e,t),qc.init(e,t)}),ll=K(`ZodIPv4`,(e,t)=>{qi.init(e,t),qc.init(e,t)}),ul=K(`ZodIPv6`,(e,t)=>{Xi.init(e,t),qc.init(e,t)}),dl=K(`ZodCIDRv4`,(e,t)=>{Zi.init(e,t),qc.init(e,t)}),fl=K(`ZodCIDRv6`,(e,t)=>{$i.init(e,t),qc.init(e,t)}),pl=K(`ZodBase64`,(e,t)=>{na.init(e,t),qc.init(e,t)}),ml=K(`ZodBase64URL`,(e,t)=>{aa.init(e,t),qc.init(e,t)}),hl=K(`ZodE164`,(e,t)=>{oa.init(e,t),qc.init(e,t)}),gl=K(`ZodJWT`,(e,t)=>{ca.init(e,t),qc.init(e,t)}),_l=K(`ZodNumber`,(e,t)=>{la.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>tc(e,t,n,r),e.isFinite=!0},Dn({minValue:e=>{let{minimum:t,exclusiveMinimum:n}=Xs(e);return Math.max(t??-1/0,n??-1/0)},maxValue:e=>{let{maximum:t,exclusiveMaximum:n}=Xs(e);return Math.min(t??1/0,n??1/0)},isInt:e=>{let{isInt:t,multipleOf:n}=Xs(e);return!!t||!!n?.some(Number.isSafeInteger)},format:e=>Xs(e).format??null},{gt(e,t){return this.check(ts(e,t))},gte(e,t){return this.check(ns(e,t))},min(e,t){return this.check(ns(e,t))},lt(e,t){return this.check($o(e,t))},lte(e,t){return this.check(es(e,t))},max(e,t){return this.check(es(e,t))},int(e){return this.check(yl(e))},safe(e){return this.check(yl(e))},positive(e){return this.check(ts(0,e))},nonnegative(e){return this.check(ns(0,e))},negative(e){return this.check($o(0,e))},nonpositive(e){return this.check(es(0,e))},multipleOf(e,t){return this.check(rs(e,t))},step(e,t){return this.check(rs(e,t))},finite(){return this}}));function J(e){return Jo(_l,e)}var vl=K(`ZodNumberFormat`,(e,t)=>{ua.init(e,t),_l.init(e,t)});function yl(e){return Yo(vl,e)}var bl=K(`ZodBoolean`,(e,t)=>{da.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>nc(e,t,n,r)});function xl(e){return Xo(bl,e)}var Sl=K(`ZodUnknown`,(e,t)=>{fa.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(e,t,n)=>void 0});function Cl(){return Zo(Sl)}var wl=K(`ZodNever`,(e,t)=>{pa.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>rc(e,t,n,r)});function Tl(e){return Qo(wl,e)}var El=K(`ZodArray`,(e,t)=>{Uc(),ha.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>cc(e,t,n,r),e.element=t.element},{min(e,t){return this.check(as(e,t))},nonempty(e){return this.check(as(1,e))},max(e,t){return this.check(is(e,t))},length(e,t){return this.check(os(e,t))},unwrap(){return this.element}});function Dl(e,t){return ys(El,e,t)}var Ol=K(`ZodObject`,(e,t)=>{Uc(),xa.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>uc(e,t,n,r),Pn(e,`shape`,e=>e._zod.def.shape,!1)},{keyof(){return X(Object.keys(this._zod.def.shape))},catchall(e){return this.clone(Ht(this._zod.def,{catchall:e}))},passthrough(){return this.clone(Ht(this._zod.def,{catchall:Cl()}))},loose(){return this.clone(Ht(this._zod.def,{catchall:Cl()}))},strict(){return this.clone(Ht(this._zod.def,{catchall:Tl()}))},strip(){return this.clone(Ht(this._zod.def,{catchall:void 0}))},extend(e){return sn(this,e)},safeExtend(e){return ln(this,e)},merge(e){return un(this,e)},pick(e){return rn(this,e)},omit(e){return on(this,e)},partial(...e){return dn(Vl,this,e[0])},exactPartial(...e){return dn(Ul,this,e[0],`exactPartial`)},required(...e){return fn(Zl,this,e[0])}});function Y(e,t){return new Ol({type:`object`,shape:e??{},...G(t)})}var kl=K(`ZodUnion`,(e,t)=>{Ca.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>dc(e,t,n,r),e.options=t.options});function Al(e,t){return new kl({type:`union`,options:e,...G(t)})}var jl=K(`ZodDiscriminatedUnion`,(e,t)=>{kl.init(e,t),Ta.init(e,t)});function Ml(e,t,n){return new jl({type:`union`,options:t,discriminator:e,...G(n)})}var Nl=K(`ZodIntersection`,(e,t)=>{Ea.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>fc(e,t,n,r)});function Pl(e,t){return new Nl({type:`intersection`,left:e,right:t})}var Fl=K(`ZodRecord`,(e,t)=>{Uc(),ka.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>gc(e,t,n,r),e.keyType=t.keyType,e.valueType=t.valueType});function Il(e,t,n){return!t||!t._zod?new Fl({type:`record`,keyType:q(),valueType:e,...G(t)}):new Fl({type:`record`,keyType:e,valueType:t,...G(n)})}var Ll=K(`ZodEnum`,(e,t)=>{Aa.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ic(e,t,n,r),e.enum=t.entries,e.options=[...e._zod.values];let n=new Set(Object.keys(t.entries));e.extract=(e,r)=>{let i={};for(let r of e)if(n.has(r))i[r]=t.entries[r];else throw Error(`Key ${r} not found in enum`);return new Ll({...t,checks:[],...G(r),entries:i})},e.exclude=(e,r)=>{let i={...t.entries};for(let t of e)if(n.has(t))delete i[t];else throw Error(`Key ${t} not found in enum`);return new Ll({...t,checks:[],...G(r),entries:i})}});function X(e,t){return new Ll({type:`enum`,entries:Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e,...G(t)})}var Rl=K(`ZodLiteral`,(e,t)=>{ja.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ac(e,t,n,r),e.values=new Set(t.values),Object.defineProperty(e,"value",{get(){if(t.values.length>1)throw Error("This schema contains multiple valid literal values. Use `.values` instead.");return t.values[0]}})});function Z(e,t){return new Rl({type:`literal`,values:Array.isArray(e)?e:[e],...G(t)})}var zl=K(`ZodTransform`,(e,t)=>{Uc(),Ma.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>sc(e,t,n,r),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new Hn(e.constructor.name);n.addIssue=r=>{if(typeof r==`string`)n.issues.push(Cn(r,n.value,t));else{let t=r;t.fatal&&(t.continue=!1),t.code??=`custom`,`input`in t||(t.input=n.value),t.inst??=e,n.issues.push(Cn(t))}};let i=t.transform(n.value,n);return i instanceof Promise?i.then(e=>(n.value=e,n)):(n.value=i,n)}});function Bl(e){return new zl({type:`transform`,transform:e})}var Vl=K(`ZodOptional`,(e,t)=>{Pa.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ec(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Hl(e){return new Vl({type:`optional`,innerType:e})}var Ul=K(`ZodExactOptional`,(e,t)=>{Fa.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ec(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Wl(e){return new Ul({type:`optional`,innerType:e})}var Gl=K(`ZodNullable`,(e,t)=>{Ia.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>_c(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Kl(e){return new Gl({type:`nullable`,innerType:e})}var ql=K(`ZodDefault`,(e,t)=>{La.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>xc(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function Jl(e,t){return new ql({type:`default`,innerType:e,get defaultValue(){return typeof t==`function`?t():Yt(t)}})}var Yl=K(`ZodPrefault`,(e,t)=>{za.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Sc(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Xl(e,t){return new Yl({type:`prefault`,innerType:e,get defaultValue(){return typeof t==`function`?t():Yt(t)}})}var Zl=K(`ZodNonOptional`,(e,t)=>{Ba.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>vc(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Ql(e,t){return new Zl({type:`nonoptional`,innerType:e,...G(t)})}var $l=K(`ZodCatch`,(e,t)=>{Ua.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Cc(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function eu(e,t){return new $l({type:`catch`,innerType:e,catchValue:typeof t==`function`?t:In(t)})}var tu=K(`ZodPipe`,(e,t)=>{Wa.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>wc(e,t,n,r),e.in=t.in,e.out=t.out});function nu(e,t){return new tu({type:`pipe`,in:e,out:t})}var ru=K(`ZodReadonly`,(e,t)=>{Ka.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Tc(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function iu(e){return new ru({type:`readonly`,innerType:e})}var au=K(`ZodCustom`,(e,t)=>{Ja.init(e,t),Wc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>oc(e,t,n,r)});function ou(e,t={}){return bs(au,e,t)}function su(e,t){return xs(e,t)}var cu=X([`T0`,`T1`,`T2`,`T3`]);X([`owner`,`guest`,`member`,`voice-device`]);var lu={depth:6,nodes:120,text:2e3,items:200},uu={Row:{props:[`gap`,`wrap`],kids:!0,note:`puts its parts side by side`},Column:{props:[`gap`],kids:!0,note:`stacks its parts`},Grid:{props:[`columns`,`gap`],kids:!0,note:`a grid with this many columns`},JCard:{props:[`cardStyle`,`color`,`padding`],kids:!0,slots:[`header`,`footer`],note:`a card around its parts; cardStyle CornerBracket|Notched|SideRail|GlowBorder`},JHudFrame:{props:[`color`,`systemLabel`,`showTop`,`showBottom`,`showDots`,`showLive`,`showWaveform`,`showTicks`,`showRec`],kids:!0,slots:[`topContent`,`bottomContent`],note:`a HUD frame with bars around its parts`},JHudFrameCard:{props:[`frameStyle`,`color`,`title`,`showStatusDot`,`width`,`height`],kids:!0,note:`a titled frame card around its parts`},JHudBar:{props:[`position`,`color`,`animSpeed`,`systemLabel`,`showDots`,`showWaveform`,`showTicks`,`showLive`,`showRec`,`tickCount`,`tickActive`],kids:!0,note:`a top or bottom HUD bar`},JTabs:{props:[`color`],kids:!0,note:`tabs; put JTab parts inside it`},JTab:{props:[`tabKey`,`label`,`icon`,`badge`,`disabled`],kids:!0,note:`one tab and its panel (inside JTabs); tabKey is unique in its JTabs`},JAccordion:{props:[`title`,`icon`,`badge`,`defaultOpen`,`state`,`color`],kids:!0,note:`a section that opens and closes`},JFormField:{props:[`label`,`error`,`hint`,`required`],kids:!0,note:`a label, hint and error around a field`},JButton:{props:[`shape`,`color`,`size`,`variant`,`loading`,`disabled`],kids:!0,note:`a button as a picture: it does nothing when pressed`},JInput:{props:[`type`,`defaultValue`,`placeholder`,`disabled`,`readOnly`,`error`,`color`,`size`],note:`a text field as a picture (defaultValue shows text in it)`},JTextArea:{props:[`defaultValue`,`placeholder`,`disabled`,`readOnly`,`error`,`rows`,`color`,`size`],note:`a text area as a picture`},JSelect:{props:[`options`,`defaultValue`,`placeholder`,`disabled`,`color`,`size`],note:`options [{value, label}]`},JToggle:{props:[`defaultChecked`,`label`,`disabled`,`color`],note:`a switch`},JCheckbox:{props:[`defaultChecked`,`label`,`disabled`,`color`],note:`a checkbox`},JSlider:{props:[`defaultValue`,`min`,`max`,`step`,`showValue`,`disabled`,`color`],note:`a slider`},JSpinner:{props:[`size`,`color`,`label`,`showLabel`],note:`a loading arc`},JOrb:{props:[`systemName`,`size`,`color`,`state`,`listening`],note:`a pulsing orb`},JDonutChart:{props:[`data`,`size`,`thickness`,`centerValue`,`centerLabel`,`showLegend`],note:`data [{label, value, color?}]; size like 200px`},JRadarChart:{props:[`axes`,`size`,`rings`,`showLabels`],note:`axes [{label, value}]; size like 240px`},JStatCard:{props:[`title`,`value`,`state`,`sub`,`showStatusDot`,`badge`,`badgeColor`,`barValue`,`dataRows`,`color`],note:`value is a string; dataRows [{label, value}]; barValue 0-100`},JProgress:{props:[`value`,`label`,`state`,`variant`,`indeterminate`,`showPercent`,`total`],note:`value 0-100; variant bar|ticks`},JGaugeChart:{props:[`value`,`min`,`max`,`size`,`thickness`,`label`,`displayValue`,`showNeedle`,`showTicks`,`showMinMax`,`ticks`],note:`a radial gauge; size like 200px`},JBarChart:{props:[`data`,`height`,`orientation`,`showGrid`,`showAxisLabels`,`showValues`],note:`data [{label, value}]; height like 220px`},JLineChart:{props:[`data`,`height`,`showArea`,`showDots`,`showAxisLabels`,`showGrid`,`gridLines`],note:`data [{label, value}]; height like 200px`},JSparkline:{props:[`data`,`showArea`,`showTrend`,`height`,`width`],note:`data is a list of numbers; height and width like 40px`},JTable:{props:[`columns`,`rows`,`stateColumn`,`showFooter`,`footerLabel`],note:`columns [{key, label}]; rows [{key: value}]`},JBadge:{props:[`color`,`size`,`shape`,`blink`,`showDot`],kids:!0,note:`a small label; its text is the kids`},JStatusPill:{props:[`state`,`blink`],kids:!0,note:`a status dot and its text (the kids); state active|warning|error|success`},JAlert:{props:[`state`,`title`,`blink`],kids:!0,note:`a banner; its text is the kids`},JDataRow:{props:[`label`,`value`,`barPercent`,`state`],note:`a key, its value and an optional bar 0-100`},JHudLabel:{props:[`variant`,`text`,`subText`,`value`,`color`,`showDot`,`showLine`],note:`a labelled value; variant chip|arc|metric`},JArcMeter:{props:[`level`,`totalArcs`,`color`,`orientation`,`showLabel`,`label`,`showValue`],note:`a segmented level meter`},JArcReactor:{props:[`level`,`size`,`color`,`label`,`animated`],note:`level 0-100`},JHeatmap:{props:[`data`,`color`,`cellSize`,`gap`,`showValue`,`title`],note:`data is rows of [{value}]`},JActivityFeed:{props:[`items`,`maxRows`,`showTime`,`showSource`],note:`items [{id, time?, level?, message, source?}] oldest first`},JKPITicker:{props:[`items`,`speed`,`color`,`height`],note:`items [{label, value, delta?, trend?}]`},JHudClock:{props:[`analog`,`color`,`size`,`showDate`],note:`a clock`},JWaveform:{props:[`barCount`,`color`,`height`,`active`],note:`animated sound bars`},JDivider:{props:[`orientation`,`label`,`showDot`],note:`a line, with a label if given; orientation horizontal|vertical`},JNodeGraph:{props:[`nodes`,`edges`,`height`,`title`,`showLegend`],note:`nodes [{id, label, x, y, type?, color?, sub?, value?, pulse?}], edges [{from, to, color?, style?, arrow?, animated?}]; x and y in pixels`}},du=Object.keys(uu).filter(e=>![`Row`,`Column`,`Grid`].includes(e)),fu=e=>du.includes(e);function pu(e,t){let{kids:n,slots:r,...i}=t;return{c:e,p:i,...Array.isArray(n)?{kids:n}:{},...r&&typeof r==`object`?{slots:r}:{}}}var mu=/^(on[A-Z]|dangerously|style$|className$|ref$|key$|children$|href$|src$)/,hu=(e,t=0)=>{if(e===null||typeof e==`boolean`||typeof e==`number`&&Number.isFinite(e))return null;if(typeof e==`string`)return e.length>lu.text?`A text is too long.`:null;if(t>4)return`A prop is nested too deep.`;if(Array.isArray(e)){if(e.length>lu.items)return`A list is too long.`;for(let n of e){let e=hu(n,t+1);if(e)return e}return null}if(typeof e==`object`){for(let[n,r]of Object.entries(e)){if(mu.test(n))return`A prop may not have the key ${n}.`;let e=hu(r,t+1);if(e)return e}return null}return`Props must be plain data (text, numbers, true or false, lists and objects).`};function gu(e){let t=e&&typeof e==`object`?e.ui:void 0;if(!t||typeof t!=`object`)return`A jarvis object needs ui: a tree like {c: "JStatCard", p: {...}, kids: [...]}, where c is the component name.`;let n=0,r=(e,t)=>{if(typeof e==`string`)return e.length>lu.text?`A text is too long.`:null;if(!e||typeof e!=`object`||typeof e.c!=`string`)return`Every node needs c, the component name.`;if(t>lu.depth)return`The tree is too deep (at most ${lu.depth} levels).`;if(++n>lu.nodes)return`The tree has too many parts (at most ${lu.nodes}).`;let i=e,a=uu[i.c];if(!a)return`${i.c} is not available. Use one of: ${Object.keys(uu).join(`, `)}.`;for(let e of Object.keys(i.p??{})){if(mu.test(e))return`${i.c}: the prop ${e} is not allowed.`;if(!a.props.includes(e))return`${i.c} has no prop ${e}. Its props: ${a.props.join(`, `)||`none`}.`}let o=hu(i.p??{});if(o)return`${i.c}: ${o}`;for(let e of Object.keys(i.slots??{})){if(!a.slots?.includes(e))return`${i.c} has no slot ${e}.${a.slots?` Its slots: ${a.slots.join(`, `)}.`:``}`;let n=i.slots[e];if(!Array.isArray(n))return`${i.c}: the slot ${e} must be a list.`;for(let e of n){let n=r(e,t+1);if(n)return n}}if(i.kids!==void 0&&!Array.isArray(i.kids))return`${i.c}: kids must be a list.`;if(i.kids&&!a.kids&&i.kids.some(e=>typeof e!=`string`))return`${i.c} cannot contain other components.`;for(let e of i.kids??[]){let n=r(e,t+1);if(n)return n}return null};return r(t,1)}function _u(e,t){return gu({ui:pu(e,t)})}var vu=J().min(0).max(1),yu=Al([X([`auto`,`center`,`left`,`right`,`top`,`bottom`]),Y({x:vu,y:vu,w:vu,h:vu})]),bu=X([`ambient`,`conversation`,`focus`,`multi`]),xu=X([`idle`,`listening`,`thinking`,`speaking`]),Su=X([`sphere`,`orb`,`ring`]),Cu=[`card`,`stat`,`list`,`table`,`code`,`chart`,`gauge`,`timeline`,`graph`,`sandbox`,`markdown`,`image`,`video`,`pdf`,`gallery`,`group`,`tabs`,`progress`,`checklist`,`countdown`,`kv`,...du],wu=Y({id:q().min(1).max(64),type:X(Cu),props:Il(q(),Cl()),placement:yu,ttl:J().positive().max(3600).optional(),style:X([`glass`,`alert`]).optional(),layer:X([`base`,`overlay`]).optional(),pinned:xl().optional()}),Tu=X([`system`,`voice`,`network`,`feed`,`radar`,`tickets`]),Eu=Ml(`cmd`,[Y({cmd:Z(`scene`),mode:bu}),Y({cmd:Z(`show`),object:wu}),Y({cmd:Z(`update`),id:q(),props:Il(q(),Cl())}),Y({cmd:Z(`hide`),id:q()}),Y({cmd:Z(`clear`),keepInstruments:xl().optional()}),Y({cmd:Z(`widget`),show:Dl(Tu).max(6).optional(),hide:Dl(Tu).max(6).optional(),reset:xl().optional()}),Y({cmd:Z(`pin`),id:q()}),Y({cmd:Z(`unpin`),id:q()}),Y({cmd:Z(`place`),id:q(),placement:yu}),Y({cmd:Z(`presence`),state:xu.optional(),style:Su.optional()}),Y({cmd:Z(`mood`),accent:q().max(16).optional(),intensity:vu.optional()})]),Du=Y({scene:bu,objects:Dl(wu),presence:Y({state:xu,style:Su}),mood:Y({accent:q(),intensity:vu}),widgets:Dl(Tu).optional()}),Ou={center:[20,18,60,58],left:[3,12,30,70],right:[67,12,30,70],top:[20,4,60,30],bottom:[20,62,60,30]};Object.keys(Ou);var ku=[{id:`en_US-amy-medium`,name:`Amy`,gender:`female`,accent:`American`},{id:`en_US-kristin-medium`,name:`Kristin`,gender:`female`,accent:`American`},{id:`en_US-hfc_female-medium`,name:`Hannah`,gender:`female`,accent:`American`,note:`clear and steady`},{id:`en_GB-jenny_dioco-medium`,name:`Jenny`,gender:`female`,accent:`British`},{id:`en_GB-alba-medium`,name:`Alba`,gender:`female`,accent:`Scottish`},{id:`en_US-kathleen-low`,name:`Kathleen`,gender:`female`,accent:`American`,note:`smaller and faster`},{id:`en_US-ryan-medium`,name:`Ryan`,gender:`male`,accent:`American`},{id:`en_US-joe-medium`,name:`Joe`,gender:`male`,accent:`American`},{id:`en_US-norman-medium`,name:`Norman`,gender:`male`,accent:`American`},{id:`en_US-hfc_male-medium`,name:`Henry`,gender:`male`,accent:`American`,note:`clear and steady`},{id:`en_GB-alan-medium`,name:`Alan`,gender:`male`,accent:`British`},{id:`en_GB-northern_english_male-medium`,name:`Tom`,gender:`male`,accent:`Northern English`}],Au=[{id:`hi_IN-priyamvada-medium`,name:`Priyamvada`,gender:`female`,accent:`Hindi`,note:`for personal use (non-commercial licence)`},{id:`hi_IN-pratham-medium`,name:`Pratham`,gender:`male`,accent:`Hindi`,note:`for personal use (non-commercial licence)`},{id:`hi_IN-rohan-medium`,name:`Rohan`,gender:`male`,accent:`Hindi`}],ju=[{id:`mr_IN-google-medium`,name:`Marathi`,gender:`female`,accent:`Marathi`}],Mu={id:`en_US-lessac-medium`,name:`Lessac`,accent:`American`,note:`the original voice`},Nu=e=>e===Mu.id||ku.some(t=>t.id===e),Pu=[{id:`tiny`,name:`Tiny`,mb:75,note:`fastest, mishears a lot`},{id:`base`,name:`Base`,mb:145,note:`fast, struggles with Hindi, Marathi and distance`},{id:`small`,name:`Small`,mb:480,note:`recommended: much better, still quick`},{id:`medium`,name:`Medium`,mb:1500,note:`better again, slow on a PC without a graphics card`},{id:`large-v3-turbo`,name:`Large (turbo)`,mb:1600,note:`most accurate for Marathi; needs a fast PC`}],Fu=e=>`about ${e>=1e3?`${(e/1e3).toFixed(1)} GB`:`${e} MB`}`,Iu=[{id:`aurora`,name:`Aurora`,style:`sphere`,accent:`#3fd8ff`,intensity:.6},{id:`ocean`,name:`Ocean`,style:`sphere`,accent:`#2b7bff`,intensity:.6},{id:`ember`,name:`Ember`,style:`orb`,accent:`#ff9b3d`,intensity:.7},{id:`violet`,name:`Violet storm`,style:`orb`,accent:`#a066ff`,intensity:.8},{id:`matrix`,name:`Matrix`,style:`ring`,accent:`#3dff8c`,intensity:.6},{id:`rose`,name:`Rose`,style:`ring`,accent:`#ff6fae`,intensity:.7},{id:`ghost`,name:`Ghost`,style:`sphere`,accent:`#e8f4ff`,intensity:.4}],Lu=[`mp3`,`m4a`,`aac`,`ogg`,`opus`,`wav`,`flac`],Ru={maxTracks:{min:100,max:5e4,def:5e3},scanDepth:{min:1,max:12,def:6},volume:{min:0,max:100,def:70},searchLimit:{min:3,max:50,def:10}},zu=[`chat`,`tasks`,`plugins`,`settings`,`music`],Bu=[`toggle`,`play`,`pause`,`next`,`previous`],Vu=[`url`,`prompt`,`panel`,`music`];function Hu(e){let t=e&&typeof e==`object`?e:null;if(!t)return`A button needs a label and an action.`;let n=typeof t.label==`string`?t.label.trim():``;if(n.length<1||n.length>24)return`A button label is 1 to 24 characters.`;let r=typeof t.icon==`string`?t.icon.trim():``;if(r.length<1||[...r].length>4)return`A button icon is 1 to 4 characters (a symbol or an emoji).`;let i=t.action&&typeof t.action==`object`?t.action:null;if(!i||!Vu.includes(i.type)||typeof i.value!=`string`)return`A button needs an action: an address, a question, a panel or a music control.`;let a=i.value.trim();switch(i.type){case`url`:if(a.length>500)return`A button address is at most 500 characters.`;try{let e=new URL(a);return e.protocol===`https:`||e.protocol===`http:`?null:`A button address must start with https:// or http://.`}catch{return`A button address must start with https:// or http://.`}case`prompt`:return a.length>=1&&a.length<=500?null:`A question for the assistant is 1 to 500 characters.`;case`panel`:return zu.includes(a)?null:`A panel is one of: ${zu.join(`, `)}.`;default:return Bu.includes(a)?null:`A music control is one of: ${Bu.join(`, `)}.`}}function Uu(e){return e===``?null:e.length>260?`That program name is too long.`:/\s/.test(e)?`Use the program's name, or a short path with no spaces (or add the program to your PATH). Arguments cannot be added here.`:e.startsWith(`-`)||!/^[A-Za-z0-9._:\\/~+-]+$/.test(e)?`A program is a name or a path made of letters, digits and . _ : / \\ ~ + - only, and cannot start with a dash.`:null}var Wu=[`classic`,`orbital`],Gu=[`calm`,`standard`,`full`],Ku=[`system`,`voice`,`network`,`feed`,`radar`,`tickets`,`budget`,`approval`,`usage`],qu=/^[a-z0-9][a-z0-9-]{0,23}$/,Ju=q().regex(qu,`Lowercase letters, digits and dashes, up to 24 characters`),Yu=[`starting`,`running`,`waiting`,`idle`,`paused`,`stopped`,`failed`],Xu=[`todo`,`doing`,`review`,`done`,`blocked`];Y({id:Ju,title:q().min(1).max(40),instructions:q().max(4e3),model:q().max(100),permission:X([`default`,`acceptEdits`])}),Y({id:Ju,name:q().min(1).max(60),folder:q().min(1).max(260),goal:q().max(500),extraFolders:Dl(q().min(1).max(260)).max(5)}),Y({allowTools:Dl(q().min(1).max(60)).max(40),denyCommands:Dl(q().min(1).max(200)).max(40)});var Zu=Y({id:q().min(1).max(64),name:q().min(1).max(40),roleId:q().max(24),title:q().max(60),capabilities:q().max(200),managerId:q().max(64).nullable(),projectId:q().max(24),status:X(Yu),ticketId:J().int().nullable(),detail:q().max(80),tokens:J().min(0),budget:J().min(0).nullable(),startedAt:J().nullable()}),Qu=Y({id:J().int(),projectId:q().max(24),title:q().max(200),status:X(Xu),workerId:q().max(64).nullable()}),$u=Y({utilization:J().min(0).max(1),resetsAt:J()}),ed=Y({fiveHour:$u.nullable(),sevenDay:$u.nullable()}),td=[`text`,`tool`,`result`,`approval`,`error`],nd=[`local`,`spotify`,`soundcloud`,`audius`],rd=/^[0-9a-f]{16}$/,id=/^[0-9]{1,20}$/,ad=/^[A-Za-z0-9_-]{1,64}$/;function od(e){if(typeof e!=`string`)return null;if(rd.test(e))return{source:`local`,id:e};let t=e.indexOf(`:`);if(t<1)return null;let n=e.slice(0,t),r=e.slice(t+1);return!nd.includes(n)||!(n===`local`?rd:n===`soundcloud`?id:ad).test(r)?null:{source:n,id:r}}var sd=X([`minimal`,`companion`,`workspace`]),cd=Y({size:J().min(.5).max(1.5),reactivity:J().min(0).max(1),ambient:xl(),captions:xl(),captionSize:X([`small`,`medium`,`large`])}),ld={width:J().int().min(100).max(1e4),height:J().int().min(100).max(1e4),kind:X([`phone`,`tablet`,`desktop`]),orientation:X([`portrait`,`landscape`]),touch:xl()};Y(ld);var ud=Y({id:q(),tool:q(),summary:q(),tier:cu,needsPin:xl()}),dd=Y({id:q().refine(e=>od(e)!==null,`A track id or a source:id ref`),title:q().max(200),artist:q().max(200),album:q().max(200),durationSec:J().nullable()}),fd=Y({playing:xl(),trackId:q().max(80).nullable(),title:q().max(200),artist:q().max(200),album:q().max(200),position:J().min(0),duration:J().min(0),volume:J().min(0).max(100),muted:xl(),shuffle:xl(),repeat:X([`off`,`all`,`one`]),view:X([`mini`,`full`,`hidden`]),queue:Dl(Y({id:q().max(80),title:q().max(200)})).max(50),index:J().int().min(-1),active:xl()}),pd=Y({action:X([`play`,`pause`,`resume`,`toggle`,`stop`,`next`,`previous`,`seek`,`volume`,`mute`,`shuffle`,`repeat`,`view`,`queue.remove`,`queue.clear`,`jump`]),tracks:Dl(dd).max(500).optional(),mode:X([`replace`,`add`,`next`,`off`,`all`,`one`]).optional(),shuffle:xl().optional(),seconds:J().min(0).optional(),percent:J().min(0).max(100).optional(),level:J().min(0).max(100).optional(),delta:J().min(-100).max(100).optional(),on:xl().optional(),view:X([`mini`,`full`,`hidden`]).optional(),index:J().int().min(0).optional()}),md=Y({terminalLabel:q().max(24),clock:Y({hour12:xl(),seconds:xl(),locale:q().max(35)}),launcher:Dl(Y({id:q().max(20),label:q().max(24),icon:q().max(16),action:Y({type:X([`url`,`prompt`,`panel`,`music`]),value:q().max(500)})})).max(12),animations:X([`full`,`reduced`,`off`]),layout:X(Wu),density:X(Gu),widgets:Y(Object.fromEntries(Ku.map(e=>[e,xl().optional()]))),preview:xl().optional()}),hd=Y({folderSet:xl(),volume:J().min(0).max(100),shuffle:xl(),repeat:X([`off`,`all`,`one`]),visualizer:xl(),startView:X([`mini`,`full`]),output:X([`screen`,`host`]).optional()}),gd=Ml(`type`,[Y({type:Z(`music.command`)}).merge(pd),Y({type:Z(`music.host`),state:fd}),Y({type:Z(`stage`),command:Eu}),Y({type:Z(`caption.delta`),text:q()}),Y({type:Z(`caption.end`)}),Y({type:Z(`approval.request`)}).merge(ud),Y({type:Z(`approval.resolved`),id:q()}),Y({type:Z(`alert`),level:X([`info`,`warn`,`error`]),text:q()}),Y({type:Z(`chat.user`),text:q()}),Y({type:Z(`ui`),view:sd,look:cd.optional(),ownerName:q().max(40).optional(),assistantName:q().max(40).optional(),hud:md.optional(),music:hd.optional()}),Y({type:Z(`activity`),text:q().max(80).nullable()}),Y({type:Z(`hud.stats`),cpu:J().min(0).max(100),ramUsed:J().min(0),ramTotal:J().min(0),netDown:J().min(0),netUp:J().min(0)}),Y({type:Z(`status`),busy:xl(),deviceOnline:xl(),voiceAvailable:xl().optional(),voiceEnrolled:xl().optional(),message:q().optional()}),Y({type:Z(`voice.heard`),text:q(),trust:X([`owner`,`guest`,`unverified`,`member`]).optional(),speaker:q().max(60).optional()}),Y({type:Z(`voice.challenge`),id:q(),text:q()}),Y({type:Z(`voice.challenge.end`),id:q()}),Y({type:Z(`audio.chunk`),id:q(),seq:J().int().min(0),last:xl(),mime:q(),data:q()}),Y({type:Z(`audio.stop`)}),Y({type:Z(`audio.duck`),level:J().min(0).max(1)}),Y({type:Z(`camera.request`),id:q()}),Y({type:Z(`camera.cancel`),id:q()}),Y({type:Z(`ui.open`),panel:Z(`plugins`),integration:q().max(40).optional()}),Y({type:Z(`screen.request`),id:q()}),Y({type:Z(`screen.check`),id:q()}),Y({type:Z(`screen.cancel`),id:q()}),Y({type:Z(`snapshot`),stage:Du,pendingApproval:ud.nullable().optional()}),Y({type:Z(`error`),message:q()}),Y({type:Z(`office.state`),enabled:xl(),workers:Dl(Zu).max(100),tickets:Dl(Qu).max(500),quota:ed}),Y({type:Z(`office.feed`),workerId:q().max(64),at:J(),kind:X(td),text:q().max(200)})]),_d=Y({type:Z(`approval.respond`),id:q(),decision:X([`approve`,`deny`,`approve_always`]),pin:q().max(32).optional()});Ml(`type`,[Y({type:Z(`chat.send`),text:q().min(1).max(8e3)}),Y({type:Z(`stage.event`),objectId:q(),event:q().max(64)}),_d,Y({type:Z(`voice.interrupt`)}),Y({type:Z(`audio.activity`),active:xl()}),Y({type:Z(`voice.confirm`),id:q(),pin:q().max(32)}),Y({type:Z(`voice.cancel`),id:q()}),Y({type:Z(`camera.denied`),id:q(),reason:X([`off`,`no-camera`,`permission`,`busy`])}),Y({type:Z(`screen.checked`),id:q(),lines:Dl(q().max(200)).max(12)}),Y({type:Z(`screen.denied`),id:q(),reason:X([`unsupported`,`failed`,`busy`])}),Y({type:Z(`ui.panels`),open:Dl(X([`chat`,`tasks`])).max(2)}),Y({type:Z(`ui.screen`),...ld}),Y({type:Z(`stage.move`),objectId:q().max(64),rect:Y({x:J().min(0).max(1),y:J().min(0).max(1),w:J().min(0).max(1),h:J().min(0).max(1)})}),Y({type:Z(`stage.pin`),objectId:q().max(64),pinned:xl()}),Y({type:Z(`music.state`),state:fd}),Y({type:Z(`music.remote`),command:pd}),Y({type:Z(`ping`)}),Y({type:Z(`office.stop`),workerId:q().max(64).optional()}),Y({type:Z(`office.fire`),workerId:q().min(1).max(64)}),Y({type:Z(`office.say`),workerId:q().max(64),text:q().min(1).max(2e3)})]),Y({type:Z(`tool.exec`),id:q(),tool:q(),args:Cl(),approvedOutside:xl().optional()}),Ml(`type`,[Y({type:Z(`tool.result`),id:q(),result:Y({output:q(),truncated:xl()})}),Y({type:Z(`tool.error`),id:q(),error:q()})]),Y({path:q()}),Y({path:q()}),Y({path:q(),content:q()}),Y({}),Y({}),Y({command:q().min(1),cwd:q().optional()}),Y({city:q().min(1).max(80)}),Y({query:q().min(1).max(300),count:J().int().min(1).max(8).optional(),topic:X([`general`,`news`,`finance`]).optional(),timeRange:X([`day`,`week`,`month`,`year`]).optional(),includeDomains:Dl(q().max(100)).max(10).optional(),excludeDomains:Dl(q().max(100)).max(10).optional()}),Y({url:q().min(1).max(2e3)}),Y({kind:X([`candles`,`quote`,`announcements`,`results`,`insider`,`bulk`,`holdings`,`movers`,`active`,`volume`]),direction:X([`gainers`,`losers`]).optional(),universe:X([`NIFTY`,`BANKNIFTY`,`NIFTYNEXT50`,`FOSec`,`allSec`]).optional(),symbol:q().max(30).optional(),interval:X([`1m`,`5m`,`15m`,`30m`,`1h`,`1d`]).optional(),range:X([`1d`,`5d`,`1mo`,`3mo`,`6mo`,`1y`,`2y`]).optional()}),Y({symbols:Dl(q().max(30)).max(28).optional(),limit:J().int().min(1).max(15).optional()}),Y({symbol:q().min(1).max(30),side:X([`buy`,`sell`]),stop:J().positive(),target:J().positive(),runs:J().int().min(500).max(5e4).optional(),seed:J().int().optional()}),Y({plugin:q().min(1).max(40),name:q().min(1).max(40)}),Y({language:X([`python`,`node`,`shell`]),code:q().min(1).max(5e4),timeoutSec:J().int().min(1).max(60).optional()}),Y({text:q().min(1).max(4e3)}),Y({path:q().max(200).optional()}),Y({path:q().min(1).max(200),text:q().min(1).max(6e3),title:q().max(80).optional(),summary:q().max(160).optional(),folderSummary:q().max(160).optional(),related:Dl(q().max(200)).max(8).optional()}),Y({}),Y({from:q().min(1).max(200),to:q().min(1).max(200)}),Y({query:q().min(1).max(200)}),Y({path:q().min(1).max(200).optional(),id:J().int().positive().optional()}).refine(e=>!!e.path||!!e.id,{message:`Give the path of the note to forget.`}),Y({url:q().min(1).max(2e3)}),Y({url:q().min(1).max(2e3),fullPage:xl().optional()}),Y({}),Y({text:q().min(1).max(3e3)}),Y({to:X([`previous`,`default`])}),Y({title:q().min(1).max(1e3),inMinutes:J().int().min(1).max(525600).optional(),dueAt:q().max(40).optional(),repeat:X([`hourly`,`daily`,`weekly`]).optional()}),Y({}),Y({id:J().int().positive()}),Y({id:J().int().positive()}),Y({}),Y({path:q().min(1).max(1e3),id:q().min(1).max(64).optional(),title:q().max(120).optional(),placement:yu.optional()}),Y({}),Y({}),Y({id:q().min(1).max(40)}),Y({id:X([`telegram`,`twilio`,`zerodha`,`alexa`]).optional()}),Y({id:X([`telegram`,`twilio`,`zerodha`,`alexa`]),enabled:xl().optional(),accountSid:q().max(64).optional(),smsFrom:q().max(30).optional(),whatsappFrom:q().max(30).optional(),ownerNumber:q().max(30).optional()}).strict(),Y({id:X([`telegram`,`twilio`,`zerodha`,`alexa`])}),Y({id:X([`telegram`,`twilio`,`zerodha`,`alexa`])}),Y({text:q().min(1).max(1500),title:q().max(60).optional()}),Y({channel:X([`telegram`,`sms`,`whatsapp`]),to:q().min(1).max(40),text:q().min(1).max(1500)}),Y({channel:X([`telegram`,`whatsapp`]),to:Z(`me`),path:q().min(1).max(500),caption:q().max(1e3).optional()}).strict(),Y({channel:X([`telegram`,`sms`,`whatsapp`]).optional(),unread:xl().optional(),limit:J().int().min(1).max(20).optional()}),Y({}).strict(),Y({}).strict(),Y({}).strict(),Y({}).strict(),Y({}).strict(),Y({}).strict(),Y({kind:X([`morning`,`close`,`custom`]).optional(),send:xl().optional()}).strict(),Y({name:q().min(1).max(60),kind:X([`morning`,`close`,`custom`]),time:q().regex(/^([01]\d|2[0-3]):[0-5]\d$/),days:Dl(J().int().min(1).max(7)).min(1).max(7).optional(),channel:X([`telegram`,`whatsapp`,`sms`]),commentary:xl().optional()}).strict(),Y({}).strict(),Y({id:J().int().min(1)}).strict(),Y({query:q().max(200).optional(),title:q().max(200).optional(),artist:q().max(200).optional(),album:q().max(200).optional(),shuffle:xl().optional(),mode:X([`replace`,`add`,`next`]).optional(),limit:J().int().min(1).max(500).optional(),source:X([`local`,`spotify`,`soundcloud`,`audius`,`any`]).optional()}).strict(),Y({action:X([`pause`,`resume`,`toggle`,`stop`,`next`,`previous`,`seek`,`volume`,`mute`,`shuffle`,`repeat`,`view`]),level:J().min(0).max(100).optional(),delta:J().min(-100).max(100).optional(),seconds:J().min(0).optional(),percent:J().min(0).max(100).optional(),on:xl().optional(),mode:X([`off`,`all`,`one`]).optional(),view:X([`mini`,`full`,`hidden`]).optional()}).strict(),Y({action:X([`add`,`remove`,`clear`,`show`]),query:q().max(200).optional(),index:J().int().min(1).optional(),source:X([`local`,`spotify`,`soundcloud`,`audius`,`any`]).optional()}).strict(),Y({query:q().max(200),limit:J().int().min(1).max(15).optional(),source:X([`local`,`spotify`,`soundcloud`,`audius`,`any`]).optional()}).strict(),Y({}).strict(),Y({url:q().max(2e3).optional(),query:q().max(200).optional(),output:X([`screen`,`host`]).optional(),start:J().min(0).max(86400).optional(),mode:X([`embed`,`stream`]).optional()}).strict(),Y({action:X([`pause`,`resume`,`stop`,`seek`,`volume`]),seconds:J().min(0).max(86400).optional(),level:J().min(0).max(100).optional()}).strict(),Y({}).strict(),Y({}),Y({settings:Il(q(),Cl())}),Y({style:Su.optional(),accent:q().regex(/^#[0-9a-fA-F]{6}$/).optional(),intensity:J().min(0).max(1).optional(),size:J().min(.5).max(1.5).optional(),reactivity:J().min(0).max(1).optional(),ambient:xl().optional(),captions:xl().optional(),captionSize:X([`small`,`medium`,`large`]).optional()}),Y({view:sd}),Y({}),Y({id:q().min(1).max(16),name:q().min(1).max(60),kind:X([`stdio`,`http`]),command:q().max(260).optional(),args:Dl(q().max(500)).max(20).optional(),url:q().max(2e3).optional()}),Y({id:q().min(1).max(16)}),Y({id:q().min(1).max(16)}),Y({id:q().min(1).max(16)}),Y({id:q().min(1).max(16)}),Y({}),Y({id:q().min(1).max(40),name:q().min(1).max(80),description:q().max(500).optional(),skills:Dl(Y({name:q().min(1).max(40),description:q().min(1).max(300),text:q().min(1).max(2e4)})).max(10).optional(),tools:Dl(Y({name:q().min(1).max(40),description:q().min(1).max(500),language:X([`python`,`node`,`shell`]),code:q().min(1).max(5e4),parameters:Il(q(),Y({type:X([`string`,`number`,`integer`,`boolean`]),description:q().max(300).optional(),enum:Dl(q().max(100)).max(50).optional()})).optional(),required:Dl(q()).optional()})).max(10).optional()}),Y({}),Y({id:q().min(1).max(40)}),Y({id:q().min(1).max(40)}),Y({id:q().min(1).max(40)}),Y({mode:bu}),Y({object:wu}),Y({}),Y({topic:X([`all`,`widgets`,`layout`,`overlay`,`theme`,`files`,`recipes`]).optional()}),Y({id:q(),props:Il(q(),Cl())}),Y({id:q()}),Y({show:Dl(X([`system`,`voice`,`network`,`feed`,`radar`,`tickets`])).max(6).optional(),hide:Dl(X([`system`,`voice`,`network`,`feed`,`radar`,`tickets`])).max(6).optional(),reset:xl().optional()}).refine(e=>!!e.show?.length||!!e.hide?.length||e.reset===!0,{message:`Name what to show or hide, or reset.`}),Y({}),Y({id:q()}),Y({id:q()}),Y({state:xu.optional(),style:Su.optional()}),Y({accent:q().max(16).optional(),intensity:J().min(0).max(1).optional()}),Y({}),Y({ticket:J().int()}),Y({project:q().min(1).max(24),title:q().min(1).max(40).optional(),instructions:q().max(4e3).optional(),capabilities:q().max(200).optional(),manager:q().min(1).max(64).optional(),role:q().min(1).max(24).optional(),name:q().min(1).max(30).optional()}).refine(e=>!!e.title||!!e.role,{message:`Give the job a title, or a starter role.`}),Y({worker:q().min(1).max(64),title:q().min(1).max(200),description:q().max(4e3).optional()}),Y({worker:q().min(1).max(64),text:q().min(1).max(2e3)}),Y({id:J().int(),decision:X([`allow`,`deny`,`ask_owner`]),reason:q().max(300).optional()}),Y({ticket:J().int(),accept:xl(),note:q().max(500).optional()}),Y({worker:q().min(1).max(64)}),Y({worker:q().min(1).max(64).optional()});var vd=new Set([`alexa`,`amazon`,`echo`,`skill`,`app`,`ask`,`tell`,`open`,`start`,`run`,`enable`,`launch`,`load`,`begin`,`use`]),yd=50;function bd(e){let t=e.trim().split(/\s+/).filter(Boolean);if(t.length<1)return`Enter the name you will say after "Alexa, ask".`;if(e.length>yd)return`That is too long (at most ${yd} characters).`;if(!/^[a-z' ]+$/.test(e))return`Use lower-case letters, spaces and apostrophes only. Spell numbers out as words.`;let n=t.find(e=>vd.has(e));return n?`The word "${n}" cannot be in the name (it is reserved by Alexa).`:null}var xd=2e3,Sd=3,Cd=e=>({queue:[],index:-1,playing:!1,position:0,duration:0,volume:e.volume,muted:!1,shuffle:e.shuffle,repeat:e.repeat,view:e.view});function wd(e,t=Math.random){let n=[...e];for(let e=n.length-1;e>0;e--){let r=Math.floor(t()*(e+1));[n[e],n[r]]=[n[r],n[e]]}return n}var Td=(e,t,n)=>Math.min(n,Math.max(t,e)),Ed=(e,t,n)=>({...e,index:t,playing:n,position:0,duration:0});function Dd(e,t,n={}){let r=n.shuffle??wd,i=e.queue.length-1;switch(t.type){case`play`:{if(t.tracks.length===0)return e;let n=t.tracks.slice(0,xd);if(t.mode===`replace`){let i=t.shuffle?r(n):n;return{...Ed(e,t.shuffle?0:Td(t.start??0,0,i.length-1),!0),queue:i,shuffle:t.shuffle?!0:e.shuffle}}if(e.queue.length===0)return{...Ed(e,0,!0),queue:n};let i=t.mode===`next`?e.index+1:e.queue.length;return{...e,queue:[...e.queue.slice(0,i),...n,...e.queue.slice(i)].slice(0,xd)}}case`next`:return i<0?e:e.index<i?Ed(e,e.index+1,!0):e.repeat===`off`?{...e,playing:!1,position:0}:Ed(e,0,!0);case`previous`:return i<0?e:e.position>Sd?{...e,position:0}:e.index>0?Ed(e,e.index-1,e.playing||!0):e.repeat===`all`?Ed(e,i,!0):{...e,position:0};case`ended`:return i<0?e:e.repeat===`one`?Ed(e,e.index,!0):e.index<i?Ed(e,e.index+1,!0):e.repeat===`all`?Ed(e,0,!0):{...e,playing:!1,position:0};case`failed`:return i<0?e:e.index<i?Ed(e,e.index+1,!0):{...e,playing:!1,position:0};case`pause`:return e.playing?{...e,playing:!1}:e;case`resume`:return e.index>=0&&!e.playing?{...e,playing:!0}:e;case`toggle`:return e.index<0?e:{...e,playing:!e.playing};case`stop`:return{...e,playing:!1,position:0};case`volume`:{let n=typeof t.level==`number`?Math.round(t.level):typeof t.delta==`number`?e.volume+Math.round(t.delta):e.volume;return{...e,volume:Td(n,0,100),muted:typeof t.level==`number`||(t.delta??0)>0?!1:e.muted}}case`mute`:return{...e,muted:t.on??!e.muted};case`seek`:{let n=typeof t.seconds==`number`?t.seconds:typeof t.percent==`number`?e.duration*Td(t.percent,0,100)/100:e.position;return{...e,position:Td(n,0,e.duration>0?e.duration:Math.max(n,0))}}case`repeat`:return{...e,repeat:t.mode};case`shuffle`:{if(!(t.on??!e.shuffle))return{...e,shuffle:!1};let n=e.queue.slice(0,e.index+1);return{...e,shuffle:!0,queue:[...n,...r(e.queue.slice(e.index+1))]}}case`view`:return{...e,view:t.view};case`remove`:{if(!Number.isInteger(t.index)||t.index<0||t.index>i)return e;let n=e.queue.filter((e,n)=>n!==t.index);return n.length===0?{...e,queue:n,index:-1,playing:!1,position:0,duration:0}:t.index<e.index?{...e,queue:n,index:e.index-1}:t.index>e.index?{...e,queue:n}:t.index<n.length?{...Ed(e,t.index,e.playing),queue:n}:e.repeat===`all`?{...Ed(e,0,e.playing),queue:n}:{...e,queue:n,index:n.length-1,playing:!1,position:0}}case`clear`:return{...e,queue:[],index:-1,playing:!1,position:0,duration:0};case`jump`:return Number.isInteger(t.index)&&t.index>=0&&t.index<=i?Ed(e,t.index,!0):e;case`time`:return{...e,position:Math.max(0,t.position),duration:Math.max(0,t.duration)}}}function Od(e){switch(e.action){case`play`:return{type:`play`,tracks:e.tracks??[],mode:e.mode===`add`||e.mode===`next`?e.mode:`replace`,...e.shuffle?{shuffle:!0}:{},...e.index===void 0?{}:{start:e.index}};case`pause`:case`resume`:case`toggle`:case`stop`:case`next`:case`previous`:return{type:e.action};case`seek`:return{type:`seek`,...e.seconds===void 0?{}:{seconds:e.seconds},...e.percent===void 0?{}:{percent:e.percent}};case`volume`:return{type:`volume`,...e.level===void 0?{}:{level:e.level},...e.delta===void 0?{}:{delta:e.delta}};case`mute`:return{type:`mute`,...e.on===void 0?{}:{on:e.on}};case`shuffle`:return{type:`shuffle`,...e.on===void 0?{}:{on:e.on}};case`repeat`:return e.mode===`off`||e.mode===`all`||e.mode===`one`?{type:`repeat`,mode:e.mode}:null;case`view`:return e.view?{type:`view`,view:e.view}:null;case`queue.remove`:return e.index===void 0?null:{type:`remove`,index:e.index};case`queue.clear`:return{type:`clear`};case`jump`:return e.index===void 0?null:{type:`jump`,index:e.index};default:return null}}function kd(e){switch(e.type){case`play`:return{action:`play`,tracks:e.tracks,mode:e.mode,...e.shuffle?{shuffle:!0}:{},...e.start===void 0?{}:{index:e.start}};case`next`:case`previous`:case`pause`:case`resume`:case`toggle`:case`stop`:return{action:e.type};case`volume`:return{action:`volume`,...e.level===void 0?{}:{level:e.level},...e.delta===void 0?{}:{delta:e.delta}};case`mute`:return{action:`mute`,...e.on===void 0?{}:{on:e.on}};case`seek`:return{action:`seek`,...e.seconds===void 0?{}:{seconds:e.seconds},...e.percent===void 0?{}:{percent:e.percent}};case`repeat`:return{action:`repeat`,mode:e.mode};case`shuffle`:return{action:`shuffle`,...e.on===void 0?{}:{on:e.on}};case`view`:return{action:`view`,view:e.view};case`remove`:return{action:`queue.remove`,index:e.index};case`clear`:return{action:`queue.clear`};case`jump`:return{action:`jump`,index:e.index};default:return null}}var Ad={style:`sphere`,accent:`#3fd8ff`,intensity:.6,size:1,reactivity:.7,ambient:!0,captions:!0,captionSize:`medium`,aiMayChange:!0},jd=new Set([`view`,`look`,`ownerName`]),Md=e=>Object.keys(e).some(e=>!jd.has(e));async function Nd(e={}){let t;try{t=await fetch(`/api/settings`,e)}catch{throw Error(`Could not reach Friend. Check the connection.`)}if(!t.ok){let e=``;try{e=(await t.json()).error??``}catch{}throw Error(e||(t.status===401?`Please sign in again.`:t.status===429?`Too many attempts. Wait a moment.`:`The request failed (${t.status}).`))}return await t.json()}var Pd={get:()=>Nd(),save:(e,t)=>Nd({method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify({...t?{pin:t}:{},settings:e})})};async function Fd(e){let t;try{t=await fetch(`/api/voice/preview`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({voice:e})})}catch{throw Error(`Could not reach Friend. Check the connection.`)}if(!t.ok){let e=``;try{e=(await t.json()).error??``}catch{}throw Error(e||`The request failed (${t.status}).`)}let n=URL.createObjectURL(await t.blob()),r=new Audio(n);r.addEventListener(`ended`,()=>URL.revokeObjectURL(n),{once:!0});try{await r.play()}catch{throw URL.revokeObjectURL(n),Error(`The browser blocked the sound. Click anywhere on the page, then try again.`)}}function Id(e,t,n,r=``,i={brave:``,tavily:``}){let a={};t.provider!==e.provider&&(a.provider=t.provider),t.model!==e.model&&(a.model=t.model),t.view!==e.view&&(a.view=t.view),(t.ownerName??``)!==(e.ownerName??``)&&(a.ownerName=t.ownerName??``),(t.approvals??`manual`)!==(e.approvals??`manual`)&&(a.approvals=t.approvals??`manual`),n.trim()&&(a.apiKey=n.trim());for(let n of[`ollama`,`claudeCode`,`voice`,`look`,`updates`,`session`,`memory`,`proactive`,`phoneApprovals`]){if(!t[n]||!e[n])continue;let r={};for(let i of Object.keys(t[n])){let a=t[n][i];a!==e[n][i]&&(r[i]=n===`voice`&&i===`language`?a??``:a)}Object.keys(r).length&&(a[n]=r)}if(e.music&&t.music){let n={};for(let r of Object.keys(t.music))JSON.stringify(t.music[r])!==JSON.stringify(e.music[r])&&(n[r]=t.music[r]);Object.keys(n).length&&(a.music=n)}if(e.hud&&t.hud){let n={};t.hud.terminalLabel!==e.hud.terminalLabel&&(n.terminalLabel=t.hud.terminalLabel),t.hud.animations!==e.hud.animations&&(n.animations=t.hud.animations),t.hud.layout!==e.hud.layout&&(n.layout=t.hud.layout),t.hud.density!==e.hud.density&&(n.density=t.hud.density),t.hud.preview===!0!=(e.hud.preview===!0)&&(n.preview=t.hud.preview===!0);let r={};for(let n of Ku)t.hud.widgets[n]!==e.hud.widgets[n]&&typeof t.hud.widgets[n]==`boolean`&&(r[n]=t.hud.widgets[n]);Object.keys(r).length&&(n.widgets=r);let i={};for(let n of Object.keys(t.hud.clock))t.hud.clock[n]!==e.hud.clock[n]&&(i[n]=t.hud.clock[n]);Object.keys(i).length&&(n.clock=i),JSON.stringify(t.hud.launcher)!==JSON.stringify(e.hud.launcher)&&(n.launcher=t.hud.launcher),Object.keys(n).length&&(a.hud=n)}if(e.office&&t.office){let n={},r=t.office,i=e.office;for(let e of[`enabled`,`maxConcurrent`,`startTimeoutSec`,`pauseAtWindow`,`notifyFriend`,`autonomy`,`decideTries`])r[e]!==i[e]&&(n[e]=r[e]);let o={};for(let e of[`perWorkerTokens`,`totalTokens`])r.budget[e]!==i.budget[e]&&(o[e]=r.budget[e]);Object.keys(o).length&&(n.budget=o),JSON.stringify(r.roles)!==JSON.stringify(i.roles)&&(n.roles=r.roles),JSON.stringify(r.projects)!==JSON.stringify(i.projects)&&(n.projects=r.projects);let s={};for(let e of[`allowTools`,`denyCommands`])JSON.stringify(r.policy[e])!==JSON.stringify(i.policy[e])&&(s[e]=r.policy[e]);Object.keys(s).length&&(n.policy=s),Object.keys(n).length&&(a.office=n)}if(e.web&&t.web){let n={};for(let r of[`enabled`,`provider`,`searxngUrl`])t.web[r]!==e.web[r]&&(n[r]=t.web[r]);i.brave.trim()&&(n.braveKey=i.brave.trim()),i.tavily.trim()&&(n.tavilyKey=i.tavily.trim()),Object.keys(n).length&&(a.web=n)}if(e.openai&&t.openai){let n={};for(let r of[`url`,`model`,`vision`])t.openai[r]!==e.openai[r]&&(n[r]=t.openai[r]);r.trim()&&(n.apiKey=r.trim()),Object.keys(n).length&&(a.openai=n)}return a}function Ld({label:e,value:t,onChange:n,min:r,max:i,step:a}){let[o,s]=(0,v.useState)(String(t));return(0,v.useEffect)(()=>{s(e=>Number(e)===t?e:String(t))},[t]),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:e}),(0,C.jsx)(`input`,{type:`number`,min:r,max:i,step:a,value:o,onChange:e=>{s(e.target.value),e.target.value.trim()!==``&&Number.isFinite(Number(e.target.value))&&n(Number(e.target.value))},onBlur:()=>s(String(t)),style:b})]})}async function Rd(e,t){let n;try{n=await fetch(e,t)}catch{throw Error(`Could not reach Friend. Check the connection.`)}let r={};try{r=await n.json()}catch{}if(!n.ok)throw Error(r.error??(n.status===401?`Please sign in again.`:`The request failed (${n.status}).`));return r}var zd={status:()=>Rd(`/api/alexa`),allow:async(e,t)=>void await Rd(`/api/alexa/devices/allow`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({id:e,pin:t})}),forget:async e=>void await Rd(`/api/alexa/devices/${encodeURIComponent(e)}`,{method:`DELETE`})},Bd=/^amzn1\.ask\.skill\.[A-Za-z0-9-]{8,80}$/;function Vd(e){return e.skillId.trim()&&!Bd.test(e.skillId.trim())?`A skill ID looks like amzn1.ask.skill.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (copy it from the console).`:e.invocationName.trim()?bd(e.invocationName):null}var Hd={"skill.json":`the skill's manifest (name, endpoint)`,"en-IN.json":`the English (India) interaction model`,"hi-IN.json":`the Hindi (India) interaction model`},Ud={"en-IN":`English (India)`,"hi-IN":`Hindi (India)`},Wd=e=>{let t=Math.max(0,Math.round((Date.now()-e)/6e4));return t<1?`just now`:t<60?`${t} min ago`:`${Math.round(t/60)} h ago`};function Gd({view:e,setView:t,api:n=zd}){let[r,i]=(0,v.useState)(null),[a,o]=(0,v.useState)(null),[s,c]=(0,v.useState)(``),[l,u]=(0,v.useState)(null),[d,f]=(0,v.useState)(!1),[p,m]=(0,v.useState)(!1),h=(0,v.useRef)(!0),g=(0,v.useCallback)(()=>n.status().then(e=>h.current&&i(e)).catch(()=>{}),[n]);(0,v.useEffect)(()=>(h.current=!0,g(),()=>{h.current=!1}),[g]);let _=async e=>{m(!0),u(null);try{await e()}catch(e){h.current&&u(e.message)}finally{h.current&&m(!1)}},y=Vd(e),x=r?.invocationName||e.invocationName,S=!!r?.endpoint&&!!r.invocationName;return(0,C.jsxs)(`div`,{className:`settings-section`,children:[(0,C.jsx)(`p`,{className:`auth-note`,children:`Friend talks to a skill of your own on Alexa. It is free: the skill stays in development mode in your own Amazon developer account and is never published, and only the Echo devices you allow can use it. Alexa can look things up and answer; anything that changes something is refused, or sent to your phone for a yes.`}),(0,C.jsx)(`h4`,{className:`plugins-heading`,children:`In the Alexa developer console`}),r&&r.endpoint?(0,C.jsxs)(`p`,{className:`auth-note`,children:[`Endpoint to paste (HTTPS, "My development endpoint has a certificate from a trusted certificate authority"): `,(0,C.jsx)(`code`,{children:r.endpoint}),` `,(0,C.jsx)(`button`,{type:`button`,style:b,onClick:()=>{navigator.clipboard?.writeText(r.endpoint).then(()=>f(!0),()=>{})},children:d?`Copied`:`Copy`})]}):r&&(0,C.jsx)(`p`,{className:`auth-note`,children:`No public address is set yet, so Amazon cannot reach Friend (friend config set publicUrl https://…).`}),(0,C.jsx)(`p`,{className:`auth-note`,children:`If your address changes later, paste the new address into the console again. Nothing else needs to change.`}),S?(0,C.jsx)(`ul`,{className:`plugins-list`,children:r.files.map(e=>(0,C.jsxs)(`li`,{children:[(0,C.jsx)(`a`,{href:`/api/alexa/package/${e}`,download:e,children:e}),` `,(0,C.jsx)(`small`,{className:`auth-note`,children:Hd[e]??``})]},e))}):r&&r.endpoint&&(0,C.jsx)(`p`,{className:`auth-note`,children:`Save an invocation name first; the files are made with it.`}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Skill ID`}),(0,C.jsx)(`input`,{value:e.skillId,autoComplete:`off`,onChange:n=>t({...e,skillId:n.target.value}),placeholder:`amzn1.ask.skill.…`,style:b})]}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Invocation name`}),(0,C.jsx)(`input`,{value:e.invocationName,autoComplete:`off`,onChange:n=>t({...e,invocationName:n.target.value}),placeholder:`jarvis assistant`,style:b})]}),y&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:y}),(0,C.jsxs)(`details`,{children:[(0,C.jsx)(`summary`,{className:`plugins-heading`,children:`Advanced`}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Skill name`}),(0,C.jsx)(`input`,{value:e.skillName,onChange:n=>t({...e,skillName:n.target.value}),style:b})]}),(0,C.jsx)(`div`,{className:`settings-field`,role:`group`,"aria-label":`Languages`,children:Object.entries(Ud).map(([n,r])=>(0,C.jsxs)(`label`,{className:`settings-check`,children:[(0,C.jsx)(`input`,{type:`checkbox`,checked:e.locales.includes(n),onChange:r=>{let i=r.target.checked?[...e.locales,n]:e.locales.filter(e=>e!==n);i.length>0&&t({...e,locales:Object.keys(Ud).filter(e=>i.includes(e))})}}),(0,C.jsx)(`span`,{children:r})]},n))}),(0,C.jsx)(Ld,{label:`Seconds to work on an answer`,value:e.answerSeconds,min:2,max:7.5,step:.5,onChange:n=>t({...e,answerSeconds:n})}),(0,C.jsx)(Ld,{label:`Minutes to keep a late answer`,value:e.holdMinutes,min:1,max:60,onChange:n=>t({...e,holdMinutes:n})}),(0,C.jsx)(Ld,{label:`Seconds to wait for your yes on your phone`,value:e.permissionSeconds,min:30,max:600,onChange:n=>t({...e,permissionSeconds:n})}),(0,C.jsx)(Ld,{label:`Requests a minute allowed`,value:e.requestsPerMinute,min:10,max:600,onChange:n=>t({...e,requestsPerMinute:n})}),(0,C.jsx)(Ld,{label:`Echo devices allowed`,value:e.maxDevices,min:1,max:50,onChange:n=>t({...e,maxDevices:n})}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Extra tools a voice may use without asking (one per line)`}),(0,C.jsx)(`textarea`,{rows:2,value:e.extraVoiceTools.join(`
67
67
  `),onChange:n=>t({...e,extraVoiceTools:n.target.value.split(/[\s,]+/).filter(Boolean)})})]}),(0,C.jsx)(`small`,{className:`auth-note`,children:`Tools that reach your PC, files, settings, add-ons or camera, and anything that needs your PIN, can never be added.`})]}),(0,C.jsx)(`h4`,{className:`plugins-heading`,children:`Echo devices`}),r&&r.waiting.length===0&&r.allowed.length===0&&(0,C.jsxs)(`p`,{className:`auth-note`,children:[`Say "Alexa, ask `,x||`your invocation name`,`" on your Echo once; it will appear here for you to allow.`]}),(0,C.jsxs)(`ul`,{className:`plugins-list`,children:[(r?.waiting??[]).map(e=>(0,C.jsxs)(`li`,{children:[(0,C.jsxs)(`b`,{children:[`Echo …`,e.short]}),` `,(0,C.jsxs)(`small`,{className:`auth-note`,children:[`waiting (`,e.locale,`), asked `,Wd(e.at)]}),` `,(0,C.jsx)(`button`,{type:`button`,style:b,disabled:p,onClick:()=>{o(e.short),c(``),u(null)},children:`Allow`})]},e.short)),(r?.allowed??[]).map(e=>(0,C.jsxs)(`li`,{children:[(0,C.jsx)(`b`,{children:e.name}),` `,(0,C.jsxs)(`small`,{className:`auth-note`,children:[`…`,e.short]}),` `,(0,C.jsx)(`button`,{type:`button`,style:b,disabled:p,onClick:()=>void _(async()=>{await n.forget(e.short),await g()}),children:`Forget`})]},e.short))]}),a&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`p`,{className:`auth-note`,children:[`Enter your PIN to allow Echo …`,a,`. Anyone who can speak to that Echo can then ask Friend things.`]}),(0,C.jsx)(P,{pin:s,onChange:c,onSubmit:()=>!p&&s.length>=6&&void _(async()=>{await n.allow(a,s),o(null),c(``),await g()})}),(0,C.jsxs)(`div`,{className:`approval-actions`,children:[(0,C.jsx)(`button`,{type:`button`,style:b,className:`primary`,disabled:p||s.length<6,onClick:()=>void _(async()=>{await n.allow(a,s),o(null),c(``),await g()}),children:`Allow this Echo`}),(0,C.jsx)(`button`,{type:`button`,style:b,onClick:()=>{o(null),c(``),u(null)},children:`Back`})]})]}),l&&!y&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:l})]})}async function Kd(e,t){let n;try{n=await fetch(e,t)}catch{throw Error(`Could not reach Friend. Check the connection.`)}let r={};try{r=await n.json()}catch{}if(!n.ok)throw Error(r.error??(n.status===401?`Please sign in again.`:n.status===403?`Incorrect PIN`:`The request failed (${n.status}).`));return r}var qd={info:async()=>{let e=(await Kd(`/api/plugins`)).integrations?.find(e=>e.id===`chrome`),t=e?.settings?.extensionFolder;return{state:e?.state??`not-installed`,detail:e?.detail??``,extensionFolder:typeof t==`string`&&t?t:null}},setUp:e=>Kd(`/api/connectors/quick/chrome/install`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({pin:e})}),access:()=>Kd(`/api/plugins/chrome/access`),banner:()=>Kd(`/api/plugins/chrome/banner`),hideBanner:e=>Kd(`/api/plugins/chrome/banner/hide`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({pin:e})}),restartChrome:e=>Kd(`/api/plugins/chrome/banner/restart`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({pin:e})}),setRemote:async(e,t)=>{await Kd(`/api/plugins/chrome/remote`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({enabled:e,...t?{pin:t}:{}})})},revealKey:async e=>(await Kd(`/api/plugins/chrome/token`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({pin:e})})).token};function Jd({label:e,value:t}){let[n,r]=(0,v.useState)(!1);return(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:e}),(0,C.jsxs)(`div`,{style:{display:`flex`,gap:6},children:[(0,C.jsx)(`input`,{type:`text`,readOnly:!0,value:t,style:{flex:1},onFocus:e=>e.currentTarget.select()}),(0,C.jsx)(`button`,{type:`button`,onClick:()=>{navigator.clipboard?.writeText(t).then(()=>r(!0),()=>{})},children:n?`Copied`:`Copy`})]})]})}function Yd({api:e=qd,pollMs:t=3e3}){let[n,r]=(0,v.useState)(null),[i,a]=(0,v.useState)(null),[o,s]=(0,v.useState)(null),[c,l]=(0,v.useState)(null),[u,d]=(0,v.useState)(null),[f,p]=(0,v.useState)(``),[m,h]=(0,v.useState)(!1),[g,_]=(0,v.useState)(null),[y,x]=(0,v.useState)(null),[S,w]=(0,v.useState)(!1),T=(0,v.useRef)(!0),E=(0,v.useCallback)(async()=>{try{let[t,n,i]=await Promise.all([e.info(),e.access(),e.banner().catch(()=>null)]);if(!T.current)return;r(t),a(n),s(i)}catch{}},[e]);(0,v.useEffect)(()=>{T.current=!0,E();let e=t>0?setInterval(()=>void E(),t):null;return()=>{T.current=!1,e&&clearInterval(e)}},[E,t]);let D=async()=>{h(!0),_(null);try{if(u===`setup`){let t=await e.setUp(f);if(!T.current)return;x(t.message)}else if(u===`allow`)await e.setRemote(!0,f);else if(u===`key`){let t=await e.revealKey(f);if(!T.current)return;l(t)}else if(u===`hide`||u===`restart`){let t=await(u===`hide`?e.hideBanner(f):e.restartChrome(f));if(!T.current)return;x(t.message)}if(!T.current)return;d(null),await E()}catch(e){T.current&&_(e.message)}finally{T.current&&(h(!1),p(``))}};return u?(0,C.jsxs)(C.Fragment,{children:[u===`restart`&&(0,C.jsx)(`p`,{className:`auth-note connector-warning`,children:`This closes Chrome and opens it again with your tabs. Anything typed in a page that was not saved can be lost.`}),(0,C.jsx)(`p`,{className:`auth-note`,children:u===`setup`?`Enter your PIN to set up Chrome control.`:u===`allow`?`Enter your PIN to allow other PCs to use Chrome control through Friend.`:u===`hide`?`Enter your PIN to add the flag to your Chrome shortcuts.`:u===`restart`?`Enter your PIN to restart Chrome.`:`Enter your PIN to show the key.`}),(0,C.jsx)(P,{pin:f,onChange:p,onSubmit:()=>!m&&f.length>=6&&void D()}),g&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:g}),(0,C.jsxs)(`div`,{className:`approval-actions`,children:[(0,C.jsx)(`button`,{type:`button`,style:b,className:`primary`,disabled:m||f.length<6,onClick:()=>void D(),children:`Continue`}),(0,C.jsx)(`button`,{type:`button`,style:b,onClick:()=>{d(null),p(``),_(null)},children:`Back`})]})]}):(0,C.jsxs)(`div`,{className:`settings-section`,children:[n?.detail&&(0,C.jsx)(`p`,{className:`auth-note`,style:{marginBottom:10},children:n.detail}),n?.extensionFolder&&(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Folder to load in Chrome (chrome://extensions, Developer mode, Load unpacked)`}),(0,C.jsxs)(`div`,{style:{display:`flex`,gap:6},children:[(0,C.jsx)(`input`,{type:`text`,readOnly:!0,value:n.extensionFolder,style:{flex:1},onFocus:e=>e.currentTarget.select()}),(0,C.jsx)(`button`,{type:`button`,onClick:()=>{navigator.clipboard?.writeText(n.extensionFolder??``).then(()=>w(!0),()=>{})},children:S?`Copied`:`Copy`})]})]}),(0,C.jsx)(`div`,{className:`approval-actions`,children:(0,C.jsx)(`button`,{type:`button`,style:b,className:n?.extensionFolder?void 0:`primary`,onClick:()=>d(`setup`),children:n?.extensionFolder?`Set up again`:`Set up Chrome control`})}),y&&(0,C.jsx)(`p`,{className:`auth-note`,children:y}),o?.supported&&n?.extensionFolder&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`h4`,{className:`plugins-heading`,children:`Chrome's debugging banner`}),(0,C.jsx)(`p`,{className:`auth-note`,children:`While Friend uses your Chrome, Chrome shows "started debugging this browser" with a Cancel button. It can be hidden, but only in a Chrome that was started with a special flag: a shortcut with the flag does nothing while Chrome is already open.`}),o.error?(0,C.jsx)(`p`,{className:`auth-error`,children:o.error}):o.running===!1?(0,C.jsx)(`p`,{className:`auth-note`,children:`Chrome is closed. Start it from here and the banner stays hidden.`}):o.hidden?(0,C.jsx)(`p`,{className:`auth-note`,children:`The banner is hidden in the Chrome that is open now.`}):(0,C.jsx)(`p`,{className:`auth-note connector-warning`,children:`The Chrome that is open now was started without it, so the banner shows. Restarting Chrome from here fixes that.`}),o.shortcuts&&o.shortcuts.total>0&&(0,C.jsxs)(`p`,{className:`auth-note`,children:[o.shortcuts.withFlag,` of `,o.shortcuts.total,` shortcuts start Chrome with the banner hidden.`]}),(0,C.jsxs)(`div`,{className:`approval-actions`,children:[o.running===!1?(0,C.jsx)(`button`,{type:`button`,style:b,className:`primary`,onClick:()=>d(`restart`),children:`Start Chrome with the banner hidden`}):o.hidden===!1&&(0,C.jsx)(`button`,{type:`button`,style:b,className:`primary`,onClick:()=>d(`restart`),children:`Restart Chrome with the banner hidden`}),o.shortcuts&&o.shortcuts.withFlag<o.shortcuts.total&&(0,C.jsx)(`button`,{type:`button`,style:b,onClick:()=>d(`hide`),children:`Add the flag to my Chrome shortcuts`})]})]}),i&&n?.extensionFolder&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`h4`,{className:`plugins-heading`,children:`From another PC`}),i.extensionZip&&(0,C.jsxs)(`p`,{className:`auth-note`,children:[(0,C.jsx)(`a`,{href:i.extensionZip,download:`friend-chrome-extension.zip`,children:`Download the extension`}),` `,`to install it in Chrome on another PC: unzip it, open chrome://extensions, turn on Developer mode, press Load unpacked and choose the unzipped folder.`]}),i.remote?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(Jd,{label:`Server to type in the extension's popup on the other PC`,value:i.extensionAddress}),(0,C.jsx)(Jd,{label:`MCP address for apps on other PCs (Claude Code, Claude Desktop). Send the key as: Authorization: Bearer KEY`,value:i.mcpUrl}),/^(ws|http):\/\/(127\.0\.0\.1|localhost|\[::1\])/i.test(i.extensionAddress)&&(0,C.jsx)(`p`,{className:`auth-note`,children:`These use the address you opened Friend with, and another PC cannot reach 127.0.0.1. Open Friend by its network or public address and these will show that one.`}),c?(0,C.jsx)(Jd,{label:`The key (paste it in the extension's popup)`,value:c}):null,(0,C.jsxs)(`div`,{className:`approval-actions`,children:[!c&&(0,C.jsx)(`button`,{type:`button`,style:b,onClick:()=>d(`key`),children:`Show the key`}),(0,C.jsx)(`button`,{type:`button`,style:b,onClick:()=>{l(null),e.setRemote(!1).then(()=>E(),e=>_(e.message))},children:`Stop allowing other PCs`})]})]}):(0,C.jsx)(`div`,{className:`approval-actions`,children:(0,C.jsx)(`button`,{type:`button`,style:b,onClick:()=>d(`allow`),children:`Allow other PCs`})})]}),(0,C.jsx)(`small`,{className:`auth-note`,children:`Chrome does not allow programs to add an extension by themselves, so loading the folder above is the one step you do. While the extension is on, Friend can act as you on the sites it allows; every action still asks for your approval, and in the extension's popup you can limit it to certain sites.`})]})}async function Xd(e,t){let n;try{n=await fetch(e,t)}catch{throw Error(`Could not reach Friend. Check the connection.`)}let r={};try{r=await n.json()}catch{}if(!n.ok)throw Error(r.error??(n.status===401?`Please sign in again.`:`The request failed (${n.status}).`));return r}var Zd=(e,t)=>Xd(e,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)}),Qd={info:async()=>{let e=await Xd(`/api/music/sources`);return{status:e.sources.find(e=>e.id===`soundcloud`)?.status??{connected:!1,needs:null,account:null},redirectUri:e.soundcloud.redirectUri,clientId:e.soundcloud.clientId,secretSet:e.soundcloud.secretSet}},saveCredentials:async(e,t,n)=>void await Zd(`/api/music/soundcloud/credentials`,{clientId:e,...t?{clientSecret:t}:{},pin:n}),connect:async e=>(await Zd(`/api/music/soundcloud/connect`,{pin:e})).url,disconnect:async e=>void await Zd(`/api/music/soundcloud/disconnect`,{pin:e})},$d=e=>e.trim()===``||/^[A-Za-z0-9]{8,64}$/.test(e.trim())?null:`A client id is letters and digits only, copied from your app at soundcloud.com/you/apps.`;function ef({api:e=Qd,navigate:t=e=>window.location.assign(e)}){let[n,r]=(0,v.useState)(null),[i,a]=(0,v.useState)(``),[o,s]=(0,v.useState)(``),[c,l]=(0,v.useState)(null),[u,d]=(0,v.useState)(``),[f,p]=(0,v.useState)(!1),[m,h]=(0,v.useState)(null),[g,_]=(0,v.useState)(!1),y=(0,v.useRef)(!0),x=(0,v.useCallback)(async()=>{try{let t=await e.info();if(!y.current)return;r(t),a(t.clientId)}catch(e){y.current&&h(e.message)}},[e]);(0,v.useEffect)(()=>(y.current=!0,x(),()=>{y.current=!1}),[x]);let S=async()=>{if(c){p(!0),h(null);try{c===`save`?(await e.saveCredentials(i.trim(),o.trim()||void 0,u),y.current&&s(``),await x()):c===`connect`?t(await e.connect(u)):(await e.disconnect(u),await x()),y.current&&l(null)}catch(e){y.current&&h(e.message)}finally{y.current&&(p(!1),d(``))}}};if(c)return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`p`,{className:`auth-note`,children:[`Enter your PIN `,c===`save`?`to save the SoundCloud app details`:c===`connect`?`to connect SoundCloud`:`to disconnect SoundCloud`,`.`]}),(0,C.jsx)(P,{pin:u,onChange:d,onSubmit:()=>!f&&u.length>=6&&void S()}),m&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:m}),(0,C.jsxs)(`div`,{className:`approval-actions`,children:[(0,C.jsx)(`button`,{type:`button`,style:b,className:`primary`,disabled:f||u.length<6,onClick:()=>void S(),children:c===`save`?`Save`:`Continue`}),(0,C.jsx)(`button`,{type:`button`,style:b,onClick:()=>{l(null),d(``),h(null)},children:`Back`})]})]});let w=$d(i),T=!!n&&i.trim()!==n.clientId||o.trim()!==``,E=!!n?.clientId&&n.secretSet,D=n?.status;return(0,C.jsxs)(`div`,{className:`settings-section`,children:[(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Redirect address to add in your SoundCloud app`}),(0,C.jsxs)(`div`,{style:{display:`flex`,gap:6},children:[(0,C.jsx)(`input`,{type:`text`,readOnly:!0,value:n?.redirectUri??``,style:{flex:1},onFocus:e=>e.currentTarget.select()}),(0,C.jsx)(`button`,{type:`button`,onClick:()=>{navigator.clipboard?.writeText(n?.redirectUri??``).then(()=>_(!0),()=>{})},children:g?`Copied`:`Copy`})]})]}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Client id of your SoundCloud app`}),(0,C.jsx)(`input`,{type:`text`,value:i,maxLength:64,autoComplete:`off`,spellCheck:!1,onChange:e=>a(e.target.value)})]}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Client secret of your SoundCloud app`}),(0,C.jsx)(`input`,{type:`password`,value:o,maxLength:200,autoComplete:`new-password`,spellCheck:!1,onChange:e=>s(e.target.value)}),n?.secretSet&&(0,C.jsx)(`small`,{className:`auth-note`,children:`The secret is saved. Type a new one only to replace it.`})]}),w&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:w}),(0,C.jsxs)(`div`,{className:`approval-actions`,children:[(0,C.jsx)(`button`,{type:`button`,style:b,disabled:!T||!i.trim()||w!==null||!n?.secretSet&&!o.trim(),onClick:()=>l(`save`),children:`Save`}),D?.connected?(0,C.jsx)(`button`,{type:`button`,style:b,onClick:()=>l(`disconnect`),children:`Disconnect SoundCloud`}):(0,C.jsx)(`button`,{type:`button`,style:b,className:`primary`,disabled:!E||T,onClick:()=>l(`connect`),children:`Connect SoundCloud`})]}),D?.connected&&(0,C.jsxs)(`p`,{className:`auth-note`,children:[`Connected as `,D.account??`your account`,`.`]}),D?.needs&&(0,C.jsx)(`p`,{className:`auth-note`,children:D.needs}),m&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:m}),(0,C.jsx)(`small`,{className:`auth-note`,children:`Sign-in is on SoundCloud's own page: Friend never sees your SoundCloud password. SoundCloud decides who can register an app, and some tracks only play with the right SoundCloud plan.`})]})}async function tf(e,t){let n;try{n=await fetch(e,t)}catch{throw Error(`Could not reach Friend. Check the connection.`)}let r={};try{r=await n.json()}catch{}if(!n.ok)throw Error(r.error??(n.status===401?`Please sign in again.`:`The request failed (${n.status}).`));return r}var nf=(e,t)=>tf(e,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)}),rf={info:async()=>{let e=await tf(`/api/music/sources`);return{status:e.sources.find(e=>e.id===`spotify`)?.status??{connected:!1,needs:null,account:null},redirectUri:e.spotify.redirectUri,clientId:e.spotify.clientId}},saveClientId:async(e,t)=>void await nf(`/api/music/spotify/client-id`,{clientId:e,pin:t}),connect:async e=>(await nf(`/api/music/spotify/connect`,{pin:e})).url,disconnect:async e=>void await nf(`/api/music/spotify/disconnect`,{pin:e})},af=e=>e.trim()===``||/^[A-Za-z0-9]{8,64}$/.test(e.trim())?null:`A client id is letters and digits only, copied from your app at developer.spotify.com.`;function of({api:e=rf,navigate:t=e=>window.location.assign(e)}){let[n,r]=(0,v.useState)(null),[i,a]=(0,v.useState)(``),[o,s]=(0,v.useState)(null),[c,l]=(0,v.useState)(``),[u,d]=(0,v.useState)(!1),[f,p]=(0,v.useState)(null),[m,h]=(0,v.useState)(!1),g=(0,v.useRef)(!0),_=(0,v.useCallback)(async()=>{try{let t=await e.info();if(!g.current)return;r(t),a(t.clientId)}catch(e){g.current&&p(e.message)}},[e]);(0,v.useEffect)(()=>(g.current=!0,_(),()=>{g.current=!1}),[_]);let y=async()=>{if(o){d(!0),p(null);try{o===`client`?(await e.saveClientId(i.trim(),c),await _()):o===`connect`?t(await e.connect(c)):(await e.disconnect(c),await _()),g.current&&s(null)}catch(e){g.current&&p(e.message)}finally{g.current&&(d(!1),l(``))}}};if(o)return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`p`,{className:`auth-note`,children:[`Enter your PIN `,o===`client`?`to save the client id`:o===`connect`?`to connect Spotify`:`to disconnect Spotify`,`.`]}),(0,C.jsx)(P,{pin:c,onChange:l,onSubmit:()=>!u&&c.length>=6&&void y()}),f&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:f}),(0,C.jsxs)(`div`,{className:`approval-actions`,children:[(0,C.jsx)(`button`,{type:`button`,style:b,className:`primary`,disabled:u||c.length<6,onClick:()=>void y(),children:o===`client`?`Save`:`Continue`}),(0,C.jsx)(`button`,{type:`button`,style:b,onClick:()=>{s(null),l(``),p(null)},children:`Back`})]})]});let x=af(i),S=!!n&&i.trim()!==n.clientId,w=!!n?.clientId,T=n?.status;return(0,C.jsxs)(`div`,{className:`settings-section`,children:[(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Redirect address to add in your Spotify app`}),(0,C.jsxs)(`div`,{style:{display:`flex`,gap:6},children:[(0,C.jsx)(`input`,{type:`text`,readOnly:!0,value:n?.redirectUri??``,style:{flex:1},onFocus:e=>e.currentTarget.select()}),(0,C.jsx)(`button`,{type:`button`,onClick:()=>{navigator.clipboard?.writeText(n?.redirectUri??``).then(()=>h(!0),()=>{})},children:m?`Copied`:`Copy`})]})]}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Client id of your Spotify app`}),(0,C.jsx)(`input`,{type:`text`,value:i,maxLength:64,autoComplete:`off`,spellCheck:!1,onChange:e=>a(e.target.value)})]}),x&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:x}),(0,C.jsxs)(`div`,{className:`approval-actions`,children:[(0,C.jsx)(`button`,{type:`button`,style:b,disabled:!S||!i.trim()||x!==null,onClick:()=>s(`client`),children:`Save client id`}),T?.connected?(0,C.jsx)(`button`,{type:`button`,style:b,onClick:()=>s(`disconnect`),children:`Disconnect Spotify`}):(0,C.jsx)(`button`,{type:`button`,style:b,className:`primary`,disabled:!w||S,onClick:()=>s(`connect`),children:`Connect Spotify`})]}),T?.connected&&(0,C.jsxs)(`p`,{className:`auth-note`,children:[`Connected as `,T.account??`your account`,`.`]}),T?.needs&&(0,C.jsx)(`p`,{className:`auth-note`,children:T.needs}),f&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:f}),(0,C.jsx)(`small`,{className:`auth-note`,children:`Sign-in is on Spotify's own page: Friend never sees your Spotify password. A development-mode Spotify app allows up to five people, and playing needs Spotify Premium on the account.`})]})}function sf({api:e=Pd,found:t}){let[n,r]=(0,v.useState)(null),[i,a]=(0,v.useState)(``),[o,s]=(0,v.useState)(20),[c,l]=(0,v.useState)(12e3),[u,d]=(0,v.useState)(!1),[f,p]=(0,v.useState)(``),[m,h]=(0,v.useState)(!1),[g,_]=(0,v.useState)(null),[y,x]=(0,v.useState)(null),S=(0,v.useRef)(!0),w=e=>{r(e),a(e.chromePath),s(e.timeoutSec),l(e.maxChars)};(0,v.useEffect)(()=>(S.current=!0,e.get().then(e=>S.current&&e.browser&&w(e.browser)).catch(e=>S.current&&_(e.message)),()=>{S.current=!1}),[e]);let T={};n&&i.trim()!==n.chromePath&&(T.chromePath=i.trim()),n&&o!==n.timeoutSec&&(T.timeoutSec=o),n&&c!==n.maxChars&&(T.maxChars=c);let E=Object.keys(T).length>0,D=async()=>{h(!0),_(null);try{let t=await e.save({browser:T},f);if(!S.current)return;t.settings.browser&&w(t.settings.browser),d(!1),x(`Saved.`)}catch(e){S.current&&_(e.message)}finally{S.current&&(h(!1),p(``))}};return u?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`p`,{className:`auth-note`,children:`Enter your PIN to save these changes.`}),(0,C.jsx)(P,{pin:f,onChange:p,onSubmit:()=>!m&&f.length>=6&&void D()}),g&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:g}),(0,C.jsxs)(`div`,{className:`approval-actions`,children:[(0,C.jsx)(`button`,{type:`button`,style:b,className:`primary`,disabled:m||f.length<6,onClick:()=>void D(),children:`Save`}),(0,C.jsx)(`button`,{type:`button`,style:b,onClick:()=>{d(!1),p(``),_(null)},children:`Back`})]})]}):(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`p`,{className:`auth-note`,children:t?`Friend will use: ${t}`:`Friend has not found Chrome or Edge on this PC.`}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Browser program (optional)`}),(0,C.jsx)(`input`,{"aria-label":`Browser program`,value:i,placeholder:`Leave empty to find Chrome or Edge by itself`,onChange:e=>a(e.target.value)}),(0,C.jsx)(`small`,{className:`auth-note`,children:`A full path to chrome.exe, msedge.exe or chromium. Only needed if Friend cannot find one.`})]}),(0,C.jsx)(Ld,{label:`Longest a page may take (seconds)`,value:o,onChange:s,min:5,max:60}),(0,C.jsx)(Ld,{label:`Most page text given to the assistant (characters)`,value:c,onChange:l,min:1e3,max:3e4,step:1e3}),y&&!E&&(0,C.jsx)(`p`,{className:`auth-note`,children:y}),g&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:g}),(0,C.jsx)(`div`,{className:`approval-actions`,children:(0,C.jsx)(`button`,{type:`button`,style:b,className:`primary`,disabled:!E||m,onClick:()=>d(!0),children:E?`Save…`:`Save`})})]})}function cf({api:e=Pd}){let[t,n]=(0,v.useState)(null),[r,i]=(0,v.useState)(`basic`),[a,o]=(0,v.useState)(5),[s,c]=(0,v.useState)(``),[l,u]=(0,v.useState)(!1),[d,f]=(0,v.useState)(``),[p,m]=(0,v.useState)(!1),[h,g]=(0,v.useState)(null),[_,y]=(0,v.useState)(null),x=(0,v.useRef)(!0),S=e=>{let t={keySet:e.tavilyKeySet,depth:e.tavily?.depth??`basic`,maxResults:e.tavily?.maxResults??5};n(t),i(t.depth),o(t.maxResults)};(0,v.useEffect)(()=>(x.current=!0,e.get().then(e=>x.current&&e.web&&S(e.web)).catch(e=>x.current&&g(e.message)),()=>{x.current=!1}),[e]);let w={};t&&r!==t.depth&&(w.depth=r),t&&a!==t.maxResults&&(w.maxResults=a);let T={};s.trim()&&(T.tavilyKey=s.trim()),Object.keys(w).length&&(T.tavily=w);let E=Object.keys(T).length>0,D=async()=>{m(!0),g(null);try{let t=await e.save({web:T},d);if(!x.current)return;t.settings.web&&S(t.settings.web),c(``),u(!1),y(`Saved.`)}catch(e){x.current&&g(e.message)}finally{x.current&&(m(!1),f(``))}};return l?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`p`,{className:`auth-note`,children:`Enter your PIN to save these changes.`}),(0,C.jsx)(P,{pin:d,onChange:f,onSubmit:()=>!p&&d.length>=6&&void D()}),h&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:h}),(0,C.jsxs)(`div`,{className:`approval-actions`,children:[(0,C.jsx)(`button`,{type:`button`,style:b,className:`primary`,disabled:p||d.length<6,onClick:()=>void D(),children:`Save`}),(0,C.jsx)(`button`,{type:`button`,style:b,onClick:()=>{u(!1),f(``),g(null)},children:`Back`})]})]}):(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Tavily API key`}),(0,C.jsx)(`input`,{type:`password`,autoComplete:`off`,"aria-label":`Tavily API key`,placeholder:t?.keySet?`saved`:`tvly-…`,value:s,onChange:e=>c(e.target.value)}),(0,C.jsx)(`small`,{className:`auth-note`,children:t?.keySet?`A key is saved. Type a new one only to replace it.`:`From your Tavily account (tavily.com). It stays on this PC and is never shown to the assistant.`})]}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Search depth`}),(0,C.jsxs)(`select`,{value:r,onChange:e=>i(e.target.value),children:[(0,C.jsx)(`option`,{value:`basic`,children:`Basic (1 credit a search)`}),(0,C.jsx)(`option`,{value:`advanced`,children:`Advanced (2 credits, reads deeper)`})]})]}),(0,C.jsx)(Ld,{label:`Results per search`,value:a,onChange:o,min:1,max:8}),_&&!E&&(0,C.jsx)(`p`,{className:`auth-note`,children:_}),h&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:h}),(0,C.jsx)(`div`,{className:`approval-actions`,children:(0,C.jsx)(`button`,{type:`button`,style:b,className:`primary`,disabled:!E||p,onClick:()=>u(!0),children:E?`Save…`:`Save`})})]})}async function lf(e,t){let n;try{n=await fetch(e,t)}catch{throw Error(`Could not reach Friend. Check the connection.`)}let r={};try{r=await n.json()}catch{}if(!n.ok)throw Error(r.error??(n.status===401?`Please sign in again.`:n.status===403?`Incorrect PIN`:`The request failed (${n.status}).`));return r}var uf={output:`screen`,maxHeight:720,maxMinutes:240,allowedSites:[],ytdlp:``,ffmpeg:``,autoInstall:!0,youtube:`embed`},df={info:async()=>{let[e,t]=await Promise.all([lf(`/api/settings`),lf(`/api/plugins/video/status`)]);return{settings:e.video??uf,status:t}},recheck:()=>lf(`/api/plugins/video/check`,{method:`POST`,headers:{"content-type":`application/json`},body:`{}`}),prepare:()=>lf(`/api/plugins/video/prepare`,{method:`POST`,headers:{"content-type":`application/json`},body:`{}`}),save:async(e,t)=>{await lf(`/api/settings`,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify({pin:t,settings:{video:e}})})}},ff=[360,480,720,1080],pf=1,mf=600,hf=e=>e.split(/[\s,;]+/).map(e=>e.trim()).filter(Boolean),gf=e=>e.join(`, `);function _f({name:e,h:t,need:n,auto:r}){return(0,C.jsx)(`li`,{className:t.found?`done`:void 0,children:t.found?(0,C.jsxs)(C.Fragment,{children:[e,` `,t.version??``,` found`]}):(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`strong`,{children:[e,` not found`]}),` `,(0,C.jsxs)(`small`,{children:[`(`,n,`)`]}),r&&(0,C.jsx)(`div`,{className:`auth-note`,children:r}),t.install&&(0,C.jsx)(`div`,{className:`auth-note`,children:t.install})]})})}function vf({api:e=df,pollMs:t=2e3}){let[n,r]=(0,v.useState)(null),[i,a]=(0,v.useState)(uf),[o,s]=(0,v.useState)(``),[c,l]=(0,v.useState)(`240`),[u,d]=(0,v.useState)(!1),[f,p]=(0,v.useState)(``),[m,h]=(0,v.useState)(!1),[g,_]=(0,v.useState)(null),[y,x]=(0,v.useState)(null),S=(0,v.useRef)(!0),w=(0,v.useCallback)(async()=>{try{let t=await e.info();if(!S.current)return;r(t),a(t.settings),s(gf(t.settings.allowedSites)),l(String(t.settings.maxMinutes))}catch(e){S.current&&_(e.message)}},[e]);(0,v.useEffect)(()=>(S.current=!0,w(),()=>{S.current=!1}),[w]);let T=n?.status.setup?.busy===!0;(0,v.useEffect)(()=>{if(!T||t<=0)return;let n=setInterval(()=>{e.info().then(e=>S.current&&r(t=>t?{...t,status:e.status}:e)).catch(()=>{})},t);return()=>clearInterval(n)},[T,t,e]);let E=n?.settings??uf,D=Number(c),O=!Number.isInteger(D)||D<pf||D>mf?`Use a whole number of minutes from ${pf} to ${mf}.`:null,k=(()=>{let e={};i.output!==E.output&&(e.output=i.output),i.maxHeight!==E.maxHeight&&(e.maxHeight=i.maxHeight),!O&&D!==E.maxMinutes&&(e.maxMinutes=D);let t=hf(o);return JSON.stringify(t)!==JSON.stringify(E.allowedSites)&&(e.allowedSites=t),i.autoInstall!==E.autoInstall&&(e.autoInstall=i.autoInstall),i.youtube!==E.youtube&&(e.youtube=i.youtube),i.ytdlp.trim()!==E.ytdlp&&(e.ytdlp=i.ytdlp.trim()),i.ffmpeg.trim()!==E.ffmpeg&&(e.ffmpeg=i.ffmpeg.trim()),e})(),A=Object.keys(k).length>0,j=async()=>{h(!0),_(null);try{let t=await e.recheck();S.current&&r(e=>e&&{...e,status:t})}catch(e){S.current&&_(e.message)}finally{S.current&&h(!1)}},ee=async()=>{h(!0),_(null);try{let t=await e.prepare();S.current&&r(e=>e&&{...e,status:t})}catch(e){S.current&&_(e.message)}finally{S.current&&h(!1)}},M=async()=>{h(!0),_(null);try{if(await e.save(k,f),!S.current)return;d(!1),x(`Saved.`),await w()}catch(e){S.current&&_(e.message)}finally{S.current&&(h(!1),p(``))}};if(u)return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`p`,{className:`auth-note`,children:`Enter your PIN to save these changes.`}),(0,C.jsx)(P,{pin:f,onChange:p,onSubmit:()=>!m&&f.length>=6&&void M()}),g&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:g}),(0,C.jsxs)(`div`,{className:`approval-actions`,children:[(0,C.jsx)(`button`,{type:`button`,style:b,className:`primary`,disabled:m||f.length<6,onClick:()=>void M(),children:`Save`}),(0,C.jsx)(`button`,{type:`button`,style:b,onClick:()=>{d(!1),p(``),_(null)},children:`Back`})]})]});let N=n?.status,F=N?.setup,te=e=>i.autoInstall?`Friend downloads ${e} by itself when it is needed (or press Download now).`:null,ne=!!N&&(!N.ytdlp.found||!N.ffmpeg.found);return(0,C.jsxs)(`div`,{className:`settings-section`,children:[N&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`h4`,{className:`plugins-heading`,children:`Helper programs on this PC`}),(0,C.jsxs)(`ol`,{className:`integration-steps`,children:[(0,C.jsx)(_f,{name:`yt-dlp`,h:N.ytdlp,need:`finds the video, needed for every video`,auto:te(`it`)}),(0,C.jsx)(_f,{name:`ffmpeg`,h:N.ffmpeg,need:`makes the video playable, needed for the Friend screen`,auto:te(`it`)}),(0,C.jsx)(_f,{name:`mpv`,h:N.mpv,need:`optional: a window of its own on this PC; without it a browser window is used`,auto:null})]}),F?.busy&&(0,C.jsx)(`p`,{className:`auth-note`,children:F.message??`Setting up the video tools…`}),!F?.busy&&F?.error&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:F.error}),(0,C.jsxs)(`div`,{className:`approval-actions`,children:[ne&&i.autoInstall&&!F?.busy&&(0,C.jsx)(`button`,{type:`button`,style:b,className:`primary`,disabled:m,onClick:()=>void ee(),children:`Download now`}),(0,C.jsx)(`button`,{type:`button`,style:b,disabled:m,onClick:()=>void j(),children:`Check again`})]})]}),(0,C.jsxs)(`label`,{className:`settings-field`,style:{flexDirection:`row`,alignItems:`center`,gap:8},children:[(0,C.jsx)(`input`,{type:`checkbox`,checked:i.autoInstall,onChange:e=>a({...i,autoInstall:e.target.checked})}),(0,C.jsx)(`span`,{children:`Let Friend download yt-dlp and ffmpeg by itself (recommended)`})]}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Where videos play`}),(0,C.jsxs)(`select`,{value:i.output,onChange:e=>a({...i,output:e.target.value}),children:[(0,C.jsx)(`option`,{value:`screen`,children:`On the Friend screen`}),(0,C.jsx)(`option`,{value:`host`,children:`In a window on this PC`})]})]}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`YouTube plays with`}),(0,C.jsxs)(`select`,{value:i.youtube,onChange:e=>a({...i,youtube:e.target.value}),children:[(0,C.jsx)(`option`,{value:`embed`,children:`YouTube's own player (recommended: nothing to download)`}),(0,C.jsx)(`option`,{value:`stream`,children:`Friend's player (made by Friend with ffmpeg)`})]})]}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Picture quality (the tallest picture)`}),(0,C.jsx)(`select`,{value:String(i.maxHeight),onChange:e=>a({...i,maxHeight:Number(e.target.value)}),children:(ff.includes(i.maxHeight)?ff:[...ff,i.maxHeight].sort((e,t)=>e-t)).map(e=>(0,C.jsxs)(`option`,{value:e,children:[e,`p`]},e))})]}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Longest video, in minutes`}),(0,C.jsx)(`input`,{type:`number`,min:pf,max:mf,value:c,onChange:e=>l(e.target.value)})]}),O&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:O}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Allowed sites (empty: any public site)`}),(0,C.jsx)(`textarea`,{rows:2,spellCheck:!1,placeholder:`youtube.com, vimeo.com`,value:o,onChange:e=>s(e.target.value)})]}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`yt-dlp program (empty: find it by itself)`}),(0,C.jsx)(`input`,{type:`text`,value:i.ytdlp,maxLength:260,spellCheck:!1,autoComplete:`off`,placeholder:`yt-dlp`,onChange:e=>a({...i,ytdlp:e.target.value})})]}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`ffmpeg program (empty: find it by itself)`}),(0,C.jsx)(`input`,{type:`text`,value:i.ffmpeg,maxLength:260,spellCheck:!1,autoComplete:`off`,placeholder:`ffmpeg`,onChange:e=>a({...i,ffmpeg:e.target.value})})]}),y&&!A&&(0,C.jsx)(`p`,{className:`auth-note`,children:y}),g&&!O&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:g}),(0,C.jsx)(`div`,{className:`approval-actions`,children:(0,C.jsx)(`button`,{type:`button`,style:b,className:`primary`,disabled:!A||m||O!==null,onClick:()=>d(!0),children:A?`Save…`:`Save`})}),(0,C.jsx)(`small`,{className:`auth-note`,children:`Friend downloads the two programs from their projects' own release pages (github.com), checks them against the published checksums and keeps them in its own folder, never anywhere else on your PC. Videos stay on the site; nothing is saved to your disk. Some sites need a login or are not available in every country, and those cannot be played.`})]})}async function yf(e,t){let n;try{n=await fetch(e,t)}catch{throw Error(`Could not reach Friend. Check the connection.`)}let r={};try{r=await n.json()}catch{}if(!n.ok)throw Error(r.error??(n.status===401?`Please sign in again.`:`The request failed (${n.status}).`));return r}var bf=(e,t)=>({method:e,headers:{"content-type":`application/json`},body:JSON.stringify(t)}),xf={status:()=>yf(`/api/brokers`),loginLink:e=>yf(`/api/brokers/zerodha/login-link`,bf(`POST`,{send:e})),runNow:e=>yf(`/api/brokers/run`,bf(`POST`,{kind:`custom`,send:e===!0})),addSchedule:async(e,t)=>void await yf(`/api/brokers/schedules`,bf(`POST`,{...e,pin:t})),removeSchedule:async e=>void await yf(`/api/brokers/schedules/${e}`,{method:`DELETE`})},Sf=[`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`,`Sun`],Cf=[[`telegram`,`Telegram`],[`whatsapp`,`WhatsApp`],[`sms`,`SMS`]],wf={telegram:`Telegram`,whatsapp:`WhatsApp`,sms:`SMS`};function Tf({view:e,setView:t,secret:n,setSecret:r,api:i=xf}){let[a,o]=(0,v.useState)(null),[s,c]=(0,v.useState)(null),[l,u]=(0,v.useState)(null),[d,f]=(0,v.useState)(null),[p,m]=(0,v.useState)(!1),[h,g]=(0,v.useState)(!1),[_,y]=(0,v.useState)(``),[x,S]=(0,v.useState)({name:`Morning report`,kind:`morning`,time:`09:30`,days:[1,2,3,4,5],channel:`telegram`}),[w,T]=(0,v.useState)(!1),E=(0,v.useRef)(!0),D=(0,v.useCallback)(()=>i.status().then(e=>E.current&&o(e)).catch(()=>{}),[i]);(0,v.useEffect)(()=>(E.current=!0,D(),()=>{E.current=!1}),[D]);let O=async e=>{T(!0),u(null),c(null);try{await e()}catch(e){E.current&&u(e.message)}finally{E.current&&T(!1)}},k=e.zerodha,A=n=>t({...e,...n}),j=a?.schedules[0]?.channel??`telegram`,ee=()=>/^([01]\d|2[0-3]):[0-5]\d$/.test(x.time)?x.days.length===0?`Choose at least one day.`:x.name.trim()?null:`Give the report a name.`:`Write the time like 09:30 (HH:MM, 24 hour).`,M=()=>O(async()=>{await i.addSchedule({...x,name:x.name.trim()},_),m(!1),g(!1),y(``),await D()});return(0,C.jsxs)(`div`,{className:`settings-section`,children:[(0,C.jsx)(`p`,{className:`auth-note`,children:`Friend only reads your account. It cannot place orders. The figures you ask about pass through the AI model you chose (Claude from Anthropic, or Ollama on this PC), and a report you schedule goes to the messaging app you pick (Telegram or WhatsApp). Nothing else leaves this PC.`}),(0,C.jsx)(`p`,{className:`auth-note`,children:a?.redirectUrl?(0,C.jsxs)(C.Fragment,{children:[`In your Kite Connect app, set the redirect URL to `,(0,C.jsx)(`code`,{children:a.redirectUrl})]}):`No public address is set yet, so Zerodha cannot send you back to Friend after login (friend config set publicUrl https://…).`}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`API key`}),(0,C.jsx)(`input`,{value:k.apiKey,autoComplete:`off`,onChange:e=>A({zerodha:{...k,apiKey:e.target.value}}),style:b})]}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`API secret`}),(0,C.jsx)(`input`,{type:`password`,autoComplete:`off`,value:n,placeholder:k.secretSet?`A secret is saved. Type to replace it.`:``,onChange:e=>r(e.target.value),style:b})]}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Time zone`}),(0,C.jsx)(`input`,{value:e.timezone,onChange:e=>A({timezone:e.target.value}),style:b})]}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Days with no reports (one per line, YYYY-MM-DD)`}),(0,C.jsx)(`textarea`,{value:e.skipDates.join(`
68
68
  `),rows:3,onChange:e=>A({skipDates:e.target.value.split(/[\s,]+/).filter(Boolean)})})]}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Remind me to log in (minutes before the first report, 0 = never)`}),(0,C.jsx)(`input`,{type:`number`,min:0,max:120,value:e.loginReminderMinutes,onChange:e=>A({loginReminderMinutes:Number(e.target.value)}),style:b})]}),(0,C.jsxs)(`details`,{children:[(0,C.jsx)(`summary`,{className:`plugins-heading`,children:`Report options`}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Currency sign`}),(0,C.jsx)(`input`,{value:e.currencySymbol,maxLength:4,onChange:e=>A({currencySymbol:e.target.value}),style:b})]}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Currency word (spoken)`}),(0,C.jsx)(`input`,{value:e.currencyName,maxLength:20,onChange:e=>A({currencyName:e.target.value}),style:b})]}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Number format (locale)`}),(0,C.jsx)(`input`,{value:e.numberLocale,onChange:e=>A({numberLocale:e.target.value}),placeholder:`en-IN, en-US, de-DE`,style:b})]}),(0,C.jsx)(Ld,{label:`Mention a holding above this share of the portfolio (%)`,value:e.concentrationPct,min:5,max:90,onChange:e=>A({concentrationPct:e})}),(0,C.jsx)(Ld,{label:`Mention a holding down more than this today (%)`,value:e.bigDropPct,min:1,max:50,onChange:e=>A({bigDropPct:e})}),(0,C.jsx)(Ld,{label:`Seconds to keep an account read`,value:e.cacheSeconds,min:5,max:300,onChange:e=>A({cacheSeconds:e})}),(0,C.jsx)(Ld,{label:`Most report schedules`,value:e.maxSchedules,min:1,max:50,onChange:e=>A({maxSchedules:e})}),(0,C.jsx)(Ld,{label:`Tries a day for a report`,value:e.maxTriesPerDay,min:1,max:10,onChange:e=>A({maxTriesPerDay:e})})]}),(0,C.jsx)(`h4`,{className:`plugins-heading`,children:`Daily login`}),(0,C.jsx)(`p`,{className:(a?.zerodha.loggedIn,`auth-note`),children:a?.zerodha.detail??`Checking…`}),(0,C.jsxs)(`div`,{className:`approval-actions`,children:[(0,C.jsx)(`button`,{type:`button`,style:b,disabled:w,onClick:()=>void O(async()=>{let e=await i.loginLink(!1);e.url&&window.open(e.url,`_blank`,`noopener,noreferrer`)}),children:`Open Zerodha login`}),(0,C.jsxs)(`button`,{type:`button`,style:b,disabled:w,onClick:()=>void O(async()=>{let e=await i.loginLink(!0);c(`The login link was sent to your phone${e.via?` (${wf[e.via]??e.via})`:``}.`)}),children:[`Send me the login link on `,wf[j]??`Telegram`]})]}),(0,C.jsx)(`h4`,{className:`plugins-heading`,children:`Reports`}),a&&a.schedules.length===0&&(0,C.jsx)(`p`,{className:`auth-note`,children:`No reports are scheduled.`}),(0,C.jsx)(`ul`,{className:`plugins-list`,children:(a?.schedules??[]).map(e=>(0,C.jsxs)(`li`,{children:[(0,C.jsx)(`b`,{children:e.name}),` `,(0,C.jsxs)(`small`,{className:`auth-note`,children:[e.time,`, `,e.days.map(e=>Sf[e-1]).join(` `),` to `,wf[e.channel],e.lastRunDay?`, last sent ${e.lastRunDay}`:``]}),` `,(0,C.jsx)(`button`,{type:`button`,style:b,disabled:w,onClick:()=>void O(async()=>{await i.removeSchedule(e.id),await D()}),children:`Remove`})]},e.id))}),p&&!h&&(0,C.jsxs)(`div`,{className:`settings-section`,children:[(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Name`}),(0,C.jsx)(`input`,{value:x.name,onChange:e=>S({...x,name:e.target.value}),style:b})]}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Kind`}),(0,C.jsxs)(`select`,{value:x.kind,onChange:e=>S({...x,kind:e.target.value}),style:b,children:[(0,C.jsx)(`option`,{value:`morning`,children:`Morning`}),(0,C.jsx)(`option`,{value:`close`,children:`Market close`}),(0,C.jsx)(`option`,{value:`custom`,children:`Custom`})]})]}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Time (24 hour)`}),(0,C.jsx)(`input`,{value:x.time,onChange:e=>S({...x,time:e.target.value}),placeholder:`09:30`,style:b})]}),(0,C.jsx)(`div`,{className:`settings-field`,role:`group`,"aria-label":`Days`,children:Sf.map((e,t)=>(0,C.jsxs)(`label`,{className:`settings-check`,children:[(0,C.jsx)(`input`,{type:`checkbox`,checked:x.days.includes(t+1),onChange:e=>S({...x,days:e.target.checked?[...x.days,t+1].sort():x.days.filter(e=>e!==t+1)})}),(0,C.jsx)(`span`,{children:e})]},e))}),(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Send it on`}),(0,C.jsx)(`select`,{value:x.channel,onChange:e=>S({...x,channel:e.target.value}),style:b,children:Cf.map(([e,t])=>(0,C.jsx)(`option`,{value:e,children:t},e))})]}),(0,C.jsxs)(`div`,{className:`approval-actions`,children:[(0,C.jsx)(`button`,{type:`button`,style:b,className:`primary`,onClick:()=>{let e=ee();u(e),e||g(!0)},children:`Add report…`}),(0,C.jsx)(`button`,{type:`button`,style:b,onClick:()=>{m(!1),u(null)},children:`Cancel`})]})]}),p&&h&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`p`,{className:`auth-note`,children:[`Enter your PIN to add this report. It sends your portfolio figures to `,wf[x.channel],`.`]}),(0,C.jsx)(P,{pin:_,onChange:y,onSubmit:()=>!w&&_.length>=6&&void M()}),(0,C.jsxs)(`div`,{className:`approval-actions`,children:[(0,C.jsx)(`button`,{type:`button`,style:b,className:`primary`,disabled:w||_.length<6,onClick:()=>void M(),children:`Add report`}),(0,C.jsx)(`button`,{type:`button`,style:b,onClick:()=>{g(!1),y(``)},children:`Back`})]})]}),!p&&(0,C.jsxs)(`div`,{className:`approval-actions`,children:[(0,C.jsx)(`button`,{type:`button`,style:b,onClick:()=>{m(!0),u(null),c(null)},children:`Add a report`}),(0,C.jsx)(`button`,{type:`button`,style:b,disabled:w,onClick:()=>void O(async()=>f((await i.runNow()).text)),children:`Show a report now`}),(0,C.jsx)(`button`,{type:`button`,style:b,disabled:w,onClick:()=>void O(async()=>{await i.runNow(!0),c(`The report was sent to your phone.`)}),children:`Send a report to my phone`})]}),d&&(0,C.jsx)(`pre`,{className:`auth-note`,style:{whiteSpace:`pre-wrap`},children:d}),s&&(0,C.jsx)(`p`,{className:`auth-note`,children:s}),l&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:l})]})}var Ef={telegram:{installed:!1,enabled:!1,tokenSet:!1,linked:!1},twilio:{installed:!1,enabled:!1,accountSid:``,tokenSet:!1,smsFrom:``,whatsappFrom:``,ownerNumber:``}},Df={zerodha:{installed:!1,enabled:!1,apiKey:``,secretSet:!1},timezone:`Asia/Kolkata`,skipDates:[],loginReminderMinutes:15,currencySymbol:`₹`,currencyName:`rupees`,numberLocale:`en-IN`,concentrationPct:30,bigDropPct:5,cacheSeconds:30,maxSchedules:20,maxTriesPerDay:3},Of=[`currencySymbol`,`currencyName`,`numberLocale`,`concentrationPct`,`bigDropPct`,`cacheSeconds`,`maxSchedules`,`maxTriesPerDay`],kf=[`skillName`,`locales`,`answerSeconds`,`holdMinutes`,`permissionSeconds`,`requestsPerMinute`,`maxDevices`,`extraVoiceTools`],Af=(e,t,n)=>Object.fromEntries(n.filter(n=>JSON.stringify(e[n])!==JSON.stringify(t[n])).map(t=>[t,e[t]])),jf={installed:!1,enabled:!1,skillId:``,invocationName:``,allowed:[],skillName:`Friend Assistant`,locales:[`en-IN`,`hi-IN`],answerSeconds:6.5,holdMinutes:10,permissionSeconds:120,requestsPerMinute:60,maxDevices:10,extraVoiceTools:[]};function Mf({integration:e,onBack:t,settingsApi:n=Pd,channelsApi:r=wt,brokersApi:i=xf,alexaApi:a=zd,spotifyApi:o=rf,soundcloudApi:s=Qd,chromeApi:c=qd,videoApi:l=df}){let[u,d]=(0,v.useState)(null),[f,p]=(0,v.useState)(Ef),[m,h]=(0,v.useState)(null),[g,_]=(0,v.useState)(Df),[y,x]=(0,v.useState)(null),[S,w]=(0,v.useState)(jf),[T,E]=(0,v.useState)(``),[D,O]=(0,v.useState)(null),[k,A]=(0,v.useState)(!1),[j,ee]=(0,v.useState)(``),[M,N]=(0,v.useState)(!1),[F,te]=(0,v.useState)(null),[ne,re]=(0,v.useState)(null),I=(0,v.useRef)(!0),ie=e.id===`telegram`,ae=e.id===`zerodha`,oe=e.id===`alexa`,se=e.id===`spotify`,ce=e.id===`soundcloud`,le=e.id===`audius`,L=e.id===`chrome`,ue=e.id===`video`,de=e.id===`tavily`,R=e.id===`browser`,z=se||ce||le||L||ue||de||R;(0,v.useEffect)(()=>(I.current=!0,n.get().then(e=>{if(!I.current)return;let t=e.channels??Ef;d(t),p(structuredClone(t));let n=e.brokers??Df;h(n),_(structuredClone(n));let r=e.alexa??jf;x(r),w(structuredClone(r))}).catch(e=>I.current&&te(e.message)),r.status().then(e=>I.current&&O(e)).catch(()=>{}),()=>{I.current=!1}),[n,r]);let B=(()=>{if(z)return{};if(oe){if(!y)return{};let e=Af(S,y,kf);return S.skillId.trim()!==y.skillId&&(e.skillId=S.skillId.trim()),S.invocationName.trim()!==y.invocationName&&(e.invocationName=S.invocationName.trim()),Object.keys(e).length?{alexa:e}:{}}if(ae){if(!m)return{};let e={};g.zerodha.apiKey!==m.zerodha.apiKey&&(e.apiKey=g.zerodha.apiKey.trim()),T.trim()&&(e.apiSecret=T.trim());let t={};return Object.keys(e).length&&(t.zerodha=e),g.timezone!==m.timezone&&(t.timezone=g.timezone.trim()),JSON.stringify(g.skipDates)!==JSON.stringify(m.skipDates)&&(t.skipDates=g.skipDates),g.loginReminderMinutes!==m.loginReminderMinutes&&(t.loginReminderMinutes=g.loginReminderMinutes),Object.assign(t,Af(g,m,Of)),Object.keys(t).length?{brokers:t}:{}}if(!u)return{};if(ie)return T.trim()?{channels:{telegram:{botToken:T.trim()}}}:{};let e={};for(let t of[`accountSid`,`smsFrom`,`whatsappFrom`,`ownerNumber`])f.twilio[t]!==u.twilio[t]&&(e[t]=f.twilio[t]);return T.trim()&&(e.authToken=T.trim()),Object.keys(e).length?{channels:{twilio:e}}:{}})(),fe=Object.keys(B).length>0,pe=async()=>{N(!0),te(null);try{let t=await n.save(B,j);if(!I.current)return;let r=t.settings.channels??Ef;d(r),p(structuredClone(r));let i=t.settings.brokers??Df;h(i),_(structuredClone(i));let a=t.settings.alexa??jf;x(a),w(structuredClone(a)),E(``),A(!1),re(ie&&!e.enabled?`Saved. Now press Turn on in the plugins list.`:`Saved.`)}catch(e){I.current&&te(e.message)}finally{I.current&&(N(!1),ee(``))}};return k?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`p`,{className:`auth-note`,children:`Enter your PIN to save these changes.`}),(0,C.jsx)(P,{pin:j,onChange:ee,onSubmit:()=>!M&&void pe()}),F&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:F}),(0,C.jsxs)(`div`,{className:`approval-actions`,children:[(0,C.jsx)(`button`,{type:`button`,style:b,className:`primary`,disabled:M||j.length<6,onClick:()=>void pe(),children:`Save`}),(0,C.jsx)(`button`,{type:`button`,style:b,onClick:()=>{A(!1),ee(``),te(null)},children:`Back`})]})]}):(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`h4`,{className:`plugins-heading`,children:e.name}),(0,C.jsx)(`p`,{className:`auth-note`,children:L?e.description:e.detail||e.description}),(0,C.jsx)(`ol`,{className:`integration-steps`,children:e.steps.map((e,t)=>(0,C.jsx)(`li`,{className:e.done?`done`:void 0,children:e.text},t))}),se&&(0,C.jsx)(of,{api:o}),ce&&(0,C.jsx)(ef,{api:s}),L&&(0,C.jsx)(Yd,{api:c}),ue&&(0,C.jsx)(vf,{api:l}),de&&(0,C.jsx)(cf,{api:n}),R&&(0,C.jsx)(sf,{api:n,found:String(e.settings?.chrome??``)}),oe&&y&&(0,C.jsx)(Gd,{view:S,setView:w,api:a}),ae&&m&&(0,C.jsx)(Tf,{view:g,setView:_,secret:T,setSecret:E,api:i}),!ae&&!oe&&!se&&!ce&&!le&&!L&&!ue&&!de&&!R&&u&&(ie?(0,C.jsx)(Tt,{view:{...f.telegram,enabled:e.enabled},secret:T,setSecret:E,api:r}):(0,C.jsx)(Et,{view:f.twilio,setView:e=>p({...f,twilio:e}),secret:T,setSecret:E,webhook:D?.twilio.webhook??null})),ne&&!fe&&(0,C.jsx)(`p`,{className:`auth-note`,children:ne}),F&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:F}),(0,C.jsxs)(`div`,{className:`approval-actions`,children:[!z&&(0,C.jsx)(`button`,{type:`button`,style:b,className:`primary`,disabled:!fe||M||oe&&Vd(S)!==null,onClick:()=>A(!0),children:fe?`Save…`:`Save`}),(0,C.jsx)(`button`,{type:`button`,style:b,onClick:t,children:`Back`})]})]})}async function Nf(e,t={}){let n;try{n=await fetch(`/api/plugins${e}`,t)}catch{throw Error(`Could not reach Friend. Check the connection.`)}if(!n.ok){let e=``;try{e=(await n.json()).error??``}catch{}throw Error(e||(n.status===401?`Please sign in again.`:n.status===429?`Too many attempts. Wait a moment.`:`The request failed (${n.status}).`))}return await n.json()}var Pf=(e,t)=>({method:e,...t===void 0?{}:{headers:{"content-type":`application/json`},body:JSON.stringify(t)}}),Ff={list:()=>Nf(``),install:async(e,t)=>{await Nf(`/install`,Pf(`POST`,{id:e,pin:t}))},setEnabled:async(e,t,n)=>{await Nf(`/${encodeURIComponent(e)}/enabled`,Pf(`POST`,{enabled:t,...n?{pin:n}:{}}))},remove:async e=>{await Nf(`/${encodeURIComponent(e)}`,Pf(`DELETE`))},reload:async()=>{await Nf(`/reload`,Pf(`POST`,{}))}},If=(e,t)=>`${e} ${t}${e===1?``:`s`}`,Lf={"not-installed":``,"needs-setup":`Needs setup`,off:`Off`,connecting:`Connecting…`,online:`On`,error:`Not working`},Rf={"not-installed":`off`,"needs-setup":`warn`,off:`off`,connecting:`warn`,online:`on`,error:`error`},zf=e=>({id:e.id,name:e.name,version:``,description:e.description,tools:0,skills:0,error:null,installed:!1});function Bf({api:e=Ff,onClose:t,initialConfigure:n,variant:r=`classic`}){let[i,a]=(0,v.useState)(null),[o,s]=(0,v.useState)(null),[c,l]=(0,v.useState)(n??null),[u,d]=(0,v.useState)(``),[f,p]=(0,v.useState)(!1),[m,h]=(0,v.useState)(null),[g,_]=(0,v.useState)(`installed`),[y,x]=(0,v.useState)(0),S=(0,v.useRef)(!0);(0,v.useEffect)(()=>{n&&l(n)},[n]);let w=(0,v.useCallback)(async()=>{try{let t=await e.list();S.current&&a(t)}catch(e){S.current&&h(e.message)}},[e]);(0,v.useEffect)(()=>(S.current=!0,w(),()=>{S.current=!1}),[w]);let T=async e=>{h(null),p(!0);try{if(await e(),!S.current)return;s(null),await w()}catch(e){S.current&&h(e.message)}finally{S.current&&(p(!1),d(``))}},E=()=>{o&&T(()=>o.kind===`install`?e.install(o.plugin.id,u):e.setEnabled(o.id,!0,u))},j=i?.integrations??[],ee=(i?.catalog??[]).filter(e=>!e.installed),M=j.filter(e=>e.installed),N=j.filter(e=>!e.installed),F=c?j.find(e=>e.id===c&&e.installed):void 0,te=(t,n,r)=>({label:r?`Turn off`:`Turn on`,disabled:f,onClick:()=>r?void T(()=>e.setEnabled(t,!1,void 0)):s({kind:`enable`,id:t,name:n})}),ne=t=>({label:`Remove`,kind:`danger`,disabled:f,onClick:()=>void T(()=>e.remove(t))}),re=[...M.map(e=>({key:e.id,integrationId:e.id,name:e.name,small:Lf[e.state],note:e.detail,noteClass:e.state===`error`?`auth-error`:`auth-note`,badge:Rf[e.state],badgeText:Lf[e.state]||`Off`,actions:[{label:`Configure`,kind:`primary`,disabled:f,onClick:()=>l(e.id)},te(e.id,e.name,e.enabled),ne(e.id)]})),...(i?.installed??[]).map(e=>({key:e.id,name:e.name,small:e.version,note:e.error?`This plugin cannot be used: ${e.error}`:`${If(e.skills.length,`skill`)}, ${If(e.tools.length,`tool`)}${e.enabled?``:` (off)`}`,noteClass:`auth-note`,badge:e.error?`error`:e.enabled?`on`:`off`,badgeText:e.error?`Error`:e.enabled?`On`:`Off`,actions:[te(e.id,e.name,e.enabled),ne(e.id)]}))],I=[...N.map(e=>({key:e.id,integrationId:e.id,name:e.name,small:`integration`,note:e.description,noteClass:`auth-note`,actions:[{label:`Install`,kind:`primary`,disabled:f,onClick:()=>s({kind:`install`,plugin:zf(e),integration:!0})}]})),...ee.map(e=>({key:e.id,name:e.name,small:e.version,note:e.error?`Cannot be installed: ${e.error}`:`${e.description} (${If(e.skills,`skill`)}, ${If(e.tools,`tool`)})`,noteClass:`auth-note`,actions:[{label:`Install`,kind:`primary`,disabled:f||!!e.error,onClick:()=>s({kind:`install`,plugin:e})}]}))],ie=m&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:m}),ae=o&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`p`,{className:`auth-note`,children:o.kind===`install`?o.integration?`Install ${o.plugin.name}? It connects Friend to an outside service, and you set it up afterwards. Enter your PIN to confirm.`:`Install ${o.plugin.name}? ${o.plugin.tools>0?`Its tools run in a Docker sandbox with no network and no access to your files, and ask for your approval every time. `:``}Enter your PIN to confirm.`:`Switch on ${o.name}? Enter your PIN to confirm.`}),(0,C.jsx)(P,{pin:u,onChange:d,onSubmit:()=>!f&&E()}),ie,(0,C.jsxs)(`div`,{className:r===`holo`?`holo-actions`:`approval-actions`,children:[(0,C.jsx)(`button`,{type:`button`,style:b,className:r===`holo`?`holo-btn`:`primary`,disabled:f||u.length<6,onClick:E,children:`Confirm`}),(0,C.jsx)(`button`,{type:`button`,style:b,className:r===`holo`?`holo-btn quiet`:void 0,onClick:()=>{s(null),d(``),h(null)},children:`Back`})]})]}),oe=F&&(0,C.jsx)(Mf,{integration:F,onBack:()=>{l(null),w()}});if(r===`holo`){let{here:n,at:r,pages:a}=D(g===`installed`?re:I,y),s=!o&&!F,c=o?ae:F?oe:(0,C.jsxs)(C.Fragment,{children:[ie,(0,C.jsx)(k,{tabs:[{id:`installed`,label:`Installed`,count:re.length},{id:`available`,label:`Available`,count:I.length}],active:g,onTab:e=>{_(e),x(0)},cards:n.map(e=>({...e,meta:e.badge?e.integrationId||!e.small?void 0:`version ${e.small}`:e.small||void 0})),empty:g===`installed`?`Nothing installed yet.`:`Everything in the catalog is installed.`,ready:!!i})]});return(0,C.jsx)(A,{label:`Plugins`,title:o?`Confirm with PIN`:F?F.name:`Plugins`,...s&&a>1?{page:O(r,a,x)}:{},help:s?(0,C.jsxs)(C.Fragment,{children:[`Turn plugins on or off, set them up, or install more. Installing and switching on need your `,(0,C.jsx)(`b`,{children:`PIN`}),`.`]}):void 0,extra:s?(0,C.jsx)(`button`,{type:`button`,className:`holo-btn quiet`,disabled:f,onClick:()=>void T(()=>e.reload()),children:`Reload plugins`}):void 0,onDone:t,children:c})}let se=e=>(0,C.jsxs)(`li`,{...e.integrationId?{"data-integration":e.integrationId}:{},children:[(0,C.jsxs)(`div`,{className:`plugin-info`,children:[(0,C.jsx)(`strong`,{children:e.name}),` `,(0,C.jsx)(`small`,{children:e.small}),(0,C.jsx)(`div`,{className:e.noteClass,children:e.note})]}),(0,C.jsx)(`div`,{className:`plugin-actions`,children:e.actions.map(e=>(0,C.jsx)(`button`,{type:`button`,style:b,className:e.kind,disabled:e.disabled,onClick:e.onClick,children:e.label},e.label))})]},e.key);return(0,C.jsxs)(`div`,{className:`approval plugins glass`,role:`dialog`,"aria-label":`Plugins`,style:{pointerEvents:`auto`},children:[(0,C.jsx)(`div`,{className:`approval-head`,children:(0,C.jsx)(`span`,{className:`approval-title`,children:`Plugins`})}),(0,C.jsx)(`div`,{className:`plugins-body`,children:o?ae:F?oe:(0,C.jsxs)(C.Fragment,{children:[ie,(0,C.jsx)(`h4`,{className:`plugins-heading`,children:`Installed`}),i&&re.length===0&&(0,C.jsx)(`p`,{className:`auth-note`,children:`Nothing installed yet.`}),(0,C.jsx)(`ul`,{className:`plugin-list`,children:re.map(se)}),(0,C.jsx)(`h4`,{className:`plugins-heading`,children:`Available`}),i&&I.length===0&&(0,C.jsx)(`p`,{className:`auth-note`,children:`Everything in the catalog is installed.`}),(0,C.jsx)(`ul`,{className:`plugin-list`,children:I.map(se)}),(0,C.jsxs)(`div`,{className:`approval-actions`,children:[(0,C.jsx)(`button`,{type:`button`,style:b,disabled:f,onClick:()=>void T(()=>e.reload()),children:`Reload plugins`}),(0,C.jsx)(`button`,{type:`button`,style:b,onClick:t,children:`Close`})]})]})})]})}function Vf(e){return e.webgl?e.reducedMotion?6e3:e.memoryGb===void 0?8e3:e.memoryGb>=8?12e3:e.memoryGb>=4?9e3:6e3:0}function Hf(){let e=!1;try{let t=document.createElement(`canvas`);e=!!(t.getContext(`webgl2`)||t.getContext(`webgl`))}catch{e=!1}return{webgl:e,memoryGb:navigator.deviceMemory,reducedMotion:typeof matchMedia==`function`&&matchMedia(`(prefers-reduced-motion: reduce)`).matches}}var Uf={idle:{speed:.15,noise:.05,brightness:.85,size:1.6,rotate:.08,tighten:0},listening:{speed:.4,noise:.1,brightness:1.1,size:1.9,rotate:.15,tighten:.08},thinking:{speed:1.1,noise:.22,brightness:1,size:1.7,rotate:.35,tighten:0},speaking:{speed:.6,noise:.12,brightness:1.25,size:1.8,rotate:.12,tighten:0}},Wf=e=>Number.isFinite(e)?Math.min(1,Math.max(0,e)):0,Gf=class{state=`idle`;amplitudeTarget=0;intensity=.6;amp=0;cur={...Uf.idle};phase=0;angle=0;motion;constructor(e={}){this.motion=e.reducedMotion?.25:1}setState(e){this.state=e}setAmplitude(e){this.amplitudeTarget=Wf(e)}setIntensity(e){this.intensity=Wf(e)}tick(e){let t=Uf[this.state],n=1-Math.exp(-e*3);for(let e of Object.keys(t))this.cur[e]+=(t[e]-this.cur[e])*n;this.amp+=(this.amplitudeTarget-this.amp)*(1-Math.exp(-e*12)),this.amplitudeTarget*=Math.exp(-e*3),this.phase+=e*this.cur.speed*this.motion,this.angle+=e*this.cur.rotate*this.motion}uniforms(){return{...this.cur,brightness:this.cur.brightness*(.5+this.intensity)/1.1,speed:this.cur.speed*this.motion,rotate:this.cur.rotate*this.motion,amplitude:this.amp*(this.motion===1?1:.5),phase:this.phase,angle:this.angle}}},Kf=1e3,qf=1001,Jf=1002,Yf=1003,Xf=1004,Zf=1005,Qf=1006,$f=1007,ep=1008,tp=1009,np=1010,rp=1011,ip=1012,ap=1013,op=1014,sp=1015,cp=1016,lp=1017,up=1018,dp=1020,fp=35902,pp=35899,mp=1021,hp=1022,gp=1023,_p=1026,vp=1027,yp=1028,bp=1029,xp=1030,Sp=1031,Cp=1033,wp=33776,Tp=33777,Ep=33778,Dp=33779,Op=35840,kp=35841,Ap=35842,jp=35843,Mp=36196,Np=37492,Pp=37496,Fp=37488,Ip=37489,Lp=37490,Rp=37491,zp=37808,Bp=37809,Vp=37810,Hp=37811,Up=37812,Wp=37813,Gp=37814,Kp=37815,qp=37816,Jp=37817,Yp=37818,Xp=37819,Zp=37820,Qp=37821,$p=36492,em=36494,tm=36495,nm=36283,rm=36284,im=36285,am=36286,om=2300,sm=2301,cm=2302,lm=2303,um=2400,dm=2401,fm=2402,pm=3200,mm=`srgb`,hm=`srgb-linear`,gm=`linear`,_m=`srgb`,vm=7680,ym=35044,bm=2e3;function xm(e){for(let t=e.length-1;t>=0;--t)if(e[t]>=65535)return!0;return!1}function Sm(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function Cm(e){return document.createElementNS(`http://www.w3.org/1999/xhtml`,e)}function wm(){let e=Cm(`canvas`);return e.style.display=`block`,e}var Tm={};function Em(...e){let t=`THREE.`+e.shift();console.log(t,...e)}function Dm(e){let t=e[0];if(typeof t==`string`&&t.startsWith(`TSL:`)){let t=e[1];t&&t.isStackTrace?e[0]+=` `+t.getLocation():e[1]=`Stack trace not available. Enable "THREE.Node.captureStackTrace" to capture stack traces.`}return e}function Om(...e){e=Dm(e);let t=`THREE.`+e.shift();{let n=e[0];n&&n.isStackTrace?console.warn(n.getError(t)):console.warn(t,...e)}}function km(...e){e=Dm(e);let t=`THREE.`+e.shift();{let n=e[0];n&&n.isStackTrace?console.error(n.getError(t)):console.error(t,...e)}}function Am(...e){let t=e.join(` `);t in Tm||(Tm[t]=!0,Om(...e))}function jm(e,t,n){return new Promise(function(r,i){function a(){switch(e.clientWaitSync(t,e.SYNC_FLUSH_COMMANDS_BIT,0)){case e.WAIT_FAILED:i();break;case e.TIMEOUT_EXPIRED:setTimeout(a,n);break;default:r()}}setTimeout(a,n)})}var Mm={0:1,2:6,4:7,3:5,1:0,6:2,7:4,5:3},Nm=class{addEventListener(e,t){this._listeners===void 0&&(this._listeners={});let n=this._listeners;n[e]===void 0&&(n[e]=[]),n[e].indexOf(t)===-1&&n[e].push(t)}hasEventListener(e,t){let n=this._listeners;return n!==void 0&&n[e]!==void 0&&n[e].indexOf(t)!==-1}removeEventListener(e,t){let n=this._listeners;if(n===void 0)return;let r=n[e];if(r!==void 0){let e=r.indexOf(t);e!==-1&&r.splice(e,1)}}dispatchEvent(e){let t=this._listeners;if(t===void 0)return;let n=t[e.type];if(n!==void 0){e.target=this;let t=n.slice(0);for(let n=0,r=t.length;n<r;n++)t[n].call(this,e);e.target=null}}},Pm=`00.01.02.03.04.05.06.07.08.09.0a.0b.0c.0d.0e.0f.10.11.12.13.14.15.16.17.18.19.1a.1b.1c.1d.1e.1f.20.21.22.23.24.25.26.27.28.29.2a.2b.2c.2d.2e.2f.30.31.32.33.34.35.36.37.38.39.3a.3b.3c.3d.3e.3f.40.41.42.43.44.45.46.47.48.49.4a.4b.4c.4d.4e.4f.50.51.52.53.54.55.56.57.58.59.5a.5b.5c.5d.5e.5f.60.61.62.63.64.65.66.67.68.69.6a.6b.6c.6d.6e.6f.70.71.72.73.74.75.76.77.78.79.7a.7b.7c.7d.7e.7f.80.81.82.83.84.85.86.87.88.89.8a.8b.8c.8d.8e.8f.90.91.92.93.94.95.96.97.98.99.9a.9b.9c.9d.9e.9f.a0.a1.a2.a3.a4.a5.a6.a7.a8.a9.aa.ab.ac.ad.ae.af.b0.b1.b2.b3.b4.b5.b6.b7.b8.b9.ba.bb.bc.bd.be.bf.c0.c1.c2.c3.c4.c5.c6.c7.c8.c9.ca.cb.cc.cd.ce.cf.d0.d1.d2.d3.d4.d5.d6.d7.d8.d9.da.db.dc.dd.de.df.e0.e1.e2.e3.e4.e5.e6.e7.e8.e9.ea.eb.ec.ed.ee.ef.f0.f1.f2.f3.f4.f5.f6.f7.f8.f9.fa.fb.fc.fd.fe.ff`.split(`.`),Fm=Math.PI/180,Im=180/Math.PI;function Lm(){let e=Math.random()*4294967295|0,t=Math.random()*4294967295|0,n=Math.random()*4294967295|0,r=Math.random()*4294967295|0;return(Pm[e&255]+Pm[e>>8&255]+Pm[e>>16&255]+Pm[e>>24&255]+`-`+Pm[t&255]+Pm[t>>8&255]+`-`+Pm[t>>16&15|64]+Pm[t>>24&255]+`-`+Pm[n&63|128]+Pm[n>>8&255]+`-`+Pm[n>>16&255]+Pm[n>>24&255]+Pm[r&255]+Pm[r>>8&255]+Pm[r>>16&255]+Pm[r>>24&255]).toLowerCase()}function Rm(e,t,n){return Math.max(t,Math.min(n,e))}function zm(e,t){return(e%t+t)%t}function Bm(e,t,n){return(1-n)*e+n*t}function Vm(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return e/4294967295;case Uint16Array:return e/65535;case Uint8Array:case Uint8ClampedArray:return e/255;case Int32Array:return Math.max(e/2147483647,-1);case Int16Array:return Math.max(e/32767,-1);case Int8Array:return Math.max(e/127,-1);default:throw Error(`THREE.MathUtils: Invalid component type.`)}}function Hm(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return Math.round(e*4294967295);case Uint16Array:return Math.round(e*65535);case Uint8Array:case Uint8ClampedArray:return Math.round(e*255);case Int32Array:return Math.round(e*2147483647);case Int16Array:return Math.round(e*32767);case Int8Array:return Math.round(e*127);default:throw Error(`THREE.MathUtils: Invalid component type.`)}}var Um=class e{static{e.prototype.isVector2=!0}constructor(e=0,t=0){this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw Error(`THREE.Vector2: index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw Error(`THREE.Vector2: index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){let t=this.x,n=this.y,r=e.elements;return this.x=r[0]*t+r[3]*n+r[6],this.y=r[1]*t+r[4]*n+r[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=Rm(this.x,e.x,t.x),this.y=Rm(this.y,e.y,t.y),this}clampScalar(e,t){return this.x=Rm(this.x,e,t),this.y=Rm(this.y,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(Rm(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(Rm(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y;return t*t+n*n}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){let n=Math.cos(t),r=Math.sin(t),i=this.x-e.x,a=this.y-e.y;return this.x=i*n-a*r+e.x,this.y=i*r+a*n+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}},Wm=class{constructor(e=0,t=0,n=0,r=1){this.isQuaternion=!0,this._x=e,this._y=t,this._z=n,this._w=r}static slerpFlat(e,t,n,r,i,a,o){let s=n[r+0],c=n[r+1],l=n[r+2],u=n[r+3],d=i[a+0],f=i[a+1],p=i[a+2],m=i[a+3];if(u!==m||s!==d||c!==f||l!==p){let e=s*d+c*f+l*p+u*m;e<0&&(d=-d,f=-f,p=-p,m=-m,e=-e);let t=1-o;if(e<.9995){let n=Math.acos(e),r=Math.sin(n);t=Math.sin(t*n)/r,o=Math.sin(o*n)/r,s=s*t+d*o,c=c*t+f*o,l=l*t+p*o,u=u*t+m*o}else{s=s*t+d*o,c=c*t+f*o,l=l*t+p*o,u=u*t+m*o;let e=1/Math.sqrt(s*s+c*c+l*l+u*u);s*=e,c*=e,l*=e,u*=e}}e[t]=s,e[t+1]=c,e[t+2]=l,e[t+3]=u}static multiplyQuaternionsFlat(e,t,n,r,i,a){let o=n[r],s=n[r+1],c=n[r+2],l=n[r+3],u=i[a],d=i[a+1],f=i[a+2],p=i[a+3];return e[t]=o*p+l*u+s*f-c*d,e[t+1]=s*p+l*d+c*u-o*f,e[t+2]=c*p+l*f+o*d-s*u,e[t+3]=l*p-o*u-s*d-c*f,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,n,r){return this._x=e,this._y=t,this._z=n,this._w=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t=!0){let n=e._x,r=e._y,i=e._z,a=e._order,o=Math.cos,s=Math.sin,c=o(n/2),l=o(r/2),u=o(i/2),d=s(n/2),f=s(r/2),p=s(i/2);switch(a){case`XYZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`YXZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`ZXY`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`ZYX`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`YZX`:this._x=d*l*u+c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u-d*f*p;break;case`XZY`:this._x=d*l*u-c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u+d*f*p;break;default:Om(`Quaternion: .setFromEuler() encountered an unknown order: `+a)}return t===!0&&this._onChangeCallback(),this}setFromAxisAngle(e,t){let n=t/2,r=Math.sin(n);return this._x=e.x*r,this._y=e.y*r,this._z=e.z*r,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(e){let t=e.elements,n=t[0],r=t[4],i=t[8],a=t[1],o=t[5],s=t[9],c=t[2],l=t[6],u=t[10],d=n+o+u;if(d>0){let e=.5/Math.sqrt(d+1);this._w=.25/e,this._x=(l-s)*e,this._y=(i-c)*e,this._z=(a-r)*e}else if(n>o&&n>u){let e=2*Math.sqrt(1+n-o-u);this._w=(l-s)/e,this._x=.25*e,this._y=(r+a)/e,this._z=(i+c)/e}else if(o>u){let e=2*Math.sqrt(1+o-n-u);this._w=(i-c)/e,this._x=(r+a)/e,this._y=.25*e,this._z=(s+l)/e}else{let e=2*Math.sqrt(1+u-n-o);this._w=(a-r)/e,this._x=(i+c)/e,this._y=(s+l)/e,this._z=.25*e}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let n=e.dot(t)+1;return n<1e-8?(n=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=n):(this._x=0,this._y=-e.z,this._z=e.y,this._w=n)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=n),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(Rm(this.dot(e),-1,1)))}rotateTowards(e,t){let n=this.angleTo(e);if(n===0)return this;let r=Math.min(1,t/n);return this.slerp(e,r),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x*=e,this._y*=e,this._z*=e,this._w*=e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){let n=e._x,r=e._y,i=e._z,a=e._w,o=t._x,s=t._y,c=t._z,l=t._w;return this._x=n*l+a*o+r*c-i*s,this._y=r*l+a*s+i*o-n*c,this._z=i*l+a*c+n*s-r*o,this._w=a*l-n*o-r*s-i*c,this._onChangeCallback(),this}slerp(e,t){let n=e._x,r=e._y,i=e._z,a=e._w,o=this.dot(e);o<0&&(n=-n,r=-r,i=-i,a=-a,o=-o);let s=1-t;if(o<.9995){let e=Math.acos(o),c=Math.sin(e);s=Math.sin(s*e)/c,t=Math.sin(t*e)/c,this._x=this._x*s+n*t,this._y=this._y*s+r*t,this._z=this._z*s+i*t,this._w=this._w*s+a*t,this._onChangeCallback()}else this._x=this._x*s+n*t,this._y=this._y*s+r*t,this._z=this._z*s+i*t,this._w=this._w*s+a*t,this.normalize();return this}slerpQuaternions(e,t,n){return this.copy(e).slerp(t,n)}random(){let e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),n=Math.random(),r=Math.sqrt(1-n),i=Math.sqrt(n);return this.set(r*Math.sin(e),r*Math.cos(e),i*Math.sin(t),i*Math.cos(t))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}},Q=class e{static{e.prototype.isVector3=!0}constructor(e=0,t=0,n=0){this.x=e,this.y=t,this.z=n}set(e,t,n){return n===void 0&&(n=this.z),this.x=e,this.y=t,this.z=n,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw Error(`THREE.Vector3: index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error(`THREE.Vector3: index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(Km.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(Km.setFromAxisAngle(e,t))}applyMatrix3(e){let t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[3]*n+i[6]*r,this.y=i[1]*t+i[4]*n+i[7]*r,this.z=i[2]*t+i[5]*n+i[8]*r,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){let t=this.x,n=this.y,r=this.z,i=e.elements,a=1/(i[3]*t+i[7]*n+i[11]*r+i[15]);return this.x=(i[0]*t+i[4]*n+i[8]*r+i[12])*a,this.y=(i[1]*t+i[5]*n+i[9]*r+i[13])*a,this.z=(i[2]*t+i[6]*n+i[10]*r+i[14])*a,this}applyQuaternion(e){let t=this.x,n=this.y,r=this.z,i=e.x,a=e.y,o=e.z,s=e.w,c=2*(a*r-o*n),l=2*(o*t-i*r),u=2*(i*n-a*t);return this.x=t+s*c+a*u-o*l,this.y=n+s*l+o*c-i*u,this.z=r+s*u+i*l-a*c,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){let t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[4]*n+i[8]*r,this.y=i[1]*t+i[5]*n+i[9]*r,this.z=i[2]*t+i[6]*n+i[10]*r,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=Rm(this.x,e.x,t.x),this.y=Rm(this.y,e.y,t.y),this.z=Rm(this.z,e.z,t.z),this}clampScalar(e,t){return this.x=Rm(this.x,e,t),this.y=Rm(this.y,e,t),this.z=Rm(this.z,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(Rm(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){let n=e.x,r=e.y,i=e.z,a=t.x,o=t.y,s=t.z;return this.x=r*s-i*o,this.y=i*a-n*s,this.z=n*o-r*a,this}projectOnVector(e){let t=e.lengthSq();if(t===0)return this.set(0,0,0);let n=e.dot(this)/t;return this.copy(e).multiplyScalar(n)}projectOnPlane(e){return Gm.copy(this).projectOnVector(e),this.sub(Gm)}reflect(e){return this.sub(Gm.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(Rm(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y,r=this.z-e.z;return t*t+n*n+r*r}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,n){let r=Math.sin(t)*e;return this.x=r*Math.sin(n),this.y=Math.cos(t)*e,this.z=r*Math.cos(n),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,n){return this.x=e*Math.sin(t),this.y=n,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){let t=this.setFromMatrixColumn(e,0).length(),n=this.setFromMatrixColumn(e,1).length(),r=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=n,this.z=r,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,t*4)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,t*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let e=Math.random()*Math.PI*2,t=Math.random()*2-1,n=Math.sqrt(1-t*t);return this.x=n*Math.cos(e),this.y=t,this.z=n*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}},Gm=new Q,Km=new Wm,qm=class e{static{e.prototype.isMatrix3=!0}constructor(e,t,n,r,i,a,o,s,c){this.elements=[1,0,0,0,1,0,0,0,1],e!==void 0&&this.set(e,t,n,r,i,a,o,s,c)}set(e,t,n,r,i,a,o,s,c){let l=this.elements;return l[0]=e,l[1]=r,l[2]=o,l[3]=t,l[4]=i,l[5]=s,l[6]=n,l[7]=a,l[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],this}extractBasis(e,t,n){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(e){let t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,r=t.elements,i=this.elements,a=n[0],o=n[3],s=n[6],c=n[1],l=n[4],u=n[7],d=n[2],f=n[5],p=n[8],m=r[0],h=r[3],g=r[6],_=r[1],v=r[4],y=r[7],b=r[2],x=r[5],S=r[8];return i[0]=a*m+o*_+s*b,i[3]=a*h+o*v+s*x,i[6]=a*g+o*y+s*S,i[1]=c*m+l*_+u*b,i[4]=c*h+l*v+u*x,i[7]=c*g+l*y+u*S,i[2]=d*m+f*_+p*b,i[5]=d*h+f*v+p*x,i[8]=d*g+f*y+p*S,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8];return t*a*l-t*o*c-n*i*l+n*o*s+r*i*c-r*a*s}invert(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8],u=l*a-o*c,d=o*s-l*i,f=c*i-a*s,p=t*u+n*d+r*f;if(p===0)return this.set(0,0,0,0,0,0,0,0,0);let m=1/p;return e[0]=u*m,e[1]=(r*c-l*n)*m,e[2]=(o*n-r*a)*m,e[3]=d*m,e[4]=(l*t-r*s)*m,e[5]=(r*i-o*t)*m,e[6]=f*m,e[7]=(n*s-c*t)*m,e[8]=(a*t-n*i)*m,this}transpose(){let e,t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){let t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,n,r,i,a,o){let s=Math.cos(i),c=Math.sin(i);return this.set(n*s,n*c,-n*(s*a+c*o)+a+e,-r*c,r*s,-r*(-c*a+s*o)+o+t,0,0,1),this}scale(e,t){return Am(`Matrix3: .scale() is deprecated. Use .makeScale() instead.`),this.premultiply(Jm.makeScale(e,t)),this}rotate(e){return Am(`Matrix3: .rotate() is deprecated. Use .makeRotation() instead.`),this.premultiply(Jm.makeRotation(-e)),this}translate(e,t){return Am(`Matrix3: .translate() is deprecated. Use .makeTranslation() instead.`),this.premultiply(Jm.makeTranslation(e,t)),this}makeTranslation(e,t){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,n,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){let t=this.elements,n=e.elements;for(let e=0;e<9;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<9;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e}clone(){return new this.constructor().fromArray(this.elements)}},Jm=new qm,Ym=new qm().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),Xm=new qm().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function Zm(){let e={enabled:!0,workingColorSpace:hm,spaces:{},convert:function(e,t,n){return this.enabled===!1||t===n||!t||!n?e:(this.spaces[t].transfer===`srgb`&&(e.r=$m(e.r),e.g=$m(e.g),e.b=$m(e.b)),this.spaces[t].primaries!==this.spaces[n].primaries&&(e.applyMatrix3(this.spaces[t].toXYZ),e.applyMatrix3(this.spaces[n].fromXYZ)),this.spaces[n].transfer===`srgb`&&(e.r=eh(e.r),e.g=eh(e.g),e.b=eh(e.b)),e)},workingToColorSpace:function(e,t){return this.convert(e,this.workingColorSpace,t)},colorSpaceToWorking:function(e,t){return this.convert(e,t,this.workingColorSpace)},getPrimaries:function(e){return this.spaces[e].primaries},getTransfer:function(e){return e===``?gm:this.spaces[e].transfer},getToneMappingMode:function(e){return this.spaces[e].outputColorSpaceConfig.toneMappingMode||`standard`},getLuminanceCoefficients:function(e,t=this.workingColorSpace){return e.fromArray(this.spaces[t].luminanceCoefficients)},define:function(e){Object.assign(this.spaces,e)},_getMatrix:function(e,t,n){return e.copy(this.spaces[t].toXYZ).multiply(this.spaces[n].fromXYZ)},_getDrawingBufferColorSpace:function(e){return this.spaces[e].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(e=this.workingColorSpace){return this.spaces[e].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(t,n){return Am(`ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace().`),e.workingToColorSpace(t,n)},toWorkingColorSpace:function(t,n){return Am(`ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking().`),e.colorSpaceToWorking(t,n)}},t=[.64,.33,.3,.6,.15,.06],n=[.2126,.7152,.0722],r=[.3127,.329];return e.define({[hm]:{primaries:t,whitePoint:r,transfer:gm,toXYZ:Ym,fromXYZ:Xm,luminanceCoefficients:n,workingColorSpaceConfig:{unpackColorSpace:mm},outputColorSpaceConfig:{drawingBufferColorSpace:mm}},[mm]:{primaries:t,whitePoint:r,transfer:_m,toXYZ:Ym,fromXYZ:Xm,luminanceCoefficients:n,outputColorSpaceConfig:{drawingBufferColorSpace:mm}}}),e}var Qm=Zm();function $m(e){return e<.04045?e*.0773993808:(e*.9478672986+.0521327014)**2.4}function eh(e){return e<.0031308?e*12.92:1.055*e**.41666-.055}var th,nh=class{static getDataURL(e,t=`image/png`){if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>`u`)return e.src;let n;if(e instanceof HTMLCanvasElement)n=e;else{th===void 0&&(th=Cm(`canvas`)),th.width=e.width,th.height=e.height;let t=th.getContext(`2d`);e instanceof ImageData?t.putImageData(e,0,0):t.drawImage(e,0,0,e.width,e.height),n=th}return n.toDataURL(t)}static sRGBToLinear(e){if(typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||typeof ImageBitmap<`u`&&e instanceof ImageBitmap){let t=Cm(`canvas`);t.width=e.width,t.height=e.height;let n=t.getContext(`2d`);n.drawImage(e,0,0,e.width,e.height);let r=n.getImageData(0,0,e.width,e.height),i=r.data;for(let e=0;e<i.length;e++)i[e]=$m(i[e]/255)*255;return n.putImageData(r,0,0),t}if(e.data){let t=e.data.slice(0);for(let e=0;e<t.length;e++)t instanceof Uint8Array||t instanceof Uint8ClampedArray?t[e]=Math.floor($m(t[e]/255)*255):t[e]=$m(t[e]);return{data:t,width:e.width,height:e.height}}return Om(`ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.`),e}},rh=0,ih=class{constructor(e=null){this.isTextureSource=!0,Object.defineProperty(this,"id",{value:rh++}),this.uuid=Lm(),this.data=e,this.dataReady=!0,this.version=0}getSize(e){let t=this.data;return typeof HTMLVideoElement<`u`&&t instanceof HTMLVideoElement?e.set(t.videoWidth,t.videoHeight,0):typeof VideoFrame<`u`&&t instanceof VideoFrame?e.set(t.displayWidth,t.displayHeight,0):t===null?e.set(0,0,0):e.set(t.width,t.height,t.depth||0),e}set needsUpdate(e){e===!0&&this.version++}toJSON(e){let t=e===void 0||typeof e==`string`;if(!t&&e.images[this.uuid]!==void 0)return e.images[this.uuid];let n={uuid:this.uuid,url:``},r=this.data;if(r!==null){let e;if(Array.isArray(r)){e=[];for(let t=0,n=r.length;t<n;t++)r[t].isDataTexture?e.push(ah(r[t].image)):e.push(ah(r[t]))}else e=ah(r);n.url=e}return t||(e.images[this.uuid]=n),n}};function ah(e){return typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||typeof ImageBitmap<`u`&&e instanceof ImageBitmap?nh.getDataURL(e):e.data?{data:Array.from(e.data),width:e.width,height:e.height,type:e.data.constructor.name}:(Om(`Texture: Unable to serialize Texture.`),{})}var oh=0,sh=new Q,ch=class e extends Nm{constructor(t=e.DEFAULT_IMAGE,n=e.DEFAULT_MAPPING,r=qf,i=qf,a=Qf,o=ep,s=gp,c=tp,l=e.DEFAULT_ANISOTROPY,u=``){super(),this.isTexture=!0,Object.defineProperty(this,"id",{value:oh++}),this.uuid=Lm(),this.name=``,this.source=new ih(t),this.mipmaps=[],this.mapping=n,this.channel=0,this.wrapS=r,this.wrapT=i,this.magFilter=a,this.minFilter=o,this.anisotropy=l,this.format=s,this.internalFormat=null,this.type=c,this.offset=new Um(0,0),this.repeat=new Um(1,1),this.center=new Um(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new qm,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.colorSpace=u,this.userData={},this.updateRanges=[],this.version=0,this.onUpdate=null,this.renderTarget=null,this.isRenderTargetTexture=!1,this.isArrayTexture=!!(t&&t.depth&&t.depth>1),this.pmremVersion=0,this.normalized=!1}get width(){return this.source.getSize(sh).x}get height(){return this.source.getSize(sh).y}get depth(){return this.source.getSize(sh).z}get image(){return this.source.data}set image(e){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.channel=e.channel,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.normalized=e.normalized,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.colorSpace=e.colorSpace,this.renderTarget=e.renderTarget,this.isRenderTargetTexture=e.isRenderTargetTexture,this.isArrayTexture=e.isArrayTexture,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}setValues(e){for(let t in e){let n=e[t];if(n===void 0){Om(`Texture.setValues(): parameter '${t}' has value of undefined.`);continue}let r=this[t];if(r===void 0){Om(`Texture.setValues(): property '${t}' does not exist.`);continue}r&&n&&r.isVector2&&n.isVector2||r&&n&&r.isVector3&&n.isVector3||r&&n&&r.isMatrix3&&n.isMatrix3?r.copy(n):this[t]=n}}toJSON(e){let t=e===void 0||typeof e==`string`;if(!t&&e.textures[this.uuid]!==void 0)return e.textures[this.uuid];let n={metadata:{version:4.7,type:`Texture`,generator:`Texture.toJSON`},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,normalized:this.normalized,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(n.userData=this.userData),t||(e.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:`dispose`})}transformUv(e){if(this.mapping!==300)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case Kf:e.x-=Math.floor(e.x);break;case qf:e.x=e.x<0?0:1;break;case Jf:Math.abs(Math.floor(e.x)%2)===1?e.x=Math.ceil(e.x)-e.x:e.x-=Math.floor(e.x)}if(e.y<0||e.y>1)switch(this.wrapT){case Kf:e.y-=Math.floor(e.y);break;case qf:e.y=e.y<0?0:1;break;case Jf:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-e.y:e.y-=Math.floor(e.y)}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){e===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){e===!0&&this.pmremVersion++}};ch.DEFAULT_IMAGE=null,ch.DEFAULT_MAPPING=300,ch.DEFAULT_ANISOTROPY=1;var lh=class e{static{e.prototype.isVector4=!0}constructor(e=0,t=0,n=0,r=1){this.x=e,this.y=t,this.z=n,this.w=r}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,n,r){return this.x=e,this.y=t,this.z=n,this.w=r,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw Error(`THREE.Vector4: index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error(`THREE.Vector4: index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w===void 0?1:e.w,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){let t=this.x,n=this.y,r=this.z,i=this.w,a=e.elements;return this.x=a[0]*t+a[4]*n+a[8]*r+a[12]*i,this.y=a[1]*t+a[5]*n+a[9]*r+a[13]*i,this.z=a[2]*t+a[6]*n+a[10]*r+a[14]*i,this.w=a[3]*t+a[7]*n+a[11]*r+a[15]*i,this}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this.w/=e.w,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);let t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,n,r,i,a=.01,o=.1,s=e.elements,c=s[0],l=s[4],u=s[8],d=s[1],f=s[5],p=s[9],m=s[2],h=s[6],g=s[10];if(Math.abs(l-d)<a&&Math.abs(u-m)<a&&Math.abs(p-h)<a){if(Math.abs(l+d)<o&&Math.abs(u+m)<o&&Math.abs(p+h)<o&&Math.abs(c+f+g-3)<o)return this.set(1,0,0,0),this;t=Math.PI;let e=(c+1)/2,s=(f+1)/2,_=(g+1)/2,v=(l+d)/4,y=(u+m)/4,b=(p+h)/4;return e>s&&e>_?e<a?(n=0,r=.707106781,i=.707106781):(n=Math.sqrt(e),r=v/n,i=y/n):s>_?s<a?(n=.707106781,r=0,i=.707106781):(r=Math.sqrt(s),n=v/r,i=b/r):_<a?(n=.707106781,r=.707106781,i=0):(i=Math.sqrt(_),n=y/i,r=b/i),this.set(n,r,i,t),this}let _=Math.sqrt((h-p)*(h-p)+(u-m)*(u-m)+(d-l)*(d-l));return Math.abs(_)<.001&&(_=1),this.x=(h-p)/_,this.y=(u-m)/_,this.z=(d-l)/_,this.w=Math.acos((c+f+g-1)/2),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this.w=t[15],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this}clamp(e,t){return this.x=Rm(this.x,e.x,t.x),this.y=Rm(this.y,e.y,t.y),this.z=Rm(this.z,e.z,t.z),this.w=Rm(this.w,e.w,t.w),this}clampScalar(e,t){return this.x=Rm(this.x,e,t),this.y=Rm(this.y,e,t),this.z=Rm(this.z,e,t),this.w=Rm(this.w,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(Rm(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this.w+=(e.w-this.w)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this.w=e.w+(t.w-e.w)*n,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this.w=e[t+3],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e[t+3]=this.w,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this.w=e.getW(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}},uh=class extends Nm{constructor(e=1,t=1,n={}){super(),n=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:Qf,depthBuffer:!0,stencilBuffer:!1,resolveColorBuffer:!0,resolveDepthBuffer:!0,resolveStencilBuffer:!0,storeMultisampledColorBuffer:!0,storeMultisampledDepthBuffer:!0,storeMultisampledStencilBuffer:!0,depthTexture:null,samples:0,count:1,depth:1,multiview:!1,useArrayDepthTexture:!1},n),this.isRenderTarget=!0,this.width=e,this.height=t,this.depth=n.depth,this.scissor=new lh(0,0,e,t),this.scissorTest=!1,this.viewport=new lh(0,0,e,t),this.textures=[];let r=new ch({width:e,height:t,depth:n.depth}),i=n.count;for(let e=0;e<i;e++)this.textures[e]=r.clone(),this.textures[e].isRenderTargetTexture=!0,this.textures[e].renderTarget=this;this._setTextureOptions(n),this.depthBuffer=n.depthBuffer,this.stencilBuffer=n.stencilBuffer,this.resolveColorBuffer=n.resolveColorBuffer,this.resolveDepthBuffer=n.resolveDepthBuffer,this.resolveStencilBuffer=n.resolveStencilBuffer,this.storeMultisampledColorBuffer=n.storeMultisampledColorBuffer,this.storeMultisampledDepthBuffer=n.storeMultisampledDepthBuffer,this.storeMultisampledStencilBuffer=n.storeMultisampledStencilBuffer,this._depthTexture=null,this.depthTexture=n.depthTexture,this.samples=n.samples,this.multiview=n.multiview,this.useArrayDepthTexture=n.useArrayDepthTexture}_setTextureOptions(e={}){let t={minFilter:Qf,generateMipmaps:!1,flipY:!1,internalFormat:null};e.mapping!==void 0&&(t.mapping=e.mapping),e.wrapS!==void 0&&(t.wrapS=e.wrapS),e.wrapT!==void 0&&(t.wrapT=e.wrapT),e.wrapR!==void 0&&(t.wrapR=e.wrapR),e.magFilter!==void 0&&(t.magFilter=e.magFilter),e.minFilter!==void 0&&(t.minFilter=e.minFilter),e.format!==void 0&&(t.format=e.format),e.type!==void 0&&(t.type=e.type),e.anisotropy!==void 0&&(t.anisotropy=e.anisotropy),e.colorSpace!==void 0&&(t.colorSpace=e.colorSpace),e.flipY!==void 0&&(t.flipY=e.flipY),e.generateMipmaps!==void 0&&(t.generateMipmaps=e.generateMipmaps),e.internalFormat!==void 0&&(t.internalFormat=e.internalFormat);for(let e=0;e<this.textures.length;e++)this.textures[e].setValues(t)}get texture(){return this.textures[0]}set texture(e){this.textures[0]=e}set depthTexture(e){this._depthTexture!==null&&this._depthTexture.renderTarget===this&&(this._depthTexture.renderTarget=null),e!==null&&e.renderTarget===null&&(e.renderTarget=this),this._depthTexture=e}get depthTexture(){return this._depthTexture}setSize(e,t,n=1){if(this.width!==e||this.height!==t||this.depth!==n){this.width=e,this.height=t,this.depth=n;for(let r=0,i=this.textures.length;r<i;r++)this.textures[r].image.width=e,this.textures[r].image.height=t,this.textures[r].image.depth=n,this.textures[r].isData3DTexture!==!0&&(this.textures[r].isArrayTexture=this.textures[r].image.depth>1);this.dispose()}this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t)}clone(){return new this.constructor().copy(this)}copy(e){this.width=e.width,this.height=e.height,this.depth=e.depth,this.scissor.copy(e.scissor),this.scissorTest=e.scissorTest,this.viewport.copy(e.viewport),this.textures.length=0;for(let t=0,n=e.textures.length;t<n;t++){this.textures[t]=e.textures[t].clone(),this.textures[t].isRenderTargetTexture=!0,this.textures[t].renderTarget=this;let n=Object.assign({},e.textures[t].image);this.textures[t].source=new ih(n)}if(this.depthBuffer=e.depthBuffer,this.stencilBuffer=e.stencilBuffer,this.resolveColorBuffer=e.resolveColorBuffer,this.resolveDepthBuffer=e.resolveDepthBuffer,this.resolveStencilBuffer=e.resolveStencilBuffer,this.storeMultisampledColorBuffer=e.storeMultisampledColorBuffer,this.storeMultisampledDepthBuffer=e.storeMultisampledDepthBuffer,this.storeMultisampledStencilBuffer=e.storeMultisampledStencilBuffer,e.depthTexture!==null){if(e.depthTexture.renderTarget===e){let t=e.depthTexture.clone();t.renderTarget=null,this.depthTexture=t}else this.depthTexture=e.depthTexture}return this.samples=e.samples,this.multiview=e.multiview,this.useArrayDepthTexture=e.useArrayDepthTexture,this}dispose(){this.dispatchEvent({type:`dispose`})}},dh=class extends uh{constructor(e=1,t=1,n={}){super(e,t,n),this.isWebGLRenderTarget=!0}},fh=class extends ch{constructor(e=null,t=1,n=1,r=1){super(null),this.isDataArrayTexture=!0,this.image={data:e,width:t,height:n,depth:r},this.magFilter=Yf,this.minFilter=Yf,this.wrapR=qf,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.layerUpdates=new Set}copy(e){return super.copy(e),this.wrapR=e.wrapR,this}addLayerUpdate(e){this.layerUpdates.add(e)}clearLayerUpdates(){this.layerUpdates.clear()}},ph=class extends ch{constructor(e=null,t=1,n=1,r=1){super(null),this.isData3DTexture=!0,this.image={data:e,width:t,height:n,depth:r},this.magFilter=Yf,this.minFilter=Yf,this.wrapR=qf,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}copy(e){return super.copy(e),this.wrapR=e.wrapR,this}},mh=class e{static{e.prototype.isMatrix4=!0}constructor(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],e!==void 0&&this.set(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h)}set(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h){let g=this.elements;return g[0]=e,g[4]=t,g[8]=n,g[12]=r,g[1]=i,g[5]=a,g[9]=o,g[13]=s,g[2]=c,g[6]=l,g[10]=u,g[14]=d,g[3]=f,g[7]=p,g[11]=m,g[15]=h,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new e().fromArray(this.elements)}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t[9]=n[9],t[10]=n[10],t[11]=n[11],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15],this}copyPosition(e){let t=this.elements,n=e.elements;return t[12]=n[12],t[13]=n[13],t[14]=n[14],this}setFromMatrix3(e){let t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,n){return this.determinantAffine()===0?(e.set(1,0,0),t.set(0,1,0),n.set(0,0,1),this):(e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this)}makeBasis(e,t,n){return this.set(e.x,t.x,n.x,0,e.y,t.y,n.y,0,e.z,t.z,n.z,0,0,0,0,1),this}extractRotation(e){if(e.determinantAffine()===0)return this.identity();let t=this.elements,n=e.elements,r=1/hh.setFromMatrixColumn(e,0).length(),i=1/hh.setFromMatrixColumn(e,1).length(),a=1/hh.setFromMatrixColumn(e,2).length();return t[0]=n[0]*r,t[1]=n[1]*r,t[2]=n[2]*r,t[3]=0,t[4]=n[4]*i,t[5]=n[5]*i,t[6]=n[6]*i,t[7]=0,t[8]=n[8]*a,t[9]=n[9]*a,t[10]=n[10]*a,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){let t=this.elements,n=e.x,r=e.y,i=e.z,a=Math.cos(n),o=Math.sin(n),s=Math.cos(r),c=Math.sin(r),l=Math.cos(i),u=Math.sin(i);if(e.order===`XYZ`){let e=a*l,n=a*u,r=o*l,i=o*u;t[0]=s*l,t[4]=-s*u,t[8]=c,t[1]=n+r*c,t[5]=e-i*c,t[9]=-o*s,t[2]=i-e*c,t[6]=r+n*c,t[10]=a*s}else if(e.order===`YXZ`){let e=s*l,n=s*u,r=c*l,i=c*u;t[0]=e+i*o,t[4]=r*o-n,t[8]=a*c,t[1]=a*u,t[5]=a*l,t[9]=-o,t[2]=n*o-r,t[6]=i+e*o,t[10]=a*s}else if(e.order===`ZXY`){let e=s*l,n=s*u,r=c*l,i=c*u;t[0]=e-i*o,t[4]=-a*u,t[8]=r+n*o,t[1]=n+r*o,t[5]=a*l,t[9]=i-e*o,t[2]=-a*c,t[6]=o,t[10]=a*s}else if(e.order===`ZYX`){let e=a*l,n=a*u,r=o*l,i=o*u;t[0]=s*l,t[4]=r*c-n,t[8]=e*c+i,t[1]=s*u,t[5]=i*c+e,t[9]=n*c-r,t[2]=-c,t[6]=o*s,t[10]=a*s}else if(e.order===`YZX`){let e=a*s,n=a*c,r=o*s,i=o*c;t[0]=s*l,t[4]=i-e*u,t[8]=r*u+n,t[1]=u,t[5]=a*l,t[9]=-o*l,t[2]=-c*l,t[6]=n*u+r,t[10]=e-i*u}else if(e.order===`XZY`){let e=a*s,n=a*c,r=o*s,i=o*c;t[0]=s*l,t[4]=-u,t[8]=c*l,t[1]=e*u+i,t[5]=a*l,t[9]=n*u-r,t[2]=r*u-n,t[6]=o*l,t[10]=i*u+e}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(_h,e,vh)}lookAt(e,t,n){let r=this.elements;return xh.subVectors(e,t),xh.lengthSq()===0&&(xh.z=1),xh.normalize(),yh.crossVectors(n,xh),yh.lengthSq()===0&&(Math.abs(n.z)===1?xh.x+=1e-4:xh.z+=1e-4,xh.normalize(),yh.crossVectors(n,xh)),yh.normalize(),bh.crossVectors(xh,yh),r[0]=yh.x,r[4]=bh.x,r[8]=xh.x,r[1]=yh.y,r[5]=bh.y,r[9]=xh.y,r[2]=yh.z,r[6]=bh.z,r[10]=xh.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,r=t.elements,i=this.elements,a=n[0],o=n[4],s=n[8],c=n[12],l=n[1],u=n[5],d=n[9],f=n[13],p=n[2],m=n[6],h=n[10],g=n[14],_=n[3],v=n[7],y=n[11],b=n[15],x=r[0],S=r[4],C=r[8],w=r[12],T=r[1],E=r[5],D=r[9],O=r[13],k=r[2],A=r[6],j=r[10],ee=r[14],M=r[3],N=r[7],P=r[11],F=r[15];return i[0]=a*x+o*T+s*k+c*M,i[4]=a*S+o*E+s*A+c*N,i[8]=a*C+o*D+s*j+c*P,i[12]=a*w+o*O+s*ee+c*F,i[1]=l*x+u*T+d*k+f*M,i[5]=l*S+u*E+d*A+f*N,i[9]=l*C+u*D+d*j+f*P,i[13]=l*w+u*O+d*ee+f*F,i[2]=p*x+m*T+h*k+g*M,i[6]=p*S+m*E+h*A+g*N,i[10]=p*C+m*D+h*j+g*P,i[14]=p*w+m*O+h*ee+g*F,i[3]=_*x+v*T+y*k+b*M,i[7]=_*S+v*E+y*A+b*N,i[11]=_*C+v*D+y*j+b*P,i[15]=_*w+v*O+y*ee+b*F,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[4],r=e[8],i=e[12],a=e[1],o=e[5],s=e[9],c=e[13],l=e[2],u=e[6],d=e[10],f=e[14],p=e[3],m=e[7],h=e[11],g=e[15],_=s*f-c*d,v=o*f-c*u,y=o*d-s*u,b=a*f-c*l,x=a*d-s*l,S=a*u-o*l;return t*(m*_-h*v+g*y)-n*(p*_-h*b+g*x)+r*(p*v-m*b+g*S)-i*(p*y-m*x+h*S)}determinantAffine(){let e=this.elements,t=e[0],n=e[4],r=e[8],i=e[1],a=e[5],o=e[9],s=e[2],c=e[6],l=e[10];return t*(a*l-o*c)-n*(i*l-o*s)+r*(i*c-a*s)}transpose(){let e=this.elements,t;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this}setPosition(e,t,n){let r=this.elements;return e.isVector3?(r[12]=e.x,r[13]=e.y,r[14]=e.z):(r[12]=e,r[13]=t,r[14]=n),this}invert(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8],u=e[9],d=e[10],f=e[11],p=e[12],m=e[13],h=e[14],g=e[15],_=t*o-n*a,v=t*s-r*a,y=t*c-i*a,b=n*s-r*o,x=n*c-i*o,S=r*c-i*s,C=l*m-u*p,w=l*h-d*p,T=l*g-f*p,E=u*h-d*m,D=u*g-f*m,O=d*g-f*h,k=_*O-v*D+y*E+b*T-x*w+S*C;if(k===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);let A=1/k;return e[0]=(o*O-s*D+c*E)*A,e[1]=(r*D-n*O-i*E)*A,e[2]=(m*S-h*x+g*b)*A,e[3]=(d*x-u*S-f*b)*A,e[4]=(s*T-a*O-c*w)*A,e[5]=(t*O-r*T+i*w)*A,e[6]=(h*y-p*S-g*v)*A,e[7]=(l*S-d*y+f*v)*A,e[8]=(a*D-o*T+c*C)*A,e[9]=(n*T-t*D-i*C)*A,e[10]=(p*x-m*y+g*_)*A,e[11]=(u*y-l*x-f*_)*A,e[12]=(o*w-a*E-s*C)*A,e[13]=(t*E-n*w+r*C)*A,e[14]=(m*v-p*b-h*_)*A,e[15]=(l*b-u*v+d*_)*A,this}scale(e){let t=this.elements,n=e.x,r=e.y,i=e.z;return t[0]*=n,t[4]*=r,t[8]*=i,t[1]*=n,t[5]*=r,t[9]*=i,t[2]*=n,t[6]*=r,t[10]*=i,t[3]*=n,t[7]*=r,t[11]*=i,this}getMaxScaleOnAxis(){let e=this.elements,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],n=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],r=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,n,r))}makeTranslation(e,t,n){return e.isVector3?this.set(1,0,0,e.x,0,1,0,e.y,0,0,1,e.z,0,0,0,1):this.set(1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1),this}makeRotationX(e){let t=Math.cos(e),n=Math.sin(e);return this.set(1,0,0,0,0,t,-n,0,0,n,t,0,0,0,0,1),this}makeRotationY(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,0,n,0,0,1,0,0,-n,0,t,0,0,0,0,1),this}makeRotationZ(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,0,n,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){let n=Math.cos(t),r=Math.sin(t),i=1-n,a=e.x,o=e.y,s=e.z,c=i*a,l=i*o;return this.set(c*a+n,c*o-r*s,c*s+r*o,0,c*o+r*s,l*o+n,l*s-r*a,0,c*s-r*o,l*s+r*a,i*s*s+n,0,0,0,0,1),this}makeScale(e,t,n){return this.set(e,0,0,0,0,t,0,0,0,0,n,0,0,0,0,1),this}makeShear(e,t,n,r,i,a){return this.set(1,n,i,0,e,1,a,0,t,r,1,0,0,0,0,1),this}compose(e,t,n){let r=this.elements,i=t._x,a=t._y,o=t._z,s=t._w,c=i+i,l=a+a,u=o+o,d=i*c,f=i*l,p=i*u,m=a*l,h=a*u,g=o*u,_=s*c,v=s*l,y=s*u,b=n.x,x=n.y,S=n.z;return r[0]=(1-(m+g))*b,r[1]=(f+y)*b,r[2]=(p-v)*b,r[3]=0,r[4]=(f-y)*x,r[5]=(1-(d+g))*x,r[6]=(h+_)*x,r[7]=0,r[8]=(p+v)*S,r[9]=(h-_)*S,r[10]=(1-(d+m))*S,r[11]=0,r[12]=e.x,r[13]=e.y,r[14]=e.z,r[15]=1,this}decompose(e,t,n){let r=this.elements;e.x=r[12],e.y=r[13],e.z=r[14];let i=this.determinantAffine();if(i===0)return n.set(1,1,1),t.identity(),this;let a=hh.set(r[0],r[1],r[2]).length(),o=hh.set(r[4],r[5],r[6]).length(),s=hh.set(r[8],r[9],r[10]).length();i<0&&(a=-a),gh.copy(this);let c=1/a,l=1/o,u=1/s;return gh.elements[0]*=c,gh.elements[1]*=c,gh.elements[2]*=c,gh.elements[4]*=l,gh.elements[5]*=l,gh.elements[6]*=l,gh.elements[8]*=u,gh.elements[9]*=u,gh.elements[10]*=u,t.setFromRotationMatrix(gh),n.x=a,n.y=o,n.z=s,this}makePerspective(e,t,n,r,i,a,o=bm,s=!1){let c=this.elements,l=2*i/(t-e),u=2*i/(n-r),d=(t+e)/(t-e),f=(n+r)/(n-r),p,m;if(s)p=i/(a-i),m=a*i/(a-i);else if(o===2e3)p=-(a+i)/(a-i),m=-2*a*i/(a-i);else if(o===2001)p=-a/(a-i),m=-a*i/(a-i);else throw Error(`THREE.Matrix4.makePerspective(): Invalid coordinate system: `+o);return c[0]=l,c[4]=0,c[8]=d,c[12]=0,c[1]=0,c[5]=u,c[9]=f,c[13]=0,c[2]=0,c[6]=0,c[10]=p,c[14]=m,c[3]=0,c[7]=0,c[11]=-1,c[15]=0,this}makeOrthographic(e,t,n,r,i,a,o=bm,s=!1){let c=this.elements,l=2/(t-e),u=2/(n-r),d=-(t+e)/(t-e),f=-(n+r)/(n-r),p,m;if(s)p=1/(a-i),m=a/(a-i);else if(o===2e3)p=-2/(a-i),m=-(a+i)/(a-i);else if(o===2001)p=-1/(a-i),m=-i/(a-i);else throw Error(`THREE.Matrix4.makeOrthographic(): Invalid coordinate system: `+o);return c[0]=l,c[4]=0,c[8]=0,c[12]=d,c[1]=0,c[5]=u,c[9]=0,c[13]=f,c[2]=0,c[6]=0,c[10]=p,c[14]=m,c[3]=0,c[7]=0,c[11]=0,c[15]=1,this}equals(e){let t=this.elements,n=e.elements;for(let e=0;e<16;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<16;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e[t+9]=n[9],e[t+10]=n[10],e[t+11]=n[11],e[t+12]=n[12],e[t+13]=n[13],e[t+14]=n[14],e[t+15]=n[15],e}},hh=new Q,gh=new mh,_h=new Q(0,0,0),vh=new Q(1,1,1),yh=new Q,bh=new Q,xh=new Q,Sh=new mh,Ch=new Wm,wh=class e{constructor(t=0,n=0,r=0,i=e.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=n,this._z=r,this._order=i}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,n,r=this._order){return this._x=e,this._y=t,this._z=n,this._order=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,n=!0){let r=e.elements,i=r[0],a=r[4],o=r[8],s=r[1],c=r[5],l=r[9],u=r[2],d=r[6],f=r[10];switch(t){case`XYZ`:this._y=Math.asin(Rm(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-l,f),this._z=Math.atan2(-a,i)):(this._x=Math.atan2(d,c),this._z=0);break;case`YXZ`:this._x=Math.asin(-Rm(l,-1,1)),Math.abs(l)<.9999999?(this._y=Math.atan2(o,f),this._z=Math.atan2(s,c)):(this._y=Math.atan2(-u,i),this._z=0);break;case`ZXY`:this._x=Math.asin(Rm(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,f),this._z=Math.atan2(-a,c)):(this._y=0,this._z=Math.atan2(s,i));break;case`ZYX`:this._y=Math.asin(-Rm(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,f),this._z=Math.atan2(s,i)):(this._x=0,this._z=Math.atan2(-a,c));break;case`YZX`:this._z=Math.asin(Rm(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(-l,c),this._y=Math.atan2(-u,i)):(this._x=0,this._y=Math.atan2(o,f));break;case`XZY`:this._z=Math.asin(-Rm(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(d,c),this._y=Math.atan2(o,i)):(this._x=Math.atan2(-l,f),this._y=0);break;default:Om(`Euler: .setFromRotationMatrix() encountered an unknown order: `+t)}return this._order=t,n===!0&&this._onChangeCallback(),this}setFromQuaternion(e,t,n){return Sh.makeRotationFromQuaternion(e),this.setFromRotationMatrix(Sh,t,n)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return Ch.setFromEuler(this),this.setFromQuaternion(Ch,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],e[3]!==void 0&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};wh.DEFAULT_ORDER=`XYZ`;var Th=class{constructor(){this.mask=1}set(e){this.mask=(1<<e|0)>>>0}enable(e){this.mask|=1<<e|0}enableAll(){this.mask=-1}toggle(e){this.mask^=1<<e|0}disable(e){this.mask&=~(1<<e|0)}disableAll(){this.mask=0}test(e){return(this.mask&e.mask)!==0}isEnabled(e){return!!(this.mask&(1<<e|0))}},Eh=0,Dh=new Q,Oh=new Wm,kh=new mh,Ah=new Q,jh=new Q,Mh=new Q,Nh=new Wm,Ph=new Q(1,0,0),Fh=new Q(0,1,0),Ih=new Q(0,0,1),Lh={type:`added`},Rh={type:`removed`},zh={type:`childadded`,child:null},Bh={type:`childremoved`,child:null},Vh=class e extends Nm{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,"id",{value:Eh++}),this.uuid=Lm(),this.name=``,this.type=`Object3D`,this.parent=null,this.children=[],this.up=e.DEFAULT_UP.clone();let t=new Q,n=new wh,r=new Wm,i=new Q(1,1,1);function a(){r.setFromEuler(n,!1)}function o(){n.setFromQuaternion(r,void 0,!1)}n._onChange(a),r._onChange(o),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:n},quaternion:{configurable:!0,enumerable:!0,value:r},scale:{configurable:!0,enumerable:!0,value:i},modelViewMatrix:{value:new mh},normalMatrix:{value:new qm}}),this.matrix=new mh,this.matrixWorld=new mh,this.matrixAutoUpdate=e.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldAutoUpdate=e.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.layers=new Th,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.customDepthMaterial=void 0,this.customDistanceMaterial=void 0,this.static=!1,this.userData={},this.pivot=null}onBeforeShadow(){}onAfterShadow(){}onBeforeRender(){}onAfterRender(){}applyMatrix4(e){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(e),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(e){return this.quaternion.premultiply(e),this}setRotationFromAxisAngle(e,t){this.quaternion.setFromAxisAngle(e,t)}setRotationFromEuler(e){this.quaternion.setFromEuler(e,!0)}setRotationFromMatrix(e){this.quaternion.setFromRotationMatrix(e)}setRotationFromQuaternion(e){this.quaternion.copy(e)}rotateOnAxis(e,t){return Oh.setFromAxisAngle(e,t),this.quaternion.multiply(Oh),this}rotateOnWorldAxis(e,t){return Oh.setFromAxisAngle(e,t),this.quaternion.premultiply(Oh),this}rotateX(e){return this.rotateOnAxis(Ph,e)}rotateY(e){return this.rotateOnAxis(Fh,e)}rotateZ(e){return this.rotateOnAxis(Ih,e)}translateOnAxis(e,t){return Dh.copy(e).applyQuaternion(this.quaternion),this.position.add(Dh.multiplyScalar(t)),this}translateX(e){return this.translateOnAxis(Ph,e)}translateY(e){return this.translateOnAxis(Fh,e)}translateZ(e){return this.translateOnAxis(Ih,e)}localToWorld(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(this.matrixWorld)}worldToLocal(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(kh.copy(this.matrixWorld).invert())}lookAt(e,t,n){e.isVector3?Ah.copy(e):Ah.set(e,t,n);let r=this.parent;this.updateWorldMatrix(!0,!1),jh.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?kh.lookAt(jh,Ah,this.up):kh.lookAt(Ah,jh,this.up),this.quaternion.setFromRotationMatrix(kh),r&&(kh.extractRotation(r.matrixWorld),Oh.setFromRotationMatrix(kh),this.quaternion.premultiply(Oh.invert()))}add(e){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.add(arguments[e]);return this}return e===this?(km(`Object3D.add: object can't be added as a child of itself.`,e),this):(e&&e.isObject3D?(e.removeFromParent(),e.parent=this,this.children.push(e),e.dispatchEvent(Lh),zh.child=e,this.dispatchEvent(zh),zh.child=null):km(`Object3D.add: object not an instance of THREE.Object3D.`,e),this)}remove(e){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.remove(arguments[e]);return this}let t=this.children.indexOf(e);return t!==-1&&(e.parent=null,this.children.splice(t,1),e.dispatchEvent(Rh),Bh.child=e,this.dispatchEvent(Bh),Bh.child=null),this}removeFromParent(){let e=this.parent;return e!==null&&e.remove(this),this}clear(){return this.remove(...this.children)}attach(e){return this.updateWorldMatrix(!0,!1),kh.copy(this.matrixWorld).invert(),e.parent!==null&&(e.parent.updateWorldMatrix(!0,!1),kh.multiply(e.parent.matrixWorld)),e.applyMatrix4(kh),e.removeFromParent(),e.parent=this,this.children.push(e),e.updateWorldMatrix(!1,!0),e.dispatchEvent(Lh),zh.child=e,this.dispatchEvent(zh),zh.child=null,this}getObjectById(e){return this.getObjectByProperty(`id`,e)}getObjectByName(e){return this.getObjectByProperty(`name`,e)}getObjectByProperty(e,t){if(this[e]===t)return this;for(let n=0,r=this.children.length;n<r;n++){let r=this.children[n].getObjectByProperty(e,t);if(r!==void 0)return r}}getObjectsByProperty(e,t,n=[]){this[e]===t&&n.push(this);let r=this.children;for(let i=0,a=r.length;i<a;i++)r[i].getObjectsByProperty(e,t,n);return n}getWorldPosition(e){return this.updateWorldMatrix(!0,!1),e.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(jh,e,Mh),e}getWorldScale(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(jh,Nh,e),e}getWorldDirection(e){this.updateWorldMatrix(!0,!1);let t=this.matrixWorld.elements;return e.set(t[8],t[9],t[10]).normalize()}raycast(){}intersectsFrustum(){}traverse(e){e(this);let t=this.children;for(let n=0,r=t.length;n<r;n++)t[n].traverse(e)}traverseVisible(e){if(this.visible===!1)return;e(this);let t=this.children;for(let n=0,r=t.length;n<r;n++)t[n].traverseVisible(e)}traverseAncestors(e){let t=this.parent;t!==null&&(e(t),t.traverseAncestors(e))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale);let e=this.pivot;if(e!==null){let t=e.x,n=e.y,r=e.z,i=this.matrix.elements;i[12]+=t-i[0]*t-i[4]*n-i[8]*r,i[13]+=n-i[1]*t-i[5]*n-i[9]*r,i[14]+=r-i[2]*t-i[6]*n-i[10]*r}this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(e){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||e)&&(this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,e=!0);let t=this.children;for(let n=0,r=t.length;n<r;n++)t[n].updateMatrixWorld(e)}updateWorldMatrix(e,t,n=!1){let r=this.parent;if(e===!0&&r!==null&&r.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||n)&&(this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,n=!0),t===!0){let e=this.children;for(let t=0,r=e.length;t<r;t++)e[t].updateWorldMatrix(!1,!0,n)}}toJSON(e){let t=e===void 0||typeof e==`string`,n={};t&&(e={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},n.metadata={version:4.7,type:`Object`,generator:`Object3D.toJSON`});let r={};r.uuid=this.uuid,r.type=this.type,r.name=this.name,r.castShadow=this.castShadow,r.receiveShadow=this.receiveShadow,r.visible=this.visible,r.frustumCulled=this.frustumCulled,r.renderOrder=this.renderOrder,r.static=this.static,r.matrixAutoUpdate=this.matrixAutoUpdate,Object.keys(this.userData).length>0&&(r.userData=this.userData),r.layers=this.layers.mask,r.matrix=this.matrix.toArray(),r.up=this.up.toArray(),this.pivot!==null&&(r.pivot=this.pivot.toArray()),this.morphTargetDictionary!==void 0&&(r.morphTargetDictionary=Object.assign({},this.morphTargetDictionary)),this.morphTargetInfluences!==void 0&&(r.morphTargetInfluences=this.morphTargetInfluences.slice()),this.isInstancedMesh&&(r.type=`InstancedMesh`,r.count=this.count,r.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(r.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(r.type=`BatchedMesh`,r.perObjectFrustumCulled=this.perObjectFrustumCulled,r.sortObjects=this.sortObjects,r.drawRanges=this._drawRanges,r.reservedRanges=this._reservedRanges,r.geometryInfo=this._geometryInfo.map(e=>({...e,boundingBox:e.boundingBox?e.boundingBox.toJSON():void 0,boundingSphere:e.boundingSphere?e.boundingSphere.toJSON():void 0})),r.instanceInfo=this._instanceInfo.map(e=>({...e})),r.availableInstanceIds=this._availableInstanceIds.slice(),r.availableGeometryIds=this._availableGeometryIds.slice(),r.nextIndexStart=this._nextIndexStart,r.nextVertexStart=this._nextVertexStart,r.geometryCount=this._geometryCount,r.maxInstanceCount=this._maxInstanceCount,r.maxVertexCount=this._maxVertexCount,r.maxIndexCount=this._maxIndexCount,r.geometryInitialized=this._geometryInitialized,r.matricesTexture=this._matricesTexture.toJSON(e),r.indirectTexture=this._indirectTexture.toJSON(e),this._colorsTexture!==null&&(r.colorsTexture=this._colorsTexture.toJSON(e)),this.boundingSphere!==null&&(r.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(r.boundingBox=this.boundingBox.toJSON()));function i(t,n){return t[n.uuid]===void 0&&(t[n.uuid]=n.toJSON(e)),n.uuid}if(this.isScene)this.background&&(this.background.isColor?r.background=this.background.toJSON():this.background.isTexture&&(r.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(r.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){r.geometry=i(e.geometries,this.geometry);let t=this.geometry.parameters;if(t!==void 0&&t.shapes!==void 0){let n=t.shapes;if(Array.isArray(n))for(let t=0,r=n.length;t<r;t++){let r=n[t];i(e.shapes,r)}else i(e.shapes,n)}}if(this.isSkinnedMesh&&(r.bindMode=this.bindMode,r.bindMatrix=this.bindMatrix.toArray(),this.skeleton!==void 0&&(i(e.skeletons,this.skeleton),r.skeleton=this.skeleton.uuid)),this.material!==void 0){if(Array.isArray(this.material)){let t=[];for(let n=0,r=this.material.length;n<r;n++)t.push(i(e.materials,this.material[n]));r.material=t}else r.material=i(e.materials,this.material)}if(this.children.length>0){r.children=[];for(let t=0;t<this.children.length;t++)r.children.push(this.children[t].toJSON(e).object)}if(this.animations.length>0){r.animations=[];for(let t=0;t<this.animations.length;t++){let n=this.animations[t];r.animations.push(i(e.animations,n))}}if(t){let t=a(e.geometries),r=a(e.materials),i=a(e.textures),o=a(e.images),s=a(e.shapes),c=a(e.skeletons),l=a(e.animations),u=a(e.nodes);t.length>0&&(n.geometries=t),r.length>0&&(n.materials=r),i.length>0&&(n.textures=i),o.length>0&&(n.images=o),s.length>0&&(n.shapes=s),c.length>0&&(n.skeletons=c),l.length>0&&(n.animations=l),u.length>0&&(n.nodes=u)}return n.object=r,n;function a(e){let t=[];for(let n in e){let r=e[n];delete r.metadata,t.push(r)}return t}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.pivot=e.pivot===null?null:e.pivot.clone(),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.static=e.static,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),t===!0)for(let t=0;t<e.children.length;t++){let n=e.children[t];this.add(n.clone())}return this}dispose(){this.dispatchEvent({type:`dispose`})}};Vh.DEFAULT_UP=new Q(0,1,0),Vh.DEFAULT_MATRIX_AUTO_UPDATE=!0,Vh.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;var Hh=class extends Vh{constructor(){super(),this.isGroup=!0,this.type=`Group`}},Uh={type:`move`},Wh=class{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return this._hand===null&&(this._hand=new Hh,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return this._targetRay===null&&(this._targetRay=new Hh,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new Q,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new Q),this._targetRay}getGripSpace(){return this._grip===null&&(this._grip=new Hh,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new Q,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new Q,this._grip.eventsEnabled=!1),this._grip}dispatchEvent(e){return this._targetRay!==null&&this._targetRay.dispatchEvent(e),this._grip!==null&&this._grip.dispatchEvent(e),this._hand!==null&&this._hand.dispatchEvent(e),this}connect(e){if(e&&e.hand){let t=this._hand;if(t)for(let n of e.hand.values())this._getHandJoint(t,n)}return this.dispatchEvent({type:`connected`,data:e}),this}disconnect(e){return this.dispatchEvent({type:`disconnected`,data:e}),this._targetRay!==null&&(this._targetRay.visible=!1),this._grip!==null&&(this._grip.visible=!1),this._hand!==null&&(this._hand.visible=!1),this}update(e,t,n){let r=null,i=null,a=null,o=this._targetRay,s=this._grip,c=this._hand;if(e&&t.session.visibilityState!==`visible-blurred`){if(c&&e.hand){a=!0;for(let r of e.hand.values()){let e=t.getJointPose(r,n),i=this._getHandJoint(c,r);e!==null&&(i.matrix.fromArray(e.transform.matrix),i.matrix.decompose(i.position,i.rotation,i.scale),i.matrixWorldNeedsUpdate=!0,i.jointRadius=e.radius),i.visible=e!==null}let r=c.joints[`index-finger-tip`],i=c.joints[`thumb-tip`],o=r.position.distanceTo(i.position);c.inputState.pinching&&o>.025?(c.inputState.pinching=!1,this.dispatchEvent({type:`pinchend`,handedness:e.handedness,target:this})):!c.inputState.pinching&&o<=.015&&(c.inputState.pinching=!0,this.dispatchEvent({type:`pinchstart`,handedness:e.handedness,target:this}))}else s!==null&&e.gripSpace&&(i=t.getPose(e.gripSpace,n),i!==null&&(s.matrix.fromArray(i.transform.matrix),s.matrix.decompose(s.position,s.rotation,s.scale),s.matrixWorldNeedsUpdate=!0,i.linearVelocity?(s.hasLinearVelocity=!0,s.linearVelocity.copy(i.linearVelocity)):s.hasLinearVelocity=!1,i.angularVelocity?(s.hasAngularVelocity=!0,s.angularVelocity.copy(i.angularVelocity)):s.hasAngularVelocity=!1,s.eventsEnabled&&s.dispatchEvent({type:`gripUpdated`,data:e,target:this})));o!==null&&(r=t.getPose(e.targetRaySpace,n),r===null&&i!==null&&(r=i),r!==null&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(Uh)))}return o!==null&&(o.visible=r!==null),s!==null&&(s.visible=i!==null),c!==null&&(c.visible=a!==null),this}_getHandJoint(e,t){if(e.joints[t.jointName]===void 0){let n=new Hh;n.matrixAutoUpdate=!1,n.visible=!1,e.joints[t.jointName]=n,e.add(n)}return e.joints[t.jointName]}},Gh={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Kh={h:0,s:0,l:0},qh={h:0,s:0,l:0};function Jh(e,t,n){return n<0&&(n+=1),n>1&&--n,n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*6*(2/3-n):e}var Yh=class{constructor(e,t,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,n)}set(e,t,n){if(t===void 0&&n===void 0){let t=e;t&&t.isColor?this.copy(t):typeof t==`number`?this.setHex(t):typeof t==`string`&&this.setStyle(t)}else this.setRGB(e,t,n);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=mm){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,Qm.colorSpaceToWorking(this,t),this}setRGB(e,t,n,r=Qm.workingColorSpace){return this.r=e,this.g=t,this.b=n,Qm.colorSpaceToWorking(this,r),this}setHSL(e,t,n,r=Qm.workingColorSpace){if(e=zm(e,1),t=Rm(t,0,1),n=Rm(n,0,1),t===0)this.r=this.g=this.b=n;else{let r=n<=.5?n*(1+t):n+t-n*t,i=2*n-r;this.r=Jh(i,r,e+1/3),this.g=Jh(i,r,e),this.b=Jh(i,r,e-1/3)}return Qm.colorSpaceToWorking(this,r),this}setStyle(e,t=mm){function n(t){t!==void 0&&parseFloat(t)<1&&Om(`Color: Alpha component of `+e+` will be ignored.`)}let r;if(r=/^(\w+)\(([^\)]*)\)/.exec(e)){let i,a=r[1],o=r[2];switch(a){case`rgb`:case`rgba`:if(i=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(255,parseInt(i[1],10))/255,Math.min(255,parseInt(i[2],10))/255,Math.min(255,parseInt(i[3],10))/255,t);if(i=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(100,parseInt(i[1],10))/100,Math.min(100,parseInt(i[2],10))/100,Math.min(100,parseInt(i[3],10))/100,t);break;case`hsl`:case`hsla`:if(i=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setHSL(parseFloat(i[1])/360,parseFloat(i[2])/100,parseFloat(i[3])/100,t);break;default:Om(`Color: Unknown color model `+e)}}else if(r=/^\#([A-Fa-f\d]+)$/.exec(e)){let n=r[1],i=n.length;if(i===3)return this.setRGB(parseInt(n.charAt(0),16)/15,parseInt(n.charAt(1),16)/15,parseInt(n.charAt(2),16)/15,t);if(i===6)return this.setHex(parseInt(n,16),t);Om(`Color: Invalid hex color `+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=mm){let n=Gh[e.toLowerCase()];return n===void 0?Om(`Color: Unknown color `+e):this.setHex(n,t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=$m(e.r),this.g=$m(e.g),this.b=$m(e.b),this}copyLinearToSRGB(e){return this.r=eh(e.r),this.g=eh(e.g),this.b=eh(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=mm){return Qm.workingToColorSpace(Xh.copy(this),e),Math.round(Rm(Xh.r*255,0,255))*65536+Math.round(Rm(Xh.g*255,0,255))*256+Math.round(Rm(Xh.b*255,0,255))}getHexString(e=mm){return(`000000`+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=Qm.workingColorSpace){Qm.workingToColorSpace(Xh.copy(this),t);let n=Xh.r,r=Xh.g,i=Xh.b,a=Math.max(n,r,i),o=Math.min(n,r,i),s,c,l=(o+a)/2;if(o===a)s=0,c=0;else{let e=a-o;switch(c=l<=.5?e/(a+o):e/(2-a-o),a){case n:s=(r-i)/e+(r<i?6:0);break;case r:s=(i-n)/e+2;break;case i:s=(n-r)/e+4}s/=6}return e.h=s,e.s=c,e.l=l,e}getRGB(e,t=Qm.workingColorSpace){return Qm.workingToColorSpace(Xh.copy(this),t),e.r=Xh.r,e.g=Xh.g,e.b=Xh.b,e}getStyle(e=mm){Qm.workingToColorSpace(Xh.copy(this),e);let t=Xh.r,n=Xh.g,r=Xh.b;return e===`srgb`?`rgb(${Math.round(t*255)},${Math.round(n*255)},${Math.round(r*255)})`:`color(${e} ${t.toFixed(3)} ${n.toFixed(3)} ${r.toFixed(3)})`}offsetHSL(e,t,n){return this.getHSL(Kh),this.setHSL(Kh.h+e,Kh.s+t,Kh.l+n)}add(e){return this.r+=e.r,this.g+=e.g,this.b+=e.b,this}addColors(e,t){return this.r=e.r+t.r,this.g=e.g+t.g,this.b=e.b+t.b,this}addScalar(e){return this.r+=e,this.g+=e,this.b+=e,this}sub(e){return this.r=Math.max(0,this.r-e.r),this.g=Math.max(0,this.g-e.g),this.b=Math.max(0,this.b-e.b),this}multiply(e){return this.r*=e.r,this.g*=e.g,this.b*=e.b,this}multiplyScalar(e){return this.r*=e,this.g*=e,this.b*=e,this}lerp(e,t){return this.r+=(e.r-this.r)*t,this.g+=(e.g-this.g)*t,this.b+=(e.b-this.b)*t,this}lerpColors(e,t,n){return this.r=e.r+(t.r-e.r)*n,this.g=e.g+(t.g-e.g)*n,this.b=e.b+(t.b-e.b)*n,this}lerpHSL(e,t){this.getHSL(Kh),e.getHSL(qh);let n=Bm(Kh.h,qh.h,t),r=Bm(Kh.s,qh.s,t),i=Bm(Kh.l,qh.l,t);return this.setHSL(n,r,i),this}setFromVector3(e){return this.r=e.x,this.g=e.y,this.b=e.z,this}applyMatrix3(e){let t=this.r,n=this.g,r=this.b,i=e.elements;return this.r=i[0]*t+i[3]*n+i[6]*r,this.g=i[1]*t+i[4]*n+i[7]*r,this.b=i[2]*t+i[5]*n+i[8]*r,this}equals(e){return e.r===this.r&&e.g===this.g&&e.b===this.b}fromArray(e,t=0){return this.r=e[t],this.g=e[t+1],this.b=e[t+2],this}toArray(e=[],t=0){return e[t]=this.r,e[t+1]=this.g,e[t+2]=this.b,e}fromBufferAttribute(e,t){return this.r=e.getX(t),this.g=e.getY(t),this.b=e.getZ(t),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}},Xh=new Yh;Yh.NAMES=Gh;var Zh=class extends Vh{constructor(){super(),this.isScene=!0,this.type=`Scene`,this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.backgroundRotation=new wh,this.environmentIntensity=1,this.environmentRotation=new wh,this.overrideMaterial=null,typeof __THREE_DEVTOOLS__<`u`&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(`observe`,{detail:this}))}copy(e,t){return super.copy(e,t),e.background!==null&&(this.background=e.background.clone()),e.environment!==null&&(this.environment=e.environment.clone()),e.fog!==null&&(this.fog=e.fog.clone()),this.backgroundBlurriness=e.backgroundBlurriness,this.backgroundIntensity=e.backgroundIntensity,this.backgroundRotation.copy(e.backgroundRotation),this.environmentIntensity=e.environmentIntensity,this.environmentRotation.copy(e.environmentRotation),e.overrideMaterial!==null&&(this.overrideMaterial=e.overrideMaterial.clone()),this.matrixAutoUpdate=e.matrixAutoUpdate,this}toJSON(e){let t=super.toJSON(e);return this.fog!==null&&(t.object.fog=this.fog.toJSON()),t.object.backgroundBlurriness=this.backgroundBlurriness,t.object.backgroundIntensity=this.backgroundIntensity,t.object.backgroundRotation=this.backgroundRotation.toArray(),t.object.environmentIntensity=this.environmentIntensity,t.object.environmentRotation=this.environmentRotation.toArray(),t}},Qh=new Q,$h=new Q,eg=new Q,tg=new Q,ng=new Q,rg=new Q,ig=new Q,ag=new Q,og=new Q,sg=new Q,cg=new lh,lg=new lh,ug=new lh,dg=class e{constructor(e=new Q,t=new Q,n=new Q){this.a=e,this.b=t,this.c=n}static getNormal(e,t,n,r){r.subVectors(n,t),Qh.subVectors(e,t),r.cross(Qh);let i=r.lengthSq();return i>0?r.multiplyScalar(1/Math.sqrt(i)):r.set(0,0,0)}static getBarycoord(e,t,n,r,i){Qh.subVectors(r,t),$h.subVectors(n,t),eg.subVectors(e,t);let a=Qh.dot(Qh),o=Qh.dot($h),s=Qh.dot(eg),c=$h.dot($h),l=$h.dot(eg),u=a*c-o*o;if(u===0)return i.set(0,0,0),null;let d=1/u,f=(c*s-o*l)*d,p=(a*l-o*s)*d;return i.set(1-f-p,p,f)}static containsPoint(e,t,n,r){return this.getBarycoord(e,t,n,r,tg)!==null&&tg.x>=0&&tg.y>=0&&tg.x+tg.y<=1}static getInterpolation(e,t,n,r,i,a,o,s){return this.getBarycoord(e,t,n,r,tg)===null?(s.x=0,s.y=0,`z`in s&&(s.z=0),`w`in s&&(s.w=0),null):(s.setScalar(0),s.addScaledVector(i,tg.x),s.addScaledVector(a,tg.y),s.addScaledVector(o,tg.z),s)}static getInterpolatedAttribute(e,t,n,r,i,a){return cg.setScalar(0),lg.setScalar(0),ug.setScalar(0),cg.fromBufferAttribute(e,t),lg.fromBufferAttribute(e,n),ug.fromBufferAttribute(e,r),a.setScalar(0),a.addScaledVector(cg,i.x),a.addScaledVector(lg,i.y),a.addScaledVector(ug,i.z),a}static isFrontFacing(e,t,n,r){return Qh.subVectors(n,t),$h.subVectors(e,t),Qh.cross($h).dot(r)<0}set(e,t,n){return this.a.copy(e),this.b.copy(t),this.c.copy(n),this}setFromPointsAndIndices(e,t,n,r){return this.a.copy(e[t]),this.b.copy(e[n]),this.c.copy(e[r]),this}setFromAttributeAndIndices(e,t,n,r){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,n),this.c.fromBufferAttribute(e,r),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return Qh.subVectors(this.c,this.b),$h.subVectors(this.a,this.b),Qh.cross($h).length()*.5}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return e.getNormal(this.a,this.b,this.c,t)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,n){return e.getBarycoord(t,this.a,this.b,this.c,n)}getInterpolation(t,n,r,i,a){return e.getInterpolation(t,this.a,this.b,this.c,n,r,i,a)}containsPoint(t){return e.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return e.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){let n=this.a,r=this.b,i=this.c,a,o;ng.subVectors(r,n),rg.subVectors(i,n),ag.subVectors(e,n);let s=ng.dot(ag),c=rg.dot(ag);if(s<=0&&c<=0)return t.copy(n);og.subVectors(e,r);let l=ng.dot(og),u=rg.dot(og);if(l>=0&&u<=l)return t.copy(r);let d=s*u-l*c;if(d<=0&&s>=0&&l<=0)return a=s/(s-l),t.copy(n).addScaledVector(ng,a);sg.subVectors(e,i);let f=ng.dot(sg),p=rg.dot(sg);if(p>=0&&f<=p)return t.copy(i);let m=f*c-s*p;if(m<=0&&c>=0&&p<=0)return o=c/(c-p),t.copy(n).addScaledVector(rg,o);let h=l*p-f*u;if(h<=0&&u-l>=0&&f-p>=0)return ig.subVectors(i,r),o=(u-l)/(u-l+(f-p)),t.copy(r).addScaledVector(ig,o);let g=1/(h+m+d);return a=m*g,o=d*g,t.copy(n).addScaledVector(ng,a).addScaledVector(rg,o)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}},fg=class{constructor(e=new Q(1/0,1/0,1/0),t=new Q(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){this.makeEmpty();for(let t=0,n=e.length;t<n;t+=3)this.expandByPoint(mg.fromArray(e,t));return this}setFromBufferAttribute(e){this.makeEmpty();for(let t=0,n=e.count;t<n;t++)this.expandByPoint(mg.fromBufferAttribute(e,t));return this}setFromPoints(e){this.makeEmpty();for(let t=0,n=e.length;t<n;t++)this.expandByPoint(e[t]);return this}setFromCenterAndSize(e,t){let n=mg.copy(t).multiplyScalar(.5);return this.min.copy(e).sub(n),this.max.copy(e).add(n),this}setFromObject(e,t=!1){return this.makeEmpty(),this.expandByObject(e,t)}clone(){return new this.constructor().copy(this)}copy(e){return this.min.copy(e.min),this.max.copy(e.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(e){return this.isEmpty()?e.set(0,0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(e){return this.isEmpty()?e.set(0,0,0):e.subVectors(this.max,this.min)}expandByPoint(e){return this.min.min(e),this.max.max(e),this}expandByVector(e){return this.min.sub(e),this.max.add(e),this}expandByScalar(e){return this.min.addScalar(-e),this.max.addScalar(e),this}expandByObject(e,t=!1){e.updateWorldMatrix(!1,!1);let n=e.geometry;if(n!==void 0){let r=n.getAttribute(`position`);if(t===!0&&r!==void 0&&e.isInstancedMesh!==!0)for(let t=0,n=r.count;t<n;t++)e.isMesh===!0?e.getVertexPosition(t,mg):mg.fromBufferAttribute(r,t),mg.applyMatrix4(e.matrixWorld),this.expandByPoint(mg);else e.boundingBox===void 0?(n.boundingBox===null&&n.computeBoundingBox(),hg.copy(n.boundingBox)):(e.boundingBox===null&&e.computeBoundingBox(),hg.copy(e.boundingBox)),hg.applyMatrix4(e.matrixWorld),this.union(hg)}let r=e.children;for(let e=0,n=r.length;e<n;e++)this.expandByObject(r[e],t);return this}containsPoint(e){return e.x>=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y&&e.z>=this.min.z&&e.z<=this.max.z}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y&&e.max.z>=this.min.z&&e.min.z<=this.max.z}intersectsSphere(e){return this.clampPoint(e.center,mg),mg.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,n;return e.normal.x>0?(t=e.normal.x*this.min.x,n=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,n=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,n+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,n+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,n+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,n+=e.normal.z*this.min.z),t<=-e.constant&&n>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(Sg),Cg.subVectors(this.max,Sg),gg.subVectors(e.a,Sg),_g.subVectors(e.b,Sg),vg.subVectors(e.c,Sg),yg.subVectors(_g,gg),bg.subVectors(vg,_g),xg.subVectors(gg,vg);let t=[0,-yg.z,yg.y,0,-bg.z,bg.y,0,-xg.z,xg.y,yg.z,0,-yg.x,bg.z,0,-bg.x,xg.z,0,-xg.x,-yg.y,yg.x,0,-bg.y,bg.x,0,-xg.y,xg.x,0];return!Eg(t,gg,_g,vg,Cg)||(t=[1,0,0,0,1,0,0,0,1],!Eg(t,gg,_g,vg,Cg))?!1:(wg.crossVectors(yg,bg),t=[wg.x,wg.y,wg.z],Eg(t,gg,_g,vg,Cg))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,mg).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(mg).length()*.5),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()?this:(pg[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),pg[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),pg[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),pg[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),pg[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),pg[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),pg[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),pg[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(pg),this)}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(e){return this.min.fromArray(e.min),this.max.fromArray(e.max),this}},pg=[new Q,new Q,new Q,new Q,new Q,new Q,new Q,new Q],mg=new Q,hg=new fg,gg=new Q,_g=new Q,vg=new Q,yg=new Q,bg=new Q,xg=new Q,Sg=new Q,Cg=new Q,wg=new Q,Tg=new Q;function Eg(e,t,n,r,i){for(let a=0,o=e.length-3;a<=o;a+=3){Tg.fromArray(e,a);let o=i.x*Math.abs(Tg.x)+i.y*Math.abs(Tg.y)+i.z*Math.abs(Tg.z),s=t.dot(Tg),c=n.dot(Tg),l=r.dot(Tg);if(Math.max(-Math.max(s,c,l),Math.min(s,c,l))>o)return!1}return!0}var Dg=new Q,Og=new Um,kg=0,Ag=class extends Nm{constructor(e,t,n=!1){if(super(),Array.isArray(e))throw TypeError(`THREE.BufferAttribute: array should be a Typed Array.`);this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:kg++}),this.name=``,this.array=e,this.itemSize=t,this.count=e===void 0?0:e.length/t,this.normalized=n,this.usage=ym,this.updateRanges=[],this.gpuType=sp,this.version=0}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this.gpuType=e.gpuType,this}copyAt(e,t,n){e*=this.itemSize,n*=t.itemSize;for(let r=0,i=this.itemSize;r<i;r++)this.array[e+r]=t.array[n+r];return this}copyArray(e){return this.array.set(e),this}applyMatrix3(e){if(this.itemSize===2)for(let t=0,n=this.count;t<n;t++)Og.fromBufferAttribute(this,t),Og.applyMatrix3(e),this.setXY(t,Og.x,Og.y);else if(this.itemSize===3)for(let t=0,n=this.count;t<n;t++)Dg.fromBufferAttribute(this,t),Dg.applyMatrix3(e),this.setXYZ(t,Dg.x,Dg.y,Dg.z);return this}applyMatrix4(e){for(let t=0,n=this.count;t<n;t++)Dg.fromBufferAttribute(this,t),Dg.applyMatrix4(e),this.setXYZ(t,Dg.x,Dg.y,Dg.z);return this}applyNormalMatrix(e){for(let t=0,n=this.count;t<n;t++)Dg.fromBufferAttribute(this,t),Dg.applyNormalMatrix(e),this.setXYZ(t,Dg.x,Dg.y,Dg.z);return this}transformDirection(e){for(let t=0,n=this.count;t<n;t++)Dg.fromBufferAttribute(this,t),Dg.transformDirection(e),this.setXYZ(t,Dg.x,Dg.y,Dg.z);return this}set(e,t=0){return this.array.set(e,t),this}getComponent(e,t){let n=this.array[e*this.itemSize+t];return this.normalized&&(n=Vm(n,this.array)),n}setComponent(e,t,n){return this.normalized&&(n=Hm(n,this.array)),this.array[e*this.itemSize+t]=n,this}getX(e){let t=this.array[e*this.itemSize];return this.normalized&&(t=Vm(t,this.array)),t}setX(e,t){return this.normalized&&(t=Hm(t,this.array)),this.array[e*this.itemSize]=t,this}getY(e){let t=this.array[e*this.itemSize+1];return this.normalized&&(t=Vm(t,this.array)),t}setY(e,t){return this.normalized&&(t=Hm(t,this.array)),this.array[e*this.itemSize+1]=t,this}getZ(e){let t=this.array[e*this.itemSize+2];return this.normalized&&(t=Vm(t,this.array)),t}setZ(e,t){return this.normalized&&(t=Hm(t,this.array)),this.array[e*this.itemSize+2]=t,this}getW(e){let t=this.array[e*this.itemSize+3];return this.normalized&&(t=Vm(t,this.array)),t}setW(e,t){return this.normalized&&(t=Hm(t,this.array)),this.array[e*this.itemSize+3]=t,this}setXY(e,t,n){return e*=this.itemSize,this.normalized&&(t=Hm(t,this.array),n=Hm(n,this.array)),this.array[e+0]=t,this.array[e+1]=n,this}setXYZ(e,t,n,r){return e*=this.itemSize,this.normalized&&(t=Hm(t,this.array),n=Hm(n,this.array),r=Hm(r,this.array)),this.array[e+0]=t,this.array[e+1]=n,this.array[e+2]=r,this}setXYZW(e,t,n,r,i){return e*=this.itemSize,this.normalized&&(t=Hm(t,this.array),n=Hm(n,this.array),r=Hm(r,this.array),i=Hm(i,this.array)),this.array[e+0]=t,this.array[e+1]=n,this.array[e+2]=r,this.array[e+3]=i,this}onUpload(e){return this.onUploadCallback=e,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){let e={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.from(this.array),normalized:this.normalized};return e.name=this.name,e.usage=this.usage,e.gpuType=this.gpuType,e}dispose(){this.dispatchEvent({type:`dispose`})}},jg=class extends Ag{constructor(e,t,n){super(new Uint16Array(e),t,n)}},Mg=class extends Ag{constructor(e,t,n){super(new Uint32Array(e),t,n)}},Ng=class extends Ag{constructor(e,t,n){super(new Float32Array(e),t,n)}},Pg=new fg,Fg=new Q,Ig=new Q,Lg=class{constructor(e=new Q,t=-1){this.isSphere=!0,this.center=e,this.radius=t}set(e,t){return this.center.copy(e),this.radius=t,this}setFromPoints(e,t){let n=this.center;t===void 0?Pg.setFromPoints(e).getCenter(n):n.copy(t);let r=0;for(let t=0,i=e.length;t<i;t++)r=Math.max(r,n.distanceToSquared(e[t]));return this.radius=Math.sqrt(r),this}copy(e){return this.center.copy(e.center),this.radius=e.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(e){return e.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(e){return e.distanceTo(this.center)-this.radius}intersectsSphere(e){let t=this.radius+e.radius;return e.center.distanceToSquared(this.center)<=t*t}intersectsBox(e){return e.intersectsSphere(this)}intersectsPlane(e){return Math.abs(e.distanceToPoint(this.center))<=this.radius}clampPoint(e,t){let n=this.center.distanceToSquared(e);return t.copy(e),n>this.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?(e.makeEmpty(),e):(e.set(this.center,this.center),e.expandByScalar(this.radius),e)}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius*=e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;Fg.subVectors(e,this.center);let t=Fg.lengthSq();if(t>this.radius*this.radius){let e=Math.sqrt(t),n=(e-this.radius)*.5;this.center.addScaledVector(Fg,n/e),this.radius+=n}return this}union(e){return e.isEmpty()?this:this.isEmpty()?(this.copy(e),this):(this.center.equals(e.center)===!0?this.radius=Math.max(this.radius,e.radius):(Ig.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(Fg.copy(e.center).add(Ig)),this.expandByPoint(Fg.copy(e.center).sub(Ig))),this)}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(e){return this.radius=e.radius,this.center.fromArray(e.center),this}},Rg=0,zg=new mh,Bg=new Vh,Vg=new Q,Hg=new fg,Ug=new fg,Wg=new Q,Gg=class e extends Nm{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:Rg++}),this.uuid=Lm(),this.name=``,this.type=`BufferGeometry`,this.index=null,this.indirect=null,this.indirectOffset=0,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={},this._transformed=!1}getIndex(){return this.index}setIndex(e){return this.index=Array.isArray(e)?new(xm(e)?Mg:jg)(e,1):e,this}setIndirect(e,t=0){return this.indirect=e,this.indirectOffset=t,this}getIndirect(){return this.indirect}getAttribute(e){return this.attributes[e]}setAttribute(e,t){return this.attributes[e]=t,this}deleteAttribute(e){return delete this.attributes[e],this}hasAttribute(e){return this.attributes[e]!==void 0}addGroup(e,t,n=0){this.groups.push({start:e,count:t,materialIndex:n})}clearGroups(){this.groups=[]}setDrawRange(e,t){this.drawRange.start=e,this.drawRange.count=t}applyMatrix4(e){let t=this.attributes.position;t!==void 0&&(t.applyMatrix4(e),t.needsUpdate=!0);let n=this.attributes.normal;if(n!==void 0){let t=new qm().getNormalMatrix(e);n.applyNormalMatrix(t),n.needsUpdate=!0}let r=this.attributes.tangent;return r!==void 0&&(r.transformDirection(e),r.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this._transformed=!0,this}applyQuaternion(e){return zg.makeRotationFromQuaternion(e),this.applyMatrix4(zg),this}rotateX(e){return zg.makeRotationX(e),this.applyMatrix4(zg),this}rotateY(e){return zg.makeRotationY(e),this.applyMatrix4(zg),this}rotateZ(e){return zg.makeRotationZ(e),this.applyMatrix4(zg),this}translate(e,t,n){return zg.makeTranslation(e,t,n),this.applyMatrix4(zg),this}scale(e,t,n){return zg.makeScale(e,t,n),this.applyMatrix4(zg),this}lookAt(e){return Bg.lookAt(e),Bg.updateMatrix(),this.applyMatrix4(Bg.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(Vg).negate(),this.translate(Vg.x,Vg.y,Vg.z),this}setFromPoints(e){let t=this.getAttribute(`position`);if(t===void 0){let t=[];for(let n=0,r=e.length;n<r;n++){let r=e[n];t.push(r.x,r.y,r.z||0)}this.setAttribute(`position`,new Ng(t,3))}else{let n=Math.min(e.length,t.count);for(let r=0;r<n;r++){let n=e[r];t.setXYZ(r,n.x,n.y,n.z||0)}e.length>t.count&&Om(`BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry.`),t.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new fg);let e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){km(`BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.`,this),this.boundingBox.set(new Q(-1/0,-1/0,-1/0),new Q(1/0,1/0,1/0));return}if(e!==void 0){if(this.boundingBox.setFromBufferAttribute(e),t)for(let e=0,n=t.length;e<n;e++){let n=t[e];Hg.setFromBufferAttribute(n),this.morphTargetsRelative?(Wg.addVectors(this.boundingBox.min,Hg.min),this.boundingBox.expandByPoint(Wg),Wg.addVectors(this.boundingBox.max,Hg.max),this.boundingBox.expandByPoint(Wg)):(this.boundingBox.expandByPoint(Hg.min),this.boundingBox.expandByPoint(Hg.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&km(`BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.`,this)}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new Lg);let e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){km(`BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.`,this),this.boundingSphere.set(new Q,1/0);return}if(e){let n=this.boundingSphere.center;if(Hg.setFromBufferAttribute(e),t)for(let e=0,n=t.length;e<n;e++){let n=t[e];Ug.setFromBufferAttribute(n),this.morphTargetsRelative?(Wg.addVectors(Hg.min,Ug.min),Hg.expandByPoint(Wg),Wg.addVectors(Hg.max,Ug.max),Hg.expandByPoint(Wg)):(Hg.expandByPoint(Ug.min),Hg.expandByPoint(Ug.max))}Hg.getCenter(n);let r=0;for(let t=0,i=e.count;t<i;t++)Wg.fromBufferAttribute(e,t),r=Math.max(r,n.distanceToSquared(Wg));if(t)for(let i=0,a=t.length;i<a;i++){let a=t[i],o=this.morphTargetsRelative;for(let t=0,i=a.count;t<i;t++)Wg.fromBufferAttribute(a,t),o&&(Vg.fromBufferAttribute(e,t),Wg.add(Vg)),r=Math.max(r,n.distanceToSquared(Wg))}this.boundingSphere.radius=Math.sqrt(r),isNaN(this.boundingSphere.radius)&&km(`BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.`,this)}}computeTangents(){let e=this.index,t=this.attributes;if(e===null||t.position===void 0||t.normal===void 0||t.uv===void 0){km(`BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)`);return}let n=t.position,r=t.normal,i=t.uv,a=this.getAttribute(`tangent`);(a===void 0||a.count!==n.count)&&(a=new Ag(new Float32Array(4*n.count),4),this.setAttribute(`tangent`,a));let o=[],s=[];for(let e=0;e<n.count;e++)o[e]=new Q,s[e]=new Q;let c=new Q,l=new Q,u=new Q,d=new Um,f=new Um,p=new Um,m=new Q,h=new Q;function g(e,t,r){c.fromBufferAttribute(n,e),l.fromBufferAttribute(n,t),u.fromBufferAttribute(n,r),d.fromBufferAttribute(i,e),f.fromBufferAttribute(i,t),p.fromBufferAttribute(i,r),l.sub(c),u.sub(c),f.sub(d),p.sub(d);let a=1/(f.x*p.y-p.x*f.y);isFinite(a)&&(m.copy(l).multiplyScalar(p.y).addScaledVector(u,-f.y).multiplyScalar(a),h.copy(u).multiplyScalar(f.x).addScaledVector(l,-p.x).multiplyScalar(a),o[e].add(m),o[t].add(m),o[r].add(m),s[e].add(h),s[t].add(h),s[r].add(h))}let _=this.groups;_.length===0&&(_=[{start:0,count:e.count}]);for(let t=0,n=_.length;t<n;++t){let n=_[t],r=n.start,i=n.count;for(let t=r,n=r+i;t<n;t+=3)g(e.getX(t+0),e.getX(t+1),e.getX(t+2))}let v=new Q,y=new Q,b=new Q,x=new Q;function S(e){b.fromBufferAttribute(r,e),x.copy(b);let t=o[e];v.copy(t),v.sub(b.multiplyScalar(b.dot(t))).normalize(),y.crossVectors(x,t);let n=y.dot(s[e])<0?-1:1;a.setXYZW(e,v.x,v.y,v.z,n)}for(let t=0,n=_.length;t<n;++t){let n=_[t],r=n.start,i=n.count;for(let t=r,n=r+i;t<n;t+=3)S(e.getX(t+0)),S(e.getX(t+1)),S(e.getX(t+2))}this._transformed=!0}computeVertexNormals(){let e=this.index,t=this.getAttribute(`position`);if(t!==void 0){let n=this.getAttribute(`normal`);if(n===void 0||n.count!==t.count)n=new Ag(new Float32Array(t.count*3),3),this.setAttribute(`normal`,n);else for(let e=0,t=n.count;e<t;e++)n.setXYZ(e,0,0,0);let r=new Q,i=new Q,a=new Q,o=new Q,s=new Q,c=new Q,l=new Q,u=new Q;if(e)for(let d=0,f=e.count;d<f;d+=3){let f=e.getX(d+0),p=e.getX(d+1),m=e.getX(d+2);r.fromBufferAttribute(t,f),i.fromBufferAttribute(t,p),a.fromBufferAttribute(t,m),l.subVectors(a,i),u.subVectors(r,i),l.cross(u),o.fromBufferAttribute(n,f),s.fromBufferAttribute(n,p),c.fromBufferAttribute(n,m),o.add(l),s.add(l),c.add(l),n.setXYZ(f,o.x,o.y,o.z),n.setXYZ(p,s.x,s.y,s.z),n.setXYZ(m,c.x,c.y,c.z)}else for(let e=0,o=t.count;e<o;e+=3)r.fromBufferAttribute(t,e+0),i.fromBufferAttribute(t,e+1),a.fromBufferAttribute(t,e+2),l.subVectors(a,i),u.subVectors(r,i),l.cross(u),n.setXYZ(e+0,l.x,l.y,l.z),n.setXYZ(e+1,l.x,l.y,l.z),n.setXYZ(e+2,l.x,l.y,l.z);this.normalizeNormals(),n.needsUpdate=!0}}normalizeNormals(){let e=this.attributes.normal;for(let t=0,n=e.count;t<n;t++)Wg.fromBufferAttribute(e,t),Wg.normalize(),e.setXYZ(t,Wg.x,Wg.y,Wg.z)}toNonIndexed(){function t(e,t){let n=e.array,r=e.itemSize,i=e.normalized,a=new n.constructor(t.length*r),o=0,s=0;for(let i=0,c=t.length;i<c;i++){o=e.isInterleavedBufferAttribute?t[i]*e.data.stride+e.offset:t[i]*r;for(let e=0;e<r;e++)a[s++]=n[o++]}return new Ag(a,r,i)}if(this.index===null)return Om(`BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.`),this;let n=new e,r=this.index.array,i=this.attributes;for(let e in i){let a=i[e],o=t(a,r);n.setAttribute(e,o)}let a=this.morphAttributes;for(let e in a){let i=[],o=a[e];for(let e=0,n=o.length;e<n;e++){let n=o[e],a=t(n,r);i.push(a)}n.morphAttributes[e]=i}n.morphTargetsRelative=this.morphTargetsRelative;let o=this.groups;for(let e=0,t=o.length;e<t;e++){let t=o[e];n.addGroup(t.start,t.count,t.materialIndex)}return n}toJSON(){let e={metadata:{version:4.7,type:`BufferGeometry`,generator:`BufferGeometry.toJSON`}};if(e.uuid=this.uuid,e.type=this.parameters!==void 0&&this._transformed===!0?`BufferGeometry`:this.type,e.name=this.name,Object.keys(this.userData).length>0&&(e.userData=this.userData),this.parameters!==void 0&&this._transformed!==!0){let t=this.parameters;for(let n in t)t[n]!==void 0&&(e[n]=t[n]);return e}e.data={attributes:{}};let t=this.index;t!==null&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});let n=this.attributes;for(let t in n){let r=n[t];e.data.attributes[t]=r.toJSON(e.data)}let r={},i=!1;for(let t in this.morphAttributes){let n=this.morphAttributes[t],a=[];for(let t=0,r=n.length;t<r;t++){let r=n[t];a.push(r.toJSON(e.data))}a.length>0&&(r[t]=a,i=!0)}i&&(e.data.morphAttributes=r,e.data.morphTargetsRelative=this.morphTargetsRelative);let a=this.groups;a.length>0&&(e.data.groups=JSON.parse(JSON.stringify(a)));let o=this.boundingSphere;return o!==null&&(e.data.boundingSphere=o.toJSON()),e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;let t={};this.name=e.name;let n=e.index;n!==null&&this.setIndex(n.clone());let r=e.attributes;for(let e in r){let n=r[e];this.setAttribute(e,n.clone(t))}let i=e.morphAttributes;for(let e in i){let n=[],r=i[e];for(let e=0,i=r.length;e<i;e++)n.push(r[e].clone(t));this.morphAttributes[e]=n}this.morphTargetsRelative=e.morphTargetsRelative;let a=e.groups;for(let e=0,t=a.length;e<t;e++){let t=a[e];this.addGroup(t.start,t.count,t.materialIndex)}let o=e.boundingBox;o!==null&&(this.boundingBox=o.clone());let s=e.boundingSphere;return s!==null&&(this.boundingSphere=s.clone()),this.drawRange.start=e.drawRange.start,this.drawRange.count=e.drawRange.count,this.userData=e.userData,this._transformed=e._transformed,this}dispose(){this.dispatchEvent({type:`dispose`})}},Kg=new Q,qg=new Q,Jg=new qm,Yg=class{constructor(e=new Q(1,0,0),t=0){this.isPlane=!0,this.normal=e,this.constant=t}set(e,t){return this.normal.copy(e),this.constant=t,this}setComponents(e,t,n,r){return this.normal.set(e,t,n),this.constant=r,this}setFromNormalAndCoplanarPoint(e,t){return this.normal.copy(e),this.constant=-t.dot(this.normal),this}setFromCoplanarPoints(e,t,n){let r=Kg.subVectors(n,t).cross(qg.subVectors(e,t)).normalize();return this.setFromNormalAndCoplanarPoint(r,e),this}copy(e){return this.normal.copy(e.normal),this.constant=e.constant,this}normalize(){let e=1/this.normal.length();return this.normal.multiplyScalar(e),this.constant*=e,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(e){return this.normal.dot(e)+this.constant}distanceToSphere(e){return this.distanceToPoint(e.center)-e.radius}projectPoint(e,t){return t.copy(e).addScaledVector(this.normal,-this.distanceToPoint(e))}intersectLine(e,t,n=!0){let r=e.delta(Kg),i=this.normal.dot(r);if(i===0)return this.distanceToPoint(e.start)===0?t.copy(e.start):null;let a=-(e.start.dot(this.normal)+this.constant)/i;return n===!0&&(a<0||a>1)?null:t.copy(e.start).addScaledVector(r,a)}intersectsLine(e){let t=this.distanceToPoint(e.start),n=this.distanceToPoint(e.end);return t<0&&n>0||n<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){let n=t||Jg.getNormalMatrix(e),r=this.coplanarPoint(Kg).applyMatrix4(e),i=this.normal.applyMatrix3(n).normalize();return this.constant=-r.dot(i),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new this.constructor().copy(this)}toJSON(){return{normal:this.normal.toArray(),constant:this.constant}}fromJSON(e){return this.normal.fromArray(e.normal),this.constant=e.constant,this}},Xg=0,Zg=class extends Nm{constructor(){super(),this.isMaterial=!0,Object.defineProperty(this,"id",{value:Xg++}),this.uuid=Lm(),this.name=``,this.type=`Material`,this.blending=1,this.side=0,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.alphaHash=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=100,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.blendColor=new Yh(0,0,0),this.blendAlpha=0,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=vm,this.stencilZFail=vm,this.stencilZPass=vm,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.forceSinglePass=!1,this.allowOverride=!0,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(e){this._alphaTest>0!=e>0&&this.version++,this._alphaTest=e}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(e!==void 0)for(let t in e){let n=e[t];if(n===void 0){Om(`Material: parameter '${t}' has value of undefined.`);continue}let r=this[t];if(r===void 0){Om(`Material: '${t}' is not a property of THREE.${this.type}.`);continue}r&&r.isColor?r.set(n):r&&r.isVector2&&n&&n.isVector2||r&&r.isEuler&&n&&n.isEuler||r&&r.isVector3&&n&&n.isVector3?r.copy(n):this[t]=n}}toJSON(e){let t=e===void 0||typeof e==`string`;t&&(e={textures:{},images:{}});let n={metadata:{version:4.7,type:`Material`,generator:`Material.toJSON`}};n.uuid=this.uuid,n.type=this.type,n.blending=this.blending,n.side=this.side,n.shadowSide=this.shadowSide,n.vertexColors=this.vertexColors,n.opacity=this.opacity,n.transparent=this.transparent,n.blendSrc=this.blendSrc,n.blendDst=this.blendDst,n.blendEquation=this.blendEquation,n.blendSrcAlpha=this.blendSrcAlpha,n.blendDstAlpha=this.blendDstAlpha,n.blendEquationAlpha=this.blendEquationAlpha,n.blendColor=this.blendColor.getHex(),n.blendAlpha=this.blendAlpha,n.depthFunc=this.depthFunc,n.depthTest=this.depthTest,n.depthWrite=this.depthWrite,n.colorWrite=this.colorWrite,n.clipIntersection=this.clipIntersection,n.clipShadows=this.clipShadows,n.stencilWriteMask=this.stencilWriteMask,n.stencilFunc=this.stencilFunc,n.stencilRef=this.stencilRef,n.stencilFuncMask=this.stencilFuncMask,n.stencilFail=this.stencilFail,n.stencilZFail=this.stencilZFail,n.stencilZPass=this.stencilZPass,n.stencilWrite=this.stencilWrite,n.polygonOffset=this.polygonOffset,n.polygonOffsetFactor=this.polygonOffsetFactor,n.polygonOffsetUnits=this.polygonOffsetUnits,n.dithering=this.dithering,n.alphaTest=this.alphaTest,n.alphaHash=this.alphaHash,n.alphaToCoverage=this.alphaToCoverage,n.premultipliedAlpha=this.premultipliedAlpha,n.forceSinglePass=this.forceSinglePass,n.allowOverride=this.allowOverride,n.visible=this.visible,n.toneMapped=this.toneMapped,n.name=this.name,this.color&&this.color.isColor&&(n.color=this.color.getHex()),this.roughness!==void 0&&(n.roughness=this.roughness),this.metalness!==void 0&&(n.metalness=this.metalness),this.sheen!==void 0&&(n.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(n.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(n.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(n.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(n.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(n.shininess=this.shininess),this.clearcoat!==void 0&&(n.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.sheenColorMap&&this.sheenColorMap.isTexture&&(n.sheenColorMap=this.sheenColorMap.toJSON(e).uuid),this.sheenRoughnessMap&&this.sheenRoughnessMap.isTexture&&(n.sheenRoughnessMap=this.sheenRoughnessMap.toJSON(e).uuid),this.dispersion!==void 0&&(n.dispersion=this.dispersion),this.retroreflectivity!==void 0&&(n.retroreflectivity=this.retroreflectivity),this.iridescence!==void 0&&(n.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(n.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(n.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(n.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(n.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),this.anisotropy!==void 0&&(n.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(n.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(n.anisotropyMap=this.anisotropyMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(e).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(e).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(e).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(e).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(e).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(n.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(n.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(e).uuid,this.combine!==void 0&&(n.combine=this.combine)),this.envMapRotation!==void 0&&(n.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(n.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(n.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(e).uuid),this.transmission!==void 0&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(e).uuid),this.thickness!==void 0&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(e).uuid),this.attenuationDistance!==void 0&&(n.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(n.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(n.size=this.size),this.sizeAttenuation!==void 0&&(n.sizeAttenuation=this.sizeAttenuation),Array.isArray(this.clippingPlanes)&&this.clippingPlanes.length>0&&(n.clippingPlanes=this.clippingPlanes.map(e=>e.toJSON())),this.rotation!==void 0&&(n.rotation=this.rotation),this.depthPacking!==void 0&&(n.depthPacking=this.depthPacking),this.linewidth!==void 0&&(n.linewidth=this.linewidth),this.linecap!==void 0&&(n.linecap=this.linecap),this.linejoin!==void 0&&(n.linejoin=this.linejoin),this.dashSize!==void 0&&(n.dashSize=this.dashSize),this.gapSize!==void 0&&(n.gapSize=this.gapSize),this.scale!==void 0&&(n.scale=this.scale),this.wireframe!==void 0&&(n.wireframe=this.wireframe),this.wireframeLinewidth!==void 0&&(n.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!==void 0&&(n.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!==void 0&&(n.wireframeLinejoin=this.wireframeLinejoin),this.flatShading!==void 0&&(n.flatShading=this.flatShading),this.fog!==void 0&&(n.fog=this.fog),Object.keys(this.userData).length>0&&(n.userData=this.userData);function r(e){let t=[];for(let n in e){let r=e[n];delete r.metadata,t.push(r)}return t}if(t){let t=r(e.textures),i=r(e.images);t.length>0&&(n.textures=t),i.length>0&&(n.images=i)}return n}fromJSON(e,t){if(e.uuid!==void 0&&(this.uuid=e.uuid),e.name!==void 0&&(this.name=e.name),e.color!==void 0&&this.color!==void 0&&this.color.setHex(e.color),e.roughness!==void 0&&(this.roughness=e.roughness),e.metalness!==void 0&&(this.metalness=e.metalness),e.sheen!==void 0&&(this.sheen=e.sheen),e.sheenColor!==void 0&&(this.sheenColor=new Yh().setHex(e.sheenColor)),e.sheenRoughness!==void 0&&(this.sheenRoughness=e.sheenRoughness),e.emissive!==void 0&&this.emissive!==void 0&&this.emissive.setHex(e.emissive),e.specular!==void 0&&this.specular!==void 0&&this.specular.setHex(e.specular),e.specularIntensity!==void 0&&(this.specularIntensity=e.specularIntensity),e.specularColor!==void 0&&this.specularColor!==void 0&&this.specularColor.setHex(e.specularColor),e.shininess!==void 0&&(this.shininess=e.shininess),e.clearcoat!==void 0&&(this.clearcoat=e.clearcoat),e.clearcoatRoughness!==void 0&&(this.clearcoatRoughness=e.clearcoatRoughness),e.dispersion!==void 0&&(this.dispersion=e.dispersion),e.retroreflectivity!==void 0&&(this.retroreflectivity=e.retroreflectivity),e.iridescence!==void 0&&(this.iridescence=e.iridescence),e.iridescenceIOR!==void 0&&(this.iridescenceIOR=e.iridescenceIOR),e.iridescenceThicknessRange!==void 0&&(this.iridescenceThicknessRange=e.iridescenceThicknessRange),e.transmission!==void 0&&(this.transmission=e.transmission),e.thickness!==void 0&&(this.thickness=e.thickness),e.attenuationDistance!==void 0&&(this.attenuationDistance=e.attenuationDistance),e.attenuationColor!==void 0&&this.attenuationColor!==void 0&&this.attenuationColor.setHex(e.attenuationColor),e.anisotropy!==void 0&&(this.anisotropy=e.anisotropy),e.anisotropyRotation!==void 0&&(this.anisotropyRotation=e.anisotropyRotation),e.fog!==void 0&&(this.fog=e.fog),e.flatShading!==void 0&&(this.flatShading=e.flatShading),e.blending!==void 0&&(this.blending=e.blending),e.combine!==void 0&&(this.combine=e.combine),e.side!==void 0&&(this.side=e.side),e.shadowSide!==void 0&&(this.shadowSide=e.shadowSide),e.opacity!==void 0&&(this.opacity=e.opacity),e.transparent!==void 0&&(this.transparent=e.transparent),e.alphaTest!==void 0&&(this.alphaTest=e.alphaTest),e.alphaHash!==void 0&&(this.alphaHash=e.alphaHash),e.depthFunc!==void 0&&(this.depthFunc=e.depthFunc),e.depthTest!==void 0&&(this.depthTest=e.depthTest),e.depthWrite!==void 0&&(this.depthWrite=e.depthWrite),e.colorWrite!==void 0&&(this.colorWrite=e.colorWrite),e.clippingPlanes!==void 0&&(this.clippingPlanes=e.clippingPlanes.map(e=>new Yg().fromJSON(e))),e.clipIntersection!==void 0&&(this.clipIntersection=e.clipIntersection),e.clipShadows!==void 0&&(this.clipShadows=e.clipShadows),e.depthPacking!==void 0&&(this.depthPacking=e.depthPacking),e.blendSrc!==void 0&&(this.blendSrc=e.blendSrc),e.blendDst!==void 0&&(this.blendDst=e.blendDst),e.blendEquation!==void 0&&(this.blendEquation=e.blendEquation),e.blendSrcAlpha!==void 0&&(this.blendSrcAlpha=e.blendSrcAlpha),e.blendDstAlpha!==void 0&&(this.blendDstAlpha=e.blendDstAlpha),e.blendEquationAlpha!==void 0&&(this.blendEquationAlpha=e.blendEquationAlpha),e.blendColor!==void 0&&this.blendColor!==void 0&&this.blendColor.setHex(e.blendColor),e.blendAlpha!==void 0&&(this.blendAlpha=e.blendAlpha),e.stencilWriteMask!==void 0&&(this.stencilWriteMask=e.stencilWriteMask),e.stencilFunc!==void 0&&(this.stencilFunc=e.stencilFunc),e.stencilRef!==void 0&&(this.stencilRef=e.stencilRef),e.stencilFuncMask!==void 0&&(this.stencilFuncMask=e.stencilFuncMask),e.stencilFail!==void 0&&(this.stencilFail=e.stencilFail),e.stencilZFail!==void 0&&(this.stencilZFail=e.stencilZFail),e.stencilZPass!==void 0&&(this.stencilZPass=e.stencilZPass),e.stencilWrite!==void 0&&(this.stencilWrite=e.stencilWrite),e.wireframe!==void 0&&(this.wireframe=e.wireframe),e.wireframeLinewidth!==void 0&&(this.wireframeLinewidth=e.wireframeLinewidth),e.wireframeLinecap!==void 0&&(this.wireframeLinecap=e.wireframeLinecap),e.wireframeLinejoin!==void 0&&(this.wireframeLinejoin=e.wireframeLinejoin),e.rotation!==void 0&&(this.rotation=e.rotation),e.linewidth!==void 0&&(this.linewidth=e.linewidth),e.linecap!==void 0&&(this.linecap=e.linecap),e.linejoin!==void 0&&(this.linejoin=e.linejoin),e.dashSize!==void 0&&(this.dashSize=e.dashSize),e.gapSize!==void 0&&(this.gapSize=e.gapSize),e.scale!==void 0&&(this.scale=e.scale),e.polygonOffset!==void 0&&(this.polygonOffset=e.polygonOffset),e.polygonOffsetFactor!==void 0&&(this.polygonOffsetFactor=e.polygonOffsetFactor),e.polygonOffsetUnits!==void 0&&(this.polygonOffsetUnits=e.polygonOffsetUnits),e.dithering!==void 0&&(this.dithering=e.dithering),e.alphaToCoverage!==void 0&&(this.alphaToCoverage=e.alphaToCoverage),e.premultipliedAlpha!==void 0&&(this.premultipliedAlpha=e.premultipliedAlpha),e.forceSinglePass!==void 0&&(this.forceSinglePass=e.forceSinglePass),e.allowOverride!==void 0&&(this.allowOverride=e.allowOverride),e.visible!==void 0&&(this.visible=e.visible),e.toneMapped!==void 0&&(this.toneMapped=e.toneMapped),e.userData!==void 0&&(this.userData=e.userData),e.vertexColors!==void 0&&(this.vertexColors=typeof e.vertexColors==`number`?e.vertexColors>0:e.vertexColors),e.size!==void 0&&(this.size=e.size),e.sizeAttenuation!==void 0&&(this.sizeAttenuation=e.sizeAttenuation),e.map!==void 0&&(this.map=t[e.map]||null),e.matcap!==void 0&&(this.matcap=t[e.matcap]||null),e.alphaMap!==void 0&&(this.alphaMap=t[e.alphaMap]||null),e.bumpMap!==void 0&&(this.bumpMap=t[e.bumpMap]||null),e.bumpScale!==void 0&&(this.bumpScale=e.bumpScale),e.normalMap!==void 0&&(this.normalMap=t[e.normalMap]||null),e.normalMapType!==void 0&&(this.normalMapType=e.normalMapType),e.normalScale!==void 0){let t=e.normalScale;Array.isArray(t)===!1&&(t=[t,t]),this.normalScale=new Um().fromArray(t)}return e.displacementMap!==void 0&&(this.displacementMap=t[e.displacementMap]||null),e.displacementScale!==void 0&&(this.displacementScale=e.displacementScale),e.displacementBias!==void 0&&(this.displacementBias=e.displacementBias),e.roughnessMap!==void 0&&(this.roughnessMap=t[e.roughnessMap]||null),e.metalnessMap!==void 0&&(this.metalnessMap=t[e.metalnessMap]||null),e.emissiveMap!==void 0&&(this.emissiveMap=t[e.emissiveMap]||null),e.emissiveIntensity!==void 0&&(this.emissiveIntensity=e.emissiveIntensity),e.specularMap!==void 0&&(this.specularMap=t[e.specularMap]||null),e.specularIntensityMap!==void 0&&(this.specularIntensityMap=t[e.specularIntensityMap]||null),e.specularColorMap!==void 0&&(this.specularColorMap=t[e.specularColorMap]||null),e.envMap!==void 0&&(this.envMap=t[e.envMap]||null),e.envMapRotation!==void 0&&this.envMapRotation.fromArray(e.envMapRotation),e.envMapIntensity!==void 0&&(this.envMapIntensity=e.envMapIntensity),e.reflectivity!==void 0&&(this.reflectivity=e.reflectivity),e.refractionRatio!==void 0&&(this.refractionRatio=e.refractionRatio),e.lightMap!==void 0&&(this.lightMap=t[e.lightMap]||null),e.lightMapIntensity!==void 0&&(this.lightMapIntensity=e.lightMapIntensity),e.aoMap!==void 0&&(this.aoMap=t[e.aoMap]||null),e.aoMapIntensity!==void 0&&(this.aoMapIntensity=e.aoMapIntensity),e.gradientMap!==void 0&&(this.gradientMap=t[e.gradientMap]||null),e.clearcoatMap!==void 0&&(this.clearcoatMap=t[e.clearcoatMap]||null),e.clearcoatRoughnessMap!==void 0&&(this.clearcoatRoughnessMap=t[e.clearcoatRoughnessMap]||null),e.clearcoatNormalMap!==void 0&&(this.clearcoatNormalMap=t[e.clearcoatNormalMap]||null),e.clearcoatNormalScale!==void 0&&(this.clearcoatNormalScale=new Um().fromArray(e.clearcoatNormalScale)),e.iridescenceMap!==void 0&&(this.iridescenceMap=t[e.iridescenceMap]||null),e.iridescenceThicknessMap!==void 0&&(this.iridescenceThicknessMap=t[e.iridescenceThicknessMap]||null),e.transmissionMap!==void 0&&(this.transmissionMap=t[e.transmissionMap]||null),e.thicknessMap!==void 0&&(this.thicknessMap=t[e.thicknessMap]||null),e.anisotropyMap!==void 0&&(this.anisotropyMap=t[e.anisotropyMap]||null),e.sheenColorMap!==void 0&&(this.sheenColorMap=t[e.sheenColorMap]||null),e.sheenRoughnessMap!==void 0&&(this.sheenRoughnessMap=t[e.sheenRoughnessMap]||null),this}clone(){return new this.constructor().copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.blendColor.copy(e.blendColor),this.blendAlpha=e.blendAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;let t=e.clippingPlanes,n=null;if(t!==null){let e=t.length;n=Array(e);for(let r=0;r!==e;++r)n[r]=t[r].clone()}return this.clippingPlanes=n,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaHash=e.alphaHash,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.allowOverride=e.allowOverride,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:`dispose`})}set needsUpdate(e){e===!0&&this.version++}},Qg=new Q,$g=new Q,e_=new Q,t_=new Q,n_=class{constructor(e=new Q,t=new Q(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.origin).addScaledVector(this.direction,e)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,Qg)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);let n=t.dot(this.direction);return n<0?t.copy(this.origin):t.copy(this.origin).addScaledVector(this.direction,n)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){let t=Qg.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(Qg.copy(this.origin).addScaledVector(this.direction,t),Qg.distanceToSquared(e))}distanceSqToSegment(e,t,n,r){$g.copy(e).add(t).multiplyScalar(.5),e_.copy(t).sub(e).normalize(),t_.copy(this.origin).sub($g);let i=e.distanceTo(t)*.5,a=-this.direction.dot(e_),o=t_.dot(this.direction),s=-t_.dot(e_),c=t_.lengthSq(),l=Math.abs(1-a*a),u,d,f,p;if(l>0){if(u=a*s-o,d=a*o-s,p=i*l,u>=0){if(d>=-p){if(d<=p){let e=1/l;u*=e,d*=e,f=u*(u+a*d+2*o)+d*(a*u+d+2*s)+c}else d=i,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*s)+c}else d=-i,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*s)+c}else d<=-p?(u=Math.max(0,-(-a*i+o)),d=u>0?-i:Math.min(Math.max(-i,-s),i),f=-u*u+d*(d+2*s)+c):d<=p?(u=0,d=Math.min(Math.max(-i,-s),i),f=d*(d+2*s)+c):(u=Math.max(0,-(a*i+o)),d=u>0?i:Math.min(Math.max(-i,-s),i),f=-u*u+d*(d+2*s)+c)}else d=a>0?-i:i,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*s)+c;return n&&n.copy(this.origin).addScaledVector(this.direction,u),r&&r.copy($g).addScaledVector(e_,d),f}intersectSphere(e,t){if(e.radius<0)return null;Qg.subVectors(e.center,this.origin);let n=Qg.dot(this.direction),r=Qg.dot(Qg)-n*n,i=e.radius*e.radius;if(r>i)return null;let a=Math.sqrt(i-r),o=n-a,s=n+a;return s<0?null:o<0?this.at(s,t):this.at(o,t)}intersectsSphere(e){return e.radius<0?!1:this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){let t=e.normal.dot(this.direction);if(t===0)return e.distanceToPoint(this.origin)===0?0:null;let n=-(this.origin.dot(e.normal)+e.constant)/t;return n>=0?n:null}intersectPlane(e,t){let n=this.distanceToPlane(e);return n===null?null:this.at(n,t)}intersectsPlane(e){let t=e.distanceToPoint(this.origin);return t===0||e.normal.dot(this.direction)*t<0}intersectBox(e,t){let n,r,i,a,o,s,c=1/this.direction.x,l=1/this.direction.y,u=1/this.direction.z,d=this.origin;return c>=0?(n=(e.min.x-d.x)*c,r=(e.max.x-d.x)*c):(n=(e.max.x-d.x)*c,r=(e.min.x-d.x)*c),l>=0?(i=(e.min.y-d.y)*l,a=(e.max.y-d.y)*l):(i=(e.max.y-d.y)*l,a=(e.min.y-d.y)*l),n>a||i>r||((i>n||isNaN(n))&&(n=i),(a<r||isNaN(r))&&(r=a),u>=0?(o=(e.min.z-d.z)*u,s=(e.max.z-d.z)*u):(o=(e.max.z-d.z)*u,s=(e.min.z-d.z)*u),n>s||o>r)||((o>n||n!==n)&&(n=o),(s<r||r!==r)&&(r=s),r<0)?null:this.at(n>=0?n:r,t)}intersectsBox(e){return this.intersectBox(e,Qg)!==null}intersectTriangle(e,t,n,r,i){let a=this.origin,o=this.direction,s=o.x,c=o.y,l=o.z,u=e.x-a.x,d=e.y-a.y,f=e.z-a.z,p=t.x-a.x,m=t.y-a.y,h=t.z-a.z,g=n.x-a.x,_=n.y-a.y,v=n.z-a.z,y=Math.abs(s),b=Math.abs(c),x=Math.abs(l),S,C,w,T,E,D,O,k,A,j,ee,M;if(y>=b&&y>=x?(w=s,D=u,A=p,M=g,s>=0?(S=c,C=l,T=d,E=f,O=m,k=h,j=_,ee=v):(S=l,C=c,T=f,E=d,O=h,k=m,j=v,ee=_)):b>=x?(w=c,D=d,A=m,M=_,c>=0?(S=l,C=s,T=f,E=u,O=h,k=p,j=v,ee=g):(S=s,C=l,T=u,E=f,O=p,k=h,j=g,ee=v)):(w=l,D=f,A=h,M=v,l>=0?(S=s,C=c,T=u,E=d,O=p,k=m,j=g,ee=_):(S=c,C=s,T=d,E=u,O=m,k=p,j=_,ee=g)),w===0)return null;let N=S/w,P=C/w,F=1/w,te=T-N*D,ne=E-P*D,re=O-N*A,I=k-P*A,ie=j-N*M,ae=ee-P*M,oe=ie*I-ae*re,se=te*ae-ne*ie,ce=re*ne-I*te;if(r){if(oe<0||se<0||ce<0)return null}else if((oe<0||se<0||ce<0)&&(oe>0||se>0||ce>0))return null;let le=oe+se+ce;if(le===0)return null;let L=F*(oe*D+se*A+ce*M);return(le>0?L<0:L>0)?null:this.at(L/le,i)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}},r_=class extends Zg{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type=`MeshBasicMaterial`,this.color=new Yh(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new wh,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=`round`,this.wireframeLinejoin=`round`,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}},i_=new mh,a_=new n_,o_=new Lg,s_=new Q,c_=new Q,l_=new Q,u_=new Q,d_=new Q,f_=new Q,p_=new Q,m_=new Q,h_=class extends Vh{constructor(e=new Gg,t=new r_){super(),this.isMesh=!0,this.type=`Mesh`,this.geometry=e,this.material=t,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.count=1,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),e.morphTargetInfluences!==void 0&&(this.morphTargetInfluences=e.morphTargetInfluences.slice()),e.morphTargetDictionary!==void 0&&(this.morphTargetDictionary=Object.assign({},e.morphTargetDictionary)),this.material=Array.isArray(e.material)?e.material.slice():e.material,this.geometry=e.geometry,this}updateMorphTargets(){let e=this.geometry.morphAttributes,t=Object.keys(e);if(t.length>0){let n=e[t[0]];if(n!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;e<t;e++){let t=n[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[t]=e}}}}getVertexPosition(e,t){let n=this.geometry,r=n.attributes.position,i=n.morphAttributes.position,a=n.morphTargetsRelative;t.fromBufferAttribute(r,e);let o=this.morphTargetInfluences;if(i&&o){f_.set(0,0,0);for(let n=0,r=i.length;n<r;n++){let r=o[n],s=i[n];r!==0&&(d_.fromBufferAttribute(s,e),a?f_.addScaledVector(d_,r):f_.addScaledVector(d_.sub(t),r))}t.add(f_)}return t}intersectsFrustum(e){return e.intersectsObject(this)}raycast(e,t){let n=this.geometry,r=this.material,i=this.matrixWorld;r!==void 0&&(n.boundingSphere===null&&n.computeBoundingSphere(),o_.copy(n.boundingSphere),o_.applyMatrix4(i),a_.copy(e.ray).recast(e.near),!(o_.containsPoint(a_.origin)===!1&&(a_.intersectSphere(o_,s_)===null||a_.origin.distanceToSquared(s_)>(e.far-e.near)**2))&&(i_.copy(i).invert(),a_.copy(e.ray).applyMatrix4(i_),(n.boundingBox===null||a_.intersectsBox(n.boundingBox)!==!1)&&this._computeIntersections(e,t,a_)))}_computeIntersections(e,t,n){let r,i=this.geometry,a=this.material,o=i.index,s=i.attributes.position,c=i.attributes.uv,l=i.attributes.uv1,u=i.attributes.normal,d=i.groups,f=i.drawRange;if(o!==null){if(Array.isArray(a))for(let i=0,s=d.length;i<s;i++){let s=d[i],p=a[s.materialIndex],m=Math.max(s.start,f.start),h=Math.min(o.count,Math.min(s.start+s.count,f.start+f.count));for(let i=m,a=h;i<a;i+=3){let a=o.getX(i),d=o.getX(i+1),f=o.getX(i+2);r=__(this,p,e,n,c,l,u,a,d,f),r&&(r.faceIndex=Math.floor(i/3),r.face.materialIndex=s.materialIndex,t.push(r))}}else{let i=Math.max(0,f.start),s=Math.min(o.count,f.start+f.count);for(let d=i,f=s;d<f;d+=3){let i=o.getX(d),s=o.getX(d+1),f=o.getX(d+2);r=__(this,a,e,n,c,l,u,i,s,f),r&&(r.faceIndex=Math.floor(d/3),t.push(r))}}}else if(s!==void 0){if(Array.isArray(a))for(let i=0,o=d.length;i<o;i++){let o=d[i],p=a[o.materialIndex],m=Math.max(o.start,f.start),h=Math.min(s.count,Math.min(o.start+o.count,f.start+f.count));for(let i=m,a=h;i<a;i+=3){let a=i,s=i+1,d=i+2;r=__(this,p,e,n,c,l,u,a,s,d),r&&(r.faceIndex=Math.floor(i/3),r.face.materialIndex=o.materialIndex,t.push(r))}}else{let i=Math.max(0,f.start),o=Math.min(s.count,f.start+f.count);for(let s=i,d=o;s<d;s+=3){let i=s,o=s+1,d=s+2;r=__(this,a,e,n,c,l,u,i,o,d),r&&(r.faceIndex=Math.floor(s/3),t.push(r))}}}}};function g_(e,t,n,r,i,a,o,s){let c;if(c=t.side===1?r.intersectTriangle(o,a,i,!0,s):r.intersectTriangle(i,a,o,t.side===0,s),c===null)return null;m_.copy(s),m_.applyMatrix4(e.matrixWorld);let l=n.ray.origin.distanceTo(m_);return l<n.near||l>n.far?null:{distance:l,point:m_.clone(),object:e}}function __(e,t,n,r,i,a,o,s,c,l){e.getVertexPosition(s,c_),e.getVertexPosition(c,l_),e.getVertexPosition(l,u_);let u=g_(e,t,n,r,c_,l_,u_,p_);if(u){let e=new Q;dg.getBarycoord(p_,c_,l_,u_,e),i&&(u.uv=dg.getInterpolatedAttribute(i,s,c,l,e,new Um)),a&&(u.uv1=dg.getInterpolatedAttribute(a,s,c,l,e,new Um)),o&&(u.normal=dg.getInterpolatedAttribute(o,s,c,l,e,new Q),u.normal.dot(r.direction)>0&&u.normal.multiplyScalar(-1));let t={a:s,b:c,c:l,normal:new Q,materialIndex:0};dg.getNormal(c_,l_,u_,t.normal),u.face=t,u.barycoord=e}return u}var v_=class extends ch{constructor(e=null,t=1,n=1,r,i,a,o,s,c=Yf,l=Yf,u,d){super(null,a,o,s,c,l,r,i,u,d),this.isDataTexture=!0,this.image={data:e,width:t,height:n},this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}},y_=new Lg,b_=new Um(.5,.5),x_=new Q,S_=class{constructor(e=new Yg,t=new Yg,n=new Yg,r=new Yg,i=new Yg,a=new Yg){this.planes=[e,t,n,r,i,a]}set(e,t,n,r,i,a){let o=this.planes;return o[0].copy(e),o[1].copy(t),o[2].copy(n),o[3].copy(r),o[4].copy(i),o[5].copy(a),this}copy(e){let t=this.planes;for(let n=0;n<6;n++)t[n].copy(e.planes[n]);return this}setFromProjectionMatrix(e,t=bm,n=!1){let r=this.planes,i=e.elements,a=i[0],o=i[1],s=i[2],c=i[3],l=i[4],u=i[5],d=i[6],f=i[7],p=i[8],m=i[9],h=i[10],g=i[11],_=i[12],v=i[13],y=i[14],b=i[15];if(r[0].setComponents(c-a,f-l,g-p,b-_).normalize(),r[1].setComponents(c+a,f+l,g+p,b+_).normalize(),r[2].setComponents(c+o,f+u,g+m,b+v).normalize(),r[3].setComponents(c-o,f-u,g-m,b-v).normalize(),n)r[4].setComponents(s,d,h,y).normalize(),r[5].setComponents(c-s,f-d,g-h,b-y).normalize();else if(r[4].setComponents(c-s,f-d,g-h,b-y).normalize(),t===2e3)r[5].setComponents(c+s,f+d,g+h,b+y).normalize();else if(t===2001)r[5].setComponents(s,d,h,y).normalize();else throw Error(`THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: `+t);return this}intersectsObject(e){if(e.boundingSphere!==void 0)e.boundingSphere===null&&e.computeBoundingSphere(),y_.copy(e.boundingSphere).applyMatrix4(e.matrixWorld);else{let t=e.geometry;t.boundingSphere===null&&t.computeBoundingSphere(),y_.copy(t.boundingSphere).applyMatrix4(e.matrixWorld)}return this.intersectsSphere(y_)}intersectsSprite(e){return y_.center.set(0,0,0),y_.radius=.7071067811865476+b_.distanceTo(e.center),y_.applyMatrix4(e.matrixWorld),this.intersectsSphere(y_)}intersectsSphere(e){let t=this.planes,n=e.center,r=-e.radius;for(let e=0;e<6;e++)if(t[e].distanceToPoint(n)<r)return!1;return!0}intersectsBox(e){let t=this.planes;for(let n=0;n<6;n++){let r=t[n];if(x_.x=r.normal.x>0?e.max.x:e.min.x,x_.y=r.normal.y>0?e.max.y:e.min.y,x_.z=r.normal.z>0?e.max.z:e.min.z,r.distanceToPoint(x_)<0)return!1}return!0}containsPoint(e){let t=this.planes;for(let n=0;n<6;n++)if(t[n].distanceToPoint(e)<0)return!1;return!0}clone(){return new this.constructor().copy(this)}},C_=class extends Zg{constructor(e){super(),this.isPointsMaterial=!0,this.type=`PointsMaterial`,this.color=new Yh(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.alphaMap=e.alphaMap,this.size=e.size,this.sizeAttenuation=e.sizeAttenuation,this.fog=e.fog,this}},w_=new mh,T_=new n_,E_=new Lg,D_=new Q,O_=class extends Vh{constructor(e=new Gg,t=new C_){super(),this.isPoints=!0,this.type=`Points`,this.geometry=e,this.material=t,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),this.material=Array.isArray(e.material)?e.material.slice():e.material,this.geometry=e.geometry,this}intersectsFrustum(e){return e.intersectsObject(this)}raycast(e,t){let n=this.geometry,r=this.matrixWorld,i=e.params.Points.threshold,a=n.drawRange;if(n.boundingSphere===null&&n.computeBoundingSphere(),E_.copy(n.boundingSphere),E_.applyMatrix4(r),E_.radius+=i,e.ray.intersectsSphere(E_)===!1)return;w_.copy(r).invert(),T_.copy(e.ray).applyMatrix4(w_);let o=i/((this.scale.x+this.scale.y+this.scale.z)/3),s=o*o,c=n.index,l=n.attributes.position;if(c!==null){let n=Math.max(0,a.start),i=Math.min(c.count,a.start+a.count);for(let a=n,o=i;a<o;a++){let n=c.getX(a);D_.fromBufferAttribute(l,n),k_(D_,n,s,r,e,t,this)}}else{let n=Math.max(0,a.start),i=Math.min(l.count,a.start+a.count);for(let a=n,o=i;a<o;a++)D_.fromBufferAttribute(l,a),k_(D_,a,s,r,e,t,this)}}updateMorphTargets(){let e=this.geometry.morphAttributes,t=Object.keys(e);if(t.length>0){let n=e[t[0]];if(n!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;e<t;e++){let t=n[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[t]=e}}}}};function k_(e,t,n,r,i,a,o){let s=T_.distanceSqToPoint(e);if(s<n){let n=new Q;T_.closestPointToPoint(e,n),n.applyMatrix4(r);let c=i.ray.origin.distanceTo(n);if(c<i.near||c>i.far)return;a.push({distance:c,distanceToRay:Math.sqrt(s),point:n,index:t,face:null,faceIndex:null,barycoord:null,object:o})}}var A_=class extends ch{constructor(e=[],t=301,n,r,i,a,o,s,c,l){super(e,t,n,r,i,a,o,s,c,l),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(e){this.image=e}},j_=class extends ch{constructor(e,t,n=op,r,i,a,o=Yf,s=Yf,c,l=_p,u=1){if(l!==1026&&l!==1027)throw Error(`THREE.DepthTexture: format must be either THREE.DepthFormat or THREE.DepthStencilFormat`);super({width:e,height:t,depth:u},r,i,a,o,s,l,n,c),this.isDepthTexture=!0,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(e){return super.copy(e),this.source=new ih(Object.assign({},e.image)),this.compareFunction=e.compareFunction,this}toJSON(e){let t=super.toJSON(e);return t.compareFunction=this.compareFunction,t}},M_=class extends j_{constructor(e,t=op,n=301,r,i,a=Yf,o=Yf,s,c=_p){let l={width:e,height:e,depth:1},u=[l,l,l,l,l,l];super(e,e,t,n,r,i,a,o,s,c),this.image=u,this.isCubeDepthTexture=!0,this.isCubeTexture=!0}get images(){return this.image}set images(e){this.image=e}},N_=class extends ch{constructor(e=null){super(),this.sourceTexture=e,this.isExternalTexture=!0}copy(e){return super.copy(e),this.sourceTexture=e.sourceTexture,this}},P_=class e extends Gg{constructor(e=1,t=1,n=1,r=1,i=1,a=1){super(),this.type=`BoxGeometry`,this.parameters={width:e,height:t,depth:n,widthSegments:r,heightSegments:i,depthSegments:a};let o=this;r=Math.floor(r),i=Math.floor(i),a=Math.floor(a);let s=[],c=[],l=[],u=[],d=0,f=0;p(`z`,`y`,`x`,-1,-1,n,t,e,a,i,0),p(`z`,`y`,`x`,1,-1,n,t,-e,a,i,1),p(`x`,`z`,`y`,1,1,e,n,t,r,a,2),p(`x`,`z`,`y`,1,-1,e,n,-t,r,a,3),p(`x`,`y`,`z`,1,-1,e,t,n,r,i,4),p(`x`,`y`,`z`,-1,-1,e,t,-n,r,i,5),this.setIndex(s),this.setAttribute(`position`,new Ng(c,3)),this.setAttribute(`normal`,new Ng(l,3)),this.setAttribute(`uv`,new Ng(u,2));function p(e,t,n,r,i,a,p,m,h,g,_){let v=a/h,y=p/g,b=a/2,x=p/2,S=m/2,C=h+1,w=g+1,T=0,E=0,D=new Q;for(let a=0;a<w;a++){let o=a*y-x;for(let s=0;s<C;s++)D[e]=(s*v-b)*r,D[t]=o*i,D[n]=S,c.push(D.x,D.y,D.z),D[e]=0,D[t]=0,D[n]=m>0?1:-1,l.push(D.x,D.y,D.z),u.push(s/h),u.push(1-a/g),T+=1}for(let e=0;e<g;e++)for(let t=0;t<h;t++){let n=d+t+C*e,r=d+t+C*(e+1),i=d+(t+1)+C*(e+1),a=d+(t+1)+C*e;s.push(n,r,a),s.push(r,i,a),E+=6}o.addGroup(f,E,_),f+=E,d+=T}}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(t){return new e(t.width,t.height,t.depth,t.widthSegments,t.heightSegments,t.depthSegments)}},F_=class e extends Gg{constructor(e=1,t=1,n=1,r=1){super(),this.type=`PlaneGeometry`,this.parameters={width:e,height:t,widthSegments:n,heightSegments:r};let i=e/2,a=t/2,o=Math.floor(n),s=Math.floor(r),c=o+1,l=s+1,u=e/o,d=t/s,f=[],p=[],m=[],h=[];for(let e=0;e<l;e++){let t=e*d-a;for(let n=0;n<c;n++){let r=n*u-i;p.push(r,-t,0),m.push(0,0,1),h.push(n/o),h.push(1-e/s)}}for(let e=0;e<s;e++)for(let t=0;t<o;t++){let n=t+c*e,r=t+c*(e+1),i=t+1+c*(e+1),a=t+1+c*e;f.push(n,r,a),f.push(r,i,a)}this.setIndex(f),this.setAttribute(`position`,new Ng(p,3)),this.setAttribute(`normal`,new Ng(m,3)),this.setAttribute(`uv`,new Ng(h,2))}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(t){return new e(t.width,t.height,t.widthSegments,t.heightSegments)}};function I_(e){let t={};for(let n in e){t[n]={};for(let r in e[n]){let i=e[n][r];if(R_(i))i.isRenderTargetTexture?(Om(`UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms().`),t[n][r]=null):t[n][r]=i.clone();else if(Array.isArray(i)){if(R_(i[0])){let e=[];for(let t=0,n=i.length;t<n;t++)e[t]=i[t].clone();t[n][r]=e}else t[n][r]=i.slice()}else t[n][r]=i}}return t}function L_(e){let t={};for(let n=0;n<e.length;n++){let r=I_(e[n]);for(let e in r)t[e]=r[e]}return t}function R_(e){return e&&(e.isColor||e.isMatrix3||e.isMatrix4||e.isVector2||e.isVector3||e.isVector4||e.isTexture||e.isQuaternion)}function z_(e){let t=[];for(let n=0;n<e.length;n++)t.push(e[n].clone());return t}function B_(e){let t=e.getRenderTarget();return t===null?e.outputColorSpace:t.isXRRenderTarget===!0?t.texture.colorSpace:Qm.workingColorSpace}var V_={clone:I_,merge:L_},H_=`void main() {
69
69
  gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
@@ -4456,5 +4456,5 @@ ${this.parser.parse(e)}</blockquote>
4456
4456
  ${e}</tr>
4457
4457
  `}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?`th`:`td`;return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+`</${n}>
4458
4458
  `}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${ZE(e,!0)}</code>`}br(e){return`<br>`}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,text:n,tokens:r,autolink:i}){let a=i?ZE(n,!0):this.parser.parseInline(r),o=$E(e);if(o===null)return a;e=ZE(o,i);let s=`<a href="`+e+`"`;return t&&(s+=` title="`+ZE(t)+`"`),s+=`>`+a+`</a>`,s}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=$E(e);if(i===null)return ZE(n);e=i;let a=`<img src="${ZE(e)}" alt="${ZE(n)}"`;return t&&(a+=` title="${ZE(t)}"`),a+=`>`,a}text(e){return`tokens`in e&&e.tokens?this.parser.parseInline(e.tokens):`escaped`in e&&e.escaped?e.text:ZE(e.text)}},fD=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return``+e}image({text:e}){return``+e}br(){return``}checkbox({raw:e}){return e}},pD=class e{options;renderer;textRenderer;constructor(e){this.options=e||DT,this.options.renderer=this.options.renderer||new dD,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new fD}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e){this.renderer.parser=this;let t=``;for(let n=0;n<e.length;n++){let r=e[n];if(this.options.extensions?.renderers?.[r.type]){let e=r,n=this.options.extensions.renderers[e.type].call({parser:this},e);if(n!==!1||![`space`,`hr`,`heading`,`code`,`table`,`blockquote`,`list`,`checkbox`,`html`,`def`,`paragraph`,`text`].includes(e.type)){t+=n||``;continue}}let i=r;switch(i.type){case`space`:t+=this.renderer.space(i);break;case`hr`:t+=this.renderer.hr(i);break;case`heading`:t+=this.renderer.heading(i);break;case`code`:t+=this.renderer.code(i);break;case`table`:t+=this.renderer.table(i);break;case`blockquote`:t+=this.renderer.blockquote(i);break;case`list`:t+=this.renderer.list(i);break;case`checkbox`:t+=this.renderer.checkbox(i);break;case`html`:t+=this.renderer.html(i);break;case`def`:t+=this.renderer.def(i);break;case`paragraph`:t+=this.renderer.paragraph(i);break;case`text`:t+=this.renderer.text(i);break;default:{let e=`Token with "`+i.type+`" type was not found.`;if(this.options.silent)return console.error(e),``;throw Error(e)}}}return t}parseInline(e,t=this.renderer){this.renderer.parser=this;let n=``;for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let e=this.options.extensions.renderers[i.type].call({parser:this},i);if(e!==!1||![`escape`,`html`,`link`,`image`,`checkbox`,`strong`,`em`,`codespan`,`br`,`del`,`text`].includes(i.type)){n+=e||``;continue}}let a=i;switch(a.type){case`escape`:n+=t.text(a);break;case`html`:n+=t.html(a);break;case`link`:n+=t.link(a);break;case`image`:n+=t.image(a);break;case`checkbox`:n+=t.checkbox(a);break;case`strong`:n+=t.strong(a);break;case`em`:n+=t.em(a);break;case`codespan`:n+=t.codespan(a);break;case`br`:n+=t.br(a);break;case`del`:n+=t.del(a);break;case`text`:n+=t.text(a);break;default:{let e=`Token with "`+a.type+`" type was not found.`;if(this.options.silent)return console.error(e),``;throw Error(e)}}}return n}},mD=class{options;block;constructor(e){this.options=e||DT}static passThroughHooks=new Set([`preprocess`,`postprocess`,`processAllTokens`,`emStrongMask`]);static passThroughHooksRespectAsync=new Set([`preprocess`,`postprocess`,`processAllTokens`]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(e=this.block){return e?uD.lex:uD.lexInline}provideParser(e=this.block){return e?pD.parse:pD.parseInline}},hD=new class{defaults=ET();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=pD;Renderer=dD;TextRenderer=fD;Lexer=uD;Tokenizer=lD;Hooks=mD;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case`table`:{let e=r;for(let r of e.header)n=n.concat(this.walkTokens(r.tokens,t));for(let r of e.rows)for(let e of r)n=n.concat(this.walkTokens(e.tokens,t));break}case`list`:{let e=r;n=n.concat(this.walkTokens(e.items,t));break}default:{let e=r;this.defaults.extensions?.childTokens?.[e.type]?this.defaults.extensions.childTokens[e.type].forEach(r=>{let i=e[r].flat(1/0);n=n.concat(this.walkTokens(i,t))}):e.tokens&&(n=n.concat(this.walkTokens(e.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(e=>{let n={...e};if(n.async=this.defaults.async||n.async||!1,e.extensions&&(e.extensions.forEach(e=>{if(!e.name)throw Error(`extension name required`);if(`renderer`in e){let n=t.renderers[e.name];n?t.renderers[e.name]=function(...t){let r=e.renderer.apply(this,t);return r===!1&&(r=n.apply(this,t)),r}:t.renderers[e.name]=e.renderer}if(`tokenizer`in e){if(!e.level||e.level!==`block`&&e.level!==`inline`)throw Error(`extension level must be 'block' or 'inline'`);let n=t[e.level];n?n.unshift(e.tokenizer):t[e.level]=[e.tokenizer],e.start&&(e.level===`block`?t.startBlock?t.startBlock.push(e.start):t.startBlock=[e.start]:e.level===`inline`&&(t.startInline?t.startInline.push(e.start):t.startInline=[e.start]))}`childTokens`in e&&e.childTokens&&(t.childTokens[e.name]=e.childTokens)}),n.extensions=t),e.renderer){let t=this.defaults.renderer||new dD(this.defaults);for(let n in e.renderer){if(!(n in t))throw Error(`renderer '${n}' does not exist`);if([`options`,`parser`].includes(n))continue;let r=n,i=e.renderer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n||``}}n.renderer=t}if(e.tokenizer){let t=this.defaults.tokenizer||new lD(this.defaults);for(let n in e.tokenizer){if(!(n in t))throw Error(`tokenizer '${n}' does not exist`);if([`options`,`rules`,`lexer`].includes(n))continue;let r=n,i=e.tokenizer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.tokenizer=t}if(e.hooks){let t=this.defaults.hooks||new mD;for(let n in e.hooks){if(!(n in t))throw Error(`hook '${n}' does not exist`);if([`options`,`block`].includes(n))continue;let r=n,i=e.hooks[r],a=t[r];t[r]=mD.passThroughHooks.has(n)?e=>{if(this.defaults.async&&mD.passThroughHooksRespectAsync.has(n))return(async()=>{let n=await i.call(t,e);return a.call(t,n)})();let r=i.call(t,e);return a.call(t,r)}:(...e)=>{if(this.defaults.async)return(async()=>{let n=await i.apply(t,e);return n===!1&&(n=await a.apply(t,e)),n})();let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.hooks=t}if(e.walkTokens){let t=this.defaults.walkTokens,r=e.walkTokens;n.walkTokens=function(e){let n=[];return n.push(r.call(this,e)),t&&(n=n.concat(t.call(this,e))),n}}this.defaults={...this.defaults,...n}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return uD.lex(e,t??this.defaults)}parser(e,t){return pD.parse(e,t??this.defaults)}parseMarkdown(e){return(t,n)=>{let r={...n},i={...this.defaults,...r},a=this.onError(!!i.silent,!!i.async);if(this.defaults.async===!0&&r.async===!1)return a(Error(`marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.`));if(typeof t>`u`||t===null)return a(Error(`marked(): input parameter is undefined or null`));if(typeof t!=`string`)return a(Error(`marked(): input parameter is of type `+Object.prototype.toString.call(t)+`, string expected`));if(i.hooks&&(i.hooks.options=i,i.hooks.block=e),i.async)return(async()=>{let n=i.hooks?await i.hooks.preprocess(t):t,r=await(i.hooks?await i.hooks.provideLexer(e):e?uD.lex:uD.lexInline)(n,i),a=i.hooks?await i.hooks.processAllTokens(r):r;i.walkTokens&&await Promise.all(this.walkTokens(a,i.walkTokens));let o=await(i.hooks?await i.hooks.provideParser(e):e?pD.parse:pD.parseInline)(a,i);return i.hooks?await i.hooks.postprocess(o):o})().catch(a);try{i.hooks&&(t=i.hooks.preprocess(t));let n=(i.hooks?i.hooks.provideLexer(e):e?uD.lex:uD.lexInline)(t,i);i.hooks&&(n=i.hooks.processAllTokens(n)),i.walkTokens&&this.walkTokens(n,i.walkTokens);let r=(i.hooks?i.hooks.provideParser(e):e?pD.parse:pD.parseInline)(n,i);return i.hooks&&(r=i.hooks.postprocess(r)),r}catch(e){return a(e)}}}onError(e,t){return n=>{if(n.message+=`
4459
- Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error occurred:</p><pre>`+ZE(n.message+``,!0)+`</pre>`;return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}};function gD(e,t){return hD.parse(e,t)}gD.options=gD.setOptions=function(e){return hD.setOptions(e),gD.defaults=hD.defaults,OT(gD.defaults),gD},gD.getDefaults=ET,gD.defaults=DT;function _D(...e){return hD.use(...e),gD.defaults=hD.defaults,OT(gD.defaults),gD}gD.use=_D,gD.walkTokens=function(e,t){return hD.walkTokens(e,t)},gD.parseInline=hD.parseInline,gD.Parser=pD,gD.parser=pD.parse,gD.Renderer=dD,gD.TextRenderer=fD,gD.Lexer=uD,gD.lexer=uD.lex,gD.Tokenizer=lD,gD.Hooks=mD,gD.parse=gD,gD.options,gD.setOptions,gD.walkTokens,gD.parseInline,pD.parse,uD.lex;var vD=!1;function yD(){vD||(vD=!0,TT.addHook(`afterSanitizeAttributes`,e=>{e instanceof Element&&e.tagName===`A`&&(e.setAttribute(`rel`,`noopener noreferrer`),e.setAttribute(`target`,`_blank`))}))}function bD(e){yD();let t=gD.parse(e,{async:!1,breaks:!0});return TT.sanitize(t,{ALLOWED_TAGS:[`p`,`br`,`strong`,`em`,`code`,`pre`,`ul`,`ol`,`li`,`a`,`h1`,`h2`,`h3`,`h4`,`h5`,`h6`,`blockquote`,`hr`,`del`,`table`,`thead`,`tbody`,`tr`,`th`,`td`],ALLOWED_ATTR:[`href`,`rel`,`target`],ALLOWED_URI_REGEXP:/^(?:https?:|mailto:)/i})}var xD=e=>Number.isFinite(e);function SD(e){let t=Math.floor(Math.log10(e)),n=e/10**t;return(n<=1?1:n<=2?2:n<=2.5?2.5:n<=5?5:10)*10**t}function CD(e,t,n=5){let r=xD(e)?e:0,i=xD(t)?t:r+1;r>i&&([r,i]=[i,r]),r===i&&(i=r+(Math.abs(r)||1));let a=SD((i-r)/Math.max(1,n-1)),o=Math.floor(r/a)*a,s=Math.ceil(i/a)*a,c=[];for(let e=o;e<=s+a/2;e+=a)c.push(Math.round(e*1e9)/1e9);return{min:o,max:s,ticks:c}}function wD(e,t){let[n,r]=e,[i,a]=t;return r===n?()=>i:e=>i+(e-n)/(r-n)*(a-i)}function TD(e){return e.map(([e,t],n)=>`${n===0?`M`:`L`}${e.toFixed(2)} ${t.toFixed(2)}`).join(` `)}function ED(e,t,n,r,i){let a=r=>{let i=r*Math.PI/180;return`${(e+n*Math.cos(i)).toFixed(2)} ${(t+n*Math.sin(i)).toFixed(2)}`},o=+(Math.abs(i-r)>180);return`M ${a(r)} A ${n} ${n} 0 ${o} 1 ${a(i)}`}function DD(e,t,n){return!xD(e)||!xD(t)||!xD(n)||n<=t?0:Math.min(1,Math.max(0,(e-t)/(n-t)))*240}function OD(e,t,n,r){let i=t.x-e.x,a=t.y-e.y,o=Math.hypot(i,a);if(o===0||o<=n+r)return{from:{...e},to:{...t}};let s=i/o,c=a/o;return{from:{x:e.x+s*n,y:e.y+c*n},to:{x:t.x-s*r,y:t.y-c*r}}}function kD(e,t,n){if(e<=0)return[];if(e===1)return[{x:t/2,y:n/2}];let r=Math.min(t,n)*.36;return Array.from({length:e},(i,a)=>{let o=-Math.PI/2+a*2*Math.PI/e;return{x:t/2+r*Math.cos(o),y:n/2+r*Math.sin(o)}})}var AD=e=>typeof e==`object`&&!!e&&!Array.isArray(e),jD=e=>typeof e==`string`?e:typeof e==`number`?String(e):``,MD=e=>Array.isArray(e)?e:[],ND=e=>typeof e==`number`?Number.isFinite(e)?e:null:typeof e==`string`&&e.trim()!==``&&Number.isFinite(Number(e))?Number(e):null,PD=(e,t)=>e.length>t?e.slice(0,t)+`…`:e,FD=[`var(--accent)`,`#ffb454`,`#7b8cff`,`#5ef0b0`,`#ff6b7a`,`#c792ea`],ID=({text:e})=>e?(0,C.jsx)(`h3`,{className:`obj-title`,children:e}):null,LD=({text:e=`No data`})=>(0,C.jsx)(`p`,{className:`obj-empty`,children:e}),RD=400,zD=220,BD={l:44,r:12,t:10,b:28};function VD({props:e}){let t=e.kind===`bar`||e.kind===`area`?e.kind:`line`,n=MD(e.labels).slice(0,120).map(jD),r=MD(e.series).slice(0,6).map((e,t)=>{let n=AD(e)?e:{},r=MD(n.values).slice(0,120).map((e,t)=>({idx:t,v:ND(e)})).filter(e=>e.v!==null);return{name:jD(n.name)||`series ${t+1}`,points:r}}).filter(e=>e.points.length>0);if(r.length===0)return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(ID,{text:jD(e.title)}),(0,C.jsx)(LD,{})]});let i=r.flatMap(e=>e.points.map(e=>e.v)),a=Math.min(...i),o=Math.max(...i),s=CD(t===`line`?a:Math.min(0,a),t===`line`?o:Math.max(0,o),5),c=Math.max(n.length,...r.map(e=>e.points[e.points.length-1].idx+1),2),l=wD([s.min,s.max],[zD-BD.b,BD.t]),u=wD([0,c-1],[BD.l,RD-BD.r]),d=(RD-BD.l-BD.r)/c,f=Math.max(1,d*.7/r.length),p=(e,t)=>BD.l+e*d+d*.15+t*f,m=Math.max(1,Math.ceil(c/6)),h=jD(e.unit);return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(ID,{text:jD(e.title)}),(0,C.jsxs)(`svg`,{className:`obj-chart`,viewBox:`0 0 ${RD} ${zD}`,role:`img`,"aria-label":jD(e.title)||`chart`,children:[s.ticks.map(e=>(0,C.jsxs)(`g`,{children:[(0,C.jsx)(`line`,{className:`grid`,x1:BD.l,x2:RD-BD.r,y1:l(e),y2:l(e)}),(0,C.jsxs)(`text`,{className:`tick`,x:BD.l-6,y:l(e)+3,textAnchor:`end`,children:[e,h&&e===s.max?h:``]})]},e)),Array.from({length:c},(e,t)=>t).filter(e=>e%m===0&&n[e]).map(e=>(0,C.jsx)(`text`,{className:`tick`,x:t===`bar`?p(e,0)+f*r.length/2:u(e),y:212,textAnchor:`middle`,children:PD(n[e],8)},e)),r.map((e,n)=>{let r=FD[n%FD.length];if(t===`bar`)return(0,C.jsx)(`g`,{children:e.points.map(e=>(0,C.jsx)(`rect`,{className:`bar`,x:p(e.idx,n),y:Math.min(l(e.v),l(0)),width:f,height:Math.abs(l(e.v)-l(0)),fill:r},e.idx))},n);let i=e.points.map(e=>[u(e.idx),l(e.v)]),a=TD(i),o=`${a} L${i[i.length-1][0].toFixed(2)} ${l(s.min).toFixed(2)} L${i[0][0].toFixed(2)} ${l(s.min).toFixed(2)} Z`;return(0,C.jsxs)(`g`,{children:[t===`area`&&(0,C.jsx)(`path`,{className:`series-area`,d:o,fill:r,opacity:.18}),(0,C.jsx)(`path`,{className:`series-line`,d:a,fill:`none`,stroke:r,strokeWidth:2,strokeLinejoin:`round`})]},n)})]}),r.length>1&&(0,C.jsx)(`ul`,{className:`legend`,children:r.map((e,t)=>(0,C.jsxs)(`li`,{children:[(0,C.jsx)(`i`,{style:{background:FD[t%FD.length]}}),(0,C.jsx)(`span`,{children:e.name})]},t))})]})}function HD({props:e}){let t=ND(e.min)??0,n=ND(e.max)??100,r=ND(e.value)??t,i=DD(r,t,n),a=i/240;return(0,C.jsxs)(`div`,{className:`obj-gauge ${a>.95?`gauge-crit`:a>.8?`gauge-warn`:``}`,children:[(0,C.jsxs)(`svg`,{viewBox:`0 0 200 150`,role:`img`,"aria-label":`${jD(e.label)} ${r}`,children:[(0,C.jsx)(`path`,{className:`track`,d:ED(100,100,70,150,390),fill:`none`,strokeWidth:12,strokeLinecap:`round`}),i>0&&(0,C.jsx)(`path`,{className:`value`,d:ED(100,100,70,150,150+i),fill:`none`,strokeWidth:12,strokeLinecap:`round`})]}),(0,C.jsxs)(`div`,{className:`gauge-read`,children:[(0,C.jsx)(`span`,{className:`gauge-value`,children:String(Math.round(r*100)/100)}),jD(e.unit)&&(0,C.jsx)(`small`,{className:`gauge-unit`,children:jD(e.unit)})]}),(0,C.jsx)(`span`,{className:`obj-label`,children:jD(e.label)})]})}function UD({props:e}){let t=MD(e.items).slice(0,30).map(e=>AD(e)?e:{}).map(e=>({time:jD(e.time),title:jD(e.title),detail:jD(e.detail)})).filter(e=>e.title||e.time);return t.length===0?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(ID,{text:jD(e.title)}),(0,C.jsx)(LD,{text:`Nothing to show`})]}):(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(ID,{text:jD(e.title)}),(0,C.jsx)(`ol`,{className:`obj-timeline`,children:t.map((e,t)=>(0,C.jsxs)(`li`,{children:[(0,C.jsx)(`time`,{children:e.time}),(0,C.jsx)(`strong`,{children:e.title}),e.detail&&(0,C.jsx)(`span`,{children:e.detail})]},t))})]})}var WD=400,GD=300,KD=12;function qD({props:e}){let t=(0,v.useId)(),n=new Set,r=[];for(let t of MD(e.nodes)){let e=AD(t)?t:{},i=jD(e.id);if(i&&!n.has(i)&&(n.add(i),r.push({id:i,label:jD(e.label)||i}),r.length>=40))break}if(r.length===0)return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(ID,{text:jD(e.title)}),(0,C.jsx)(LD,{text:`Nothing to show`})]});let i=new Map(r.map((e,t)=>[e.id,kD(r.length,WD,GD)[t]])),a=[];for(let t of MD(e.edges)){let e=AD(t)?t:{},n=jD(e.from),r=jD(e.to);if(i.has(n)&&i.has(r)&&n!==r&&(a.push({from:n,to:r,label:jD(e.label)}),a.length>=80))break}return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(ID,{text:jD(e.title)}),(0,C.jsxs)(`svg`,{className:`obj-graph`,viewBox:`0 0 ${WD} ${GD}`,role:`img`,"aria-label":jD(e.title)||`graph`,children:[(0,C.jsx)(`defs`,{children:(0,C.jsx)(`marker`,{id:t,viewBox:`0 0 10 10`,refX:`9`,refY:`5`,markerWidth:`6`,markerHeight:`6`,orient:`auto-start-reverse`,children:(0,C.jsx)(`path`,{d:`M0 0 L10 5 L0 10 z`,className:`arrow`})})}),a.map((e,n)=>{let{from:r,to:a}=OD(i.get(e.from),i.get(e.to),14,17),o=(r.x+a.x)/2+(WD/2-(r.x+a.x)/2)*.25,s=(r.y+a.y)/2+(GD/2-(r.y+a.y)/2)*.25;return(0,C.jsxs)(`g`,{children:[(0,C.jsx)(`path`,{className:`edge`,d:`M ${r.x.toFixed(1)} ${r.y.toFixed(1)} Q ${o.toFixed(1)} ${s.toFixed(1)} ${a.x.toFixed(1)} ${a.y.toFixed(1)}`,fill:`none`,markerEnd:`url(#${t})`}),e.label&&(0,C.jsx)(`text`,{className:`edge-label`,x:o,y:s,textAnchor:`middle`,children:PD(e.label,12)})]},n)}),r.map(e=>{let t=i.get(e.id);return(0,C.jsxs)(`g`,{children:[(0,C.jsx)(`circle`,{className:`node`,cx:t.x,cy:t.y,r:KD}),(0,C.jsx)(`text`,{className:`node-label`,x:t.x,y:t.y+26,textAnchor:`middle`,children:PD(e.label,18)})]},e.id)})]})]})}var JD=30,YD=e=>Number.isFinite(e)?Math.max(0,Math.min(1,e)):1,XD=new class{current=1;goal=1;from=1;steps=1;n=0;timer=null;subs=new Set;get level(){return this.current}set(e,t=250){if(this.goal=YD(e),t<=0||this.goal===this.current){this.stop(),this.move(this.goal);return}this.from=this.current,this.steps=Math.max(1,Math.ceil(t/JD)),this.n=0,this.timer??=setInterval(()=>this.tick(),JD)}subscribe(e){return this.subs.add(e),()=>void this.subs.delete(e)}tick(){this.n++,this.n>=this.steps?(this.stop(),this.move(this.goal)):this.move(this.from+(this.goal-this.from)*this.n/this.steps)}stop(){this.timer&&clearInterval(this.timer),this.timer=null}move(e){if(e!==this.current){this.current=e;for(let t of[...this.subs])t(e)}}};function ZD(e,t=XD){let n=e.volume,r=e.volume,i=!0,a=t=>{i&&(r=YD(n*t),e.volume=r)},o=()=>{if(!i||Math.abs(e.volume-r)<=.002)return;let a=t.level;a>.001&&(n=YD(e.volume/a)),r=e.volume};e.addEventListener(`volumechange`,o);let s=t.subscribe(a);return a(t.level),()=>{i=!1,s(),e.removeEventListener(`volumechange`,o),e.volume=n}}var QD=`https://www.youtube-nocookie.com`;function $D(e,t=XD,n=window){let r=100,i=null,a=!1,o=!0,s=!1,c=t=>e.contentWindow?.postMessage(JSON.stringify(t),QD),l=()=>c({event:`listening`,id:1,channel:`widget`}),u=e=>{i=e,c({event:`command`,func:`setVolume`,args:[e]})},d=e=>{o&&(e<.999?(a=!0,u(Math.round(r*e))):a&&(a=!1,u(Math.round(r))))},f=n=>{if(!o||n.source!==e.contentWindow)return;let c;try{c=JSON.parse(String(n.data)).info}catch{return}if(typeof c?.volume!=`number`)return;s=!0;let l=c.volume;if(i!==null&&Math.abs(l-i)<=1)return;let u=t.level;r=a&&u>.001?l/u:l,i=l};n.addEventListener(`message`,f),e.addEventListener?.(`load`,l),l();let p=setInterval(()=>s?clearInterval(p):l(),1e3),m=t.subscribe(d);return d(t.level),()=>{o=!1,clearInterval(p),m(),n.removeEventListener(`message`,f),e.removeEventListener?.(`load`,l),a&&eO(e,r)}}function eO(e,t){try{e.contentWindow?.postMessage(JSON.stringify({event:`command`,func:`setVolume`,args:[Math.round(t)]}),QD)}catch{}}var tO=e=>typeof e==`string`?e:typeof e==`number`?String(e):``,nO=e=>Array.isArray(e)?e:[],rO=e=>typeof e==`object`&&e?e:{},iO=/^\/api\/media\/[0-9a-f]{32}$/,aO=e=>typeof e==`string`&&iO.test(e)?e:null,oO=/^\/api\/video\/[0-9a-f]{32}$/,sO=e=>typeof e==`string`&&oO.test(e)?e:null,cO=({props:e})=>tO(e.title)?(0,C.jsx)(`h3`,{className:`obj-title`,children:tO(e.title)}):null;function lO({props:e}){let t=(0,v.useMemo)(()=>bD(tO(e.text)),[e.text]);return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(cO,{props:e}),(0,C.jsx)(`div`,{className:`obj-md obj-doc`,dangerouslySetInnerHTML:{__html:t}})]})}function uO({props:e}){let t=Math.min(100,Math.max(0,Number(e.value)||0));return(0,C.jsxs)(`div`,{className:`obj-progress`,children:[(0,C.jsxs)(`div`,{className:`obj-progress-head`,children:[(0,C.jsx)(`span`,{className:`obj-label`,children:tO(e.label)}),(0,C.jsxs)(`span`,{className:`obj-progress-pct`,children:[Math.round(t),`%`]})]}),(0,C.jsx)(`div`,{className:`obj-progress-bar`,role:`progressbar`,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":Math.round(t),"aria-label":tO(e.label)||`Progress`,children:(0,C.jsx)(`i`,{style:{width:`${t}%`}})}),tO(e.detail)&&(0,C.jsx)(`span`,{className:`obj-progress-detail`,children:tO(e.detail)})]})}function dO({props:e}){let t=nO(e.items).map(e=>rO(typeof e==`object`&&e?e:{text:e})),n=t.filter(e=>e.done===!0).length;return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(cO,{props:e}),(0,C.jsx)(`ul`,{className:`obj-checklist`,children:t.map((e,t)=>(0,C.jsxs)(`li`,{className:e.done===!0?`done`:void 0,children:[(0,C.jsx)(`span`,{className:`box`,"aria-hidden":`true`,children:e.done===!0?`✓`:``}),(0,C.jsx)(`span`,{children:tO(e.text)})]},t))}),t.length>0&&(0,C.jsxs)(`small`,{className:`obj-progress-detail`,children:[n,` of `,t.length,` done`]})]})}function fO({props:e}){return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(cO,{props:e}),(0,C.jsx)(`dl`,{className:`obj-kv`,children:nO(e.rows).map((e,t)=>{let n=rO(e);return(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`dt`,{children:tO(n.key)}),(0,C.jsx)(`dd`,{children:tO(n.value)})]},t)})})]})}var pO=e=>String(Math.floor(e)).padStart(2,`0`);function mO(e){let t=Math.max(0,Math.ceil(e));return`${pO(t/3600)}:${pO(t%3600/60)}:${pO(t%60)}`}function hO({props:e}){let t=(0,v.useRef)(null);if(t.current===null){let n=typeof e.to==`string`?Date.parse(e.to):NaN,r=Number(e.seconds);t.current=Number.isFinite(n)?n:Date.now()+(Number.isFinite(r)?r:0)*1e3}let[n,r]=(0,v.useState)(Date.now());(0,v.useEffect)(()=>{let e=setInterval(()=>r(Date.now()),250);return()=>clearInterval(e)},[]);let i=(t.current-n)/1e3;return(0,C.jsxs)(`div`,{className:`obj-countdown${i<=0?` done`:``}`,children:[(0,C.jsx)(`span`,{className:`obj-label`,children:tO(e.title)||tO(e.label)}),(0,C.jsx)(`span`,{className:`obj-countdown-time`,role:`timer`,children:mO(i)})]})}function gO({props:e}){let t=aO(e.src);return(0,C.jsxs)(`div`,{className:`obj-media`,children:[(0,C.jsx)(cO,{props:e}),t?(0,C.jsx)(`img`,{src:t,alt:tO(e.title)||`Picture`,loading:`lazy`}):(0,C.jsx)(`p`,{className:`obj-empty`,children:`This picture is not available.`})]})}function _O({src:e,web:t,title:n}){let[r,i]=(0,v.useState)(t?`loading`:`ready`),a=(0,v.useRef)(null);return(0,v.useEffect)(()=>a.current?ZD(a.current):void 0,[r===`failed`]),r===`failed`?(0,C.jsx)(`p`,{className:`obj-empty`,children:`This video could not be played. Ask Friend to try again, or to play it in a window on the PC.`}):(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`video`,{ref:a,src:e,controls:!0,playsInline:!0,autoPlay:t,preload:t?`auto`:`metadata`,"aria-label":n,onLoadedData:()=>i(`ready`),onError:()=>i(`failed`)}),t&&r===`loading`&&(0,C.jsx)(`p`,{className:`obj-empty`,children:`Preparing the video…`})]})}var vO=/^[A-Za-z0-9_-]{11}$/;function yO({id:e,start:t,title:n}){let[r,i]=(0,v.useState)(!1),a=(0,v.useRef)(null);(0,v.useEffect)(()=>a.current?$D(a.current):void 0,[e]);let o=new URLSearchParams({autoplay:`1`,rel:`0`,playsinline:`1`,modestbranding:`1`,enablejsapi:`1`});return t>0&&o.set(`start`,String(t)),(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`iframe`,{ref:a,className:`obj-youtube`,src:`https://www.youtube-nocookie.com/embed/${e}?${o.toString()}`,title:n,allow:`autoplay; encrypted-media; fullscreen; picture-in-picture`,allowFullScreen:!0,referrerPolicy:`strict-origin-when-cross-origin`,onLoad:()=>i(!0)}),!r&&(0,C.jsx)(`p`,{className:`obj-empty`,children:`Loading the player…`})]})}function bO({props:e}){if(e.embed!==void 0){let t=typeof e.embed==`string`&&vO.test(e.embed)?e.embed:null,n=typeof e.start==`number`&&e.start>0&&e.start<=86400?Math.floor(e.start):0;return(0,C.jsxs)(`div`,{className:`obj-media obj-media-fill`,children:[(0,C.jsx)(cO,{props:e}),t?(0,C.jsx)(yO,{id:t,start:n,title:tO(e.title)||`YouTube video`},`${t}-${n}`):(0,C.jsx)(`p`,{className:`obj-empty`,children:`This clip is not available.`})]})}let t=sO(e.src),n=t??aO(e.src);return(0,C.jsxs)(`div`,{className:`obj-media`,children:[(0,C.jsx)(cO,{props:e}),n?(0,C.jsx)(_O,{src:n,web:t!==null,title:tO(e.title)||`Video`},n):(0,C.jsx)(`p`,{className:`obj-empty`,children:`This clip is not available.`})]})}function xO({props:e}){let t=aO(e.src);return(0,C.jsxs)(`div`,{className:`obj-media obj-pdf`,children:[(0,C.jsx)(cO,{props:e}),t?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`iframe`,{src:t,title:tO(e.title)||`Document`}),(0,C.jsx)(`a`,{className:`obj-open`,href:t,target:`_blank`,rel:`noopener noreferrer`,children:`Open in a new tab`})]}):(0,C.jsx)(`p`,{className:`obj-empty`,children:`This document is not available.`})]})}function SO({props:e}){let t=nO(e.items).map(rO).filter(e=>aO(e.src)),[n,r]=(0,v.useState)(0),i=Math.min(n,Math.max(0,t.length-1)),a=t[i];if(!a)return(0,C.jsx)(`p`,{className:`obj-empty`,children:`Nothing to show.`});let o=aO(a.src),s=a.kind===`video`;return(0,C.jsxs)(`div`,{className:`obj-media obj-gallery`,children:[(0,C.jsx)(cO,{props:e}),s?(0,C.jsx)(`video`,{src:o,controls:!0,playsInline:!0,preload:`metadata`},o):(0,C.jsx)(`img`,{src:o,alt:tO(a.caption)||`Picture ${i+1}`},o),(0,C.jsxs)(`div`,{className:`obj-gallery-bar`,children:[(0,C.jsx)(`button`,{type:`button`,"aria-label":`Previous`,disabled:t.length<2,onClick:()=>r((i+t.length-1)%t.length),children:`‹`}),(0,C.jsxs)(`span`,{children:[tO(a.caption),(0,C.jsxs)(`small`,{children:[i+1,` / `,t.length]})]}),(0,C.jsx)(`button`,{type:`button`,"aria-label":`Next`,disabled:t.length<2,onClick:()=>r((i+1)%t.length),children:`›`})]})]})}var CO=[`default-src 'none'`,`script-src 'unsafe-inline'`,`style-src 'unsafe-inline'`,`img-src data: blob:`,`form-action 'none'`,`base-uri 'none'`].join(`; `),wO=`html,body{margin:0;min-height:100%;background:#050b10;color:var(--ink,#d8f6ff);font:15px/1.5 var(--ui,system-ui,sans-serif)}`,TO=[`--accent`,`--ink`,`--muted`,`--ok`,`--warn`,`--bad`,`--glass`,`--edge`,`--ui`,`--mono`],EO=/^[\w\s#().,%'"/-]+$/;function DO(){if(typeof document>`u`)return``;let e=getComputedStyle(document.documentElement),t=TO.map(t=>[t,e.getPropertyValue(t).trim()]).filter(([,e])=>e&&EO.test(e));return t.length?`:root{${t.map(([e,t])=>`${e}:${t}`).join(`;`)}}`:``}function OO(e,t=``){return`<!doctype html><html><head><meta charset="utf-8"><meta http-equiv="Content-Security-Policy" content="${CO}"><meta name="viewport" content="width=device-width,initial-scale=1"><style>${t}${wO}</style></head><body>${e}</body></html>`}function kO({props:e}){let t=typeof e.html==`string`?e.html:``,n=typeof e.title==`string`?e.title:``,r=(0,v.useMemo)(()=>OO(t,DO()),[t]);return(0,C.jsxs)(`div`,{className:`obj-sandbox`,children:[n&&(0,C.jsx)(`h3`,{className:`obj-title`,children:n}),(0,C.jsx)(`iframe`,{title:n||`Page made by Friend`,sandbox:`allow-scripts`,referrerPolicy:`no-referrer`,allow:``,srcDoc:r})]})}var AO=`modulepreload`,jO=function(e){return`/`+e},MO={},NO=function(e){return e.pathname.endsWith(`.css`)},PO=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e,i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?new URL(import.meta.resolve(e)):new URL(e,import.meta.url)}r=o(t.map(t=>{t=jO(t,n);let r=s(t);if(r.href in MO)return;MO[r.href]=!0;let i=NO(r);if(e===void 0){e={all:new Set,styles:new Set};let t=document.getElementsByTagName(`link`);for(let n=t.length-1;n>=0;n--){let r=t[n];e.all.add(r.href),r.rel===`stylesheet`&&e.styles.add(r.href)}}if((i?e.styles:e.all).has(r.href))return;let o=document.createElement(`link`);if(o.rel=i?`stylesheet`:AO,i||(o.as=`script`),o.crossOrigin=``,o.href=r.href,a&&o.setAttribute(`nonce`,a),document.head.appendChild(o),i)return new Promise((e,t)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>t(Error(`Unable to preload CSS for ${r}`)))})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},FO=(0,v.lazy)(()=>PO(()=>import(`./jarvisTree-OK31Zc78.js`),__vite__mapDeps([0,1,2])));function IO({type:e,props:t}){let n=_u(e,t);return n?(0,C.jsx)(`p`,{className:`obj-empty`,children:n}):(0,C.jsx)(`div`,{className:`obj-jarvis`,children:(0,C.jsx)(v.Suspense,{fallback:(0,C.jsx)(`p`,{className:`obj-empty`,children:`Loading…`}),children:(0,C.jsx)(FO,{node:pu(e,t)})})})}var LO=e=>typeof e==`string`?e:typeof e==`number`?String(e):``,RO=e=>Array.isArray(e)?e:[];function zO({props:e}){let t=(0,v.useMemo)(()=>bD(LO(e.text)),[e.text]);return(0,C.jsxs)(C.Fragment,{children:[LO(e.title)&&(0,C.jsx)(`h3`,{className:`obj-title`,children:LO(e.title)}),(0,C.jsx)(`div`,{className:`obj-md`,dangerouslySetInnerHTML:{__html:t}})]})}function BO({props:e}){return(0,C.jsxs)(`div`,{className:`obj-stat`,children:[(0,C.jsx)(`span`,{className:`obj-label`,children:LO(e.label)}),(0,C.jsxs)(`span`,{className:`obj-value`,children:[(0,C.jsx)(`span`,{children:LO(e.value)}),LO(e.unit)&&(0,C.jsx)(`small`,{children:LO(e.unit)})]}),LO(e.delta)&&(0,C.jsx)(`span`,{className:`obj-delta`,children:LO(e.delta)})]})}function VO({props:e}){return(0,C.jsxs)(C.Fragment,{children:[LO(e.title)&&(0,C.jsx)(`h3`,{className:`obj-title`,children:LO(e.title)}),(0,C.jsx)(`ul`,{className:`obj-list`,children:RO(e.items).map((e,t)=>{let n=typeof e==`object`&&e?e:{text:e};return(0,C.jsx)(`li`,{className:n.done?`done`:void 0,children:LO(n.text)},t)})})]})}function HO({props:e}){let t=RO(e.columns),n=RO(e.rows);return(0,C.jsxs)(C.Fragment,{children:[LO(e.title)&&(0,C.jsx)(`h3`,{className:`obj-title`,children:LO(e.title)}),(0,C.jsx)(`div`,{className:`obj-table-wrap`,children:(0,C.jsxs)(`table`,{className:`obj-table`,children:[(0,C.jsx)(`thead`,{children:(0,C.jsx)(`tr`,{children:t.map((e,t)=>(0,C.jsx)(`th`,{children:LO(e)},t))})}),(0,C.jsx)(`tbody`,{children:n.map((e,t)=>(0,C.jsx)(`tr`,{children:RO(e).map((e,t)=>(0,C.jsx)(`td`,{children:LO(e)},t))},t))})]})})]})}function UO({props:e}){return(0,C.jsxs)(C.Fragment,{children:[LO(e.title)&&(0,C.jsx)(`h3`,{className:`obj-title`,children:LO(e.title)}),(0,C.jsx)(`pre`,{className:`obj-code`,"data-lang":LO(e.language),children:(0,C.jsx)(`code`,{children:LO(e.code)})})]})}function WO({part:e}){let t=typeof e==`object`&&e?e:{},n=typeof t.type==`string`?t.type:``;if(n===`group`||n===`tabs`||n===`sandbox`)return null;let r=YO[n];return r?(0,C.jsx)(`div`,{className:`obj-part obj-part-${n}`,children:(0,C.jsx)(r,{props:typeof t.props==`object`&&t.props!==null?t.props:{}})}):null}function GO({props:e}){let t=e.layout===`row`||e.layout===`column`?e.layout:`grid`;return(0,C.jsxs)(C.Fragment,{children:[LO(e.title)&&(0,C.jsx)(`h3`,{className:`obj-title`,children:LO(e.title)}),(0,C.jsx)(`div`,{className:`obj-group obj-group-${t}`,children:RO(e.items).map((e,t)=>(0,C.jsx)(WO,{part:e},t))})]})}function KO({props:e}){let t=RO(e.tabs).map(e=>typeof e==`object`&&e?e:{}),[n,r]=(0,v.useState)(0),i=Math.min(n,Math.max(0,t.length-1));return(0,C.jsxs)(C.Fragment,{children:[LO(e.title)&&(0,C.jsx)(`h3`,{className:`obj-title`,children:LO(e.title)}),(0,C.jsx)(`div`,{className:`obj-tabs`,role:`tablist`,children:t.map((e,t)=>(0,C.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":t===i,className:t===i?`on`:void 0,onClick:()=>r(t),children:LO(e.title)||`Tab ${t+1}`},t))}),t[i]&&(0,C.jsx)(WO,{part:t[i]})]})}var qO={card:zO,stat:BO,list:VO,table:HO,code:UO,chart:VD,gauge:HD,timeline:UD,graph:qD,sandbox:kO,markdown:lO,image:gO,video:bO,pdf:xO,gallery:SO,group:GO,tabs:KO,progress:uO,checklist:dO,countdown:hO,kv:fO},JO=Object.fromEntries(du.map(e=>[e,({props:t})=>(0,C.jsx)(IO,{type:e,props:t})])),YO={...qO,...JO};function XO(e,t){let n=new Map(t.map(e=>[e.id,e])),r=[],i=new Set;for(let t of e){if(i.has(t.object.id))continue;i.add(t.object.id);let e=n.get(t.object.id);r.push(e?{object:e,leaving:!1}:{object:t.object,leaving:!0})}for(let e of t)i.has(e.id)||(i.add(e.id),r.push({object:e,leaving:!1}));return r}function ZO(e,t){let[n,r]=(0,v.useState)(()=>e.map(e=>({object:e,leaving:!1}))),i=(0,v.useRef)(new Map);return(0,v.useEffect)(()=>{r(n=>{let a=XO(n,e),o=new Set(n.filter(e=>e.leaving).map(e=>e.object.id));for(let e of a){let n=i.current.get(e.object.id);if(!e.leaving)n&&clearTimeout(n),i.current.delete(e.object.id);else if(!o.has(e.object.id)&&!n){let n=e.object.id;i.current.set(n,setTimeout(()=>{i.current.delete(n),r(e=>e.filter(e=>!(e.object.id===n&&e.leaving)))},Math.max(t,0)))}}return t<=0?a.filter(e=>!e.leaving):a})},[e,t]),(0,v.useEffect)(()=>()=>{for(let e of i.current.values())clearTimeout(e);i.current.clear()},[]),n}var QO=.12,$O=.1,ek=.02,tk=(e,t,n)=>Math.min(Math.max(e,t),n);function nk(e){let t=tk(e.w,QO,1),n=tk(e.h,$O,1);return{x:tk(e.x,0,1-t),y:tk(e.y,0,1-n),w:t,h:n}}function rk(e,t){let n=t.getBoundingClientRect(),r=e.getBoundingClientRect();return n.width<=0||n.height<=0?null:nk({x:(r.left-n.left)/n.width,y:(r.top-n.top)/n.height,w:r.width/n.width,h:r.height/n.height})}function ik(e,t,n){let r=(0,v.useRef)(null),[i,a]=(0,v.useState)(null),o=(0,v.useCallback)((n,r)=>{let i=nk(r);t({type:`object.place`,id:n,placement:{x:i.x,y:i.y,w:i.w,h:i.h}}),e({type:`stage.move`,objectId:n,rect:i})},[e,t]),s=(0,v.useCallback)((e,t,i)=>{if(e.pointerType===`mouse`&&e.button!==0)return;let o=n(),s=e.currentTarget.closest(`[data-object]`);if(!o||!s||r.current)return;let c=rk(s,o);if(!c)return;let l=o.getBoundingClientRect();r.current={id:t.id,mode:i,pointer:e.pointerId,startX:e.clientX,startY:e.clientY,from:c,stageW:l.width,stageH:l.height};try{e.currentTarget.setPointerCapture(e.pointerId)}catch{}e.stopPropagation(),e.preventDefault(),a({id:t.id,box:c})},[n]),c=(e,t)=>{let n=(t.clientX-e.startX)/e.stageW,r=(t.clientY-e.startY)/e.stageH;return e.mode===`move`?nk({...e.from,x:e.from.x+n,y:e.from.y+r}):nk({...e.from,w:e.from.w+n,h:e.from.h+r})};return{preview:i,begin:s,move:(0,v.useCallback)(e=>{let t=r.current;t&&t.pointer===e.pointerId&&a({id:t.id,box:c(t,e)})},[]),end:(0,v.useCallback)((e,t)=>{let n=r.current;n&&n.pointer===e.pointerId&&(r.current=null,a(null),t||o(n.id,c(n,e)))},[o]),key:(0,v.useCallback)((e,t)=>{let r={ArrowLeft:[-.02,0],ArrowRight:[ek,0],ArrowUp:[0,-.02],ArrowDown:[0,ek]}[e.key],i=n(),a=e.currentTarget.closest(`[data-object]`);if(!r||!i||!a)return;let s=rk(a,i);s&&(e.preventDefault(),o(t.id,e.shiftKey?{...s,w:s.w+r[0],h:s.h+r[1]}:{...s,x:s.x+r[0],y:s.y+r[1]}))},[o,n])}}function ak(e,t){if(e===`auto`)return{position:`relative`};if(t.w<600)return{position:`relative`,width:`100%`};let[n,r,i,a]=typeof e==`string`?Ou[e]:[e.x*100,e.y*100,e.w*100,e.h*100],o={position:`absolute`,left:`${n}%`,top:`${r}%`,width:`${i}%`};return e===`top`||e===`bottom`?{...o,maxHeight:`${a}%`}:{...o,height:`${a}%`}}var ok=350,sk=()=>typeof matchMedia==`function`&&matchMedia(`(prefers-reduced-motion: reduce)`).matches,ck=class extends v.Component{state={failed:!1};static getDerivedStateFromError(){return{failed:!0}}render(){return this.state.failed?null:this.props.children}};function lk(){let e=()=>({w:window.innerWidth,h:window.innerHeight}),[t,n]=(0,v.useState)(e);return(0,v.useEffect)(()=>{let t=()=>n(e());return window.addEventListener(`resize`,t),()=>window.removeEventListener(`resize`,t)},[]),t}var uk=350;function dk({state:e,send:t,dispatch:n,voice:r,slash:i,onMenu:a,hudLayer:o}){let s=lk(),[c,l]=(0,v.useState)(0),[u,d]=(0,v.useState)(!1),f=fe(),p=s.w<600,m=e.scene===`focus`||e.scene===`multi`,h=o&&qC(s.w,s.h)===`orbit`?(()=>{let t=VC(s.w,s.h),n=HC(`centre`,552,828,s.w,s.h);return{name:e.assistantName||`friend`,style:{left:n.x,top:n.y,width:378*t,height:36*t,"--ob-s":t}}})():void 0,g={"--accent":e.mood.accent,"--intensity":e.mood.intensity},_=e.voice.mode,y=_===`listening`?`listening`:_===`speaking`?`speaking`:_===`transcribing`?`thinking`:e.presence.state,b=yS(e.look.reactivity),x=Math.min(1,(_===`listening`||_===`speaking`?e.voice.level:e.presence.amplitude)*b),S=(0,v.useRef)({timer:null,down:!1,talking:!1,id:null}),w=e=>{if(!(e.target===e.currentTarget||e.target.closest(`[data-presence]`))||e.pointerType===`mouse`&&e.button!==0)return;let t=S.current;if(!(t.down&&t.id!==null&&e.pointerId!==t.id)){t.timer&&clearTimeout(t.timer),t.down=!0,t.talking=!1,t.id=typeof e.pointerId==`number`?e.pointerId:null;try{t.id!==null&&e.currentTarget.setPointerCapture?.(t.id)}catch{}t.timer=r?setTimeout(()=>{t.down&&(t.talking=!0,r.pressStart())},uk):null}},T=(e,t)=>{let n=S.current;n.down&&(n.id===null||typeof e.pointerId!=`number`||e.pointerId===n.id)&&(n.down=!1,n.id=null,n.timer&&clearTimeout(n.timer),n.timer=null,n.talking?(n.talking=!1,t?r?.blur?.():r?.pressEnd()):t||l(e=>e+1))},E=(0,v.useRef)(null),D=ik(t,n,()=>E.current),O=ZO(e.objects,sk()?0:ok),k=O.filter(e=>e.object.layer===`overlay`),A=O.filter(e=>e.object.layer!==`overlay`&&e.object.placement===`auto`),j=O.filter(e=>e.object.layer!==`overlay`&&e.object.placement!==`auto`),ee=({object:e,leaving:r})=>{let i=YO[e.type];if(!i)return null;let a=e.layer===`overlay`,o=!p&&!r&&!a,c=D.preview?.id===e.id?D.preview.box:null,l=c?{x:c.x,y:c.y,w:c.w,h:c.h}:e.placement;return(0,C.jsxs)(`section`,{"data-object":e.id,className:`obj glass${fu(e.type)?` obj-bare`:``}${e.style===`alert`?` alert`:``}${a?` overlay`:``}${e.pinned?` pinned`:``}${c?` dragging`:``}${r?` leaving`:``}`,style:a?void 0:ak(l,s),children:[o&&(0,C.jsx)(`div`,{className:`obj-grip`,role:`button`,tabIndex:0,"aria-label":`Move ${e.id}. Drag, or use the arrow keys; hold Shift to resize.`,...fu(e.type)?{"data-label":typeof e.props.title==`string`&&e.props.title.trim()?e.props.title.trim().slice(0,40):e.id}:{},onPointerDown:t=>D.begin(t,e,`move`),onPointerMove:D.move,onPointerUp:e=>D.end(e,!1),onPointerCancel:e=>D.end(e,!0),onKeyDown:t=>D.key(t,e)}),!a&&(0,C.jsx)(`button`,{className:`obj-pin${e.pinned?` on`:``}`,"aria-label":e.pinned?`Unpin ${e.id}`:`Pin ${e.id} to the screen`,"aria-pressed":!!e.pinned,title:e.pinned?`Pinned: stays on the screen. Click to unpin.`:`Pin: keep this on the screen.`,disabled:r,onClick:()=>t({type:`stage.pin`,objectId:e.id,pinned:!e.pinned}),children:(0,C.jsx)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:e.pinned?`currentColor`:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:(0,C.jsx)(`path`,{d:`M12 17v5M9 3h6l-1 7 3 3H7l3-3-1-7z`})})}),(0,C.jsx)(`button`,{className:`obj-close`,"aria-label":`Dismiss ${e.id}`,title:e.pinned?`Remove this widget`:`Dismiss`,disabled:r,onClick:()=>{t({type:`stage.event`,objectId:e.id,event:`dismiss`}),n({type:`object.dismiss`,id:e.id})},children:`×`}),o&&(0,C.jsx)(`div`,{className:`obj-resize`,"aria-hidden":`true`,onPointerDown:t=>D.begin(t,e,`resize`),onPointerMove:D.move,onPointerUp:e=>D.end(e,!1),onPointerCancel:e=>D.end(e,!0)}),(0,C.jsx)(ck,{children:(0,C.jsx)(i,{props:e.props})})]},e.id)};return(0,C.jsxs)(`div`,{ref:E,"data-testid":`stage`,className:`stage`,style:g,onPointerDown:w,onPointerUp:e=>T(e,!1),onPointerCancel:e=>T(e,!0),onContextMenu:e=>r&&e.preventDefault(),children:[e.look.ambient&&(0,C.jsx)(`div`,{className:`ambient`,"aria-hidden":`true`,style:{opacity:.35+.65*e.mood.intensity}}),(0,C.jsx)(vS,{state:y,amplitude:x,pulse:e.presence.pulse,mode:m&&!o?`corner`:`full`,accent:e.mood.accent,style:e.presence.style,intensity:e.mood.intensity,scale:e.look.size}),o,(0,C.jsxs)(`div`,{className:p?`objects objects-stack`:`objects`,style:{zIndex:10},children:[A.length>0&&(0,C.jsx)(`div`,{className:`auto-grid`,children:A.map(ee)}),j.map(ee)]}),k.length>0&&(0,C.jsxs)(`div`,{className:`overlay-layer`,"data-testid":`overlay`,children:[(0,C.jsx)(`div`,{className:`overlay-backdrop`,onClick:()=>k.forEach(({object:e})=>{t({type:`stage.event`,objectId:e.id,event:`dismiss`}),n({type:`object.dismiss`,id:e.id})})}),k.map(ee)]}),e.look.captions&&e.captions&&(0,C.jsx)(`p`,{className:`captions captions-${e.look.captionSize}${e.captionDone?` done`:``}`,"aria-live":`polite`,children:e.captions}),f&&r&&!u&&(0,C.jsx)(XC,{voice:r,mode:_,onType:()=>l(e=>e+1),onMenu:()=>a?.()}),(0,C.jsx)(FC,{requestOpen:c,slash:i,onOpenChange:d,onSend:e=>t({type:`chat.send`,text:e}),...h?{hud:h}:{}})]})}function fk(){let e=()=>Math.random().toString(36).slice(2,12)+Date.now().toString(36);try{let t=sessionStorage.getItem(`friend.tab`);return t||(t=e(),sessionStorage.setItem(`friend.tab`,t)),t}catch{return e()}}function pk(){return`${location.protocol===`https:`?`wss`:`ws`}://${location.host}/ws`}function mk(e=pk()){let t=null,n=`connecting`,r=!1,i=0,a=!1,o=fk(),s=null,c=new Set,l=new Set,u=e=>{n=e,l.forEach(t=>t(e))};function d(){if(r)return;u(`connecting`);let n=new WebSocket(`${e}${e.includes(`?`)?`&`:`?`}tab=${o}${a?`&takeover=1`:``}`);t=n,n.onopen=()=>{i=0,a=!1,u(`open`)},n.onmessage=e=>{try{let t=JSON.parse(String(e.data));c.forEach(e=>e(t))}catch{}},n.onclose=e=>{if(!r){if(e.code===4401)return u(`unauthorized`);if(e.code===4409||e.code===4410)return u(`elsewhere`);u(`closed`),s=setTimeout(d,Math.min(500*2**i++,8e3))}},n.onerror=()=>{}}return d(),{send(e){t?.readyState===WebSocket.OPEN&&t.send(JSON.stringify(e))},onMessage(e){return c.add(e),()=>c.delete(e)},onState(e){return l.add(e),()=>l.delete(e)},state:()=>n,takeOver(){r||n!==`elsewhere`||(a=!0,i=0,d())},close(){r=!0,s&&clearTimeout(s),t?.close()}}}var hk={scene:`conversation`,objects:[],widgets:[],captions:``,captionDone:!0,presence:{state:`idle`,style:`sphere`,amplitude:0,pulse:0},mood:{accent:`#3fd8ff`,intensity:.6},approval:null,alerts:[],connection:`connecting`,chat:[],chatLive:!1,view:`companion`,look:{size:1,reactivity:.7,ambient:!0,captions:!0,captionSize:`medium`},viewKnown:!1,busy:!1,activity:null,deviceOnline:!1,voice:{mode:`idle`,level:0,available:!1,enrolled:!1},challenge:null,camera:{enabled:!1,stream:null},speaker:null,ownerName:``,assistantName:``,hud:null,music:null,hostMusic:null,musicCmd:null,uiOpen:null,stats:null,office:{enabled:!1,workers:[],tickets:[],quota:{fiveHour:null,sevenDay:null},feed:{}}},gk=200,_k=e=>e.length>gk?e.slice(-200):e,vk=0,yk=e=>Math.min(1,Math.max(0,e));function bk(e,t){switch(t.cmd){case`scene`:return{...e,scene:t.mode};case`show`:{let n=e.objects.findIndex(e=>e.id===t.object.id),r=n===-1?[...e.objects,t.object]:e.objects.map((e,r)=>r===n?t.object:e);return{...e,objects:r}}case`update`:return{...e,objects:e.objects.map(e=>e.id===t.id?{...e,props:{...e.props,...t.props}}:e)};case`hide`:return{...e,objects:e.objects.filter(e=>e.id!==t.id)};case`clear`:return{...e,objects:e.objects.filter(e=>e.pinned),widgets:t.keepInstruments?e.widgets:[],scene:`conversation`};case`widget`:{let n=t.reset?[]:e.widgets.filter(e=>!(t.hide??[]).includes(e));return{...e,widgets:[...n,...(t.show??[]).filter(e=>!n.includes(e))]}}case`pin`:return{...e,objects:e.objects.map(e=>e.id===t.id?{...e,pinned:!0}:e)};case`unpin`:return{...e,objects:e.objects.map(e=>e.id===t.id?(({pinned:e,...t})=>t)(e):e)};case`place`:return{...e,objects:e.objects.map(e=>e.id===t.id?{...e,placement:t.placement}:e)};case`presence`:return{...e,presence:{...e.presence,state:t.state??e.presence.state,style:t.style??e.presence.style}};case`mood`:return{...e,mood:{accent:t.accent??e.mood.accent,intensity:t.intensity??e.mood.intensity}}}}function xk(e,t){let n=t;if(n&&typeof n==`object`){if(n.type===`conn`)return{...e,connection:n.value};if(n.type===`chat.seed`){let t=Array.isArray(n.lines)?n.lines:[];return e.chat.length===0?{...e,chat:_k(t)}:{...e,chat:_k([...t,...e.chat])}}if(n.type===`alert.add`)return{...e,alerts:[...e.alerts.slice(-3),{id:++vk,level:n.level,text:n.text}]};if(n.type===`camera.enable`)return{...e,camera:{enabled:n.value,stream:n.value?e.camera.stream:null}};if(n.type===`camera.open`)return{...e,camera:{...e.camera,stream:n.stream}};if(n.type===`camera.closed`)return{...e,camera:{...e.camera,stream:null}};if(n.type===`challenge.dismiss`)return e.challenge?.id===n.id?{...e,challenge:null}:e;if(n.type===`voice.mode`)return{...e,voice:{...e.voice,mode:n.mode,level:n.mode===`idle`?0:e.voice.level}};if(n.type===`voice.level`){let t=Number.isFinite(n.level)?Math.min(1,Math.max(0,n.level)):0;return{...e,voice:{...e.voice,level:t}}}if(n.type===`object.dismiss`)return{...e,objects:e.objects.filter(e=>e.id!==n.id)};if(n.type===`object.place`)return{...e,objects:e.objects.map(e=>e.id===n.id?{...e,placement:n.placement}:e)};if(n.type===`alert.dismiss`)return{...e,alerts:e.alerts.filter(e=>e.id!==n.id)}}let r=gd.safeParse(t);if(!r.success)return e;let i=r.data;switch(i.type){case`snapshot`:return{...e,scene:i.stage.scene,objects:i.stage.objects,widgets:i.stage.widgets??[],presence:{...e.presence,state:i.stage.presence.state,style:i.stage.presence.style},mood:i.stage.mood,approval:i.pendingApproval??null};case`stage`:return bk(e,i.command);case`chat.user`:return{...e,chat:_k([...e.chat,{role:`user`,text:i.text}]),chatLive:!1};case`ui.open`:return{...e,uiOpen:{n:(e.uiOpen?.n??0)+1,...i.integration?{integration:i.integration}:{}}};case`ui`:return{...e,view:i.view,look:i.look??e.look,ownerName:i.ownerName??e.ownerName,assistantName:i.assistantName??e.assistantName,hud:i.hud??e.hud,music:i.music??e.music,viewKnown:!0};case`music.host`:return{...e,hostMusic:i.state};case`music.command`:{let{type:t,...n}=i;return{...e,musicCmd:{n:(e.musicCmd?.n??0)+1,command:n}}}case`caption.delta`:{let t=e.captionDone,n=e.chat.at(-1),r=e.chatLive&&n?.role===`assistant`?[...e.chat.slice(0,-1),{role:`assistant`,text:n.text+i.text}]:_k([...e.chat,{role:`assistant`,text:i.text}]);return{...e,chat:r,chatLive:!0,captions:(t?``:e.captions)+i.text,captionDone:!1,presence:{...e.presence,amplitude:yk(.3+i.text.length*.04),pulse:e.presence.pulse+1}}}case`caption.end`:return{...e,chatLive:!1,captionDone:!0,presence:{...e.presence,amplitude:0}};case`approval.request`:{let{type:t,...n}=i;return{...e,approval:n}}case`approval.resolved`:return e.approval?.id===i.id?{...e,approval:null}:e;case`alert`:return{...e,alerts:[...e.alerts.slice(-3),{id:++vk,level:i.level,text:i.text}]};case`activity`:return{...e,activity:i.text};case`office.state`:{let t={};for(let n of i.workers)e.office.feed[n.id]&&(t[n.id]=e.office.feed[n.id]);return{...e,office:{enabled:i.enabled,workers:i.workers,tickets:i.tickets,quota:i.quota,feed:t}}}case`office.feed`:{if(!e.office.workers.some(e=>e.id===i.workerId))return e;let t={at:i.at,kind:i.kind,text:i.text},n=[...e.office.feed[i.workerId]??[],t].slice(-60);return{...e,office:{...e.office,feed:{...e.office.feed,[i.workerId]:n}}}}case`hud.stats`:return{...e,stats:{cpu:i.cpu,ramUsed:i.ramUsed,ramTotal:i.ramTotal,netDown:i.netDown,netUp:i.netUp,at:Date.now()}};case`status`:return{...e,busy:i.busy,activity:i.busy?e.activity:null,deviceOnline:i.deviceOnline,voice:{...e.voice,available:i.voiceAvailable??e.voice.available,enrolled:i.voiceEnrolled??e.voice.enrolled}};case`error`:return{...e,alerts:[...e.alerts.slice(-3),{id:++vk,level:`error`,text:i.message}]};case`voice.heard`:return{...e,captions:i.trust===`guest`?`Guest: ${i.text}`:i.trust===`member`&&i.speaker?`${i.speaker}: ${i.text}`:i.text,captionDone:!0,speaker:{name:i.trust===`member`?i.speaker??null:null,trust:i.trust??`unverified`,seq:(e.speaker?.seq??0)+1}};case`voice.challenge`:return{...e,challenge:{id:i.id,text:i.text}};case`voice.challenge.end`:return e.challenge?.id===i.id?{...e,challenge:null}:e;case`audio.chunk`:case`audio.stop`:case`audio.duck`:return e;case`camera.request`:case`camera.cancel`:case`screen.request`:case`screen.cancel`:case`screen.check`:return e}}var Sk=1024,Ck=.8,wk=300;function Tk(e,t){let n=Math.min(1,Sk/Math.max(e,t));return{width:Math.round(e*n),height:Math.round(t*n)}}function Ek(e){let t=e?.name;return t===`NotAllowedError`||t===`SecurityError`?`permission`:t===`NotFoundError`||t===`OverconstrainedError`?`no-camera`:`busy`}async function Dk(){if(!navigator.mediaDevices?.getUserMedia)throw Object.assign(Error(`This browser cannot use the camera here (use localhost or HTTPS).`),{name:`NotFoundError`});return navigator.mediaDevices.getUserMedia({video:{width:{ideal:1280}},audio:!1})}async function Ok(e,t=wk){let n=document.createElement(`video`);n.muted=!0,n.playsInline=!0,n.srcObject=e,await n.play(),await new Promise(e=>setTimeout(e,t));let{width:r,height:i}=Tk(n.videoWidth||640,n.videoHeight||480),a=document.createElement(`canvas`);return a.width=r,a.height=i,a.getContext(`2d`).drawImage(n,0,0,r,i),n.srcObject=null,new Promise((e,t)=>a.toBlob(n=>n?e(n):t(Error(`Could not encode the picture.`)),`image/jpeg`,Ck))}var kk=class{opts;active=null;constructor(e){this.opts=e}async handle(e){if(e.type===`camera.cancel`){let t=this.active;t&&t.id===e.id&&(t.cancelled=!0,this.release(t));return}if(!this.opts.enabled())return this.opts.send({type:`camera.denied`,id:e.id,reason:`off`});if(this.active)return this.opts.send({type:`camera.denied`,id:e.id,reason:`busy`});let t={id:e.id,cancelled:!1,stream:null,opened:!1,released:!1};this.active=t;try{let n=await(this.opts.open??Dk)();if(t.stream=n,t.cancelled){n.getTracks().forEach(e=>e.stop());return}t.opened=!0,this.opts.dispatch({type:`camera.open`,stream:n});let r=await(this.opts.frame??(e=>Ok(e)))(n);if(t.cancelled)return;this.release(t);try{await this.opts.upload(e.id,r)}catch{this.opts.dispatch({type:`alert.add`,level:`warn`,text:`Could not send the camera picture to Friend.`})}}catch(n){t.cancelled||this.opts.send({type:`camera.denied`,id:e.id,reason:Ek(n)})}finally{this.release(t),this.active===t&&(this.active=null)}}dispose(){let e=this.active;e&&(e.cancelled=!0,this.release(e))}release(e){e.released||(e.released=!0,e.stream?.getTracks().forEach(e=>e.stop()),e.opened&&this.opts.dispatch({type:`camera.closed`}))}};function Ak(e,t){if(e.match(/^[a-z]+:\/\//i))return e;if(e.match(/^\/\//))return window.location.protocol+e;if(e.match(/^[a-z]+:/i))return e;let n=document.implementation.createHTMLDocument(),r=n.createElement(`base`),i=n.createElement(`a`);return n.head.appendChild(r),n.body.appendChild(i),t&&(r.href=t),i.href=e,i.href}var jk=(()=>{let e=0,t=()=>`0000${(Math.random()*36**4<<0).toString(36)}`.slice(-4);return()=>(e+=1,`u${t()}${e}`)})();function Mk(e){let t=[];for(let n=0,r=e.length;n<r;n++)t.push(e[n]);return t}var Nk=null;function Pk(e={}){return Nk||(e.includeStyleProperties?(Nk=e.includeStyleProperties,Nk):(Nk=Mk(window.getComputedStyle(document.documentElement)),Nk))}function Fk(e,t){let n=(e.ownerDocument.defaultView||window).getComputedStyle(e).getPropertyValue(t);return n?parseFloat(n.replace(`px`,``)):0}function Ik(e){let t=Fk(e,`border-left-width`),n=Fk(e,`border-right-width`);return e.clientWidth+t+n}function Lk(e){let t=Fk(e,`border-top-width`),n=Fk(e,`border-bottom-width`);return e.clientHeight+t+n}function Rk(e,t={}){return{width:t.width||Ik(e),height:t.height||Lk(e)}}function zk(){let e,t;try{t=process}catch{}let n=t&&t.env?t.env.devicePixelRatio:null;return n&&(e=parseInt(n,10),Number.isNaN(e)&&(e=1)),e||window.devicePixelRatio||1}var Bk=16384;function Vk(e){(e.width>Bk||e.height>Bk)&&(e.width>Bk&&e.height>Bk?e.width>e.height?(e.height*=Bk/e.width,e.width=Bk):(e.width*=Bk/e.height,e.height=Bk):e.width>Bk?(e.height*=Bk/e.width,e.width=Bk):(e.width*=Bk/e.height,e.height=Bk))}function Hk(e){return new Promise((t,n)=>{let r=new Image;r.onload=()=>{r.decode().then(()=>{requestAnimationFrame(()=>t(r))})},r.onerror=n,r.crossOrigin=`anonymous`,r.decoding=`async`,r.src=e})}async function Uk(e){return Promise.resolve().then(()=>new XMLSerializer().serializeToString(e)).then(encodeURIComponent).then(e=>`data:image/svg+xml;charset=utf-8,${e}`)}async function Wk(e,t,n){let r=`http://www.w3.org/2000/svg`,i=document.createElementNS(r,`svg`),a=document.createElementNS(r,`foreignObject`);return i.setAttribute(`width`,`${t}`),i.setAttribute(`height`,`${n}`),i.setAttribute(`viewBox`,`0 0 ${t} ${n}`),a.setAttribute(`width`,`100%`),a.setAttribute(`height`,`100%`),a.setAttribute(`x`,`0`),a.setAttribute(`y`,`0`),a.setAttribute(`externalResourcesRequired`,`true`),i.appendChild(a),a.appendChild(e),Uk(i)}var Gk=(e,t)=>{if(e instanceof t)return!0;let n=Object.getPrototypeOf(e);return n===null?!1:n.constructor.name===t.name||Gk(n,t)};function Kk(e){let t=e.getPropertyValue(`content`);return`${e.cssText} content: '${t.replace(/'|"/g,``)}';`}function qk(e,t){return Pk(t).map(t=>`${t}: ${e.getPropertyValue(t)}${e.getPropertyPriority(t)?` !important`:``};`).join(` `)}function Jk(e,t,n,r){let i=`.${e}:${t}`,a=n.cssText?Kk(n):qk(n,r);return document.createTextNode(`${i}{${a}}`)}function Yk(e,t,n,r){let i=window.getComputedStyle(e,n),a=i.getPropertyValue(`content`);if(a===``||a===`none`)return;let o=jk();try{t.className=`${t.className} ${o}`}catch{return}let s=document.createElement(`style`);s.appendChild(Jk(o,n,i,r)),t.appendChild(s)}function Xk(e,t,n){Yk(e,t,`:before`,n),Yk(e,t,`:after`,n)}var Zk=`application/font-woff`,Qk=`image/jpeg`,$k={woff:Zk,woff2:Zk,ttf:`application/font-truetype`,eot:`application/vnd.ms-fontobject`,png:`image/png`,jpg:Qk,jpeg:Qk,gif:`image/gif`,tiff:`image/tiff`,svg:`image/svg+xml`,webp:`image/webp`};function eA(e){let t=/\.([^./]*?)$/g.exec(e);return t?t[1]:``}function tA(e){return $k[eA(e).toLowerCase()]||``}function nA(e){return e.split(/,/)[1]}function rA(e){return e.search(/^(data:)/)!==-1}function iA(e,t){return`data:${t};base64,${e}`}async function aA(e,t,n){let r=await fetch(e,t);if(r.status===404)throw Error(`Resource "${r.url}" not found`);let i=await r.blob();return new Promise((e,t)=>{let a=new FileReader;a.onerror=t,a.onloadend=()=>{try{e(n({res:r,result:a.result}))}catch(e){t(e)}},a.readAsDataURL(i)})}var oA={};function sA(e,t,n){let r=e.replace(/\?.*/,``);return n&&(r=e),/ttf|otf|eot|woff2?/i.test(r)&&(r=r.replace(/.*\//,``)),t?`[${t}]${r}`:r}async function cA(e,t,n){let r=sA(e,t,n.includeQueryParams);if(oA[r]!=null)return oA[r];n.cacheBust&&(e+=(/\?/.test(e)?`&`:`?`)+new Date().getTime());let i;try{i=iA(await aA(e,n.fetchRequestInit,({res:e,result:n})=>(t||=e.headers.get(`Content-Type`)||``,nA(n))),t)}catch(t){i=n.imagePlaceholder||``;let r=`Failed to fetch resource: ${e}`;t&&(r=typeof t==`string`?t:t.message),r&&console.warn(r)}return oA[r]=i,i}async function lA(e){let t=e.toDataURL();return t===`data:,`?e.cloneNode(!1):Hk(t)}async function uA(e,t){if(e.currentSrc){let t=document.createElement(`canvas`),n=t.getContext(`2d`);return t.width=e.clientWidth,t.height=e.clientHeight,n?.drawImage(e,0,0,t.width,t.height),Hk(t.toDataURL())}let n=e.poster;return Hk(await cA(n,tA(n),t))}async function dA(e,t){try{if(e?.contentDocument?.body)return await xA(e.contentDocument.body,t,!0)}catch{}return e.cloneNode(!1)}async function fA(e,t){return Gk(e,HTMLCanvasElement)?lA(e):Gk(e,HTMLVideoElement)?uA(e,t):Gk(e,HTMLIFrameElement)?dA(e,t):e.cloneNode(mA(e))}var pA=e=>e.tagName!=null&&e.tagName.toUpperCase()===`SLOT`,mA=e=>e.tagName!=null&&e.tagName.toUpperCase()===`SVG`;async function hA(e,t,n){if(mA(t))return t;let r=[];return r=pA(e)&&e.assignedNodes?Mk(e.assignedNodes()):Gk(e,HTMLIFrameElement)&&e.contentDocument?.body?Mk(e.contentDocument.body.childNodes):Mk((e.shadowRoot??e).childNodes),r.length===0||Gk(e,HTMLVideoElement)||await r.reduce((e,r)=>e.then(()=>xA(r,n)).then(e=>{e&&t.appendChild(e)}),Promise.resolve()),t}function gA(e,t,n){let r=t.style;if(!r)return;let i=window.getComputedStyle(e);i.cssText?(r.cssText=i.cssText,r.transformOrigin=i.transformOrigin):Pk(n).forEach(n=>{let a=i.getPropertyValue(n);n===`font-size`&&a.endsWith(`px`)&&(a=`${Math.floor(parseFloat(a.substring(0,a.length-2)))-.1}px`),Gk(e,HTMLIFrameElement)&&n===`display`&&a===`inline`&&(a=`block`),n===`d`&&t.getAttribute(`d`)&&(a=`path(${t.getAttribute(`d`)})`),r.setProperty(n,a,i.getPropertyPriority(n))})}function _A(e,t){Gk(e,HTMLTextAreaElement)&&(t.innerHTML=e.value),Gk(e,HTMLInputElement)&&t.setAttribute(`value`,e.value)}function vA(e,t){if(Gk(e,HTMLSelectElement)){let n=t,r=Array.from(n.children).find(t=>e.value===t.getAttribute(`value`));r&&r.setAttribute(`selected`,``)}}function yA(e,t,n){return Gk(t,Element)&&(gA(e,t,n),Xk(e,t,n),_A(e,t),vA(e,t)),t}async function bA(e,t){let n=e.querySelectorAll?e.querySelectorAll(`use`):[];if(n.length===0)return e;let r={};for(let i=0;i<n.length;i++){let a=n[i].getAttribute(`xlink:href`);if(a){let n=e.querySelector(a),i=document.querySelector(a);!n&&i&&!r[a]&&(r[a]=await xA(i,t,!0))}}let i=Object.values(r);if(i.length){let t=`http://www.w3.org/1999/xhtml`,n=document.createElementNS(t,`svg`);n.setAttribute(`xmlns`,t),n.style.position=`absolute`,n.style.width=`0`,n.style.height=`0`,n.style.overflow=`hidden`,n.style.display=`none`;let r=document.createElementNS(t,`defs`);n.appendChild(r);for(let e=0;e<i.length;e++)r.appendChild(i[e]);e.appendChild(n)}return e}async function xA(e,t,n){return!n&&t.filter&&!t.filter(e)?null:Promise.resolve(e).then(e=>fA(e,t)).then(n=>hA(e,n,t)).then(n=>yA(e,n,t)).then(e=>bA(e,t))}var SA=/url\((['"]?)([^'"]+?)\1\)/g,CA=/url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g,wA=/src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;function TA(e){let t=e.replace(/([.*+?^${}()|\[\]\/\\])/g,`\\$1`);return RegExp(`(url\\(['"]?)(${t})(['"]?\\))`,`g`)}function EA(e){let t=[];return e.replace(SA,(e,n,r)=>(t.push(r),e)),t.filter(e=>!rA(e))}async function DA(e,t,n,r,i){try{let a=n?Ak(t,n):t,o=tA(t),s;return s=i?iA(await i(a),o):await cA(a,o,r),e.replace(TA(t),`$1${s}$3`)}catch{}return e}function OA(e,{preferredFontFormat:t}){return t?e.replace(wA,e=>{for(;;){let[n,,r]=CA.exec(e)||[];if(!r)return``;if(r===t)return`src: ${n};`}}):e}function kA(e){return e.search(SA)!==-1}async function AA(e,t,n){if(!kA(e))return e;let r=OA(e,n);return EA(r).reduce((e,r)=>e.then(e=>DA(e,r,t,n)),Promise.resolve(r))}async function jA(e,t,n){let r=t.style?.getPropertyValue(e);if(r){let i=await AA(r,null,n);return t.style.setProperty(e,i,t.style.getPropertyPriority(e)),!0}return!1}async function MA(e,t){await jA(`background`,e,t)||await jA(`background-image`,e,t),await jA(`mask`,e,t)||await jA(`-webkit-mask`,e,t)||await jA(`mask-image`,e,t)||await jA(`-webkit-mask-image`,e,t)}async function NA(e,t){let n=Gk(e,HTMLImageElement);if((!n||rA(e.src))&&(!Gk(e,SVGImageElement)||rA(e.href.baseVal)))return;let r=n?e.src:e.href.baseVal,i=await cA(r,tA(r),t);await new Promise((r,a)=>{e.onload=r,e.onerror=t.onImageErrorHandler?(...e)=>{try{r(t.onImageErrorHandler(...e))}catch(e){a(e)}}:a;let o=e;o.decode&&=r,o.loading===`lazy`&&(o.loading=`eager`),n?(e.srcset=``,e.src=i):e.href.baseVal=i})}async function PA(e,t){let n=Mk(e.childNodes).map(e=>FA(e,t));await Promise.all(n).then(()=>e)}async function FA(e,t){Gk(e,Element)&&(await MA(e,t),await NA(e,t),await PA(e,t))}function IA(e,t){let{style:n}=e;t.backgroundColor&&(n.backgroundColor=t.backgroundColor),t.width&&(n.width=`${t.width}px`),t.height&&(n.height=`${t.height}px`);let r=t.style;return r!=null&&Object.keys(r).forEach(e=>{n[e]=r[e]}),e}var LA={};async function RA(e){let t=LA[e];return t??(t={url:e,cssText:await(await fetch(e)).text()},LA[e]=t,t)}async function zA(e,t){let n=e.cssText,r=/url\(["']?([^"')]+)["']?\)/g,i=(n.match(/url\([^)]+\)/g)||[]).map(async i=>{let a=i.replace(r,`$1`);return a.startsWith(`https://`)||(a=new URL(a,e.url).href),aA(a,t.fetchRequestInit,({result:e})=>(n=n.replace(i,`url(${e})`),[i,e]))});return Promise.all(i).then(()=>n)}function BA(e){if(e==null)return[];let t=[],n=e.replace(/(\/\*[\s\S]*?\*\/)/gi,``),r=RegExp(`((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})`,`gi`);for(;;){let e=r.exec(n);if(e===null)break;t.push(e[0])}n=n.replace(r,``);let i=/@import[\s\S]*?url\([^)]*\)[\s\S]*?;/gi,a=RegExp(`((\\s*?(?:\\/\\*[\\s\\S]*?\\*\\/)?\\s*?@media[\\s\\S]*?){([\\s\\S]*?)}\\s*?})|(([\\s\\S]*?){([\\s\\S]*?)})`,`gi`);for(;;){let e=i.exec(n);if(e===null){if(e=a.exec(n),e===null)break;i.lastIndex=a.lastIndex}else a.lastIndex=i.lastIndex;t.push(e[0])}return t}async function VA(e,t){let n=[],r=[];return e.forEach(n=>{if(`cssRules`in n)try{Mk(n.cssRules||[]).forEach((e,i)=>{if(e.type===CSSRule.IMPORT_RULE){let a=i+1,o=e.href,s=RA(o).then(e=>zA(e,t)).then(e=>BA(e).forEach(e=>{try{n.insertRule(e,e.startsWith(`@import`)?a+=1:n.cssRules.length)}catch(t){console.error(`Error inserting rule from remote css`,{rule:e,error:t})}})).catch(e=>{console.error(`Error loading remote css`,e.toString())});r.push(s)}})}catch(i){let a=e.find(e=>e.href==null)||document.styleSheets[0];n.href!=null&&r.push(RA(n.href).then(e=>zA(e,t)).then(e=>BA(e).forEach(e=>{a.insertRule(e,a.cssRules.length)})).catch(e=>{console.error(`Error loading remote stylesheet`,e)})),console.error(`Error inlining remote css file`,i)}}),Promise.all(r).then(()=>(e.forEach(e=>{if(`cssRules`in e)try{Mk(e.cssRules||[]).forEach(e=>{n.push(e)})}catch(t){console.error(`Error while reading CSS rules from ${e.href}`,t)}}),n))}function HA(e){return e.filter(e=>e.type===CSSRule.FONT_FACE_RULE).filter(e=>kA(e.style.getPropertyValue(`src`)))}async function UA(e,t){if(e.ownerDocument==null)throw Error(`Provided element is not within a Document`);return HA(await VA(Mk(e.ownerDocument.styleSheets),t))}function WA(e){return e.trim().replace(/["']/g,``)}function GA(e){let t=new Set;function n(e){(e.style.fontFamily||getComputedStyle(e).fontFamily).split(`,`).forEach(e=>{t.add(WA(e))}),Array.from(e.children).forEach(e=>{e instanceof HTMLElement&&n(e)})}return n(e),t}async function KA(e,t){let n=await UA(e,t),r=GA(e);return(await Promise.all(n.filter(e=>r.has(WA(e.style.fontFamily))).map(e=>{let n=e.parentStyleSheet?e.parentStyleSheet.href:null;return AA(e.cssText,n,t)}))).join(`
4460
- `)}async function qA(e,t){let n=t.fontEmbedCSS==null?t.skipFonts?null:await KA(e,t):t.fontEmbedCSS;if(n){let t=document.createElement(`style`),r=document.createTextNode(n);t.appendChild(r),e.firstChild?e.insertBefore(t,e.firstChild):e.appendChild(t)}}async function JA(e,t={}){let{width:n,height:r}=Rk(e,t),i=await xA(e,t,!0);return await qA(i,t),await FA(i,t),IA(i,t),await Wk(i,n,r)}async function YA(e,t={}){let{width:n,height:r}=Rk(e,t),i=await Hk(await JA(e,t)),a=document.createElement(`canvas`),o=a.getContext(`2d`),s=t.pixelRatio||zk(),c=t.canvasWidth||n,l=t.canvasHeight||r;return a.width=c*s,a.height=l*s,t.skipAutoScale||Vk(a),a.style.width=`${c}`,a.style.height=`${l}`,t.backgroundColor&&(o.fillStyle=t.backgroundColor,o.fillRect(0,0,a.width,a.height)),o.drawImage(i,0,0,a.width,a.height),a}var XA=1600,ZA=.85;function QA(e,t){let n=Math.min(1,XA/Math.max(e,t,1));return{width:Math.max(1,Math.round(e*n)),height:Math.max(1,Math.round(t*n))}}async function $A(){let e=document.documentElement.getBoundingClientRect(),t=await YA(document.body,{width:Math.round(e.width),height:Math.round(e.height),pixelRatio:1,backgroundColor:`#050b10`,filter:e=>!(e instanceof HTMLElement&&e.dataset.noCapture!==void 0)}),n=QA(t.width,t.height),r=document.createElement(`canvas`);return r.width=n.width,r.height=n.height,r.getContext(`2d`).drawImage(t,0,0,n.width,n.height),new Promise((e,t)=>r.toBlob(n=>n?e(n):t(Error(`Could not encode the picture.`)),`image/jpeg`,ZA))}var ej=class{opts;active=null;constructor(e){this.opts=e}async handle(e){if(e.type===`screen.cancel`){this.active&&this.active.id===e.id&&(this.active.cancelled=!0);return}if(this.active)return this.opts.send({type:`screen.denied`,id:e.id,reason:`busy`});let t={id:e.id,cancelled:!1};this.active=t;try{let n=await(this.opts.capture??$A)();if(t.cancelled)return;try{await this.opts.upload(e.id,n)}catch{this.opts.dispatch({type:`alert.add`,level:`warn`,text:`Could not send the picture of the screen to Friend.`})}}catch(n){t.cancelled||this.opts.send({type:`screen.denied`,id:e.id,reason:tj(n)})}finally{this.active===t&&(this.active=null)}}dispose(){this.active&&(this.active.cancelled=!0)}};function tj(e){return e?.name===`NotSupportedError`?`unsupported`:`failed`}var nj=12,rj=e=>e.length>200?`${e.slice(0,199)}…`:e,ij=.2,aj=4,oj=(e,t)=>{let n=Math.min(e.x+e.w,t.x+t.w)-Math.max(e.x,t.x),r=Math.min(e.y+e.h,t.y+t.h)-Math.max(e.y,t.y);return n<=0||r<=0?0:n*r/Math.max(1,Math.min(e.w*e.h,t.w*t.h))};function sj(e){if(e.objects.length===0)return[`No objects are on the screen.`];let t=[],n=e=>Math.round(e);for(let r of e.objects){r.drawn||t.push(`${r.id}: nothing is drawn in it (an empty box). Hide it, or check its props.`),(r.scrollH-r.h>aj||r.scrollW-r.w>aj)&&t.push(`${r.id}: its content is cut off: it needs about ${n(Math.max(r.scrollW,r.w))}x${n(Math.max(r.scrollH,r.h))} px and the box is ${n(r.w)}x${n(r.h)} px. Make the box bigger or the content smaller.`);let i=Math.max(0,-r.x,-r.y,r.x+r.w-e.view.w,r.y+r.h-e.view.h);i>aj&&t.push(`${r.id}: ${n(i)} px of it is outside the screen. Move it inside.`)}for(let n=0;n<e.objects.length;n++){for(let r=n+1;r<e.objects.length;r++)oj(e.objects[n],e.objects[r])>ij&&t.push(`${e.objects[n].id} and ${e.objects[r].id} overlap. Move one of them.`);for(let r of e.hud)oj(e.objects[n],r)>ij&&t.push(`${e.objects[n].id} covers the ${r.id} instrument. Move it to a free place.`)}if(t.length===0)return[`All ${e.objects.length} objects are fully visible, nothing overlaps.`];let r=t.map(rj);return r.length>nj?[...r.slice(0,11),`…and ${r.length-11} more problems of the same kind.`]:r}function cj(e,t){let n=e=>{let t=e.getBoundingClientRect();return{x:t.x,y:t.y,w:t.width,h:t.height}},r=[...e.querySelectorAll(`[data-object]`)].filter(e=>!e.classList.contains(`leaving`)).map(e=>({id:e.dataset.object??`?`,...n(e),scrollW:e.scrollWidth,scrollH:e.scrollHeight,drawn:(!e.querySelector(`.obj-jarvis, .obj-empty`)||!e.querySelector(`.obj-empty`))&&((e.textContent??``).replace(/[×📌\s]/g,``).length>0||!!e.querySelector(`svg, canvas, img, video, iframe`))})),i=[...e.querySelectorAll(`.orbital [data-widget]`)].map(e=>({id:e.dataset.widget??`?`,...n(e)}));return{view:{w:t.innerWidth,h:t.innerHeight},objects:r,hud:i}}function lj(e,t){let n=(0,v.useRef)(t);n.current=t;let r=(0,v.useRef)(!1),i=(0,v.useRef)(null);(0,v.useEffect)(()=>{let t=e===`listening`||e===`speaking`;i.current&&clearTimeout(i.current),i.current=null,t?r.current||(r.current=!0,n.current({type:`audio.activity`,active:!0})):r.current&&(i.current=setTimeout(()=>{i.current=null,r.current=!1,n.current({type:`audio.activity`,active:!1})},900))},[e]),(0,v.useEffect)(()=>()=>{i.current&&clearTimeout(i.current),r.current&&(r.current=!1,n.current({type:`audio.activity`,active:!1}))},[])}var uj={401:`Please sign in again.`,413:`That recording was too long.`,409:`Friend is busy with the last request. Try again in a moment.`,429:`You're talking too fast. Wait a moment.`,503:`Voice is not available. Run: friend voice setup`};async function dj(e,t,n){let r;try{r=await fetch(e,{method:`POST`,headers:{"content-type":t.type||`audio/webm`},body:t,signal:n})}catch(e){throw e.name===`AbortError`?e:Error(`Could not reach Friend. Check the connection.`)}if(!r.ok){let e=``;try{e=(await r.json()).error??``}catch{}throw Error(e||uj[r.status]||`The voice request failed (${r.status}).`)}let i=await r.json();return{text:typeof i.text==`string`?i.text:``,wake:i.wake===!0}}async function fj(e,t){return{text:(await dj(`/api/voice/utterance`,e,t)).text}}async function pj(e,t){let n=await dj(`/api/voice/utterance?wake=1`,e,t);return{text:n.text,wake:n.wake===!0}}var mj=null;function hj(){try{mj??=new AudioContext,mj.resume().catch(()=>{});let e=mj.currentTime;for(let[t,n]of[660,990].entries()){let r=mj.createOscillator(),i=mj.createGain();r.frequency.value=n,i.gain.setValueAtTime(0,e+t*.11),i.gain.linearRampToValueAtTime(.18,e+t*.11+.02),i.gain.exponentialRampToValueAtTime(.001,e+t*.11+.14),r.connect(i).connect(mj.destination),r.start(e+t*.11),r.stop(e+t*.11+.16)}}catch{}}var gj=/busy with the last request|talking too fast/i,_j=3e4,vj=50,yj=class{deps;listener=null;awakeNow=!1;showing=!1;busyWithOne=!1;clock=null;meter=null;abort=null;lastAlert=0;constructor(e){this.deps=e}get enabled(){return this.listener!==null}get awake(){return this.awakeNow}async enable(){if(this.listener)return;let e=this.deps.makeListener({onUtterance:e=>void this.heard(e),onError:e=>{this.drop(),this.alert(e,!0)}});try{await e.start()}catch(e){this.alert(e.message,!0);return}this.listener=e}disable(){this.drop()}sync(){let e=this.listener;if(!e)return;let t=this.busyOther();if(e.pause(t),!this.awakeNow||t){this.clearClock(),this.stopMeter();return}this.deps.mode()===`idle`&&this.show(),this.clock||this.startClock(),this.startMeter()}busyOther(){let e=this.deps.mode();return e!==`listening`&&(this.showing=!1),e===`speaking`||e===`transcribing`||e===`listening`&&!this.showing}show(){this.showing=!0,this.deps.dispatch({type:`voice.mode`,mode:`listening`})}wakeUp(e){this.awakeNow=!0,e&&this.deps.chime(),this.clearClock(),this.show(),this.startClock(),this.startMeter()}sleep(){this.awakeNow=!1,this.clearClock(),this.stopMeter(),this.showing&&this.deps.dispatch({type:`voice.mode`,mode:`idle`}),this.showing=!1}drop(){let e=this.listener;this.listener=null,this.abort?.abort(),this.abort=null,this.busyWithOne=!1,this.sleep(),e?.stop()}startClock(){this.clearClock(),this.clock=setTimeout(()=>{this.clock=null,this.sleep()},this.deps.awakeMs??3e4)}clearClock(){this.clock&&clearTimeout(this.clock),this.clock=null}startMeter(){this.meter||=setInterval(()=>this.deps.dispatch({type:`voice.level`,level:this.listener?.level()??0}),vj)}stopMeter(){this.meter&&clearInterval(this.meter),this.meter=null}async heard(e){if(!this.listener||this.busyWithOne||this.busyOther())return;this.busyWithOne=!0;let t=new AbortController;this.abort=t;try{this.awakeNow?await this.request(e,t.signal):await this.check(e,t.signal)}catch(e){e.name!==`AbortError`&&!gj.test(e.message)&&this.alert(e.message,!1)}finally{this.abort===t&&(this.abort=null),this.busyWithOne=!1,this.listener&&this.awakeNow&&(this.clearClock(),this.deps.mode()===`transcribing`&&this.deps.dispatch({type:`voice.mode`,mode:`idle`}),this.sync())}}async check(e,t){let n=await this.deps.wake(e,t);this.listener&&n.wake&&this.wakeUp(!n.text)}async request(e,t){this.clearClock(),this.stopMeter(),this.showing=!1,this.deps.dispatch({type:`voice.mode`,mode:`transcribing`}),await this.deps.command(e,t)}alert(e,t){let n=Date.now();!t&&n-this.lastAlert<_j||(this.lastAlert=n,this.deps.dispatch({type:`alert.add`,level:`error`,text:e}))}},bj=0,xj=new Set;function Sj(e){return xj.add(e),()=>xj.delete(e)}var Cj=e=>xj.forEach(t=>{try{t(e)}catch{}}),wj=e=>/not compatible|audio capture|audiosession/i.test(String(e?.message??e));function Tj(e){try{let t=navigator.audioSession;t&&t.type!==e&&(t.type=e)}catch{}}function Ej(){bj===0&&Tj(`playback`)}function Dj(){bj++,bj===1&&Cj(!0),Tj(`play-and-record`);let e=!1;return()=>{e||(e=!0,bj=Math.max(0,bj-1),bj===0&&(Tj(`playback`),Cj(!1)))}}var Oj=3,kj=.02,Aj=.04,jj=class{minSpeechMs;endSilenceMs;maxMs;floor=null;loudSince=null;speaking=!1;startedAt=0;lastLoud=0;lastFeed=0;speechMs=0;constructor(e={}){this.minSpeechMs=e.minSpeechMs??300,this.endSilenceMs=e.endSilenceMs??800,this.maxMs=e.maxMs??8e3}get inSpeech(){return this.speaking}get maybeSpeech(){return this.loudSince!==null}feed(e,t){this.floor===null&&(this.floor=e);let n=e>Math.max(this.floor*Oj+kj,Aj),r=Math.min(100,Math.max(0,t-this.lastFeed));if(this.lastFeed=t,!this.speaking)return n?(this.loudSince??=t,t-this.loudSince<this.minSpeechMs?null:(this.speaking=!0,this.startedAt=this.loudSince,this.lastLoud=t,this.speechMs=t-this.loudSince,{type:`start`})):(this.loudSince=null,this.floor+=(e-this.floor)*(e<this.floor?.3:.02),null);n&&(this.lastLoud=t,this.speechMs+=r);let i=t-this.startedAt>=this.maxMs;if(!i&&t-this.lastLoud<this.endSilenceMs)return null;let a={type:`end`,ms:t-this.startedAt,speechMs:this.speechMs,forced:i};return this.speaking=!1,this.loudSince=null,i&&n&&(this.floor=e),a}reset(){this.speaking=!1,this.loudSince=null}},Mj=[`audio/webm;codecs=opus`,`audio/webm`,`audio/mp4`,`audio/ogg;codecs=opus`],Nj=50,Pj=2e3,Fj=2e3,Ij=400,Lj=e=>{let t=e?.name;return t===`NotAllowedError`||t===`SecurityError`?`Microphone permission was denied. Allow it in the browser to use hands-free.`:t===`NotFoundError`||t===`OverconstrainedError`?`No microphone was found.`:e?.message||`Could not open the microphone.`},Rj=class{opts;stream=null;ctx=null;analyser=null;rec=null;chunks=[];recStartedAt=0;timer=null;seg;leaveSession=null;paused=!1;starting=!1;finishing=!1;opened=!1;now;constructor(e){this.opts=e,this.seg=new jj(e),this.now=e.now??(()=>Date.now())}static supported(){return typeof navigator<`u`&&!!navigator.mediaDevices?.getUserMedia&&typeof MediaRecorder<`u`}get listening(){return this.opened}async start(){if(!(this.opened||this.starting)){this.starting=!0;try{this.leaveSession=Dj();try{this.stream=await navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0}})}catch(e){throw this.leaveSession?.(),this.leaveSession=null,Error(Lj(e))}for(let e of this.stream.getTracks())e.onended=()=>this.broke(`The microphone stopped working.`);try{this.ctx=new AudioContext,this.analyser=this.ctx.createAnalyser(),this.analyser.fftSize=1024,this.ctx.createMediaStreamSource(this.stream).connect(this.analyser),this.ctx.resume().catch(()=>{})}catch{throw this.release(),Error(`This browser cannot listen continuously here.`)}this.seg.reset(),this.beginRecording(),this.opened=!0,this.timer=setInterval(()=>this.tick(),Nj)}finally{this.starting=!1}}}stop(){this.opened=!1,this.release()}pause(e){this.paused!==e&&(this.paused=e,this.seg.reset(),!e&&this.opened&&this.restartRecording())}level(){if(!this.analyser)return 0;let e=new Uint8Array(this.analyser.fftSize);this.analyser.getByteTimeDomainData(e);let t=0;for(let n of e)t+=((n-128)/128)**2;return Math.min(1,Math.sqrt(t/e.length)*4)}tick(){if(!this.opened)return;let e=this.now();if(this.ctx&&this.ctx.state!==`running`&&this.ctx.resume().catch(()=>{}),this.paused){e-this.recStartedAt>=Pj&&this.restartRecording();return}let t=this.seg.feed(this.level(),e);t?.type===`end`?this.finish(t.ms,t.speechMs):!t&&!this.seg.inSpeech&&!this.seg.maybeSpeech&&e-this.recStartedAt>=Pj&&this.restartRecording()}beginRecording(){if(!this.stream)return;let e=Mj.find(e=>MediaRecorder.isTypeSupported(e));this.chunks=[];let t=new MediaRecorder(this.stream,e?{mimeType:e}:void 0);t.ondataavailable=e=>{e.data&&e.data.size>0&&this.chunks.push(e.data)},t.onerror=()=>this.broke(`The microphone stopped working.`),t.start(250),this.rec=t,this.recStartedAt=this.now()}restartRecording(){let e=this.rec;if(this.rec=null,e){e.ondataavailable=null,e.onstop=null,e.onerror=null;try{e.state!==`inactive`&&e.stop()}catch{}}this.opened&&this.beginRecording()}async finish(e,t){let n=this.rec;if(!n||this.finishing)return;this.finishing=!0;let r=n.mimeType||`audio/webm`,i=await new Promise(e=>{let t=!1,i=()=>{t||(t=!0,e(new Blob(this.chunks,{type:r})))},a=setTimeout(i,Fj);n.onstop=()=>{clearTimeout(a),i()};try{n.state===`inactive`?i():n.stop()}catch{i()}});this.finishing=!1,this.rec=null,this.opened&&(this.beginRecording(),!this.paused&&e>=Ij&&t>=Ij/2&&i.size>0&&this.opts.onUtterance(i))}broke(e){this.opened&&(this.stop(),this.opts.onError(e))}release(){if(this.timer&&clearInterval(this.timer),this.timer=null,this.rec){this.rec.ondataavailable=null,this.rec.onstop=null,this.rec.onerror=null;try{this.rec.state!==`inactive`&&this.rec.stop()}catch{}}this.stream?.getTracks().forEach(e=>{e.onended=null,e.stop()}),this.ctx?.close().catch(()=>{}),this.stream=null,this.ctx=null,this.analyser=null,this.rec=null,this.chunks=[],this.leaveSession?.(),this.leaveSession=null}},zj=4096,Bj=8,Vj=20,Hj=6e6;function Uj(e){try{let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}catch{return null}}var Wj=class{ctx=null;analyser=null;pending=new Map;queue=[];current=null;busy=!1;gen=0;isPlaying=!1;unwatch=null;listeners=new Set;unlock(){Ej();let e=this.ensureContext();e.state!==`running`&&e.resume().catch(()=>{})}locked(){return!this.ctx||this.ctx.state!==`running`}enqueue(e){if(!Number.isInteger(e.seq)||e.seq<0||e.seq>zj)return;let t=Uj(e.data);if(!t)return;let n=this.pending.get(e.id);if(n||(this.pending.size>=Bj&&this.pending.delete(this.pending.keys().next().value),n={parts:new Map,lastSeq:null,bytes:0},this.pending.set(e.id,n)),n.bytes+=t.length,n.bytes>Hj){this.pending.delete(e.id);return}if(n.parts.set(e.seq,t),e.last&&(n.lastSeq=e.seq),n.lastSeq===null||n.parts.size!==n.lastSeq+1)return;this.pending.delete(e.id);let r=new Uint8Array([...n.parts.values()].reduce((e,t)=>e+t.length,0)),i=0;for(let e=0;e<=n.lastSeq;e++){let t=n.parts.get(e);if(!t)return;r.set(t,i),i+=t.length}for(this.queue.push(r.buffer);this.queue.length>Vj;)this.queue.shift();this.pump()}stop(){this.gen++,this.queue=[],this.pending.clear(),this.busy=!1;let e=this.current;if(this.current=null,e){e.onended=null;try{e.stop()}catch{}}this.setPlaying(!1)}dispose(){this.stop(),this.ctx?.close().catch(()=>{}),this.unwatch?.(),this.unwatch=null,this.ctx=null,this.analyser=null}playing(){return this.isPlaying}onChange(e){return this.listeners.add(e),()=>this.listeners.delete(e)}level(){if(!this.analyser||!this.isPlaying)return 0;let e=new Uint8Array(this.analyser.fftSize);this.analyser.getByteTimeDomainData(e);let t=0;for(let n of e)t+=((n-128)/128)**2;return Math.min(1,Math.sqrt(t/e.length)*4)}ensureContext(){if(!this.ctx){let e=window.AudioContext??window.webkitAudioContext;this.ctx=new e,this.analyser=this.ctx.createAnalyser(),this.analyser.fftSize=1024,this.analyser.connect(this.ctx.destination);let t=this.ctx;this.unwatch?.(),this.unwatch=Sj(e=>{e&&t.state===`running`?t.suspend().catch(()=>{}):!e&&t.state!==`running`&&t.state!==`closed`&&t.resume().catch(()=>{})})}return this.ctx}setPlaying(e){this.isPlaying!==e&&(this.isPlaying=e,this.listeners.forEach(t=>t(e)))}async pump(){if(this.busy)return;let e=this.queue.shift();if(!e){this.setPlaying(!1);return}this.busy=!0;let t=this.gen;try{let n=this.ensureContext();if(n.state!==`running`){try{await n.resume()}catch{}if(t!==this.gen)return;if(n.state!==`running`){this.queue.unshift(e),this.busy=!1;return}}let r=await n.decodeAudioData(e);if(t!==this.gen)return;let i=n.createBufferSource();i.buffer=r,i.connect(this.analyser),i.onended=()=>{this.current===i&&(this.current=null,this.busy=!1,this.pump())},this.current=i,this.setPlaying(!0),i.start()}catch{if(t!==this.gen)return;this.busy=!1,this.pump()}}},Gj=e=>new Promise(t=>setTimeout(t,e)),Kj=[`audio/webm;codecs=opus`,`audio/webm`,`audio/mp4`,`audio/ogg;codecs=opus`],qj=3e3;function Jj(e){let t=e;return t?.name===`NotAllowedError`||t?.name===`SecurityError`?Error(`Microphone permission was denied. Allow it in the browser to talk.`):t?.name===`NotFoundError`||t?.name===`OverconstrainedError`?Error(`No microphone was found.`):Error(t?.message||`Could not open the microphone.`)}var Yj=class e{opts;stream=null;rec=null;chunks=[];ctx=null;analyser=null;timer=null;starting=!1;leaveSession=null;constructor(e={}){this.opts=e}static supported(){return typeof navigator<`u`&&!!navigator.mediaDevices?.getUserMedia&&typeof MediaRecorder<`u`}get active(){return this.rec!==null}async start(){if(!(this.rec||this.starting)){if(!e.supported())throw Error(`This browser cannot record audio here (use localhost or HTTPS).`);this.starting=!0;try{this.leaveSession=Dj();try{let e=()=>navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0}});try{this.stream=await e()}catch(t){if(!wj(t))throw t;await Gj(250),this.leaveSession?.(),this.leaveSession=Dj(),this.stream=await e()}}catch(e){throw this.leaveSession?.(),this.leaveSession=null,Jj(e)}try{let e=Kj.find(e=>MediaRecorder.isTypeSupported(e));this.chunks=[];let t=new MediaRecorder(this.stream,e?{mimeType:e}:void 0);t.ondataavailable=e=>{e.data&&e.data.size>0&&this.chunks.push(e.data)},t.onerror=()=>this.failed();for(let e of this.stream.getTracks())e.onended=()=>this.failed();this.openMeter(this.stream),t.start(250),this.rec=t,this.opts.maxMs&&(this.timer=setTimeout(()=>{this.timer=null,this.opts.onLimit?.()},this.opts.maxMs))}catch(e){throw this.release(),Jj(e)}}finally{this.starting=!1}}}stop(){let e=this.rec;return e?new Promise(t=>{let n=!1,r=null,i=()=>{if(n)return;n=!0,r&&clearTimeout(r);let i=new Blob(this.chunks,{type:e.mimeType||`audio/webm`});this.release(),t(i)};if(r=setTimeout(i,qj),e.onstop=i,e.state===`inactive`)return i();try{e.stop()}catch{i()}}):Promise.reject(Error(`Not recording.`))}cancel(){let e=this.rec;if(e){e.ondataavailable=null,e.onstop=null,e.onerror=null;try{e.state!==`inactive`&&e.stop()}catch{}}this.release()}level(){if(!this.analyser||!this.rec)return 0;let e=new Uint8Array(this.analyser.fftSize);this.analyser.getByteTimeDomainData(e);let t=0;for(let n of e)t+=((n-128)/128)**2;return Math.min(1,Math.sqrt(t/e.length)*4)}failed(){this.rec&&(this.cancel(),this.opts.onError?.())}openMeter(e){try{this.ctx=new AudioContext,this.analyser=this.ctx.createAnalyser(),this.analyser.fftSize=1024,this.ctx.createMediaStreamSource(e).connect(this.analyser)}catch{this.analyser=null}}release(){this.timer&&clearTimeout(this.timer),this.timer=null,this.stream?.getTracks().forEach(e=>{e.onended=null,e.stop()}),this.ctx?.close().catch(()=>{}),this.stream=null,this.rec=null,this.ctx=null,this.analyser=null,this.chunks=[],this.leaveSession?.(),this.leaveSession=null}},Xj=2e3,Zj=()=>typeof window<`u`&&window.isSecureContext===!1,Qj=50,$j=class{deps;recorder;player;mode=`idle`;pressed=!1;disposed=!1;uploads=0;toldAboutSound=!1;quiet=!1;abort=null;poll=null;unsubscribe;constructor(e){this.deps=e;let t=()=>this.recorderFailed();this.recorder=e.recorder??e.makeRecorder?.(t)??new Yj({maxMs:6e4,onLimit:()=>void this.pressEnd(),onError:t}),this.player=e.player??new Wj,this.unsubscribe=this.player.onChange(e=>{this.mode!==`listening`&&this.mode!==`transcribing`&&this.setMode(e?`speaking`:`idle`)})}async pressStart(){if(!(this.pressed||this.disposed)){if(!this.deps.available()){this.alert(`warn`,`Voice is not available. Run: friend voice setup`);return}if(!(this.deps.supported?.()??Yj.supported())){this.alert(`warn`,Zj()?`This page is not secure, so the browser blocks the microphone. On the PC run: friend lan https on, restart Friend, and open the https:// address.`:`This browser cannot record audio here (use localhost or HTTPS).`);return}this.pressed=!0,this.player.unlock(),this.player.playing()&&(this.deps.send({type:`voice.interrupt`}),this.player.stop());try{await this.recorder.start()}catch(e){this.pressed=!1,this.alert(`error`,e.message),this.setMode(`idle`);return}if(!this.pressed){this.recorder.cancel(),this.setMode(`idle`);return}this.setMode(`listening`)}}async pressEnd(){if(!this.pressed||(this.pressed=!1,!this.recorder.active))return;let e=await this.recorder.stop();if(e.size<Xj){this.alert(`info`,`Hold the key a little longer while you speak.`),this.setMode(`idle`);return}this.setMode(`transcribing`);let t=new AbortController;this.abort=t,this.uploads++;try{let{text:n}=await this.deps.post(e,t.signal);n.trim()||this.alert(`info`,`I didn't catch that.`)}catch(e){e.name!==`AbortError`&&this.alert(`error`,e.message)}finally{this.uploads--,this.abort===t&&(this.abort=null),this.settle()}}blur(){this.pressed&&(this.pressed=!1,this.recorder.cancel(),this.setMode(`idle`))}setQuiet(e){this.quiet=e,e&&this.player.stop()}handleServer(e){if(e.type!==`audio.chunk`)return this.player.stop();this.quiet||(this.player.enqueue(e),!this.toldAboutSound&&this.player.locked?.()&&(this.toldAboutSound=!0,this.deps.dispatch({type:`alert.add`,level:`info`,text:`Sound is blocked by the browser. Click or press a key once anywhere on the page to hear me.`})))}unlock(){this.player.unlock()}dispose(){this.disposed=!0,this.pressed=!1,this.stopPolling(),this.abort?.abort(),this.recorder.cancel(),this.player.stop(),this.player.dispose?.(),this.unsubscribe()}recorderFailed(){this.pressed=!1,this.recorder.cancel(),this.alert(`error`,`The microphone stopped working.`),this.setMode(`idle`)}settle(){this.uploads>0||this.mode!==`transcribing`||this.setMode(this.player.playing()?`speaking`:`idle`)}setMode(e){this.disposed||(this.mode=e,this.deps.dispatch({type:`voice.mode`,mode:e}),e===`listening`||e===`speaking`?this.startPolling():this.stopPolling())}startPolling(){this.stopPolling(),this.poll=setInterval(()=>{let e=this.mode===`listening`?this.recorder.level():this.player.level();this.deps.dispatch({type:`voice.level`,level:e})},Qj)}stopPolling(){this.poll&&clearInterval(this.poll),this.poll=null}alert(e,t){this.disposed||this.deps.dispatch({type:`alert.add`,level:e,text:t})}};function eM(e){let[t,n]=(0,v.useReducer)(xk,hk),r=(0,v.useRef)(null),i=(0,v.useRef)(null),a=(0,v.useRef)(!1),o=(0,v.useRef)(null),s=(0,v.useRef)(null),[c,l]=(0,v.useState)(!1),u=(0,v.useRef)(e);u.current=e;let d=(0,v.useRef)(t);d.current=t,(0,v.useEffect)(()=>{let e=mk();r.current=e;let t=new $j({send:t=>e.send(t),dispatch:e=>n(e),post:fj,available:()=>d.current.voice.available});i.current=t,t.setQuiet(a.current);let c=new yj({makeListener:e=>new Rj(e),wake:pj,command:fj,mode:()=>d.current.voice.mode,chime:hj,dispatch:e=>n(e)});s.current=c;let f=new kk({send:t=>e.send(t),dispatch:e=>n(e),enabled:()=>d.current.camera.enabled,upload:async(e,t)=>{let n=await fetch(`/api/camera/frame/${encodeURIComponent(e)}`,{method:`POST`,headers:{"content-type":`image/jpeg`},body:t});if(!n.ok)throw Error(`upload failed (${n.status})`)}});o.current=f;let p=new ej({send:t=>e.send(t),dispatch:e=>n(e),upload:async(e,t)=>{let n=await fetch(`/api/screen/frame/${encodeURIComponent(e)}`,{method:`POST`,headers:{"content-type":`image/jpeg`},body:t});if(!n.ok)throw Error(`upload failed (${n.status})`)}}),m=e.onMessage(r=>{n(r);let i=r?.type,a=r?.id;(i===`camera.request`||i===`camera.cancel`)&&typeof a==`string`&&f.handle({type:i,id:a}),(i===`screen.request`||i===`screen.cancel`)&&typeof a==`string`&&p.handle({type:i,id:a}),i===`screen.check`&&typeof a==`string`&&setTimeout(()=>e.send({type:`screen.checked`,id:a,lines:sj(cj(document,window))}),500),i===`audio.duck`&&XD.set(r.level??1),(i===`audio.chunk`||i===`audio.stop`)&&t.handleServer(r)}),h=e.onState(e=>{n({type:`conn`,value:e}),e!==`open`&&XD.set(1,0),e===`unauthorized`&&u.current(),e===`elsewhere`&&(c.disable(),l(!1),t.blur(),f.dispose(),p.dispose())});return()=>{m(),h(),c.disable(),s.current=null,t.dispose(),f.dispose(),p.dispose(),e.close(),i.current=null,o.current=null,r.current=null}},[]),(0,v.useEffect)(()=>{t.camera.enabled||o.current?.dispose()},[t.camera.enabled]),(0,v.useEffect)(()=>{s.current?.sync()},[t.voice.mode]);let f=(0,v.useCallback)(async e=>{let t=s.current;if(t){e?await t.enable():t.disable(),l(t.enabled);try{localStorage.setItem(`friend.handsFree`,t.enabled?`1`:`0`)}catch{}}},[]),p=(0,v.useRef)(!1);(0,v.useEffect)(()=>{if(!p.current&&t.voice.available){p.current=!0;try{localStorage.getItem(`friend.handsFree`)===`1`&&Rj.supported()&&f(!0)}catch{}}},[t.voice.available,f]);let m=(0,v.useMemo)(()=>({on:c,supported:Rj.supported(),toggle:()=>void f(!s.current?.enabled)}),[c,f]),h=(0,v.useCallback)(e=>r.current?.send(e),[]);return lj(t.voice.mode,h),{state:t,send:h,dispatch:(0,v.useCallback)(e=>n(e),[]),voice:(0,v.useMemo)(()=>({pressStart:()=>void i.current?.pressStart(),pressEnd:()=>void i.current?.pressEnd(),blur:()=>i.current?.blur(),unlock:()=>i.current?.unlock(),setQuiet:e=>{a.current=e,i.current?.setQuiet(e)}}),[]),handsFree:m,useHere:(0,v.useCallback)(()=>r.current?.takeOver(),[]),officeStop:(0,v.useCallback)(e=>h({type:`office.stop`,...e?{workerId:e}:{}}),[h]),officeSay:(0,v.useCallback)((e,t)=>h({type:`office.say`,workerId:e,text:t}),[h])}}var tM={401:`Please sign in again.`,403:`Incorrect PIN.`,413:`That recording was too long.`,429:`Too many attempts. Wait a moment.`,503:`Voice is not available. Run: friend voice setup`};async function nM(e,t){let n;try{n=await fetch(e,t)}catch{throw Error(`Could not reach Friend. Check the connection.`)}if(!n.ok){let e=``;try{e=(await n.json()).error??``}catch{}throw Error(e||tM[n.status]||`The request failed (${n.status}).`)}return await n.json()}var rM=(e,t)=>({method:e,headers:{"content-type":`application/json`},body:JSON.stringify(t)}),iM={state:()=>nM(`/api/voice/enroll`,{}),sample:e=>nM(`/api/voice/enroll/sample`,{method:`POST`,headers:{"content-type":e.type||`audio/webm`},body:e}),finish:e=>nM(`/api/voice/enroll/finish`,rM(`POST`,{pin:e})),cancel:async()=>{await nM(`/api/voice/enroll/cancel`,rM(`POST`,{}))},remove:async e=>{await nM(`/api/voice/enroll`,rM(`DELETE`,{pin:e}))}},aM=[`Friend, good evening. It is a pleasant day to get things done.`,`Open my projects and show me what changed today.`,`My voice is my key, so please remember it well.`,`Check the weather and read me the latest headlines.`,`Always protect the boss, and never trust a stranger.`],oM=15e3;function sM({api:e=iM,createRecorder:t=e=>new Yj(e),onClose:n,who:r}){let[i,a]=(0,v.useState)(null),[o,s]=(0,v.useState)(0),[c,l]=(0,v.useState)(null),[u,d]=(0,v.useState)(`record`),[f,p]=(0,v.useState)(!1),[m,h]=(0,v.useState)(!1),[g,_]=(0,v.useState)(null),[y,x]=(0,v.useState)(``),S=(0,v.useRef)(!0),w=(0,v.useRef)(null);(0,v.useEffect)(()=>(S.current=!0,e.state().then(e=>{S.current&&(a(e),s(e.samples))}).catch(e=>S.current&&_(e.message)),()=>{S.current=!1,w.current?.cancel(),w.current=null}),[e]);let T=(0,v.useCallback)(async()=>{let t=w.current;if(t){w.current=null,p(!1),h(!0);try{let n=await t.stop(),r=await e.sample(n);if(!S.current)return;s(r.count),l(r.note)}catch(e){S.current&&_(e.message)}finally{S.current&&h(!1)}}},[e]),E=async()=>{_(null),l(null);let e=t({maxMs:oM,onLimit:()=>void T(),onError:()=>{w.current=null,S.current&&(p(!1),_(`The microphone stopped working. Try again.`))}});try{await e.start()}catch(e){S.current&&_(e.message);return}if(!S.current)return e.cancel();w.current=e,p(!0)},D=async e=>{_(null),h(!0);try{await e()}catch(e){S.current&&_(e.message)}finally{S.current&&(h(!1),x(``))}},O=async()=>{w.current?.cancel(),w.current=null,await e.cancel().catch(()=>{}),n()},k=i?.min??3,A=o%aM.length,j=o<aM.length?`Phrase ${o+1} of ${aM.length}`:`Extra recording (${o} so far)`;return(0,C.jsxs)(`div`,{className:`approval enroll glass`,role:`dialog`,"aria-label":`Voice enrollment`,style:{pointerEvents:`auto`},children:[(0,C.jsx)(`div`,{className:`approval-head`,children:(0,C.jsx)(`span`,{className:`approval-title`,children:r?`Teach Friend ${r}'s voice`:`Teach Friend your voice`})}),u===`record`&&(0,C.jsxs)(C.Fragment,{children:[!r&&i?.enrolled&&(0,C.jsx)(`p`,{className:`auth-note`,children:`Your voice is already saved. Saving a new one replaces it.`}),r&&(0,C.jsxs)(`p`,{className:`auth-note`,children:[`Hand the device to `,r,`. `,r,` reads each sentence aloud, close to the microphone, in a quiet room.`]}),(0,C.jsxs)(`p`,{className:`auth-note`,children:[j,`. Press Record, read this aloud in a quiet room, then press Stop.`]}),(0,C.jsx)(`pre`,{className:`approval-summary`,"data-testid":`enroll-phrase`,style:{whiteSpace:`pre-wrap`},children:aM[A]}),(0,C.jsxs)(`div`,{role:`status`,className:`auth-note`,children:[o,` recorded`,o>=k?` — enough to save`:` — at least ${k} needed`,`.`,c?` ${c}`:``]}),g&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:g}),(0,C.jsxs)(`div`,{className:`approval-actions`,children:[f?(0,C.jsx)(`button`,{type:`button`,style:b,className:`danger`,onClick:()=>void T(),children:`Stop`}):(0,C.jsx)(`button`,{type:`button`,style:b,className:`primary`,disabled:m||!i||o>=(i?.max??8),onClick:()=>void E(),children:m?`Uploading…`:`Record`}),(0,C.jsx)(`button`,{type:`button`,style:b,disabled:f||m||o<k,onClick:()=>d(`pin-save`),children:r?`Save ${r}'s voice`:`Save my voice`}),!r&&i?.enrolled&&(0,C.jsx)(`button`,{type:`button`,style:b,className:`danger`,disabled:f||m,onClick:()=>d(`pin-delete`),children:`Delete my voice`}),(0,C.jsx)(`button`,{type:`button`,style:b,onClick:()=>void O(),children:`Cancel`})]})]}),(u===`pin-save`||u===`pin-delete`)&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`p`,{className:`auth-note`,children:u===`pin-save`?r?`Enter your PIN to save ${r}'s voice.`:`Enter your PIN to save your voice.`:`Enter your PIN to delete your saved voice.`}),(0,C.jsx)(P,{pin:y,onChange:x,onSubmit:u===`pin-save`?()=>!m&&void D(async()=>{await e.finish(y),S.current&&d(`saved`)}):void 0}),g&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:g}),(0,C.jsxs)(`div`,{className:`approval-actions`,children:[u===`pin-save`?(0,C.jsx)(`button`,{type:`button`,style:b,className:`primary`,disabled:m||y.length<6,onClick:()=>void D(async()=>{await e.finish(y),S.current&&d(`saved`)}),children:`Save`}):(0,C.jsx)(`button`,{type:`button`,style:b,className:`danger`,disabled:m||y.length<6,onClick:()=>void D(async()=>{await e.remove(y),S.current&&d(`deleted`)}),children:`Delete`}),(0,C.jsx)(`button`,{type:`button`,style:b,onClick:()=>{x(``),_(null),d(`record`)},children:`Back`})]})]}),(u===`saved`||u===`deleted`)&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`p`,{className:`auth-note`,children:u===`saved`?r?`${r}'s voice is saved. From now on I will know when ${r} is talking.`:`Your voice is saved. From now on I will tell you apart from other speakers.`:`Your voice was deleted. Every voice is treated as yours until you enroll again.`}),(0,C.jsx)(`div`,{className:`approval-actions`,children:(0,C.jsx)(`button`,{type:`button`,style:b,className:`primary`,onClick:n,children:`Done`})})]})]})}var cM=new Set([`INPUT`,`TEXTAREA`,`SELECT`,`BUTTON`,`A`,`SUMMARY`]),lM=new Set([`button`,`checkbox`,`switch`,`tab`,`menuitem`,`link`,`radio`,`option`,`textbox`,`combobox`,`slider`]),uM=e=>e instanceof HTMLInputElement&&e.hasAttribute(`data-space-talks`)&&e.value===``,dM=e=>!uM(e)&&e instanceof HTMLElement&&(cM.has(e.tagName)||e.isContentEditable||lM.has(e.getAttribute(`role`)??``)),fM=e=>e.code===`Space`||e.key===` `;function pM(e){let t=(0,v.useRef)(e);t.current=e,(0,v.useEffect)(()=>{let e=!1,n=n=>{!fM(n)||n.ctrlKey||n.metaKey||n.altKey||dM(n.target)||dM(document.activeElement)||(n.preventDefault(),!(n.repeat||e)&&(e=!0,t.current.pressStart()))},r=n=>{fM(n)&&e&&(e=!1,n.preventDefault(),t.current.pressEnd())},i=()=>{e=!1,t.current.blur()},a=()=>{document.hidden&&i()},o=e=>{if(e.detail===0||!(e.target instanceof Element))return;let t=e.target.closest(`button, [role=button], summary, a`);t instanceof HTMLElement&&setTimeout(()=>{document.activeElement===t&&t.blur()},0)};return document.addEventListener(`click`,o),window.addEventListener(`keydown`,n),window.addEventListener(`keyup`,r),window.addEventListener(`blur`,i),document.addEventListener(`visibilitychange`,a),()=>{document.removeEventListener(`click`,o),window.removeEventListener(`keydown`,n),window.removeEventListener(`keyup`,r),window.removeEventListener(`blur`,i),document.removeEventListener(`visibilitychange`,a)}},[])}function mM(e){let t=(0,v.useRef)(e);t.current=e,(0,v.useEffect)(()=>{let e=()=>t.current.unlock(),n=[`pointerdown`,`keydown`,`touchend`];for(let t of n)window.addEventListener(t,e,{passive:!0});return()=>{for(let t of n)window.removeEventListener(t,e)}},[])}function hM({onUseHere:e}){return(0,C.jsx)(`div`,{className:`elsewhere`,role:`alertdialog`,"aria-labelledby":`elsewhere-title`,"data-testid":`elsewhere`,children:(0,C.jsxs)(`div`,{className:`elsewhere-card`,children:[(0,C.jsx)(`h2`,{id:`elsewhere-title`,children:`Friend is open in another window`}),(0,C.jsx)(`p`,{children:`Friend works in one window at a time. Click “Use here” to use it in this window instead; the other one will stop.`}),(0,C.jsx)(`button`,{type:`button`,className:`elsewhere-btn`,onClick:e,autoFocus:!0,children:`Use here`})]})})}function gM(e,t,n){let r=Math.max(100,Math.round(e)),i=Math.max(100,Math.round(t));return{width:r,height:i,kind:r<=599?`phone`:n||r<1024?`tablet`:`desktop`,orientation:i>r?`portrait`:`landscape`,touch:n}}var _M=()=>typeof matchMedia==`function`&&matchMedia(`(pointer: coarse)`).matches;function vM(){return gM(window.innerWidth,window.innerHeight,_M())}var yM=(e,t)=>!!e&&e.width===t.width&&e.height===t.height&&e.kind===t.kind&&e.orientation===t.orientation&&e.touch===t.touch;function bM(e,t){let n=(0,v.useRef)(null),r=(0,v.useRef)(e);r.current=e,(0,v.useEffect)(()=>{if(t!==`open`){n.current=null;return}let e=()=>{let e=vM();yM(n.current,e)||(n.current=e,r.current({type:`ui.screen`,...e}))};e();let i=null,a=()=>{i&&clearTimeout(i),i=setTimeout(e,400)};return window.addEventListener(`resize`,a),window.addEventListener(`orientationchange`,a),()=>{i&&clearTimeout(i),window.removeEventListener(`resize`,a),window.removeEventListener(`orientationchange`,a)}},[t])}var xM={401:`Please sign in again.`,403:`Incorrect PIN.`,413:`That recording was too long.`,429:`Too many attempts. Wait a moment.`,503:`Voice is not available. Run: friend voice setup`};async function SM(e,t={}){let n;try{n=await fetch(e,t)}catch{throw Error(`Could not reach Friend. Check the connection.`)}if(!n.ok){let e=``;try{e=(await n.json()).error??``}catch{}throw Error(e||xM[n.status]||`The request failed (${n.status}).`)}return await n.json()}var CM=(e,t)=>({method:e,headers:{"content-type":`application/json`},body:JSON.stringify(t)}),wM={overview:()=>SM(`/api/voice/people`),begin:e=>SM(`/api/voice/people/begin`,CM(`POST`,{name:e})),recording:{state:async()=>(await SM(`/api/voice/people`)).enrolling??{enrolled:!1,samples:0,min:3,max:8},sample:e=>SM(`/api/voice/people/sample`,{method:`POST`,headers:{"content-type":e.type||`audio/webm`},body:e}),finish:e=>SM(`/api/voice/people/finish`,CM(`POST`,{pin:e})),cancel:async()=>{await SM(`/api/voice/people/cancel`,CM(`POST`,{}))},remove:async()=>{}},removePerson:async(e,t)=>{await SM(`/api/voice/people/${e}`,CM(`DELETE`,{pin:t}))}};function TM({api:e=wM,createRecorder:t,onClose:n}){let[r,i]=(0,v.useState)(null),[a,o]=(0,v.useState)({kind:`list`}),[s,c]=(0,v.useState)(``),[l,u]=(0,v.useState)(``),[d,f]=(0,v.useState)(!1),[p,m]=(0,v.useState)(null),h=(0,v.useRef)(!0),g=(0,v.useCallback)(()=>{e.overview().then(e=>h.current&&i(e)).catch(e=>h.current&&m(e.message))},[e]);(0,v.useEffect)(()=>(h.current=!0,g(),()=>{h.current=!1}),[g]);let _=async()=>{m(null),f(!0);try{let t=await e.begin(s.trim());h.current&&o({kind:`record`,name:t.name})}catch(e){h.current&&m(e.message)}finally{h.current&&f(!1)}},y=async t=>{m(null),f(!0);try{if(await e.removePerson(t.id,l),!h.current)return;o({kind:`list`}),g()}catch(e){h.current&&m(e.message)}finally{h.current&&(f(!1),u(``))}};return a.kind===`record`?(0,C.jsx)(sM,{api:e.recording,who:a.name,...t?{createRecorder:t}:{},onClose:()=>{c(``),o({kind:`list`}),g()}}):(0,C.jsxs)(`div`,{className:`approval enroll glass`,role:`dialog`,"aria-label":`Family voices`,style:{pointerEvents:`auto`},children:[(0,C.jsx)(`div`,{className:`approval-head`,children:(0,C.jsx)(`span`,{className:`approval-title`,children:`Family voices`})}),a.kind===`list`&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`p`,{className:`auth-note`,children:`Friend knows your voice. Add the people at home, so it knows who is talking and answers them by name. They can chat and ask for the weather, but cannot use your PC or see your private things.`}),r&&!r.ownerEnrolled&&(0,C.jsx)(`p`,{className:`auth-note`,children:`First teach Friend your own voice (Esc, then Enroll my voice).`}),r&&r.people.length===0&&r.ownerEnrolled&&(0,C.jsx)(`p`,{className:`auth-note`,children:`Nobody added yet.`}),r&&r.people.length>0&&(0,C.jsx)(`ul`,{className:`household-list`,"aria-label":`People Friend knows`,children:r.people.map(e=>(0,C.jsxs)(`li`,{className:`household-row`,children:[(0,C.jsx)(`span`,{children:e.name}),(0,C.jsx)(`button`,{type:`button`,style:b,className:`danger`,onClick:()=>o({kind:`remove`,person:e}),"aria-label":`Remove ${e.name}`,children:`Remove`})]},e.id))}),r&&r.ownerEnrolled&&r.people.length<r.max&&(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Add a person`}),(0,C.jsx)(`input`,{value:s,maxLength:40,placeholder:`Name, for example Priya`,onChange:e=>c(e.target.value),onKeyDown:e=>e.key===`Enter`&&s.trim()&&!d&&void _()})]}),p&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:p}),(0,C.jsxs)(`div`,{className:`approval-actions`,children:[r&&r.ownerEnrolled&&r.people.length<r.max&&(0,C.jsx)(`button`,{type:`button`,style:b,className:`primary`,disabled:d||!s.trim(),onClick:()=>void _(),children:`Record their voice`}),(0,C.jsx)(`button`,{type:`button`,style:b,onClick:n,children:`Close`})]})]}),a.kind===`remove`&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`p`,{className:`auth-note`,children:[`Enter your PIN to remove `,a.person.name,`’s voice. Friend will treat their voice as a stranger’s.`]}),(0,C.jsx)(P,{pin:l,onChange:u}),p&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:p}),(0,C.jsxs)(`div`,{className:`approval-actions`,children:[(0,C.jsx)(`button`,{type:`button`,style:b,className:`danger`,disabled:d||l.length<6,onClick:()=>void y(a.person),children:`Remove`}),(0,C.jsx)(`button`,{type:`button`,style:b,onClick:()=>{u(``),m(null),o({kind:`list`})},children:`Back`})]})]})]})}var EM=`▌▍▎▏█▓▒░<>/\\|+-=*#%&0123456789ABCDEF`;function DM(e,t,n=Math.random){let r=[...e];if(t>=1)return e;let i=Math.floor(r.length*Math.max(0,t));return r.map((e,t)=>t<i||e===` `?e:EM[Math.floor(n()*36)]).join(``)}var OM=e=>e.length===0?0:Math.min(24,Math.max(6,Math.ceil([...e].length/2)));function kM(e,t){let[n,r]=(0,v.useState)(e),i=(0,v.useRef)(e);return(0,v.useEffect)(()=>{if(!t||e===i.current){i.current=e,r(e);return}i.current=e;let n=OM(e);if(n===0){r(e);return}let a=0,o=setInterval(()=>{a++,r(DM(e,a/n)),a>=n&&clearInterval(o)},320/n);return()=>clearInterval(o)},[e,t]),n}function AM(e){let t=e.currentTarget,n=t.getBoundingClientRect(),r=document.createElement(`span`);r.className=`hud-ripple`;let i=Math.max(n.width,n.height)*2;r.style.width=r.style.height=`${i}px`,r.style.left=`${e.clientX-n.left-i/2}px`,r.style.top=`${e.clientY-n.top-i/2}px`,t.appendChild(r),r.addEventListener(`animationend`,()=>r.remove(),{once:!0}),setTimeout(()=>r.remove(),900)}function jM({items:e,animations:t,onAction:n}){let[r,i]=(0,v.useState)(null),a=(0,v.useRef)(void 0);if((0,v.useEffect)(()=>()=>clearTimeout(a.current),[]),e.length===0)return null;let o=e=>{t!==`off`&&(i(e.id),clearTimeout(a.current),a.current=setTimeout(()=>i(null),650)),n(e)};return(0,C.jsxs)(xe,{id:`launcher`,label:`Quick launch`,wholeBox:!0,testId:`launcher`,className:`hud hud-launcher${t===`full`?` hud-boot`:``}`,children:[(0,C.jsx)(`div`,{className:`hud-kicker`,children:`Quick launch`}),(0,C.jsx)(`ul`,{className:`hud-stack`,children:e.map((e,n)=>(0,C.jsx)(`li`,{className:`hud-tab hud-cut${r===e.id?` engaged`:``}${t===`full`?` hud-boot`:``}`,style:{"--i":n+1},children:(0,C.jsxs)(`button`,{type:`button`,className:`hud-tab-main`,"aria-label":e.label,onPointerDown:t===`off`?void 0:AM,onClick:()=>o(e),children:[(0,C.jsx)(`span`,{className:`hud-icon`,"aria-hidden":`true`,children:e.icon}),(0,C.jsx)(`span`,{className:`hud-tab-label`,children:e.label}),(0,C.jsx)(`span`,{className:`hud-tab-engaged`,"aria-hidden":`true`,children:`ENGAGED`}),(0,C.jsx)(`span`,{className:`hud-sweep`,"aria-hidden":`true`}),(0,C.jsx)(`span`,{className:`hud-scan`,"aria-hidden":`true`})]})},e.id))})]})}var MM=class extends v.Component{state={failed:!1};static getDerivedStateFromError(){return{failed:!0}}render(){return this.state.failed?null:this.props.children}};function NM(e){let t=()=>({w:window.innerWidth,h:window.innerHeight}),[n,r]=(0,v.useState)(t);return(0,v.useEffect)(()=>{if(e)return;let n=()=>r(t());return window.addEventListener(`resize`,n),()=>window.removeEventListener(`resize`,n)},[e]),e??n}var PM=(0,v.lazy)(()=>PO(()=>import(`./jarvisTree-OK31Zc78.js`),__vite__mapDeps([0,1,2])));function FM({node:e,children:t}){return _u(e.c,{...e.p??{},...e.kids?{kids:e.kids}:{}})?(0,C.jsx)(C.Fragment,{children:t}):(0,C.jsx)(`div`,{className:`ob-jlive`,children:(0,C.jsx)(v.Suspense,{fallback:t,children:(0,C.jsx)(PM,{node:e})})})}function IM(e,t,n=24){let[r,i]=(0,v.useState)([]),a=(0,v.useRef)(void 0),o=(0,v.useRef)(0);return(0,v.useEffect)(()=>{if(a.current===t)return;a.current=t;let r=Date.now();r-o.current<1e3||(o.current=r,i(t=>[...t,e].slice(-n)))},[e,t,n]),r}var LM=(e,t=0,n=100)=>Number.isFinite(e)?Math.min(n,Math.max(t,e)):t,RM=e=>e?{x:e.x,y:e.y,width:e.w,height:e.h}:{};function zM(){return(0,C.jsx)(`svg`,{width:`0`,height:`0`,"aria-hidden":`true`,style:{position:`absolute`},children:(0,C.jsxs)(`defs`,{children:[(0,C.jsxs)(`filter`,{id:`ob-glow`,x:`-50%`,y:`-50%`,width:`200%`,height:`200%`,children:[(0,C.jsx)(`feGaussianBlur`,{stdDeviation:`3`,result:`b`}),(0,C.jsxs)(`feMerge`,{children:[(0,C.jsx)(`feMergeNode`,{in:`b`}),(0,C.jsx)(`feMergeNode`,{in:`SourceGraphic`})]})]}),(0,C.jsxs)(`filter`,{id:`ob-glow2`,x:`-50%`,y:`-50%`,width:`200%`,height:`200%`,children:[(0,C.jsx)(`feGaussianBlur`,{stdDeviation:`7`,result:`b`}),(0,C.jsxs)(`feMerge`,{children:[(0,C.jsx)(`feMergeNode`,{in:`b`}),(0,C.jsx)(`feMergeNode`,{in:`SourceGraphic`})]})]}),(0,C.jsxs)(`radialGradient`,{id:`ob-orbg`,cx:`50%`,cy:`45%`,r:`55%`,children:[(0,C.jsx)(`stop`,{offset:`0`,stopColor:`#cffafe`}),(0,C.jsx)(`stop`,{offset:`0.25`,stopColor:`#22d3ee`}),(0,C.jsx)(`stop`,{offset:`0.6`,stopColor:`#0e7490`}),(0,C.jsx)(`stop`,{offset:`1`,stopColor:`#042f3c`})]}),(0,C.jsxs)(`linearGradient`,{id:`ob-sweep`,x1:`0`,y1:`0`,x2:`1`,y2:`0`,children:[(0,C.jsx)(`stop`,{offset:`0`,stopColor:`#22d3ee`,stopOpacity:`0`}),(0,C.jsx)(`stop`,{offset:`1`,stopColor:`#22d3ee`,stopOpacity:`0.7`})]}),(0,C.jsxs)(`linearGradient`,{id:`ob-fade`,x1:`0`,y1:`0`,x2:`0`,y2:`1`,children:[(0,C.jsx)(`stop`,{offset:`0`,stopColor:`#010609`}),(0,C.jsx)(`stop`,{offset:`0.15`,stopColor:`#010609`,stopOpacity:`0`}),(0,C.jsx)(`stop`,{offset:`0.85`,stopColor:`#010609`,stopOpacity:`0`}),(0,C.jsx)(`stop`,{offset:`1`,stopColor:`#010609`})]})]})})}function BM({variant:e=`chamfer`,tone:t=`cyan`,title:n,running:r=!1,className:i=``,style:a,children:o,...s}){return(0,C.jsxs)(`section`,{...s,className:`ob-frame ob-v-${e} ${i}`.trim(),"data-tone":t,...r?{"data-running":``}:{},style:a,children:[n&&(0,C.jsx)(`header`,{className:`ob-frame-title`,children:n}),(0,C.jsx)(`div`,{className:`ob-frame-body`,children:o})]})}var VM=`M60 170A90 90 0 0 1 240 170`,HM=`M76 170A74 74 0 0 1 224 170`;function UM({value:e,inner:t,label:n=`Gauge`,tone:r=`cyan`,frame:i}){let a=Math.round(LM(e));return(0,C.jsxs)(`svg`,{className:i?void 0:`ob-svg`,...RM(i),viewBox:`0 0 300 190`,role:`img`,"aria-label":`${n} ${a}%`,"data-value":a,"data-tone":r,children:[(0,C.jsx)(`path`,{d:VM,className:`ob-track`,strokeWidth:`14`,pathLength:100}),(0,C.jsx)(`path`,{d:VM,className:`ob-fill`,strokeWidth:`14`,pathLength:100,strokeDasharray:`${a} 100`,"data-arc":`outer`}),t!==void 0&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`path`,{d:HM,className:`ob-track`,strokeWidth:`6`,pathLength:100}),(0,C.jsx)(`path`,{d:HM,className:`ob-fill`,strokeWidth:`6`,pathLength:100,strokeDasharray:`${Math.round(LM(t))} 100`,stroke:`#a78bfa`,"data-arc":`inner`})]})]})}function WM({levels:e,tone:t=`cyan`,frame:n}){let r=Math.max(1,e.length)*12;return(0,C.jsx)(`svg`,{className:n?void 0:`ob-svg`,...RM(n),viewBox:`0 0 ${r} 100`,preserveAspectRatio:`none`,"aria-hidden":`true`,"data-tone":t,children:e.map((e,t)=>(0,C.jsx)(`rect`,{className:`ob-eq`,x:t*12,y:0,width:8,height:100,style:{"--lv":Math.max(.05,LM(e,0,1)),animationDelay:`${-(t*.37%.9)}s`,transform:`scaleY(${Math.max(.05,LM(e,0,1))})`}},t))})}var GM=`M0 40H40L52 20L66 62L80 8L96 52L108 40H190L202 28L214 48L226 40H300`;function KM({tone:e=`cyan`,frame:t}){return(0,C.jsxs)(`svg`,{className:t?void 0:`ob-svg`,...RM(t),viewBox:`0 0 300 70`,"aria-hidden":`true`,"data-tone":e,children:[(0,C.jsx)(`path`,{className:`ob-ecg-base`,d:GM}),(0,C.jsx)(`path`,{className:`ob-ecg`,d:GM})]})}function qM({blips:e,frame:t}){return(0,C.jsxs)(`svg`,{className:t?void 0:`ob-svg`,...RM(t),viewBox:`-120 -120 240 240`,role:`img`,"aria-label":`Devices: ${e.map(e=>e.label).join(`, `)||`none`}`,children:[(0,C.jsxs)(`g`,{fill:`none`,stroke:`var(--ob-line)`,children:[(0,C.jsx)(`circle`,{r:`110`}),(0,C.jsx)(`circle`,{r:`73`}),(0,C.jsx)(`circle`,{r:`36`}),(0,C.jsx)(`line`,{x1:`-110`,x2:`110`}),(0,C.jsx)(`line`,{y1:`-110`,y2:`110`})]}),(0,C.jsx)(`circle`,{r:`110`,fill:`none`,stroke:`#67e8f9`,strokeWidth:`2`,strokeDasharray:`1 9`}),(0,C.jsxs)(`g`,{className:`ob-sweep`,children:[(0,C.jsx)(`path`,{d:`M0 0L110 0A110 110 0 0 0 95 -55Z`,fill:`url(#ob-sweep)`}),(0,C.jsx)(`line`,{x2:`110`,stroke:`#67e8f9`,strokeWidth:`2`})]}),e.map(e=>{let t=e.angle*Math.PI/180,n=Math.cos(t)*LM(e.distance,0,1)*100,r=-Math.sin(t)*LM(e.distance,0,1)*100;return(0,C.jsxs)(`g`,{"data-blip":``,...e.dim?{"data-dim":``}:{},children:[(0,C.jsx)(`circle`,{className:`ob-blip${e.warn?` ob-blip-warn`:``}`,cx:n,cy:r,r:`5`}),(0,C.jsx)(`text`,{x:n+9,y:r+4,fontSize:`11`,fill:`currentColor`,opacity:e.dim?.5:1,children:e.label})]},e.label)})]})}var JM={done:`var(--ob-green)`,doing:`var(--ob-cyan)`,review:`var(--ob-orange)`,todo:`var(--ob-dim)`},YM=e=>e%2==0?6:5;function XM({cells:e,placeholder:t=!1,frame:n}){t&&(e=Array.from({length:11},()=>({status:`todo`})));let r=[],i=0,a=0;for(let t of e)a>=YM(i)&&(i++,a=0),r.push({x:20+a*40+i%2*20,y:20+i*35,status:t.status}),a++;let o=r.length?i+1:1;return(0,C.jsx)(`svg`,{className:n?void 0:`ob-svg`,...RM(n),viewBox:`0 0 260 ${o*35+10}`,"aria-hidden":`true`,...t?{"data-placeholder":``}:{},children:r.map((e,t)=>(0,C.jsx)(`polygon`,{"data-status":e.status,points:`-20,0 -10,-17.3 10,-17.3 20,0 10,17.3 -10,17.3`,transform:`translate(${e.x} ${e.y})`,fill:`none`,stroke:JM[e.status],strokeWidth:`1.6`,className:e.status===`review`?`ob-pulse`:void 0},t))})}function ZM({rings:e,placeholder:t=!1,frame:n}){t&&(e=[{value:0},{value:0},{value:0}]);let r=t?{"aria-hidden":!0,"data-placeholder":``}:{role:`img`,"aria-label":e.map(e=>`${e.label??`ring`} ${Math.round(LM(e.value))}%`).join(`, `)||`no data`};return(0,C.jsx)(`svg`,{className:n?void 0:`ob-svg`,...RM(n),viewBox:`-50 -50 100 100`,...r,children:e.map((e,t)=>{let n=38-t*12;if(n<=2)return null;let r=Math.round(LM(e.value));return(0,C.jsxs)(`g`,{"data-tone":e.tone??`cyan`,transform:`rotate(-90)`,children:[(0,C.jsx)(`circle`,{r:n,className:`ob-track`,strokeWidth:`8`}),(0,C.jsx)(`circle`,{r:n,className:`ob-fill`,strokeWidth:`8`,pathLength:100,strokeDasharray:`${r} 100`,"data-ring":t,"data-value":r})]},t)})})}function QM({value:e,segments:t=60,radius:n=205,size:r=460}){let i=Math.round(t*LM(e)/100),a=r/2;return(0,C.jsx)(`svg`,{className:`ob-svg`,viewBox:`0 0 ${r} ${r}`,"aria-hidden":`true`,children:Array.from({length:t},(e,r)=>{let o=(-90+r*360/t)*Math.PI/180,[s,c]=[n-7,n+7];return(0,C.jsx)(`line`,{className:`ob-seg`,"data-seg":``,"data-on":r<i?`true`:`false`,x1:a+s*Math.cos(o),y1:a+s*Math.sin(o),x2:a+c*Math.cos(o),y2:a+c*Math.sin(o)},r)})})}var $M={running:`green`,waiting:`orange`,idle:`cyan`,add:`cyan`};function eN({label:e,glyph:t,caption:n,detail:r,status:i=`idle`,onClick:a,x:o,y:s}){let c=o!==void 0&&s!==void 0?{left:o,top:s}:void 0;return(0,C.jsxs)(`button`,{type:`button`,className:`ob-node`,"data-tone":$M[i],"data-status":i,"aria-label":r?`${e}, ${r}`:e,title:e,style:c,onClick:a,children:[(0,C.jsxs)(`svg`,{viewBox:`-34 -30 68 60`,"aria-hidden":`true`,children:[(0,C.jsx)(`polygon`,{points:`-34,0 -17,-29.4 17,-29.4 34,0 17,29.4 -17,29.4`}),(0,C.jsx)(`text`,{className:`ob-node-label${t?` ob-glyph`:``}`,children:t??(e.length>6?`${e.slice(0,5)}…`:e)})]}),n&&(0,C.jsx)(`span`,{className:`ob-node-caption`,children:n})]})}function tN({x1:e,y1:t,x2:n,y2:r,tone:i=`cyan`,flowing:a=!0}){return(0,C.jsx)(`line`,{className:`ob-link${a?` ob-flow`:``}`,"data-tone":i,x1:e,y1:t,x2:n,y2:r})}var nN=1e4;function rN({stats:e,now:t=Date.now()}){let n=e?Math.round(e.cpu):0,r=e&&e.ramTotal>0?Math.round(100*e.ramUsed/e.ramTotal):0,i=!!e&&t-e.at>1e4;return(0,C.jsxs)(`svg`,{className:`ob-wsvg`,viewBox:`0 0 300 220`,children:[(0,C.jsx)(`text`,{className:`ob-lab`,x:`12`,y:`8`,children:`SYSTEM · CPU / RAM`}),(0,C.jsx)(`path`,{className:`ob-bracket`,d:`M0 20H20M0 20V40M300 20H280M300 20V40`}),(0,C.jsx)(UM,{value:n,inner:r,label:`CPU`,frame:{x:0,y:20,w:300,h:190}}),e?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`text`,{className:`ob-big`,x:`150`,y:`170`,textAnchor:`middle`,children:[n,`%`]}),(0,C.jsxs)(`text`,{className:`ob-dim`,x:`150`,y:`192`,textAnchor:`middle`,children:[`CPU · RAM `,r,`%`,i?` · STALE`:``]})]}):(0,C.jsx)(`text`,{className:`ob-dim`,x:`150`,y:`180`,textAnchor:`middle`,children:`Waiting for data`})]})}function iN(e){if(e<1024)return`${Math.round(e)} B`;let t=[`KB`,`MB`,`GB`,`TB`],n=e/1024,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r++;return`${n.toFixed(1)} ${t[r]}`}function aN({stats:e,now:t=Date.now()}){let n=!!e&&e.netDown===0&&e.netUp===0,r=!!e&&t-e.at>1e4;return(0,C.jsxs)(`svg`,{className:`ob-wsvg`,viewBox:`0 0 300 110`,children:[(0,C.jsx)(`text`,{className:`ob-lab`,x:`0`,y:`8`,children:`NETWORK`}),(0,C.jsx)(KM,{frame:{x:0,y:20,w:300,h:70}}),(0,C.jsxs)(`text`,{className:`ob-dim`,x:`0`,y:`104`,children:[e?n?`n/a`:`↓ ${iN(e.netDown)}/s ↑ ${iN(e.netUp)}/s`:`Waiting for data`,r?` · stale`:``]})]})}var oN=e=>Math.max(0,Math.min(100,Math.round(e))),sN=(e,t,n=`200px`)=>({c:`JGaugeChart`,p:{value:oN(e),min:0,max:100,size:n,label:t,displayValue:`${oN(e)}%`,showNeedle:!1,showTicks:!1,showMinMax:!1}}),cN=(e,t=`260px`)=>({c:`JSparkline`,p:{data:e.length>1?e:[0,0],showArea:!0,showTrend:!1,height:`48px`,width:t}});function lN({node:e}){return(0,C.jsx)(FM,{node:e,children:(0,C.jsx)(`span`,{className:`ob-pic-wait`})})}function uN({k:e,v:t,tone:n}){return(0,C.jsxs)(`p`,{className:`ob-fact${n?` ob-fact-${n}`:``}`,children:[(0,C.jsx)(`span`,{children:e}),(0,C.jsx)(`b`,{children:t})]})}var dN=({children:e})=>(0,C.jsx)(`p`,{className:`ob-say`,children:e}),fN=({children:e})=>(0,C.jsx)(`p`,{className:`ob-sub ob-head`,children:e}),pN=e=>e<5e3?`just now`:e<6e4?`${Math.round(e/1e3)} s ago`:`${Math.round(e/6e4)} min ago`;function mN({stats:e,cpuHist:t,ramHist:n}){let r=e?oN(e.cpu):0,i=e&&e.ramTotal>0?oN(100*e.ramUsed/e.ramTotal):0;if(!e)return(0,C.jsx)(dN,{children:`Waiting for the first reading from this PC.`});let a=Date.now()-e.at>nN,o=r>85||i>92?`The PC is under heavy load. If it feels slow, close big programs or browser tabs you are not using.`:r>60||i>80?`Busy, but fine. Nothing needs doing unless it feels slow.`:`Light load. There is plenty of room for more work.`;return(0,C.jsxs)(`div`,{className:`ob-details`,children:[(0,C.jsxs)(`div`,{className:`ob-pics`,children:[(0,C.jsx)(lN,{node:sN(r,`CPU`)}),(0,C.jsx)(lN,{node:sN(i,`Memory`)})]}),(0,C.jsx)(uN,{k:`Processor now`,v:`${r}%`,tone:r>85?`warn`:void 0}),(0,C.jsx)(uN,{k:`Memory now`,v:`${i}% (${iN(e.ramUsed)} of ${iN(e.ramTotal)})`,tone:i>92?`warn`:void 0}),(0,C.jsx)(uN,{k:`Memory free`,v:iN(Math.max(0,e.ramTotal-e.ramUsed))}),(0,C.jsx)(uN,{k:`Last reading`,v:a?`${pN(Date.now()-e.at)} (stale: the PC agent may be off)`:pN(Date.now()-e.at),tone:a?`warn`:`ok`}),(0,C.jsx)(fN,{children:`Last minute or so`}),(0,C.jsxs)(`div`,{className:`ob-pics`,children:[(0,C.jsx)(lN,{node:cN(t,`230px`)}),(0,C.jsx)(lN,{node:cN(n,`230px`)})]}),(0,C.jsx)(`p`,{className:`ob-trend`,children:`processor, then memory`}),(0,C.jsx)(dN,{children:o})]})}function hN({voice:e,lastHeard:t}){let n=e.mode!==`idle`||e.level>.05,r={idle:`Waiting`,listening:`Listening to you`,transcribing:`Turning your words into text`,speaking:`Speaking`}[e.mode];return(0,C.jsxs)(`div`,{className:`ob-details`,children:[(0,C.jsx)(lN,{node:{c:`JWaveform`,p:{barCount:36,height:`64px`,active:n}}}),(0,C.jsx)(uN,{k:`Doing now`,v:r,tone:n?`ok`:void 0}),(0,C.jsx)(uN,{k:`Sound level`,v:`${Math.round(e.level*100)}%`}),(0,C.jsx)(uN,{k:`Voice on this PC`,v:e.available?`ready`:`not set up`,tone:e.available?`ok`:`warn`}),(0,C.jsx)(uN,{k:`Your voice enrolled`,v:e.enrolled?`yes: strangers are recognised`:`no`}),t&&(0,C.jsx)(uN,{k:`You last said`,v:t.length>90?`${t.slice(0,89)}…`:t}),(0,C.jsx)(dN,{children:e.available?`Hold Space (or press and hold the talk button) and speak; let go to send. Friend answers aloud when you spoke to it.`:`Voice is not set up on this PC yet. Run friend voice setup in the terminal, then restart Friend.`})]})}function gN({stats:e,down:t,up:n}){if(!e)return(0,C.jsx)(dN,{children:`Waiting for the first reading from this PC.`});let r=e.netDown===0&&e.netUp===0;return(0,C.jsxs)(`div`,{className:`ob-details`,children:[(0,C.jsxs)(`div`,{className:`ob-pics`,children:[(0,C.jsx)(lN,{node:cN(t,`260px`)}),(0,C.jsx)(lN,{node:cN(n,`260px`)})]}),(0,C.jsx)(`p`,{className:`ob-trend`,children:`downloading, then uploading`}),(0,C.jsx)(uN,{k:`Download now`,v:r?`n/a`:`${iN(e.netDown)}/s`}),(0,C.jsx)(uN,{k:`Upload now`,v:r?`n/a`:`${iN(e.netUp)}/s`}),(0,C.jsx)(uN,{k:`Fastest download seen`,v:t.length?`${iN(Math.max(...t))}/s`:`n/a`}),(0,C.jsx)(uN,{k:`Fastest upload seen`,v:n.length?`${iN(Math.max(...n))}/s`:`n/a`}),(0,C.jsx)(dN,{children:r?`This PC does not report network speed, or nothing is moving right now.`:`The speed of everything on this PC, not only Friend. A busy line usually means a download, an update or a video.`})]})}function _N({deviceOnline:e,voiceAvailable:t}){let n=(e,t,n,r)=>(0,C.jsxs)(`div`,{className:`ob-device`,children:[(0,C.jsx)(uN,{k:e,v:t?`online`:`offline`,tone:t?`ok`:`warn`}),(0,C.jsx)(`p`,{className:`ob-say ob-small`,children:t?n:r})]},e);return(0,C.jsxs)(`div`,{className:`ob-details`,children:[n(`This screen`,!0,`You are looking at it: Friend shows pictures, captions and these instruments here.`,``),n(`PC agent`,e,`Runs commands and reads files on this PC when you ask, after your approval.`,`Friend cannot run commands or read files on this PC until the agent is running again (friend start).`),n(`Voice`,t,`Listens when you hold Space and speaks the answers.`,`Voice is not set up on this PC yet (friend voice setup).`)]})}function vN({office:e}){if(!e.enabled)return(0,C.jsx)(dN,{children:`The Office is switched off, so there are no workers or tickets. Turn it on in Settings, Office, then ask Friend to hire someone.`});let t=t=>e.tickets.filter(e=>e.status===t).length,n=t=>e.workers.find(e=>e.id===t)?.name??(t||`nobody yet`),r=[...e.tickets].sort((e,t)=>t.id-e.id).slice(0,8);return(0,C.jsxs)(`div`,{className:`ob-details`,children:[(0,C.jsx)(uN,{k:`Done`,v:t(`done`),tone:`ok`}),(0,C.jsx)(uN,{k:`Being worked on`,v:t(`doing`)}),(0,C.jsx)(uN,{k:`Waiting for review`,v:t(`review`)+t(`blocked`),tone:t(`review`)+t(`blocked`)>0?`warn`:void 0}),(0,C.jsx)(uN,{k:`Not started`,v:t(`todo`)}),(0,C.jsx)(fN,{children:`Newest tickets`}),r.length===0&&(0,C.jsx)(dN,{children:`No tickets yet. Ask Friend to give a worker something to do.`}),r.map(e=>(0,C.jsxs)(`p`,{className:`ob-li ob-wrap`,children:[`#`,e.id,` · `,e.title,` · `,e.status,` · `,n(e.workerId)]},e.id))]})}var yN=!1;typeof document<`u`&&(document.addEventListener(`keydown`,()=>yN=!0,!0),document.addEventListener(`pointerdown`,()=>yN=!1,!0),document.addEventListener(`mousedown`,()=>yN=!1,!0));var bN=()=>yN,xN={starting:`running`,running:`running`,waiting:`waiting`,idle:`idle`,paused:`idle`,stopped:`idle`,failed:`idle`};function SN(e,t){let n=e.slice(0,5).map(e=>({id:e.id,label:e.name,glyph:e.name.slice(0,6).toUpperCase(),caption:e.name,status:xN[e.status],detail:e.detail||e.status,kind:`worker`}));return t&&e.length<5&&n.push({id:`hire`,label:`Hire a worker`,glyph:`+`,caption:`HIRE WORKER`,status:`add`,detail:`HIRE WORKER`,kind:`hire`}),n}var CN={done:`done`,doing:`doing`,review:`review`,blocked:`review`,todo:`todo`},wN=[`done`,`doing`,`review`,`todo`];function TN(e){return[...e].sort((e,t)=>e.id-t.id).slice(-11).map(e=>({status:CN[e.status]})).sort((e,t)=>wN.indexOf(e.status)-wN.indexOf(t.status))}function EN(e){let t=[...new Set(e.map(e=>e.projectId))];if(t.length!==0)return t.length===1?t[0]:`${t.length} projects`}var DN=e=>e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(e);function ON(e){let t=e=>e.name.slice(0,6).toUpperCase(),n=e.filter(e=>e.budget!==null&&e.budget>0);if(n.length>0)return n.slice(0,3).map(e=>{let n=LM(e.tokens/e.budget*100);return{label:t(e),value:n,text:`${Math.round(n)}%`}});let r=Math.max(0,...e.map(e=>e.tokens));return[...e].sort((e,t)=>t.tokens-e.tokens).slice(0,3).map(e=>({label:t(e),value:r>0?LM(Math.max(+(e.tokens>0),Math.round(e.tokens/r*100))):0,text:DN(e.tokens)}))}var kN={tool:`green`,result:`green`,approval:`orange`,error:`orange`,text:`plain`};function AN(e,t){if(e!==`idle`||!t.enabled)return e;if(t.workers.some(e=>e.status===`waiting`))return`needs you`;let n=t.workers.filter(e=>e.status===`running`||e.status===`starting`).length;return n>0?`working · ${n}`:e}function jN(e,t,n=8){return t.flatMap(t=>(e[t.id]??[]).map(e=>({...e,name:t.name.slice(0,6).toUpperCase().padEnd(7)}))).sort((e,t)=>e.at-t.at).slice(-n).map(e=>({text:`${e.name}${e.text}`,tone:kN[e.kind]??`plain`}))}var MN=e=>{let t=Math.max(1,Math.round(e/6e4));return t>=60?`${Math.floor(t/60)}H ${String(t%60).padStart(2,`0`)}M`.replace(/ 0(\d)M/,` $1M`):`${t}M`};function NN(e,t,n){let r=e.fiveHour;return r&&r.resetsAt*1e3>n?{value:Math.round(LM(r.utilization*100)),reset:MN(r.resetsAt*1e3-n),real:!0}:{value:t,reset:null,real:!1}}function PN(e){let t=new Map(e.map(e=>[e.id,e])),n=e=>{let n=new Set([e.id]);for(let r=e.managerId;r&&t.has(r);r=t.get(r).managerId){if(n.has(r))return r===e.id;n.add(r)}return!1},r=e=>e.managerId&&t.has(e.managerId)&&!n(e)?e.managerId:`friend`,i=new Map;for(let t of e)i.set(r(t),[...i.get(r(t))??[],t]);let a=new Map,o=e=>{let t=i.get(e)??[],n=t.length===0?190:Math.max(190,t.reduce((e,t)=>e+o(t.id),0)+(t.length-1)*26);return a.set(e,n),n};o(`friend`);let s=[],c=[],l=0,u=(e,n,r)=>{l=Math.max(l,r);let o=i.get(e)??[],d=r*134,f;if(o.length===0)f=n+(a.get(e)-190)/2;else{let t=n,i=o.map(e=>{let n=u(e.id,t,r+1);return t+=a.get(e.id)+26,n});f=(i[0]+i[i.length-1])/2;for(let[t,n]of o.entries())c.push({from:e,to:n.id,x1:f+95,y1:d+78,x2:i[t]+95,y2:d+78+56})}return s.push({id:e,x:f,y:d,worker:e===`friend`?null:t.get(e)}),f};return u(`friend`,0,0),{nodes:s,edges:c,width:a.get(`friend`),height:(l+1)*78+l*56}}var FN=[{id:`system`,title:`System`,anchor:`left`,box:{x:40,y:70,w:300,h:220},tone:`cyan`,minDensity:`standard`},{id:`voice`,title:`Voice`,anchor:`left`,box:{x:40,y:310,w:300,h:150},tone:`cyan`,minDensity:`standard`},{id:`network`,title:`Network`,anchor:`left`,box:{x:40,y:480,w:300,h:110},tone:`cyan`,minDensity:`standard`},{id:`feed`,title:`Activity`,anchor:`left`,box:{x:40,y:650,w:430,h:210},tone:`green`,minDensity:`standard`},{id:`radar`,title:`Devices`,anchor:`right`,box:{x:1310,y:60,w:250,h:270},tone:`cyan`,minDensity:`standard`},{id:`tickets`,title:`Tickets`,anchor:`right`,box:{x:1300,y:320,w:270,h:160},tone:`green`,minDensity:`standard`},{id:`budget`,title:`Budget`,anchor:`right`,box:{x:1300,y:480,w:270,h:110},tone:`cyan`,minDensity:`standard`},{id:`approval`,title:`Approvals`,anchor:`right`,box:{x:1180,y:650,w:380,h:210},tone:`orange`,minDensity:`standard`},{id:`usage`,title:`Usage`,anchor:`centre`,box:{x:700,y:215,w:200,h:30},tone:`cyan`,minDensity:`calm`}];if(FN.length!==Ku.length)throw Error(`the widget registry and HUD_WIDGET_IDS differ`);var IN={calm:0,standard:1,full:2},LN=[`system`,`voice`,`network`,`feed`,`radar`,`tickets`];function RN(e,t,n,r,i=[],a=!1){return FN.filter(n=>{if(n.id===`approval`&&r)return!0;let o=t[n.id];return o===!1?!1:a?!0:n.id===`approval`?o===!0:LN.includes(n.id)?o===!0||i.includes(n.id):o===!0||IN[e]>=IN[n.minDensity]})}function zN({rings:e=[]}){let t=e.length===0;return(0,C.jsxs)(`svg`,{className:`ob-wsvg`,viewBox:`0 0 270 110`,children:[(0,C.jsx)(ZM,{rings:e.map((e,t)=>({value:e.value,label:e.label,tone:[`cyan`,`cyan`,`green`][t]??`cyan`})),placeholder:t,frame:{x:-10,y:-10,w:100,h:100}}),(0,C.jsx)(`text`,{className:`ob-lab`,x:`104`,y:`26`,children:`BUDGET`}),t?(0,C.jsx)(`text`,{className:`ob-sm`,x:`104`,y:`46`,children:`No workers yet`}):e.slice(0,3).map((e,t)=>(0,C.jsxs)(`text`,{className:`ob-sm`,x:`104`,y:46+t*18,children:[e.label,` `,e.text??`${Math.round(e.value)}%`]},e.label))]})}var BN=8,VN=46,HN=e=>e.length>VN?`${e.slice(0,45)}…`:e;function UN({lines:e,activity:t,busy:n,limit:r=BN,marquee:i=!1}){let a=Math.min(r,BN-+!!n),o=i?e:e.slice(-a),s=`M0 0H400L430 30V210H0Z`,c=(e,t,n)=>(0,C.jsxs)(`text`,{className:`tone`in e?`ob-sm ${e.tone===`green`?`ob-grn`:e.tone===`orange`?`ob-org`:``}`.trim():e.role===`user`?`ob-sm`:`ob-sm ob-grn`,x:`22`,y:t,children:[`tone`in e?``:e.role===`user`?`▸ `:`◂ `,HN(e.text)]},n);return(0,C.jsxs)(`svg`,{className:`ob-wsvg ob-feed-svg`,viewBox:`0 0 430 210`,"aria-live":`polite`,children:[(0,C.jsx)(`defs`,{children:(0,C.jsx)(`clipPath`,{id:`ob-feed-clip`,children:(0,C.jsx)(`rect`,{x:`0`,y:`38`,width:`430`,height:`168`})})}),(0,C.jsx)(`path`,{className:`ob-feed-frame`,d:s}),(0,C.jsx)(`path`,{className:`ob-feed-run`,d:s,pathLength:100}),(0,C.jsx)(`text`,{className:`ob-lab`,x:`16`,y:`18`,children:`WORKER FEED · LIVE`}),(0,C.jsx)(`circle`,{className:`ob-pulse`,cx:`410`,cy:`14`,r:`4`,fill:`#34d399`}),o.length===0&&!n&&(0,C.jsx)(`text`,{className:`ob-dim`,x:`22`,y:`60`,children:`Nothing yet`}),(0,C.jsx)(`g`,{clipPath:`url(#ob-feed-clip)`,children:i?(0,C.jsx)(`g`,{className:`ob-feed-scroll`,style:{"--n":o.length*20},children:[0,1].flatMap(e=>o.map((t,n)=>c(t,56+(e*o.length+n)*20,`${e}-${n}`)))}):(0,C.jsxs)(`g`,{className:`ob-feed-in`,children:[o.map((e,t)=>c(e,56+t*20,String(t))),n&&(0,C.jsxs)(`text`,{className:`ob-sm ob-org`,x:`22`,y:56+o.length*20,children:[`⚙ `,HN(t??`Working…`)]})]},`${e.length}:${o.at(-1)?.text??``}`)}),(0,C.jsx)(`rect`,{className:`ob-feed-fade`,x:`1`,y:`38`,width:`428`,height:`168`,fill:`url(#ob-fade)`,pointerEvents:`none`})]})}function WN({lines:e,activity:t,busy:n,workers:r=[]}){let i=(0,v.useRef)(null);return(0,v.useEffect)(()=>{let e=i.current;e&&(e.scrollTop=e.scrollHeight)},[e.length,r.length]),(0,C.jsxs)(`div`,{className:`ob-feed`,"aria-live":`polite`,ref:i,children:[e.length===0&&r.length===0&&!n&&(0,C.jsx)(`p`,{className:`ob-li ob-sub`,children:`Nothing yet`}),r.map((e,t)=>(0,C.jsx)(`p`,{className:`ob-li${e.tone===`green`?` ob-live`:e.tone===`orange`?` ob-warn`:``}`,children:e.text},`w${t}`)),e.slice(-200).map((e,t)=>(0,C.jsxs)(`p`,{className:`ob-li ${e.role===`user`?`ob-user`:``}`,children:[e.role===`user`?`▸ `:`◂ `,e.text]},t)),n&&(0,C.jsxs)(`p`,{className:`ob-li ob-live`,children:[`⚙ `,t??`Working…`]})]})}var GN={system:`How hard this PC is working: the arc and the first row are the processor, the second row is the memory, and below are the memory figures.`,voice:`The sound Friend is hearing or speaking, live.`,network:`How fast data moves in and out of this PC. Some PCs do not report it.`,feed:`The conversation and what Friend is doing right now.`,radar:`The things Friend can reach: this screen, the PC's agent and the voice. A dim one is offline.`,tickets:`The work given to hired workers, one cell each. Switch the Office on in Settings to hire workers.`,budget:`How much of each worker's limit is used. Limits are set in Settings, Office.`,approval:`Something is waiting for your answer.`,usage:`Today's usage compared with your busiest day of the last 30.`},KN={voice:`Voice`,chat:`Chat`,task:`Scheduled tasks`,channel:`Messages`,other:`Other`};function qN({api:e}){let[t,n]=(0,v.useState)(null),[r,i]=(0,v.useState)(!1);return(0,v.useEffect)(()=>{let t=!0;return e.summary(30).then(e=>t&&n(e)).catch(()=>t&&i(!0)),()=>{t=!1}},[e]),r?(0,C.jsx)(`p`,{className:`ob-li ob-sub`,children:`Could not read the usage`}):t?t.bySource.length===0?(0,C.jsx)(`p`,{className:`ob-li ob-sub`,children:`No usage yet`}):(0,C.jsx)(`div`,{className:`ob-usage-detail`,children:t.bySource.map(e=>(0,C.jsxs)(`p`,{className:`ob-li`,children:[KN[e.source]??e.source,` · `,lC(e.input+e.output),` tokens · `,e.turns,` turns`]},e.source))}):(0,C.jsx)(`p`,{className:`ob-li ob-sub`,children:`Reading…`})}var JN={cpu:[],ram:[],down:[],up:[]};function YN({id:e,state:t,rect:n,usageApi:r=oC,readings:i=JN,onClose:a}){let o=(0,v.useRef)(null);(0,v.useEffect)(()=>{bN()&&o.current?.focus()},[e]);let s=FN.find(t=>t.id===e)?.title??e,c=(()=>{switch(e){case`system`:return(0,C.jsx)(mN,{stats:t.stats,cpuHist:i.cpu,ramHist:i.ram});case`network`:return(0,C.jsx)(gN,{stats:t.stats,down:i.down,up:i.up});case`radar`:return(0,C.jsx)(_N,{deviceOnline:t.deviceOnline,voiceAvailable:t.voice.available});case`voice`:return(0,C.jsx)(hN,{voice:t.voice,lastHeard:[...t.chat].reverse().find(e=>e.role===`user`)?.text??null});case`feed`:return(0,C.jsx)(WN,{lines:t.chat,activity:t.activity,busy:t.busy,workers:t.office.enabled?jN(t.office.feed,t.office.workers,60):[]});case`tickets`:return(0,C.jsx)(vN,{office:t.office});case`budget`:return(0,C.jsx)(zN,{rings:ON(t.office.workers)});case`usage`:return(0,C.jsx)(qN,{api:r});default:return null}})();return(0,C.jsxs)(BM,{variant:`chamfer`,running:!0,title:s,className:`ob-expanded ob-hit`,style:{position:`absolute`,left:n.x,top:n.y,width:n.width,height:n.height},role:`dialog`,"aria-label":s,children:[(0,C.jsx)(`button`,{ref:o,type:`button`,className:`ob-close`,"aria-label":`Close`,onClick:a,children:`×`}),(0,C.jsx)(`div`,{className:`ob-expanded-body`,children:c}),(0,C.jsx)(`p`,{className:`ob-explain`,children:GN[e]})]})}var XN=e=>Math.max(0,Math.min(100,Math.round(e))),ZN=(e,t,n=`cyan`)=>({c:`JHudFrameCard`,p:{title:e,color:n,showStatusDot:!0,width:`100%`},kids:t}),QN=(e,t,n,r)=>({c:`JDataRow`,p:{label:e,value:t,...n===void 0?{}:{barPercent:XN(n)},...r?{state:r}:{}}});function $N(e,t=!1){let n=e?XN(e.cpu):0,r=e&&e.ramTotal>0?XN(100*e.ramUsed/e.ramTotal):0;return ZN(`System`,[{c:`Row`,p:{gap:12},kids:[{c:`JGaugeChart`,p:{value:n,min:0,max:100,size:t?`190px`:`150px`,label:`CPU`,displayValue:`${n}%`,showNeedle:!1,showTicks:!1,showMinMax:!1}},{c:`Column`,p:{gap:6},kids:e?[QN(`CPU`,`${n}%`,n,n>85?`warning`:void 0),QN(`RAM`,`${r}%`,r,r>90?`warning`:void 0),...t?[QN(`RAM USED`,iN(e.ramUsed)),QN(`RAM TOTAL`,iN(e.ramTotal))]:[]]:[`Waiting for data`]}]}])}function eP(e,t){let n=t!==`idle`||e>.05;return ZN(`Voice`,[{c:`JWaveform`,p:{barCount:28,height:`48px`,active:n}},{c:`JStatusPill`,p:{state:n?`active`:`success`},kids:[n?String(t):`quiet`]}])}function tP(e,t){let n=!!e&&e.netDown===0&&e.netUp===0;return ZN(`Network`,[{c:`Row`,p:{gap:12},kids:[{c:`JSparkline`,p:{data:t.length>1?t:[0,0],showArea:!0,height:`40px`,width:`130px`}},{c:`Column`,p:{gap:4},kids:e?n?[`n/a on this PC`]:[QN(`DOWN`,`${iN(e.netDown)}/s`),QN(`UP`,`${iN(e.netUp)}/s`)]:[`Waiting for data`]}]}])}function nP(e,t,n){let r=e.slice(-6).map((e,t)=>({id:`l${t}`,message:e.text.slice(0,120),level:e.tone===`orange`?`warn`:`info`}));return n&&t&&r.push({id:`now`,message:t,level:`info`}),ZN(`Activity`,[{c:`JActivityFeed`,p:{items:r.length?r:[{id:`none`,message:`Nothing yet`,level:`info`}],maxRows:6,showTime:!1,showSource:!1}}],`green`)}function rP(e,t){let n=(e,t)=>({c:`JStatusPill`,p:{state:t?`active`:`error`},kids:[`${e} ${t?`online`:`offline`}`]});return ZN(`Devices`,[{c:`Column`,p:{gap:8},kids:[n(`This screen`,!0),n(`PC agent`,e),n(`Voice`,t)]}])}function iP(e,t){let n=t=>e.filter(e=>e.status===t).length,r=e.length,i=e=>r?100*e/r:0;return ZN(t?`Tickets: ${t}`:`Tickets`,r?[QN(`DONE`,String(n(`done`)),i(n(`done`)),`success`),QN(`DOING`,String(n(`doing`)),i(n(`doing`))),QN(`REVIEW`,String(n(`review`)),i(n(`review`)),`warning`),QN(`TODO`,String(n(`todo`)),i(n(`todo`)))]:[`No tickets yet`],`green`)}function aP({worker:e,feed:t,rect:n,send:r,onClose:i}){let a=(0,v.useRef)(null),o=(0,v.useRef)(null),[s,c]=(0,v.useState)(``),[l,u]=(0,v.useState)(!1);(0,v.useEffect)(()=>{bN()&&a.current?.focus()},[e.id]),(0,v.useEffect)(()=>{let e=o.current;e&&(e.scrollTop=e.scrollHeight)},[t.length]);let d=()=>{let t=s.trim();t&&(r({type:`office.say`,workerId:e.id,text:t}),c(``))},f=e.status===`starting`||e.status===`running`||e.status===`waiting`;return(0,C.jsxs)(BM,{variant:`chamfer`,running:!0,title:e.name,className:`ob-expanded ob-hit`,style:{position:`absolute`,left:n.x,top:n.y,width:n.width,height:n.height},role:`dialog`,"aria-label":e.name,children:[(0,C.jsx)(`button`,{ref:a,type:`button`,className:`ob-close`,"aria-label":`Close`,onClick:i,children:`×`}),(0,C.jsxs)(`div`,{className:`ob-expanded-body ob-worker`,children:[(0,C.jsxs)(`p`,{className:`ob-li`,children:[e.status,e.detail?` · ${e.detail}`:``]}),(0,C.jsxs)(`p`,{className:`ob-li ob-sub`,children:[`Tokens `,e.tokens,e.budget?` of ${e.budget}`:``]}),(0,C.jsx)(`div`,{className:`ob-worker-log`,ref:o,"aria-live":`polite`,children:t.length===0?(0,C.jsx)(`p`,{className:`ob-li ob-sub`,children:`Nothing yet`}):t.map((e,t)=>(0,C.jsx)(`p`,{"data-feed-line":``,"data-kind":e.kind,className:`ob-li${e.kind===`tool`||e.kind===`result`?` ob-live`:``}`,children:e.text},`${e.at}-${t}`))})]}),(0,C.jsxs)(`form`,{className:`ob-worker-say`,onSubmit:e=>{e.preventDefault(),d()},children:[(0,C.jsx)(`input`,{type:`text`,"aria-label":`Say to ${e.name}`,placeholder:`Say to ${e.name}`,value:s,maxLength:2e3,onChange:e=>c(e.target.value)}),(0,C.jsx)(`button`,{type:`submit`,children:`Send`}),(0,C.jsx)(`button`,{type:`button`,className:`ob-stop`,disabled:!f,onClick:()=>r({type:`office.stop`,workerId:e.id}),children:`Stop`}),(0,C.jsx)(`button`,{type:`button`,className:`ob-stop`,onClick:()=>l?r({type:`office.fire`,workerId:e.id}):u(!0),onBlur:()=>u(!1),children:l?`Confirm remove`:`Remove`})]})]})}var oP=(0,v.lazy)(()=>PO(()=>import(`./OrgParts-C_K6EFKg.js`).then(e=>({default:e.OrgCanvas})),__vite__mapDeps([3,1,2])));function sP({workers:e,name:t,rect:n,onWorker:r,onClose:i}){let a=(0,v.useRef)(null);return(0,v.useEffect)(()=>{bN()&&a.current?.focus()},[]),(0,C.jsxs)(BM,{variant:`chamfer`,running:!0,title:`Office team`,className:`ob-expanded ob-hit`,style:{position:`absolute`,left:n.x,top:n.y,width:n.width,height:n.height},role:`dialog`,"aria-label":`Office team`,children:[(0,C.jsx)(`button`,{ref:a,type:`button`,className:`ob-close`,"aria-label":`Close`,onClick:i,children:`×`}),(0,C.jsx)(`div`,{className:`ob-expanded-body ob-org-body`,children:(0,C.jsx)(v.Suspense,{fallback:(0,C.jsx)(`p`,{className:`ob-li ob-sub`,children:`Drawing the team…`}),children:(0,C.jsx)(oP,{workers:e,name:t,onWorker:r})})}),(0,C.jsx)(`ul`,{className:`ob-org-lines`,"aria-label":`Who reports to whom`,children:e.map(n=>(0,C.jsxs)(`li`,{children:[n.name,` reports to `,n.managerId&&e.find(e=>e.id===n.managerId)?.name||t]},n.id))})]})}var cP=[{id:`code`,label:`CODE`,status:`running`,detail:`▶ Hero.tsx · 62%`,at:{x:800,y:108,anchor:`middle`}},{id:`test`,label:`TEST`,status:`running`,detail:`▶ 12/12 passing`,at:{x:1135,y:268,anchor:`start`}},{id:`rev`,label:`REV`,status:`waiting`,detail:`⏸ needs approval`,at:{x:1135,y:632,anchor:`start`}},{id:`hire`,label:`+`,status:`add`,detail:`HIRE WORKER`,at:{x:465,y:632,anchor:`end`}},{id:`arch`,label:`ARCH`,status:`idle`,detail:`idle`,at:{x:465,y:268,anchor:`end`}}],lP=[{text:`CODE ▶ edit src/Hero.tsx`,tone:`green`},{text:`CODE + 42 lines - 6 lines`,tone:`plain`},{text:`TEST ▶ pnpm test`,tone:`green`},{text:`TEST 12 passed · 0 failed`,tone:`plain`},{text:`REV ⏸ wants: npm install`,tone:`orange`},{text:`CODE ▶ edit src/Nav.tsx`,tone:`green`},{text:`CODE + 18 lines`,tone:`plain`}],uP=(e,t)=>Array.from({length:t},()=>({status:e})),dP=[...uP(`done`,3),...uP(`doing`,3),...uP(`review`,1),...uP(`todo`,4)],fP=[{label:`CODE`,value:42},{label:`TEST`,value:70},{label:`REV`,value:25}],pP=[{angle:49,distance:.64,label:`PC`},{angle:207,distance:.67,label:`PHONE`},{angle:286,distance:.73,label:`ALEXA?`,warn:!0}],mP={id:`sample`,tool:`shell.run`,summary:`npm install --save zod`,tier:`T2`,needsPin:!1},hP=e=>({cpu:38,ramUsed:61,ramTotal:100,netDown:2516582.4,netUp:314572.8,at:e});function gP({approval:e,send:t}){return e?(0,C.jsx)(_P,{approval:e,send:t}):(0,C.jsx)(`p`,{className:`ob-li ob-sub`,children:`None waiting`})}function _P({approval:e,send:t}){let{pin:n,setPin:r,respond:i,canApprove:a}=ft(e,t);return(0,C.jsxs)(`div`,{className:`ob-approval`,role:`alertdialog`,"aria-label":`Approval needed`,children:[(0,C.jsxs)(`svg`,{className:`ob-tri`,viewBox:`0 0 56 52`,"aria-hidden":`true`,children:[(0,C.jsx)(`path`,{d:`M4 48L28 4L52 48Z`}),(0,C.jsx)(`text`,{x:`28`,y:`42`,textAnchor:`middle`,children:`!`})]}),(0,C.jsxs)(`div`,{className:`ob-appr-text`,children:[(0,C.jsxs)(`span`,{className:`ob-appr-title`,children:[`APPROVAL NEEDED `,(0,C.jsx)(`span`,{className:`tier tier-${e.tier}`,children:e.tier})]}),!e.tool.startsWith(`office.`)&&(0,C.jsxs)(`span`,{className:`ob-appr-sub`,children:[e.tool,` wants to run:`]}),(0,C.jsx)(`pre`,{className:`ob-summary`,"data-testid":`approval-summary`,children:e.summary})]}),e.needsPin&&(0,C.jsx)(P,{pin:n,onChange:r,onSubmit:()=>a&&i(`approve`)}),(0,C.jsxs)(`div`,{className:`ob-actions`,children:[(0,C.jsx)(`button`,{type:`button`,className:`ob-btn ob-yes`,disabled:!a,onClick:()=>i(`approve`),children:`Approve`}),e.tier===`T2`&&!e.needsPin&&e.tool!==`camera.snap`&&!e.tool.startsWith(`office.`)&&(0,C.jsx)(`button`,{type:`button`,className:`ob-btn`,onClick:()=>i(`approve_always`),children:`Always allow`}),(0,C.jsx)(`button`,{type:`button`,className:`ob-btn ob-no`,onClick:()=>i(`deny`),children:`Deny`})]})]})}function vP({deviceOnline:e,voiceAvailable:t,blips:n}){return(0,C.jsxs)(`svg`,{className:`ob-wsvg`,viewBox:`0 0 250 270`,children:[(0,C.jsx)(`text`,{className:`ob-lab`,x:`20`,y:`21`,children:`DEVICES · RADAR`}),(0,C.jsx)(qM,{frame:{x:10,y:25,w:240,h:240},blips:n??[{angle:40,distance:.45,label:`This screen`},{angle:150,distance:.7,label:`PC`,dim:!e},{angle:250,distance:.6,label:`Voice`,dim:!t}]})]})}var yP=[{status:`done`,label:`DONE`},{status:`doing`,label:`DOING`},{status:`review`,label:`REVIEW`},{status:`todo`,label:`TODO`}];function bP({cells:e=[],project:t}){let n=e.length===0;return(0,C.jsxs)(`svg`,{className:`ob-wsvg`,viewBox:`0 0 270 160`,children:[(0,C.jsxs)(`text`,{className:`ob-lab`,x:`0`,y:`8`,children:[`TICKETS · `,t??`no workers yet`]}),(0,C.jsx)(XM,{cells:e,placeholder:n,frame:{x:0,y:20,w:260,h:80}}),(0,C.jsx)(`text`,{className:`ob-dim`,x:`0`,y:`130`,children:yP.map(t=>`■ ${t.label} ${e.filter(e=>e.status===t.status).length}`).join(` `)})]})}var xP=Array.from({length:20},(e,t)=>.35+.65*Math.abs(Math.sin(t*1.7+1))),SP=.45;function CP({level:e,mode:t}){let n=LM(e,0,1),r=Math.max(SP,n),i=Math.round(n*5);return(0,C.jsxs)(`svg`,{className:`ob-wsvg`,viewBox:`0 0 300 160`,children:[(0,C.jsx)(`text`,{className:`ob-lab`,x:`0`,y:`8`,children:`VOICE · SPECTRUM`}),(0,C.jsx)(`line`,{className:`ob-ecg-base`,x1:`0`,x2:`300`,y1:`130`,y2:`130`}),(0,C.jsx)(WM,{levels:xP.map(e=>r*e),frame:{x:0,y:40,w:240,h:90}}),(0,C.jsxs)(`text`,{className:`ob-dim`,x:`0`,y:`150`,children:[`MIC `,`▮`.repeat(i),`▯`.repeat(5-i),` · `,t]})]})}function wP(){let[e,t]=(0,v.useState)(()=>typeof document<`u`&&document.hidden);return(0,v.useEffect)(()=>{let e=()=>t(document.hidden);return document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[]),e}function TP(e){let[t,n]=(0,v.useState)(()=>new Date);return(0,v.useEffect)(()=>{let t=setInterval(()=>n(new Date),e);return()=>clearInterval(t)},[e]),t}var EP=e=>[...e.toUpperCase()].join(` `).replace(/\s{2,}/g,` `),DP=e=>t=>{(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),e())},OP=e=>vt({connection:e.connection,deviceOnline:e.deviceOnline,approval:e.approval,voiceMode:e.voice.mode,busy:e.busy,activity:e.activity}).text;function kP(e,t){let n=t.stats;switch(e){case`system`:return n?`CPU ${Math.round(n.cpu)}% · RAM ${n.ramTotal>0?Math.round(100*n.ramUsed/n.ramTotal):0}%`:`Waiting for data`;case`voice`:return t.voice.mode;case`network`:return n?n.netDown===0&&n.netUp===0?`n/a`:`↓ ${Math.round(n.netDown/1024)} KB/s ↑ ${Math.round(n.netUp/1024)} KB/s`:`Waiting for data`;case`feed`:return t.chat.at(-1)?.text??`Nothing yet`;case`radar`:return[`This screen`,t.deviceOnline?`PC`:null,t.voice.available?`Voice`:null].filter(Boolean).join(` · `);case`approval`:return`None waiting`;default:return t.office.enabled&&t.office.workers.length>0?`${t.office.workers.length} worker${t.office.workers.length===1?``:`s`}`:`No workers yet`}}function AP({usage:e,reset:t=null,real:n=!1,style:r,onClick:i}){let a=typeof e==`number`&&Number.isFinite(e);return(0,C.jsxs)(`button`,{type:`button`,className:`ob-usage-label ob-hit`,"data-widget":`usage`,title:n?`How full your Claude subscription's five-hour window is`:`Today's usage compared with your busiest day of the last 30`,style:r,onClick:i,"aria-label":a?n?`Usage ${Math.round(e)} percent of the five-hour window${t?`, resets in ${t}`:``}`:`Usage ${Math.round(e)} percent of your busiest day`:`Usage, no data yet`,children:[`USAGE `,a?`${Math.round(e)}%`:`—`,t?` · RESET ${t}`:``]})}function jP({hud:e,state:t,preview:n}){let r=TP(e.clock.seconds?1e3:15e3),i=e.clock.locale||void 0,a=r.toLocaleTimeString(i,{hour:`2-digit`,minute:`2-digit`,...e.clock.seconds?{second:`2-digit`}:{},hour12:e.clock.hour12}),o=r.toLocaleDateString(i,{weekday:`short`,day:`2-digit`,month:`short`}),s=`M330 44H560L590 20H1010L1040 44H1270`,c=t.connection===`open`;return(0,C.jsxs)(`g`,{"data-testid":`orbital-topbar`,children:[(0,C.jsx)(`path`,{className:`ob-topbar-base`,d:s}),(0,C.jsx)(`path`,{className:`ob-topbar-run`,d:s,pathLength:100}),(0,C.jsx)(`text`,{className:`ob-title`,x:`800`,y:`40`,textAnchor:`middle`,children:EP(t.assistantName||`Assistant`)}),n&&(0,C.jsx)(`text`,{className:`ob-sample-tag`,x:`800`,y:`62`,textAnchor:`middle`,children:`SAMPLE DATA · NOT REAL`}),(0,C.jsx)(`circle`,{className:c?`ob-pulse`:void 0,cx:`30`,cy:`34`,r:`4`,fill:c?`#34d399`:`#fb923c`}),(0,C.jsxs)(`text`,{className:`ob-lab`,x:`40`,y:`38`,children:[(t.assistantName||`FRIEND`).toUpperCase(),` · `,c?`ONLINE`:`OFFLINE`]}),(0,C.jsxs)(`text`,{className:`ob-dim`,x:`40`,y:`58`,children:[e.terminalLabel,` · VOICE · `,t.voice.mode,` LINK · `,typeof location>`u`?``:location.host]}),(0,C.jsxs)(`text`,{className:`ob-lab`,x:`1560`,y:`38`,textAnchor:`end`,children:[a,` · `,o]})]})}function MP({hud:e,state:t,usage:n=null,viewport:r,usageApi:i,send:a=()=>{},onHire:o,onLaunch:s,onExpand:c}){let{w:l,h:u}=NM(r),d=wP(),f=qC(l,u),p=e.preview===!0&&f===`orbit`,m=RN(p?`full`:e.density,e.widgets,f,t.approval!==null,t.widgets,p),h=p?{...t,stats:hP(Date.now()),voice:{...t.voice,mode:`listening`,level:.85}}:t,g=t.approval!==null,_=t.approval?.needsPin===!0,y=e=>e.id===`approval`?g?`orange`:`cyan`:e.tone,[b,x]=(0,v.useState)(null),[S,w]=(0,v.useState)(null),[T,E]=(0,v.useState)(!1),D=TP(3e4),O=h.stats&&h.stats.ramTotal>0?Math.round(100*h.stats.ramUsed/h.stats.ramTotal):0,k={cpu:IM(h.stats?Math.round(h.stats.cpu):0,h.stats?.at,60),ram:IM(O,h.stats?.at,60),down:IM(h.stats?.netDown??0,h.stats?.at,60),up:IM(h.stats?.netUp??0,h.stats?.at,60)},A=k.down.slice(-24),j=(0,v.useRef)(null),ee=(0,v.useCallback)(()=>{x(null),w(null),E(!1),bN()&&j.current?.focus(),j.current=null},[]),M=e=>()=>{b===null&&S===null&&!T&&(j.current=document.activeElement instanceof HTMLElement?document.activeElement:null),w(null),E(!1),x(e),c({kind:`widget`,id:e})};(0,v.useEffect)(()=>{if(b===null&&S===null&&!T||g)return;let e=e=>{e.key===`Escape`&&(e.preventDefault(),e.stopImmediatePropagation(),ee())};return window.addEventListener(`keydown`,e,!0),()=>window.removeEventListener(`keydown`,e,!0)},[b,S,T,g,ee]);let N=f===`compact`?l-16:Math.max(280,Math.min(760,l*.62)),P={x:(l-N)/2,y:u*.14,width:N,height:Math.max(220,Math.min(560,u*.7))},F=g?null:b,te=F&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`div`,{className:`ob-backdrop ob-hit`,onPointerDown:e=>{e.stopPropagation(),ee()}}),(0,C.jsx)(MM,{children:(0,C.jsx)(YN,{id:F,state:t,rect:P,readings:k,...i?{usageApi:i}:{},onClose:ee})})]}),ne=t.office.enabled&&!p,re=g||!ne?void 0:t.office.workers.find(e=>e.id===S),I=e=>{b===null&&S===null&&!T&&(j.current=document.activeElement instanceof HTMLElement?document.activeElement:null),x(null),E(!1),w(e)},ie=ne&&t.office.workers.length>0,ae=()=>{b===null&&S===null&&!T&&(j.current=document.activeElement instanceof HTMLElement?document.activeElement:null),x(null),w(null),E(!0)},oe={...P,x:Math.max(8,P.x-60),width:Math.min(l-16,P.width+120)},se=T&&ie&&!g&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`div`,{className:`ob-backdrop ob-hit`,onPointerDown:e=>{e.stopPropagation(),ee()}}),(0,C.jsx)(MM,{children:(0,C.jsx)(sP,{workers:t.office.workers,name:t.assistantName||`Friend`,rect:oe,onWorker:I,onClose:ee})})]}),ce=re&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`div`,{className:`ob-backdrop ob-hit`,onPointerDown:e=>{e.stopPropagation(),ee()}}),(0,C.jsx)(MM,{children:(0,C.jsx)(aP,{worker:re,feed:t.office.feed[re.id]??[],rect:P,send:a,onClose:ee})})]}),le=f===`compact`?l-16:Math.max(340,Math.min(480,l*.34)),L=Math.min(u-16,_?Math.max(300,Math.min(520,u*.7)):Math.max(260,Math.min(420,u*.55))),ue={x:(l-le)/2,y:(u-L)/2,width:le,height:L},de=g,R=de&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`div`,{className:`ob-backdrop ob-modal-backdrop`}),(0,C.jsx)(MM,{children:(0,C.jsx)(BM,{"data-widget":`approval`,variant:`octagon`,tone:`orange`,title:`Approvals`,running:!0,className:`ob-zone ob-hit ob-static ob-modal`,style:{position:`absolute`,left:ue.x,top:ue.y,width:ue.width,height:ue.height},children:(0,C.jsx)(gP,{approval:t.approval,send:a})})})]}),z={className:`orbital`,"data-testid":`orbital`,"data-mode":f,"data-hud-anim":e.animations,...d?{"data-paused":``}:{}},B=m.some(e=>e.id===`usage`),fe=p?{value:42,reset:null,real:!1}:NN(t.office.quota,n,D.getTime()),pe=e=>{switch(e){case`system`:return(0,C.jsx)(FM,{node:$N(h.stats),children:(0,C.jsx)(rN,{stats:h.stats})});case`network`:return(0,C.jsx)(FM,{node:tP(h.stats,A),children:(0,C.jsx)(aN,{stats:h.stats})});case`radar`:return p?(0,C.jsx)(vP,{deviceOnline:h.deviceOnline,voiceAvailable:h.voice.available,blips:pP}):(0,C.jsx)(FM,{node:rP(h.deviceOnline,h.voice.available),children:(0,C.jsx)(vP,{deviceOnline:h.deviceOnline,voiceAvailable:h.voice.available})});case`voice`:return(0,C.jsx)(FM,{node:eP(h.voice.level,h.voice.mode),children:(0,C.jsx)(CP,{level:h.voice.level,mode:h.voice.mode})});case`feed`:{let e=ne?jN(t.office.feed,t.office.workers):[],n=p?lP:e.length>0?e:h.chat,r=(0,C.jsx)(UN,{lines:n,activity:h.activity,busy:p||e.length>0?!1:h.busy,marquee:p});if(p)return r;let i=e.length>0?e:h.chat.map(e=>({text:`${e.role===`user`?`You`:`Friend`}: ${e.text}`,tone:`plain`}));return(0,C.jsx)(FM,{node:nP(i,h.activity,h.busy),children:r})}case`tickets`:{if(p)return(0,C.jsx)(bP,{cells:dP,project:`landing-page`});let e=ne?TN(t.office.tickets):[],n=ne?EN(t.office.tickets):void 0;return(0,C.jsx)(FM,{node:iP(e,n),children:(0,C.jsx)(bP,{...ne?{cells:e,...n?{project:n}:{}}:{}})})}case`budget`:return(0,C.jsx)(zN,{...p?{rings:fP}:ne?{rings:ON(t.office.workers)}:{}});default:return null}};if(f===`compact`){let n=e=>(0,C.jsx)(MM,{children:(0,C.jsx)(BM,{"data-widget":e.id,variant:`chamfer`,tone:y(e),title:e.title,className:`ob-zone ob-hit`,style:{minWidth:170,height:100,flex:`none`},role:`button`,tabIndex:0,"aria-label":e.title,onClick:M(e.id),onKeyDown:DP(M(e.id)),children:(0,C.jsx)(`p`,{className:`ob-li`,children:kP(e.id,t)})})},e.id);return(0,C.jsxs)(`div`,{...z,children:[(0,C.jsx)(zM,{}),(0,C.jsxs)(`div`,{className:`ob-chips`,children:[ie&&(0,C.jsxs)(`button`,{type:`button`,className:`ob-chip ob-hit`,onClick:ae,children:[`Team · `,t.office.workers.length]}),ne&&t.office.workers.map(e=>(0,C.jsx)(`button`,{type:`button`,className:`ob-chip ob-hit`,onClick:()=>I(e.id),children:e.name},e.id)),e.launcher.map(e=>(0,C.jsxs)(`button`,{type:`button`,className:`ob-chip ob-hit`,onClick:()=>s(e),children:[(0,C.jsx)(`span`,{"aria-hidden":`true`,children:e.icon}),` `,e.label]},e.id))]}),(0,C.jsx)(`p`,{className:`ob-compact-status`,children:OP(t)}),(0,C.jsxs)(`div`,{className:`ob-strip`,children:[m.filter(e=>e.anchor!==`centre`&&!(e.id===`approval`&&g)).map(n),B&&(0,C.jsx)(AP,{usage:fe.value,reset:fe.reset,real:fe.real,onClick:M(`usage`)})]}),te,ce,se,R]})}let me=VC(l,u),V=KC(IC,900),he=e.launcher.map(e=>({id:e.id,label:e.label,glyph:e.icon,caption:e.label,status:`idle`,onClick:()=>s(e)})),H=ne?SN(t.office.workers,!0):[],ge=e=>({id:e.id,label:e.label,glyph:e.glyph,caption:e.caption,status:e.status,onClick:()=>o?.()}),_e=H.map((e,t)=>e.kind===`hire`?ge(e):{id:e.id,label:e.label,glyph:e.glyph,caption:e.caption,status:e.status,detail:e.detail,...cP[t]?{at:cP[t].at}:{},onClick:()=>I(e.id)}),ve=p?cP.map(e=>({id:e.id,label:e.label,glyph:e.label,status:e.status,detail:e.detail,at:e.at,onClick:()=>{}})):ne?t.office.workers.length>0?_e:[...he,..._e]:he,U=GC(ve.length,IC,900),ye=fe.value,W=(e,t,n)=>{let r=HC(e,0,0,l,u);return(0,C.jsx)(`div`,{className:`ob-canvas ob-canvas-${t}`,style:{left:r.x,top:r.y,width:IC,height:900,transform:`scale(${me})`},children:n})},be=e=>{let n={left:e.box.x,top:e.box.y,width:e.box.w,height:e.box.h};return e.id===`approval`?de?null:(0,C.jsx)(MM,{children:(0,C.jsx)(`div`,{"data-widget":`approval`,className:`ob-w ob-hit ob-static`,style:n,children:g?(0,C.jsx)(BM,{variant:`octagon`,tone:`orange`,running:!0,className:`ob-approval-frame`,children:(0,C.jsx)(gP,{approval:t.approval,send:a})}):p?(0,C.jsx)(BM,{variant:`octagon`,tone:`orange`,running:!0,className:`ob-approval-frame`,children:(0,C.jsx)(gP,{approval:mP,send:()=>{}})}):(0,C.jsx)(BM,{variant:`bracket`,title:`Approvals`,children:(0,C.jsx)(gP,{approval:null,send:a})})})},e.id):(0,C.jsx)(MM,{children:(0,C.jsx)(`div`,{"data-widget":e.id,className:`ob-w ob-hit`,style:n,role:`button`,tabIndex:0,"aria-label":e.title,onClick:M(e.id),onKeyDown:DP(M(e.id)),children:pe(e.id)})},e.id)},xe=e=>m.filter(t=>t.anchor===e),Se=(t.assistantName||`FRIEND`).toUpperCase(),Ce=Math.min(1,Math.max(0,t.voice.level,t.presence.amplitude)),we=HC(`centre`,0,0,l,u);return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`div`,{className:`ob-base`,"aria-hidden":`true`,children:(0,C.jsx)(`div`,{className:`ob-canvas`,style:{left:we.x,top:we.y,width:IC,height:900,transform:`scale(${me})`},children:(0,C.jsx)(`svg`,{className:`ob-scene`,width:IC,height:900,viewBox:`0 0 ${IC} 900`,children:(0,C.jsx)(`g`,{className:`ob-disc-wrap`,style:{transform:`scale(${Number((1+.18*Ce).toFixed(3))})`},children:(0,C.jsx)(`circle`,{className:`ob-disc ob-breathe`,cx:V.cx,cy:V.cy,r:`104`,fill:`url(#ob-orbg)`,filter:`url(#ob-glow2)`})})})})}),(0,C.jsxs)(`div`,{...z,style:{"--s":me},children:[(0,C.jsx)(zM,{}),(0,C.jsx)(`div`,{className:`ob-bg`,"aria-hidden":`true`}),(0,C.jsx)(`span`,{className:`ob-corner ob-tl`,"aria-hidden":`true`}),(0,C.jsx)(`span`,{className:`ob-corner ob-tr`,"aria-hidden":`true`}),(0,C.jsx)(`span`,{className:`ob-corner ob-bl`,"aria-hidden":`true`}),(0,C.jsx)(`span`,{className:`ob-corner ob-br`,"aria-hidden":`true`}),W(`centre`,`centre`,(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`svg`,{className:`ob-scene`,width:IC,height:900,viewBox:`0 0 ${IC} 900`,"aria-hidden":`true`,children:[(0,C.jsx)(MM,{children:(0,C.jsx)(jP,{hud:e,state:h,preview:p})}),(0,C.jsx)(`circle`,{cx:V.cx,cy:V.cy,r:`104`,className:`ob-orb-ring`}),(0,C.jsx)(`circle`,{cx:V.cx,cy:V.cy,r:`104`,className:`ob-ping`}),(0,C.jsx)(`g`,{className:`ob-spin ob-fast`,children:(0,C.jsx)(`circle`,{cx:V.cx,cy:V.cy,r:`128`,className:`ob-ring-dash`})}),(0,C.jsx)(`g`,{className:`ob-spin ob-reverse`,children:(0,C.jsx)(`circle`,{cx:V.cx,cy:V.cy,r:`150`,className:`ob-ring-long`})}),(0,C.jsx)(`g`,{className:`ob-spin`,children:(0,C.jsx)(`circle`,{cx:V.cx,cy:V.cy,r:`172`,className:`ob-ring-thin`})}),(0,C.jsx)(`circle`,{cx:V.cx,cy:V.cy,r:300,className:`ob-orbit`}),(0,C.jsx)(`g`,{className:`ob-spin ob-reverse ob-slow`,children:(0,C.jsx)(`circle`,{cx:V.cx,cy:V.cy,r:`330`,className:`ob-ring-outer`})}),U.map((e,t)=>{let n={x:Math.cos(e.angle*Math.PI/180),y:Math.sin(e.angle*Math.PI/180)};return(0,C.jsx)(tN,{tone:ve[t].status===`waiting`?`orange`:`cyan`,x1:V.cx+n.x*104,y1:V.cy+n.y*104,x2:V.cx+n.x*266,y2:V.cy+n.y*266},ve[t].id)}),ve.map(e=>e.at&&e.detail&&(0,C.jsx)(`text`,{className:`ob-node-detail${e.status===`running`?` ob-grn`:e.status===`waiting`?` ob-org`:``}`,x:e.at.x,y:e.at.y,textAnchor:e.at.anchor,children:e.detail},e.id))]}),ie&&(0,C.jsxs)(`button`,{type:`button`,className:`ob-team-btn ob-hit`,style:{left:V.cx,top:V.cy+52},onClick:ae,children:[`TEAM · `,t.office.workers.length]}),(0,C.jsxs)(`div`,{className:`ob-orb-label`,style:{left:V.cx,top:V.cy},"aria-hidden":`true`,children:[(0,C.jsx)(`b`,{children:Se}),(0,C.jsx)(`small`,{children:AN(t.voice.mode,p?{enabled:!1,workers:[]}:t.office)})]}),B&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`div`,{className:`ob-usage-ring`,style:{left:V.cx-230,top:V.cy-230,width:460,height:460},children:(0,C.jsx)(QM,{value:ye??0,radius:205,size:460})}),(0,C.jsx)(AP,{usage:ye,reset:fe.reset,real:fe.real,style:{position:`absolute`,left:800,top:692,transform:`translate(-50%, -50%)`},onClick:M(`usage`)})]}),U.map((e,t)=>{let n=ve[t];return(0,C.jsx)(MM,{children:(0,C.jsx)(eN,{x:e.x,y:e.y,label:n.label,glyph:n.glyph,status:n.status,...n.caption?{caption:n.caption}:{},...n.detail?{detail:n.detail}:{},onClick:n.onClick})},n.id)}),(0,C.jsx)(`div`,{className:`ob-cmd`,"aria-hidden":`true`,children:(0,C.jsx)(`small`,{children:`[ HOLD TO TALK ]`})})]})),W(`left`,`left`,xe(`left`).map(be)),W(`right`,`right`,xe(`right`).map(be)),te,ce,se,R]})]})}var NP=3e5,PP=(e=new Date)=>`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`,FP={today:0,peak:0,share:null,error:!1};function IP(e=oC,t=!0){let[n,r]=(0,v.useState)(FP);return(0,v.useEffect)(()=>{if(!t)return;let n=!0,i=()=>e.summary(30).then(e=>{if(!n)return;let t=e.days.map(e=>({day:e.day,n:e.input+e.output})),i=Math.max(0,...t.map(e=>e.n)),a=t.find(e=>e.day===PP())?.n??0;r({today:a,peak:i,share:i>0?Math.min(1,Math.max(0,a/i)):null,error:!1})}).catch(()=>n&&r({...FP,error:!0}));i();let a=setInterval(()=>void i(),NP);return()=>{n=!1,clearInterval(a)}},[e,t]),n}var LP=(e,t=18)=>(0,C.jsx)(`svg`,{width:t,height:t,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:e}),RP=()=>LP((0,C.jsx)(`path`,{d:`M7 4.5v15l12-7.5z`,fill:`currentColor`})),zP=()=>LP((0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`rect`,{x:`6`,y:`4.5`,width:`4`,height:`15`,fill:`currentColor`}),(0,C.jsx)(`rect`,{x:`14`,y:`4.5`,width:`4`,height:`15`,fill:`currentColor`})]})),BP=()=>LP((0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`path`,{d:`M5 5v14l10-7z`,fill:`currentColor`}),(0,C.jsx)(`path`,{d:`M18 5v14`})]})),VP=()=>LP((0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`path`,{d:`M19 5v14L9 12z`,fill:`currentColor`}),(0,C.jsx)(`path`,{d:`M6 5v14`})]})),HP=()=>LP((0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`path`,{d:`M3 7h3.5c3 0 4 2 5.5 5s2.500 5 5.500 5H21`}),(0,C.jsx)(`path`,{d:`M3 17h3.5c1.500 0 2.500-.6 3.400-1.800M13.500 8.800C14.500 7.600 15.500 7 17 7h4`}),(0,C.jsx)(`path`,{d:`m18.500 4.500 2.500 2.500-2.500 2.500M18.500 14.500l2.500 2.500-2.500 2.500`})]})),UP=()=>LP((0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`path`,{d:`M17 3l3 3-3 3`}),(0,C.jsx)(`path`,{d:`M4 11V9a3 3 0 0 1 3-3h13M7 21l-3-3 3-3`}),(0,C.jsx)(`path`,{d:`M20 13v2a3 3 0 0 1-3 3H4`})]})),WP=()=>LP((0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`path`,{d:`M4 9.500v5h3.500L12 18.500v-13L7.500 9.500z`,fill:`currentColor`}),(0,C.jsx)(`path`,{d:`M15.500 9a4 4 0 0 1 0 6M18 6.500a7.500 7.500 0 0 1 0 11`})]})),GP=()=>LP((0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`path`,{d:`M4 9.500v5h3.500L12 18.500v-13L7.500 9.500z`,fill:`currentColor`}),(0,C.jsx)(`path`,{d:`m16 9 5 6M21 9l-5 6`})]})),KP=()=>LP((0,C.jsx)(`path`,{d:`M4 9V4h5M20 9V4h-5M4 15v5h5M20 15v5h-5`})),qP=()=>LP((0,C.jsx)(`path`,{d:`M9 4v5H4M15 4v5h5M9 20v-5H4M15 20v-5h5`})),JP=()=>LP((0,C.jsx)(`path`,{d:`M6 6l12 12M18 6 6 18`})),YP=()=>LP((0,C.jsx)(`path`,{d:`M9 18V6l10-2v12`}),22),XP=56,ZP=()=>({bars:new Float32Array(XP),bass:0,left:0,right:0});function QP(e,t,n,r,i){let a=n?.82:.9;if(t&&n){t.getByteFrequencyData(i);let n=Math.min(i.length,96);for(let t=0;t<XP;t++){let r=Math.min(n-1,Math.floor((t/XP)**1.6*n));e.bars[t]=Math.max((i[r]??0)/255,e.bars[t]*a)}}else if(n)for(let t=0;t<XP;t++)e.bars[t]=Math.max(.12+.28*Math.abs(Math.sin(r/420+t*.55)*Math.cos(r/900+t*.21)),e.bars[t]*a);else for(let t=0;t<XP;t++)e.bars[t]=e.bars[t]*a;let o=0;for(let t=0;t<6;t++)o+=e.bars[t];e.bass=Math.min(1,o/6*1.15);let s=0,c=0;for(let t=0;t<XP/2;t++)s+=e.bars[t],c+=e.bars[t+XP/2];e.left=Math.min(1,s/(XP/2)*1.6),e.right=Math.min(1,c/(XP/2)*3.2)}function $P({progress:e,playing:t,cover:n,analyser:r,levels:i,visualizer:a,animate:o,size:s}){let c=(0,v.useRef)(null),l=(0,v.useRef)(null),u=(0,v.useRef)(new Uint8Array(new ArrayBuffer(128)));(0,v.useEffect)(()=>{let e=c.current,n=e?.getContext(`2d`);if(!e||!n||!o)return;let d=0,f=Math.min(2,window.devicePixelRatio||1);e.width=e.height=Math.round(s*f);let p=getComputedStyle(e).getPropertyValue(`--accent`).trim()||`#3fd8ff`,m=e=>{if(QP(i,r,t,e,u.current),l.current?.style.setProperty(`--bass`,i.bass.toFixed(3)),n.setTransform(f,0,0,f,0,0),n.clearRect(0,0,s,s),a){let e=s/2,t=s*.335,r=s*.135;n.lineCap=`round`,n.lineWidth=Math.max(1.5,s/90);for(let a=0;a<XP;a++){let o=a/XP*Math.PI*2-Math.PI/2,s=i.bars[a],c=2+s*r;n.strokeStyle=p,n.globalAlpha=.35+s*.65,n.beginPath(),n.moveTo(e+Math.cos(o)*t,e+Math.sin(o)*t),n.lineTo(e+Math.cos(o)*(t+c),e+Math.sin(o)*(t+c)),n.stroke()}n.globalAlpha=1}(t||!i.bars.every(e=>e<.01)||a)&&(d=requestAnimationFrame(m))};return d=requestAnimationFrame(m),()=>cancelAnimationFrame(d)},[r,t,a,o,s,i]);let d=Math.max(0,Math.min(1,e))*100;return(0,C.jsxs)(`div`,{ref:l,className:`hud-dial${t?` playing`:``}`,style:{width:s,height:s},role:`img`,"aria-label":`Playback dial`,children:[(0,C.jsxs)(`svg`,{className:`hud-dial-svg`,viewBox:`0 0 200 200`,"aria-hidden":`true`,children:[(0,C.jsx)(`circle`,{className:`hud-dial-ticks`,cx:`100`,cy:`100`,r:`96`}),(0,C.jsx)(`circle`,{className:`hud-dial-track`,cx:`100`,cy:`100`,r:`88`}),(0,C.jsx)(`circle`,{className:`hud-dial-arc`,cx:`100`,cy:`100`,r:`88`,pathLength:`100`,strokeDasharray:`${d} 100`,transform:`rotate(-90 100 100)`}),(0,C.jsx)(`circle`,{className:`hud-dial-inner`,cx:`100`,cy:`100`,r:`62`}),(0,C.jsxs)(`g`,{className:`hud-needle`,children:[(0,C.jsx)(`line`,{x1:`100`,y1:`100`,x2:`100`,y2:`14`}),(0,C.jsx)(`circle`,{cx:`100`,cy:`14`,r:`2.500`})]})]}),(0,C.jsx)(`canvas`,{ref:c,className:`hud-spectrum`,style:{width:s,height:s},"aria-hidden":`true`}),(0,C.jsx)(`div`,{className:`hud-cover`,style:n?{backgroundImage:`url("${n}")`}:void 0,children:!n&&(0,C.jsx)(YP,{})})]})}var eF=e=>{let t=Math.max(0,Math.floor(Number.isFinite(e)?e:0));return`${Math.floor(t/60)}:${String(t%60).padStart(2,`0`)}`},tF=new Map,nF=e=>{let t=od(e);return t&&t.source===`local`?t.id:null},rF=e=>od(e)?.source===`spotify`,iF=e=>od(e)?.source===`soundcloud`,aF=e=>od(e)?.source===`audius`,oF={spotify:`Spotify`,soundcloud:`SoundCloud`,audius:`Audius`};function sF(e){let[t,n]=(0,v.useState)(e?tF.get(e)??!1:!1);return(0,v.useEffect)(()=>{if(!e)return n(!1);if(tF.has(e))return n(tF.get(e));let t=!0,r=new Image;r.onload=()=>{tF.set(e,!0),t&&n(!0)},r.onerror=()=>{tF.set(e,!1),t&&n(!1)};let i=nF(e);return i?(r.src=`/api/music/cover/${i}`,()=>{t=!1}):n(!1)},[e]),e&&t?`/api/music/cover/${nF(e)}`:null}async function cF(e,t){let n=await fetch(`/api/music/library?q=${encodeURIComponent(e)}&limit=${t}`);return n.ok?await n.json():{tracks:[],total:0}}function lF(){let[e,t]=(0,v.useState)(null);return(0,v.useEffect)(()=>{let e=!0;return fetch(`/api/music/sources`).then(e=>e.ok?e.json():null).then(n=>{let r={};for(let e of[`spotify`,`soundcloud`,`audius`]){let t=n?.sources?.find(t=>t.id===e)?.status;t&&(r[e]={connected:t.connected,needs:t.needs})}e&&n&&t(r)}).catch(()=>{}),()=>{e=!1}},[]),e}async function uF(e,t,n){let r=await fetch(`/api/music/search?q=${encodeURIComponent(t)}&source=${e}&limit=${n}`);if(!r.ok)return{tracks:[],total:0};let i=((await r.json()).tracks??[]).map(e=>({id:e.ref,title:e.title,artist:e.artist,album:e.album,durationSec:e.durationSec}));return{tracks:i,total:i.length}}var dF=e=>({id:e.id,title:e.title,artist:e.artist,album:e.album,durationSec:e.durationSec});function fF({levels:e,animate:t,side:n}){let r=(0,v.useRef)(null);return(0,v.useEffect)(()=>{if(!t)return;let i=0,a=r.current,o=()=>{if(a){let t=n===`left`?e.left:e.right,r=Math.round(t*12);a.querySelectorAll(`i`).forEach((e,t)=>e.classList.toggle(`on`,t<r))}i=requestAnimationFrame(o)};return i=requestAnimationFrame(o),()=>cancelAnimationFrame(i)},[e,t,n]),(0,C.jsx)(`div`,{ref:r,className:`hud-levels ${n}`,"aria-hidden":`true`,children:Array.from({length:12},(e,t)=>(0,C.jsx)(`i`,{},t))})}function pF({player:e,anim:t}){let{state:n,dispatch:r}=e,i=(0,v.useCallback)(async()=>{if(n.queue.length>0)return r({type:`resume`});let e=await cF(``,500);r({type:`play`,tracks:e.tracks.map(dF),mode:`replace`,...n.shuffle?{shuffle:!0}:{}})},[n.queue.length,n.shuffle,r]),a=e=>n=>{t!==`off`&&AM(n),e()};return(0,C.jsxs)(`div`,{className:`hud-controls`,role:`group`,"aria-label":`Player controls`,children:[(0,C.jsx)(`button`,{type:`button`,className:`hud-btn`,"aria-label":`Shuffle`,"aria-pressed":n.shuffle,title:`Shuffle`,onClick:()=>r({type:`shuffle`}),children:(0,C.jsx)(HP,{})}),(0,C.jsx)(`button`,{type:`button`,className:`hud-btn`,"aria-label":`Previous track`,title:`Previous`,onPointerDown:a(()=>{}),onClick:()=>r({type:`previous`}),children:(0,C.jsx)(VP,{})}),(0,C.jsx)(`button`,{type:`button`,className:`hud-btn hud-btn-main`,"aria-label":n.playing?`Pause`:`Play`,title:n.playing?`Pause`:`Play`,onPointerDown:a(()=>{}),onClick:()=>n.playing?r({type:`pause`}):void i(),children:n.playing?(0,C.jsx)(zP,{}):(0,C.jsx)(RP,{})}),(0,C.jsx)(`button`,{type:`button`,className:`hud-btn`,"aria-label":`Next track`,title:`Next`,onPointerDown:a(()=>{}),onClick:()=>r({type:`next`}),children:(0,C.jsx)(BP,{})}),(0,C.jsxs)(`button`,{type:`button`,className:`hud-btn${n.repeat===`off`?``:` on`}`,"aria-label":`Repeat: ${n.repeat}`,title:`Repeat: ${n.repeat}`,onClick:()=>r({type:`repeat`,mode:n.repeat===`off`?`all`:n.repeat===`all`?`one`:`off`}),children:[(0,C.jsx)(UP,{}),n.repeat===`one`&&(0,C.jsx)(`sup`,{children:`1`})]})]})}function mF({player:e}){let{state:t,dispatch:n}=e,r=t.duration>0?t.position/t.duration*100:0;return(0,C.jsxs)(`div`,{className:`hud-timeline`,children:[(0,C.jsx)(`span`,{className:`hud-time`,children:eF(t.position)}),(0,C.jsx)(`input`,{type:`range`,className:`hud-range`,"aria-label":`Position`,min:0,max:Math.max(1,Math.floor(t.duration)),step:1,value:Math.min(Math.floor(t.position),Math.max(1,Math.floor(t.duration))),style:{"--fill":`${r}%`},disabled:t.duration<=0,onChange:e=>n({type:`seek`,seconds:Number(e.target.value)})}),(0,C.jsxs)(`span`,{className:`hud-time`,children:[`-`,eF(Math.max(0,t.duration-t.position))]})]})}function hF({player:e}){let{state:t,dispatch:n}=e;return(0,C.jsxs)(`div`,{className:`hud-volume`,children:[(0,C.jsx)(`button`,{type:`button`,className:`hud-btn`,"aria-label":t.muted?`Unmute`:`Mute`,onClick:()=>n({type:`mute`}),children:t.muted||t.volume===0?(0,C.jsx)(GP,{}):(0,C.jsx)(WP,{})}),(0,C.jsx)(`input`,{type:`range`,className:`hud-range`,"aria-label":`Volume`,min:0,max:100,value:t.muted?0:t.volume,style:{"--fill":`${t.muted?0:t.volume}%`},onChange:e=>n({type:`volume`,level:Number(e.target.value)})})]})}function gF({player:e,anim:t}){let{state:n,dispatch:r}=e,[i,a]=(0,v.useState)(n.queue.length?`queue`:`library`),[o,s]=(0,v.useState)(``),[c,l]=(0,v.useState)(`folder`),[u,d]=(0,v.useState)(null),f=lF(),p=[`spotify`,`soundcloud`,`audius`].filter(e=>f?.[e]?.connected),m=c!==`folder`&&p.includes(c)?c:null,h=m?f?.[m]?.needs:null;(0,v.useEffect)(()=>{if(i!==`library`)return;let e=!0;if(m&&!o.trim()){d(null);return}let t=()=>m?uF(m,o.trim(),30):cF(o,100),n=setTimeout(()=>void t().then(t=>e&&d(t)),o?250:0);return()=>{e=!1,clearTimeout(n)}},[i,o,m]);let g=i===`queue`?n.queue.map((e,t)=>({track:e,index:t})):(u?.tracks??[]).map((e,t)=>({track:dF(e),index:t}));return(0,C.jsxs)(`div`,{className:`hud-playlist`,children:[(0,C.jsxs)(`div`,{className:`hud-tabs`,role:`tablist`,children:[[`queue`,`library`].map(e=>(0,C.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":i===e,className:`hud-chip${i===e?` on`:``}`,onClick:()=>a(e),children:e===`queue`?`Queue (${n.queue.length})`:`Library`},e)),i===`queue`&&n.queue.length>0&&(0,C.jsx)(`button`,{type:`button`,className:`hud-chip`,onClick:()=>r({type:`clear`}),children:`Clear`})]}),i===`library`&&p.length>0&&(0,C.jsx)(`div`,{className:`hud-tabs`,role:`tablist`,"aria-label":`Where to look`,children:[`folder`,...p].map(e=>(0,C.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":c===e,className:`hud-chip${c===e?` on`:``}`,onClick:()=>{l(e),d(null)},children:e===`folder`?`Folder`:oF[e]},e))}),i===`library`&&(0,C.jsx)(`input`,{className:`hud-search`,type:`search`,placeholder:`Search title, artist or album`,"aria-label":`Search the music`,value:o,onChange:e=>s(e.target.value)}),(0,C.jsxs)(`ul`,{className:`hud-list`,children:[g.length===0&&(0,C.jsx)(`li`,{className:`hud-empty`,children:i===`queue`?`The queue is empty.`:m&&!o.trim()?`Type to search ${oF[m]}.`:u?`No music matches.`:`Loading…`}),i===`library`&&m&&h&&(0,C.jsx)(`li`,{className:`hud-empty`,children:h}),g.map(({track:e,index:a},o)=>{let s=i===`queue`&&a===n.index;return(0,C.jsxs)(`li`,{className:`hud-tab hud-cut${s?` current`:``}${t===`full`?` hud-boot`:``}`,style:{"--i":Math.min(o,12)},children:[(0,C.jsxs)(`button`,{type:`button`,className:`hud-tab-main`,"aria-current":s?`true`:void 0,onPointerDown:t===`off`?void 0:AM,onClick:()=>r(i===`queue`?{type:`jump`,index:a}:{type:`play`,tracks:(u?.tracks??[]).map(dF),mode:`replace`,start:a}),children:[(0,C.jsx)(`span`,{className:`hud-tab-title`,children:e.title}),(0,C.jsxs)(`small`,{children:[e.artist||e.album,rF(e.id)&&(0,C.jsx)(`em`,{className:`hud-source`,children:`SPOTIFY`}),iF(e.id)&&(0,C.jsx)(`em`,{className:`hud-source`,children:`SOUNDCLOUD`}),aF(e.id)&&(0,C.jsx)(`em`,{className:`hud-source`,children:`AUDIUS`})]})]}),i===`library`&&(0,C.jsx)(`button`,{type:`button`,className:`hud-mini`,"aria-label":`Add ${e.title} to the queue`,title:`Add to the queue`,onClick:()=>r({type:`play`,tracks:[e],mode:`add`}),children:`+`}),i===`queue`&&(0,C.jsx)(`button`,{type:`button`,className:`hud-mini`,"aria-label":`Remove ${e.title} from the queue`,title:`Remove`,onClick:()=>r({type:`remove`,index:a}),children:`×`})]},`${e.id}-${a}`)})]})]})}function _F({player:e,music:t,animations:n}){let{state:r,dispatch:i,current:a,blocked:o,notice:s,analyser:c,unlock:l}=e,u=(0,v.useMemo)(ZP,[]),d=sF(a?.id),f=r.view===`full`,p=kM(a?.title??``,n===`full`);if(!t?.folderSet||r.view===`hidden`)return null;let m=r.duration>0?r.position/r.duration:0,h=n!==`off`;return(0,C.jsxs)(xe,{id:`music`,label:`Music player`,wholeBox:!0,testId:`music`,className:`hud hud-music hud-cut ${f?`full`:`mini`}${r.playing?` playing`:``}${n===`full`?` hud-boot`:``}`,children:[(0,C.jsxs)(`header`,{className:`hud-music-head`,children:[(0,C.jsx)(`span`,{className:`hud-kicker`,children:`Media player`}),(0,C.jsxs)(`span`,{className:`hud-head-actions`,children:[(0,C.jsx)(`button`,{type:`button`,className:`hud-btn`,"aria-label":f?`Smaller player`:`Bigger player`,title:f?`Smaller`:`Bigger`,onClick:()=>i({type:`view`,view:f?`mini`:`full`}),children:f?(0,C.jsx)(qP,{}):(0,C.jsx)(KP,{})}),(0,C.jsx)(`button`,{type:`button`,className:`hud-btn`,"aria-label":`Hide the player`,title:`Hide (the music keeps playing)`,onClick:()=>i({type:`view`,view:`hidden`}),children:(0,C.jsx)(JP,{})})]})]}),(0,C.jsxs)(`div`,{className:`hud-music-body`,children:[(0,C.jsxs)(`div`,{className:`hud-music-left`,children:[f&&(0,C.jsx)(fF,{levels:u,animate:h,side:`left`}),(0,C.jsx)($P,{progress:m,playing:r.playing,cover:d,analyser:c,levels:u,visualizer:t.visualizer,animate:h,size:f?250:112}),f&&(0,C.jsx)(fF,{levels:u,animate:h,side:`right`})]}),(0,C.jsxs)(`div`,{className:`hud-music-main`,children:[(0,C.jsxs)(`div`,{className:`hud-now`,"aria-live":`polite`,children:[(0,C.jsx)(`b`,{className:`hud-title`,children:a?p:`Nothing playing`}),(0,C.jsxs)(`small`,{className:`hud-sub`,children:[a?[a.artist,a.album].filter(Boolean).join(` — `):`Press play, or ask for some music.`,a&&rF(a.id)&&(0,C.jsx)(`em`,{className:`hud-source`,children:`SPOTIFY`}),a&&iF(a.id)&&(0,C.jsx)(`em`,{className:`hud-source`,children:`SOUNDCLOUD`}),a&&aF(a.id)&&(0,C.jsx)(`em`,{className:`hud-source`,children:`AUDIUS`}),e.remote&&(0,C.jsx)(`em`,{className:`hud-source`,children:`THIS PC`})]})]}),(0,C.jsx)(mF,{player:e}),(0,C.jsx)(pF,{player:e,anim:n}),f&&(0,C.jsx)(hF,{player:e}),s&&(0,C.jsx)(`p`,{className:`hud-notice`,role:`status`,children:s}),o&&(0,C.jsx)(`button`,{type:`button`,className:`hud-unlock`,onClick:l,children:`Tap to enable sound`})]}),f&&(0,C.jsx)(gF,{player:e,anim:n})]})]})}var vF=/^spotify:/,yF=class{local;makeSpotify;active;spotify=null;listeners=new Map;wrapped=new Map;vol=1;mute=!1;pre=``;constructor(e,t){this.local=e,this.makeSpotify=t,this.active=e}get element(){return this.local}get error(){return this.active.error??null}wrap(e){let t=this.wrapped.get(e);return t||(t={local:()=>{this.active===this.local&&e()},spot:()=>{this.spotify&&this.active===this.spotify&&e()}},this.wrapped.set(e,t)),t}spot(){if(!this.spotify){let e=this.makeSpotify();e.volume=this.vol,e.muted=this.mute,e.preload=this.pre;for(let[t,n]of this.listeners)for(let r of n)e.addEventListener(t,this.wrap(r).spot);this.spotify=e}return this.spotify}dispose(){this.spotify?.dispose?.(),this.spotify=null,this.active=this.local}get src(){return this.active.src}set src(e){let t=vF.test(e)?this.spot():this.local;t===this.active?e===``&&this.active.pause():(this.active.pause(),this.active=t),this.active.src=e}get currentTime(){return this.active.currentTime}set currentTime(e){this.active.currentTime=e}get duration(){return this.active.duration}get paused(){return this.active.paused}get volume(){return this.vol}set volume(e){this.vol=e,this.local.volume=e,this.spotify&&(this.spotify.volume=e)}get muted(){return this.mute}set muted(e){this.mute=e,this.local.muted=e,this.spotify&&(this.spotify.muted=e)}get preload(){return this.pre}set preload(e){this.pre=e,this.local.preload=e,this.spotify&&(this.spotify.preload=e)}play(){return this.active.play()}pause(){this.active.pause()}addEventListener(e,t){let n=this.listeners.get(e);n||this.listeners.set(e,n=new Set),n.add(t);let r=this.wrap(t);this.local.addEventListener(e,r.local),this.spotify?.addEventListener(e,r.spot)}removeEventListener(e,t){this.listeners.get(e)?.delete(t);let n=this.wrap(t);this.local.removeEventListener(e,n.local),this.spotify?.removeEventListener(e,n.spot)}},bF=/^spotify:([A-Za-z0-9_-]{1,64})$/,xF=`Spotify Premium is needed to play on this screen.`;async function SF(){let e=await fetch(`/api/music/spotify/token`,{cache:`no-store`});if(!e.ok)throw Error(`Spotify is not connected.`);return(await e.json()).accessToken}function CF(){let e=window;return e.Spotify?Promise.resolve(e.Spotify):new Promise((t,n)=>{e.onSpotifyWebPlaybackSDKReady=()=>e.Spotify?t(e.Spotify):n(Error(`no sdk`));let r=document.createElement(`script`);r.src=`https://sdk.scdn.co/spotify-player.js`,r.async=!0,r.onerror=()=>n(Error(`blocked`)),document.head.appendChild(r)})}function wF(e){let t=e.fetch??((...e)=>fetch(...e)),n=e.now??Date.now,r=new Map,i=null,a=null,o=null,s=null,c=!1,l=null,u=null,d=0,f=0,p=0,m=!0,h=1,g=!1,_,v=e=>{for(let t of r.get(e)??[])t()},y=()=>g?0:h,b=()=>{_&&clearInterval(_),_=void 0},x=()=>{_||=setInterval(()=>v(`timeupdate`),250)},S={error:null,preload:``,get src(){return s??``},set src(e){let t=bF.exec(e);c=e!==``&&!t,s=t?e:null,l=null,u=null,d=0,p=0,S.error=null,t||b()},get currentTime(){return m?d:d+(n()-f)/1e3},set currentTime(e){d=e,f=n(),i?.seek(Math.round(e*1e3)).catch(()=>{})},get duration(){return p},get paused(){return m},get volume(){return h},set volume(e){h=e,i?.setVolume(y()).catch(()=>{})},get muted(){return g},set muted(e){g=e,i?.setVolume(y()).catch(()=>{})},async play(){if(c||!s)throw Error(`That is not a Spotify track.`);let r=bF.exec(s),a=s,o=await T();if(s!==a)return;if(l===s){await i?.resume().catch(()=>{}),m=!1,f=n(),x();return}let u=await e.getToken().catch(()=>null);if(!u)throw C(`Spotify is not connected. Connect it in Plugins, Spotify.`);let d;try{d=await t(`https://api.spotify.com/v1/me/player/play?device_id=${encodeURIComponent(o)}`,{method:`PUT`,headers:{authorization:`Bearer ${u}`,"content-type":`application/json`},body:JSON.stringify({uris:[`spotify:track:${r[1]}`]})})}catch{throw C(`Friend could not reach Spotify right now.`)}if(d.status===403)throw C(xF);if(d.status===401)throw C(`Spotify sign-in has ended. Reconnect Spotify in Plugins, Spotify.`);if(d.status===404)throw C(`Spotify could not find this screen or that track.`);if(d.status===429)throw C(`Spotify is asking Friend to slow down. Try again in a minute.`);if(!d.ok)throw C(`Spotify could not play that.`);s===a&&(l=a,m=!1,f=n(),x())},pause(){m=!0,d+=(n()-f)/1e3,f=n(),b(),i?.pause().catch(()=>{})},dispose(){b();try{i?.disconnect()}catch{}i=null,a=null,s=null,l=null},addEventListener(e,t){let n=r.get(e);n||r.set(e,n=new Set),n.add(t)},removeEventListener(e,t){r.get(e)?.delete(t)}};function C(e){S.error=e,m=!0,b(),v(`error`);let t=Error(e),n=o;return o=null,n?.reject(t),t}function w(e){if(!e)return;d=e.position/1e3,f=n(),p=e.duration/1e3,m=e.paused,v(`timeupdate`),v(`loadedmetadata`),v(`durationchange`);let t=s?bF.exec(s)?.[1]:void 0;t&&e.paused&&e.position===0&&u!==s&&(e.track_window.previous_tracks??[]).some(e=>e.id===t)&&(u=s,b(),v(`ended`))}function T(){if(a)return Promise.resolve(a);if(o)return o.promise;let t,n,r=new Promise((e,r)=>{t=e,n=r}),s={promise:r,resolve:t,reject:n};o=s;let c=setTimeout(()=>{o===s&&C(`Spotify's player did not start. Check that this browser allows Spotify's player, then try again.`)},e.readyTimeoutMs??15e3),l=()=>clearTimeout(c);return r.then(l,l),(async()=>{try{if(!i){let t;try{t=await(e.loadSdk??CF)()}catch{o===s&&C(`Spotify's player could not be loaded. Check that nothing blocks sdk.scdn.co.`);return}let n=new t.Player({name:e.deviceName??`Friend`,volume:y(),getOAuthToken:t=>{e.getToken().then(t,()=>{})}});i=n,n.addListener(`ready`,(e=>{a=e.device_id;let t=o;o=null,t?.resolve(e.device_id)})),n.addListener(`not_ready`,(()=>{a=null})),n.addListener(`player_state_changed`,(e=>w(e))),n.addListener(`account_error`,(()=>void C(xF))),n.addListener(`authentication_error`,(()=>void C(`Spotify sign-in has ended. Reconnect Spotify in Plugins, Spotify.`))),n.addListener(`initialization_error`,(()=>void C(`Spotify's player does not work in this browser.`))),n.addListener(`playback_error`,(()=>void C(`Spotify could not play that.`)))}!await i.connect()&&o===s&&C(`Spotify's player could not connect.`)}catch{o===s&&C(`Spotify's player could not connect.`)}})(),r}return S}var TF=e=>{let t=od(e);return t?t.source===`local`?`/api/music/track/${t.id}`:t.source===`soundcloud`||t.source===`audius`?`/api/music/stream/${e}`:e:`/api/music/track/${e}`},EF=(e,t)=>Dd(e,t),DF=`friend.music`,OF=1e3,kF=1.5,AF=()=>{try{return JSON.parse(localStorage.getItem(DF)??`{}`)}catch{return{}}},jF=e=>{try{localStorage.setItem(DF,JSON.stringify({volume:e.volume,muted:e.muted,shuffle:e.shuffle,repeat:e.repeat,view:e.view}))}catch{}};function MF({music:e,cmd:t,send:n,connection:r,createAudio:i,createSpotify:a,remote:o=!1}){let[s,c]=(0,v.useReducer)(EF,void 0,()=>{let e=AF();return Cd({volume:e.volume??70,shuffle:e.shuffle??!1,repeat:e.repeat??`all`,view:e.view??`mini`})}),[l,u]=(0,v.useState)(!1),[d,f]=(0,v.useState)(null),[p,m]=(0,v.useState)(null),h=(0,v.useRef)(null),g=(0,v.useRef)(!1),_=(0,v.useRef)(s);_.current=s;let y=(0,v.useRef)(!1),b=(0,v.useRef)(null),x=(0,v.useRef)(0),S=(0,v.useRef)(!1);(0,v.useEffect)(()=>{if(!e||S.current)return;S.current=!0;let t=AF();c({type:`volume`,level:t.volume??e.volume}),c({type:`repeat`,mode:t.repeat??e.repeat}),(t.shuffle??e.shuffle)&&c({type:`shuffle`,on:!0}),c({type:`view`,view:t.view??e.startView}),t.muted&&c({type:`mute`,on:!0})},[e]);let C=()=>{if(!h.current){let e=new yF(i?i():new Audio,a??(()=>wF({getToken:SF})));e.preload=`auto`,h.current=e}return h.current},w=(0,v.useRef)(!1),T=(0,v.useCallback)(()=>{let e=h.current;if(e&&e.src){w.current=!0;try{let t=e.play();t&&typeof t.then==`function`?t.then(()=>{w.current=!1,u(!1)},()=>{w.current=!1;let e=h.current?.error??null;e?f(e):u(!0)}):(w.current=!1,u(!1))}catch{w.current=!1,u(!0)}E.current||O()}},[]),E=(0,v.useRef)(!1),D=(0,v.useRef)(null),O=()=>{let e=h.current,t=e instanceof yF?e.element:e,n=typeof window<`u`?window.AudioContext??window.webkitAudioContext:void 0;if(t&&n&&typeof t.play==`function`)try{let e=new n;D.current=e;let r=e.createMediaElementSource(t),i=e.createAnalyser();i.fftSize=256,i.smoothingTimeConstant=.82,r.connect(i),i.connect(e.destination),E.current=!0,m(i)}catch{E.current=!0}};(0,v.useEffect)(()=>{if(o)return;let e=C(),t=0,n=()=>{let n=Date.now();n-t<250||(t=n,c({type:`time`,position:e.currentTime||0,duration:Number.isFinite(e.duration)?e.duration:0}))},r=()=>c({type:`time`,position:e.currentTime||0,duration:Number.isFinite(e.duration)?e.duration:0}),i=()=>c({type:`ended`}),a=()=>{let t=e.error??null;f(t),c(t?{type:`pause`}:{type:`failed`})};return e.addEventListener(`timeupdate`,n),e.addEventListener(`loadedmetadata`,r),e.addEventListener(`durationchange`,r),e.addEventListener(`ended`,i),e.addEventListener(`error`,a),()=>{e.removeEventListener(`timeupdate`,n),e.removeEventListener(`loadedmetadata`,r),e.removeEventListener(`durationchange`,r),e.removeEventListener(`ended`,i),e.removeEventListener(`error`,a),e.pause(),D.current?.close().catch(()=>{}),D.current=null,e.dispose(),b.current=null,h.current=null,E.current=!1,m(null)}},[o]),(0,v.useEffect)(()=>{o&&c({type:`stop`})},[o]);let k=s.index>=0?s.queue[s.index]??null:null;(0,v.useEffect)(()=>{let e=h.current;if(o||!e)return;let t=k?.id??null;if(t!==b.current){if(b.current=t,!t){e.pause(),e.src=``;return}f(null),e.src=TF(t),s.playing&&T()}},[k?.id,s.playing,T,o]),(0,v.useEffect)(()=>{let e=h.current;!o&&e&&e.src&&(s.playing&&e.paused&&!g.current&&!w.current?T():!s.playing&&!e.paused&&e.pause())},[s.playing,s.position,T,o]),(0,v.useEffect)(()=>{let e=h.current;e&&(e.volume=s.volume/100*XD.level,e.muted=s.muted)},[s.volume,s.muted]),(0,v.useEffect)(()=>XD.subscribe(e=>{let t=h.current;t&&(t.volume=_.current.volume/100*e)}),[]),(0,v.useEffect)(()=>{let e=h.current;e&&e.src&&Math.abs((e.currentTime||0)-s.position)>kF&&(e.currentTime=s.position)},[s.position]),(0,v.useEffect)(()=>jF(s),[s.volume,s.muted,s.shuffle,s.repeat,s.view]),(0,v.useEffect)(()=>{if(!t||t.n===x.current)return;x.current=t.n;let e=Od(t.command);e&&c(e)},[t]),(0,v.useEffect)(()=>{let e=()=>{y.current=!0,g.current&&T()};return window.addEventListener(`pointerdown`,e,{passive:!0}),window.addEventListener(`keydown`,e),()=>{window.removeEventListener(`pointerdown`,e),window.removeEventListener(`keydown`,e)}},[T]),g.current=l;let A=(0,v.useRef)(0);return(0,v.useEffect)(()=>{if(r!==`open`||o)return;let e=()=>{let e=_.current,t=e.index>=0?e.queue[e.index]:void 0;A.current=Date.now(),n({type:`music.state`,state:{playing:e.playing,trackId:t?.id??null,title:t?.title??``,artist:t?.artist??``,album:t?.album??``,position:e.position,duration:e.duration,volume:e.volume,muted:e.muted,shuffle:e.shuffle,repeat:e.repeat,view:e.view,queue:e.queue.slice(0,50).map(e=>({id:e.id,title:e.title.slice(0,200)})),index:e.index,active:(typeof document>`u`||document.visibilityState===`visible`)&&y.current}})};e();let t=setInterval(()=>s.playing&&Date.now()-A.current>=OF&&e(),OF);return()=>clearInterval(t)},[r,o,k?.id,s.playing,s.volume,s.muted,s.shuffle,s.repeat,s.view,s.queue.length,s.index]),(0,v.useEffect)(()=>{let e=typeof navigator<`u`?navigator.mediaSession:void 0;if(e&&!o)try{k&&typeof MediaMetadata<`u`&&(e.metadata=new MediaMetadata({title:k.title,artist:k.artist,album:k.album,artwork:[{src:`/api/music/cover/${k.id}`}]})),e.playbackState=s.playing?`playing`:k?`paused`:`none`,e.setActionHandler(`play`,()=>c({type:`resume`})),e.setActionHandler(`pause`,()=>c({type:`pause`})),e.setActionHandler(`previoustrack`,()=>c({type:`previous`})),e.setActionHandler(`nexttrack`,()=>c({type:`next`})),e.setActionHandler(`seekto`,e=>typeof e.seekTime==`number`&&c({type:`seek`,seconds:e.seekTime}))}catch{}},[k?.id,s.playing,o]),{remote:!1,state:s,dispatch:c,current:k,blocked:l,notice:d,analyser:p,unlock:T,audio:h}}function NF(e,t){if(!e)return{state:{queue:[],index:-1,playing:!1,position:0,duration:0,volume:70,muted:!1,shuffle:!1,repeat:`all`,view:t},current:null};let n=e.queue.map((t,n)=>n===e.index?{id:t.id,title:e.title||t.title,artist:e.artist,album:e.album,durationSec:e.duration>0?e.duration:null}:{id:t.id,title:t.title,artist:``,album:``,durationSec:null});return{state:{queue:n,index:e.index,playing:e.playing,position:e.position,duration:e.duration,volume:e.volume,muted:e.muted,shuffle:e.shuffle,repeat:e.repeat,view:t},current:e.index>=0?n[e.index]??null:null}}function PF({local:e,host:t,send:n}){let r=e.state.view,{state:i,current:a}=(0,v.useMemo)(()=>NF(t,r),[t,r]),o=e.dispatch,s=(0,v.useCallback)(e=>{if(e.type===`view`)return o(e);let t=kd(e);t&&n({type:`music.remote`,command:t})},[o,n]);return(0,v.useMemo)(()=>({...e,remote:!0,state:i,dispatch:s,current:a,blocked:!1,notice:null,analyser:null,unlock:()=>{}}),[e,i,s,a])}function FF(e){let t=new URLSearchParams(e).get(`music`);return t===`connected`?{level:`info`,text:`Spotify is connected. Ask Friend to play something.`}:t===`failed`?{level:`warn`,text:`Spotify did not connect. Open Plugins, Spotify and press Connect again.`}:null}function IF({onSignedOut:e}){let{state:t,send:n,dispatch:r,voice:i,handsFree:a,useHere:o}=eM(e);pM(i),mM(i),bM(n,t.connection);let[s,c]=(0,v.useState)(je),l=(0,v.useCallback)(e=>{Me(e),c(e)},[]),[u,d]=(0,v.useState)(Pe),f=(0,v.useCallback)(e=>{Fe(e),d(e)},[]);(0,v.useEffect)(()=>i.setQuiet(u),[i,u]);let[p,m]=(0,v.useState)(!1),[h,g]=(0,v.useState)(!1),[_,y]=(0,v.useState)(!1),[b,x]=(0,v.useState)(void 0),[S,w]=(0,v.useState)(null),[T,E]=(0,v.useState)(Oe),D=e=>{ke(e),E(e)},O=T===`orb`?at:Ie,[k,A]=(0,v.useState)(!1),[j,ee]=(0,v.useState)(0),[M,N]=(0,v.useState)(null),P=ye(t.view),F=t.music?.output===`host`,te=MF({music:t.music,cmd:t.musicCmd,send:n,connection:t.connection,remote:F}),ne=PF({local:te,host:t.hostMusic,send:n}),re=F?ne:te,I=t.hud?.animations??`full`,ie=e=>{let{type:i,value:a}=e.action;if(i===`url`)window.open(a,`_blank`,`noopener,noreferrer`);else if(i===`prompt`)n({type:`chat.send`,text:a});else if(i===`music`||i===`panel`&&a===`music`){if(!t.music?.folderSet){r({type:`alert.add`,level:`info`,text:`No music folder is chosen yet. Pick one in Settings, Widgets, and the player opens.`}),w(`widgets`);return}if(i===`panel`){P.toggle(`music`,!0),re.state.view===`hidden`&&re.dispatch({type:`view`,view:`mini`});return}let e=Od({action:a});e&&re.dispatch(e)}else a===`plugins`?y(!0):a===`settings`?w(`model`):(a===`chat`||a===`tasks`)&&P.toggle(a,!0)},ae=t.viewKnown&&t.hud?.layout===`orbital`,oe=IP(void 0,ae),ce=NM(),le=qC(ce.w,ce.h)===`orbit`,L=(0,v.useMemo)(()=>{let e=s?{...t,objects:[],captions:``}:t,n=t.voice.mode===`listening`||t.voice.mode===`transcribing`||t.voice.mode===`speaking`||t.busy;return ae&&le&&!n?{...e,look:{...e.look,size:e.look.size*LC}}:e},[s,t,ae,le]),ue=(0,v.useRef)(!1);(0,v.useEffect)(()=>{ue.current||!t.voice.available||t.voice.enrolled||(ue.current=!0,r({type:`alert.add`,level:`info`,text:`Voice recognition is not set up. Press Esc, then Enroll my voice.`}))},[t.voice.available,t.voice.enrolled,r]);let de=fe(),B=(0,v.useRef)(!1);(0,v.useEffect)(()=>{if(!de||B.current||t.connection!==`open`)return;B.current=!0;let e=!1;try{e=localStorage.getItem(`friend.touchHint`)===`1`,localStorage.setItem(`friend.touchHint`,`1`)}catch{}e||r({type:`alert.add`,level:`info`,text:`Hold the round mic button to talk, or tap it once to start and again to send. The keyboard button types; the menu button opens settings.`})},[de,t.connection,r]);let pe=t.uiOpen?.n??0,me=t.uiOpen?.integration;(0,v.useEffect)(()=>{pe!==0&&(x(me),y(!0))},[pe,me]);let V=(0,v.useRef)(!1);(0,v.useEffect)(()=>{if(V.current)return;V.current=!0;let e=FF(window.location.search);e&&(r({type:`alert.add`,level:e.level,text:e.text}),window.history.replaceState(null,``,window.location.pathname))},[r]);let he=(0,v.useRef)(!1);(0,v.useEffect)(()=>{he.current||t.connection!==`open`||(he.current=!0,fetch(`/api/history`).then(e=>e.ok?e.json():[]).then(e=>r({type:`chat.seed`,lines:e})).catch(()=>{}))},[t.connection,r]),(0,v.useEffect)(()=>{t.connection===`open`&&n({type:`ui.panels`,open:[...P.show.chat?[`chat`]:[],...P.show.tasks?[`tasks`]:[]]})},[t.connection,P.show.chat,P.show.tasks,n]);let H=(0,v.useRef)(!1);(0,v.useEffect)(()=>{t.viewKnown&&t.view===`minimal`&&!H.current&&(H.current=!0,r({type:`alert.add`,level:`info`,text:`The view is Minimal, so the status line and clock are hidden. Press Esc, then View, to bring them back.`}))},[t.viewKnown,t.view,r]);let ge=e=>{Pd.save({view:e}).catch(e=>r({type:`alert.add`,level:`warn`,text:e.message}))},_e=(0,v.useMemo)(()=>R({notify:e=>r({type:`alert.add`,level:`info`,text:e}),openSettings:()=>w(`model`),openLook:()=>w(`look`),openConnectors:()=>A(!0),openPlugins:()=>y(!0),openVoice:t.voice.available?()=>m(!0):null,muted:s,setMuted:l,quiet:u,setQuiet:f,cameraOn:t.camera.enabled,setCamera:e=>r({type:`camera.enable`,value:e}),clearScreen:()=>{for(let e of t.objects)n({type:`stage.event`,objectId:e.id,event:`dismiss`})},statusLine:()=>vt({connection:t.connection,deviceOnline:t.deviceOnline,approval:t.approval,voiceMode:t.voice.mode,busy:t.busy,activity:t.activity}).text,endSession:t=>{fetch(t===`lock`?`/api/lock`:`/api/logout`,{method:`POST`,headers:{"content-type":`application/json`},body:`{}`}).catch(()=>{}).finally(e)},panelOn:e=>P.show[e],setPanel:(e,t)=>P.toggle(e,t),view:t.view,setView:ge,openHelp:N,resetLayout:()=>{U(),window.location.reload()}}),[r,n,s,e,P.show,P.toggle,t.view,t.voice.available,t.voice.mode,t.camera.enabled,t.objects,t.connection,t.deviceOnline,t.approval,t.busy,t.activity]);return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(dk,{state:L,send:n,dispatch:r,voice:i,slash:_e,onMenu:()=>ee(e=>e+1),hudLayer:ae&&t.hud?(0,C.jsx)(MM,{children:(0,C.jsx)(MP,{hud:t.hud,state:t,usage:oe.share===null?null:oe.share*100,send:n,onHire:()=>w(`office`),onLaunch:ie,onExpand:()=>{}})}):null}),(0,C.jsxs)(xt,{approval:t.approval,challenge:t.challenge,cameraStream:t.camera.stream,alerts:t.alerts,connection:t.connection,deviceOnline:t.deviceOnline,voiceMode:t.voice.mode,busy:t.busy,activity:t.activity,showStatus:t.viewKnown&&P.show.status&&!ae,showClock:t.viewKnown&&P.show.clock&&!ae,profile:t.viewKnown&&P.show.profile&&!ae?{ownerName:t.ownerName,speaker:t.speaker}:null,assistantName:t.assistantName,hud:t.hud,hudApproval:ae,send:n,dispatch:r,children:[t.viewKnown&&P.show.chat&&(0,C.jsx)(Se,{lines:t.chat,live:t.chatLive,onSend:e=>n({type:`chat.send`,text:e}),onClose:()=>P.toggle(`chat`,!1)}),t.viewKnown&&P.show.tasks&&(0,C.jsx)(Te,{busy:t.busy,onClose:()=>P.toggle(`tasks`,!1)}),t.viewKnown&&P.show.launcher&&t.hud&&!ae&&(0,C.jsx)(jM,{items:t.hud.launcher,animations:I,onAction:ie}),t.viewKnown&&P.show.music&&(0,C.jsx)(_F,{player:re,music:t.music,animations:I}),p&&(0,C.jsx)(sM,{onClose:()=>m(!1)}),h&&(0,C.jsx)(TM,{onClose:()=>g(!1)}),_&&(0,C.jsx)(Bf,{variant:T===`orb`?`holo`:`classic`,...b?{initialConfigure:b}:{},onClose:()=>{y(!1),x(void 0)}}),S&&(0,C.jsx)(NC,{initialTab:S,variant:T===`orb`?`holo`:`classic`,onClose:()=>w(null)}),k&&(0,C.jsx)(se,{variant:T===`orb`?`holo`:`classic`,onClose:()=>A(!1)}),M&&(0,C.jsx)(z,{commands:M,onClose:()=>N(null)})]}),(0,C.jsx)(O,{voiceMode:t.voice.mode,busy:t.busy,onClassic:()=>D(`classic`),onOrb:()=>D(`orb`),muted:s,onToggleMute:()=>l(!s),quiet:u,onToggleQuiet:()=>f(!u),onSignedOut:e,voiceAvailable:t.voice.available,voiceEnrolled:t.voice.enrolled,onEnroll:()=>m(!0),onHousehold:()=>g(!0),handsFreeOn:a.on,onToggleHandsFree:a.supported?a.toggle:void 0,assistantName:t.assistantName,onPlugins:()=>y(!0),onSettings:e=>w(e??`model`),onConnectors:()=>A(!0),cameraOn:t.camera.enabled,onToggleCamera:()=>r({type:`camera.enable`,value:!t.camera.enabled}),chatOn:P.show.chat,onToggleChat:()=>P.toggle(`chat`),tasksOn:P.show.tasks,onToggleTasks:()=>P.toggle(`tasks`),musicOn:P.show.music,onToggleMusic:()=>P.toggle(`music`),launcherOn:P.show.launcher,onToggleLauncher:()=>P.toggle(`launcher`),view:t.view,onView:ge,openRequest:j}),t.connection===`elsewhere`&&(0,C.jsx)(hM,{onUseHere:o})]})}function LF(){let[e,t]=(0,v.useState)(`loading`);return(0,v.useEffect)(()=>{let e=!0,n=n=>e&&t(n);return(async()=>{try{if(!(await(await fetch(`/api/state`)).json()).hasOwner)return n(`setup`);let e=await(await fetch(`/api/session`,{cache:`no-store`})).json();n(e.signedIn===!0?`stage`:`login`)}catch{n(`login`)}})(),()=>{e=!1}},[]),e===`loading`?(0,C.jsx)(`div`,{className:`boot`,"aria-busy":`true`}):e===`setup`?(0,C.jsx)(E,{onDone:()=>t(`login`)}):e===`login`?(0,C.jsx)(T,{onLoggedIn:()=>t(`stage`)}):(0,C.jsx)(IF,{onSignedOut:()=>t(`login`)})}(0,y.createRoot)(document.getElementById(`root`)).render((0,C.jsx)(v.StrictMode,{children:(0,C.jsx)(LF,{})}));export{d as a,h as i,uu as n,s as o,S as r,l as s,PN as t};
4459
+ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error occurred:</p><pre>`+ZE(n.message+``,!0)+`</pre>`;return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}};function gD(e,t){return hD.parse(e,t)}gD.options=gD.setOptions=function(e){return hD.setOptions(e),gD.defaults=hD.defaults,OT(gD.defaults),gD},gD.getDefaults=ET,gD.defaults=DT;function _D(...e){return hD.use(...e),gD.defaults=hD.defaults,OT(gD.defaults),gD}gD.use=_D,gD.walkTokens=function(e,t){return hD.walkTokens(e,t)},gD.parseInline=hD.parseInline,gD.Parser=pD,gD.parser=pD.parse,gD.Renderer=dD,gD.TextRenderer=fD,gD.Lexer=uD,gD.lexer=uD.lex,gD.Tokenizer=lD,gD.Hooks=mD,gD.parse=gD,gD.options,gD.setOptions,gD.walkTokens,gD.parseInline,pD.parse,uD.lex;var vD=!1;function yD(){vD||(vD=!0,TT.addHook(`afterSanitizeAttributes`,e=>{e instanceof Element&&e.tagName===`A`&&(e.setAttribute(`rel`,`noopener noreferrer`),e.setAttribute(`target`,`_blank`))}))}function bD(e){yD();let t=gD.parse(e,{async:!1,breaks:!0});return TT.sanitize(t,{ALLOWED_TAGS:[`p`,`br`,`strong`,`em`,`code`,`pre`,`ul`,`ol`,`li`,`a`,`h1`,`h2`,`h3`,`h4`,`h5`,`h6`,`blockquote`,`hr`,`del`,`table`,`thead`,`tbody`,`tr`,`th`,`td`],ALLOWED_ATTR:[`href`,`rel`,`target`],ALLOWED_URI_REGEXP:/^(?:https?:|mailto:)/i})}var xD=e=>Number.isFinite(e);function SD(e){let t=Math.floor(Math.log10(e)),n=e/10**t;return(n<=1?1:n<=2?2:n<=2.5?2.5:n<=5?5:10)*10**t}function CD(e,t,n=5){let r=xD(e)?e:0,i=xD(t)?t:r+1;r>i&&([r,i]=[i,r]),r===i&&(i=r+(Math.abs(r)||1));let a=SD((i-r)/Math.max(1,n-1)),o=Math.floor(r/a)*a,s=Math.ceil(i/a)*a,c=[];for(let e=o;e<=s+a/2;e+=a)c.push(Math.round(e*1e9)/1e9);return{min:o,max:s,ticks:c}}function wD(e,t){let[n,r]=e,[i,a]=t;return r===n?()=>i:e=>i+(e-n)/(r-n)*(a-i)}function TD(e){return e.map(([e,t],n)=>`${n===0?`M`:`L`}${e.toFixed(2)} ${t.toFixed(2)}`).join(` `)}function ED(e,t,n,r,i){let a=r=>{let i=r*Math.PI/180;return`${(e+n*Math.cos(i)).toFixed(2)} ${(t+n*Math.sin(i)).toFixed(2)}`},o=+(Math.abs(i-r)>180);return`M ${a(r)} A ${n} ${n} 0 ${o} 1 ${a(i)}`}function DD(e,t,n){return!xD(e)||!xD(t)||!xD(n)||n<=t?0:Math.min(1,Math.max(0,(e-t)/(n-t)))*240}function OD(e,t,n,r){let i=t.x-e.x,a=t.y-e.y,o=Math.hypot(i,a);if(o===0||o<=n+r)return{from:{...e},to:{...t}};let s=i/o,c=a/o;return{from:{x:e.x+s*n,y:e.y+c*n},to:{x:t.x-s*r,y:t.y-c*r}}}function kD(e,t,n){if(e<=0)return[];if(e===1)return[{x:t/2,y:n/2}];let r=Math.min(t,n)*.36;return Array.from({length:e},(i,a)=>{let o=-Math.PI/2+a*2*Math.PI/e;return{x:t/2+r*Math.cos(o),y:n/2+r*Math.sin(o)}})}var AD=e=>typeof e==`object`&&!!e&&!Array.isArray(e),jD=e=>typeof e==`string`?e:typeof e==`number`?String(e):``,MD=e=>Array.isArray(e)?e:[],ND=e=>typeof e==`number`?Number.isFinite(e)?e:null:typeof e==`string`&&e.trim()!==``&&Number.isFinite(Number(e))?Number(e):null,PD=(e,t)=>e.length>t?e.slice(0,t)+`…`:e,FD=[`var(--accent)`,`#ffb454`,`#7b8cff`,`#5ef0b0`,`#ff6b7a`,`#c792ea`],ID=({text:e})=>e?(0,C.jsx)(`h3`,{className:`obj-title`,children:e}):null,LD=({text:e=`No data`})=>(0,C.jsx)(`p`,{className:`obj-empty`,children:e}),RD=400,zD=220,BD={l:44,r:12,t:10,b:28};function VD({props:e}){let t=e.kind===`bar`||e.kind===`area`?e.kind:`line`,n=MD(e.labels).slice(0,120).map(jD),r=MD(e.series).slice(0,6).map((e,t)=>{let n=AD(e)?e:{},r=MD(n.values).slice(0,120).map((e,t)=>({idx:t,v:ND(e)})).filter(e=>e.v!==null);return{name:jD(n.name)||`series ${t+1}`,points:r}}).filter(e=>e.points.length>0);if(r.length===0)return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(ID,{text:jD(e.title)}),(0,C.jsx)(LD,{})]});let i=r.flatMap(e=>e.points.map(e=>e.v)),a=Math.min(...i),o=Math.max(...i),s=CD(t===`line`?a:Math.min(0,a),t===`line`?o:Math.max(0,o),5),c=Math.max(n.length,...r.map(e=>e.points[e.points.length-1].idx+1),2),l=wD([s.min,s.max],[zD-BD.b,BD.t]),u=wD([0,c-1],[BD.l,RD-BD.r]),d=(RD-BD.l-BD.r)/c,f=Math.max(1,d*.7/r.length),p=(e,t)=>BD.l+e*d+d*.15+t*f,m=Math.max(1,Math.ceil(c/6)),h=jD(e.unit);return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(ID,{text:jD(e.title)}),(0,C.jsxs)(`svg`,{className:`obj-chart`,viewBox:`0 0 ${RD} ${zD}`,role:`img`,"aria-label":jD(e.title)||`chart`,children:[s.ticks.map(e=>(0,C.jsxs)(`g`,{children:[(0,C.jsx)(`line`,{className:`grid`,x1:BD.l,x2:RD-BD.r,y1:l(e),y2:l(e)}),(0,C.jsxs)(`text`,{className:`tick`,x:BD.l-6,y:l(e)+3,textAnchor:`end`,children:[e,h&&e===s.max?h:``]})]},e)),Array.from({length:c},(e,t)=>t).filter(e=>e%m===0&&n[e]).map(e=>(0,C.jsx)(`text`,{className:`tick`,x:t===`bar`?p(e,0)+f*r.length/2:u(e),y:212,textAnchor:`middle`,children:PD(n[e],8)},e)),r.map((e,n)=>{let r=FD[n%FD.length];if(t===`bar`)return(0,C.jsx)(`g`,{children:e.points.map(e=>(0,C.jsx)(`rect`,{className:`bar`,x:p(e.idx,n),y:Math.min(l(e.v),l(0)),width:f,height:Math.abs(l(e.v)-l(0)),fill:r},e.idx))},n);let i=e.points.map(e=>[u(e.idx),l(e.v)]),a=TD(i),o=`${a} L${i[i.length-1][0].toFixed(2)} ${l(s.min).toFixed(2)} L${i[0][0].toFixed(2)} ${l(s.min).toFixed(2)} Z`;return(0,C.jsxs)(`g`,{children:[t===`area`&&(0,C.jsx)(`path`,{className:`series-area`,d:o,fill:r,opacity:.18}),(0,C.jsx)(`path`,{className:`series-line`,d:a,fill:`none`,stroke:r,strokeWidth:2,strokeLinejoin:`round`})]},n)})]}),r.length>1&&(0,C.jsx)(`ul`,{className:`legend`,children:r.map((e,t)=>(0,C.jsxs)(`li`,{children:[(0,C.jsx)(`i`,{style:{background:FD[t%FD.length]}}),(0,C.jsx)(`span`,{children:e.name})]},t))})]})}function HD({props:e}){let t=ND(e.min)??0,n=ND(e.max)??100,r=ND(e.value)??t,i=DD(r,t,n),a=i/240;return(0,C.jsxs)(`div`,{className:`obj-gauge ${a>.95?`gauge-crit`:a>.8?`gauge-warn`:``}`,children:[(0,C.jsxs)(`svg`,{viewBox:`0 0 200 150`,role:`img`,"aria-label":`${jD(e.label)} ${r}`,children:[(0,C.jsx)(`path`,{className:`track`,d:ED(100,100,70,150,390),fill:`none`,strokeWidth:12,strokeLinecap:`round`}),i>0&&(0,C.jsx)(`path`,{className:`value`,d:ED(100,100,70,150,150+i),fill:`none`,strokeWidth:12,strokeLinecap:`round`})]}),(0,C.jsxs)(`div`,{className:`gauge-read`,children:[(0,C.jsx)(`span`,{className:`gauge-value`,children:String(Math.round(r*100)/100)}),jD(e.unit)&&(0,C.jsx)(`small`,{className:`gauge-unit`,children:jD(e.unit)})]}),(0,C.jsx)(`span`,{className:`obj-label`,children:jD(e.label)})]})}function UD({props:e}){let t=MD(e.items).slice(0,30).map(e=>AD(e)?e:{}).map(e=>({time:jD(e.time),title:jD(e.title),detail:jD(e.detail)})).filter(e=>e.title||e.time);return t.length===0?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(ID,{text:jD(e.title)}),(0,C.jsx)(LD,{text:`Nothing to show`})]}):(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(ID,{text:jD(e.title)}),(0,C.jsx)(`ol`,{className:`obj-timeline`,children:t.map((e,t)=>(0,C.jsxs)(`li`,{children:[(0,C.jsx)(`time`,{children:e.time}),(0,C.jsx)(`strong`,{children:e.title}),e.detail&&(0,C.jsx)(`span`,{children:e.detail})]},t))})]})}var WD=400,GD=300,KD=12;function qD({props:e}){let t=(0,v.useId)(),n=new Set,r=[];for(let t of MD(e.nodes)){let e=AD(t)?t:{},i=jD(e.id);if(i&&!n.has(i)&&(n.add(i),r.push({id:i,label:jD(e.label)||i}),r.length>=40))break}if(r.length===0)return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(ID,{text:jD(e.title)}),(0,C.jsx)(LD,{text:`Nothing to show`})]});let i=new Map(r.map((e,t)=>[e.id,kD(r.length,WD,GD)[t]])),a=[];for(let t of MD(e.edges)){let e=AD(t)?t:{},n=jD(e.from),r=jD(e.to);if(i.has(n)&&i.has(r)&&n!==r&&(a.push({from:n,to:r,label:jD(e.label)}),a.length>=80))break}return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(ID,{text:jD(e.title)}),(0,C.jsxs)(`svg`,{className:`obj-graph`,viewBox:`0 0 ${WD} ${GD}`,role:`img`,"aria-label":jD(e.title)||`graph`,children:[(0,C.jsx)(`defs`,{children:(0,C.jsx)(`marker`,{id:t,viewBox:`0 0 10 10`,refX:`9`,refY:`5`,markerWidth:`6`,markerHeight:`6`,orient:`auto-start-reverse`,children:(0,C.jsx)(`path`,{d:`M0 0 L10 5 L0 10 z`,className:`arrow`})})}),a.map((e,n)=>{let{from:r,to:a}=OD(i.get(e.from),i.get(e.to),14,17),o=(r.x+a.x)/2+(WD/2-(r.x+a.x)/2)*.25,s=(r.y+a.y)/2+(GD/2-(r.y+a.y)/2)*.25;return(0,C.jsxs)(`g`,{children:[(0,C.jsx)(`path`,{className:`edge`,d:`M ${r.x.toFixed(1)} ${r.y.toFixed(1)} Q ${o.toFixed(1)} ${s.toFixed(1)} ${a.x.toFixed(1)} ${a.y.toFixed(1)}`,fill:`none`,markerEnd:`url(#${t})`}),e.label&&(0,C.jsx)(`text`,{className:`edge-label`,x:o,y:s,textAnchor:`middle`,children:PD(e.label,12)})]},n)}),r.map(e=>{let t=i.get(e.id);return(0,C.jsxs)(`g`,{children:[(0,C.jsx)(`circle`,{className:`node`,cx:t.x,cy:t.y,r:KD}),(0,C.jsx)(`text`,{className:`node-label`,x:t.x,y:t.y+26,textAnchor:`middle`,children:PD(e.label,18)})]},e.id)})]})]})}var JD=30,YD=e=>Number.isFinite(e)?Math.max(0,Math.min(1,e)):1,XD=new class{current=1;goal=1;from=1;steps=1;n=0;timer=null;subs=new Set;get level(){return this.current}set(e,t=250){if(this.goal=YD(e),t<=0||this.goal===this.current){this.stop(),this.move(this.goal);return}this.from=this.current,this.steps=Math.max(1,Math.ceil(t/JD)),this.n=0,this.timer??=setInterval(()=>this.tick(),JD)}subscribe(e){return this.subs.add(e),()=>void this.subs.delete(e)}tick(){this.n++,this.n>=this.steps?(this.stop(),this.move(this.goal)):this.move(this.from+(this.goal-this.from)*this.n/this.steps)}stop(){this.timer&&clearInterval(this.timer),this.timer=null}move(e){if(e!==this.current){this.current=e;for(let t of[...this.subs])t(e)}}};function ZD(e,t=XD){let n=e.volume,r=e.volume,i=!0,a=t=>{i&&(r=YD(n*t),e.volume=r)},o=()=>{if(!i||Math.abs(e.volume-r)<=.002)return;let a=t.level;a>.001&&(n=YD(e.volume/a)),r=e.volume};e.addEventListener(`volumechange`,o);let s=t.subscribe(a);return a(t.level),()=>{i=!1,s(),e.removeEventListener(`volumechange`,o),e.volume=n}}var QD=`https://www.youtube-nocookie.com`;function $D(e,t=XD,n=window){let r=100,i=null,a=!1,o=!0,s=!1,c=t=>e.contentWindow?.postMessage(JSON.stringify(t),QD),l=()=>c({event:`listening`,id:1,channel:`widget`}),u=e=>{i=e,c({event:`command`,func:`setVolume`,args:[e]})},d=e=>{o&&(e<.999?(a=!0,u(Math.round(r*e))):a&&(a=!1,u(Math.round(r))))},f=n=>{if(!o||n.source!==e.contentWindow)return;let c;try{c=JSON.parse(String(n.data)).info}catch{return}if(typeof c?.volume!=`number`)return;s=!0;let l=c.volume;if(i!==null&&Math.abs(l-i)<=1)return;let u=t.level;r=a&&u>.001?l/u:l,i=l};n.addEventListener(`message`,f),e.addEventListener?.(`load`,l),l();let p=setInterval(()=>s?clearInterval(p):l(),1e3),m=t.subscribe(d);return d(t.level),()=>{o=!1,clearInterval(p),m(),n.removeEventListener(`message`,f),e.removeEventListener?.(`load`,l),a&&eO(e,r)}}function eO(e,t){try{e.contentWindow?.postMessage(JSON.stringify({event:`command`,func:`setVolume`,args:[Math.round(t)]}),QD)}catch{}}var tO=e=>typeof e==`string`?e:typeof e==`number`?String(e):``,nO=e=>Array.isArray(e)?e:[],rO=e=>typeof e==`object`&&e?e:{},iO=/^\/api\/media\/[0-9a-f]{32}$/,aO=e=>typeof e==`string`&&iO.test(e)?e:null,oO=/^\/api\/video\/[0-9a-f]{32}$/,sO=e=>typeof e==`string`&&oO.test(e)?e:null,cO=({props:e})=>tO(e.title)?(0,C.jsx)(`h3`,{className:`obj-title`,children:tO(e.title)}):null;function lO({props:e}){let t=(0,v.useMemo)(()=>bD(tO(e.text)),[e.text]);return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(cO,{props:e}),(0,C.jsx)(`div`,{className:`obj-md obj-doc`,dangerouslySetInnerHTML:{__html:t}})]})}function uO({props:e}){let t=Math.min(100,Math.max(0,Number(e.value)||0));return(0,C.jsxs)(`div`,{className:`obj-progress`,children:[(0,C.jsxs)(`div`,{className:`obj-progress-head`,children:[(0,C.jsx)(`span`,{className:`obj-label`,children:tO(e.label)}),(0,C.jsxs)(`span`,{className:`obj-progress-pct`,children:[Math.round(t),`%`]})]}),(0,C.jsx)(`div`,{className:`obj-progress-bar`,role:`progressbar`,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":Math.round(t),"aria-label":tO(e.label)||`Progress`,children:(0,C.jsx)(`i`,{style:{width:`${t}%`}})}),tO(e.detail)&&(0,C.jsx)(`span`,{className:`obj-progress-detail`,children:tO(e.detail)})]})}function dO({props:e}){let t=nO(e.items).map(e=>rO(typeof e==`object`&&e?e:{text:e})),n=t.filter(e=>e.done===!0).length;return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(cO,{props:e}),(0,C.jsx)(`ul`,{className:`obj-checklist`,children:t.map((e,t)=>(0,C.jsxs)(`li`,{className:e.done===!0?`done`:void 0,children:[(0,C.jsx)(`span`,{className:`box`,"aria-hidden":`true`,children:e.done===!0?`✓`:``}),(0,C.jsx)(`span`,{children:tO(e.text)})]},t))}),t.length>0&&(0,C.jsxs)(`small`,{className:`obj-progress-detail`,children:[n,` of `,t.length,` done`]})]})}function fO({props:e}){return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(cO,{props:e}),(0,C.jsx)(`dl`,{className:`obj-kv`,children:nO(e.rows).map((e,t)=>{let n=rO(e);return(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`dt`,{children:tO(n.key)}),(0,C.jsx)(`dd`,{children:tO(n.value)})]},t)})})]})}var pO=e=>String(Math.floor(e)).padStart(2,`0`);function mO(e){let t=Math.max(0,Math.ceil(e));return`${pO(t/3600)}:${pO(t%3600/60)}:${pO(t%60)}`}function hO({props:e}){let t=(0,v.useRef)(null);if(t.current===null){let n=typeof e.to==`string`?Date.parse(e.to):NaN,r=Number(e.seconds);t.current=Number.isFinite(n)?n:Date.now()+(Number.isFinite(r)?r:0)*1e3}let[n,r]=(0,v.useState)(Date.now());(0,v.useEffect)(()=>{let e=setInterval(()=>r(Date.now()),250);return()=>clearInterval(e)},[]);let i=(t.current-n)/1e3;return(0,C.jsxs)(`div`,{className:`obj-countdown${i<=0?` done`:``}`,children:[(0,C.jsx)(`span`,{className:`obj-label`,children:tO(e.title)||tO(e.label)}),(0,C.jsx)(`span`,{className:`obj-countdown-time`,role:`timer`,children:mO(i)})]})}function gO({props:e}){let t=aO(e.src);return(0,C.jsxs)(`div`,{className:`obj-media`,children:[(0,C.jsx)(cO,{props:e}),t?(0,C.jsx)(`img`,{src:t,alt:tO(e.title)||`Picture`,loading:`lazy`}):(0,C.jsx)(`p`,{className:`obj-empty`,children:`This picture is not available.`})]})}function _O({src:e,web:t,title:n}){let[r,i]=(0,v.useState)(t?`loading`:`ready`),a=(0,v.useRef)(null);return(0,v.useEffect)(()=>a.current?ZD(a.current):void 0,[r===`failed`]),r===`failed`?(0,C.jsx)(`p`,{className:`obj-empty`,children:`This video could not be played. Ask Friend to try again, or to play it in a window on the PC.`}):(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`video`,{ref:a,src:e,controls:!0,playsInline:!0,autoPlay:t,preload:t?`auto`:`metadata`,"aria-label":n,onLoadedData:()=>i(`ready`),onError:()=>i(`failed`)}),t&&r===`loading`&&(0,C.jsx)(`p`,{className:`obj-empty`,children:`Preparing the video…`})]})}var vO=/^[A-Za-z0-9_-]{11}$/;function yO({id:e,start:t,title:n}){let[r,i]=(0,v.useState)(!1),a=(0,v.useRef)(null);(0,v.useEffect)(()=>a.current?$D(a.current):void 0,[e]);let o=new URLSearchParams({autoplay:`1`,rel:`0`,playsinline:`1`,modestbranding:`1`,enablejsapi:`1`});return t>0&&o.set(`start`,String(t)),(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`iframe`,{ref:a,className:`obj-youtube`,src:`https://www.youtube-nocookie.com/embed/${e}?${o.toString()}`,title:n,allow:`autoplay; encrypted-media; fullscreen; picture-in-picture`,allowFullScreen:!0,referrerPolicy:`strict-origin-when-cross-origin`,onLoad:()=>i(!0)}),!r&&(0,C.jsx)(`p`,{className:`obj-empty`,children:`Loading the player…`})]})}function bO({props:e}){if(e.embed!==void 0){let t=typeof e.embed==`string`&&vO.test(e.embed)?e.embed:null,n=typeof e.start==`number`&&e.start>0&&e.start<=86400?Math.floor(e.start):0;return(0,C.jsxs)(`div`,{className:`obj-media obj-media-fill`,children:[(0,C.jsx)(cO,{props:e}),t?(0,C.jsx)(yO,{id:t,start:n,title:tO(e.title)||`YouTube video`},`${t}-${n}`):(0,C.jsx)(`p`,{className:`obj-empty`,children:`This clip is not available.`})]})}let t=sO(e.src),n=t??aO(e.src);return(0,C.jsxs)(`div`,{className:`obj-media`,children:[(0,C.jsx)(cO,{props:e}),n?(0,C.jsx)(_O,{src:n,web:t!==null,title:tO(e.title)||`Video`},n):(0,C.jsx)(`p`,{className:`obj-empty`,children:`This clip is not available.`})]})}function xO({props:e}){let t=aO(e.src);return(0,C.jsxs)(`div`,{className:`obj-media obj-pdf`,children:[(0,C.jsx)(cO,{props:e}),t?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`iframe`,{src:t,title:tO(e.title)||`Document`}),(0,C.jsx)(`a`,{className:`obj-open`,href:t,target:`_blank`,rel:`noopener noreferrer`,children:`Open in a new tab`})]}):(0,C.jsx)(`p`,{className:`obj-empty`,children:`This document is not available.`})]})}function SO({props:e}){let t=nO(e.items).map(rO).filter(e=>aO(e.src)),[n,r]=(0,v.useState)(0),i=Math.min(n,Math.max(0,t.length-1)),a=t[i];if(!a)return(0,C.jsx)(`p`,{className:`obj-empty`,children:`Nothing to show.`});let o=aO(a.src),s=a.kind===`video`;return(0,C.jsxs)(`div`,{className:`obj-media obj-gallery`,children:[(0,C.jsx)(cO,{props:e}),s?(0,C.jsx)(`video`,{src:o,controls:!0,playsInline:!0,preload:`metadata`},o):(0,C.jsx)(`img`,{src:o,alt:tO(a.caption)||`Picture ${i+1}`},o),(0,C.jsxs)(`div`,{className:`obj-gallery-bar`,children:[(0,C.jsx)(`button`,{type:`button`,"aria-label":`Previous`,disabled:t.length<2,onClick:()=>r((i+t.length-1)%t.length),children:`‹`}),(0,C.jsxs)(`span`,{children:[tO(a.caption),(0,C.jsxs)(`small`,{children:[i+1,` / `,t.length]})]}),(0,C.jsx)(`button`,{type:`button`,"aria-label":`Next`,disabled:t.length<2,onClick:()=>r((i+1)%t.length),children:`›`})]})]})}var CO=[`default-src 'none'`,`script-src 'unsafe-inline'`,`style-src 'unsafe-inline'`,`img-src data: blob:`,`form-action 'none'`,`base-uri 'none'`].join(`; `),wO=`html,body{margin:0;min-height:100%;background:#050b10;color:var(--ink,#d8f6ff);font:15px/1.5 var(--ui,system-ui,sans-serif)}`,TO=[`--accent`,`--ink`,`--muted`,`--ok`,`--warn`,`--bad`,`--glass`,`--edge`,`--ui`,`--mono`],EO=/^[\w\s#().,%'"/-]+$/;function DO(){if(typeof document>`u`)return``;let e=getComputedStyle(document.documentElement),t=TO.map(t=>[t,e.getPropertyValue(t).trim()]).filter(([,e])=>e&&EO.test(e));return t.length?`:root{${t.map(([e,t])=>`${e}:${t}`).join(`;`)}}`:``}function OO(e,t=``){return`<!doctype html><html><head><meta charset="utf-8"><meta http-equiv="Content-Security-Policy" content="${CO}"><meta name="viewport" content="width=device-width,initial-scale=1"><style>${t}${wO}</style></head><body>${e}</body></html>`}function kO({props:e}){let t=typeof e.html==`string`?e.html:``,n=typeof e.title==`string`?e.title:``,r=(0,v.useMemo)(()=>OO(t,DO()),[t]);return(0,C.jsxs)(`div`,{className:`obj-sandbox`,children:[n&&(0,C.jsx)(`h3`,{className:`obj-title`,children:n}),(0,C.jsx)(`iframe`,{title:n||`Page made by Friend`,sandbox:`allow-scripts`,referrerPolicy:`no-referrer`,allow:``,srcDoc:r})]})}var AO=`modulepreload`,jO=function(e){return`/`+e},MO={},NO=function(e){return e.pathname.endsWith(`.css`)},PO=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e,i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?new URL(import.meta.resolve(e)):new URL(e,import.meta.url)}r=o(t.map(t=>{t=jO(t,n);let r=s(t);if(r.href in MO)return;MO[r.href]=!0;let i=NO(r);if(e===void 0){e={all:new Set,styles:new Set};let t=document.getElementsByTagName(`link`);for(let n=t.length-1;n>=0;n--){let r=t[n];e.all.add(r.href),r.rel===`stylesheet`&&e.styles.add(r.href)}}if((i?e.styles:e.all).has(r.href))return;let o=document.createElement(`link`);if(o.rel=i?`stylesheet`:AO,i||(o.as=`script`),o.crossOrigin=``,o.href=r.href,a&&o.setAttribute(`nonce`,a),document.head.appendChild(o),i)return new Promise((e,t)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>t(Error(`Unable to preload CSS for ${r}`)))})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},FO=(0,v.lazy)(()=>PO(()=>import(`./jarvisTree-DB0IJJYC.js`),__vite__mapDeps([0,1,2])));function IO({type:e,props:t}){let n=_u(e,t);return n?(0,C.jsx)(`p`,{className:`obj-empty`,children:n}):(0,C.jsx)(`div`,{className:`obj-jarvis`,children:(0,C.jsx)(v.Suspense,{fallback:(0,C.jsx)(`p`,{className:`obj-empty`,children:`Loading…`}),children:(0,C.jsx)(FO,{node:pu(e,t)})})})}var LO=e=>typeof e==`string`?e:typeof e==`number`?String(e):``,RO=e=>Array.isArray(e)?e:[];function zO({props:e}){let t=(0,v.useMemo)(()=>bD(LO(e.text)),[e.text]);return(0,C.jsxs)(C.Fragment,{children:[LO(e.title)&&(0,C.jsx)(`h3`,{className:`obj-title`,children:LO(e.title)}),(0,C.jsx)(`div`,{className:`obj-md`,dangerouslySetInnerHTML:{__html:t}})]})}function BO({props:e}){return(0,C.jsxs)(`div`,{className:`obj-stat`,children:[(0,C.jsx)(`span`,{className:`obj-label`,children:LO(e.label)}),(0,C.jsxs)(`span`,{className:`obj-value`,children:[(0,C.jsx)(`span`,{children:LO(e.value)}),LO(e.unit)&&(0,C.jsx)(`small`,{children:LO(e.unit)})]}),LO(e.delta)&&(0,C.jsx)(`span`,{className:`obj-delta`,children:LO(e.delta)})]})}function VO({props:e}){return(0,C.jsxs)(C.Fragment,{children:[LO(e.title)&&(0,C.jsx)(`h3`,{className:`obj-title`,children:LO(e.title)}),(0,C.jsx)(`ul`,{className:`obj-list`,children:RO(e.items).map((e,t)=>{let n=typeof e==`object`&&e?e:{text:e};return(0,C.jsx)(`li`,{className:n.done?`done`:void 0,children:LO(n.text)},t)})})]})}function HO({props:e}){let t=RO(e.columns),n=RO(e.rows);return(0,C.jsxs)(C.Fragment,{children:[LO(e.title)&&(0,C.jsx)(`h3`,{className:`obj-title`,children:LO(e.title)}),(0,C.jsx)(`div`,{className:`obj-table-wrap`,children:(0,C.jsxs)(`table`,{className:`obj-table`,children:[(0,C.jsx)(`thead`,{children:(0,C.jsx)(`tr`,{children:t.map((e,t)=>(0,C.jsx)(`th`,{children:LO(e)},t))})}),(0,C.jsx)(`tbody`,{children:n.map((e,t)=>(0,C.jsx)(`tr`,{children:RO(e).map((e,t)=>(0,C.jsx)(`td`,{children:LO(e)},t))},t))})]})})]})}function UO({props:e}){return(0,C.jsxs)(C.Fragment,{children:[LO(e.title)&&(0,C.jsx)(`h3`,{className:`obj-title`,children:LO(e.title)}),(0,C.jsx)(`pre`,{className:`obj-code`,"data-lang":LO(e.language),children:(0,C.jsx)(`code`,{children:LO(e.code)})})]})}function WO({part:e}){let t=typeof e==`object`&&e?e:{},n=typeof t.type==`string`?t.type:``;if(n===`group`||n===`tabs`||n===`sandbox`)return null;let r=YO[n];return r?(0,C.jsx)(`div`,{className:`obj-part obj-part-${n}`,children:(0,C.jsx)(r,{props:typeof t.props==`object`&&t.props!==null?t.props:{}})}):null}function GO({props:e}){let t=e.layout===`row`||e.layout===`column`?e.layout:`grid`;return(0,C.jsxs)(C.Fragment,{children:[LO(e.title)&&(0,C.jsx)(`h3`,{className:`obj-title`,children:LO(e.title)}),(0,C.jsx)(`div`,{className:`obj-group obj-group-${t}`,children:RO(e.items).map((e,t)=>(0,C.jsx)(WO,{part:e},t))})]})}function KO({props:e}){let t=RO(e.tabs).map(e=>typeof e==`object`&&e?e:{}),[n,r]=(0,v.useState)(0),i=Math.min(n,Math.max(0,t.length-1));return(0,C.jsxs)(C.Fragment,{children:[LO(e.title)&&(0,C.jsx)(`h3`,{className:`obj-title`,children:LO(e.title)}),(0,C.jsx)(`div`,{className:`obj-tabs`,role:`tablist`,children:t.map((e,t)=>(0,C.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":t===i,className:t===i?`on`:void 0,onClick:()=>r(t),children:LO(e.title)||`Tab ${t+1}`},t))}),t[i]&&(0,C.jsx)(WO,{part:t[i]})]})}var qO={card:zO,stat:BO,list:VO,table:HO,code:UO,chart:VD,gauge:HD,timeline:UD,graph:qD,sandbox:kO,markdown:lO,image:gO,video:bO,pdf:xO,gallery:SO,group:GO,tabs:KO,progress:uO,checklist:dO,countdown:hO,kv:fO},JO=Object.fromEntries(du.map(e=>[e,({props:t})=>(0,C.jsx)(IO,{type:e,props:t})])),YO={...qO,...JO};function XO(e,t){let n=new Map(t.map(e=>[e.id,e])),r=[],i=new Set;for(let t of e){if(i.has(t.object.id))continue;i.add(t.object.id);let e=n.get(t.object.id);r.push(e?{object:e,leaving:!1}:{object:t.object,leaving:!0})}for(let e of t)i.has(e.id)||(i.add(e.id),r.push({object:e,leaving:!1}));return r}function ZO(e,t){let[n,r]=(0,v.useState)(()=>e.map(e=>({object:e,leaving:!1}))),i=(0,v.useRef)(new Map);return(0,v.useEffect)(()=>{r(n=>{let a=XO(n,e),o=new Set(n.filter(e=>e.leaving).map(e=>e.object.id));for(let e of a){let n=i.current.get(e.object.id);if(!e.leaving)n&&clearTimeout(n),i.current.delete(e.object.id);else if(!o.has(e.object.id)&&!n){let n=e.object.id;i.current.set(n,setTimeout(()=>{i.current.delete(n),r(e=>e.filter(e=>!(e.object.id===n&&e.leaving)))},Math.max(t,0)))}}return t<=0?a.filter(e=>!e.leaving):a})},[e,t]),(0,v.useEffect)(()=>()=>{for(let e of i.current.values())clearTimeout(e);i.current.clear()},[]),n}var QO=.12,$O=.1,ek=.02,tk=(e,t,n)=>Math.min(Math.max(e,t),n);function nk(e){let t=tk(e.w,QO,1),n=tk(e.h,$O,1);return{x:tk(e.x,0,1-t),y:tk(e.y,0,1-n),w:t,h:n}}function rk(e,t){let n=t.getBoundingClientRect(),r=e.getBoundingClientRect();return n.width<=0||n.height<=0?null:nk({x:(r.left-n.left)/n.width,y:(r.top-n.top)/n.height,w:r.width/n.width,h:r.height/n.height})}function ik(e,t,n){let r=(0,v.useRef)(null),[i,a]=(0,v.useState)(null),o=(0,v.useCallback)((n,r)=>{let i=nk(r);t({type:`object.place`,id:n,placement:{x:i.x,y:i.y,w:i.w,h:i.h}}),e({type:`stage.move`,objectId:n,rect:i})},[e,t]),s=(0,v.useCallback)((e,t,i)=>{if(e.pointerType===`mouse`&&e.button!==0)return;let o=n(),s=e.currentTarget.closest(`[data-object]`);if(!o||!s||r.current)return;let c=rk(s,o);if(!c)return;let l=o.getBoundingClientRect();r.current={id:t.id,mode:i,pointer:e.pointerId,startX:e.clientX,startY:e.clientY,from:c,stageW:l.width,stageH:l.height};try{e.currentTarget.setPointerCapture(e.pointerId)}catch{}e.stopPropagation(),e.preventDefault(),a({id:t.id,box:c})},[n]),c=(e,t)=>{let n=(t.clientX-e.startX)/e.stageW,r=(t.clientY-e.startY)/e.stageH;return e.mode===`move`?nk({...e.from,x:e.from.x+n,y:e.from.y+r}):nk({...e.from,w:e.from.w+n,h:e.from.h+r})};return{preview:i,begin:s,move:(0,v.useCallback)(e=>{let t=r.current;t&&t.pointer===e.pointerId&&a({id:t.id,box:c(t,e)})},[]),end:(0,v.useCallback)((e,t)=>{let n=r.current;n&&n.pointer===e.pointerId&&(r.current=null,a(null),t||o(n.id,c(n,e)))},[o]),key:(0,v.useCallback)((e,t)=>{let r={ArrowLeft:[-.02,0],ArrowRight:[ek,0],ArrowUp:[0,-.02],ArrowDown:[0,ek]}[e.key],i=n(),a=e.currentTarget.closest(`[data-object]`);if(!r||!i||!a)return;let s=rk(a,i);s&&(e.preventDefault(),o(t.id,e.shiftKey?{...s,w:s.w+r[0],h:s.h+r[1]}:{...s,x:s.x+r[0],y:s.y+r[1]}))},[o,n])}}function ak(e,t){if(e===`auto`)return{position:`relative`};if(t.w<600)return{position:`relative`,width:`100%`};let[n,r,i,a]=typeof e==`string`?Ou[e]:[e.x*100,e.y*100,e.w*100,e.h*100],o={position:`absolute`,left:`${n}%`,top:`${r}%`,width:`${i}%`};return e===`top`||e===`bottom`?{...o,maxHeight:`${a}%`}:{...o,height:`${a}%`}}var ok=350,sk=()=>typeof matchMedia==`function`&&matchMedia(`(prefers-reduced-motion: reduce)`).matches,ck=class extends v.Component{state={failed:!1};static getDerivedStateFromError(){return{failed:!0}}render(){return this.state.failed?null:this.props.children}};function lk(){let e=()=>({w:window.innerWidth,h:window.innerHeight}),[t,n]=(0,v.useState)(e);return(0,v.useEffect)(()=>{let t=()=>n(e());return window.addEventListener(`resize`,t),()=>window.removeEventListener(`resize`,t)},[]),t}var uk=350;function dk({state:e,send:t,dispatch:n,voice:r,slash:i,onMenu:a,hudLayer:o}){let s=lk(),[c,l]=(0,v.useState)(0),[u,d]=(0,v.useState)(!1),f=fe(),p=s.w<600,m=e.scene===`focus`||e.scene===`multi`,h=o&&qC(s.w,s.h)===`orbit`?(()=>{let t=VC(s.w,s.h),n=HC(`centre`,552,828,s.w,s.h);return{name:e.assistantName||`friend`,style:{left:n.x,top:n.y,width:378*t,height:36*t,"--ob-s":t}}})():void 0,g={"--accent":e.mood.accent,"--intensity":e.mood.intensity},_=e.voice.mode,y=_===`listening`?`listening`:_===`speaking`?`speaking`:_===`transcribing`?`thinking`:e.presence.state,b=yS(e.look.reactivity),x=Math.min(1,(_===`listening`||_===`speaking`?e.voice.level:e.presence.amplitude)*b),S=(0,v.useRef)({timer:null,down:!1,talking:!1,id:null}),w=e=>{if(!(e.target===e.currentTarget||e.target.closest(`[data-presence]`))||e.pointerType===`mouse`&&e.button!==0)return;let t=S.current;if(!(t.down&&t.id!==null&&e.pointerId!==t.id)){t.timer&&clearTimeout(t.timer),t.down=!0,t.talking=!1,t.id=typeof e.pointerId==`number`?e.pointerId:null;try{t.id!==null&&e.currentTarget.setPointerCapture?.(t.id)}catch{}t.timer=r?setTimeout(()=>{t.down&&(t.talking=!0,r.pressStart())},uk):null}},T=(e,t)=>{let n=S.current;n.down&&(n.id===null||typeof e.pointerId!=`number`||e.pointerId===n.id)&&(n.down=!1,n.id=null,n.timer&&clearTimeout(n.timer),n.timer=null,n.talking?(n.talking=!1,t?r?.blur?.():r?.pressEnd()):t||l(e=>e+1))},E=(0,v.useRef)(null),D=ik(t,n,()=>E.current),O=ZO(e.objects,sk()?0:ok),k=O.filter(e=>e.object.layer===`overlay`),A=O.filter(e=>e.object.layer!==`overlay`&&e.object.placement===`auto`),j=O.filter(e=>e.object.layer!==`overlay`&&e.object.placement!==`auto`),ee=({object:e,leaving:r})=>{let i=YO[e.type];if(!i)return null;let a=e.layer===`overlay`,o=!p&&!r&&!a,c=D.preview?.id===e.id?D.preview.box:null,l=c?{x:c.x,y:c.y,w:c.w,h:c.h}:e.placement;return(0,C.jsxs)(`section`,{"data-object":e.id,className:`obj glass${fu(e.type)?` obj-bare`:``}${e.style===`alert`?` alert`:``}${a?` overlay`:``}${e.pinned?` pinned`:``}${c?` dragging`:``}${r?` leaving`:``}`,style:a?void 0:ak(l,s),children:[o&&(0,C.jsx)(`div`,{className:`obj-grip`,role:`button`,tabIndex:0,"aria-label":`Move ${e.id}. Drag, or use the arrow keys; hold Shift to resize.`,...fu(e.type)?{"data-label":typeof e.props.title==`string`&&e.props.title.trim()?e.props.title.trim().slice(0,40):e.id}:{},onPointerDown:t=>D.begin(t,e,`move`),onPointerMove:D.move,onPointerUp:e=>D.end(e,!1),onPointerCancel:e=>D.end(e,!0),onKeyDown:t=>D.key(t,e)}),!a&&(0,C.jsx)(`button`,{className:`obj-pin${e.pinned?` on`:``}`,"aria-label":e.pinned?`Unpin ${e.id}`:`Pin ${e.id} to the screen`,"aria-pressed":!!e.pinned,title:e.pinned?`Pinned: stays on the screen. Click to unpin.`:`Pin: keep this on the screen.`,disabled:r,onClick:()=>t({type:`stage.pin`,objectId:e.id,pinned:!e.pinned}),children:(0,C.jsx)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:e.pinned?`currentColor`:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:(0,C.jsx)(`path`,{d:`M12 17v5M9 3h6l-1 7 3 3H7l3-3-1-7z`})})}),(0,C.jsx)(`button`,{className:`obj-close`,"aria-label":`Dismiss ${e.id}`,title:e.pinned?`Remove this widget`:`Dismiss`,disabled:r,onClick:()=>{t({type:`stage.event`,objectId:e.id,event:`dismiss`}),n({type:`object.dismiss`,id:e.id})},children:`×`}),o&&(0,C.jsx)(`div`,{className:`obj-resize`,"aria-hidden":`true`,onPointerDown:t=>D.begin(t,e,`resize`),onPointerMove:D.move,onPointerUp:e=>D.end(e,!1),onPointerCancel:e=>D.end(e,!0)}),(0,C.jsx)(ck,{children:(0,C.jsx)(i,{props:e.props})})]},e.id)};return(0,C.jsxs)(`div`,{ref:E,"data-testid":`stage`,className:`stage`,style:g,onPointerDown:w,onPointerUp:e=>T(e,!1),onPointerCancel:e=>T(e,!0),onContextMenu:e=>r&&e.preventDefault(),children:[e.look.ambient&&(0,C.jsx)(`div`,{className:`ambient`,"aria-hidden":`true`,style:{opacity:.35+.65*e.mood.intensity}}),(0,C.jsx)(vS,{state:y,amplitude:x,pulse:e.presence.pulse,mode:m&&!o?`corner`:`full`,accent:e.mood.accent,style:e.presence.style,intensity:e.mood.intensity,scale:e.look.size}),o,(0,C.jsxs)(`div`,{className:p?`objects objects-stack`:`objects`,style:{zIndex:10},children:[A.length>0&&(0,C.jsx)(`div`,{className:`auto-grid`,children:A.map(ee)}),j.map(ee)]}),k.length>0&&(0,C.jsxs)(`div`,{className:`overlay-layer`,"data-testid":`overlay`,children:[(0,C.jsx)(`div`,{className:`overlay-backdrop`,onClick:()=>k.forEach(({object:e})=>{t({type:`stage.event`,objectId:e.id,event:`dismiss`}),n({type:`object.dismiss`,id:e.id})})}),k.map(ee)]}),e.look.captions&&e.captions&&(0,C.jsx)(`p`,{className:`captions captions-${e.look.captionSize}${e.captionDone?` done`:``}`,"aria-live":`polite`,children:e.captions}),f&&r&&!u&&(0,C.jsx)(XC,{voice:r,mode:_,onType:()=>l(e=>e+1),onMenu:()=>a?.()}),(0,C.jsx)(FC,{requestOpen:c,slash:i,onOpenChange:d,onSend:e=>t({type:`chat.send`,text:e}),...h?{hud:h}:{}})]})}function fk(){let e=()=>Math.random().toString(36).slice(2,12)+Date.now().toString(36);try{let t=sessionStorage.getItem(`friend.tab`);return t||(t=e(),sessionStorage.setItem(`friend.tab`,t)),t}catch{return e()}}function pk(){return`${location.protocol===`https:`?`wss`:`ws`}://${location.host}/ws`}function mk(e=pk()){let t=null,n=`connecting`,r=!1,i=0,a=!1,o=fk(),s=null,c=new Set,l=new Set,u=e=>{n=e,l.forEach(t=>t(e))};function d(){if(r)return;u(`connecting`);let n=new WebSocket(`${e}${e.includes(`?`)?`&`:`?`}tab=${o}${a?`&takeover=1`:``}`);t=n,n.onopen=()=>{i=0,a=!1,u(`open`)},n.onmessage=e=>{try{let t=JSON.parse(String(e.data));c.forEach(e=>e(t))}catch{}},n.onclose=e=>{if(!r){if(e.code===4401)return u(`unauthorized`);if(e.code===4409||e.code===4410)return u(`elsewhere`);u(`closed`),s=setTimeout(d,Math.min(500*2**i++,8e3))}},n.onerror=()=>{}}return d(),{send(e){t?.readyState===WebSocket.OPEN&&t.send(JSON.stringify(e))},onMessage(e){return c.add(e),()=>c.delete(e)},onState(e){return l.add(e),()=>l.delete(e)},state:()=>n,takeOver(){r||n!==`elsewhere`||(a=!0,i=0,d())},close(){r=!0,s&&clearTimeout(s),t?.close()}}}var hk={scene:`conversation`,objects:[],widgets:[],captions:``,captionDone:!0,presence:{state:`idle`,style:`sphere`,amplitude:0,pulse:0},mood:{accent:`#3fd8ff`,intensity:.6},approval:null,alerts:[],connection:`connecting`,chat:[],chatLive:!1,view:`companion`,look:{size:1,reactivity:.7,ambient:!0,captions:!0,captionSize:`medium`},viewKnown:!1,busy:!1,activity:null,deviceOnline:!1,voice:{mode:`idle`,level:0,available:!1,enrolled:!1},challenge:null,camera:{enabled:!1,stream:null},speaker:null,ownerName:``,assistantName:``,hud:null,music:null,hostMusic:null,musicCmd:null,uiOpen:null,stats:null,office:{enabled:!1,workers:[],tickets:[],quota:{fiveHour:null,sevenDay:null},feed:{}}},gk=200,_k=e=>e.length>gk?e.slice(-200):e,vk=0,yk=e=>Math.min(1,Math.max(0,e));function bk(e,t){switch(t.cmd){case`scene`:return{...e,scene:t.mode};case`show`:{let n=e.objects.findIndex(e=>e.id===t.object.id),r=n===-1?[...e.objects,t.object]:e.objects.map((e,r)=>r===n?t.object:e);return{...e,objects:r}}case`update`:return{...e,objects:e.objects.map(e=>e.id===t.id?{...e,props:{...e.props,...t.props}}:e)};case`hide`:return{...e,objects:e.objects.filter(e=>e.id!==t.id)};case`clear`:return{...e,objects:e.objects.filter(e=>e.pinned),widgets:t.keepInstruments?e.widgets:[],scene:`conversation`};case`widget`:{let n=t.reset?[]:e.widgets.filter(e=>!(t.hide??[]).includes(e));return{...e,widgets:[...n,...(t.show??[]).filter(e=>!n.includes(e))]}}case`pin`:return{...e,objects:e.objects.map(e=>e.id===t.id?{...e,pinned:!0}:e)};case`unpin`:return{...e,objects:e.objects.map(e=>e.id===t.id?(({pinned:e,...t})=>t)(e):e)};case`place`:return{...e,objects:e.objects.map(e=>e.id===t.id?{...e,placement:t.placement}:e)};case`presence`:return{...e,presence:{...e.presence,state:t.state??e.presence.state,style:t.style??e.presence.style}};case`mood`:return{...e,mood:{accent:t.accent??e.mood.accent,intensity:t.intensity??e.mood.intensity}}}}function xk(e,t){let n=t;if(n&&typeof n==`object`){if(n.type===`conn`)return{...e,connection:n.value};if(n.type===`chat.seed`){let t=Array.isArray(n.lines)?n.lines:[];return e.chat.length===0?{...e,chat:_k(t)}:{...e,chat:_k([...t,...e.chat])}}if(n.type===`alert.add`)return{...e,alerts:[...e.alerts.slice(-3),{id:++vk,level:n.level,text:n.text}]};if(n.type===`camera.enable`)return{...e,camera:{enabled:n.value,stream:n.value?e.camera.stream:null}};if(n.type===`camera.open`)return{...e,camera:{...e.camera,stream:n.stream}};if(n.type===`camera.closed`)return{...e,camera:{...e.camera,stream:null}};if(n.type===`challenge.dismiss`)return e.challenge?.id===n.id?{...e,challenge:null}:e;if(n.type===`voice.mode`)return{...e,voice:{...e.voice,mode:n.mode,level:n.mode===`idle`?0:e.voice.level}};if(n.type===`voice.level`){let t=Number.isFinite(n.level)?Math.min(1,Math.max(0,n.level)):0;return{...e,voice:{...e.voice,level:t}}}if(n.type===`object.dismiss`)return{...e,objects:e.objects.filter(e=>e.id!==n.id)};if(n.type===`object.place`)return{...e,objects:e.objects.map(e=>e.id===n.id?{...e,placement:n.placement}:e)};if(n.type===`alert.dismiss`)return{...e,alerts:e.alerts.filter(e=>e.id!==n.id)}}let r=gd.safeParse(t);if(!r.success)return e;let i=r.data;switch(i.type){case`snapshot`:return{...e,scene:i.stage.scene,objects:i.stage.objects,widgets:i.stage.widgets??[],presence:{...e.presence,state:i.stage.presence.state,style:i.stage.presence.style},mood:i.stage.mood,approval:i.pendingApproval??null};case`stage`:return bk(e,i.command);case`chat.user`:return{...e,chat:_k([...e.chat,{role:`user`,text:i.text}]),chatLive:!1};case`ui.open`:return{...e,uiOpen:{n:(e.uiOpen?.n??0)+1,...i.integration?{integration:i.integration}:{}}};case`ui`:return{...e,view:i.view,look:i.look??e.look,ownerName:i.ownerName??e.ownerName,assistantName:i.assistantName??e.assistantName,hud:i.hud??e.hud,music:i.music??e.music,viewKnown:!0};case`music.host`:return{...e,hostMusic:i.state};case`music.command`:{let{type:t,...n}=i;return{...e,musicCmd:{n:(e.musicCmd?.n??0)+1,command:n}}}case`caption.delta`:{let t=e.captionDone,n=e.chat.at(-1),r=e.chatLive&&n?.role===`assistant`?[...e.chat.slice(0,-1),{role:`assistant`,text:n.text+i.text}]:_k([...e.chat,{role:`assistant`,text:i.text}]);return{...e,chat:r,chatLive:!0,captions:(t?``:e.captions)+i.text,captionDone:!1,presence:{...e.presence,amplitude:yk(.3+i.text.length*.04),pulse:e.presence.pulse+1}}}case`caption.end`:return{...e,chatLive:!1,captionDone:!0,presence:{...e.presence,amplitude:0}};case`approval.request`:{let{type:t,...n}=i;return{...e,approval:n}}case`approval.resolved`:return e.approval?.id===i.id?{...e,approval:null}:e;case`alert`:return{...e,alerts:[...e.alerts.slice(-3),{id:++vk,level:i.level,text:i.text}]};case`activity`:return{...e,activity:i.text};case`office.state`:{let t={};for(let n of i.workers)e.office.feed[n.id]&&(t[n.id]=e.office.feed[n.id]);return{...e,office:{enabled:i.enabled,workers:i.workers,tickets:i.tickets,quota:i.quota,feed:t}}}case`office.feed`:{if(!e.office.workers.some(e=>e.id===i.workerId))return e;let t={at:i.at,kind:i.kind,text:i.text},n=[...e.office.feed[i.workerId]??[],t].slice(-60);return{...e,office:{...e.office,feed:{...e.office.feed,[i.workerId]:n}}}}case`hud.stats`:return{...e,stats:{cpu:i.cpu,ramUsed:i.ramUsed,ramTotal:i.ramTotal,netDown:i.netDown,netUp:i.netUp,at:Date.now()}};case`status`:return{...e,busy:i.busy,activity:i.busy?e.activity:null,deviceOnline:i.deviceOnline,voice:{...e.voice,available:i.voiceAvailable??e.voice.available,enrolled:i.voiceEnrolled??e.voice.enrolled}};case`error`:return{...e,alerts:[...e.alerts.slice(-3),{id:++vk,level:`error`,text:i.message}]};case`voice.heard`:return{...e,captions:i.trust===`guest`?`Guest: ${i.text}`:i.trust===`member`&&i.speaker?`${i.speaker}: ${i.text}`:i.text,captionDone:!0,speaker:{name:i.trust===`member`?i.speaker??null:null,trust:i.trust??`unverified`,seq:(e.speaker?.seq??0)+1}};case`voice.challenge`:return{...e,challenge:{id:i.id,text:i.text}};case`voice.challenge.end`:return e.challenge?.id===i.id?{...e,challenge:null}:e;case`audio.chunk`:case`audio.stop`:case`audio.duck`:return e;case`camera.request`:case`camera.cancel`:case`screen.request`:case`screen.cancel`:case`screen.check`:return e}}var Sk=1024,Ck=.8,wk=300;function Tk(e,t){let n=Math.min(1,Sk/Math.max(e,t));return{width:Math.round(e*n),height:Math.round(t*n)}}function Ek(e){let t=e?.name;return t===`NotAllowedError`||t===`SecurityError`?`permission`:t===`NotFoundError`||t===`OverconstrainedError`?`no-camera`:`busy`}async function Dk(){if(!navigator.mediaDevices?.getUserMedia)throw Object.assign(Error(`This browser cannot use the camera here (use localhost or HTTPS).`),{name:`NotFoundError`});return navigator.mediaDevices.getUserMedia({video:{width:{ideal:1280}},audio:!1})}async function Ok(e,t=wk){let n=document.createElement(`video`);n.muted=!0,n.playsInline=!0,n.srcObject=e,await n.play(),await new Promise(e=>setTimeout(e,t));let{width:r,height:i}=Tk(n.videoWidth||640,n.videoHeight||480),a=document.createElement(`canvas`);return a.width=r,a.height=i,a.getContext(`2d`).drawImage(n,0,0,r,i),n.srcObject=null,new Promise((e,t)=>a.toBlob(n=>n?e(n):t(Error(`Could not encode the picture.`)),`image/jpeg`,Ck))}var kk=class{opts;active=null;constructor(e){this.opts=e}async handle(e){if(e.type===`camera.cancel`){let t=this.active;t&&t.id===e.id&&(t.cancelled=!0,this.release(t));return}if(!this.opts.enabled())return this.opts.send({type:`camera.denied`,id:e.id,reason:`off`});if(this.active)return this.opts.send({type:`camera.denied`,id:e.id,reason:`busy`});let t={id:e.id,cancelled:!1,stream:null,opened:!1,released:!1};this.active=t;try{let n=await(this.opts.open??Dk)();if(t.stream=n,t.cancelled){n.getTracks().forEach(e=>e.stop());return}t.opened=!0,this.opts.dispatch({type:`camera.open`,stream:n});let r=await(this.opts.frame??(e=>Ok(e)))(n);if(t.cancelled)return;this.release(t);try{await this.opts.upload(e.id,r)}catch{this.opts.dispatch({type:`alert.add`,level:`warn`,text:`Could not send the camera picture to Friend.`})}}catch(n){t.cancelled||this.opts.send({type:`camera.denied`,id:e.id,reason:Ek(n)})}finally{this.release(t),this.active===t&&(this.active=null)}}dispose(){let e=this.active;e&&(e.cancelled=!0,this.release(e))}release(e){e.released||(e.released=!0,e.stream?.getTracks().forEach(e=>e.stop()),e.opened&&this.opts.dispatch({type:`camera.closed`}))}};function Ak(e,t){if(e.match(/^[a-z]+:\/\//i))return e;if(e.match(/^\/\//))return window.location.protocol+e;if(e.match(/^[a-z]+:/i))return e;let n=document.implementation.createHTMLDocument(),r=n.createElement(`base`),i=n.createElement(`a`);return n.head.appendChild(r),n.body.appendChild(i),t&&(r.href=t),i.href=e,i.href}var jk=(()=>{let e=0,t=()=>`0000${(Math.random()*36**4<<0).toString(36)}`.slice(-4);return()=>(e+=1,`u${t()}${e}`)})();function Mk(e){let t=[];for(let n=0,r=e.length;n<r;n++)t.push(e[n]);return t}var Nk=null;function Pk(e={}){return Nk||(e.includeStyleProperties?(Nk=e.includeStyleProperties,Nk):(Nk=Mk(window.getComputedStyle(document.documentElement)),Nk))}function Fk(e,t){let n=(e.ownerDocument.defaultView||window).getComputedStyle(e).getPropertyValue(t);return n?parseFloat(n.replace(`px`,``)):0}function Ik(e){let t=Fk(e,`border-left-width`),n=Fk(e,`border-right-width`);return e.clientWidth+t+n}function Lk(e){let t=Fk(e,`border-top-width`),n=Fk(e,`border-bottom-width`);return e.clientHeight+t+n}function Rk(e,t={}){return{width:t.width||Ik(e),height:t.height||Lk(e)}}function zk(){let e,t;try{t=process}catch{}let n=t&&t.env?t.env.devicePixelRatio:null;return n&&(e=parseInt(n,10),Number.isNaN(e)&&(e=1)),e||window.devicePixelRatio||1}var Bk=16384;function Vk(e){(e.width>Bk||e.height>Bk)&&(e.width>Bk&&e.height>Bk?e.width>e.height?(e.height*=Bk/e.width,e.width=Bk):(e.width*=Bk/e.height,e.height=Bk):e.width>Bk?(e.height*=Bk/e.width,e.width=Bk):(e.width*=Bk/e.height,e.height=Bk))}function Hk(e){return new Promise((t,n)=>{let r=new Image;r.onload=()=>{r.decode().then(()=>{requestAnimationFrame(()=>t(r))})},r.onerror=n,r.crossOrigin=`anonymous`,r.decoding=`async`,r.src=e})}async function Uk(e){return Promise.resolve().then(()=>new XMLSerializer().serializeToString(e)).then(encodeURIComponent).then(e=>`data:image/svg+xml;charset=utf-8,${e}`)}async function Wk(e,t,n){let r=`http://www.w3.org/2000/svg`,i=document.createElementNS(r,`svg`),a=document.createElementNS(r,`foreignObject`);return i.setAttribute(`width`,`${t}`),i.setAttribute(`height`,`${n}`),i.setAttribute(`viewBox`,`0 0 ${t} ${n}`),a.setAttribute(`width`,`100%`),a.setAttribute(`height`,`100%`),a.setAttribute(`x`,`0`),a.setAttribute(`y`,`0`),a.setAttribute(`externalResourcesRequired`,`true`),i.appendChild(a),a.appendChild(e),Uk(i)}var Gk=(e,t)=>{if(e instanceof t)return!0;let n=Object.getPrototypeOf(e);return n===null?!1:n.constructor.name===t.name||Gk(n,t)};function Kk(e){let t=e.getPropertyValue(`content`);return`${e.cssText} content: '${t.replace(/'|"/g,``)}';`}function qk(e,t){return Pk(t).map(t=>`${t}: ${e.getPropertyValue(t)}${e.getPropertyPriority(t)?` !important`:``};`).join(` `)}function Jk(e,t,n,r){let i=`.${e}:${t}`,a=n.cssText?Kk(n):qk(n,r);return document.createTextNode(`${i}{${a}}`)}function Yk(e,t,n,r){let i=window.getComputedStyle(e,n),a=i.getPropertyValue(`content`);if(a===``||a===`none`)return;let o=jk();try{t.className=`${t.className} ${o}`}catch{return}let s=document.createElement(`style`);s.appendChild(Jk(o,n,i,r)),t.appendChild(s)}function Xk(e,t,n){Yk(e,t,`:before`,n),Yk(e,t,`:after`,n)}var Zk=`application/font-woff`,Qk=`image/jpeg`,$k={woff:Zk,woff2:Zk,ttf:`application/font-truetype`,eot:`application/vnd.ms-fontobject`,png:`image/png`,jpg:Qk,jpeg:Qk,gif:`image/gif`,tiff:`image/tiff`,svg:`image/svg+xml`,webp:`image/webp`};function eA(e){let t=/\.([^./]*?)$/g.exec(e);return t?t[1]:``}function tA(e){return $k[eA(e).toLowerCase()]||``}function nA(e){return e.split(/,/)[1]}function rA(e){return e.search(/^(data:)/)!==-1}function iA(e,t){return`data:${t};base64,${e}`}async function aA(e,t,n){let r=await fetch(e,t);if(r.status===404)throw Error(`Resource "${r.url}" not found`);let i=await r.blob();return new Promise((e,t)=>{let a=new FileReader;a.onerror=t,a.onloadend=()=>{try{e(n({res:r,result:a.result}))}catch(e){t(e)}},a.readAsDataURL(i)})}var oA={};function sA(e,t,n){let r=e.replace(/\?.*/,``);return n&&(r=e),/ttf|otf|eot|woff2?/i.test(r)&&(r=r.replace(/.*\//,``)),t?`[${t}]${r}`:r}async function cA(e,t,n){let r=sA(e,t,n.includeQueryParams);if(oA[r]!=null)return oA[r];n.cacheBust&&(e+=(/\?/.test(e)?`&`:`?`)+new Date().getTime());let i;try{i=iA(await aA(e,n.fetchRequestInit,({res:e,result:n})=>(t||=e.headers.get(`Content-Type`)||``,nA(n))),t)}catch(t){i=n.imagePlaceholder||``;let r=`Failed to fetch resource: ${e}`;t&&(r=typeof t==`string`?t:t.message),r&&console.warn(r)}return oA[r]=i,i}async function lA(e){let t=e.toDataURL();return t===`data:,`?e.cloneNode(!1):Hk(t)}async function uA(e,t){if(e.currentSrc){let t=document.createElement(`canvas`),n=t.getContext(`2d`);return t.width=e.clientWidth,t.height=e.clientHeight,n?.drawImage(e,0,0,t.width,t.height),Hk(t.toDataURL())}let n=e.poster;return Hk(await cA(n,tA(n),t))}async function dA(e,t){try{if(e?.contentDocument?.body)return await xA(e.contentDocument.body,t,!0)}catch{}return e.cloneNode(!1)}async function fA(e,t){return Gk(e,HTMLCanvasElement)?lA(e):Gk(e,HTMLVideoElement)?uA(e,t):Gk(e,HTMLIFrameElement)?dA(e,t):e.cloneNode(mA(e))}var pA=e=>e.tagName!=null&&e.tagName.toUpperCase()===`SLOT`,mA=e=>e.tagName!=null&&e.tagName.toUpperCase()===`SVG`;async function hA(e,t,n){if(mA(t))return t;let r=[];return r=pA(e)&&e.assignedNodes?Mk(e.assignedNodes()):Gk(e,HTMLIFrameElement)&&e.contentDocument?.body?Mk(e.contentDocument.body.childNodes):Mk((e.shadowRoot??e).childNodes),r.length===0||Gk(e,HTMLVideoElement)||await r.reduce((e,r)=>e.then(()=>xA(r,n)).then(e=>{e&&t.appendChild(e)}),Promise.resolve()),t}function gA(e,t,n){let r=t.style;if(!r)return;let i=window.getComputedStyle(e);i.cssText?(r.cssText=i.cssText,r.transformOrigin=i.transformOrigin):Pk(n).forEach(n=>{let a=i.getPropertyValue(n);n===`font-size`&&a.endsWith(`px`)&&(a=`${Math.floor(parseFloat(a.substring(0,a.length-2)))-.1}px`),Gk(e,HTMLIFrameElement)&&n===`display`&&a===`inline`&&(a=`block`),n===`d`&&t.getAttribute(`d`)&&(a=`path(${t.getAttribute(`d`)})`),r.setProperty(n,a,i.getPropertyPriority(n))})}function _A(e,t){Gk(e,HTMLTextAreaElement)&&(t.innerHTML=e.value),Gk(e,HTMLInputElement)&&t.setAttribute(`value`,e.value)}function vA(e,t){if(Gk(e,HTMLSelectElement)){let n=t,r=Array.from(n.children).find(t=>e.value===t.getAttribute(`value`));r&&r.setAttribute(`selected`,``)}}function yA(e,t,n){return Gk(t,Element)&&(gA(e,t,n),Xk(e,t,n),_A(e,t),vA(e,t)),t}async function bA(e,t){let n=e.querySelectorAll?e.querySelectorAll(`use`):[];if(n.length===0)return e;let r={};for(let i=0;i<n.length;i++){let a=n[i].getAttribute(`xlink:href`);if(a){let n=e.querySelector(a),i=document.querySelector(a);!n&&i&&!r[a]&&(r[a]=await xA(i,t,!0))}}let i=Object.values(r);if(i.length){let t=`http://www.w3.org/1999/xhtml`,n=document.createElementNS(t,`svg`);n.setAttribute(`xmlns`,t),n.style.position=`absolute`,n.style.width=`0`,n.style.height=`0`,n.style.overflow=`hidden`,n.style.display=`none`;let r=document.createElementNS(t,`defs`);n.appendChild(r);for(let e=0;e<i.length;e++)r.appendChild(i[e]);e.appendChild(n)}return e}async function xA(e,t,n){return!n&&t.filter&&!t.filter(e)?null:Promise.resolve(e).then(e=>fA(e,t)).then(n=>hA(e,n,t)).then(n=>yA(e,n,t)).then(e=>bA(e,t))}var SA=/url\((['"]?)([^'"]+?)\1\)/g,CA=/url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g,wA=/src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;function TA(e){let t=e.replace(/([.*+?^${}()|\[\]\/\\])/g,`\\$1`);return RegExp(`(url\\(['"]?)(${t})(['"]?\\))`,`g`)}function EA(e){let t=[];return e.replace(SA,(e,n,r)=>(t.push(r),e)),t.filter(e=>!rA(e))}async function DA(e,t,n,r,i){try{let a=n?Ak(t,n):t,o=tA(t),s;return s=i?iA(await i(a),o):await cA(a,o,r),e.replace(TA(t),`$1${s}$3`)}catch{}return e}function OA(e,{preferredFontFormat:t}){return t?e.replace(wA,e=>{for(;;){let[n,,r]=CA.exec(e)||[];if(!r)return``;if(r===t)return`src: ${n};`}}):e}function kA(e){return e.search(SA)!==-1}async function AA(e,t,n){if(!kA(e))return e;let r=OA(e,n);return EA(r).reduce((e,r)=>e.then(e=>DA(e,r,t,n)),Promise.resolve(r))}async function jA(e,t,n){let r=t.style?.getPropertyValue(e);if(r){let i=await AA(r,null,n);return t.style.setProperty(e,i,t.style.getPropertyPriority(e)),!0}return!1}async function MA(e,t){await jA(`background`,e,t)||await jA(`background-image`,e,t),await jA(`mask`,e,t)||await jA(`-webkit-mask`,e,t)||await jA(`mask-image`,e,t)||await jA(`-webkit-mask-image`,e,t)}async function NA(e,t){let n=Gk(e,HTMLImageElement);if((!n||rA(e.src))&&(!Gk(e,SVGImageElement)||rA(e.href.baseVal)))return;let r=n?e.src:e.href.baseVal,i=await cA(r,tA(r),t);await new Promise((r,a)=>{e.onload=r,e.onerror=t.onImageErrorHandler?(...e)=>{try{r(t.onImageErrorHandler(...e))}catch(e){a(e)}}:a;let o=e;o.decode&&=r,o.loading===`lazy`&&(o.loading=`eager`),n?(e.srcset=``,e.src=i):e.href.baseVal=i})}async function PA(e,t){let n=Mk(e.childNodes).map(e=>FA(e,t));await Promise.all(n).then(()=>e)}async function FA(e,t){Gk(e,Element)&&(await MA(e,t),await NA(e,t),await PA(e,t))}function IA(e,t){let{style:n}=e;t.backgroundColor&&(n.backgroundColor=t.backgroundColor),t.width&&(n.width=`${t.width}px`),t.height&&(n.height=`${t.height}px`);let r=t.style;return r!=null&&Object.keys(r).forEach(e=>{n[e]=r[e]}),e}var LA={};async function RA(e){let t=LA[e];return t??(t={url:e,cssText:await(await fetch(e)).text()},LA[e]=t,t)}async function zA(e,t){let n=e.cssText,r=/url\(["']?([^"')]+)["']?\)/g,i=(n.match(/url\([^)]+\)/g)||[]).map(async i=>{let a=i.replace(r,`$1`);return a.startsWith(`https://`)||(a=new URL(a,e.url).href),aA(a,t.fetchRequestInit,({result:e})=>(n=n.replace(i,`url(${e})`),[i,e]))});return Promise.all(i).then(()=>n)}function BA(e){if(e==null)return[];let t=[],n=e.replace(/(\/\*[\s\S]*?\*\/)/gi,``),r=RegExp(`((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})`,`gi`);for(;;){let e=r.exec(n);if(e===null)break;t.push(e[0])}n=n.replace(r,``);let i=/@import[\s\S]*?url\([^)]*\)[\s\S]*?;/gi,a=RegExp(`((\\s*?(?:\\/\\*[\\s\\S]*?\\*\\/)?\\s*?@media[\\s\\S]*?){([\\s\\S]*?)}\\s*?})|(([\\s\\S]*?){([\\s\\S]*?)})`,`gi`);for(;;){let e=i.exec(n);if(e===null){if(e=a.exec(n),e===null)break;i.lastIndex=a.lastIndex}else a.lastIndex=i.lastIndex;t.push(e[0])}return t}async function VA(e,t){let n=[],r=[];return e.forEach(n=>{if(`cssRules`in n)try{Mk(n.cssRules||[]).forEach((e,i)=>{if(e.type===CSSRule.IMPORT_RULE){let a=i+1,o=e.href,s=RA(o).then(e=>zA(e,t)).then(e=>BA(e).forEach(e=>{try{n.insertRule(e,e.startsWith(`@import`)?a+=1:n.cssRules.length)}catch(t){console.error(`Error inserting rule from remote css`,{rule:e,error:t})}})).catch(e=>{console.error(`Error loading remote css`,e.toString())});r.push(s)}})}catch(i){let a=e.find(e=>e.href==null)||document.styleSheets[0];n.href!=null&&r.push(RA(n.href).then(e=>zA(e,t)).then(e=>BA(e).forEach(e=>{a.insertRule(e,a.cssRules.length)})).catch(e=>{console.error(`Error loading remote stylesheet`,e)})),console.error(`Error inlining remote css file`,i)}}),Promise.all(r).then(()=>(e.forEach(e=>{if(`cssRules`in e)try{Mk(e.cssRules||[]).forEach(e=>{n.push(e)})}catch(t){console.error(`Error while reading CSS rules from ${e.href}`,t)}}),n))}function HA(e){return e.filter(e=>e.type===CSSRule.FONT_FACE_RULE).filter(e=>kA(e.style.getPropertyValue(`src`)))}async function UA(e,t){if(e.ownerDocument==null)throw Error(`Provided element is not within a Document`);return HA(await VA(Mk(e.ownerDocument.styleSheets),t))}function WA(e){return e.trim().replace(/["']/g,``)}function GA(e){let t=new Set;function n(e){(e.style.fontFamily||getComputedStyle(e).fontFamily).split(`,`).forEach(e=>{t.add(WA(e))}),Array.from(e.children).forEach(e=>{e instanceof HTMLElement&&n(e)})}return n(e),t}async function KA(e,t){let n=await UA(e,t),r=GA(e);return(await Promise.all(n.filter(e=>r.has(WA(e.style.fontFamily))).map(e=>{let n=e.parentStyleSheet?e.parentStyleSheet.href:null;return AA(e.cssText,n,t)}))).join(`
4460
+ `)}async function qA(e,t){let n=t.fontEmbedCSS==null?t.skipFonts?null:await KA(e,t):t.fontEmbedCSS;if(n){let t=document.createElement(`style`),r=document.createTextNode(n);t.appendChild(r),e.firstChild?e.insertBefore(t,e.firstChild):e.appendChild(t)}}async function JA(e,t={}){let{width:n,height:r}=Rk(e,t),i=await xA(e,t,!0);return await qA(i,t),await FA(i,t),IA(i,t),await Wk(i,n,r)}async function YA(e,t={}){let{width:n,height:r}=Rk(e,t),i=await Hk(await JA(e,t)),a=document.createElement(`canvas`),o=a.getContext(`2d`),s=t.pixelRatio||zk(),c=t.canvasWidth||n,l=t.canvasHeight||r;return a.width=c*s,a.height=l*s,t.skipAutoScale||Vk(a),a.style.width=`${c}`,a.style.height=`${l}`,t.backgroundColor&&(o.fillStyle=t.backgroundColor,o.fillRect(0,0,a.width,a.height)),o.drawImage(i,0,0,a.width,a.height),a}var XA=1600,ZA=.85;function QA(e,t){let n=Math.min(1,XA/Math.max(e,t,1));return{width:Math.max(1,Math.round(e*n)),height:Math.max(1,Math.round(t*n))}}async function $A(){let e=document.documentElement.getBoundingClientRect(),t=await YA(document.body,{width:Math.round(e.width),height:Math.round(e.height),pixelRatio:1,backgroundColor:`#050b10`,filter:e=>!(e instanceof HTMLElement&&e.dataset.noCapture!==void 0)}),n=QA(t.width,t.height),r=document.createElement(`canvas`);return r.width=n.width,r.height=n.height,r.getContext(`2d`).drawImage(t,0,0,n.width,n.height),new Promise((e,t)=>r.toBlob(n=>n?e(n):t(Error(`Could not encode the picture.`)),`image/jpeg`,ZA))}var ej=class{opts;active=null;constructor(e){this.opts=e}async handle(e){if(e.type===`screen.cancel`){this.active&&this.active.id===e.id&&(this.active.cancelled=!0);return}if(this.active)return this.opts.send({type:`screen.denied`,id:e.id,reason:`busy`});let t={id:e.id,cancelled:!1};this.active=t;try{let n=await(this.opts.capture??$A)();if(t.cancelled)return;try{await this.opts.upload(e.id,n)}catch{this.opts.dispatch({type:`alert.add`,level:`warn`,text:`Could not send the picture of the screen to Friend.`})}}catch(n){t.cancelled||this.opts.send({type:`screen.denied`,id:e.id,reason:tj(n)})}finally{this.active===t&&(this.active=null)}}dispose(){this.active&&(this.active.cancelled=!0)}};function tj(e){return e?.name===`NotSupportedError`?`unsupported`:`failed`}var nj=12,rj=e=>e.length>200?`${e.slice(0,199)}…`:e,ij=.2,aj=4,oj=(e,t)=>{let n=Math.min(e.x+e.w,t.x+t.w)-Math.max(e.x,t.x),r=Math.min(e.y+e.h,t.y+t.h)-Math.max(e.y,t.y);return n<=0||r<=0?0:n*r/Math.max(1,Math.min(e.w*e.h,t.w*t.h))};function sj(e){if(e.objects.length===0)return[`No objects are on the screen.`];let t=[],n=e=>Math.round(e);for(let r of e.objects){r.drawn||t.push(`${r.id}: nothing is drawn in it (an empty box). Hide it, or check its props.`),(r.scrollH-r.h>aj||r.scrollW-r.w>aj)&&t.push(`${r.id}: its content is cut off: it needs about ${n(Math.max(r.scrollW,r.w))}x${n(Math.max(r.scrollH,r.h))} px and the box is ${n(r.w)}x${n(r.h)} px. Make the box bigger or the content smaller.`);let i=Math.max(0,-r.x,-r.y,r.x+r.w-e.view.w,r.y+r.h-e.view.h);i>aj&&t.push(`${r.id}: ${n(i)} px of it is outside the screen. Move it inside.`)}for(let n=0;n<e.objects.length;n++){for(let r=n+1;r<e.objects.length;r++)oj(e.objects[n],e.objects[r])>ij&&t.push(`${e.objects[n].id} and ${e.objects[r].id} overlap. Move one of them.`);for(let r of e.hud)oj(e.objects[n],r)>ij&&t.push(`${e.objects[n].id} covers the ${r.id} instrument. Move it to a free place.`)}if(t.length===0)return[`All ${e.objects.length} objects are fully visible, nothing overlaps.`];let r=t.map(rj);return r.length>nj?[...r.slice(0,11),`…and ${r.length-11} more problems of the same kind.`]:r}function cj(e,t){let n=e=>{let t=e.getBoundingClientRect();return{x:t.x,y:t.y,w:t.width,h:t.height}},r=[...e.querySelectorAll(`[data-object]`)].filter(e=>!e.classList.contains(`leaving`)).map(e=>({id:e.dataset.object??`?`,...n(e),scrollW:e.scrollWidth,scrollH:e.scrollHeight,drawn:(!e.querySelector(`.obj-jarvis, .obj-empty`)||!e.querySelector(`.obj-empty`))&&((e.textContent??``).replace(/[×📌\s]/g,``).length>0||!!e.querySelector(`svg, canvas, img, video, iframe`))})),i=[...e.querySelectorAll(`.orbital [data-widget]`)].map(e=>({id:e.dataset.widget??`?`,...n(e)}));return{view:{w:t.innerWidth,h:t.innerHeight},objects:r,hud:i}}function lj(e,t){let n=(0,v.useRef)(t);n.current=t;let r=(0,v.useRef)(!1),i=(0,v.useRef)(null);(0,v.useEffect)(()=>{let t=e===`listening`||e===`speaking`;i.current&&clearTimeout(i.current),i.current=null,t?r.current||(r.current=!0,n.current({type:`audio.activity`,active:!0})):r.current&&(i.current=setTimeout(()=>{i.current=null,r.current=!1,n.current({type:`audio.activity`,active:!1})},900))},[e]),(0,v.useEffect)(()=>()=>{i.current&&clearTimeout(i.current),r.current&&(r.current=!1,n.current({type:`audio.activity`,active:!1}))},[])}var uj={401:`Please sign in again.`,413:`That recording was too long.`,409:`Friend is busy with the last request. Try again in a moment.`,429:`You're talking too fast. Wait a moment.`,503:`Voice is not available. Run: friend voice setup`};async function dj(e,t,n){let r;try{r=await fetch(e,{method:`POST`,headers:{"content-type":t.type||`audio/webm`},body:t,signal:n})}catch(e){throw e.name===`AbortError`?e:Error(`Could not reach Friend. Check the connection.`)}if(!r.ok){let e=``;try{e=(await r.json()).error??``}catch{}throw Error(e||uj[r.status]||`The voice request failed (${r.status}).`)}let i=await r.json();return{text:typeof i.text==`string`?i.text:``,wake:i.wake===!0}}async function fj(e,t){return{text:(await dj(`/api/voice/utterance`,e,t)).text}}async function pj(e,t){let n=await dj(`/api/voice/utterance?wake=1`,e,t);return{text:n.text,wake:n.wake===!0}}var mj=null;function hj(){try{mj??=new AudioContext,mj.resume().catch(()=>{});let e=mj.currentTime;for(let[t,n]of[660,990].entries()){let r=mj.createOscillator(),i=mj.createGain();r.frequency.value=n,i.gain.setValueAtTime(0,e+t*.11),i.gain.linearRampToValueAtTime(.18,e+t*.11+.02),i.gain.exponentialRampToValueAtTime(.001,e+t*.11+.14),r.connect(i).connect(mj.destination),r.start(e+t*.11),r.stop(e+t*.11+.16)}}catch{}}var gj=/busy with the last request|talking too fast/i,_j=3e4,vj=50,yj=class{deps;listener=null;awakeNow=!1;showing=!1;busyWithOne=!1;clock=null;meter=null;abort=null;lastAlert=0;constructor(e){this.deps=e}get enabled(){return this.listener!==null}get awake(){return this.awakeNow}async enable(){if(this.listener)return;let e=this.deps.makeListener({onUtterance:e=>void this.heard(e),onError:e=>{this.drop(),this.alert(e,!0)}});try{await e.start()}catch(e){this.alert(e.message,!0);return}this.listener=e}disable(){this.drop()}sync(){let e=this.listener;if(!e)return;let t=this.busyOther();if(e.pause(t),!this.awakeNow||t){this.clearClock(),this.stopMeter();return}this.deps.mode()===`idle`&&this.show(),this.clock||this.startClock(),this.startMeter()}busyOther(){let e=this.deps.mode();return e!==`listening`&&(this.showing=!1),e===`speaking`||e===`transcribing`||e===`listening`&&!this.showing}show(){this.showing=!0,this.deps.dispatch({type:`voice.mode`,mode:`listening`})}wakeUp(e){this.awakeNow=!0,e&&this.deps.chime(),this.clearClock(),this.show(),this.startClock(),this.startMeter()}sleep(){this.awakeNow=!1,this.clearClock(),this.stopMeter(),this.showing&&this.deps.dispatch({type:`voice.mode`,mode:`idle`}),this.showing=!1}drop(){let e=this.listener;this.listener=null,this.abort?.abort(),this.abort=null,this.busyWithOne=!1,this.sleep(),e?.stop()}startClock(){this.clearClock(),this.clock=setTimeout(()=>{this.clock=null,this.sleep()},this.deps.awakeMs??3e4)}clearClock(){this.clock&&clearTimeout(this.clock),this.clock=null}startMeter(){this.meter||=setInterval(()=>this.deps.dispatch({type:`voice.level`,level:this.listener?.level()??0}),vj)}stopMeter(){this.meter&&clearInterval(this.meter),this.meter=null}async heard(e){if(!this.listener||this.busyWithOne||this.busyOther())return;this.busyWithOne=!0;let t=new AbortController;this.abort=t;try{this.awakeNow?await this.request(e,t.signal):await this.check(e,t.signal)}catch(e){e.name!==`AbortError`&&!gj.test(e.message)&&this.alert(e.message,!1)}finally{this.abort===t&&(this.abort=null),this.busyWithOne=!1,this.listener&&this.awakeNow&&(this.clearClock(),this.deps.mode()===`transcribing`&&this.deps.dispatch({type:`voice.mode`,mode:`idle`}),this.sync())}}async check(e,t){let n=await this.deps.wake(e,t);this.listener&&n.wake&&this.wakeUp(!n.text)}async request(e,t){this.clearClock(),this.stopMeter(),this.showing=!1,this.deps.dispatch({type:`voice.mode`,mode:`transcribing`}),await this.deps.command(e,t)}alert(e,t){let n=Date.now();!t&&n-this.lastAlert<_j||(this.lastAlert=n,this.deps.dispatch({type:`alert.add`,level:`error`,text:e}))}},bj=0,xj=new Set;function Sj(e){return xj.add(e),()=>xj.delete(e)}var Cj=e=>xj.forEach(t=>{try{t(e)}catch{}}),wj=e=>/not compatible|audio capture|audiosession/i.test(String(e?.message??e));function Tj(e){try{let t=navigator.audioSession;t&&t.type!==e&&(t.type=e)}catch{}}function Ej(){bj===0&&Tj(`playback`)}function Dj(){bj++,bj===1&&Cj(!0),Tj(`play-and-record`);let e=!1;return()=>{e||(e=!0,bj=Math.max(0,bj-1),bj===0&&(Tj(`playback`),Cj(!1)))}}var Oj=3,kj=.02,Aj=.04,jj=class{minSpeechMs;endSilenceMs;maxMs;floor=null;loudSince=null;speaking=!1;startedAt=0;lastLoud=0;lastFeed=0;speechMs=0;constructor(e={}){this.minSpeechMs=e.minSpeechMs??300,this.endSilenceMs=e.endSilenceMs??800,this.maxMs=e.maxMs??8e3}get inSpeech(){return this.speaking}get maybeSpeech(){return this.loudSince!==null}feed(e,t){this.floor===null&&(this.floor=e);let n=e>Math.max(this.floor*Oj+kj,Aj),r=Math.min(100,Math.max(0,t-this.lastFeed));if(this.lastFeed=t,!this.speaking)return n?(this.loudSince??=t,t-this.loudSince<this.minSpeechMs?null:(this.speaking=!0,this.startedAt=this.loudSince,this.lastLoud=t,this.speechMs=t-this.loudSince,{type:`start`})):(this.loudSince=null,this.floor+=(e-this.floor)*(e<this.floor?.3:.02),null);n&&(this.lastLoud=t,this.speechMs+=r);let i=t-this.startedAt>=this.maxMs;if(!i&&t-this.lastLoud<this.endSilenceMs)return null;let a={type:`end`,ms:t-this.startedAt,speechMs:this.speechMs,forced:i};return this.speaking=!1,this.loudSince=null,i&&n&&(this.floor=e),a}reset(){this.speaking=!1,this.loudSince=null}},Mj=[`audio/webm;codecs=opus`,`audio/webm`,`audio/mp4`,`audio/ogg;codecs=opus`],Nj=50,Pj=2e3,Fj=2e3,Ij=400,Lj=e=>{let t=e?.name;return t===`NotAllowedError`||t===`SecurityError`?`Microphone permission was denied. Allow it in the browser to use hands-free.`:t===`NotFoundError`||t===`OverconstrainedError`?`No microphone was found.`:e?.message||`Could not open the microphone.`},Rj=class{opts;stream=null;ctx=null;analyser=null;rec=null;chunks=[];recStartedAt=0;timer=null;seg;leaveSession=null;paused=!1;starting=!1;finishing=!1;opened=!1;now;constructor(e){this.opts=e,this.seg=new jj(e),this.now=e.now??(()=>Date.now())}static supported(){return typeof navigator<`u`&&!!navigator.mediaDevices?.getUserMedia&&typeof MediaRecorder<`u`}get listening(){return this.opened}async start(){if(!(this.opened||this.starting)){this.starting=!0;try{this.leaveSession=Dj();try{this.stream=await navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0}})}catch(e){throw this.leaveSession?.(),this.leaveSession=null,Error(Lj(e))}for(let e of this.stream.getTracks())e.onended=()=>this.broke(`The microphone stopped working.`);try{this.ctx=new AudioContext,this.analyser=this.ctx.createAnalyser(),this.analyser.fftSize=1024,this.ctx.createMediaStreamSource(this.stream).connect(this.analyser),this.ctx.resume().catch(()=>{})}catch{throw this.release(),Error(`This browser cannot listen continuously here.`)}this.seg.reset(),this.beginRecording(),this.opened=!0,this.timer=setInterval(()=>this.tick(),Nj)}finally{this.starting=!1}}}stop(){this.opened=!1,this.release()}pause(e){this.paused!==e&&(this.paused=e,this.seg.reset(),!e&&this.opened&&this.restartRecording())}level(){if(!this.analyser)return 0;let e=new Uint8Array(this.analyser.fftSize);this.analyser.getByteTimeDomainData(e);let t=0;for(let n of e)t+=((n-128)/128)**2;return Math.min(1,Math.sqrt(t/e.length)*4)}tick(){if(!this.opened)return;let e=this.now();if(this.ctx&&this.ctx.state!==`running`&&this.ctx.resume().catch(()=>{}),this.paused){e-this.recStartedAt>=Pj&&this.restartRecording();return}let t=this.seg.feed(this.level(),e);t?.type===`end`?this.finish(t.ms,t.speechMs):!t&&!this.seg.inSpeech&&!this.seg.maybeSpeech&&e-this.recStartedAt>=Pj&&this.restartRecording()}beginRecording(){if(!this.stream)return;let e=Mj.find(e=>MediaRecorder.isTypeSupported(e));this.chunks=[];let t=new MediaRecorder(this.stream,e?{mimeType:e}:void 0);t.ondataavailable=e=>{e.data&&e.data.size>0&&this.chunks.push(e.data)},t.onerror=()=>this.broke(`The microphone stopped working.`),t.start(250),this.rec=t,this.recStartedAt=this.now()}restartRecording(){let e=this.rec;if(this.rec=null,e){e.ondataavailable=null,e.onstop=null,e.onerror=null;try{e.state!==`inactive`&&e.stop()}catch{}}this.opened&&this.beginRecording()}async finish(e,t){let n=this.rec;if(!n||this.finishing)return;this.finishing=!0;let r=n.mimeType||`audio/webm`,i=await new Promise(e=>{let t=!1,i=()=>{t||(t=!0,e(new Blob(this.chunks,{type:r})))},a=setTimeout(i,Fj);n.onstop=()=>{clearTimeout(a),i()};try{n.state===`inactive`?i():n.stop()}catch{i()}});this.finishing=!1,this.rec=null,this.opened&&(this.beginRecording(),!this.paused&&e>=Ij&&t>=Ij/2&&i.size>0&&this.opts.onUtterance(i))}broke(e){this.opened&&(this.stop(),this.opts.onError(e))}release(){if(this.timer&&clearInterval(this.timer),this.timer=null,this.rec){this.rec.ondataavailable=null,this.rec.onstop=null,this.rec.onerror=null;try{this.rec.state!==`inactive`&&this.rec.stop()}catch{}}this.stream?.getTracks().forEach(e=>{e.onended=null,e.stop()}),this.ctx?.close().catch(()=>{}),this.stream=null,this.ctx=null,this.analyser=null,this.rec=null,this.chunks=[],this.leaveSession?.(),this.leaveSession=null}},zj=4096,Bj=8,Vj=20,Hj=6e6;function Uj(e){try{let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}catch{return null}}var Wj=class{ctx=null;analyser=null;pending=new Map;queue=[];current=null;busy=!1;gen=0;isPlaying=!1;unwatch=null;listeners=new Set;unlock(){Ej();let e=this.ensureContext();e.state!==`running`&&e.resume().catch(()=>{})}locked(){return!this.ctx||this.ctx.state!==`running`}enqueue(e){if(!Number.isInteger(e.seq)||e.seq<0||e.seq>zj)return;let t=Uj(e.data);if(!t)return;let n=this.pending.get(e.id);if(n||(this.pending.size>=Bj&&this.pending.delete(this.pending.keys().next().value),n={parts:new Map,lastSeq:null,bytes:0},this.pending.set(e.id,n)),n.bytes+=t.length,n.bytes>Hj){this.pending.delete(e.id);return}if(n.parts.set(e.seq,t),e.last&&(n.lastSeq=e.seq),n.lastSeq===null||n.parts.size!==n.lastSeq+1)return;this.pending.delete(e.id);let r=new Uint8Array([...n.parts.values()].reduce((e,t)=>e+t.length,0)),i=0;for(let e=0;e<=n.lastSeq;e++){let t=n.parts.get(e);if(!t)return;r.set(t,i),i+=t.length}for(this.queue.push(r.buffer);this.queue.length>Vj;)this.queue.shift();this.pump()}stop(){this.gen++,this.queue=[],this.pending.clear(),this.busy=!1;let e=this.current;if(this.current=null,e){e.onended=null;try{e.stop()}catch{}}this.setPlaying(!1)}dispose(){this.stop(),this.ctx?.close().catch(()=>{}),this.unwatch?.(),this.unwatch=null,this.ctx=null,this.analyser=null}playing(){return this.isPlaying}onChange(e){return this.listeners.add(e),()=>this.listeners.delete(e)}level(){if(!this.analyser||!this.isPlaying)return 0;let e=new Uint8Array(this.analyser.fftSize);this.analyser.getByteTimeDomainData(e);let t=0;for(let n of e)t+=((n-128)/128)**2;return Math.min(1,Math.sqrt(t/e.length)*4)}ensureContext(){if(!this.ctx){let e=window.AudioContext??window.webkitAudioContext;this.ctx=new e,this.analyser=this.ctx.createAnalyser(),this.analyser.fftSize=1024,this.analyser.connect(this.ctx.destination);let t=this.ctx;this.unwatch?.(),this.unwatch=Sj(e=>{e&&t.state===`running`?t.suspend().catch(()=>{}):!e&&t.state!==`running`&&t.state!==`closed`&&t.resume().catch(()=>{})})}return this.ctx}setPlaying(e){this.isPlaying!==e&&(this.isPlaying=e,this.listeners.forEach(t=>t(e)))}async pump(){if(this.busy)return;let e=this.queue.shift();if(!e){this.setPlaying(!1);return}this.busy=!0;let t=this.gen;try{let n=this.ensureContext();if(n.state!==`running`){try{await n.resume()}catch{}if(t!==this.gen)return;if(n.state!==`running`){this.queue.unshift(e),this.busy=!1;return}}let r=await n.decodeAudioData(e);if(t!==this.gen)return;let i=n.createBufferSource();i.buffer=r,i.connect(this.analyser),i.onended=()=>{this.current===i&&(this.current=null,this.busy=!1,this.pump())},this.current=i,this.setPlaying(!0),i.start()}catch{if(t!==this.gen)return;this.busy=!1,this.pump()}}},Gj=e=>new Promise(t=>setTimeout(t,e)),Kj=[`audio/webm;codecs=opus`,`audio/webm`,`audio/mp4`,`audio/ogg;codecs=opus`],qj=3e3;function Jj(e){let t=e;return t?.name===`NotAllowedError`||t?.name===`SecurityError`?Error(`Microphone permission was denied. Allow it in the browser to talk.`):t?.name===`NotFoundError`||t?.name===`OverconstrainedError`?Error(`No microphone was found.`):Error(t?.message||`Could not open the microphone.`)}var Yj=class e{opts;stream=null;rec=null;chunks=[];ctx=null;analyser=null;timer=null;starting=!1;leaveSession=null;constructor(e={}){this.opts=e}static supported(){return typeof navigator<`u`&&!!navigator.mediaDevices?.getUserMedia&&typeof MediaRecorder<`u`}get active(){return this.rec!==null}async start(){if(!(this.rec||this.starting)){if(!e.supported())throw Error(`This browser cannot record audio here (use localhost or HTTPS).`);this.starting=!0;try{this.leaveSession=Dj();try{let e=()=>navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0}});try{this.stream=await e()}catch(t){if(!wj(t))throw t;await Gj(250),this.leaveSession?.(),this.leaveSession=Dj(),this.stream=await e()}}catch(e){throw this.leaveSession?.(),this.leaveSession=null,Jj(e)}try{let e=Kj.find(e=>MediaRecorder.isTypeSupported(e));this.chunks=[];let t=new MediaRecorder(this.stream,e?{mimeType:e}:void 0);t.ondataavailable=e=>{e.data&&e.data.size>0&&this.chunks.push(e.data)},t.onerror=()=>this.failed();for(let e of this.stream.getTracks())e.onended=()=>this.failed();this.openMeter(this.stream),t.start(250),this.rec=t,this.opts.maxMs&&(this.timer=setTimeout(()=>{this.timer=null,this.opts.onLimit?.()},this.opts.maxMs))}catch(e){throw this.release(),Jj(e)}}finally{this.starting=!1}}}stop(){let e=this.rec;return e?new Promise(t=>{let n=!1,r=null,i=()=>{if(n)return;n=!0,r&&clearTimeout(r);let i=new Blob(this.chunks,{type:e.mimeType||`audio/webm`});this.release(),t(i)};if(r=setTimeout(i,qj),e.onstop=i,e.state===`inactive`)return i();try{e.stop()}catch{i()}}):Promise.reject(Error(`Not recording.`))}cancel(){let e=this.rec;if(e){e.ondataavailable=null,e.onstop=null,e.onerror=null;try{e.state!==`inactive`&&e.stop()}catch{}}this.release()}level(){if(!this.analyser||!this.rec)return 0;let e=new Uint8Array(this.analyser.fftSize);this.analyser.getByteTimeDomainData(e);let t=0;for(let n of e)t+=((n-128)/128)**2;return Math.min(1,Math.sqrt(t/e.length)*4)}failed(){this.rec&&(this.cancel(),this.opts.onError?.())}openMeter(e){try{this.ctx=new AudioContext,this.analyser=this.ctx.createAnalyser(),this.analyser.fftSize=1024,this.ctx.createMediaStreamSource(e).connect(this.analyser)}catch{this.analyser=null}}release(){this.timer&&clearTimeout(this.timer),this.timer=null,this.stream?.getTracks().forEach(e=>{e.onended=null,e.stop()}),this.ctx?.close().catch(()=>{}),this.stream=null,this.rec=null,this.ctx=null,this.analyser=null,this.chunks=[],this.leaveSession?.(),this.leaveSession=null}},Xj=2e3,Zj=()=>typeof window<`u`&&window.isSecureContext===!1,Qj=50,$j=class{deps;recorder;player;mode=`idle`;pressed=!1;disposed=!1;uploads=0;toldAboutSound=!1;quiet=!1;abort=null;poll=null;unsubscribe;constructor(e){this.deps=e;let t=()=>this.recorderFailed();this.recorder=e.recorder??e.makeRecorder?.(t)??new Yj({maxMs:6e4,onLimit:()=>void this.pressEnd(),onError:t}),this.player=e.player??new Wj,this.unsubscribe=this.player.onChange(e=>{this.mode!==`listening`&&this.mode!==`transcribing`&&this.setMode(e?`speaking`:`idle`)})}async pressStart(){if(!(this.pressed||this.disposed)){if(!this.deps.available()){this.alert(`warn`,`Voice is not available. Run: friend voice setup`);return}if(!(this.deps.supported?.()??Yj.supported())){this.alert(`warn`,Zj()?`This page is not secure, so the browser blocks the microphone. On the PC run: friend lan https on, restart Friend, and open the https:// address.`:`This browser cannot record audio here (use localhost or HTTPS).`);return}this.pressed=!0,this.player.unlock(),this.player.playing()&&(this.deps.send({type:`voice.interrupt`}),this.player.stop());try{await this.recorder.start()}catch(e){this.pressed=!1,this.alert(`error`,e.message),this.setMode(`idle`);return}if(!this.pressed){this.recorder.cancel(),this.setMode(`idle`);return}this.setMode(`listening`)}}async pressEnd(){if(!this.pressed||(this.pressed=!1,!this.recorder.active))return;let e=await this.recorder.stop();if(e.size<Xj){this.alert(`info`,`Hold the key a little longer while you speak.`),this.setMode(`idle`);return}this.setMode(`transcribing`);let t=new AbortController;this.abort=t,this.uploads++;try{let{text:n}=await this.deps.post(e,t.signal);n.trim()||this.alert(`info`,`I didn't catch that.`)}catch(e){e.name!==`AbortError`&&this.alert(`error`,e.message)}finally{this.uploads--,this.abort===t&&(this.abort=null),this.settle()}}blur(){this.pressed&&(this.pressed=!1,this.recorder.cancel(),this.setMode(`idle`))}setQuiet(e){this.quiet=e,e&&this.player.stop()}handleServer(e){if(e.type!==`audio.chunk`)return this.player.stop();this.quiet||(this.player.enqueue(e),!this.toldAboutSound&&this.player.locked?.()&&(this.toldAboutSound=!0,this.deps.dispatch({type:`alert.add`,level:`info`,text:`Sound is blocked by the browser. Click or press a key once anywhere on the page to hear me.`})))}unlock(){this.player.unlock()}dispose(){this.disposed=!0,this.pressed=!1,this.stopPolling(),this.abort?.abort(),this.recorder.cancel(),this.player.stop(),this.player.dispose?.(),this.unsubscribe()}recorderFailed(){this.pressed=!1,this.recorder.cancel(),this.alert(`error`,`The microphone stopped working.`),this.setMode(`idle`)}settle(){this.uploads>0||this.mode!==`transcribing`||this.setMode(this.player.playing()?`speaking`:`idle`)}setMode(e){this.disposed||(this.mode=e,this.deps.dispatch({type:`voice.mode`,mode:e}),e===`listening`||e===`speaking`?this.startPolling():this.stopPolling())}startPolling(){this.stopPolling(),this.poll=setInterval(()=>{let e=this.mode===`listening`?this.recorder.level():this.player.level();this.deps.dispatch({type:`voice.level`,level:e})},Qj)}stopPolling(){this.poll&&clearInterval(this.poll),this.poll=null}alert(e,t){this.disposed||this.deps.dispatch({type:`alert.add`,level:e,text:t})}};function eM(e){let[t,n]=(0,v.useReducer)(xk,hk),r=(0,v.useRef)(null),i=(0,v.useRef)(null),a=(0,v.useRef)(!1),o=(0,v.useRef)(null),s=(0,v.useRef)(null),[c,l]=(0,v.useState)(!1),u=(0,v.useRef)(e);u.current=e;let d=(0,v.useRef)(t);d.current=t,(0,v.useEffect)(()=>{let e=mk();r.current=e;let t=new $j({send:t=>e.send(t),dispatch:e=>n(e),post:fj,available:()=>d.current.voice.available});i.current=t,t.setQuiet(a.current);let c=new yj({makeListener:e=>new Rj(e),wake:pj,command:fj,mode:()=>d.current.voice.mode,chime:hj,dispatch:e=>n(e)});s.current=c;let f=new kk({send:t=>e.send(t),dispatch:e=>n(e),enabled:()=>d.current.camera.enabled,upload:async(e,t)=>{let n=await fetch(`/api/camera/frame/${encodeURIComponent(e)}`,{method:`POST`,headers:{"content-type":`image/jpeg`},body:t});if(!n.ok)throw Error(`upload failed (${n.status})`)}});o.current=f;let p=new ej({send:t=>e.send(t),dispatch:e=>n(e),upload:async(e,t)=>{let n=await fetch(`/api/screen/frame/${encodeURIComponent(e)}`,{method:`POST`,headers:{"content-type":`image/jpeg`},body:t});if(!n.ok)throw Error(`upload failed (${n.status})`)}}),m=e.onMessage(r=>{n(r);let i=r?.type,a=r?.id;(i===`camera.request`||i===`camera.cancel`)&&typeof a==`string`&&f.handle({type:i,id:a}),(i===`screen.request`||i===`screen.cancel`)&&typeof a==`string`&&p.handle({type:i,id:a}),i===`screen.check`&&typeof a==`string`&&setTimeout(()=>e.send({type:`screen.checked`,id:a,lines:sj(cj(document,window))}),500),i===`audio.duck`&&XD.set(r.level??1),(i===`audio.chunk`||i===`audio.stop`)&&t.handleServer(r)}),h=e.onState(e=>{n({type:`conn`,value:e}),e!==`open`&&XD.set(1,0),e===`unauthorized`&&u.current(),e===`elsewhere`&&(c.disable(),l(!1),t.blur(),f.dispose(),p.dispose())});return()=>{m(),h(),c.disable(),s.current=null,t.dispose(),f.dispose(),p.dispose(),e.close(),i.current=null,o.current=null,r.current=null}},[]),(0,v.useEffect)(()=>{t.camera.enabled||o.current?.dispose()},[t.camera.enabled]),(0,v.useEffect)(()=>{s.current?.sync()},[t.voice.mode]);let f=(0,v.useCallback)(async e=>{let t=s.current;if(t){e?await t.enable():t.disable(),l(t.enabled);try{localStorage.setItem(`friend.handsFree`,t.enabled?`1`:`0`)}catch{}}},[]),p=(0,v.useRef)(!1);(0,v.useEffect)(()=>{if(!p.current&&t.voice.available){p.current=!0;try{localStorage.getItem(`friend.handsFree`)===`1`&&Rj.supported()&&f(!0)}catch{}}},[t.voice.available,f]);let m=(0,v.useMemo)(()=>({on:c,supported:Rj.supported(),toggle:()=>void f(!s.current?.enabled)}),[c,f]),h=(0,v.useCallback)(e=>r.current?.send(e),[]);return lj(t.voice.mode,h),{state:t,send:h,dispatch:(0,v.useCallback)(e=>n(e),[]),voice:(0,v.useMemo)(()=>({pressStart:()=>void i.current?.pressStart(),pressEnd:()=>void i.current?.pressEnd(),blur:()=>i.current?.blur(),unlock:()=>i.current?.unlock(),setQuiet:e=>{a.current=e,i.current?.setQuiet(e)}}),[]),handsFree:m,useHere:(0,v.useCallback)(()=>r.current?.takeOver(),[]),officeStop:(0,v.useCallback)(e=>h({type:`office.stop`,...e?{workerId:e}:{}}),[h]),officeSay:(0,v.useCallback)((e,t)=>h({type:`office.say`,workerId:e,text:t}),[h])}}var tM={401:`Please sign in again.`,403:`Incorrect PIN.`,413:`That recording was too long.`,429:`Too many attempts. Wait a moment.`,503:`Voice is not available. Run: friend voice setup`};async function nM(e,t){let n;try{n=await fetch(e,t)}catch{throw Error(`Could not reach Friend. Check the connection.`)}if(!n.ok){let e=``;try{e=(await n.json()).error??``}catch{}throw Error(e||tM[n.status]||`The request failed (${n.status}).`)}return await n.json()}var rM=(e,t)=>({method:e,headers:{"content-type":`application/json`},body:JSON.stringify(t)}),iM={state:()=>nM(`/api/voice/enroll`,{}),sample:e=>nM(`/api/voice/enroll/sample`,{method:`POST`,headers:{"content-type":e.type||`audio/webm`},body:e}),finish:e=>nM(`/api/voice/enroll/finish`,rM(`POST`,{pin:e})),cancel:async()=>{await nM(`/api/voice/enroll/cancel`,rM(`POST`,{}))},remove:async e=>{await nM(`/api/voice/enroll`,rM(`DELETE`,{pin:e}))}},aM=[`Friend, good evening. It is a pleasant day to get things done.`,`Open my projects and show me what changed today.`,`My voice is my key, so please remember it well.`,`Check the weather and read me the latest headlines.`,`Always protect the boss, and never trust a stranger.`],oM=15e3;function sM({api:e=iM,createRecorder:t=e=>new Yj(e),onClose:n,who:r}){let[i,a]=(0,v.useState)(null),[o,s]=(0,v.useState)(0),[c,l]=(0,v.useState)(null),[u,d]=(0,v.useState)(`record`),[f,p]=(0,v.useState)(!1),[m,h]=(0,v.useState)(!1),[g,_]=(0,v.useState)(null),[y,x]=(0,v.useState)(``),S=(0,v.useRef)(!0),w=(0,v.useRef)(null);(0,v.useEffect)(()=>(S.current=!0,e.state().then(e=>{S.current&&(a(e),s(e.samples))}).catch(e=>S.current&&_(e.message)),()=>{S.current=!1,w.current?.cancel(),w.current=null}),[e]);let T=(0,v.useCallback)(async()=>{let t=w.current;if(t){w.current=null,p(!1),h(!0);try{let n=await t.stop(),r=await e.sample(n);if(!S.current)return;s(r.count),l(r.note)}catch(e){S.current&&_(e.message)}finally{S.current&&h(!1)}}},[e]),E=async()=>{_(null),l(null);let e=t({maxMs:oM,onLimit:()=>void T(),onError:()=>{w.current=null,S.current&&(p(!1),_(`The microphone stopped working. Try again.`))}});try{await e.start()}catch(e){S.current&&_(e.message);return}if(!S.current)return e.cancel();w.current=e,p(!0)},D=async e=>{_(null),h(!0);try{await e()}catch(e){S.current&&_(e.message)}finally{S.current&&(h(!1),x(``))}},O=async()=>{w.current?.cancel(),w.current=null,await e.cancel().catch(()=>{}),n()},k=i?.min??3,A=o%aM.length,j=o<aM.length?`Phrase ${o+1} of ${aM.length}`:`Extra recording (${o} so far)`;return(0,C.jsxs)(`div`,{className:`approval enroll glass`,role:`dialog`,"aria-label":`Voice enrollment`,style:{pointerEvents:`auto`},children:[(0,C.jsx)(`div`,{className:`approval-head`,children:(0,C.jsx)(`span`,{className:`approval-title`,children:r?`Teach Friend ${r}'s voice`:`Teach Friend your voice`})}),u===`record`&&(0,C.jsxs)(C.Fragment,{children:[!r&&i?.enrolled&&(0,C.jsx)(`p`,{className:`auth-note`,children:`Your voice is already saved. Saving a new one replaces it.`}),r&&(0,C.jsxs)(`p`,{className:`auth-note`,children:[`Hand the device to `,r,`. `,r,` reads each sentence aloud, close to the microphone, in a quiet room.`]}),(0,C.jsxs)(`p`,{className:`auth-note`,children:[j,`. Press Record, read this aloud in a quiet room, then press Stop.`]}),(0,C.jsx)(`pre`,{className:`approval-summary`,"data-testid":`enroll-phrase`,style:{whiteSpace:`pre-wrap`},children:aM[A]}),(0,C.jsxs)(`div`,{role:`status`,className:`auth-note`,children:[o,` recorded`,o>=k?` — enough to save`:` — at least ${k} needed`,`.`,c?` ${c}`:``]}),g&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:g}),(0,C.jsxs)(`div`,{className:`approval-actions`,children:[f?(0,C.jsx)(`button`,{type:`button`,style:b,className:`danger`,onClick:()=>void T(),children:`Stop`}):(0,C.jsx)(`button`,{type:`button`,style:b,className:`primary`,disabled:m||!i||o>=(i?.max??8),onClick:()=>void E(),children:m?`Uploading…`:`Record`}),(0,C.jsx)(`button`,{type:`button`,style:b,disabled:f||m||o<k,onClick:()=>d(`pin-save`),children:r?`Save ${r}'s voice`:`Save my voice`}),!r&&i?.enrolled&&(0,C.jsx)(`button`,{type:`button`,style:b,className:`danger`,disabled:f||m,onClick:()=>d(`pin-delete`),children:`Delete my voice`}),(0,C.jsx)(`button`,{type:`button`,style:b,onClick:()=>void O(),children:`Cancel`})]})]}),(u===`pin-save`||u===`pin-delete`)&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`p`,{className:`auth-note`,children:u===`pin-save`?r?`Enter your PIN to save ${r}'s voice.`:`Enter your PIN to save your voice.`:`Enter your PIN to delete your saved voice.`}),(0,C.jsx)(P,{pin:y,onChange:x,onSubmit:u===`pin-save`?()=>!m&&void D(async()=>{await e.finish(y),S.current&&d(`saved`)}):void 0}),g&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:g}),(0,C.jsxs)(`div`,{className:`approval-actions`,children:[u===`pin-save`?(0,C.jsx)(`button`,{type:`button`,style:b,className:`primary`,disabled:m||y.length<6,onClick:()=>void D(async()=>{await e.finish(y),S.current&&d(`saved`)}),children:`Save`}):(0,C.jsx)(`button`,{type:`button`,style:b,className:`danger`,disabled:m||y.length<6,onClick:()=>void D(async()=>{await e.remove(y),S.current&&d(`deleted`)}),children:`Delete`}),(0,C.jsx)(`button`,{type:`button`,style:b,onClick:()=>{x(``),_(null),d(`record`)},children:`Back`})]})]}),(u===`saved`||u===`deleted`)&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`p`,{className:`auth-note`,children:u===`saved`?r?`${r}'s voice is saved. From now on I will know when ${r} is talking.`:`Your voice is saved. From now on I will tell you apart from other speakers.`:`Your voice was deleted. Every voice is treated as yours until you enroll again.`}),(0,C.jsx)(`div`,{className:`approval-actions`,children:(0,C.jsx)(`button`,{type:`button`,style:b,className:`primary`,onClick:n,children:`Done`})})]})]})}var cM=new Set([`INPUT`,`TEXTAREA`,`SELECT`,`BUTTON`,`A`,`SUMMARY`]),lM=new Set([`button`,`checkbox`,`switch`,`tab`,`menuitem`,`link`,`radio`,`option`,`textbox`,`combobox`,`slider`]),uM=e=>e instanceof HTMLInputElement&&e.hasAttribute(`data-space-talks`)&&e.value===``,dM=e=>!uM(e)&&e instanceof HTMLElement&&(cM.has(e.tagName)||e.isContentEditable||lM.has(e.getAttribute(`role`)??``)),fM=e=>e.code===`Space`||e.key===` `;function pM(e){let t=(0,v.useRef)(e);t.current=e,(0,v.useEffect)(()=>{let e=!1,n=n=>{!fM(n)||n.ctrlKey||n.metaKey||n.altKey||dM(n.target)||dM(document.activeElement)||(n.preventDefault(),!(n.repeat||e)&&(e=!0,t.current.pressStart()))},r=n=>{fM(n)&&e&&(e=!1,n.preventDefault(),t.current.pressEnd())},i=()=>{e=!1,t.current.blur()},a=()=>{document.hidden&&i()},o=e=>{if(e.detail===0||!(e.target instanceof Element))return;let t=e.target.closest(`button, [role=button], summary, a`);t instanceof HTMLElement&&setTimeout(()=>{document.activeElement===t&&t.blur()},0)};return document.addEventListener(`click`,o),window.addEventListener(`keydown`,n),window.addEventListener(`keyup`,r),window.addEventListener(`blur`,i),document.addEventListener(`visibilitychange`,a),()=>{document.removeEventListener(`click`,o),window.removeEventListener(`keydown`,n),window.removeEventListener(`keyup`,r),window.removeEventListener(`blur`,i),document.removeEventListener(`visibilitychange`,a)}},[])}function mM(e){let t=(0,v.useRef)(e);t.current=e,(0,v.useEffect)(()=>{let e=()=>t.current.unlock(),n=[`pointerdown`,`keydown`,`touchend`];for(let t of n)window.addEventListener(t,e,{passive:!0});return()=>{for(let t of n)window.removeEventListener(t,e)}},[])}function hM({onUseHere:e}){return(0,C.jsx)(`div`,{className:`elsewhere`,role:`alertdialog`,"aria-labelledby":`elsewhere-title`,"data-testid":`elsewhere`,children:(0,C.jsxs)(`div`,{className:`elsewhere-card`,children:[(0,C.jsx)(`h2`,{id:`elsewhere-title`,children:`Friend is open in another window`}),(0,C.jsx)(`p`,{children:`Friend works in one window at a time. Click “Use here” to use it in this window instead; the other one will stop.`}),(0,C.jsx)(`button`,{type:`button`,className:`elsewhere-btn`,onClick:e,autoFocus:!0,children:`Use here`})]})})}function gM(e,t,n){let r=Math.max(100,Math.round(e)),i=Math.max(100,Math.round(t));return{width:r,height:i,kind:r<=599?`phone`:n||r<1024?`tablet`:`desktop`,orientation:i>r?`portrait`:`landscape`,touch:n}}var _M=()=>typeof matchMedia==`function`&&matchMedia(`(pointer: coarse)`).matches;function vM(){return gM(window.innerWidth,window.innerHeight,_M())}var yM=(e,t)=>!!e&&e.width===t.width&&e.height===t.height&&e.kind===t.kind&&e.orientation===t.orientation&&e.touch===t.touch;function bM(e,t){let n=(0,v.useRef)(null),r=(0,v.useRef)(e);r.current=e,(0,v.useEffect)(()=>{if(t!==`open`){n.current=null;return}let e=()=>{let e=vM();yM(n.current,e)||(n.current=e,r.current({type:`ui.screen`,...e}))};e();let i=null,a=()=>{i&&clearTimeout(i),i=setTimeout(e,400)};return window.addEventListener(`resize`,a),window.addEventListener(`orientationchange`,a),()=>{i&&clearTimeout(i),window.removeEventListener(`resize`,a),window.removeEventListener(`orientationchange`,a)}},[t])}var xM={401:`Please sign in again.`,403:`Incorrect PIN.`,413:`That recording was too long.`,429:`Too many attempts. Wait a moment.`,503:`Voice is not available. Run: friend voice setup`};async function SM(e,t={}){let n;try{n=await fetch(e,t)}catch{throw Error(`Could not reach Friend. Check the connection.`)}if(!n.ok){let e=``;try{e=(await n.json()).error??``}catch{}throw Error(e||xM[n.status]||`The request failed (${n.status}).`)}return await n.json()}var CM=(e,t)=>({method:e,headers:{"content-type":`application/json`},body:JSON.stringify(t)}),wM={overview:()=>SM(`/api/voice/people`),begin:e=>SM(`/api/voice/people/begin`,CM(`POST`,{name:e})),recording:{state:async()=>(await SM(`/api/voice/people`)).enrolling??{enrolled:!1,samples:0,min:3,max:8},sample:e=>SM(`/api/voice/people/sample`,{method:`POST`,headers:{"content-type":e.type||`audio/webm`},body:e}),finish:e=>SM(`/api/voice/people/finish`,CM(`POST`,{pin:e})),cancel:async()=>{await SM(`/api/voice/people/cancel`,CM(`POST`,{}))},remove:async()=>{}},removePerson:async(e,t)=>{await SM(`/api/voice/people/${e}`,CM(`DELETE`,{pin:t}))}};function TM({api:e=wM,createRecorder:t,onClose:n}){let[r,i]=(0,v.useState)(null),[a,o]=(0,v.useState)({kind:`list`}),[s,c]=(0,v.useState)(``),[l,u]=(0,v.useState)(``),[d,f]=(0,v.useState)(!1),[p,m]=(0,v.useState)(null),h=(0,v.useRef)(!0),g=(0,v.useCallback)(()=>{e.overview().then(e=>h.current&&i(e)).catch(e=>h.current&&m(e.message))},[e]);(0,v.useEffect)(()=>(h.current=!0,g(),()=>{h.current=!1}),[g]);let _=async()=>{m(null),f(!0);try{let t=await e.begin(s.trim());h.current&&o({kind:`record`,name:t.name})}catch(e){h.current&&m(e.message)}finally{h.current&&f(!1)}},y=async t=>{m(null),f(!0);try{if(await e.removePerson(t.id,l),!h.current)return;o({kind:`list`}),g()}catch(e){h.current&&m(e.message)}finally{h.current&&(f(!1),u(``))}};return a.kind===`record`?(0,C.jsx)(sM,{api:e.recording,who:a.name,...t?{createRecorder:t}:{},onClose:()=>{c(``),o({kind:`list`}),g()}}):(0,C.jsxs)(`div`,{className:`approval enroll glass`,role:`dialog`,"aria-label":`Family voices`,style:{pointerEvents:`auto`},children:[(0,C.jsx)(`div`,{className:`approval-head`,children:(0,C.jsx)(`span`,{className:`approval-title`,children:`Family voices`})}),a.kind===`list`&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`p`,{className:`auth-note`,children:`Friend knows your voice. Add the people at home, so it knows who is talking and answers them by name. They can chat and ask for the weather, but cannot use your PC or see your private things.`}),r&&!r.ownerEnrolled&&(0,C.jsx)(`p`,{className:`auth-note`,children:`First teach Friend your own voice (Esc, then Enroll my voice).`}),r&&r.people.length===0&&r.ownerEnrolled&&(0,C.jsx)(`p`,{className:`auth-note`,children:`Nobody added yet.`}),r&&r.people.length>0&&(0,C.jsx)(`ul`,{className:`household-list`,"aria-label":`People Friend knows`,children:r.people.map(e=>(0,C.jsxs)(`li`,{className:`household-row`,children:[(0,C.jsx)(`span`,{children:e.name}),(0,C.jsx)(`button`,{type:`button`,style:b,className:`danger`,onClick:()=>o({kind:`remove`,person:e}),"aria-label":`Remove ${e.name}`,children:`Remove`})]},e.id))}),r&&r.ownerEnrolled&&r.people.length<r.max&&(0,C.jsxs)(`label`,{className:`settings-field`,children:[(0,C.jsx)(`span`,{children:`Add a person`}),(0,C.jsx)(`input`,{value:s,maxLength:40,placeholder:`Name, for example Priya`,onChange:e=>c(e.target.value),onKeyDown:e=>e.key===`Enter`&&s.trim()&&!d&&void _()})]}),p&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:p}),(0,C.jsxs)(`div`,{className:`approval-actions`,children:[r&&r.ownerEnrolled&&r.people.length<r.max&&(0,C.jsx)(`button`,{type:`button`,style:b,className:`primary`,disabled:d||!s.trim(),onClick:()=>void _(),children:`Record their voice`}),(0,C.jsx)(`button`,{type:`button`,style:b,onClick:n,children:`Close`})]})]}),a.kind===`remove`&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`p`,{className:`auth-note`,children:[`Enter your PIN to remove `,a.person.name,`’s voice. Friend will treat their voice as a stranger’s.`]}),(0,C.jsx)(P,{pin:l,onChange:u}),p&&(0,C.jsx)(`p`,{role:`alert`,className:`auth-error`,children:p}),(0,C.jsxs)(`div`,{className:`approval-actions`,children:[(0,C.jsx)(`button`,{type:`button`,style:b,className:`danger`,disabled:d||l.length<6,onClick:()=>void y(a.person),children:`Remove`}),(0,C.jsx)(`button`,{type:`button`,style:b,onClick:()=>{u(``),m(null),o({kind:`list`})},children:`Back`})]})]})]})}var EM=`▌▍▎▏█▓▒░<>/\\|+-=*#%&0123456789ABCDEF`;function DM(e,t,n=Math.random){let r=[...e];if(t>=1)return e;let i=Math.floor(r.length*Math.max(0,t));return r.map((e,t)=>t<i||e===` `?e:EM[Math.floor(n()*36)]).join(``)}var OM=e=>e.length===0?0:Math.min(24,Math.max(6,Math.ceil([...e].length/2)));function kM(e,t){let[n,r]=(0,v.useState)(e),i=(0,v.useRef)(e);return(0,v.useEffect)(()=>{if(!t||e===i.current){i.current=e,r(e);return}i.current=e;let n=OM(e);if(n===0){r(e);return}let a=0,o=setInterval(()=>{a++,r(DM(e,a/n)),a>=n&&clearInterval(o)},320/n);return()=>clearInterval(o)},[e,t]),n}function AM(e){let t=e.currentTarget,n=t.getBoundingClientRect(),r=document.createElement(`span`);r.className=`hud-ripple`;let i=Math.max(n.width,n.height)*2;r.style.width=r.style.height=`${i}px`,r.style.left=`${e.clientX-n.left-i/2}px`,r.style.top=`${e.clientY-n.top-i/2}px`,t.appendChild(r),r.addEventListener(`animationend`,()=>r.remove(),{once:!0}),setTimeout(()=>r.remove(),900)}function jM({items:e,animations:t,onAction:n}){let[r,i]=(0,v.useState)(null),a=(0,v.useRef)(void 0);if((0,v.useEffect)(()=>()=>clearTimeout(a.current),[]),e.length===0)return null;let o=e=>{t!==`off`&&(i(e.id),clearTimeout(a.current),a.current=setTimeout(()=>i(null),650)),n(e)};return(0,C.jsxs)(xe,{id:`launcher`,label:`Quick launch`,wholeBox:!0,testId:`launcher`,className:`hud hud-launcher${t===`full`?` hud-boot`:``}`,children:[(0,C.jsx)(`div`,{className:`hud-kicker`,children:`Quick launch`}),(0,C.jsx)(`ul`,{className:`hud-stack`,children:e.map((e,n)=>(0,C.jsx)(`li`,{className:`hud-tab hud-cut${r===e.id?` engaged`:``}${t===`full`?` hud-boot`:``}`,style:{"--i":n+1},children:(0,C.jsxs)(`button`,{type:`button`,className:`hud-tab-main`,"aria-label":e.label,onPointerDown:t===`off`?void 0:AM,onClick:()=>o(e),children:[(0,C.jsx)(`span`,{className:`hud-icon`,"aria-hidden":`true`,children:e.icon}),(0,C.jsx)(`span`,{className:`hud-tab-label`,children:e.label}),(0,C.jsx)(`span`,{className:`hud-tab-engaged`,"aria-hidden":`true`,children:`ENGAGED`}),(0,C.jsx)(`span`,{className:`hud-sweep`,"aria-hidden":`true`}),(0,C.jsx)(`span`,{className:`hud-scan`,"aria-hidden":`true`})]})},e.id))})]})}var MM=class extends v.Component{state={failed:!1};static getDerivedStateFromError(){return{failed:!0}}render(){return this.state.failed?null:this.props.children}};function NM(e){let t=()=>({w:window.innerWidth,h:window.innerHeight}),[n,r]=(0,v.useState)(t);return(0,v.useEffect)(()=>{if(e)return;let n=()=>r(t());return window.addEventListener(`resize`,n),()=>window.removeEventListener(`resize`,n)},[e]),e??n}var PM=(0,v.lazy)(()=>PO(()=>import(`./jarvisTree-DB0IJJYC.js`),__vite__mapDeps([0,1,2])));function FM({node:e,children:t}){return _u(e.c,{...e.p??{},...e.kids?{kids:e.kids}:{}})?(0,C.jsx)(C.Fragment,{children:t}):(0,C.jsx)(`div`,{className:`ob-jlive`,children:(0,C.jsx)(v.Suspense,{fallback:t,children:(0,C.jsx)(PM,{node:e})})})}function IM(e,t,n=24){let[r,i]=(0,v.useState)([]),a=(0,v.useRef)(void 0),o=(0,v.useRef)(0);return(0,v.useEffect)(()=>{if(a.current===t)return;a.current=t;let r=Date.now();r-o.current<1e3||(o.current=r,i(t=>[...t,e].slice(-n)))},[e,t,n]),r}var LM=(e,t=0,n=100)=>Number.isFinite(e)?Math.min(n,Math.max(t,e)):t,RM=e=>e?{x:e.x,y:e.y,width:e.w,height:e.h}:{};function zM(){return(0,C.jsx)(`svg`,{width:`0`,height:`0`,"aria-hidden":`true`,style:{position:`absolute`},children:(0,C.jsxs)(`defs`,{children:[(0,C.jsxs)(`filter`,{id:`ob-glow`,x:`-50%`,y:`-50%`,width:`200%`,height:`200%`,children:[(0,C.jsx)(`feGaussianBlur`,{stdDeviation:`3`,result:`b`}),(0,C.jsxs)(`feMerge`,{children:[(0,C.jsx)(`feMergeNode`,{in:`b`}),(0,C.jsx)(`feMergeNode`,{in:`SourceGraphic`})]})]}),(0,C.jsxs)(`filter`,{id:`ob-glow2`,x:`-50%`,y:`-50%`,width:`200%`,height:`200%`,children:[(0,C.jsx)(`feGaussianBlur`,{stdDeviation:`7`,result:`b`}),(0,C.jsxs)(`feMerge`,{children:[(0,C.jsx)(`feMergeNode`,{in:`b`}),(0,C.jsx)(`feMergeNode`,{in:`SourceGraphic`})]})]}),(0,C.jsxs)(`radialGradient`,{id:`ob-orbg`,cx:`50%`,cy:`45%`,r:`55%`,children:[(0,C.jsx)(`stop`,{offset:`0`,stopColor:`#cffafe`}),(0,C.jsx)(`stop`,{offset:`0.25`,stopColor:`#22d3ee`}),(0,C.jsx)(`stop`,{offset:`0.6`,stopColor:`#0e7490`}),(0,C.jsx)(`stop`,{offset:`1`,stopColor:`#042f3c`})]}),(0,C.jsxs)(`linearGradient`,{id:`ob-sweep`,x1:`0`,y1:`0`,x2:`1`,y2:`0`,children:[(0,C.jsx)(`stop`,{offset:`0`,stopColor:`#22d3ee`,stopOpacity:`0`}),(0,C.jsx)(`stop`,{offset:`1`,stopColor:`#22d3ee`,stopOpacity:`0.7`})]}),(0,C.jsxs)(`linearGradient`,{id:`ob-fade`,x1:`0`,y1:`0`,x2:`0`,y2:`1`,children:[(0,C.jsx)(`stop`,{offset:`0`,stopColor:`#010609`}),(0,C.jsx)(`stop`,{offset:`0.15`,stopColor:`#010609`,stopOpacity:`0`}),(0,C.jsx)(`stop`,{offset:`0.85`,stopColor:`#010609`,stopOpacity:`0`}),(0,C.jsx)(`stop`,{offset:`1`,stopColor:`#010609`})]})]})})}function BM({variant:e=`chamfer`,tone:t=`cyan`,title:n,running:r=!1,className:i=``,style:a,children:o,...s}){return(0,C.jsxs)(`section`,{...s,className:`ob-frame ob-v-${e} ${i}`.trim(),"data-tone":t,...r?{"data-running":``}:{},style:a,children:[n&&(0,C.jsx)(`header`,{className:`ob-frame-title`,children:n}),(0,C.jsx)(`div`,{className:`ob-frame-body`,children:o})]})}var VM=`M60 170A90 90 0 0 1 240 170`,HM=`M76 170A74 74 0 0 1 224 170`;function UM({value:e,inner:t,label:n=`Gauge`,tone:r=`cyan`,frame:i}){let a=Math.round(LM(e));return(0,C.jsxs)(`svg`,{className:i?void 0:`ob-svg`,...RM(i),viewBox:`0 0 300 190`,role:`img`,"aria-label":`${n} ${a}%`,"data-value":a,"data-tone":r,children:[(0,C.jsx)(`path`,{d:VM,className:`ob-track`,strokeWidth:`14`,pathLength:100}),(0,C.jsx)(`path`,{d:VM,className:`ob-fill`,strokeWidth:`14`,pathLength:100,strokeDasharray:`${a} 100`,"data-arc":`outer`}),t!==void 0&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`path`,{d:HM,className:`ob-track`,strokeWidth:`6`,pathLength:100}),(0,C.jsx)(`path`,{d:HM,className:`ob-fill`,strokeWidth:`6`,pathLength:100,strokeDasharray:`${Math.round(LM(t))} 100`,stroke:`#a78bfa`,"data-arc":`inner`})]})]})}function WM({levels:e,tone:t=`cyan`,frame:n}){let r=Math.max(1,e.length)*12;return(0,C.jsx)(`svg`,{className:n?void 0:`ob-svg`,...RM(n),viewBox:`0 0 ${r} 100`,preserveAspectRatio:`none`,"aria-hidden":`true`,"data-tone":t,children:e.map((e,t)=>(0,C.jsx)(`rect`,{className:`ob-eq`,x:t*12,y:0,width:8,height:100,style:{"--lv":Math.max(.05,LM(e,0,1)),animationDelay:`${-(t*.37%.9)}s`,transform:`scaleY(${Math.max(.05,LM(e,0,1))})`}},t))})}var GM=`M0 40H40L52 20L66 62L80 8L96 52L108 40H190L202 28L214 48L226 40H300`;function KM({tone:e=`cyan`,frame:t}){return(0,C.jsxs)(`svg`,{className:t?void 0:`ob-svg`,...RM(t),viewBox:`0 0 300 70`,"aria-hidden":`true`,"data-tone":e,children:[(0,C.jsx)(`path`,{className:`ob-ecg-base`,d:GM}),(0,C.jsx)(`path`,{className:`ob-ecg`,d:GM})]})}function qM({blips:e,frame:t}){return(0,C.jsxs)(`svg`,{className:t?void 0:`ob-svg`,...RM(t),viewBox:`-120 -120 240 240`,role:`img`,"aria-label":`Devices: ${e.map(e=>e.label).join(`, `)||`none`}`,children:[(0,C.jsxs)(`g`,{fill:`none`,stroke:`var(--ob-line)`,children:[(0,C.jsx)(`circle`,{r:`110`}),(0,C.jsx)(`circle`,{r:`73`}),(0,C.jsx)(`circle`,{r:`36`}),(0,C.jsx)(`line`,{x1:`-110`,x2:`110`}),(0,C.jsx)(`line`,{y1:`-110`,y2:`110`})]}),(0,C.jsx)(`circle`,{r:`110`,fill:`none`,stroke:`#67e8f9`,strokeWidth:`2`,strokeDasharray:`1 9`}),(0,C.jsxs)(`g`,{className:`ob-sweep`,children:[(0,C.jsx)(`path`,{d:`M0 0L110 0A110 110 0 0 0 95 -55Z`,fill:`url(#ob-sweep)`}),(0,C.jsx)(`line`,{x2:`110`,stroke:`#67e8f9`,strokeWidth:`2`})]}),e.map(e=>{let t=e.angle*Math.PI/180,n=Math.cos(t)*LM(e.distance,0,1)*100,r=-Math.sin(t)*LM(e.distance,0,1)*100;return(0,C.jsxs)(`g`,{"data-blip":``,...e.dim?{"data-dim":``}:{},children:[(0,C.jsx)(`circle`,{className:`ob-blip${e.warn?` ob-blip-warn`:``}`,cx:n,cy:r,r:`5`}),(0,C.jsx)(`text`,{x:n+9,y:r+4,fontSize:`11`,fill:`currentColor`,opacity:e.dim?.5:1,children:e.label})]},e.label)})]})}var JM={done:`var(--ob-green)`,doing:`var(--ob-cyan)`,review:`var(--ob-orange)`,todo:`var(--ob-dim)`},YM=e=>e%2==0?6:5;function XM({cells:e,placeholder:t=!1,frame:n}){t&&(e=Array.from({length:11},()=>({status:`todo`})));let r=[],i=0,a=0;for(let t of e)a>=YM(i)&&(i++,a=0),r.push({x:20+a*40+i%2*20,y:20+i*35,status:t.status}),a++;let o=r.length?i+1:1;return(0,C.jsx)(`svg`,{className:n?void 0:`ob-svg`,...RM(n),viewBox:`0 0 260 ${o*35+10}`,"aria-hidden":`true`,...t?{"data-placeholder":``}:{},children:r.map((e,t)=>(0,C.jsx)(`polygon`,{"data-status":e.status,points:`-20,0 -10,-17.3 10,-17.3 20,0 10,17.3 -10,17.3`,transform:`translate(${e.x} ${e.y})`,fill:`none`,stroke:JM[e.status],strokeWidth:`1.6`,className:e.status===`review`?`ob-pulse`:void 0},t))})}function ZM({rings:e,placeholder:t=!1,frame:n}){t&&(e=[{value:0},{value:0},{value:0}]);let r=t?{"aria-hidden":!0,"data-placeholder":``}:{role:`img`,"aria-label":e.map(e=>`${e.label??`ring`} ${Math.round(LM(e.value))}%`).join(`, `)||`no data`};return(0,C.jsx)(`svg`,{className:n?void 0:`ob-svg`,...RM(n),viewBox:`-50 -50 100 100`,...r,children:e.map((e,t)=>{let n=38-t*12;if(n<=2)return null;let r=Math.round(LM(e.value));return(0,C.jsxs)(`g`,{"data-tone":e.tone??`cyan`,transform:`rotate(-90)`,children:[(0,C.jsx)(`circle`,{r:n,className:`ob-track`,strokeWidth:`8`}),(0,C.jsx)(`circle`,{r:n,className:`ob-fill`,strokeWidth:`8`,pathLength:100,strokeDasharray:`${r} 100`,"data-ring":t,"data-value":r})]},t)})})}function QM({value:e,segments:t=60,radius:n=205,size:r=460}){let i=Math.round(t*LM(e)/100),a=r/2;return(0,C.jsx)(`svg`,{className:`ob-svg`,viewBox:`0 0 ${r} ${r}`,"aria-hidden":`true`,children:Array.from({length:t},(e,r)=>{let o=(-90+r*360/t)*Math.PI/180,[s,c]=[n-7,n+7];return(0,C.jsx)(`line`,{className:`ob-seg`,"data-seg":``,"data-on":r<i?`true`:`false`,x1:a+s*Math.cos(o),y1:a+s*Math.sin(o),x2:a+c*Math.cos(o),y2:a+c*Math.sin(o)},r)})})}var $M={running:`green`,waiting:`orange`,idle:`cyan`,add:`cyan`};function eN({label:e,glyph:t,caption:n,detail:r,status:i=`idle`,onClick:a,x:o,y:s}){let c=o!==void 0&&s!==void 0?{left:o,top:s}:void 0;return(0,C.jsxs)(`button`,{type:`button`,className:`ob-node`,"data-tone":$M[i],"data-status":i,"aria-label":r?`${e}, ${r}`:e,title:e,style:c,onClick:a,children:[(0,C.jsxs)(`svg`,{viewBox:`-34 -30 68 60`,"aria-hidden":`true`,children:[(0,C.jsx)(`polygon`,{points:`-34,0 -17,-29.4 17,-29.4 34,0 17,29.4 -17,29.4`}),(0,C.jsx)(`text`,{className:`ob-node-label${t?` ob-glyph`:``}`,children:t??(e.length>6?`${e.slice(0,5)}…`:e)})]}),n&&(0,C.jsx)(`span`,{className:`ob-node-caption`,children:n})]})}function tN({x1:e,y1:t,x2:n,y2:r,tone:i=`cyan`,flowing:a=!0}){return(0,C.jsx)(`line`,{className:`ob-link${a?` ob-flow`:``}`,"data-tone":i,x1:e,y1:t,x2:n,y2:r})}var nN=1e4;function rN({stats:e,now:t=Date.now()}){let n=e?Math.round(e.cpu):0,r=e&&e.ramTotal>0?Math.round(100*e.ramUsed/e.ramTotal):0,i=!!e&&t-e.at>1e4;return(0,C.jsxs)(`svg`,{className:`ob-wsvg`,viewBox:`0 0 300 220`,children:[(0,C.jsx)(`text`,{className:`ob-lab`,x:`12`,y:`8`,children:`SYSTEM · CPU / RAM`}),(0,C.jsx)(`path`,{className:`ob-bracket`,d:`M0 20H20M0 20V40M300 20H280M300 20V40`}),(0,C.jsx)(UM,{value:n,inner:r,label:`CPU`,frame:{x:0,y:20,w:300,h:190}}),e?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`text`,{className:`ob-big`,x:`150`,y:`170`,textAnchor:`middle`,children:[n,`%`]}),(0,C.jsxs)(`text`,{className:`ob-dim`,x:`150`,y:`192`,textAnchor:`middle`,children:[`CPU · RAM `,r,`%`,i?` · STALE`:``]})]}):(0,C.jsx)(`text`,{className:`ob-dim`,x:`150`,y:`180`,textAnchor:`middle`,children:`Waiting for data`})]})}function iN(e){if(e<1024)return`${Math.round(e)} B`;let t=[`KB`,`MB`,`GB`,`TB`],n=e/1024,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r++;return`${n.toFixed(1)} ${t[r]}`}function aN({stats:e,now:t=Date.now()}){let n=!!e&&e.netDown===0&&e.netUp===0,r=!!e&&t-e.at>1e4;return(0,C.jsxs)(`svg`,{className:`ob-wsvg`,viewBox:`0 0 300 110`,children:[(0,C.jsx)(`text`,{className:`ob-lab`,x:`0`,y:`8`,children:`NETWORK`}),(0,C.jsx)(KM,{frame:{x:0,y:20,w:300,h:70}}),(0,C.jsxs)(`text`,{className:`ob-dim`,x:`0`,y:`104`,children:[e?n?`n/a`:`↓ ${iN(e.netDown)}/s ↑ ${iN(e.netUp)}/s`:`Waiting for data`,r?` · stale`:``]})]})}var oN=e=>Math.max(0,Math.min(100,Math.round(e))),sN=(e,t,n=`200px`)=>({c:`JGaugeChart`,p:{value:oN(e),min:0,max:100,size:n,label:t,displayValue:`${oN(e)}%`,showNeedle:!1,showTicks:!1,showMinMax:!1}}),cN=(e,t=`260px`)=>({c:`JSparkline`,p:{data:e.length>1?e:[0,0],showArea:!0,showTrend:!1,height:`48px`,width:t}});function lN({node:e}){return(0,C.jsx)(FM,{node:e,children:(0,C.jsx)(`span`,{className:`ob-pic-wait`})})}function uN({k:e,v:t,tone:n}){return(0,C.jsxs)(`p`,{className:`ob-fact${n?` ob-fact-${n}`:``}`,children:[(0,C.jsx)(`span`,{children:e}),(0,C.jsx)(`b`,{children:t})]})}var dN=({children:e})=>(0,C.jsx)(`p`,{className:`ob-say`,children:e}),fN=({children:e})=>(0,C.jsx)(`p`,{className:`ob-sub ob-head`,children:e}),pN=e=>e<5e3?`just now`:e<6e4?`${Math.round(e/1e3)} s ago`:`${Math.round(e/6e4)} min ago`;function mN({stats:e,cpuHist:t,ramHist:n}){let r=e?oN(e.cpu):0,i=e&&e.ramTotal>0?oN(100*e.ramUsed/e.ramTotal):0;if(!e)return(0,C.jsx)(dN,{children:`Waiting for the first reading from this PC.`});let a=Date.now()-e.at>nN,o=r>85||i>92?`The PC is under heavy load. If it feels slow, close big programs or browser tabs you are not using.`:r>60||i>80?`Busy, but fine. Nothing needs doing unless it feels slow.`:`Light load. There is plenty of room for more work.`;return(0,C.jsxs)(`div`,{className:`ob-details`,children:[(0,C.jsxs)(`div`,{className:`ob-pics`,children:[(0,C.jsx)(lN,{node:sN(r,`CPU`)}),(0,C.jsx)(lN,{node:sN(i,`Memory`)})]}),(0,C.jsx)(uN,{k:`Processor now`,v:`${r}%`,tone:r>85?`warn`:void 0}),(0,C.jsx)(uN,{k:`Memory now`,v:`${i}% (${iN(e.ramUsed)} of ${iN(e.ramTotal)})`,tone:i>92?`warn`:void 0}),(0,C.jsx)(uN,{k:`Memory free`,v:iN(Math.max(0,e.ramTotal-e.ramUsed))}),(0,C.jsx)(uN,{k:`Last reading`,v:a?`${pN(Date.now()-e.at)} (stale: the PC agent may be off)`:pN(Date.now()-e.at),tone:a?`warn`:`ok`}),(0,C.jsx)(fN,{children:`Last minute or so`}),(0,C.jsxs)(`div`,{className:`ob-pics`,children:[(0,C.jsx)(lN,{node:cN(t,`230px`)}),(0,C.jsx)(lN,{node:cN(n,`230px`)})]}),(0,C.jsx)(`p`,{className:`ob-trend`,children:`processor, then memory`}),(0,C.jsx)(dN,{children:o})]})}function hN({voice:e,lastHeard:t}){let n=e.mode!==`idle`||e.level>.05,r={idle:`Waiting`,listening:`Listening to you`,transcribing:`Turning your words into text`,speaking:`Speaking`}[e.mode];return(0,C.jsxs)(`div`,{className:`ob-details`,children:[(0,C.jsx)(lN,{node:{c:`JWaveform`,p:{barCount:36,height:`64px`,active:n}}}),(0,C.jsx)(uN,{k:`Doing now`,v:r,tone:n?`ok`:void 0}),(0,C.jsx)(uN,{k:`Sound level`,v:`${Math.round(e.level*100)}%`}),(0,C.jsx)(uN,{k:`Voice on this PC`,v:e.available?`ready`:`not set up`,tone:e.available?`ok`:`warn`}),(0,C.jsx)(uN,{k:`Your voice enrolled`,v:e.enrolled?`yes: strangers are recognised`:`no`}),t&&(0,C.jsx)(uN,{k:`You last said`,v:t.length>90?`${t.slice(0,89)}…`:t}),(0,C.jsx)(dN,{children:e.available?`Hold Space (or press and hold the talk button) and speak; let go to send. Friend answers aloud when you spoke to it.`:`Voice is not set up on this PC yet. Run friend voice setup in the terminal, then restart Friend.`})]})}function gN({stats:e,down:t,up:n}){if(!e)return(0,C.jsx)(dN,{children:`Waiting for the first reading from this PC.`});let r=e.netDown===0&&e.netUp===0;return(0,C.jsxs)(`div`,{className:`ob-details`,children:[(0,C.jsxs)(`div`,{className:`ob-pics`,children:[(0,C.jsx)(lN,{node:cN(t,`260px`)}),(0,C.jsx)(lN,{node:cN(n,`260px`)})]}),(0,C.jsx)(`p`,{className:`ob-trend`,children:`downloading, then uploading`}),(0,C.jsx)(uN,{k:`Download now`,v:r?`n/a`:`${iN(e.netDown)}/s`}),(0,C.jsx)(uN,{k:`Upload now`,v:r?`n/a`:`${iN(e.netUp)}/s`}),(0,C.jsx)(uN,{k:`Fastest download seen`,v:t.length?`${iN(Math.max(...t))}/s`:`n/a`}),(0,C.jsx)(uN,{k:`Fastest upload seen`,v:n.length?`${iN(Math.max(...n))}/s`:`n/a`}),(0,C.jsx)(dN,{children:r?`This PC does not report network speed, or nothing is moving right now.`:`The speed of everything on this PC, not only Friend. A busy line usually means a download, an update or a video.`})]})}function _N({deviceOnline:e,voiceAvailable:t}){let n=(e,t,n,r)=>(0,C.jsxs)(`div`,{className:`ob-device`,children:[(0,C.jsx)(uN,{k:e,v:t?`online`:`offline`,tone:t?`ok`:`warn`}),(0,C.jsx)(`p`,{className:`ob-say ob-small`,children:t?n:r})]},e);return(0,C.jsxs)(`div`,{className:`ob-details`,children:[n(`This screen`,!0,`You are looking at it: Friend shows pictures, captions and these instruments here.`,``),n(`PC agent`,e,`Runs commands and reads files on this PC when you ask, after your approval.`,`Friend cannot run commands or read files on this PC until the agent is running again (friend start).`),n(`Voice`,t,`Listens when you hold Space and speaks the answers.`,`Voice is not set up on this PC yet (friend voice setup).`)]})}function vN({office:e}){if(!e.enabled)return(0,C.jsx)(dN,{children:`The Office is switched off, so there are no workers or tickets. Turn it on in Settings, Office, then ask Friend to hire someone.`});let t=t=>e.tickets.filter(e=>e.status===t).length,n=t=>e.workers.find(e=>e.id===t)?.name??(t||`nobody yet`),r=[...e.tickets].sort((e,t)=>t.id-e.id).slice(0,8);return(0,C.jsxs)(`div`,{className:`ob-details`,children:[(0,C.jsx)(uN,{k:`Done`,v:t(`done`),tone:`ok`}),(0,C.jsx)(uN,{k:`Being worked on`,v:t(`doing`)}),(0,C.jsx)(uN,{k:`Waiting for review`,v:t(`review`)+t(`blocked`),tone:t(`review`)+t(`blocked`)>0?`warn`:void 0}),(0,C.jsx)(uN,{k:`Not started`,v:t(`todo`)}),(0,C.jsx)(fN,{children:`Newest tickets`}),r.length===0&&(0,C.jsx)(dN,{children:`No tickets yet. Ask Friend to give a worker something to do.`}),r.map(e=>(0,C.jsxs)(`p`,{className:`ob-li ob-wrap`,children:[`#`,e.id,` · `,e.title,` · `,e.status,` · `,n(e.workerId)]},e.id))]})}var yN=!1;typeof document<`u`&&(document.addEventListener(`keydown`,()=>yN=!0,!0),document.addEventListener(`pointerdown`,()=>yN=!1,!0),document.addEventListener(`mousedown`,()=>yN=!1,!0));var bN=()=>yN,xN={starting:`running`,running:`running`,waiting:`waiting`,idle:`idle`,paused:`idle`,stopped:`idle`,failed:`idle`};function SN(e,t){let n=e.slice(0,5).map(e=>({id:e.id,label:e.name,glyph:e.name.slice(0,6).toUpperCase(),caption:e.name,status:xN[e.status],detail:e.detail||e.status,kind:`worker`}));return t&&e.length<5&&n.push({id:`hire`,label:`Hire a worker`,glyph:`+`,caption:`HIRE WORKER`,status:`add`,detail:`HIRE WORKER`,kind:`hire`}),n}var CN={done:`done`,doing:`doing`,review:`review`,blocked:`review`,todo:`todo`},wN=[`done`,`doing`,`review`,`todo`];function TN(e){return[...e].sort((e,t)=>e.id-t.id).slice(-11).map(e=>({status:CN[e.status]})).sort((e,t)=>wN.indexOf(e.status)-wN.indexOf(t.status))}function EN(e){let t=[...new Set(e.map(e=>e.projectId))];if(t.length!==0)return t.length===1?t[0]:`${t.length} projects`}var DN=e=>e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(e);function ON(e){let t=e=>e.name.slice(0,6).toUpperCase(),n=e.filter(e=>e.budget!==null&&e.budget>0);if(n.length>0)return n.slice(0,3).map(e=>{let n=LM(e.tokens/e.budget*100);return{label:t(e),value:n,text:`${Math.round(n)}%`}});let r=Math.max(0,...e.map(e=>e.tokens));return[...e].sort((e,t)=>t.tokens-e.tokens).slice(0,3).map(e=>({label:t(e),value:r>0?LM(Math.max(+(e.tokens>0),Math.round(e.tokens/r*100))):0,text:DN(e.tokens)}))}var kN={tool:`green`,result:`green`,approval:`orange`,error:`orange`,text:`plain`};function AN(e,t){if(e!==`idle`||!t.enabled)return e;if(t.workers.some(e=>e.status===`waiting`))return`needs you`;let n=t.workers.filter(e=>e.status===`running`||e.status===`starting`).length;return n>0?`working · ${n}`:e}function jN(e,t,n=8){return t.flatMap(t=>(e[t.id]??[]).map(e=>({...e,name:t.name.slice(0,6).toUpperCase().padEnd(7)}))).sort((e,t)=>e.at-t.at).slice(-n).map(e=>({text:`${e.name}${e.text}`,tone:kN[e.kind]??`plain`}))}var MN=e=>{let t=Math.max(1,Math.round(e/6e4));return t>=60?`${Math.floor(t/60)}H ${String(t%60).padStart(2,`0`)}M`.replace(/ 0(\d)M/,` $1M`):`${t}M`};function NN(e,t,n){let r=e.fiveHour;return r&&r.resetsAt*1e3>n?{value:Math.round(LM(r.utilization*100)),reset:MN(r.resetsAt*1e3-n),real:!0}:{value:t,reset:null,real:!1}}function PN(e){let t=new Map(e.map(e=>[e.id,e])),n=e=>{let n=new Set([e.id]);for(let r=e.managerId;r&&t.has(r);r=t.get(r).managerId){if(n.has(r))return r===e.id;n.add(r)}return!1},r=e=>e.managerId&&t.has(e.managerId)&&!n(e)?e.managerId:`friend`,i=new Map;for(let t of e)i.set(r(t),[...i.get(r(t))??[],t]);let a=new Map,o=e=>{let t=i.get(e)??[],n=t.length===0?190:Math.max(190,t.reduce((e,t)=>e+o(t.id),0)+(t.length-1)*26);return a.set(e,n),n};o(`friend`);let s=[],c=[],l=0,u=(e,n,r)=>{l=Math.max(l,r);let o=i.get(e)??[],d=r*134,f;if(o.length===0)f=n+(a.get(e)-190)/2;else{let t=n,i=o.map(e=>{let n=u(e.id,t,r+1);return t+=a.get(e.id)+26,n});f=(i[0]+i[i.length-1])/2;for(let[t,n]of o.entries())c.push({from:e,to:n.id,x1:f+95,y1:d+78,x2:i[t]+95,y2:d+78+56})}return s.push({id:e,x:f,y:d,worker:e===`friend`?null:t.get(e)}),f};return u(`friend`,0,0),{nodes:s,edges:c,width:a.get(`friend`),height:(l+1)*78+l*56}}var FN=[{id:`system`,title:`System`,anchor:`left`,box:{x:40,y:70,w:300,h:220},tone:`cyan`,minDensity:`standard`},{id:`voice`,title:`Voice`,anchor:`left`,box:{x:40,y:310,w:300,h:150},tone:`cyan`,minDensity:`standard`},{id:`network`,title:`Network`,anchor:`left`,box:{x:40,y:480,w:300,h:110},tone:`cyan`,minDensity:`standard`},{id:`feed`,title:`Activity`,anchor:`left`,box:{x:40,y:650,w:430,h:210},tone:`green`,minDensity:`standard`},{id:`radar`,title:`Devices`,anchor:`right`,box:{x:1310,y:60,w:250,h:270},tone:`cyan`,minDensity:`standard`},{id:`tickets`,title:`Tickets`,anchor:`right`,box:{x:1300,y:320,w:270,h:160},tone:`green`,minDensity:`standard`},{id:`budget`,title:`Budget`,anchor:`right`,box:{x:1300,y:480,w:270,h:110},tone:`cyan`,minDensity:`standard`},{id:`approval`,title:`Approvals`,anchor:`right`,box:{x:1180,y:650,w:380,h:210},tone:`orange`,minDensity:`standard`},{id:`usage`,title:`Usage`,anchor:`centre`,box:{x:700,y:215,w:200,h:30},tone:`cyan`,minDensity:`calm`}];if(FN.length!==Ku.length)throw Error(`the widget registry and HUD_WIDGET_IDS differ`);var IN={calm:0,standard:1,full:2},LN=[`system`,`voice`,`network`,`feed`,`radar`,`tickets`];function RN(e,t,n,r,i=[],a=!1){return FN.filter(n=>{if(n.id===`approval`&&r)return!0;let o=t[n.id];return o===!1?!1:a?!0:n.id===`approval`?o===!0:LN.includes(n.id)?o===!0||i.includes(n.id):o===!0||IN[e]>=IN[n.minDensity]})}function zN({rings:e=[]}){let t=e.length===0;return(0,C.jsxs)(`svg`,{className:`ob-wsvg`,viewBox:`0 0 270 110`,children:[(0,C.jsx)(ZM,{rings:e.map((e,t)=>({value:e.value,label:e.label,tone:[`cyan`,`cyan`,`green`][t]??`cyan`})),placeholder:t,frame:{x:-10,y:-10,w:100,h:100}}),(0,C.jsx)(`text`,{className:`ob-lab`,x:`104`,y:`26`,children:`BUDGET`}),t?(0,C.jsx)(`text`,{className:`ob-sm`,x:`104`,y:`46`,children:`No workers yet`}):e.slice(0,3).map((e,t)=>(0,C.jsxs)(`text`,{className:`ob-sm`,x:`104`,y:46+t*18,children:[e.label,` `,e.text??`${Math.round(e.value)}%`]},e.label))]})}var BN=8,VN=46,HN=e=>e.length>VN?`${e.slice(0,45)}…`:e;function UN({lines:e,activity:t,busy:n,limit:r=BN,marquee:i=!1}){let a=Math.min(r,BN-+!!n),o=i?e:e.slice(-a),s=`M0 0H400L430 30V210H0Z`,c=(e,t,n)=>(0,C.jsxs)(`text`,{className:`tone`in e?`ob-sm ${e.tone===`green`?`ob-grn`:e.tone===`orange`?`ob-org`:``}`.trim():e.role===`user`?`ob-sm`:`ob-sm ob-grn`,x:`22`,y:t,children:[`tone`in e?``:e.role===`user`?`▸ `:`◂ `,HN(e.text)]},n);return(0,C.jsxs)(`svg`,{className:`ob-wsvg ob-feed-svg`,viewBox:`0 0 430 210`,"aria-live":`polite`,children:[(0,C.jsx)(`defs`,{children:(0,C.jsx)(`clipPath`,{id:`ob-feed-clip`,children:(0,C.jsx)(`rect`,{x:`0`,y:`38`,width:`430`,height:`168`})})}),(0,C.jsx)(`path`,{className:`ob-feed-frame`,d:s}),(0,C.jsx)(`path`,{className:`ob-feed-run`,d:s,pathLength:100}),(0,C.jsx)(`text`,{className:`ob-lab`,x:`16`,y:`18`,children:`WORKER FEED · LIVE`}),(0,C.jsx)(`circle`,{className:`ob-pulse`,cx:`410`,cy:`14`,r:`4`,fill:`#34d399`}),o.length===0&&!n&&(0,C.jsx)(`text`,{className:`ob-dim`,x:`22`,y:`60`,children:`Nothing yet`}),(0,C.jsx)(`g`,{clipPath:`url(#ob-feed-clip)`,children:i?(0,C.jsx)(`g`,{className:`ob-feed-scroll`,style:{"--n":o.length*20},children:[0,1].flatMap(e=>o.map((t,n)=>c(t,56+(e*o.length+n)*20,`${e}-${n}`)))}):(0,C.jsxs)(`g`,{className:`ob-feed-in`,children:[o.map((e,t)=>c(e,56+t*20,String(t))),n&&(0,C.jsxs)(`text`,{className:`ob-sm ob-org`,x:`22`,y:56+o.length*20,children:[`⚙ `,HN(t??`Working…`)]})]},`${e.length}:${o.at(-1)?.text??``}`)}),(0,C.jsx)(`rect`,{className:`ob-feed-fade`,x:`1`,y:`38`,width:`428`,height:`168`,fill:`url(#ob-fade)`,pointerEvents:`none`})]})}function WN({lines:e,activity:t,busy:n,workers:r=[]}){let i=(0,v.useRef)(null);return(0,v.useEffect)(()=>{let e=i.current;e&&(e.scrollTop=e.scrollHeight)},[e.length,r.length]),(0,C.jsxs)(`div`,{className:`ob-feed`,"aria-live":`polite`,ref:i,children:[e.length===0&&r.length===0&&!n&&(0,C.jsx)(`p`,{className:`ob-li ob-sub`,children:`Nothing yet`}),r.map((e,t)=>(0,C.jsx)(`p`,{className:`ob-li${e.tone===`green`?` ob-live`:e.tone===`orange`?` ob-warn`:``}`,children:e.text},`w${t}`)),e.slice(-200).map((e,t)=>(0,C.jsxs)(`p`,{className:`ob-li ${e.role===`user`?`ob-user`:``}`,children:[e.role===`user`?`▸ `:`◂ `,e.text]},t)),n&&(0,C.jsxs)(`p`,{className:`ob-li ob-live`,children:[`⚙ `,t??`Working…`]})]})}var GN={system:`How hard this PC is working: the arc and the first row are the processor, the second row is the memory, and below are the memory figures.`,voice:`The sound Friend is hearing or speaking, live.`,network:`How fast data moves in and out of this PC. Some PCs do not report it.`,feed:`The conversation and what Friend is doing right now.`,radar:`The things Friend can reach: this screen, the PC's agent and the voice. A dim one is offline.`,tickets:`The work given to hired workers, one cell each. Switch the Office on in Settings to hire workers.`,budget:`How much of each worker's limit is used. Limits are set in Settings, Office.`,approval:`Something is waiting for your answer.`,usage:`Today's usage compared with your busiest day of the last 30.`},KN={voice:`Voice`,chat:`Chat`,task:`Scheduled tasks`,channel:`Messages`,other:`Other`};function qN({api:e}){let[t,n]=(0,v.useState)(null),[r,i]=(0,v.useState)(!1);return(0,v.useEffect)(()=>{let t=!0;return e.summary(30).then(e=>t&&n(e)).catch(()=>t&&i(!0)),()=>{t=!1}},[e]),r?(0,C.jsx)(`p`,{className:`ob-li ob-sub`,children:`Could not read the usage`}):t?t.bySource.length===0?(0,C.jsx)(`p`,{className:`ob-li ob-sub`,children:`No usage yet`}):(0,C.jsx)(`div`,{className:`ob-usage-detail`,children:t.bySource.map(e=>(0,C.jsxs)(`p`,{className:`ob-li`,children:[KN[e.source]??e.source,` · `,lC(e.input+e.output),` tokens · `,e.turns,` turns`]},e.source))}):(0,C.jsx)(`p`,{className:`ob-li ob-sub`,children:`Reading…`})}var JN={cpu:[],ram:[],down:[],up:[]};function YN({id:e,state:t,rect:n,usageApi:r=oC,readings:i=JN,onClose:a}){let o=(0,v.useRef)(null);(0,v.useEffect)(()=>{bN()&&o.current?.focus()},[e]);let s=FN.find(t=>t.id===e)?.title??e,c=(()=>{switch(e){case`system`:return(0,C.jsx)(mN,{stats:t.stats,cpuHist:i.cpu,ramHist:i.ram});case`network`:return(0,C.jsx)(gN,{stats:t.stats,down:i.down,up:i.up});case`radar`:return(0,C.jsx)(_N,{deviceOnline:t.deviceOnline,voiceAvailable:t.voice.available});case`voice`:return(0,C.jsx)(hN,{voice:t.voice,lastHeard:[...t.chat].reverse().find(e=>e.role===`user`)?.text??null});case`feed`:return(0,C.jsx)(WN,{lines:t.chat,activity:t.activity,busy:t.busy,workers:t.office.enabled?jN(t.office.feed,t.office.workers,60):[]});case`tickets`:return(0,C.jsx)(vN,{office:t.office});case`budget`:return(0,C.jsx)(zN,{rings:ON(t.office.workers)});case`usage`:return(0,C.jsx)(qN,{api:r});default:return null}})();return(0,C.jsxs)(BM,{variant:`chamfer`,running:!0,title:s,className:`ob-expanded ob-hit`,style:{position:`absolute`,left:n.x,top:n.y,width:n.width,height:n.height},role:`dialog`,"aria-label":s,children:[(0,C.jsx)(`button`,{ref:o,type:`button`,className:`ob-close`,"aria-label":`Close`,onClick:a,children:`×`}),(0,C.jsx)(`div`,{className:`ob-expanded-body`,children:c}),(0,C.jsx)(`p`,{className:`ob-explain`,children:GN[e]})]})}var XN=e=>Math.max(0,Math.min(100,Math.round(e))),ZN=(e,t,n=`cyan`)=>({c:`JHudFrameCard`,p:{title:e,color:n,showStatusDot:!0,width:`100%`},kids:t}),QN=(e,t,n,r)=>({c:`JDataRow`,p:{label:e,value:t,...n===void 0?{}:{barPercent:XN(n)},...r?{state:r}:{}}});function $N(e,t=!1){let n=e?XN(e.cpu):0,r=e&&e.ramTotal>0?XN(100*e.ramUsed/e.ramTotal):0;return ZN(`System`,[{c:`Row`,p:{gap:12},kids:[{c:`JGaugeChart`,p:{value:n,min:0,max:100,size:t?`190px`:`150px`,label:`CPU`,displayValue:`${n}%`,showNeedle:!1,showTicks:!1,showMinMax:!1}},{c:`Column`,p:{gap:6},kids:e?[QN(`CPU`,`${n}%`,n,n>85?`warning`:void 0),QN(`RAM`,`${r}%`,r,r>90?`warning`:void 0),...t?[QN(`RAM USED`,iN(e.ramUsed)),QN(`RAM TOTAL`,iN(e.ramTotal))]:[]]:[`Waiting for data`]}]}])}function eP(e,t){let n=t!==`idle`||e>.05;return ZN(`Voice`,[{c:`JWaveform`,p:{barCount:28,height:`48px`,active:n}},{c:`JStatusPill`,p:{state:n?`active`:`success`},kids:[n?String(t):`quiet`]}])}function tP(e,t){let n=!!e&&e.netDown===0&&e.netUp===0;return ZN(`Network`,[{c:`Row`,p:{gap:12},kids:[{c:`JSparkline`,p:{data:t.length>1?t:[0,0],showArea:!0,height:`40px`,width:`130px`}},{c:`Column`,p:{gap:4},kids:e?n?[`n/a on this PC`]:[QN(`DOWN`,`${iN(e.netDown)}/s`),QN(`UP`,`${iN(e.netUp)}/s`)]:[`Waiting for data`]}]}])}function nP(e,t,n){let r=e.slice(-6).map((e,t)=>({id:`l${t}`,message:e.text.slice(0,120),level:e.tone===`orange`?`warn`:`info`}));return n&&t&&r.push({id:`now`,message:t,level:`info`}),ZN(`Activity`,[{c:`JActivityFeed`,p:{items:r.length?r:[{id:`none`,message:`Nothing yet`,level:`info`}],maxRows:6,showTime:!1,showSource:!1}}],`green`)}function rP(e,t){let n=(e,t)=>({c:`JStatusPill`,p:{state:t?`active`:`error`},kids:[`${e} ${t?`online`:`offline`}`]});return ZN(`Devices`,[{c:`Column`,p:{gap:8},kids:[n(`This screen`,!0),n(`PC agent`,e),n(`Voice`,t)]}])}function iP(e,t){let n=t=>e.filter(e=>e.status===t).length,r=e.length,i=e=>r?100*e/r:0;return ZN(t?`Tickets: ${t}`:`Tickets`,r?[QN(`DONE`,String(n(`done`)),i(n(`done`)),`success`),QN(`DOING`,String(n(`doing`)),i(n(`doing`))),QN(`REVIEW`,String(n(`review`)),i(n(`review`)),`warning`),QN(`TODO`,String(n(`todo`)),i(n(`todo`)))]:[`No tickets yet`],`green`)}function aP({worker:e,feed:t,rect:n,send:r,onClose:i}){let a=(0,v.useRef)(null),o=(0,v.useRef)(null),[s,c]=(0,v.useState)(``),[l,u]=(0,v.useState)(!1);(0,v.useEffect)(()=>{bN()&&a.current?.focus()},[e.id]),(0,v.useEffect)(()=>{let e=o.current;e&&(e.scrollTop=e.scrollHeight)},[t.length]);let d=()=>{let t=s.trim();t&&(r({type:`office.say`,workerId:e.id,text:t}),c(``))},f=e.status===`starting`||e.status===`running`||e.status===`waiting`;return(0,C.jsxs)(BM,{variant:`chamfer`,running:!0,title:e.name,className:`ob-expanded ob-hit`,style:{position:`absolute`,left:n.x,top:n.y,width:n.width,height:n.height},role:`dialog`,"aria-label":e.name,children:[(0,C.jsx)(`button`,{ref:a,type:`button`,className:`ob-close`,"aria-label":`Close`,onClick:i,children:`×`}),(0,C.jsxs)(`div`,{className:`ob-expanded-body ob-worker`,children:[(0,C.jsxs)(`p`,{className:`ob-li`,children:[e.status,e.detail?` · ${e.detail}`:``]}),(0,C.jsxs)(`p`,{className:`ob-li ob-sub`,children:[`Tokens `,e.tokens,e.budget?` of ${e.budget}`:``]}),(0,C.jsx)(`div`,{className:`ob-worker-log`,ref:o,"aria-live":`polite`,children:t.length===0?(0,C.jsx)(`p`,{className:`ob-li ob-sub`,children:`Nothing yet`}):t.map((e,t)=>(0,C.jsx)(`p`,{"data-feed-line":``,"data-kind":e.kind,className:`ob-li${e.kind===`tool`||e.kind===`result`?` ob-live`:``}`,children:e.text},`${e.at}-${t}`))})]}),(0,C.jsxs)(`form`,{className:`ob-worker-say`,onSubmit:e=>{e.preventDefault(),d()},children:[(0,C.jsx)(`input`,{type:`text`,"aria-label":`Say to ${e.name}`,placeholder:`Say to ${e.name}`,value:s,maxLength:2e3,onChange:e=>c(e.target.value)}),(0,C.jsx)(`button`,{type:`submit`,children:`Send`}),(0,C.jsx)(`button`,{type:`button`,className:`ob-stop`,disabled:!f,onClick:()=>r({type:`office.stop`,workerId:e.id}),children:`Stop`}),(0,C.jsx)(`button`,{type:`button`,className:`ob-stop`,onClick:()=>l?r({type:`office.fire`,workerId:e.id}):u(!0),onBlur:()=>u(!1),children:l?`Confirm remove`:`Remove`})]})]})}var oP=(0,v.lazy)(()=>PO(()=>import(`./OrgParts-XlLbDQwR.js`).then(e=>({default:e.OrgCanvas})),__vite__mapDeps([3,1,2])));function sP({workers:e,name:t,rect:n,onWorker:r,onClose:i}){let a=(0,v.useRef)(null);return(0,v.useEffect)(()=>{bN()&&a.current?.focus()},[]),(0,C.jsxs)(BM,{variant:`chamfer`,running:!0,title:`Office team`,className:`ob-expanded ob-hit`,style:{position:`absolute`,left:n.x,top:n.y,width:n.width,height:n.height},role:`dialog`,"aria-label":`Office team`,children:[(0,C.jsx)(`button`,{ref:a,type:`button`,className:`ob-close`,"aria-label":`Close`,onClick:i,children:`×`}),(0,C.jsx)(`div`,{className:`ob-expanded-body ob-org-body`,children:(0,C.jsx)(v.Suspense,{fallback:(0,C.jsx)(`p`,{className:`ob-li ob-sub`,children:`Drawing the team…`}),children:(0,C.jsx)(oP,{workers:e,name:t,onWorker:r})})}),(0,C.jsx)(`ul`,{className:`ob-org-lines`,"aria-label":`Who reports to whom`,children:e.map(n=>(0,C.jsxs)(`li`,{children:[n.name,` reports to `,n.managerId&&e.find(e=>e.id===n.managerId)?.name||t]},n.id))})]})}var cP=[{id:`code`,label:`CODE`,status:`running`,detail:`▶ Hero.tsx · 62%`,at:{x:800,y:108,anchor:`middle`}},{id:`test`,label:`TEST`,status:`running`,detail:`▶ 12/12 passing`,at:{x:1135,y:268,anchor:`start`}},{id:`rev`,label:`REV`,status:`waiting`,detail:`⏸ needs approval`,at:{x:1135,y:632,anchor:`start`}},{id:`hire`,label:`+`,status:`add`,detail:`HIRE WORKER`,at:{x:465,y:632,anchor:`end`}},{id:`arch`,label:`ARCH`,status:`idle`,detail:`idle`,at:{x:465,y:268,anchor:`end`}}],lP=[{text:`CODE ▶ edit src/Hero.tsx`,tone:`green`},{text:`CODE + 42 lines - 6 lines`,tone:`plain`},{text:`TEST ▶ pnpm test`,tone:`green`},{text:`TEST 12 passed · 0 failed`,tone:`plain`},{text:`REV ⏸ wants: npm install`,tone:`orange`},{text:`CODE ▶ edit src/Nav.tsx`,tone:`green`},{text:`CODE + 18 lines`,tone:`plain`}],uP=(e,t)=>Array.from({length:t},()=>({status:e})),dP=[...uP(`done`,3),...uP(`doing`,3),...uP(`review`,1),...uP(`todo`,4)],fP=[{label:`CODE`,value:42},{label:`TEST`,value:70},{label:`REV`,value:25}],pP=[{angle:49,distance:.64,label:`PC`},{angle:207,distance:.67,label:`PHONE`},{angle:286,distance:.73,label:`ALEXA?`,warn:!0}],mP={id:`sample`,tool:`shell.run`,summary:`npm install --save zod`,tier:`T2`,needsPin:!1},hP=e=>({cpu:38,ramUsed:61,ramTotal:100,netDown:2516582.4,netUp:314572.8,at:e});function gP({approval:e,send:t}){return e?(0,C.jsx)(_P,{approval:e,send:t}):(0,C.jsx)(`p`,{className:`ob-li ob-sub`,children:`None waiting`})}function _P({approval:e,send:t}){let{pin:n,setPin:r,respond:i,canApprove:a}=ft(e,t);return(0,C.jsxs)(`div`,{className:`ob-approval`,role:`alertdialog`,"aria-label":`Approval needed`,children:[(0,C.jsxs)(`svg`,{className:`ob-tri`,viewBox:`0 0 56 52`,"aria-hidden":`true`,children:[(0,C.jsx)(`path`,{d:`M4 48L28 4L52 48Z`}),(0,C.jsx)(`text`,{x:`28`,y:`42`,textAnchor:`middle`,children:`!`})]}),(0,C.jsxs)(`div`,{className:`ob-appr-text`,children:[(0,C.jsxs)(`span`,{className:`ob-appr-title`,children:[`APPROVAL NEEDED `,(0,C.jsx)(`span`,{className:`tier tier-${e.tier}`,children:e.tier})]}),!e.tool.startsWith(`office.`)&&(0,C.jsxs)(`span`,{className:`ob-appr-sub`,children:[e.tool,` wants to run:`]}),(0,C.jsx)(`pre`,{className:`ob-summary`,"data-testid":`approval-summary`,children:e.summary})]}),e.needsPin&&(0,C.jsx)(P,{pin:n,onChange:r,onSubmit:()=>a&&i(`approve`)}),(0,C.jsxs)(`div`,{className:`ob-actions`,children:[(0,C.jsx)(`button`,{type:`button`,className:`ob-btn ob-yes`,disabled:!a,onClick:()=>i(`approve`),children:`Approve`}),e.tier===`T2`&&!e.needsPin&&e.tool!==`camera.snap`&&!e.tool.startsWith(`office.`)&&(0,C.jsx)(`button`,{type:`button`,className:`ob-btn`,onClick:()=>i(`approve_always`),children:`Always allow`}),(0,C.jsx)(`button`,{type:`button`,className:`ob-btn ob-no`,onClick:()=>i(`deny`),children:`Deny`})]})]})}function vP({deviceOnline:e,voiceAvailable:t,blips:n}){return(0,C.jsxs)(`svg`,{className:`ob-wsvg`,viewBox:`0 0 250 270`,children:[(0,C.jsx)(`text`,{className:`ob-lab`,x:`20`,y:`21`,children:`DEVICES · RADAR`}),(0,C.jsx)(qM,{frame:{x:10,y:25,w:240,h:240},blips:n??[{angle:40,distance:.45,label:`This screen`},{angle:150,distance:.7,label:`PC`,dim:!e},{angle:250,distance:.6,label:`Voice`,dim:!t}]})]})}var yP=[{status:`done`,label:`DONE`},{status:`doing`,label:`DOING`},{status:`review`,label:`REVIEW`},{status:`todo`,label:`TODO`}];function bP({cells:e=[],project:t}){let n=e.length===0;return(0,C.jsxs)(`svg`,{className:`ob-wsvg`,viewBox:`0 0 270 160`,children:[(0,C.jsxs)(`text`,{className:`ob-lab`,x:`0`,y:`8`,children:[`TICKETS · `,t??`no workers yet`]}),(0,C.jsx)(XM,{cells:e,placeholder:n,frame:{x:0,y:20,w:260,h:80}}),(0,C.jsx)(`text`,{className:`ob-dim`,x:`0`,y:`130`,children:yP.map(t=>`■ ${t.label} ${e.filter(e=>e.status===t.status).length}`).join(` `)})]})}var xP=Array.from({length:20},(e,t)=>.35+.65*Math.abs(Math.sin(t*1.7+1))),SP=.45;function CP({level:e,mode:t}){let n=LM(e,0,1),r=Math.max(SP,n),i=Math.round(n*5);return(0,C.jsxs)(`svg`,{className:`ob-wsvg`,viewBox:`0 0 300 160`,children:[(0,C.jsx)(`text`,{className:`ob-lab`,x:`0`,y:`8`,children:`VOICE · SPECTRUM`}),(0,C.jsx)(`line`,{className:`ob-ecg-base`,x1:`0`,x2:`300`,y1:`130`,y2:`130`}),(0,C.jsx)(WM,{levels:xP.map(e=>r*e),frame:{x:0,y:40,w:240,h:90}}),(0,C.jsxs)(`text`,{className:`ob-dim`,x:`0`,y:`150`,children:[`MIC `,`▮`.repeat(i),`▯`.repeat(5-i),` · `,t]})]})}function wP(){let[e,t]=(0,v.useState)(()=>typeof document<`u`&&document.hidden);return(0,v.useEffect)(()=>{let e=()=>t(document.hidden);return document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[]),e}function TP(e){let[t,n]=(0,v.useState)(()=>new Date);return(0,v.useEffect)(()=>{let t=setInterval(()=>n(new Date),e);return()=>clearInterval(t)},[e]),t}var EP=e=>[...e.toUpperCase()].join(` `).replace(/\s{2,}/g,` `),DP=e=>t=>{(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),e())},OP=e=>vt({connection:e.connection,deviceOnline:e.deviceOnline,approval:e.approval,voiceMode:e.voice.mode,busy:e.busy,activity:e.activity}).text;function kP(e,t){let n=t.stats;switch(e){case`system`:return n?`CPU ${Math.round(n.cpu)}% · RAM ${n.ramTotal>0?Math.round(100*n.ramUsed/n.ramTotal):0}%`:`Waiting for data`;case`voice`:return t.voice.mode;case`network`:return n?n.netDown===0&&n.netUp===0?`n/a`:`↓ ${Math.round(n.netDown/1024)} KB/s ↑ ${Math.round(n.netUp/1024)} KB/s`:`Waiting for data`;case`feed`:return t.chat.at(-1)?.text??`Nothing yet`;case`radar`:return[`This screen`,t.deviceOnline?`PC`:null,t.voice.available?`Voice`:null].filter(Boolean).join(` · `);case`approval`:return`None waiting`;default:return t.office.enabled&&t.office.workers.length>0?`${t.office.workers.length} worker${t.office.workers.length===1?``:`s`}`:`No workers yet`}}function AP({usage:e,reset:t=null,real:n=!1,style:r,onClick:i}){let a=typeof e==`number`&&Number.isFinite(e);return(0,C.jsxs)(`button`,{type:`button`,className:`ob-usage-label ob-hit`,"data-widget":`usage`,title:n?`How full your Claude subscription's five-hour window is`:`Today's usage compared with your busiest day of the last 30`,style:r,onClick:i,"aria-label":a?n?`Usage ${Math.round(e)} percent of the five-hour window${t?`, resets in ${t}`:``}`:`Usage ${Math.round(e)} percent of your busiest day`:`Usage, no data yet`,children:[`USAGE `,a?`${Math.round(e)}%`:`—`,t?` · RESET ${t}`:``]})}function jP({hud:e,state:t,preview:n}){let r=TP(e.clock.seconds?1e3:15e3),i=e.clock.locale||void 0,a=r.toLocaleTimeString(i,{hour:`2-digit`,minute:`2-digit`,...e.clock.seconds?{second:`2-digit`}:{},hour12:e.clock.hour12}),o=r.toLocaleDateString(i,{weekday:`short`,day:`2-digit`,month:`short`}),s=`M330 44H560L590 20H1010L1040 44H1270`,c=t.connection===`open`;return(0,C.jsxs)(`g`,{"data-testid":`orbital-topbar`,children:[(0,C.jsx)(`path`,{className:`ob-topbar-base`,d:s}),(0,C.jsx)(`path`,{className:`ob-topbar-run`,d:s,pathLength:100}),(0,C.jsx)(`text`,{className:`ob-title`,x:`800`,y:`40`,textAnchor:`middle`,children:EP(t.assistantName||`Assistant`)}),n&&(0,C.jsx)(`text`,{className:`ob-sample-tag`,x:`800`,y:`62`,textAnchor:`middle`,children:`SAMPLE DATA · NOT REAL`}),(0,C.jsx)(`circle`,{className:c?`ob-pulse`:void 0,cx:`30`,cy:`34`,r:`4`,fill:c?`#34d399`:`#fb923c`}),(0,C.jsxs)(`text`,{className:`ob-lab`,x:`40`,y:`38`,children:[(t.assistantName||`FRIEND`).toUpperCase(),` · `,c?`ONLINE`:`OFFLINE`]}),(0,C.jsxs)(`text`,{className:`ob-dim`,x:`40`,y:`58`,children:[e.terminalLabel,` · VOICE · `,t.voice.mode,` LINK · `,typeof location>`u`?``:location.host]}),(0,C.jsxs)(`text`,{className:`ob-lab`,x:`1560`,y:`38`,textAnchor:`end`,children:[a,` · `,o]})]})}function MP({hud:e,state:t,usage:n=null,viewport:r,usageApi:i,send:a=()=>{},onHire:o,onLaunch:s,onExpand:c}){let{w:l,h:u}=NM(r),d=wP(),f=qC(l,u),p=e.preview===!0&&f===`orbit`,m=RN(p?`full`:e.density,e.widgets,f,t.approval!==null,t.widgets,p),h=p?{...t,stats:hP(Date.now()),voice:{...t.voice,mode:`listening`,level:.85}}:t,g=t.approval!==null,_=t.approval?.needsPin===!0,y=e=>e.id===`approval`?g?`orange`:`cyan`:e.tone,[b,x]=(0,v.useState)(null),[S,w]=(0,v.useState)(null),[T,E]=(0,v.useState)(!1),D=TP(3e4),O=h.stats&&h.stats.ramTotal>0?Math.round(100*h.stats.ramUsed/h.stats.ramTotal):0,k={cpu:IM(h.stats?Math.round(h.stats.cpu):0,h.stats?.at,60),ram:IM(O,h.stats?.at,60),down:IM(h.stats?.netDown??0,h.stats?.at,60),up:IM(h.stats?.netUp??0,h.stats?.at,60)},A=k.down.slice(-24),j=(0,v.useRef)(null),ee=(0,v.useCallback)(()=>{x(null),w(null),E(!1),bN()&&j.current?.focus(),j.current=null},[]),M=e=>()=>{b===null&&S===null&&!T&&(j.current=document.activeElement instanceof HTMLElement?document.activeElement:null),w(null),E(!1),x(e),c({kind:`widget`,id:e})};(0,v.useEffect)(()=>{if(b===null&&S===null&&!T||g)return;let e=e=>{e.key===`Escape`&&(e.preventDefault(),e.stopImmediatePropagation(),ee())};return window.addEventListener(`keydown`,e,!0),()=>window.removeEventListener(`keydown`,e,!0)},[b,S,T,g,ee]);let N=f===`compact`?l-16:Math.max(280,Math.min(760,l*.62)),P={x:(l-N)/2,y:u*.14,width:N,height:Math.max(220,Math.min(560,u*.7))},F=g?null:b,te=F&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`div`,{className:`ob-backdrop ob-hit`,onPointerDown:e=>{e.stopPropagation(),ee()}}),(0,C.jsx)(MM,{children:(0,C.jsx)(YN,{id:F,state:t,rect:P,readings:k,...i?{usageApi:i}:{},onClose:ee})})]}),ne=t.office.enabled&&!p,re=g||!ne?void 0:t.office.workers.find(e=>e.id===S),I=e=>{b===null&&S===null&&!T&&(j.current=document.activeElement instanceof HTMLElement?document.activeElement:null),x(null),E(!1),w(e)},ie=ne&&t.office.workers.length>0,ae=()=>{b===null&&S===null&&!T&&(j.current=document.activeElement instanceof HTMLElement?document.activeElement:null),x(null),w(null),E(!0)},oe={...P,x:Math.max(8,P.x-60),width:Math.min(l-16,P.width+120)},se=T&&ie&&!g&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`div`,{className:`ob-backdrop ob-hit`,onPointerDown:e=>{e.stopPropagation(),ee()}}),(0,C.jsx)(MM,{children:(0,C.jsx)(sP,{workers:t.office.workers,name:t.assistantName||`Friend`,rect:oe,onWorker:I,onClose:ee})})]}),ce=re&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`div`,{className:`ob-backdrop ob-hit`,onPointerDown:e=>{e.stopPropagation(),ee()}}),(0,C.jsx)(MM,{children:(0,C.jsx)(aP,{worker:re,feed:t.office.feed[re.id]??[],rect:P,send:a,onClose:ee})})]}),le=f===`compact`?l-16:Math.max(340,Math.min(480,l*.34)),L=Math.min(u-16,_?Math.max(300,Math.min(520,u*.7)):Math.max(260,Math.min(420,u*.55))),ue={x:(l-le)/2,y:(u-L)/2,width:le,height:L},de=g,R=de&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`div`,{className:`ob-backdrop ob-modal-backdrop`}),(0,C.jsx)(MM,{children:(0,C.jsx)(BM,{"data-widget":`approval`,variant:`octagon`,tone:`orange`,title:`Approvals`,running:!0,className:`ob-zone ob-hit ob-static ob-modal`,style:{position:`absolute`,left:ue.x,top:ue.y,width:ue.width,height:ue.height},children:(0,C.jsx)(gP,{approval:t.approval,send:a})})})]}),z={className:`orbital`,"data-testid":`orbital`,"data-mode":f,"data-hud-anim":e.animations,...d?{"data-paused":``}:{}},B=m.some(e=>e.id===`usage`),fe=p?{value:42,reset:null,real:!1}:NN(t.office.quota,n,D.getTime()),pe=e=>{switch(e){case`system`:return(0,C.jsx)(FM,{node:$N(h.stats),children:(0,C.jsx)(rN,{stats:h.stats})});case`network`:return(0,C.jsx)(FM,{node:tP(h.stats,A),children:(0,C.jsx)(aN,{stats:h.stats})});case`radar`:return p?(0,C.jsx)(vP,{deviceOnline:h.deviceOnline,voiceAvailable:h.voice.available,blips:pP}):(0,C.jsx)(FM,{node:rP(h.deviceOnline,h.voice.available),children:(0,C.jsx)(vP,{deviceOnline:h.deviceOnline,voiceAvailable:h.voice.available})});case`voice`:return(0,C.jsx)(FM,{node:eP(h.voice.level,h.voice.mode),children:(0,C.jsx)(CP,{level:h.voice.level,mode:h.voice.mode})});case`feed`:{let e=ne?jN(t.office.feed,t.office.workers):[],n=p?lP:e.length>0?e:h.chat,r=(0,C.jsx)(UN,{lines:n,activity:h.activity,busy:p||e.length>0?!1:h.busy,marquee:p});if(p)return r;let i=e.length>0?e:h.chat.map(e=>({text:`${e.role===`user`?`You`:`Friend`}: ${e.text}`,tone:`plain`}));return(0,C.jsx)(FM,{node:nP(i,h.activity,h.busy),children:r})}case`tickets`:{if(p)return(0,C.jsx)(bP,{cells:dP,project:`landing-page`});let e=ne?TN(t.office.tickets):[],n=ne?EN(t.office.tickets):void 0;return(0,C.jsx)(FM,{node:iP(e,n),children:(0,C.jsx)(bP,{...ne?{cells:e,...n?{project:n}:{}}:{}})})}case`budget`:return(0,C.jsx)(zN,{...p?{rings:fP}:ne?{rings:ON(t.office.workers)}:{}});default:return null}};if(f===`compact`){let n=e=>(0,C.jsx)(MM,{children:(0,C.jsx)(BM,{"data-widget":e.id,variant:`chamfer`,tone:y(e),title:e.title,className:`ob-zone ob-hit`,style:{minWidth:170,height:100,flex:`none`},role:`button`,tabIndex:0,"aria-label":e.title,onClick:M(e.id),onKeyDown:DP(M(e.id)),children:(0,C.jsx)(`p`,{className:`ob-li`,children:kP(e.id,t)})})},e.id);return(0,C.jsxs)(`div`,{...z,children:[(0,C.jsx)(zM,{}),(0,C.jsxs)(`div`,{className:`ob-chips`,children:[ie&&(0,C.jsxs)(`button`,{type:`button`,className:`ob-chip ob-hit`,onClick:ae,children:[`Team · `,t.office.workers.length]}),ne&&t.office.workers.map(e=>(0,C.jsx)(`button`,{type:`button`,className:`ob-chip ob-hit`,onClick:()=>I(e.id),children:e.name},e.id)),e.launcher.map(e=>(0,C.jsxs)(`button`,{type:`button`,className:`ob-chip ob-hit`,onClick:()=>s(e),children:[(0,C.jsx)(`span`,{"aria-hidden":`true`,children:e.icon}),` `,e.label]},e.id))]}),(0,C.jsx)(`p`,{className:`ob-compact-status`,children:OP(t)}),(0,C.jsxs)(`div`,{className:`ob-strip`,children:[m.filter(e=>e.anchor!==`centre`&&!(e.id===`approval`&&g)).map(n),B&&(0,C.jsx)(AP,{usage:fe.value,reset:fe.reset,real:fe.real,onClick:M(`usage`)})]}),te,ce,se,R]})}let me=VC(l,u),V=KC(IC,900),he=e.launcher.map(e=>({id:e.id,label:e.label,glyph:e.icon,caption:e.label,status:`idle`,onClick:()=>s(e)})),H=ne?SN(t.office.workers,!0):[],ge=e=>({id:e.id,label:e.label,glyph:e.glyph,caption:e.caption,status:e.status,onClick:()=>o?.()}),_e=H.map((e,t)=>e.kind===`hire`?ge(e):{id:e.id,label:e.label,glyph:e.glyph,caption:e.caption,status:e.status,detail:e.detail,...cP[t]?{at:cP[t].at}:{},onClick:()=>I(e.id)}),ve=p?cP.map(e=>({id:e.id,label:e.label,glyph:e.label,status:e.status,detail:e.detail,at:e.at,onClick:()=>{}})):ne?t.office.workers.length>0?_e:[...he,..._e]:he,U=GC(ve.length,IC,900),ye=fe.value,W=(e,t,n)=>{let r=HC(e,0,0,l,u);return(0,C.jsx)(`div`,{className:`ob-canvas ob-canvas-${t}`,style:{left:r.x,top:r.y,width:IC,height:900,transform:`scale(${me})`},children:n})},be=e=>{let n={left:e.box.x,top:e.box.y,width:e.box.w,height:e.box.h};return e.id===`approval`?de?null:(0,C.jsx)(MM,{children:(0,C.jsx)(`div`,{"data-widget":`approval`,className:`ob-w ob-hit ob-static`,style:n,children:g?(0,C.jsx)(BM,{variant:`octagon`,tone:`orange`,running:!0,className:`ob-approval-frame`,children:(0,C.jsx)(gP,{approval:t.approval,send:a})}):p?(0,C.jsx)(BM,{variant:`octagon`,tone:`orange`,running:!0,className:`ob-approval-frame`,children:(0,C.jsx)(gP,{approval:mP,send:()=>{}})}):(0,C.jsx)(BM,{variant:`bracket`,title:`Approvals`,children:(0,C.jsx)(gP,{approval:null,send:a})})})},e.id):(0,C.jsx)(MM,{children:(0,C.jsx)(`div`,{"data-widget":e.id,className:`ob-w ob-hit`,style:n,role:`button`,tabIndex:0,"aria-label":e.title,onClick:M(e.id),onKeyDown:DP(M(e.id)),children:pe(e.id)})},e.id)},xe=e=>m.filter(t=>t.anchor===e),Se=(t.assistantName||`FRIEND`).toUpperCase(),Ce=Math.min(1,Math.max(0,t.voice.level,t.presence.amplitude)),we=HC(`centre`,0,0,l,u);return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`div`,{className:`ob-base`,"aria-hidden":`true`,children:(0,C.jsx)(`div`,{className:`ob-canvas`,style:{left:we.x,top:we.y,width:IC,height:900,transform:`scale(${me})`},children:(0,C.jsx)(`svg`,{className:`ob-scene`,width:IC,height:900,viewBox:`0 0 ${IC} 900`,children:(0,C.jsx)(`g`,{className:`ob-disc-wrap`,style:{transform:`scale(${Number((1+.18*Ce).toFixed(3))})`},children:(0,C.jsx)(`circle`,{className:`ob-disc ob-breathe`,cx:V.cx,cy:V.cy,r:`104`,fill:`url(#ob-orbg)`,filter:`url(#ob-glow2)`})})})})}),(0,C.jsxs)(`div`,{...z,style:{"--s":me},children:[(0,C.jsx)(zM,{}),(0,C.jsx)(`div`,{className:`ob-bg`,"aria-hidden":`true`}),(0,C.jsx)(`span`,{className:`ob-corner ob-tl`,"aria-hidden":`true`}),(0,C.jsx)(`span`,{className:`ob-corner ob-tr`,"aria-hidden":`true`}),(0,C.jsx)(`span`,{className:`ob-corner ob-bl`,"aria-hidden":`true`}),(0,C.jsx)(`span`,{className:`ob-corner ob-br`,"aria-hidden":`true`}),W(`centre`,`centre`,(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`svg`,{className:`ob-scene`,width:IC,height:900,viewBox:`0 0 ${IC} 900`,"aria-hidden":`true`,children:[(0,C.jsx)(MM,{children:(0,C.jsx)(jP,{hud:e,state:h,preview:p})}),(0,C.jsx)(`circle`,{cx:V.cx,cy:V.cy,r:`104`,className:`ob-orb-ring`}),(0,C.jsx)(`circle`,{cx:V.cx,cy:V.cy,r:`104`,className:`ob-ping`}),(0,C.jsx)(`g`,{className:`ob-spin ob-fast`,children:(0,C.jsx)(`circle`,{cx:V.cx,cy:V.cy,r:`128`,className:`ob-ring-dash`})}),(0,C.jsx)(`g`,{className:`ob-spin ob-reverse`,children:(0,C.jsx)(`circle`,{cx:V.cx,cy:V.cy,r:`150`,className:`ob-ring-long`})}),(0,C.jsx)(`g`,{className:`ob-spin`,children:(0,C.jsx)(`circle`,{cx:V.cx,cy:V.cy,r:`172`,className:`ob-ring-thin`})}),(0,C.jsx)(`circle`,{cx:V.cx,cy:V.cy,r:300,className:`ob-orbit`}),(0,C.jsx)(`g`,{className:`ob-spin ob-reverse ob-slow`,children:(0,C.jsx)(`circle`,{cx:V.cx,cy:V.cy,r:`330`,className:`ob-ring-outer`})}),U.map((e,t)=>{let n={x:Math.cos(e.angle*Math.PI/180),y:Math.sin(e.angle*Math.PI/180)};return(0,C.jsx)(tN,{tone:ve[t].status===`waiting`?`orange`:`cyan`,x1:V.cx+n.x*104,y1:V.cy+n.y*104,x2:V.cx+n.x*266,y2:V.cy+n.y*266},ve[t].id)}),ve.map(e=>e.at&&e.detail&&(0,C.jsx)(`text`,{className:`ob-node-detail${e.status===`running`?` ob-grn`:e.status===`waiting`?` ob-org`:``}`,x:e.at.x,y:e.at.y,textAnchor:e.at.anchor,children:e.detail},e.id))]}),ie&&(0,C.jsxs)(`button`,{type:`button`,className:`ob-team-btn ob-hit`,style:{left:V.cx,top:V.cy+52},onClick:ae,children:[`TEAM · `,t.office.workers.length]}),(0,C.jsxs)(`div`,{className:`ob-orb-label`,style:{left:V.cx,top:V.cy},"aria-hidden":`true`,children:[(0,C.jsx)(`b`,{children:Se}),(0,C.jsx)(`small`,{children:AN(t.voice.mode,p?{enabled:!1,workers:[]}:t.office)})]}),B&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`div`,{className:`ob-usage-ring`,style:{left:V.cx-230,top:V.cy-230,width:460,height:460},children:(0,C.jsx)(QM,{value:ye??0,radius:205,size:460})}),(0,C.jsx)(AP,{usage:ye,reset:fe.reset,real:fe.real,style:{position:`absolute`,left:800,top:692,transform:`translate(-50%, -50%)`},onClick:M(`usage`)})]}),U.map((e,t)=>{let n=ve[t];return(0,C.jsx)(MM,{children:(0,C.jsx)(eN,{x:e.x,y:e.y,label:n.label,glyph:n.glyph,status:n.status,...n.caption?{caption:n.caption}:{},...n.detail?{detail:n.detail}:{},onClick:n.onClick})},n.id)}),(0,C.jsx)(`div`,{className:`ob-cmd`,"aria-hidden":`true`,children:(0,C.jsx)(`small`,{children:`[ HOLD TO TALK ]`})})]})),W(`left`,`left`,xe(`left`).map(be)),W(`right`,`right`,xe(`right`).map(be)),te,ce,se,R]})]})}var NP=3e5,PP=(e=new Date)=>`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`,FP={today:0,peak:0,share:null,error:!1};function IP(e=oC,t=!0){let[n,r]=(0,v.useState)(FP);return(0,v.useEffect)(()=>{if(!t)return;let n=!0,i=()=>e.summary(30).then(e=>{if(!n)return;let t=e.days.map(e=>({day:e.day,n:e.input+e.output})),i=Math.max(0,...t.map(e=>e.n)),a=t.find(e=>e.day===PP())?.n??0;r({today:a,peak:i,share:i>0?Math.min(1,Math.max(0,a/i)):null,error:!1})}).catch(()=>n&&r({...FP,error:!0}));i();let a=setInterval(()=>void i(),NP);return()=>{n=!1,clearInterval(a)}},[e,t]),n}var LP=(e,t=18)=>(0,C.jsx)(`svg`,{width:t,height:t,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:e}),RP=()=>LP((0,C.jsx)(`path`,{d:`M7 4.5v15l12-7.5z`,fill:`currentColor`})),zP=()=>LP((0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`rect`,{x:`6`,y:`4.5`,width:`4`,height:`15`,fill:`currentColor`}),(0,C.jsx)(`rect`,{x:`14`,y:`4.5`,width:`4`,height:`15`,fill:`currentColor`})]})),BP=()=>LP((0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`path`,{d:`M5 5v14l10-7z`,fill:`currentColor`}),(0,C.jsx)(`path`,{d:`M18 5v14`})]})),VP=()=>LP((0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`path`,{d:`M19 5v14L9 12z`,fill:`currentColor`}),(0,C.jsx)(`path`,{d:`M6 5v14`})]})),HP=()=>LP((0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`path`,{d:`M3 7h3.5c3 0 4 2 5.5 5s2.500 5 5.500 5H21`}),(0,C.jsx)(`path`,{d:`M3 17h3.5c1.500 0 2.500-.6 3.400-1.800M13.500 8.800C14.500 7.600 15.500 7 17 7h4`}),(0,C.jsx)(`path`,{d:`m18.500 4.500 2.500 2.500-2.500 2.500M18.500 14.500l2.500 2.500-2.500 2.500`})]})),UP=()=>LP((0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`path`,{d:`M17 3l3 3-3 3`}),(0,C.jsx)(`path`,{d:`M4 11V9a3 3 0 0 1 3-3h13M7 21l-3-3 3-3`}),(0,C.jsx)(`path`,{d:`M20 13v2a3 3 0 0 1-3 3H4`})]})),WP=()=>LP((0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`path`,{d:`M4 9.500v5h3.500L12 18.500v-13L7.500 9.500z`,fill:`currentColor`}),(0,C.jsx)(`path`,{d:`M15.500 9a4 4 0 0 1 0 6M18 6.500a7.500 7.500 0 0 1 0 11`})]})),GP=()=>LP((0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`path`,{d:`M4 9.500v5h3.500L12 18.500v-13L7.500 9.500z`,fill:`currentColor`}),(0,C.jsx)(`path`,{d:`m16 9 5 6M21 9l-5 6`})]})),KP=()=>LP((0,C.jsx)(`path`,{d:`M4 9V4h5M20 9V4h-5M4 15v5h5M20 15v5h-5`})),qP=()=>LP((0,C.jsx)(`path`,{d:`M9 4v5H4M15 4v5h5M9 20v-5H4M15 20v-5h5`})),JP=()=>LP((0,C.jsx)(`path`,{d:`M6 6l12 12M18 6 6 18`})),YP=()=>LP((0,C.jsx)(`path`,{d:`M9 18V6l10-2v12`}),22),XP=56,ZP=()=>({bars:new Float32Array(XP),bass:0,left:0,right:0});function QP(e,t,n,r,i){let a=n?.82:.9;if(t&&n){t.getByteFrequencyData(i);let n=Math.min(i.length,96);for(let t=0;t<XP;t++){let r=Math.min(n-1,Math.floor((t/XP)**1.6*n));e.bars[t]=Math.max((i[r]??0)/255,e.bars[t]*a)}}else if(n)for(let t=0;t<XP;t++)e.bars[t]=Math.max(.12+.28*Math.abs(Math.sin(r/420+t*.55)*Math.cos(r/900+t*.21)),e.bars[t]*a);else for(let t=0;t<XP;t++)e.bars[t]=e.bars[t]*a;let o=0;for(let t=0;t<6;t++)o+=e.bars[t];e.bass=Math.min(1,o/6*1.15);let s=0,c=0;for(let t=0;t<XP/2;t++)s+=e.bars[t],c+=e.bars[t+XP/2];e.left=Math.min(1,s/(XP/2)*1.6),e.right=Math.min(1,c/(XP/2)*3.2)}function $P({progress:e,playing:t,cover:n,analyser:r,levels:i,visualizer:a,animate:o,size:s}){let c=(0,v.useRef)(null),l=(0,v.useRef)(null),u=(0,v.useRef)(new Uint8Array(new ArrayBuffer(128)));(0,v.useEffect)(()=>{let e=c.current,n=e?.getContext(`2d`);if(!e||!n||!o)return;let d=0,f=Math.min(2,window.devicePixelRatio||1);e.width=e.height=Math.round(s*f);let p=getComputedStyle(e).getPropertyValue(`--accent`).trim()||`#3fd8ff`,m=e=>{if(QP(i,r,t,e,u.current),l.current?.style.setProperty(`--bass`,i.bass.toFixed(3)),n.setTransform(f,0,0,f,0,0),n.clearRect(0,0,s,s),a){let e=s/2,t=s*.335,r=s*.135;n.lineCap=`round`,n.lineWidth=Math.max(1.5,s/90);for(let a=0;a<XP;a++){let o=a/XP*Math.PI*2-Math.PI/2,s=i.bars[a],c=2+s*r;n.strokeStyle=p,n.globalAlpha=.35+s*.65,n.beginPath(),n.moveTo(e+Math.cos(o)*t,e+Math.sin(o)*t),n.lineTo(e+Math.cos(o)*(t+c),e+Math.sin(o)*(t+c)),n.stroke()}n.globalAlpha=1}(t||!i.bars.every(e=>e<.01)||a)&&(d=requestAnimationFrame(m))};return d=requestAnimationFrame(m),()=>cancelAnimationFrame(d)},[r,t,a,o,s,i]);let d=Math.max(0,Math.min(1,e))*100;return(0,C.jsxs)(`div`,{ref:l,className:`hud-dial${t?` playing`:``}`,style:{width:s,height:s},role:`img`,"aria-label":`Playback dial`,children:[(0,C.jsxs)(`svg`,{className:`hud-dial-svg`,viewBox:`0 0 200 200`,"aria-hidden":`true`,children:[(0,C.jsx)(`circle`,{className:`hud-dial-ticks`,cx:`100`,cy:`100`,r:`96`}),(0,C.jsx)(`circle`,{className:`hud-dial-track`,cx:`100`,cy:`100`,r:`88`}),(0,C.jsx)(`circle`,{className:`hud-dial-arc`,cx:`100`,cy:`100`,r:`88`,pathLength:`100`,strokeDasharray:`${d} 100`,transform:`rotate(-90 100 100)`}),(0,C.jsx)(`circle`,{className:`hud-dial-inner`,cx:`100`,cy:`100`,r:`62`}),(0,C.jsxs)(`g`,{className:`hud-needle`,children:[(0,C.jsx)(`line`,{x1:`100`,y1:`100`,x2:`100`,y2:`14`}),(0,C.jsx)(`circle`,{cx:`100`,cy:`14`,r:`2.500`})]})]}),(0,C.jsx)(`canvas`,{ref:c,className:`hud-spectrum`,style:{width:s,height:s},"aria-hidden":`true`}),(0,C.jsx)(`div`,{className:`hud-cover`,style:n?{backgroundImage:`url("${n}")`}:void 0,children:!n&&(0,C.jsx)(YP,{})})]})}var eF=e=>{let t=Math.max(0,Math.floor(Number.isFinite(e)?e:0));return`${Math.floor(t/60)}:${String(t%60).padStart(2,`0`)}`},tF=new Map,nF=e=>{let t=od(e);return t&&t.source===`local`?t.id:null},rF=e=>od(e)?.source===`spotify`,iF=e=>od(e)?.source===`soundcloud`,aF=e=>od(e)?.source===`audius`,oF={spotify:`Spotify`,soundcloud:`SoundCloud`,audius:`Audius`};function sF(e){let[t,n]=(0,v.useState)(e?tF.get(e)??!1:!1);return(0,v.useEffect)(()=>{if(!e)return n(!1);if(tF.has(e))return n(tF.get(e));let t=!0,r=new Image;r.onload=()=>{tF.set(e,!0),t&&n(!0)},r.onerror=()=>{tF.set(e,!1),t&&n(!1)};let i=nF(e);return i?(r.src=`/api/music/cover/${i}`,()=>{t=!1}):n(!1)},[e]),e&&t?`/api/music/cover/${nF(e)}`:null}async function cF(e,t){let n=await fetch(`/api/music/library?q=${encodeURIComponent(e)}&limit=${t}`);return n.ok?await n.json():{tracks:[],total:0}}function lF(){let[e,t]=(0,v.useState)(null);return(0,v.useEffect)(()=>{let e=!0;return fetch(`/api/music/sources`).then(e=>e.ok?e.json():null).then(n=>{let r={};for(let e of[`spotify`,`soundcloud`,`audius`]){let t=n?.sources?.find(t=>t.id===e)?.status;t&&(r[e]={connected:t.connected,needs:t.needs})}e&&n&&t(r)}).catch(()=>{}),()=>{e=!1}},[]),e}async function uF(e,t,n){let r=await fetch(`/api/music/search?q=${encodeURIComponent(t)}&source=${e}&limit=${n}`);if(!r.ok)return{tracks:[],total:0};let i=((await r.json()).tracks??[]).map(e=>({id:e.ref,title:e.title,artist:e.artist,album:e.album,durationSec:e.durationSec}));return{tracks:i,total:i.length}}var dF=e=>({id:e.id,title:e.title,artist:e.artist,album:e.album,durationSec:e.durationSec});function fF({levels:e,animate:t,side:n}){let r=(0,v.useRef)(null);return(0,v.useEffect)(()=>{if(!t)return;let i=0,a=r.current,o=()=>{if(a){let t=n===`left`?e.left:e.right,r=Math.round(t*12);a.querySelectorAll(`i`).forEach((e,t)=>e.classList.toggle(`on`,t<r))}i=requestAnimationFrame(o)};return i=requestAnimationFrame(o),()=>cancelAnimationFrame(i)},[e,t,n]),(0,C.jsx)(`div`,{ref:r,className:`hud-levels ${n}`,"aria-hidden":`true`,children:Array.from({length:12},(e,t)=>(0,C.jsx)(`i`,{},t))})}function pF({player:e,anim:t}){let{state:n,dispatch:r}=e,i=(0,v.useCallback)(async()=>{if(n.queue.length>0)return r({type:`resume`});let e=await cF(``,500);r({type:`play`,tracks:e.tracks.map(dF),mode:`replace`,...n.shuffle?{shuffle:!0}:{}})},[n.queue.length,n.shuffle,r]),a=e=>n=>{t!==`off`&&AM(n),e()};return(0,C.jsxs)(`div`,{className:`hud-controls`,role:`group`,"aria-label":`Player controls`,children:[(0,C.jsx)(`button`,{type:`button`,className:`hud-btn`,"aria-label":`Shuffle`,"aria-pressed":n.shuffle,title:`Shuffle`,onClick:()=>r({type:`shuffle`}),children:(0,C.jsx)(HP,{})}),(0,C.jsx)(`button`,{type:`button`,className:`hud-btn`,"aria-label":`Previous track`,title:`Previous`,onPointerDown:a(()=>{}),onClick:()=>r({type:`previous`}),children:(0,C.jsx)(VP,{})}),(0,C.jsx)(`button`,{type:`button`,className:`hud-btn hud-btn-main`,"aria-label":n.playing?`Pause`:`Play`,title:n.playing?`Pause`:`Play`,onPointerDown:a(()=>{}),onClick:()=>n.playing?r({type:`pause`}):void i(),children:n.playing?(0,C.jsx)(zP,{}):(0,C.jsx)(RP,{})}),(0,C.jsx)(`button`,{type:`button`,className:`hud-btn`,"aria-label":`Next track`,title:`Next`,onPointerDown:a(()=>{}),onClick:()=>r({type:`next`}),children:(0,C.jsx)(BP,{})}),(0,C.jsxs)(`button`,{type:`button`,className:`hud-btn${n.repeat===`off`?``:` on`}`,"aria-label":`Repeat: ${n.repeat}`,title:`Repeat: ${n.repeat}`,onClick:()=>r({type:`repeat`,mode:n.repeat===`off`?`all`:n.repeat===`all`?`one`:`off`}),children:[(0,C.jsx)(UP,{}),n.repeat===`one`&&(0,C.jsx)(`sup`,{children:`1`})]})]})}function mF({player:e}){let{state:t,dispatch:n}=e,r=t.duration>0?t.position/t.duration*100:0;return(0,C.jsxs)(`div`,{className:`hud-timeline`,children:[(0,C.jsx)(`span`,{className:`hud-time`,children:eF(t.position)}),(0,C.jsx)(`input`,{type:`range`,className:`hud-range`,"aria-label":`Position`,min:0,max:Math.max(1,Math.floor(t.duration)),step:1,value:Math.min(Math.floor(t.position),Math.max(1,Math.floor(t.duration))),style:{"--fill":`${r}%`},disabled:t.duration<=0,onChange:e=>n({type:`seek`,seconds:Number(e.target.value)})}),(0,C.jsxs)(`span`,{className:`hud-time`,children:[`-`,eF(Math.max(0,t.duration-t.position))]})]})}function hF({player:e}){let{state:t,dispatch:n}=e;return(0,C.jsxs)(`div`,{className:`hud-volume`,children:[(0,C.jsx)(`button`,{type:`button`,className:`hud-btn`,"aria-label":t.muted?`Unmute`:`Mute`,onClick:()=>n({type:`mute`}),children:t.muted||t.volume===0?(0,C.jsx)(GP,{}):(0,C.jsx)(WP,{})}),(0,C.jsx)(`input`,{type:`range`,className:`hud-range`,"aria-label":`Volume`,min:0,max:100,value:t.muted?0:t.volume,style:{"--fill":`${t.muted?0:t.volume}%`},onChange:e=>n({type:`volume`,level:Number(e.target.value)})})]})}function gF({player:e,anim:t}){let{state:n,dispatch:r}=e,[i,a]=(0,v.useState)(n.queue.length?`queue`:`library`),[o,s]=(0,v.useState)(``),[c,l]=(0,v.useState)(`folder`),[u,d]=(0,v.useState)(null),f=lF(),p=[`spotify`,`soundcloud`,`audius`].filter(e=>f?.[e]?.connected),m=c!==`folder`&&p.includes(c)?c:null,h=m?f?.[m]?.needs:null;(0,v.useEffect)(()=>{if(i!==`library`)return;let e=!0;if(m&&!o.trim()){d(null);return}let t=()=>m?uF(m,o.trim(),30):cF(o,100),n=setTimeout(()=>void t().then(t=>e&&d(t)),o?250:0);return()=>{e=!1,clearTimeout(n)}},[i,o,m]);let g=i===`queue`?n.queue.map((e,t)=>({track:e,index:t})):(u?.tracks??[]).map((e,t)=>({track:dF(e),index:t}));return(0,C.jsxs)(`div`,{className:`hud-playlist`,children:[(0,C.jsxs)(`div`,{className:`hud-tabs`,role:`tablist`,children:[[`queue`,`library`].map(e=>(0,C.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":i===e,className:`hud-chip${i===e?` on`:``}`,onClick:()=>a(e),children:e===`queue`?`Queue (${n.queue.length})`:`Library`},e)),i===`queue`&&n.queue.length>0&&(0,C.jsx)(`button`,{type:`button`,className:`hud-chip`,onClick:()=>r({type:`clear`}),children:`Clear`})]}),i===`library`&&p.length>0&&(0,C.jsx)(`div`,{className:`hud-tabs`,role:`tablist`,"aria-label":`Where to look`,children:[`folder`,...p].map(e=>(0,C.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":c===e,className:`hud-chip${c===e?` on`:``}`,onClick:()=>{l(e),d(null)},children:e===`folder`?`Folder`:oF[e]},e))}),i===`library`&&(0,C.jsx)(`input`,{className:`hud-search`,type:`search`,placeholder:`Search title, artist or album`,"aria-label":`Search the music`,value:o,onChange:e=>s(e.target.value)}),(0,C.jsxs)(`ul`,{className:`hud-list`,children:[g.length===0&&(0,C.jsx)(`li`,{className:`hud-empty`,children:i===`queue`?`The queue is empty.`:m&&!o.trim()?`Type to search ${oF[m]}.`:u?`No music matches.`:`Loading…`}),i===`library`&&m&&h&&(0,C.jsx)(`li`,{className:`hud-empty`,children:h}),g.map(({track:e,index:a},o)=>{let s=i===`queue`&&a===n.index;return(0,C.jsxs)(`li`,{className:`hud-tab hud-cut${s?` current`:``}${t===`full`?` hud-boot`:``}`,style:{"--i":Math.min(o,12)},children:[(0,C.jsxs)(`button`,{type:`button`,className:`hud-tab-main`,"aria-current":s?`true`:void 0,onPointerDown:t===`off`?void 0:AM,onClick:()=>r(i===`queue`?{type:`jump`,index:a}:{type:`play`,tracks:(u?.tracks??[]).map(dF),mode:`replace`,start:a}),children:[(0,C.jsx)(`span`,{className:`hud-tab-title`,children:e.title}),(0,C.jsxs)(`small`,{children:[e.artist||e.album,rF(e.id)&&(0,C.jsx)(`em`,{className:`hud-source`,children:`SPOTIFY`}),iF(e.id)&&(0,C.jsx)(`em`,{className:`hud-source`,children:`SOUNDCLOUD`}),aF(e.id)&&(0,C.jsx)(`em`,{className:`hud-source`,children:`AUDIUS`})]})]}),i===`library`&&(0,C.jsx)(`button`,{type:`button`,className:`hud-mini`,"aria-label":`Add ${e.title} to the queue`,title:`Add to the queue`,onClick:()=>r({type:`play`,tracks:[e],mode:`add`}),children:`+`}),i===`queue`&&(0,C.jsx)(`button`,{type:`button`,className:`hud-mini`,"aria-label":`Remove ${e.title} from the queue`,title:`Remove`,onClick:()=>r({type:`remove`,index:a}),children:`×`})]},`${e.id}-${a}`)})]})]})}function _F({player:e,music:t,animations:n}){let{state:r,dispatch:i,current:a,blocked:o,notice:s,analyser:c,unlock:l}=e,u=(0,v.useMemo)(ZP,[]),d=sF(a?.id),f=r.view===`full`,p=kM(a?.title??``,n===`full`);if(!t?.folderSet||r.view===`hidden`)return null;let m=r.duration>0?r.position/r.duration:0,h=n!==`off`;return(0,C.jsxs)(xe,{id:`music`,label:`Music player`,wholeBox:!0,testId:`music`,className:`hud hud-music hud-cut ${f?`full`:`mini`}${r.playing?` playing`:``}${n===`full`?` hud-boot`:``}`,children:[(0,C.jsxs)(`header`,{className:`hud-music-head`,children:[(0,C.jsx)(`span`,{className:`hud-kicker`,children:`Media player`}),(0,C.jsxs)(`span`,{className:`hud-head-actions`,children:[(0,C.jsx)(`button`,{type:`button`,className:`hud-btn`,"aria-label":f?`Smaller player`:`Bigger player`,title:f?`Smaller`:`Bigger`,onClick:()=>i({type:`view`,view:f?`mini`:`full`}),children:f?(0,C.jsx)(qP,{}):(0,C.jsx)(KP,{})}),(0,C.jsx)(`button`,{type:`button`,className:`hud-btn`,"aria-label":`Hide the player`,title:`Hide (the music keeps playing)`,onClick:()=>i({type:`view`,view:`hidden`}),children:(0,C.jsx)(JP,{})})]})]}),(0,C.jsxs)(`div`,{className:`hud-music-body`,children:[(0,C.jsxs)(`div`,{className:`hud-music-left`,children:[f&&(0,C.jsx)(fF,{levels:u,animate:h,side:`left`}),(0,C.jsx)($P,{progress:m,playing:r.playing,cover:d,analyser:c,levels:u,visualizer:t.visualizer,animate:h,size:f?250:112}),f&&(0,C.jsx)(fF,{levels:u,animate:h,side:`right`})]}),(0,C.jsxs)(`div`,{className:`hud-music-main`,children:[(0,C.jsxs)(`div`,{className:`hud-now`,"aria-live":`polite`,children:[(0,C.jsx)(`b`,{className:`hud-title`,children:a?p:`Nothing playing`}),(0,C.jsxs)(`small`,{className:`hud-sub`,children:[a?[a.artist,a.album].filter(Boolean).join(` — `):`Press play, or ask for some music.`,a&&rF(a.id)&&(0,C.jsx)(`em`,{className:`hud-source`,children:`SPOTIFY`}),a&&iF(a.id)&&(0,C.jsx)(`em`,{className:`hud-source`,children:`SOUNDCLOUD`}),a&&aF(a.id)&&(0,C.jsx)(`em`,{className:`hud-source`,children:`AUDIUS`}),e.remote&&(0,C.jsx)(`em`,{className:`hud-source`,children:`THIS PC`})]})]}),(0,C.jsx)(mF,{player:e}),(0,C.jsx)(pF,{player:e,anim:n}),f&&(0,C.jsx)(hF,{player:e}),s&&(0,C.jsx)(`p`,{className:`hud-notice`,role:`status`,children:s}),o&&(0,C.jsx)(`button`,{type:`button`,className:`hud-unlock`,onClick:l,children:`Tap to enable sound`})]}),f&&(0,C.jsx)(gF,{player:e,anim:n})]})]})}var vF=/^spotify:/,yF=class{local;makeSpotify;active;spotify=null;listeners=new Map;wrapped=new Map;vol=1;mute=!1;pre=``;constructor(e,t){this.local=e,this.makeSpotify=t,this.active=e}get element(){return this.local}get error(){return this.active.error??null}wrap(e){let t=this.wrapped.get(e);return t||(t={local:()=>{this.active===this.local&&e()},spot:()=>{this.spotify&&this.active===this.spotify&&e()}},this.wrapped.set(e,t)),t}spot(){if(!this.spotify){let e=this.makeSpotify();e.volume=this.vol,e.muted=this.mute,e.preload=this.pre;for(let[t,n]of this.listeners)for(let r of n)e.addEventListener(t,this.wrap(r).spot);this.spotify=e}return this.spotify}dispose(){this.spotify?.dispose?.(),this.spotify=null,this.active=this.local}get src(){return this.active.src}set src(e){let t=vF.test(e)?this.spot():this.local;t===this.active?e===``&&this.active.pause():(this.active.pause(),this.active=t),this.active.src=e}get currentTime(){return this.active.currentTime}set currentTime(e){this.active.currentTime=e}get duration(){return this.active.duration}get paused(){return this.active.paused}get volume(){return this.vol}set volume(e){this.vol=e,this.local.volume=e,this.spotify&&(this.spotify.volume=e)}get muted(){return this.mute}set muted(e){this.mute=e,this.local.muted=e,this.spotify&&(this.spotify.muted=e)}get preload(){return this.pre}set preload(e){this.pre=e,this.local.preload=e,this.spotify&&(this.spotify.preload=e)}play(){return this.active.play()}pause(){this.active.pause()}addEventListener(e,t){let n=this.listeners.get(e);n||this.listeners.set(e,n=new Set),n.add(t);let r=this.wrap(t);this.local.addEventListener(e,r.local),this.spotify?.addEventListener(e,r.spot)}removeEventListener(e,t){this.listeners.get(e)?.delete(t);let n=this.wrap(t);this.local.removeEventListener(e,n.local),this.spotify?.removeEventListener(e,n.spot)}},bF=/^spotify:([A-Za-z0-9_-]{1,64})$/,xF=`Spotify Premium is needed to play on this screen.`;async function SF(){let e=await fetch(`/api/music/spotify/token`,{cache:`no-store`});if(!e.ok)throw Error(`Spotify is not connected.`);return(await e.json()).accessToken}function CF(){let e=window;return e.Spotify?Promise.resolve(e.Spotify):new Promise((t,n)=>{e.onSpotifyWebPlaybackSDKReady=()=>e.Spotify?t(e.Spotify):n(Error(`no sdk`));let r=document.createElement(`script`);r.src=`https://sdk.scdn.co/spotify-player.js`,r.async=!0,r.onerror=()=>n(Error(`blocked`)),document.head.appendChild(r)})}function wF(e){let t=e.fetch??((...e)=>fetch(...e)),n=e.now??Date.now,r=new Map,i=null,a=null,o=null,s=null,c=!1,l=null,u=null,d=0,f=0,p=0,m=!0,h=1,g=!1,_,v=e=>{for(let t of r.get(e)??[])t()},y=()=>g?0:h,b=()=>{_&&clearInterval(_),_=void 0},x=()=>{_||=setInterval(()=>v(`timeupdate`),250)},S={error:null,preload:``,get src(){return s??``},set src(e){let t=bF.exec(e);c=e!==``&&!t,s=t?e:null,l=null,u=null,d=0,p=0,S.error=null,t||b()},get currentTime(){return m?d:d+(n()-f)/1e3},set currentTime(e){d=e,f=n(),i?.seek(Math.round(e*1e3)).catch(()=>{})},get duration(){return p},get paused(){return m},get volume(){return h},set volume(e){h=e,i?.setVolume(y()).catch(()=>{})},get muted(){return g},set muted(e){g=e,i?.setVolume(y()).catch(()=>{})},async play(){if(c||!s)throw Error(`That is not a Spotify track.`);let r=bF.exec(s),a=s,o=await T();if(s!==a)return;if(l===s){await i?.resume().catch(()=>{}),m=!1,f=n(),x();return}let u=await e.getToken().catch(()=>null);if(!u)throw C(`Spotify is not connected. Connect it in Plugins, Spotify.`);let d;try{d=await t(`https://api.spotify.com/v1/me/player/play?device_id=${encodeURIComponent(o)}`,{method:`PUT`,headers:{authorization:`Bearer ${u}`,"content-type":`application/json`},body:JSON.stringify({uris:[`spotify:track:${r[1]}`]})})}catch{throw C(`Friend could not reach Spotify right now.`)}if(d.status===403)throw C(xF);if(d.status===401)throw C(`Spotify sign-in has ended. Reconnect Spotify in Plugins, Spotify.`);if(d.status===404)throw C(`Spotify could not find this screen or that track.`);if(d.status===429)throw C(`Spotify is asking Friend to slow down. Try again in a minute.`);if(!d.ok)throw C(`Spotify could not play that.`);s===a&&(l=a,m=!1,f=n(),x())},pause(){m=!0,d+=(n()-f)/1e3,f=n(),b(),i?.pause().catch(()=>{})},dispose(){b();try{i?.disconnect()}catch{}i=null,a=null,s=null,l=null},addEventListener(e,t){let n=r.get(e);n||r.set(e,n=new Set),n.add(t)},removeEventListener(e,t){r.get(e)?.delete(t)}};function C(e){S.error=e,m=!0,b(),v(`error`);let t=Error(e),n=o;return o=null,n?.reject(t),t}function w(e){if(!e)return;d=e.position/1e3,f=n(),p=e.duration/1e3,m=e.paused,v(`timeupdate`),v(`loadedmetadata`),v(`durationchange`);let t=s?bF.exec(s)?.[1]:void 0;t&&e.paused&&e.position===0&&u!==s&&(e.track_window.previous_tracks??[]).some(e=>e.id===t)&&(u=s,b(),v(`ended`))}function T(){if(a)return Promise.resolve(a);if(o)return o.promise;let t,n,r=new Promise((e,r)=>{t=e,n=r}),s={promise:r,resolve:t,reject:n};o=s;let c=setTimeout(()=>{o===s&&C(`Spotify's player did not start. Check that this browser allows Spotify's player, then try again.`)},e.readyTimeoutMs??15e3),l=()=>clearTimeout(c);return r.then(l,l),(async()=>{try{if(!i){let t;try{t=await(e.loadSdk??CF)()}catch{o===s&&C(`Spotify's player could not be loaded. Check that nothing blocks sdk.scdn.co.`);return}let n=new t.Player({name:e.deviceName??`Friend`,volume:y(),getOAuthToken:t=>{e.getToken().then(t,()=>{})}});i=n,n.addListener(`ready`,(e=>{a=e.device_id;let t=o;o=null,t?.resolve(e.device_id)})),n.addListener(`not_ready`,(()=>{a=null})),n.addListener(`player_state_changed`,(e=>w(e))),n.addListener(`account_error`,(()=>void C(xF))),n.addListener(`authentication_error`,(()=>void C(`Spotify sign-in has ended. Reconnect Spotify in Plugins, Spotify.`))),n.addListener(`initialization_error`,(()=>void C(`Spotify's player does not work in this browser.`))),n.addListener(`playback_error`,(()=>void C(`Spotify could not play that.`)))}!await i.connect()&&o===s&&C(`Spotify's player could not connect.`)}catch{o===s&&C(`Spotify's player could not connect.`)}})(),r}return S}var TF=e=>{let t=od(e);return t?t.source===`local`?`/api/music/track/${t.id}`:t.source===`soundcloud`||t.source===`audius`?`/api/music/stream/${e}`:e:`/api/music/track/${e}`},EF=(e,t)=>Dd(e,t),DF=`friend.music`,OF=1e3,kF=1.5,AF=()=>{try{return JSON.parse(localStorage.getItem(DF)??`{}`)}catch{return{}}},jF=e=>{try{localStorage.setItem(DF,JSON.stringify({volume:e.volume,muted:e.muted,shuffle:e.shuffle,repeat:e.repeat,view:e.view}))}catch{}};function MF({music:e,cmd:t,send:n,connection:r,createAudio:i,createSpotify:a,remote:o=!1}){let[s,c]=(0,v.useReducer)(EF,void 0,()=>{let e=AF();return Cd({volume:e.volume??70,shuffle:e.shuffle??!1,repeat:e.repeat??`all`,view:e.view??`mini`})}),[l,u]=(0,v.useState)(!1),[d,f]=(0,v.useState)(null),[p,m]=(0,v.useState)(null),h=(0,v.useRef)(null),g=(0,v.useRef)(!1),_=(0,v.useRef)(s);_.current=s;let y=(0,v.useRef)(!1),b=(0,v.useRef)(null),x=(0,v.useRef)(0),S=(0,v.useRef)(!1);(0,v.useEffect)(()=>{if(!e||S.current)return;S.current=!0;let t=AF();c({type:`volume`,level:t.volume??e.volume}),c({type:`repeat`,mode:t.repeat??e.repeat}),(t.shuffle??e.shuffle)&&c({type:`shuffle`,on:!0}),c({type:`view`,view:t.view??e.startView}),t.muted&&c({type:`mute`,on:!0})},[e]);let C=()=>{if(!h.current){let e=new yF(i?i():new Audio,a??(()=>wF({getToken:SF})));e.preload=`auto`,h.current=e}return h.current},w=(0,v.useRef)(!1),T=(0,v.useCallback)(()=>{let e=h.current;if(e&&e.src){w.current=!0;try{let t=e.play();t&&typeof t.then==`function`?t.then(()=>{w.current=!1,u(!1)},()=>{w.current=!1;let e=h.current?.error??null;e?f(e):u(!0)}):(w.current=!1,u(!1))}catch{w.current=!1,u(!0)}E.current||O()}},[]),E=(0,v.useRef)(!1),D=(0,v.useRef)(null),O=()=>{let e=h.current,t=e instanceof yF?e.element:e,n=typeof window<`u`?window.AudioContext??window.webkitAudioContext:void 0;if(t&&n&&typeof t.play==`function`)try{let e=new n;D.current=e;let r=e.createMediaElementSource(t),i=e.createAnalyser();i.fftSize=256,i.smoothingTimeConstant=.82,r.connect(i),i.connect(e.destination),E.current=!0,m(i)}catch{E.current=!0}};(0,v.useEffect)(()=>{if(o)return;let e=C(),t=0,n=()=>{let n=Date.now();n-t<250||(t=n,c({type:`time`,position:e.currentTime||0,duration:Number.isFinite(e.duration)?e.duration:0}))},r=()=>c({type:`time`,position:e.currentTime||0,duration:Number.isFinite(e.duration)?e.duration:0}),i=()=>c({type:`ended`}),a=()=>{let t=e.error??null;f(t),c(t?{type:`pause`}:{type:`failed`})};return e.addEventListener(`timeupdate`,n),e.addEventListener(`loadedmetadata`,r),e.addEventListener(`durationchange`,r),e.addEventListener(`ended`,i),e.addEventListener(`error`,a),()=>{e.removeEventListener(`timeupdate`,n),e.removeEventListener(`loadedmetadata`,r),e.removeEventListener(`durationchange`,r),e.removeEventListener(`ended`,i),e.removeEventListener(`error`,a),e.pause(),D.current?.close().catch(()=>{}),D.current=null,e.dispose(),b.current=null,h.current=null,E.current=!1,m(null)}},[o]),(0,v.useEffect)(()=>{o&&c({type:`stop`})},[o]);let k=s.index>=0?s.queue[s.index]??null:null;(0,v.useEffect)(()=>{let e=h.current;if(o||!e)return;let t=k?.id??null;if(t!==b.current){if(b.current=t,!t){e.pause(),e.src=``;return}f(null),e.src=TF(t),s.playing&&T()}},[k?.id,s.playing,T,o]),(0,v.useEffect)(()=>{let e=h.current;!o&&e&&e.src&&(s.playing&&e.paused&&!g.current&&!w.current?T():!s.playing&&!e.paused&&e.pause())},[s.playing,s.position,T,o]),(0,v.useEffect)(()=>{let e=h.current;e&&(e.volume=s.volume/100*XD.level,e.muted=s.muted)},[s.volume,s.muted]),(0,v.useEffect)(()=>XD.subscribe(e=>{let t=h.current;t&&(t.volume=_.current.volume/100*e)}),[]),(0,v.useEffect)(()=>{let e=h.current;e&&e.src&&Math.abs((e.currentTime||0)-s.position)>kF&&(e.currentTime=s.position)},[s.position]),(0,v.useEffect)(()=>jF(s),[s.volume,s.muted,s.shuffle,s.repeat,s.view]),(0,v.useEffect)(()=>{if(!t||t.n===x.current)return;x.current=t.n;let e=Od(t.command);e&&c(e)},[t]),(0,v.useEffect)(()=>{let e=()=>{y.current=!0,g.current&&T()};return window.addEventListener(`pointerdown`,e,{passive:!0}),window.addEventListener(`keydown`,e),()=>{window.removeEventListener(`pointerdown`,e),window.removeEventListener(`keydown`,e)}},[T]),g.current=l;let A=(0,v.useRef)(0);return(0,v.useEffect)(()=>{if(r!==`open`||o)return;let e=()=>{let e=_.current,t=e.index>=0?e.queue[e.index]:void 0;A.current=Date.now(),n({type:`music.state`,state:{playing:e.playing,trackId:t?.id??null,title:t?.title??``,artist:t?.artist??``,album:t?.album??``,position:e.position,duration:e.duration,volume:e.volume,muted:e.muted,shuffle:e.shuffle,repeat:e.repeat,view:e.view,queue:e.queue.slice(0,50).map(e=>({id:e.id,title:e.title.slice(0,200)})),index:e.index,active:(typeof document>`u`||document.visibilityState===`visible`)&&y.current}})};e();let t=setInterval(()=>s.playing&&Date.now()-A.current>=OF&&e(),OF);return()=>clearInterval(t)},[r,o,k?.id,s.playing,s.volume,s.muted,s.shuffle,s.repeat,s.view,s.queue.length,s.index]),(0,v.useEffect)(()=>{let e=typeof navigator<`u`?navigator.mediaSession:void 0;if(e&&!o)try{k&&typeof MediaMetadata<`u`&&(e.metadata=new MediaMetadata({title:k.title,artist:k.artist,album:k.album,artwork:[{src:`/api/music/cover/${k.id}`}]})),e.playbackState=s.playing?`playing`:k?`paused`:`none`,e.setActionHandler(`play`,()=>c({type:`resume`})),e.setActionHandler(`pause`,()=>c({type:`pause`})),e.setActionHandler(`previoustrack`,()=>c({type:`previous`})),e.setActionHandler(`nexttrack`,()=>c({type:`next`})),e.setActionHandler(`seekto`,e=>typeof e.seekTime==`number`&&c({type:`seek`,seconds:e.seekTime}))}catch{}},[k?.id,s.playing,o]),{remote:!1,state:s,dispatch:c,current:k,blocked:l,notice:d,analyser:p,unlock:T,audio:h}}function NF(e,t){if(!e)return{state:{queue:[],index:-1,playing:!1,position:0,duration:0,volume:70,muted:!1,shuffle:!1,repeat:`all`,view:t},current:null};let n=e.queue.map((t,n)=>n===e.index?{id:t.id,title:e.title||t.title,artist:e.artist,album:e.album,durationSec:e.duration>0?e.duration:null}:{id:t.id,title:t.title,artist:``,album:``,durationSec:null});return{state:{queue:n,index:e.index,playing:e.playing,position:e.position,duration:e.duration,volume:e.volume,muted:e.muted,shuffle:e.shuffle,repeat:e.repeat,view:t},current:e.index>=0?n[e.index]??null:null}}function PF({local:e,host:t,send:n}){let r=e.state.view,{state:i,current:a}=(0,v.useMemo)(()=>NF(t,r),[t,r]),o=e.dispatch,s=(0,v.useCallback)(e=>{if(e.type===`view`)return o(e);let t=kd(e);t&&n({type:`music.remote`,command:t})},[o,n]);return(0,v.useMemo)(()=>({...e,remote:!0,state:i,dispatch:s,current:a,blocked:!1,notice:null,analyser:null,unlock:()=>{}}),[e,i,s,a])}function FF(e){let t=new URLSearchParams(e).get(`music`);return t===`connected`?{level:`info`,text:`Spotify is connected. Ask Friend to play something.`}:t===`failed`?{level:`warn`,text:`Spotify did not connect. Open Plugins, Spotify and press Connect again.`}:null}function IF({onSignedOut:e}){let{state:t,send:n,dispatch:r,voice:i,handsFree:a,useHere:o}=eM(e);pM(i),mM(i),bM(n,t.connection);let[s,c]=(0,v.useState)(je),l=(0,v.useCallback)(e=>{Me(e),c(e)},[]),[u,d]=(0,v.useState)(Pe),f=(0,v.useCallback)(e=>{Fe(e),d(e)},[]);(0,v.useEffect)(()=>i.setQuiet(u),[i,u]);let[p,m]=(0,v.useState)(!1),[h,g]=(0,v.useState)(!1),[_,y]=(0,v.useState)(!1),[b,x]=(0,v.useState)(void 0),[S,w]=(0,v.useState)(null),[T,E]=(0,v.useState)(Oe),D=e=>{ke(e),E(e)},O=T===`orb`?at:Ie,[k,A]=(0,v.useState)(!1),[j,ee]=(0,v.useState)(0),[M,N]=(0,v.useState)(null),P=ye(t.view),F=t.music?.output===`host`,te=MF({music:t.music,cmd:t.musicCmd,send:n,connection:t.connection,remote:F}),ne=PF({local:te,host:t.hostMusic,send:n}),re=F?ne:te,I=t.hud?.animations??`full`,ie=e=>{let{type:i,value:a}=e.action;if(i===`url`)window.open(a,`_blank`,`noopener,noreferrer`);else if(i===`prompt`)n({type:`chat.send`,text:a});else if(i===`music`||i===`panel`&&a===`music`){if(!t.music?.folderSet){r({type:`alert.add`,level:`info`,text:`No music folder is chosen yet. Pick one in Settings, Widgets, and the player opens.`}),w(`widgets`);return}if(i===`panel`){P.toggle(`music`,!0),re.state.view===`hidden`&&re.dispatch({type:`view`,view:`mini`});return}let e=Od({action:a});e&&re.dispatch(e)}else a===`plugins`?y(!0):a===`settings`?w(`model`):(a===`chat`||a===`tasks`)&&P.toggle(a,!0)},ae=t.viewKnown&&t.hud?.layout===`orbital`,oe=IP(void 0,ae),ce=NM(),le=qC(ce.w,ce.h)===`orbit`,L=(0,v.useMemo)(()=>{let e=s?{...t,objects:[],captions:``}:t,n=t.voice.mode===`listening`||t.voice.mode===`transcribing`||t.voice.mode===`speaking`||t.busy;return ae&&le&&!n?{...e,look:{...e.look,size:e.look.size*LC}}:e},[s,t,ae,le]),ue=(0,v.useRef)(!1);(0,v.useEffect)(()=>{ue.current||!t.voice.available||t.voice.enrolled||(ue.current=!0,r({type:`alert.add`,level:`info`,text:`Voice recognition is not set up. Press Esc, then Enroll my voice.`}))},[t.voice.available,t.voice.enrolled,r]);let de=fe(),B=(0,v.useRef)(!1);(0,v.useEffect)(()=>{if(!de||B.current||t.connection!==`open`)return;B.current=!0;let e=!1;try{e=localStorage.getItem(`friend.touchHint`)===`1`,localStorage.setItem(`friend.touchHint`,`1`)}catch{}e||r({type:`alert.add`,level:`info`,text:`Hold the round mic button to talk, or tap it once to start and again to send. The keyboard button types; the menu button opens settings.`})},[de,t.connection,r]);let pe=t.uiOpen?.n??0,me=t.uiOpen?.integration;(0,v.useEffect)(()=>{pe!==0&&(x(me),y(!0))},[pe,me]);let V=(0,v.useRef)(!1);(0,v.useEffect)(()=>{if(V.current)return;V.current=!0;let e=FF(window.location.search);e&&(r({type:`alert.add`,level:e.level,text:e.text}),window.history.replaceState(null,``,window.location.pathname))},[r]);let he=(0,v.useRef)(!1);(0,v.useEffect)(()=>{he.current||t.connection!==`open`||(he.current=!0,fetch(`/api/history`).then(e=>e.ok?e.json():[]).then(e=>r({type:`chat.seed`,lines:e})).catch(()=>{}))},[t.connection,r]),(0,v.useEffect)(()=>{t.connection===`open`&&n({type:`ui.panels`,open:[...P.show.chat?[`chat`]:[],...P.show.tasks?[`tasks`]:[]]})},[t.connection,P.show.chat,P.show.tasks,n]);let H=(0,v.useRef)(!1);(0,v.useEffect)(()=>{t.viewKnown&&t.view===`minimal`&&!H.current&&(H.current=!0,r({type:`alert.add`,level:`info`,text:`The view is Minimal, so the status line and clock are hidden. Press Esc, then View, to bring them back.`}))},[t.viewKnown,t.view,r]);let ge=e=>{Pd.save({view:e}).catch(e=>r({type:`alert.add`,level:`warn`,text:e.message}))},_e=(0,v.useMemo)(()=>R({notify:e=>r({type:`alert.add`,level:`info`,text:e}),openSettings:()=>w(`model`),openLook:()=>w(`look`),openConnectors:()=>A(!0),openPlugins:()=>y(!0),openVoice:t.voice.available?()=>m(!0):null,muted:s,setMuted:l,quiet:u,setQuiet:f,cameraOn:t.camera.enabled,setCamera:e=>r({type:`camera.enable`,value:e}),clearScreen:()=>{for(let e of t.objects)n({type:`stage.event`,objectId:e.id,event:`dismiss`})},statusLine:()=>vt({connection:t.connection,deviceOnline:t.deviceOnline,approval:t.approval,voiceMode:t.voice.mode,busy:t.busy,activity:t.activity}).text,endSession:t=>{fetch(t===`lock`?`/api/lock`:`/api/logout`,{method:`POST`,headers:{"content-type":`application/json`},body:`{}`}).catch(()=>{}).finally(e)},panelOn:e=>P.show[e],setPanel:(e,t)=>P.toggle(e,t),view:t.view,setView:ge,openHelp:N,resetLayout:()=>{U(),window.location.reload()}}),[r,n,s,e,P.show,P.toggle,t.view,t.voice.available,t.voice.mode,t.camera.enabled,t.objects,t.connection,t.deviceOnline,t.approval,t.busy,t.activity]);return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(dk,{state:L,send:n,dispatch:r,voice:i,slash:_e,onMenu:()=>ee(e=>e+1),hudLayer:ae&&t.hud?(0,C.jsx)(MM,{children:(0,C.jsx)(MP,{hud:t.hud,state:t,usage:oe.share===null?null:oe.share*100,send:n,onHire:()=>w(`office`),onLaunch:ie,onExpand:()=>{}})}):null}),(0,C.jsxs)(xt,{approval:t.approval,challenge:t.challenge,cameraStream:t.camera.stream,alerts:t.alerts,connection:t.connection,deviceOnline:t.deviceOnline,voiceMode:t.voice.mode,busy:t.busy,activity:t.activity,showStatus:t.viewKnown&&P.show.status&&!ae,showClock:t.viewKnown&&P.show.clock&&!ae,profile:t.viewKnown&&P.show.profile&&!ae?{ownerName:t.ownerName,speaker:t.speaker}:null,assistantName:t.assistantName,hud:t.hud,hudApproval:ae,send:n,dispatch:r,children:[t.viewKnown&&P.show.chat&&(0,C.jsx)(Se,{lines:t.chat,live:t.chatLive,onSend:e=>n({type:`chat.send`,text:e}),onClose:()=>P.toggle(`chat`,!1)}),t.viewKnown&&P.show.tasks&&(0,C.jsx)(Te,{busy:t.busy,onClose:()=>P.toggle(`tasks`,!1)}),t.viewKnown&&P.show.launcher&&t.hud&&!ae&&(0,C.jsx)(jM,{items:t.hud.launcher,animations:I,onAction:ie}),t.viewKnown&&P.show.music&&(0,C.jsx)(_F,{player:re,music:t.music,animations:I}),p&&(0,C.jsx)(sM,{onClose:()=>m(!1)}),h&&(0,C.jsx)(TM,{onClose:()=>g(!1)}),_&&(0,C.jsx)(Bf,{variant:T===`orb`?`holo`:`classic`,...b?{initialConfigure:b}:{},onClose:()=>{y(!1),x(void 0)}}),S&&(0,C.jsx)(NC,{initialTab:S,variant:T===`orb`?`holo`:`classic`,onClose:()=>w(null)}),k&&(0,C.jsx)(se,{variant:T===`orb`?`holo`:`classic`,onClose:()=>A(!1)}),M&&(0,C.jsx)(z,{commands:M,onClose:()=>N(null)})]}),(0,C.jsx)(O,{voiceMode:t.voice.mode,busy:t.busy,onClassic:()=>D(`classic`),onOrb:()=>D(`orb`),muted:s,onToggleMute:()=>l(!s),quiet:u,onToggleQuiet:()=>f(!u),onSignedOut:e,voiceAvailable:t.voice.available,voiceEnrolled:t.voice.enrolled,onEnroll:()=>m(!0),onHousehold:()=>g(!0),handsFreeOn:a.on,onToggleHandsFree:a.supported?a.toggle:void 0,assistantName:t.assistantName,onPlugins:()=>y(!0),onSettings:e=>w(e??`model`),onConnectors:()=>A(!0),cameraOn:t.camera.enabled,onToggleCamera:()=>r({type:`camera.enable`,value:!t.camera.enabled}),chatOn:P.show.chat,onToggleChat:()=>P.toggle(`chat`),tasksOn:P.show.tasks,onToggleTasks:()=>P.toggle(`tasks`),musicOn:P.show.music,onToggleMusic:()=>P.toggle(`music`),launcherOn:P.show.launcher,onToggleLauncher:()=>P.toggle(`launcher`),view:t.view,onView:ge,openRequest:j}),t.connection===`elsewhere`&&(0,C.jsx)(hM,{onUseHere:o})]})}function LF(){let[e,t]=(0,v.useState)(`loading`);return(0,v.useEffect)(()=>{let e=!0,n=n=>e&&t(n);return(async()=>{try{if(!(await(await fetch(`/api/state`)).json()).hasOwner)return n(`setup`);let e=await(await fetch(`/api/session`,{cache:`no-store`})).json();n(e.signedIn===!0?`stage`:`login`)}catch{n(`login`)}})(),()=>{e=!1}},[]),e===`loading`?(0,C.jsx)(`div`,{className:`boot`,"aria-busy":`true`}):e===`setup`?(0,C.jsx)(E,{onDone:()=>t(`login`)}):e===`login`?(0,C.jsx)(T,{onLoggedIn:()=>t(`stage`)}):(0,C.jsx)(IF,{onSignedOut:()=>t(`login`)})}(0,y.createRoot)(document.getElementById(`root`)).render((0,C.jsx)(v.StrictMode,{children:(0,C.jsx)(LF,{})}));export{d as a,h as i,uu as n,s as o,S as r,l as s,PN as t};