UNPKG

ocearo-ui

Version:

Ocean Robot UI: 3D visualization dashboard for signalk

1 lines 26.6 kB
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,18504,(e,t,i)=>{},81694,e=>{"use strict";var t=e.i(43476),i=e.i(71645),r=e.i(70703);e.i(47167);let n={toVector:(e,t)=>(void 0===e&&(e=t),Array.isArray(e)?e:[e,e]),add:(e,t)=>[e[0]+t[0],e[1]+t[1]],sub:(e,t)=>[e[0]-t[0],e[1]-t[1]],addTo(e,t){e[0]+=t[0],e[1]+=t[1]},subTo(e,t){e[0]-=t[0],e[1]-=t[1]}};function s(e,t,i){return 0===t||Math.abs(t)===1/0?Math.pow(e,5*i):e*t*i/(t+i*e)}function o(e,t,i,r=.15){return 0===r?Math.max(t,Math.min(e,i)):e<t?-s(t-e,i-t,r)+t:e>i?+s(e-i,i-t,r)+i:e}function a(e,t,i){var r;return(t="symbol"==typeof(r=function(e,t){if("object"!=typeof e||null===e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var r=i.call(e,t||"default");if("object"!=typeof r)return r;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(t,"string"))?r:String(r))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function l(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),i.push.apply(i,r)}return i}function c(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?l(Object(i),!0).forEach(function(t){a(e,t,i[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):l(Object(i)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))})}return e}let u={pointer:{start:"down",change:"move",end:"up"},mouse:{start:"down",change:"move",end:"up"},touch:{start:"start",change:"move",end:"end"},gesture:{start:"start",change:"change",end:"end"}};function d(e){return e?e[0].toUpperCase()+e.slice(1):""}let h=["enter","leave"],f=["gotpointercapture","lostpointercapture"];function p(e){return"touches"in e}function m(e){return p(e)?"touch":"pointerType"in e?e.pointerType:"mouse"}function g(e){return p(e)?("touchend"===e.type||"touchcancel"===e.type?e.changedTouches:e.targetTouches)[0]:e}function v(e){let t=g(e);return p(e)?t.identifier:t.pointerId}function b(e){let t=g(e);return[t.clientX,t.clientY]}function x(e,...t){return"function"==typeof e?e(...t):e}function w(){}function y(e,t){return Object.assign({},t,e||{})}class _{constructor(e,t,i){this.ctrl=e,this.args=t,this.key=i,this.state||(this.state={},this.computeValues([0,0]),this.computeInitial(),this.init&&this.init(),this.reset())}get state(){return this.ctrl.state[this.key]}set state(e){this.ctrl.state[this.key]=e}get shared(){return this.ctrl.state.shared}get eventStore(){return this.ctrl.gestureEventStores[this.key]}get timeoutStore(){return this.ctrl.gestureTimeoutStores[this.key]}get config(){return this.ctrl.config[this.key]}get sharedConfig(){return this.ctrl.config.shared}get handler(){return this.ctrl.handlers[this.key]}reset(){let{state:e,shared:t,ingKey:i,args:r}=this;t[i]=e._active=e.active=e._blocked=e._force=!1,e._step=[!1,!1],e.intentional=!1,e._movement=[0,0],e._distance=[0,0],e._direction=[0,0],e._delta=[0,0],e._bounds=[[-1/0,1/0],[-1/0,1/0]],e.args=r,e.axis=void 0,e.memo=void 0,e.elapsedTime=e.timeDelta=0,e.direction=[0,0],e.distance=[0,0],e.overflow=[0,0],e._movementBound=[!1,!1],e.velocity=[0,0],e.movement=[0,0],e.delta=[0,0],e.timeStamp=0}start(e){let t=this.state,i=this.config;t._active||(this.reset(),this.computeInitial(),t._active=!0,t.target=e.target,t.currentTarget=e.currentTarget,t.lastOffset=i.from?x(i.from,t):t.offset,t.offset=t.lastOffset,t.startTime=t.timeStamp=e.timeStamp)}computeValues(e){let t=this.state;t._values=e,t.values=this.config.transform(e)}computeInitial(){let e=this.state;e._initial=e._values,e.initial=e.values}compute(e){let{state:t,config:i,shared:r}=this;t.args=this.args;let s=0;if(e&&(t.event=e,i.preventDefault&&e.cancelable&&t.event.preventDefault(),t.type=e.type,r.touches=this.ctrl.pointerIds.size||this.ctrl.touchIds.size,r.locked=!!document.pointerLockElement,Object.assign(r,function(e){let t={};if("buttons"in e&&(t.buttons=e.buttons),"shiftKey"in e){let{shiftKey:i,altKey:r,metaKey:n,ctrlKey:s}=e;Object.assign(t,{shiftKey:i,altKey:r,metaKey:n,ctrlKey:s})}return t}(e)),r.down=r.pressed=r.buttons%2==1||r.touches>0,s=e.timeStamp-t.timeStamp,t.timeStamp=e.timeStamp,t.elapsedTime=t.timeStamp-t.startTime),t._active){let e=t._delta.map(Math.abs);n.addTo(t._distance,e)}this.axisIntent&&this.axisIntent(e);let[a,l]=t._movement,[c,u]=i.threshold,{_step:d,values:h}=t;if(i.hasCustomTransform?(!1===d[0]&&(d[0]=Math.abs(a)>=c&&h[0]),!1===d[1]&&(d[1]=Math.abs(l)>=u&&h[1])):(!1===d[0]&&(d[0]=Math.abs(a)>=c&&Math.sign(a)*c),!1===d[1]&&(d[1]=Math.abs(l)>=u&&Math.sign(l)*u)),t.intentional=!1!==d[0]||!1!==d[1],!t.intentional)return;let f=[0,0];if(i.hasCustomTransform){let[e,t]=h;f[0]=!1!==d[0]?e-d[0]:0,f[1]=!1!==d[1]?t-d[1]:0}else f[0]=!1!==d[0]?a-d[0]:0,f[1]=!1!==d[1]?l-d[1]:0;this.restrictToAxis&&!t._blocked&&this.restrictToAxis(f);let p=t.offset,m=t._active&&!t._blocked||t.active;m&&(t.first=t._active&&!t.active,t.last=!t._active&&t.active,t.active=r[this.ingKey]=t._active,e&&(t.first&&("bounds"in i&&(t._bounds=x(i.bounds,t)),this.setup&&this.setup()),t.movement=f,this.computeOffset()));let[g,v]=t.offset,[[b,w],[y,_]]=t._bounds;t.overflow=[g<b?-1:+(g>w),v<y?-1:+(v>_)],t._movementBound[0]=!!t.overflow[0]&&(!1===t._movementBound[0]?t._movement[0]:t._movementBound[0]),t._movementBound[1]=!!t.overflow[1]&&(!1===t._movementBound[1]?t._movement[1]:t._movementBound[1]);let k=t._active&&i.rubberband||[0,0];if(t.offset=function(e,[t,i],[r,n]){let[[s,a],[l,c]]=e;return[o(t,s,a,r),o(i,l,c,n)]}(t._bounds,t.offset,k),t.delta=n.sub(t.offset,p),this.computeMovement(),m&&(!t.last||s>32)){t.delta=n.sub(t.offset,p);let e=t.delta.map(Math.abs);n.addTo(t.distance,e),t.direction=t.delta.map(Math.sign),t._direction=t._delta.map(Math.sign),!t.first&&s>0&&(t.velocity=[e[0]/s,e[1]/s],t.timeDelta=s)}}emit(){let e=this.state,t=this.shared,i=this.config;if(e._active||this.clean(),(e._blocked||!e.intentional)&&!e._force&&!i.triggerAllEvents)return;let r=this.handler(c(c(c({},t),e),{},{[this.aliasKey]:e.values}));void 0!==r&&(e.memo=r)}clean(){this.eventStore.clean(),this.timeoutStore.clean()}}class k extends _{constructor(...e){super(...e),a(this,"aliasKey","xy")}reset(){super.reset(),this.state.axis=void 0}init(){this.state.offset=[0,0],this.state.lastOffset=[0,0]}computeOffset(){this.state.offset=n.add(this.state.lastOffset,this.state.movement)}computeMovement(){this.state.movement=n.sub(this.state.offset,this.state.lastOffset)}axisIntent(e){let t=this.state,i=this.config;if(!t.axis&&e){let r="object"==typeof i.axisThreshold?i.axisThreshold[m(e)]:i.axisThreshold;t.axis=function([e,t],i){let r=Math.abs(e),n=Math.abs(t);return r>n&&r>i?"x":n>r&&n>i?"y":void 0}(t._movement,r)}t._blocked=(i.lockDirection||!!i.axis)&&!t.axis||!!i.axis&&i.axis!==t.axis}restrictToAxis(e){if(this.config.axis||this.config.lockDirection)switch(this.state.axis){case"x":e[1]=0;break;case"y":e[0]=0}}}let S=e=>e,T={enabled:(e=!0)=>e,eventOptions:(e,t,i)=>c(c({},i.shared.eventOptions),e),preventDefault:(e=!1)=>e,triggerAllEvents:(e=!1)=>e,rubberband(e=0){switch(e){case!0:return[.15,.15];case!1:return[0,0];default:return n.toVector(e)}},from:e=>"function"==typeof e?e:null!=e?n.toVector(e):void 0,transform(e,t,i){let r=e||i.shared.transform;return this.hasCustomTransform=!!r,r||S},threshold:e=>n.toVector(e,0)},j=0,P=c(c({},T),{},{axis(e,t,{axis:i}){if(this.lockDirection="lock"===i,!this.lockDirection)return i},axisThreshold:(e=j)=>e,bounds(e={}){if("function"==typeof e)return t=>P.bounds(e(t));if("current"in e)return()=>e.current;if("function"==typeof HTMLElement&&e instanceof HTMLElement)return e;let{left:t=-1/0,right:i=1/0,top:r=-1/0,bottom:n=1/0}=e;return[[t,i],[r,n]]}}),O={ArrowRight:(e,t=1)=>[e*t,0],ArrowLeft:(e,t=1)=>[-1*e*t,0],ArrowUp:(e,t=1)=>[0,-1*e*t],ArrowDown:(e,t=1)=>[0,e*t]},A="u">typeof window&&window.document&&window.document.createElement;function E(){return A&&"ontouchstart"in window}let C={isBrowser:A,gesture:function(){try{return"constructor"in GestureEvent}catch(e){return!1}}(),touch:E(),touchscreen:E()||A&&window.navigator.maxTouchPoints>1,pointer:A&&"onpointerdown"in window,pointerLock:A&&"exitPointerLock"in window.document},D=10,I={mouse:0,touch:0,pen:8},M=c(c({},P),{},{device(e,t,{pointer:{touch:i=!1,lock:r=!1,mouse:n=!1}={}}){return(this.pointerLock=r&&C.pointerLock,C.touch&&i)?"touch":this.pointerLock?"mouse":C.pointer&&!n?"pointer":C.touch?"touch":"mouse"},preventScrollAxis(e,t,{preventScroll:i}){if(this.preventScrollDelay="number"==typeof i?i:i||void 0===i&&e?250:void 0,C.touchscreen&&!1!==i)return e||(void 0!==i?"y":void 0)},pointerCapture(e,t,{pointer:{capture:i=!0,buttons:r=1,keys:n=!0}={}}){return this.pointerButtons=r,this.keys=n,!this.pointerLock&&"pointer"===this.device&&i},threshold(e,t,{filterTaps:i=!1,tapsThreshold:r=3,axis:s}){let o=n.toVector(e,i?r:+!!s);return this.filterTaps=i,this.tapsThreshold=r,o},swipe({velocity:e=.5,distance:t=50,duration:i=250}={}){return{velocity:this.transform(n.toVector(e)),distance:this.transform(n.toVector(t)),duration:i}},delay(e=0){switch(e){case!0:return 180;case!1:return 0;default:return e}},axisThreshold:e=>e?c(c({},I),e):I,keyboardDisplacement:(e=D)=>e});c(c({},T),{},{device(e,t,{shared:i,pointer:{touch:r=!1}={}}){if(i.target&&!C.touch&&C.gesture)return"gesture";if(C.touch&&r)return"touch";if(C.touchscreen){if(C.pointer)return"pointer";if(C.touch)return"touch"}},bounds(e,t,{scaleBounds:i={},angleBounds:r={}}){let n=e=>{let t=y(x(i,e),{min:-1/0,max:1/0});return[t.min,t.max]},s=e=>{let t=y(x(r,e),{min:-1/0,max:1/0});return[t.min,t.max]};return"function"!=typeof i&&"function"!=typeof r?[n(),s()]:e=>[n(e),s(e)]},threshold(e,t,i){return this.lockDirection="lock"===i.axis,n.toVector(e,this.lockDirection?[.1,3]:0)},modifierKey:e=>void 0===e?"ctrlKey":e,pinchOnWheel:(e=!0)=>e}),c(c({},P),{},{mouseOnly:(e=!0)=>e}),c(c({},P),{},{mouseOnly:(e=!0)=>e});let B=new Map,L=new Map,N={key:"drag",engine:class extends k{constructor(...e){super(...e),a(this,"ingKey","dragging")}reset(){super.reset();let e=this.state;e._pointerId=void 0,e._pointerActive=!1,e._keyboardActive=!1,e._preventScroll=!1,e._delayed=!1,e.swipe=[0,0],e.tap=!1,e.canceled=!1,e.cancel=this.cancel.bind(this)}setup(){let e=this.state;if(e._bounds instanceof HTMLElement){let t=e._bounds.getBoundingClientRect(),i=e.currentTarget.getBoundingClientRect(),r={left:t.left-i.left+e.offset[0],right:t.right-i.right+e.offset[0],top:t.top-i.top+e.offset[1],bottom:t.bottom-i.bottom+e.offset[1]};e._bounds=P.bounds(r)}}cancel(){let e=this.state;e.canceled||(e.canceled=!0,e._active=!1,setTimeout(()=>{this.compute(),this.emit()},0))}setActive(){this.state._active=this.state._pointerActive||this.state._keyboardActive}clean(){this.pointerClean(),this.state._pointerActive=!1,this.state._keyboardActive=!1,super.clean()}pointerDown(e){let t=this.config,i=this.state;if(null!=e.buttons&&(Array.isArray(t.pointerButtons)?!t.pointerButtons.includes(e.buttons):-1!==t.pointerButtons&&t.pointerButtons!==e.buttons))return;let r=this.ctrl.setEventIds(e);t.pointerCapture&&e.target.setPointerCapture(e.pointerId),r&&r.size>1&&i._pointerActive||(this.start(e),this.setupPointer(e),i._pointerId=v(e),i._pointerActive=!0,this.computeValues(b(e)),this.computeInitial(),t.preventScrollAxis&&"mouse"!==m(e)?(i._active=!1,this.setupScrollPrevention(e)):t.delay>0?(this.setupDelayTrigger(e),t.triggerAllEvents&&(this.compute(e),this.emit())):this.startPointerDrag(e))}startPointerDrag(e){let t=this.state;t._active=!0,t._preventScroll=!0,t._delayed=!1,this.compute(e),this.emit()}pointerMove(e){let t=this.state,i=this.config;if(!t._pointerActive)return;let r=v(e);if(void 0!==t._pointerId&&r!==t._pointerId)return;let s=b(e);if(document.pointerLockElement===e.target?t._delta=[e.movementX,e.movementY]:(t._delta=n.sub(s,t._values),this.computeValues(s)),n.addTo(t._movement,t._delta),this.compute(e),t._delayed&&t.intentional){this.timeoutStore.remove("dragDelay"),t.active=!1,this.startPointerDrag(e);return}if(i.preventScrollAxis&&!t._preventScroll)if(!t.axis)return;else if(t.axis===i.preventScrollAxis||"xy"===i.preventScrollAxis){t._active=!1,this.clean();return}else{this.timeoutStore.remove("startPointerDrag"),this.startPointerDrag(e);return}this.emit()}pointerUp(e){this.ctrl.setEventIds(e);try{this.config.pointerCapture&&e.target.hasPointerCapture(e.pointerId)&&e.target.releasePointerCapture(e.pointerId)}catch(e){}let t=this.state,i=this.config;if(!t._active||!t._pointerActive)return;let r=v(e);if(void 0!==t._pointerId&&r!==t._pointerId)return;this.state._pointerActive=!1,this.setActive(),this.compute(e);let[n,s]=t._distance;if(t.tap=n<=i.tapsThreshold&&s<=i.tapsThreshold,t.tap&&i.filterTaps)t._force=!0;else{let[e,r]=t._delta,[n,s]=t._movement,[o,a]=i.swipe.velocity,[l,c]=i.swipe.distance,u=i.swipe.duration;if(t.elapsedTime<u){let i=Math.abs(e/t.timeDelta),u=Math.abs(r/t.timeDelta);i>o&&Math.abs(n)>l&&(t.swipe[0]=Math.sign(e)),u>a&&Math.abs(s)>c&&(t.swipe[1]=Math.sign(r))}}this.emit()}pointerClick(e){!this.state.tap&&e.detail>0&&(e.preventDefault(),e.stopPropagation())}setupPointer(e){let t=this.config,i=t.device;t.pointerLock&&e.currentTarget.requestPointerLock(),t.pointerCapture||(this.eventStore.add(this.sharedConfig.window,i,"change",this.pointerMove.bind(this)),this.eventStore.add(this.sharedConfig.window,i,"end",this.pointerUp.bind(this)),this.eventStore.add(this.sharedConfig.window,i,"cancel",this.pointerUp.bind(this)))}pointerClean(){this.config.pointerLock&&document.pointerLockElement===this.state.currentTarget&&document.exitPointerLock()}preventScroll(e){this.state._preventScroll&&e.cancelable&&e.preventDefault()}setupScrollPrevention(e){var t;this.state._preventScroll=!1,"persist"in(t=e)&&"function"==typeof t.persist&&t.persist();let i=this.eventStore.add(this.sharedConfig.window,"touch","change",this.preventScroll.bind(this),{passive:!1});this.eventStore.add(this.sharedConfig.window,"touch","end",i),this.eventStore.add(this.sharedConfig.window,"touch","cancel",i),this.timeoutStore.add("startPointerDrag",this.startPointerDrag.bind(this),this.config.preventScrollDelay,e)}setupDelayTrigger(e){this.state._delayed=!0,this.timeoutStore.add("dragDelay",()=>{this.state._step=[0,0],this.startPointerDrag(e)},this.config.delay)}keyDown(e){let t=O[e.key];if(t){let i=this.state,r=e.shiftKey?10:e.altKey?.1:1;this.start(e),i._delta=t(this.config.keyboardDisplacement,r),i._keyboardActive=!0,n.addTo(i._movement,i._delta),this.compute(e),this.emit()}}keyUp(e){e.key in O&&(this.state._keyboardActive=!1,this.setActive(),this.compute(e),this.emit())}bind(e){let t=this.config.device;e(t,"start",this.pointerDown.bind(this)),this.config.pointerCapture&&(e(t,"change",this.pointerMove.bind(this)),e(t,"end",this.pointerUp.bind(this)),e(t,"cancel",this.pointerUp.bind(this)),e("lostPointerCapture","",this.pointerUp.bind(this))),this.config.keys&&(e("key","down",this.keyDown.bind(this)),e("key","up",this.keyUp.bind(this))),this.config.filterTaps&&e("click","",this.pointerClick.bind(this),{capture:!0,passive:!1})}},resolver:M},V={target(e){if(e)return()=>"current"in e?e.current:e},enabled:(e=!0)=>e,window:(e=C.isBrowser?window:void 0)=>e,eventOptions:({passive:e=!0,capture:t=!1}={})=>({passive:e,capture:t}),transform:e=>e},K=["target","eventOptions","window","enabled","transform"];function R(e={},t){let i={};for(let[r,n]of Object.entries(t))switch(typeof n){case"function":i[r]=n.call(i,e[r],r,e);break;case"object":i[r]=R(e[r],n);break;case"boolean":n&&(i[r]=e[r])}return i}class U{constructor(e,t){a(this,"_listeners",new Set),this._ctrl=e,this._gestureKey=t}add(e,t,i,r,n){let s=this._listeners,o=function(e,t=""){let i=u[e];return e+(i&&i[t]||t)}(t,i),a=c(c({},this._gestureKey?this._ctrl.config[this._gestureKey].eventOptions:{}),n);e.addEventListener(o,r,a);let l=()=>{e.removeEventListener(o,r,a),s.delete(l)};return s.add(l),l}clean(){this._listeners.forEach(e=>e()),this._listeners.clear()}}class F{constructor(){a(this,"_timeouts",new Map)}add(e,t,i=140,...r){this.remove(e),this._timeouts.set(e,window.setTimeout(t,i,...r))}remove(e){let t=this._timeouts.get(e);t&&window.clearTimeout(t)}clean(){this._timeouts.forEach(e=>void window.clearTimeout(e)),this._timeouts.clear()}}class H{constructor(e){a(this,"gestures",new Set),a(this,"_targetEventStore",new U(this)),a(this,"gestureEventStores",{}),a(this,"gestureTimeoutStores",{}),a(this,"handlers",{}),a(this,"config",{}),a(this,"pointerIds",new Set),a(this,"touchIds",new Set),a(this,"state",{shared:{shiftKey:!1,metaKey:!1,ctrlKey:!1,altKey:!1}}),function(e,t){t.drag&&z(e,"drag"),t.wheel&&z(e,"wheel"),t.scroll&&z(e,"scroll"),t.move&&z(e,"move"),t.pinch&&z(e,"pinch"),t.hover&&z(e,"hover")}(this,e)}setEventIds(e){if(p(e))return this.touchIds=new Set(Array.from(e.touches).filter(t=>{var i,r;return t.target===e.currentTarget||(null==(i=e.currentTarget)||null==(r=i.contains)?void 0:r.call(i,t.target))}).map(e=>e.identifier)),this.touchIds;if("pointerId"in e)return"pointerup"===e.type||"pointercancel"===e.type?this.pointerIds.delete(e.pointerId):"pointerdown"===e.type&&this.pointerIds.add(e.pointerId),this.pointerIds}applyHandlers(e,t){this.handlers=e,this.nativeHandlers=t}applyConfig(e,t){this.config=function(e,t,i={}){let{target:r,eventOptions:n,window:s,enabled:o,transform:a}=e,l=function(e,t){if(null==e)return{};var i,r,n=function(e,t){if(null==e)return{};var i,r,n={},s=Object.keys(e);for(r=0;r<s.length;r++)i=s[r],t.indexOf(i)>=0||(n[i]=e[i]);return n}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)i=s[r],!(t.indexOf(i)>=0)&&Object.prototype.propertyIsEnumerable.call(e,i)&&(n[i]=e[i])}return n}(e,K);if(i.shared=R({target:r,eventOptions:n,window:s,enabled:o,transform:a},V),t){let e=L.get(t);i[t]=R(c({shared:i.shared},l),e)}else for(let e in l){let t=L.get(e);t&&(i[e]=R(c({shared:i.shared},l[e]),t))}return i}(e,t,this.config)}clean(){for(let e of(this._targetEventStore.clean(),this.gestures))this.gestureEventStores[e].clean(),this.gestureTimeoutStores[e].clean()}effect(){return this.config.shared.target&&this.bind(),()=>this._targetEventStore.clean()}bind(...e){let t,i=this.config.shared,r={};if(!i.target||(t=i.target())){if(i.enabled){for(let i of this.gestures){let n=this.config[i],s=W(r,n.eventOptions,!!t);n.enabled&&new(B.get(i))(this,e,i).bind(s)}let n=W(r,i.eventOptions,!!t);for(let t in this.nativeHandlers)n(t,"",i=>this.nativeHandlers[t](c(c({},this.state.shared),{},{event:i,args:e})),void 0,!0)}for(let e in r)r[e]=function(...e){return 0===e.length?w:1===e.length?e[0]:function(){let t;for(let i of e)t=i.apply(this,arguments)||t;return t}}(...r[e]);if(!t)return r;for(let e in r){let{device:i,capture:n,passive:s}=function(e){let t=e.substring(2).toLowerCase(),i=!!~t.indexOf("passive");i&&(t=t.replace("passive",""));let r=f.includes(t)?"capturecapture":"capture",n=!!~t.indexOf(r);return n&&(t=t.replace("capture","")),{device:t,capture:n,passive:i}}(e);this._targetEventStore.add(t,i,"",r[e],{capture:n,passive:s})}}}}function z(e,t){e.gestures.add(t),e.gestureEventStores[t]=new U(e,t),e.gestureTimeoutStores[t]=new F}let W=(e,t,i)=>(r,n,s,o={},a=!1)=>{var l,c;let f=null!=(l=o.capture)?l:t.capture,p=null!=(c=o.passive)?c:t.passive,m=a?r:function(e,t="",i=!1){let r=u[e],n=r&&r[t]||t;return"on"+d(e)+d(n)+(!function(e=!1,t){return e&&!h.includes(t)}(i,n)?"":"Capture")}(r,n,f);i&&p&&(m+="Passive"),e[m]=e[m]||[],e[m].push(s)};e.i(18504);var G=e.i(67561),q=e.i(83934),X=e.i(11426),Y=i;class $ extends Y.default.Component{constructor(e){super(e),this.state={hasError:!1,error:null,errorInfo:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){this.setState({error:e,errorInfo:t}),console.error("Error caught in Error Boundary:",e,t)}handleRefresh=()=>{window.location.reload()};handleExitFullscreen=()=>{document.fullscreenElement&&(window.close(),document.exitFullscreen().catch(e=>{console.error("Failed to exit fullscreen:",e)}))};render(){if(this.state.hasError){let{error:e,errorInfo:i}=this.state;return(0,t.jsx)("div",{className:"flex flex-col items-center justify-center min-h-screen bg-hud-bg text-hud-main p-6",children:(0,t.jsxs)("div",{className:"tesla-card p-10 max-w-2xl w-full bg-hud-elevated backdrop-blur-xl border border-hud rounded-3xl shadow-2xl flex flex-col items-center text-center",children:[(0,t.jsx)("div",{className:"w-20 h-20 rounded-full bg-oRed/20 flex items-center justify-center mb-8",children:(0,t.jsx)("div",{className:"w-4 h-4 rounded-full bg-oRed animate-soft-pulse"})}),(0,t.jsx)("h1",{className:"text-3xl font-black uppercase tracking-tighter text-oRed mb-6",children:"System Critical Error"}),(0,t.jsxs)("p",{className:"text-lg font-medium text-hud-main/80 mb-8 max-w-md",children:[(0,t.jsx)("span",{className:"text-hud-muted uppercase text-xs font-black tracking-widest block mb-2",children:"Technical Status"}),e?e.toString():"Unknown exception detected in UI thread"]}),i&&(0,t.jsxs)("details",{className:"w-full whitespace-pre-wrap bg-hud-bg/5 p-6 rounded-2xl mb-10 text-left border border-hud group",children:[(0,t.jsxs)("summary",{className:"cursor-pointer text-oBlue text-xs font-black uppercase tracking-widest hover:text-hud-main transition-colors flex items-center justify-between",children:[(0,t.jsx)("span",{children:"Diagnostic Stack Trace"}),(0,t.jsx)("span",{className:"opacity-40 group-open:rotate-180 transition-transform",children:"▼"})]}),(0,t.jsx)("pre",{className:"mt-6 text-xs font-mono text-hud-muted overflow-auto max-h-60 custom-scrollbar leading-relaxed",children:i.componentStack})]}),(0,t.jsxs)("div",{className:"flex flex-col sm:flex-row gap-4 w-full justify-center",children:[(0,t.jsx)("button",{onClick:this.handleRefresh,className:"px-8 py-4 bg-oBlue hover:bg-blue-600 text-hud-main rounded-xl text-xs font-black uppercase tracking-[0.2em] transition-all duration-500 shadow-lg shadow-oBlue/20 active:scale-95",children:"Reboot Session"}),(0,t.jsx)("button",{onClick:this.handleExitFullscreen,className:"px-8 py-4 bg-hud-elevated hover:bg-hud-bg text-hud-main border border-hud rounded-xl text-xs font-black uppercase tracking-[0.2em] transition-all duration-500 active:scale-95",children:"Exit Console"})]})]})})}return this.props.children}}e.i(85269);var J=e.i(71),Q=e.i(18850),Z=e.i(83402);function ee({children:e}){return(0,i.useEffect)(()=>{let e=Z.default.get("language");e&&e!==Q.default.language&&Q.default.changeLanguage(e)},[]),(0,t.jsx)(J.I18nextProvider,{i18n:Q.default,children:e})}let et=(0,r.default)(()=>e.A(45344),{loadableGenerated:{modules:[42602]},loading:()=>(0,t.jsx)("div",{className:"w-full h-full flex items-center justify-center",children:"Loading..."})}),ei=(0,r.default)(()=>e.A(10520),{loadableGenerated:{modules:[61891]}}),er=(0,r.default)(()=>e.A(49063),{loadableGenerated:{modules:[85626]}}),en=(0,r.default)(()=>e.A(13181),{loadableGenerated:{modules:[23595]},loading:()=>(0,t.jsx)("div",{className:"w-full h-full flex items-center justify-center",children:(0,t.jsx)("div",{className:"text-hud-main text-2xl",children:"Loading 3D View..."})}),ssr:!1}),es={BOAT:"boat",APP:"app",SPLIT:"split"};function eo(){var e,r;let n=(0,i.useRef)(!1),s=(0,i.useRef)(null),[o,a]=(0,i.useState)(null),[l,c]=(0,i.useState)(()=>Z.default.getCurrentView()||"navigation"),[u,d]=(0,i.useState)(!1),[h,f]=(0,i.useState)(!1),p=(0,i.useRef)(!1);(0,i.useEffect)(()=>{let e;a(window.innerWidth>=1366?es.SPLIT:es.BOAT),n.current=!0;let t=()=>{clearTimeout(e),e=setTimeout(()=>{p.current||a(window.innerWidth>=1366?es.SPLIT:es.BOAT)},250)};return window.addEventListener("resize",t),()=>{window.removeEventListener("resize",t),clearTimeout(e)}},[]);let m=(0,i.useCallback)(()=>{d(e=>!e)},[]),g=(0,i.useCallback)(e=>{a(e)},[]),v=(e=({movement:[e]})=>{let t=window.innerWidth/5;e>t?g(es.BOAT):e<-t?g(es.APP):g(es.SPLIT)},r={axis:"x"},B.set(N.key,N.engine),L.set(N.key,N.resolver),function(e,t={},r,n){let s=i.default.useMemo(()=>new H(e),[]);if(s.applyHandlers(e,void 0),s.applyConfig(t,r),i.default.useEffect(s.effect.bind(s)),i.default.useEffect(()=>s.clean.bind(s),[]),void 0===t.target)return s.bind.bind(s)}({drag:e},r||{},"drag")),b=(0,i.useCallback)(()=>{document.fullscreenElement?document.exitFullscreen():document.documentElement.requestFullscreen().catch(e=>{console.error("Fullscreen error:",e.message)})},[]),x=(0,i.useCallback)(e=>{o===es.BOAT&&g(es.APP),c(e),Z.default.setCurrentView(e)},[o,g]),w=(0,i.useRef)(null),y=(0,i.useRef)(null),_=(0,i.useCallback)(()=>{if("settings"===l){p.current=!1,f(!1);let e=y.current||"navigation";c(e),Z.default.setCurrentView(e),g(w.current||es.BOAT)}else w.current=o,y.current=l,p.current=!0,f(!0),x("settings"),g(es.APP)},[l,o,g,x]);(0,i.useEffect)(()=>{if("settings"===l){p.current||(p.current=!0,f(!0));return}p.current&&(p.current=!1,f(!1))},[l]);let k=(0,i.useMemo)(()=>null===o?{}:{leftPane:`transition-all duration-300 ${o===es.BOAT?"w-full":o===es.APP?"hidden":"w-2/5"} bg-leftPaneBg h-full relative`,rightPane:`transition-all duration-300 ${o===es.APP?"w-full":o===es.BOAT?"hidden":"w-3/5"} h-full bg-rightPaneBg`},[o]);return n.current?(0,t.jsx)($,{children:(0,t.jsx)(ee,{children:(0,t.jsx)(G.OcearoContextProvider,{children:(0,t.jsx)(q.WeatherContextProvider,{children:(0,t.jsx)(X.TideContextProvider,{children:(0,t.jsxs)("div",{className:"h-[100dvh] flex flex-col bg-hud-bg relative overflow-hidden",children:[(0,t.jsxs)("div",{className:"flex flex-1 min-h-0",children:[(0,t.jsx)("div",{className:k.leftPane,children:(0,t.jsx)(en,{})}),(0,t.jsx)("div",{ref:s,...v(),className:"handle w-1 bg-leftPaneBg h-full cursor-col-resize transition-all duration-200 flex items-center justify-center touch-none",children:(0,t.jsx)("div",{className:"rounded-full w-3 bg-hud-dim h-40 transition-all duration-200 hover:bg-hud-muted border border-hud"})}),(0,t.jsx)("div",{className:k.rightPane,children:(0,t.jsx)(et,{view:l})})]}),(0,t.jsx)("div",{className:"w-full h-16 min-h-16 bg-leftPaneBg border-t border-hud flex items-center justify-center shrink-0",children:(0,t.jsx)(ei,{setRightView:x,toggleAppMenu:m,toggleSettings:_})}),u&&(0,t.jsx)(er,{currentViewMode:o,toggleViewMode:g,handleSetRightView:x,toggleSettings:_,toggleFullscreen:b,setShowAppMenu:d})]})})})})})}):(0,t.jsx)("div",{className:"h-[100dvh] bg-hud-bg flex items-center justify-center",children:(0,t.jsx)("div",{className:"animate-pulse text-hud-main",children:"Loading..."})})}e.s(["VIEW_MODES",0,es,"default",()=>eo],81694)}]);