@wandelbots/wandelbots-js-react-components 6.2.0 → 6.3.0

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.
@@ -0,0 +1 @@
1
+ "use strict";const n=require("react/jsx-runtime"),j=require("three"),B=require("three-stdlib"),v=require("@react-three/drei"),m=require("react"),L=require("./externalizeComponent-OO4jcrz5.cjs"),we=require("@mui/material/styles"),_=require("@mui/material/Box"),ee=require("@mui/material/Button"),Re=require("@mui/material/Card"),te=require("@mui/material/Divider"),ne=require("@mui/material/Typography"),F=require("@react-three/fiber"),Se=require("mobx-react-lite"),ve=require("react-i18next"),E=require("./useSmoothedMotionState-VYxEIyfr.cjs"),R=require("@wandelbots/nova-js/v2"),ie=require("react-error-boundary");function _e(e){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const s=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,s.get?s:{enumerable:!0,get:()=>e[t]})}}return r.default=e,Object.freeze(r)}const b=_e(j);function Te(e){switch(e.shape_type){case"convex_hull":return new B.ConvexGeometry(e.vertices.map(t=>new b.Vector3(t[0]/1e3,t[1]/1e3,t[2]/1e3)));case"box":return new b.BoxGeometry(e.size_x/1e3,e.size_y/1e3,e.size_z/1e3);case"sphere":return new b.SphereGeometry(e.radius/1e3);case"capsule":return new b.CapsuleGeometry(e.radius/1e3,e.cylinder_height/1e3);case"cylinder":return new b.CylinderGeometry(e.radius/1e3,e.radius/1e3,e.height/1e3);case"rectangle":return new b.BoxGeometry(e.size_x/1e3,e.size_y/1e3,0);default:return console.warn(`${e.shape_type} is not supported`),new b.BufferGeometry}}function Le({name:e,collider:r,children:t}){var u,c;const s=((u=r.pose)==null?void 0:u.position)??[0,0,0],o=((c=r.pose)==null?void 0:c.orientation)??[0,0,0];return r.margin&&console.warn(`${e} margin is not supported`),n.jsx("mesh",{name:e,position:new b.Vector3(s[0],s[1],s[2]).divideScalar(1e3),rotation:new b.Euler(o[0],o[1],o[2],"XYZ"),geometry:Te(r.shape),children:t})}function Pe({name:e,colliders:r,meshChildrenProvider:t,...s}){return n.jsx("group",{name:e,...s,children:Object.entries(r).map(([o,u])=>n.jsx(Le,{name:o,collider:u,children:t(o,u)},o))})}function Ee({scene:e,meshChildrenProvider:r}){const t=e.colliders;return n.jsx("group",{children:t&&n.jsx(Pe,{meshChildrenProvider:r,colliders:t})})}function Ie(e){const r=(e==null?void 0:e.position)??[],t=(e==null?void 0:e.orientation)??[],s=new j.Vector3(t[0]??0,t[1]??0,t[2]??0),o=s.length(),u=o>0?new j.Quaternion().setFromAxisAngle(s.normalize(),o):new j.Quaternion;return new j.Matrix4().compose(new j.Vector3(r[0]??0,r[1]??0,r[2]??0).divideScalar(1e3),u,new j.Vector3(1,1,1))}function ke(e,r=null,t=[]){const s=Ie(r);return e.map((o,u)=>{const c=s.clone(),i=(o.reverse_rotation_direction?-1:1)*(t[u]??0),f=o.type==="PRISMATIC_JOINT",a=(o.theta??0)+(f?0:i),p=(o.d??0)+(f?i:0);return s.multiply(new j.Matrix4().makeRotationZ(a)).multiply(new j.Matrix4().makeTranslation((o.a??0)/1e3,0,p/1e3)).multiply(new j.Matrix4().makeRotationX(o.alpha??0)),c})}const D="#ff4b4b",re="#2fa8ff",Ae="#8a8d9e",Ce=96,Oe=.15,Ge=new b.Vector3(0,1,0),Fe=.2,Ve=2;function De(e){const{lower_limit:r,upper_limit:t}=e??{};return typeof r!="number"||typeof t!="number"||!Number.isFinite(r)||!Number.isFinite(t)||!(r<t)?null:{lower_limit:r,upper_limit:t}}function q({base:e,direction:r,size:t,color:s,opacity:o}){const u=new b.Quaternion().setFromUnitVectors(Ge,r.clone().normalize()),c=e.clone().addScaledVector(r.clone().normalize(),t/2);return n.jsxs("mesh",{position:c,quaternion:u,renderOrder:10,children:[n.jsx("coneGeometry",{args:[t*.35,t,16]}),n.jsx("meshBasicMaterial",{color:s,depthTest:!1,transparent:!0,opacity:o})]})}function U({points:e,color:r,width:t,opacity:s}){return n.jsx(v.Line,{points:e,color:r,lineWidth:t,depthTest:!1,transparent:!0,opacity:s,renderOrder:10})}function oe(e,r){const t=[...e];let s=r;for(;t.length>1;){const o=t[t.length-1],u=t[t.length-2],c=o.distanceTo(u);if(c>s)return t[t.length-1]=o.clone().lerp(u,s/c),t;s-=c,t.pop()}return t}function qe(e,r,t,s){const o=t*e,u=t*r,c=Math.abs(u-o),i=Math.max(2,Math.ceil(c/(2*Math.PI)*Ce));return Array.from({length:i+1},(f,a)=>{const p=o+(u-o)*a/i,l=c*a/i/(2*Math.PI),g=s*(1+Oe*l);return new b.Vector3(Math.cos(p)*g,Math.sin(p)*g,0)})}function Ue(e,r,t,s){const o=e.theta??0,u=e.d??0,c=e.type==="PRISMATIC_JOINT",i=e.reverse_rotation_direction?-1:1,{lower_limit:f,upper_limit:a}=r;return m.useMemo(()=>{const p=new b.Matrix4().makeRotationZ(o).multiply(new b.Matrix4().makeTranslation(0,0,c?u/1e3:0)),l=(S,T,I)=>new b.Vector3(S,T,I).applyMatrix4(p),g=new b.Vector3().applyMatrix4(p),x=l(0,0,t),h=(c?[l(t*.25,0,i*f/1e3),l(t*.25,0,i*a/1e3)]:qe(f,a,i,t*.6)).map(S=>c?S:S.applyMatrix4(p)),d=l(c?t*.25:t*.6,0,0),M=h.slice(1).reduce((S,T,I)=>S+T.distanceTo(h[I]),0),y=Math.min(s,M/3),w=oe(oe(h,y).reverse(),y).reverse();return{axisPoints:[g,x],axisTip:x,origin:g,restPoints:[g,d],range:h,limitPoints:w,rangeStart:w[0],rangeEnd:w[w.length-1]}},[o,u,c,i,t,f,a,s])}function Ne({frame:e,dh:r,limit:t,size:s,emphasis:o}){const u=o==="highlighted"?Ve:1,c=o==="dimmed"?Fe:1,i=s*.2*(o==="highlighted"?1.4:1),f=2*u,{axisPoints:a,axisTip:p,origin:l,restPoints:g,range:x,limitPoints:h,rangeStart:d,rangeEnd:M}=Ue(r,t,s,i),{position:y,quaternion:w}=m.useMemo(()=>{const S=new b.Vector3,T=new b.Quaternion;return e.decompose(S,T,new b.Vector3),{position:S,quaternion:T}},[e]);return n.jsxs("group",{position:y,quaternion:w,children:[n.jsx(U,{points:a,color:re,width:f,opacity:c}),n.jsx(q,{base:p,direction:p.clone().sub(l),size:i,color:re,opacity:c}),n.jsx(U,{points:g,color:Ae,width:1.5*u,opacity:c}),n.jsx(U,{points:h,color:D,width:f,opacity:c}),n.jsx(q,{base:d,direction:x[0].clone().sub(d),size:d.distanceTo(x[0]),color:D,opacity:c}),n.jsx(q,{base:M,direction:x[x.length-1].clone().sub(M),size:M.distanceTo(x[x.length-1]),color:D,opacity:c})]})}function Be({dhParameters:e,chainOffset:r=null,limits:t,jointPositions:s,size:o=.15,highlightedJoint:u=null}){const c=m.useMemo(()=>ke(e,r,s),[e,r,s]);return n.jsx("group",{children:c.map((i,f)=>{const a=De(t[f]);return a?n.jsx(Ne,{frame:i,dh:e[f],limit:a,size:o,emphasis:u===null?"normal":u===f?"highlighted":"dimmed"},f):null})})}function J(){return n.jsx(v.Environment,{frames:1,children:n.jsx(He,{})})}const Je=[2,0,2,0,2,0,2,0];function He({positions:e=Je}){return n.jsxs(n.Fragment,{children:[n.jsx(v.Lightformer,{intensity:5,"rotation-x":Math.PI/2,position:[0,5,-9],scale:[10,10,1]}),n.jsx("group",{rotation:[0,.5,0],children:n.jsx("group",{children:e.map((r,t)=>n.jsx(v.Lightformer,{form:"circle",intensity:5,rotation:[Math.PI/2,0,0],position:[r,4,t*4],scale:[3,1,1]},t))})}),n.jsx(v.Lightformer,{intensity:40,"rotation-y":Math.PI/2,position:[-5,1,-1],scale:[20,.1,1]}),n.jsx(v.Lightformer,{intensity:20,"rotation-y":-Math.PI,position:[-5,-2,-1],scale:[20,.1,1]}),n.jsx(v.Lightformer,{"rotation-y":Math.PI/2,position:[-5,-1,-1],scale:[20,.5,1],intensity:5}),n.jsx(v.Lightformer,{"rotation-y":-Math.PI/2,position:[10,1,0],scale:[20,1,1],intensity:10}),n.jsx(v.Lightformer,{form:"ring",color:"white",intensity:5,scale:10,position:[-15,4,-18],target:[0,0,0]})]})}const se={attach:"material",color:"#009f4d",opacity:.2,depthTest:!1,depthWrite:!1,transparent:!0,polygonOffset:!0};function We({safetyZones:e,dhParameters:r,...t}){const s=m.useMemo(()=>L.dhParametersToPlaneSize(r??[]),[r]),o=(c,i)=>{var g,x;if(!((g=i==null?void 0:i.pose)!=null&&g.position)||!((x=i==null?void 0:i.pose)!=null&&x.orientation))return null;const f=new b.Vector3(i.pose.position[0]/1e3,i.pose.position[1]/1e3,i.pose.position[2]/1e3),a=new b.Vector3(i.pose.orientation[0],i.pose.orientation[1],i.pose.orientation[2]);let p;const l=i.shape.shape_type==="plane"?{...se,side:b.DoubleSide}:{...se,side:b.FrontSide};switch(i.shape.shape_type){case"plane":p=n.jsx("planeGeometry",{args:[s,s]});break;case"sphere":{const h=(i==null?void 0:i.shape).radius/1e3;p=n.jsx("sphereGeometry",{args:[h]});break}case"capsule":{const h=(i==null?void 0:i.shape).radius/1e3,d=(i==null?void 0:i.shape).cylinder_height/1e3;p=n.jsx("capsuleGeometry",{args:[h,d]});break}case"convex_hull":{const h=(i==null?void 0:i.shape).vertices.map(M=>new b.Vector3(M[0]/1e3,M[1]/1e3,M[2]/1e3)),d=L.verticesToCoplanarity(h);if(d.isCoplanar&&d.normal){const y=new b.Vector3().addVectors(h[0],d.normal.multiplyScalar(1e-4));h.push(y)}try{p=n.jsx("primitive",{object:new B.ConvexGeometry(h),attach:"geometry"})}catch(M){return console.log("Error creating ConvexGeometry:",M),null}break}case"rectangular_capsule":{const h=i.shape,d=h.radius/1e3,M=h.sphere_center_distance_x/1e3,y=h.sphere_center_distance_y/1e3,w=d*2;p=n.jsx("primitive",{object:new B.RoundedBoxGeometry(M,y,w,2,d),attach:"geometry"});break}default:console.warn("Unsupported safety zone shape type:",i.shape.shape_type),p=null}return n.jsxs("mesh",{renderOrder:c,position:f,quaternion:L.orientationToQuaternion(a),children:[p,n.jsx("meshStandardMaterial",{...l,polygonOffsetFactor:-c})]},`safety-zone-${i.shape.shape_type}-${c}`)},u=m.useMemo(()=>Object.values(e??{}).map((c,i)=>o(i,c)),[e,s]);return n.jsx("group",{...t,children:u})}function Qe({trajectory:e,...r}){const t=(e==null?void 0:e.map(s=>{if(s.position&&s.position.length>=3){const[o,u,c]=s.position;if(Number.isFinite(o)&&Number.isFinite(u)&&Number.isFinite(c))return new b.Vector3(o/1e3,c/1e3,-u/1e3)}return null}).filter(s=>s!==null))||[];return n.jsx("group",{...r,children:t.length>0&&n.jsx(v.Line,{points:t,lineWidth:3,polygonOffset:!0,polygonOffsetFactor:10,polygonOffsetUnits:10})})}const N=new Map;async function k(e,r){if(N.has(e))return N.get(e);const t=(async()=>{var c;const s=r||"",o=new R.Nova({instanceUrl:s}),u=o.api.motionGroupModels;(c=u.axios)!=null&&c.interceptors&&u.axios.interceptors.request.use(i=>{var f;return(f=i.url)!=null&&f.includes("/glb")&&(i.responseType="blob"),i});try{const i=await o.api.motionGroupModels.getMotionGroupGlbModel(e);return URL.createObjectURL(i)}catch(i){throw console.error("Failed to fetch model:",i),i}})();return N.set(e,t),t}function ae(e){function r(t){return t.children.length===0?[t]:[t,...t.children.flatMap(s=>r(s))]}return r(e).filter(t=>ue(t))}function ce(e){return e.name.endsWith("_FLG")}function ue(e){return/_J[0-9]+$/.test(e.name)}function $e(e,r){let t;function s(o){if(ce(o)){if(t)throw Error(`Found multiple flange groups in robot model ${r}; first ${t.name} then ${o.name}. Only one _FLG group is allowed.`);t=o}ue(o),o.children.map(s)}if(s(e.scene),!t)throw Error(`No flange group found in robot model ${r}. Flange must be identified with a name ending in _FLG.`);return{gltf:e}}const le=m.forwardRef(function({rapidlyChangingMotionState:r,dhParameters:t,chainOffsetPosition:s,chainOffsetQuaternion:o,onRotationChanged:u,children:c},i){const f=m.useRef(null),a=m.useRef([]),p=m.useRef(r.joint_position.filter(y=>y!==void 0)),{invalidate:l}=F.useThree(),g=m.useRef(r);g.current=r;function x(y){f.current=y,y&&h()}function h(){f.current&&(a.current=ae(f.current),d(),l())}m.useImperativeHandle(i,()=>({recollectJoints:h}));function d(){const y=p.current;if(u)u(a.current,y);else for(const[w,S]of a.current.entries()){const T=t[w],I=T.theta||0,V=T.reverse_rotation_direction?-1:1;S.rotation.y=V*(y[w]||0)+I}}function M(y){p.current=y.joint_position.filter(w=>w!==void 0),d(),l()}return E.useAutorun(()=>{M(g.current)}),m.useEffect(()=>{M(r)},[r]),n.jsx("group",{ref:x,position:s,quaternion:o,children:c})}),Ye="line",Xe="mesh";function Ze({rapidlyChangingMotionState:e,dhParameters:r,...t}){const s=new j.Matrix4,o=m.useRef([]),u=m.useRef([]);m.useEffect(()=>{o.current=new Array(r.length).fill(null),u.current=new Array(r.length).fill(null)},[r.length]);function c(a,p){const l=new j.Vector3,g=new j.Quaternion,x=new j.Vector3;s.decompose(l,g,x);const h=l.clone(),d=new j.Matrix4().makeRotationY(a.theta+p*(a.reverse_rotation_direction?-1:1)).multiply(new j.Matrix4().makeTranslation(0,a.d/1e3,0)).multiply(new j.Matrix4().makeTranslation(a.a/1e3,0,0)).multiply(new j.Matrix4().makeRotationX(a.alpha));return s.multiply(d),s.decompose(l,g,x),{a:h,b:l}}function i(a,p,l,g){if(!r)return;const x=r[a];if(!x)return;const{a:h,b:d}=c(x,g);p.geometry.setPositions([h.toArray(),d.toArray()].flat()),l.position.set(d.x,d.y,d.z)}function f(a,p){s.identity();for(let l=0;l<Math.min(a.length,p.length);l++){const g=o.current[l],x=u.current[l];g&&x&&i(l,g,x,p[l])}}return n.jsx(le,{rapidlyChangingMotionState:e,dhParameters:r,onRotationChanged:f,children:n.jsxs("group",{...t,name:"Scene",children:[n.jsxs("mesh",{children:[n.jsx("sphereGeometry",{args:[.01,32,32]}),n.jsx("meshStandardMaterial",{color:"black",depthTest:!0})]}),r==null?void 0:r.map((a,p)=>{const{a:l,b:g}=c(a,e.joint_position[p]??0),x=`dhrobot_J0${p}`;return n.jsxs("group",{name:x,children:[n.jsx(v.Line,{ref:h=>{o.current[p]=h},name:Ye,points:[l,g],color:"white",lineWidth:5}),n.jsxs("mesh",{ref:h=>{u.current[p]=h},name:Xe,position:g,children:[n.jsx("sphereGeometry",{args:[.01,32,32]}),n.jsx("meshStandardMaterial",{color:"black",depthTest:!0})]},`mesh_${p}`)]},x)})]})})}const Ke=console.warn;function fe(){return m.useEffect(()=>{console.warn=e=>{e!=="Cannot call the manual advancement of rafz whilst frameLoop is not set as demand"&&Ke(e)}},[]),null}function ze(e){return e.type==="Mesh"}function et({url:e,flangeRef:r,postModelRender:t,...s}){const o=v.useGLTF(e),c=$e(o,"robot.glb").gltf,i=m.useCallback(a=>{a&&t&&t()},[t]);function f(a){try{return ze(a)?a.geometry?n.jsx("mesh",{name:a.name,geometry:a.geometry,material:a.material,position:a.position,rotation:a.rotation},a.uuid):n.jsx("group",{name:a.name,position:a.position,rotation:a.rotation},a.uuid):n.jsx("group",{name:a.name,position:a.position,rotation:a.rotation,ref:ce(a)?r:void 0,children:a.children.map(f)},a.uuid)}catch(p){return console.warn("Error rendering node",a.name,p),null}}return n.jsx("group",{...s,dispose:null,ref:i,children:f(c.scene)})}function de({modelURL:e,flangeRef:r,postModelRender:t,...s}){const[o,u]=m.useState(null);return m.useEffect(()=>{let c=!1;return(async()=>{try{const f=typeof e=="string"?e:await e;c||u(a=>a===f?a:f)}catch(f){console.error("Failed to resolve model URL:",f)}})(),()=>{c=!0}},[e]),o?n.jsx(et,{url:o,flangeRef:r,postModelRender:t,...s}):null}const pe=(e,r)=>{e.userData.isGhost||(e.traverse(t=>{if(t instanceof b.Mesh){t.material instanceof b.Material&&(t.material.colorWrite=!1);const s=t.clone(),o=t.clone();s.material=new b.MeshStandardMaterial({depthTest:!0,depthWrite:!0,colorWrite:!1,polygonOffset:!0,polygonOffsetFactor:-1,side:b.DoubleSide}),s.userData.isGhost=!0,o.material=new b.MeshStandardMaterial({color:r,opacity:.3,depthTest:!0,depthWrite:!1,transparent:!0,polygonOffset:!0,polygonOffsetFactor:-2,side:b.DoubleSide}),o.userData.isGhost=!0,t.parent&&(t.parent.add(s),t.parent.add(o))}}),e.userData.isGhost=!0)},he=e=>{if(!e.userData.isGhost)return;const r=[];e.traverse(t=>{var s;t instanceof b.Mesh&&((s=t.userData)!=null&&s.isGhost?r.push(t):t.material instanceof b.Material&&(t.material.colorWrite=!0))}),r.forEach(t=>{t.parent&&t.parent.remove(t)}),e.userData.isGhost=!1},W=L.externalizeComponent(({rapidlyChangingMotionState:e,modelFromController:r,dhParameters:t,chainOffsetPosition:s,chainOffsetQuaternion:o,getModel:u=k,flangeRef:c,postModelRender:i,transparentColor:f,instanceUrl:a,...p})=>{const[l,g]=m.useState(null),x=m.useRef(null),h=m.useCallback(w=>{g(w)},[]),d=m.useCallback(()=>{var w;(w=x.current)==null||w.recollectJoints(),i==null||i()},[i]);m.useEffect(()=>{l&&(f?pe(l,f):he(l))},[l,f]);const M=m.useMemo(()=>{const w=u(r,a);if(!w)throw new Error(`No model found for robot "${r}". Ensure the model is available or provide a custom getModel function.`);return w},[r,a,u]),y=n.jsx(Ze,{rapidlyChangingMotionState:e,dhParameters:t,...p});return n.jsxs(ie.ErrorBoundary,{fallback:y,onError:w=>{console.warn(w)},children:[n.jsx(m.Suspense,{fallback:y,children:n.jsx("group",{ref:h,children:n.jsx(le,{ref:x,rapidlyChangingMotionState:e,dhParameters:t,chainOffsetPosition:s,chainOffsetQuaternion:o,children:n.jsx(de,{modelURL:M,postModelRender:d,flangeRef:c,...p})})})}),n.jsx(fe,{})]})}),me=L.externalizeComponent(({rapidlyChangingMotionState:e,...r})=>{const t=E.useSmoothedMotionState(e);return n.jsx(W,{rapidlyChangingMotionState:t,...r})});function xe({connectedMotionGroup:e,getModel:r=k,flangeRef:t,transparentColor:s,postModelRender:o,...u}){if(!e.dhParameters)return null;const c=e.mountingPosition,i=e.mountingQuaternion;return n.jsx(me,{rapidlyChangingMotionState:e.rapidlyChangingMotionState,modelFromController:e.modelFromController||"",dhParameters:e.dhParameters,getModel:r,flangeRef:t,transparentColor:s,postModelRender:o,chainOffsetPosition:c,chainOffsetQuaternion:i,...u})}const tt=L.externalizeComponent(Se.observer(({robotName:e,programState:r,safetyState:t,operationMode:s,driveToHomeEnabled:o=!1,onDriveToHomePress:u,onDriveToHomeRelease:c,connectedMotionGroup:i,robotComponent:f=xe,customContentComponent:a,className:p})=>{var X;const l=we.useTheme(),{t:g}=ve.useTranslation(),[x,h]=m.useState(!1),d=m.useRef(null),M=m.useRef(null),[y,w]=m.useState(!1),[S,T]=m.useState({width:400,height:600}),[I,V]=m.useState(0);m.useEffect(()=>{const G=()=>{if(M.current){const{offsetWidth:K,offsetHeight:z}=M.current;w(K>z),T({width:K,height:z})}};G();const Z=new ResizeObserver(G);return M.current&&Z.observe(M.current),()=>{Z.disconnect()}},[]);const $=m.useCallback(()=>{V(G=>G+1)},[]),A=m.useCallback(()=>{!o||!u||(h(!0),u())},[o,u]),C=m.useCallback(()=>{!o||!c||(h(!1),c())},[o,c]),Y=m.useCallback(()=>{x&&c&&(h(!1),c())},[x,c]),P=y?S.width<350:S.height<200,O=y?S.height<310:S.height<450;return n.jsx(Re,{ref:M,className:p,sx:{width:"100%",height:"100%",display:"flex",flexDirection:y?"row":"column",position:"relative",overflow:"hidden",minWidth:{xs:180,sm:220,md:250},minHeight:y?{xs:200,sm:240,md:260}:{xs:150,sm:180,md:220},border:`1px solid ${l.palette.divider}`,borderRadius:"18px",boxShadow:"none",backgroundColor:((X=l.palette.backgroundPaperElevation)==null?void 0:X[8])||"#292B3F",backgroundImage:"none"},children:y?n.jsxs(n.Fragment,{children:[n.jsx(_,{sx:{flex:"0 0 50%",position:"relative",height:"100%",minHeight:"100%",maxHeight:"100%",borderRadius:1,m:{xs:1.5,sm:2,md:3},mr:{xs:.75,sm:1,md:1.5},overflow:"hidden",display:P?"none":"block"},children:!P&&n.jsxs(F.Canvas,{orthographic:!0,camera:{position:[3,2,3],zoom:1},shadows:!0,frameloop:"demand",style:{borderRadius:l.shape.borderRadius,width:"100%",height:"100%",background:"transparent",position:"absolute",top:0,left:0},dpr:[1,2],gl:{alpha:!0,antialias:!0},children:[n.jsx(J,{}),n.jsx(v.Bounds,{fit:!0,observe:!0,margin:1,maxDuration:1,children:n.jsx(f,{connectedMotionGroup:i,postModelRender:$})})]})}),n.jsxs(_,{sx:{flex:"1",display:"flex",flexDirection:"column",justifyContent:"flex-start",width:P?"100%":"50%"},children:[n.jsxs(_,{sx:{p:{xs:1.5,sm:2,md:3},pb:{xs:1,sm:1.5,md:2},textAlign:"left"},children:[n.jsx(ne,{variant:"h6",component:"h2",sx:{mb:1},children:e}),n.jsx(E.ProgramStateIndicator,{programState:r,safetyState:t,operationMode:s})]}),n.jsxs(_,{sx:{p:{xs:1.5,sm:2,md:3},pt:0,flex:"1",display:"flex",flexDirection:"column",justifyContent:"space-between"},children:[!O&&a&&n.jsxs(_,{children:[n.jsx(a,{}),n.jsx(te,{sx:{mt:1,mb:0,borderColor:l.palette.divider,opacity:.5}})]}),n.jsx(_,{sx:{mt:!O&&a?"auto":0},children:n.jsx(_,{sx:{display:"flex",justifyContent:"flex-start",mt:{xs:1,sm:1.5,md:2},mb:{xs:.5,sm:.75,md:1}},children:n.jsx(ee,{ref:d,variant:"contained",color:"secondary",size:"small",disabled:!o,onMouseDown:A,onMouseUp:C,onMouseLeave:Y,onTouchStart:A,onTouchEnd:C,sx:{textTransform:"none",px:1.5,py:.5},children:g("RobotCard.DriveToHome.bt")})})})]})]})]}):n.jsx(n.Fragment,{children:n.jsxs(_,{sx:{p:3,height:"100%",display:"flex",flexDirection:"column"},children:[n.jsxs(_,{children:[n.jsx(ne,{variant:"h6",component:"h2",sx:{mb:1},children:e}),n.jsx(E.ProgramStateIndicator,{programState:r,safetyState:t,operationMode:s})]}),n.jsx(_,{sx:{flex:P?0:1,position:"relative",minHeight:P?0:{xs:120,sm:150,md:200},height:P?0:"auto",borderRadius:1,overflow:"hidden",display:P?"none":"block"},children:!P&&n.jsxs(F.Canvas,{orthographic:!0,camera:{position:[3,2,3],zoom:1},shadows:!0,frameloop:"demand",style:{borderRadius:l.shape.borderRadius,width:"100%",height:"100%",background:"transparent",position:"absolute"},dpr:[1,2],gl:{alpha:!0,antialias:!0},children:[n.jsx(J,{}),n.jsx(v.Bounds,{fit:!0,clip:!0,observe:!0,margin:1,maxDuration:1,children:n.jsx(f,{connectedMotionGroup:i,postModelRender:$})})]})}),n.jsxs(_,{children:[!O&&a&&n.jsxs(n.Fragment,{children:[n.jsx(a,{}),n.jsx(te,{sx:{mt:1,mb:0,borderColor:l.palette.divider,opacity:.5}})]}),n.jsx(_,{sx:{display:"flex",justifyContent:"flex-start",mt:!O&&a?{xs:1,sm:2,md:5}:{xs:.5,sm:1,md:2},mb:{xs:.5,sm:.75,md:1}},children:n.jsx(ee,{ref:d,variant:"contained",color:"secondary",size:"small",disabled:!o,onMouseDown:A,onMouseUp:C,onMouseLeave:Y,onTouchStart:A,onTouchEnd:C,sx:{textTransform:"none",px:1.5,py:.5},children:g("RobotCard.DriveToHome.bt")})})]})]})})})})),nt=Array(6).fill(2*Math.PI);function ge({rapidlyChangingMotionState:e,dhParameters:r,chainOffsetPosition:t,chainOffsetQuaternion:s,onTranslationChanged:o,children:u}){const c=m.useRef([]),i=m.useRef(e.joint_position.filter(x=>x!==void 0)),{invalidate:f}=F.useThree(),a=m.useRef(e);a.current=e;function p(x){x&&(c.current=ae(x),l(),f())}function l(){const x=i.current;if(o)o(c.current,x);else for(const[h,d]of c.current.entries()){const y=r[h].reverse_rotation_direction?-1:1;d.position.y=y*(x[h]||0)/1e3}}function g(x){i.current=x.joint_position.filter(h=>h!==void 0),l(),f()}return E.useAutorun(()=>{g(a.current)}),n.jsx("group",{ref:p,position:t,quaternion:s,children:u})}function ye({rapidlyChangingMotionState:e,dhParameters:r,...t}){const s=new j.Matrix4,o=m.useRef(null),u=m.useRef(null);function c(a){const p=new j.Matrix4;for(let h=0;h<r.length;h++){const d=r[h],M=a[h]??0,y=new j.Matrix4().makeRotationY(d.theta).multiply(new j.Matrix4().makeTranslation(d.a/1e3,(d.d+M*(d.reverse_rotation_direction?-1:1))/1e3,0)).multiply(new j.Matrix4().makeRotationX(d.alpha));p.multiply(y)}const l=new j.Vector3,g=new j.Quaternion,x=new j.Vector3;return p.decompose(l,g,x),l}const i=c(e.joint_position);function f(a,p){s.identity();let l=new j.Vector3;for(let d=0;d<r.length;d++){const M=p[d]??0,y=r[d],w=new j.Matrix4().makeRotationY(y.theta).multiply(new j.Matrix4().makeTranslation(y.a/1e3,(y.d+M*(y.reverse_rotation_direction?-1:1))/1e3,0)).multiply(new j.Matrix4().makeRotationX(y.alpha));s.multiply(w)}const g=new j.Vector3,x=new j.Quaternion,h=new j.Vector3;if(s.decompose(g,x,h),l=g,o.current&&o.current.position.set(l.x,l.y,l.z),u.current){const d=u.current.geometry;d!=null&&d.setPositions&&d.setPositions([0,0,0,l.x,l.y,l.z])}}return n.jsx(ge,{rapidlyChangingMotionState:e,dhParameters:r,onTranslationChanged:f,children:n.jsxs("group",{...t,name:"Scene",children:[n.jsxs("mesh",{name:"Base",position:[0,0,0],children:[n.jsx("sphereGeometry",{args:[.02,32,32]}),n.jsx("meshStandardMaterial",{color:"green",depthTest:!0})]}),n.jsx(v.Line,{ref:u,points:[new j.Vector3(0,0,0),i],color:"White",lineWidth:5}),n.jsxs("mesh",{ref:o,name:"TCP",position:i,children:[n.jsx("sphereGeometry",{args:[.025,32,32]}),n.jsx("meshStandardMaterial",{color:"red",depthTest:!0})]})]})})}const Q=L.externalizeComponent(({rapidlyChangingMotionState:e,modelFromController:r,dhParameters:t,chainOffsetPosition:s,chainOffsetQuaternion:o,getModel:u=k,flangeRef:c,postModelRender:i,transparentColor:f,instanceUrl:a,...p})=>{const[l,g]=m.useState(null),x=m.useCallback(d=>{g(d)},[]);m.useEffect(()=>{l&&(f?pe(l,f):he(l))},[l,f]);const h=n.jsx(ye,{rapidlyChangingMotionState:e,dhParameters:t,...p});return n.jsxs(ie.ErrorBoundary,{fallback:h,onError:d=>{console.warn(d)},children:[n.jsx(m.Suspense,{fallback:h,children:n.jsx("group",{ref:x,children:n.jsx(ge,{rapidlyChangingMotionState:e,dhParameters:t,chainOffsetPosition:s,chainOffsetQuaternion:o,children:n.jsx(de,{modelURL:(()=>{const d=u(r,a);if(!d){const M=new Blob([],{type:"model/gltf-binary"}),y=new File([M],`${r}.glb`,{type:"model/gltf-binary"});return Promise.resolve(URL.createObjectURL(y))}return d})(),postModelRender:i,flangeRef:c,...p})})})}),n.jsx(fe,{})]})}),je=L.externalizeComponent(({rapidlyChangingMotionState:e,...r})=>{const t=E.useSmoothedMotionState(e);return n.jsx(Q,{rapidlyChangingMotionState:t,...r})});function rt({connectedMotionGroup:e,getModel:r=k,flangeRef:t,transparentColor:s,postModelRender:o,...u}){if(!e.dhParameters)return null;const c=e.mountingPosition,i=e.mountingQuaternion,f=e.modelFromController||"";return f&&r(f)?n.jsx(je,{rapidlyChangingMotionState:e.rapidlyChangingMotionState,modelFromController:f,dhParameters:e.dhParameters,getModel:r,flangeRef:t,transparentColor:s,postModelRender:o,chainOffsetPosition:c,chainOffsetQuaternion:i,...u}):n.jsx(ye,{rapidlyChangingMotionState:e.rapidlyChangingMotionState,dhParameters:e.dhParameters,chainOffsetPosition:c,chainOffsetQuaternion:i,...u})}const H={[R.Manufacturer.Abb]:[0,0,0,0,Math.PI/2,0,0],[R.Manufacturer.Fanuc]:[0,0,0,0,-Math.PI/2,0,0],[R.Manufacturer.Yaskawa]:[0,0,0,0,-Math.PI/2,0,0],[R.Manufacturer.Kuka]:[0,-Math.PI/2,Math.PI/2,0,Math.PI/2,0,0],[R.Manufacturer.Universalrobots]:[0,-Math.PI/2,-Math.PI/2,-Math.PI/2,Math.PI/2,-Math.PI/2,0],[R.Manufacturer.Staubli]:[0,-Math.PI/2,Math.PI/2,0,0,0,0]};function be(e){const[r]=e.split("_");switch(r){case"ABB":return R.Manufacturer.Abb;case"FANUC":return R.Manufacturer.Fanuc;case"YASKAWA":return R.Manufacturer.Yaskawa;case"KUKA":return R.Manufacturer.Kuka;case"UniversalRobots":return R.Manufacturer.Universalrobots;case"STAUBLI":return R.Manufacturer.Staubli;default:return null}}function ot(e,r){const t=be(e);return t&&t in H?H[t]:r||null}const Me=L.externalizeComponent(e=>{const{inverseSolver:r,dhParameters:t,...s}=e,[o,u]=m.useState(R.JointTypeEnum.RevoluteJoint);m.useEffect(()=>{t.length&&u(t[0].type??R.JointTypeEnum.RevoluteJoint)},[t]);const c=m.useMemo(()=>r===null&&o===R.JointTypeEnum.RevoluteJoint,[r,o]),i=m.useMemo(()=>r===null&&o===R.JointTypeEnum.PrismaticJoint,[r,o]);return m.useMemo(()=>!!r,[r])||c?n.jsx(W,{dhParameters:t,...s}):i?n.jsx(Q,{dhParameters:t,...s}):null}),st=L.externalizeComponent(e=>{const r=E.useSmoothedMotionState(e.rapidlyChangingMotionState);return n.jsx(Me,{...e,rapidlyChangingMotionState:r})});exports.CollisionSceneRenderer=Ee;exports.JointLimitGizmo=Be;exports.LinearAxis=rt;exports.MANUFACTURER_HOME_CONFIGS=H;exports.MotionGroupVisualizer=st;exports.MotionGroupVisualizerExact=Me;exports.PresetEnvironment=J;exports.Robot=xe;exports.RobotCard=tt;exports.SafetyZonesRenderer=We;exports.SupportedLinearAxis=je;exports.SupportedLinearAxisExact=Q;exports.SupportedRobot=me;exports.SupportedRobotExact=W;exports.TrajectoryRenderer=Qe;exports.defaultAxisConfig=nt;exports.defaultGetModel=k;exports.extractManufacturer=be;exports.getDefaultHomeConfig=ot;
@@ -0,0 +1,34 @@
1
+ import { type GizmoChainOffset, type GizmoDhParameter, type GizmoJointLimit } from "./jointLimitFrames";
2
+ export type { GizmoChainOffset, GizmoDhParameter, GizmoJointLimit, } from "./jointLimitFrames";
3
+ export type JointLimitGizmoProps = {
4
+ dhParameters: GizmoDhParameter[];
5
+ chainOffset?: GizmoChainOffset | null;
6
+ limits: (GizmoJointLimit | null)[];
7
+ /** Radians for revolute joints; millimetres for prismatic joints. */
8
+ jointPositions?: number[];
9
+ size?: number;
10
+ highlightedJoint?: number | null;
11
+ };
12
+ /**
13
+ * Draws joint axes and position ranges in NOVA's Z-up frame (joint axis =
14
+ * local Z), in metres.
15
+ *
16
+ * This library's robot visualizers ({@link SupportedRobot}, {@link Robot},
17
+ * the DH fallback renderer) place robots in three.js's Y-up world and rotate
18
+ * each joint about local Y. To overlay this gizmo on one of them, wrap it in
19
+ * a group that rotates Z onto Y, e.g.:
20
+ *
21
+ * ```tsx
22
+ * <group rotation={[-Math.PI / 2, 0, 0]}>
23
+ * <JointLimitGizmo dhParameters={dhParameters} limits={limits} jointPositions={jointPositions} />
24
+ * </group>
25
+ * ```
26
+ *
27
+ * Use the same `dhParameters` and displayed `jointPositions` as the robot.
28
+ * The example above assumes identity mounting. For a mounted robot, wrap
29
+ * this example in an outer group using the same mounting position (in metres)
30
+ * and quaternion passed to the robot, and leave the gizmo's `chainOffset` null.
31
+ * Passing that mounting pose as `chainOffset` here would also rotate it during
32
+ * the Z-to-Y conversion.
33
+ */
34
+ export declare function JointLimitGizmo({ dhParameters, chainOffset, limits, jointPositions, size, highlightedJoint, }: JointLimitGizmoProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,8 @@
1
+ import type { DHParameter, LimitRange, Pose } from "@wandelbots/nova-js/v2";
2
+ import { Matrix4 } from "three";
3
+ export type GizmoDhParameter = DHParameter;
4
+ export type GizmoChainOffset = Pose;
5
+ /** Radians for revolute joints; millimetres for prismatic joints. */
6
+ export type GizmoJointLimit = LimitRange;
7
+ /** Pre-step joint frames in NOVA's Z-up coordinates, with lengths in metres. */
8
+ export declare function jointFrames(dhParameters: GizmoDhParameter[], chainOffset?: GizmoChainOffset | null, jointPositions?: number[]): Matrix4[];
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("./chunks/MotionGroupVisualizer-rrhU4sYi.cjs"),t=require("./chunks/useSmoothedMotionState-VYxEIyfr.cjs"),e=require("./chunks/theming-DfSy4-Ic.cjs"),r=require("./chunks/externalizeComponent-OO4jcrz5.cjs"),a=require("./chunks/SafetyBar-DPrv_OQA.cjs");exports.CollisionSceneRenderer=o.CollisionSceneRenderer;exports.LinearAxis=o.LinearAxis;exports.MANUFACTURER_HOME_CONFIGS=o.MANUFACTURER_HOME_CONFIGS;exports.MotionGroupVisualizer=o.MotionGroupVisualizer;exports.MotionGroupVisualizerExact=o.MotionGroupVisualizerExact;exports.PresetEnvironment=o.PresetEnvironment;exports.Robot=o.Robot;exports.RobotCard=o.RobotCard;exports.SafetyZonesRenderer=o.SafetyZonesRenderer;exports.SupportedLinearAxis=o.SupportedLinearAxis;exports.SupportedLinearAxisExact=o.SupportedLinearAxisExact;exports.SupportedRobot=o.SupportedRobot;exports.SupportedRobotExact=o.SupportedRobotExact;exports.TrajectoryRenderer=o.TrajectoryRenderer;exports.defaultAxisConfig=o.defaultAxisConfig;exports.defaultGetModel=o.defaultGetModel;exports.extractManufacturer=o.extractManufacturer;exports.getDefaultHomeConfig=o.getDefaultHomeConfig;exports.ProgramControl=t.ProgramControl;exports.ProgramState=t.ProgramState;exports.ProgramStateIndicator=t.ProgramStateIndicator;exports.ValueInterpolator=t.ValueInterpolator;exports.useAnimationFrame=t.useAnimationFrame;exports.useAutorun=t.useAutorun;exports.useInterpolation=t.useInterpolation;exports.useMounted=t.useMounted;exports.useReaction=t.useReaction;exports.useSmoothedMotionState=t.useSmoothedMotionState;exports.AdornedTextField=e.AdornedTextField;exports.AppHeader=e.AppHeader;exports.ConnectedMotionGroup=e.ConnectedMotionGroup;exports.CycleTimer=e.CycleTimer;exports.JoggerConnection=e.JoggerConnection;exports.JoggingCartesianAxisControl=e.JoggingCartesianAxisControl;exports.JoggingJointValueControl=e.JoggingJointValueControl;exports.JoggingPanel=e.JoggingPanel;exports.JoggingStore=e.JoggingStore;exports.LoadingCover=e.LoadingCover;exports.LoadingErrorMessage=e.LoadingErrorMessage;exports.LogPanel=e.LogPanel;exports.LogStore=e.LogStore;exports.LogViewer=e.LogViewer;exports.MotionStreamConnection=e.MotionStreamConnection;exports.NoMotionGroupModal=e.NoMotionGroupModal;exports.PoseCartesianValues=e.PoseCartesianValues;exports.PoseJointValues=e.PoseJointValues;exports.RobotListItem=e.RobotListItem;exports.RobotSetupReadinessIndicator=e.RobotSetupReadinessIndicator;exports.RobotSetupReadinessState=e.RobotSetupReadinessState;exports.SelectableFab=e.SelectableFab;exports.TabBar=e.TabBar;exports.Timer=e.Timer;exports.VelocitySlider=e.VelocitySlider;exports.VelocitySliderLabel=e.VelocitySliderLabel;exports.WandelbotsDataGrid=e.WandelbotsDataGrid;exports.createDebugMessage=e.createDebugMessage;exports.createErrorMessage=e.createErrorMessage;exports.createInfoMessage=e.createInfoMessage;exports.createLogMessage=e.createLogMessage;exports.createNovaMuiTheme=e.createNovaMuiTheme;exports.createNovaTheme=e.createNovaTheme;exports.createWarningMessage=e.createWarningMessage;exports.jointValuesEqual=e.jointValuesEqual;exports.poseEqual=e.poseEqual;exports.tcpMotionEqual=e.tcpMotionEqual;exports.unwrapRotationVector=e.unwrapRotationVector;exports.i18n=r.i18n;exports.SafetyBar=a.SafetyBar;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("./chunks/MotionGroupVisualizer-eD7yFEcF.cjs"),t=require("./chunks/useSmoothedMotionState-VYxEIyfr.cjs"),e=require("./chunks/theming-DfSy4-Ic.cjs"),r=require("./chunks/externalizeComponent-OO4jcrz5.cjs"),a=require("./chunks/SafetyBar-DPrv_OQA.cjs");exports.CollisionSceneRenderer=o.CollisionSceneRenderer;exports.JointLimitGizmo=o.JointLimitGizmo;exports.LinearAxis=o.LinearAxis;exports.MANUFACTURER_HOME_CONFIGS=o.MANUFACTURER_HOME_CONFIGS;exports.MotionGroupVisualizer=o.MotionGroupVisualizer;exports.MotionGroupVisualizerExact=o.MotionGroupVisualizerExact;exports.PresetEnvironment=o.PresetEnvironment;exports.Robot=o.Robot;exports.RobotCard=o.RobotCard;exports.SafetyZonesRenderer=o.SafetyZonesRenderer;exports.SupportedLinearAxis=o.SupportedLinearAxis;exports.SupportedLinearAxisExact=o.SupportedLinearAxisExact;exports.SupportedRobot=o.SupportedRobot;exports.SupportedRobotExact=o.SupportedRobotExact;exports.TrajectoryRenderer=o.TrajectoryRenderer;exports.defaultAxisConfig=o.defaultAxisConfig;exports.defaultGetModel=o.defaultGetModel;exports.extractManufacturer=o.extractManufacturer;exports.getDefaultHomeConfig=o.getDefaultHomeConfig;exports.ProgramControl=t.ProgramControl;exports.ProgramState=t.ProgramState;exports.ProgramStateIndicator=t.ProgramStateIndicator;exports.ValueInterpolator=t.ValueInterpolator;exports.useAnimationFrame=t.useAnimationFrame;exports.useAutorun=t.useAutorun;exports.useInterpolation=t.useInterpolation;exports.useMounted=t.useMounted;exports.useReaction=t.useReaction;exports.useSmoothedMotionState=t.useSmoothedMotionState;exports.AdornedTextField=e.AdornedTextField;exports.AppHeader=e.AppHeader;exports.ConnectedMotionGroup=e.ConnectedMotionGroup;exports.CycleTimer=e.CycleTimer;exports.JoggerConnection=e.JoggerConnection;exports.JoggingCartesianAxisControl=e.JoggingCartesianAxisControl;exports.JoggingJointValueControl=e.JoggingJointValueControl;exports.JoggingPanel=e.JoggingPanel;exports.JoggingStore=e.JoggingStore;exports.LoadingCover=e.LoadingCover;exports.LoadingErrorMessage=e.LoadingErrorMessage;exports.LogPanel=e.LogPanel;exports.LogStore=e.LogStore;exports.LogViewer=e.LogViewer;exports.MotionStreamConnection=e.MotionStreamConnection;exports.NoMotionGroupModal=e.NoMotionGroupModal;exports.PoseCartesianValues=e.PoseCartesianValues;exports.PoseJointValues=e.PoseJointValues;exports.RobotListItem=e.RobotListItem;exports.RobotSetupReadinessIndicator=e.RobotSetupReadinessIndicator;exports.RobotSetupReadinessState=e.RobotSetupReadinessState;exports.SelectableFab=e.SelectableFab;exports.TabBar=e.TabBar;exports.Timer=e.Timer;exports.VelocitySlider=e.VelocitySlider;exports.VelocitySliderLabel=e.VelocitySliderLabel;exports.WandelbotsDataGrid=e.WandelbotsDataGrid;exports.createDebugMessage=e.createDebugMessage;exports.createErrorMessage=e.createErrorMessage;exports.createInfoMessage=e.createInfoMessage;exports.createLogMessage=e.createLogMessage;exports.createNovaMuiTheme=e.createNovaMuiTheme;exports.createNovaTheme=e.createNovaTheme;exports.createWarningMessage=e.createWarningMessage;exports.jointValuesEqual=e.jointValuesEqual;exports.poseEqual=e.poseEqual;exports.tcpMotionEqual=e.tcpMotionEqual;exports.unwrapRotationVector=e.unwrapRotationVector;exports.i18n=r.i18n;exports.SafetyBar=a.SafetyBar;
package/dist/index.js CHANGED
@@ -1,75 +1,76 @@
1
- import { C as o, L as s, M as t, a as r, b as n, P as i, R as u, c as g, S as l, d, e as c, f as p, g as S, T as M, h as m, i as C, j as R, k as f } from "./chunks/MotionGroupVisualizer-CEiRJk_l.js";
2
- import { P as x, a as L, b as V, V as A, u as E, c as P, d as T, e as J, f as y, g as G } from "./chunks/useSmoothedMotionState-DyDgSVYX.js";
3
- import { A as N, a as h, C as v, b as F, J as j, c as q, d as w, e as z, f as D, L as H, g as W, h as k, i as B, j as O, M as U, N as _, P as Z, k as K, R as Q, l as X, m as Y, S as $, T as aa, n as ea, V as oa, o as sa, W as ta, p as ra, q as na, r as ia, s as ua, t as ga, u as la, v as da, w as ca, x as pa, y as Sa, z as Ma } from "./chunks/theming-mF9Rt8SS.js";
4
- import { i as Ca } from "./chunks/externalizeComponent-EDymnaGR.js";
5
- import { S as fa } from "./chunks/SafetyBar-Cy9DiXp9.js";
1
+ import { C as o, J as s, L as t, M as r, a as n, b as i, P as u, R as g, c as l, S as d, d as c, e as p, f as S, g as m, T as M, h as C, i as R, j as f, k as b } from "./chunks/MotionGroupVisualizer-DshWR1wY.js";
2
+ import { P as L, a as V, b as A, V as E, u as P, c as J, d as T, e as G, f as y, g as I } from "./chunks/useSmoothedMotionState-DyDgSVYX.js";
3
+ import { A as h, a as v, C as F, b as j, J as q, c as z, d as w, e as D, f as H, L as W, g as k, h as B, i as O, j as U, M as _, N as Z, P as K, k as Q, R as X, l as Y, m as $, S as aa, T as ea, n as oa, V as sa, o as ta, W as ra, p as na, q as ia, r as ua, s as ga, t as la, u as da, v as ca, w as pa, x as Sa, y as ma, z as Ma } from "./chunks/theming-mF9Rt8SS.js";
4
+ import { i as Ra } from "./chunks/externalizeComponent-EDymnaGR.js";
5
+ import { S as ba } from "./chunks/SafetyBar-Cy9DiXp9.js";
6
6
  export {
7
- N as AdornedTextField,
8
- h as AppHeader,
7
+ h as AdornedTextField,
8
+ v as AppHeader,
9
9
  o as CollisionSceneRenderer,
10
- v as ConnectedMotionGroup,
11
- F as CycleTimer,
12
- j as JoggerConnection,
13
- q as JoggingCartesianAxisControl,
10
+ F as ConnectedMotionGroup,
11
+ j as CycleTimer,
12
+ q as JoggerConnection,
13
+ z as JoggingCartesianAxisControl,
14
14
  w as JoggingJointValueControl,
15
- z as JoggingPanel,
16
- D as JoggingStore,
17
- s as LinearAxis,
18
- H as LoadingCover,
19
- W as LoadingErrorMessage,
20
- k as LogPanel,
21
- B as LogStore,
22
- O as LogViewer,
23
- t as MANUFACTURER_HOME_CONFIGS,
24
- r as MotionGroupVisualizer,
25
- n as MotionGroupVisualizerExact,
26
- U as MotionStreamConnection,
27
- _ as NoMotionGroupModal,
28
- Z as PoseCartesianValues,
29
- K as PoseJointValues,
30
- i as PresetEnvironment,
31
- x as ProgramControl,
32
- L as ProgramState,
33
- V as ProgramStateIndicator,
34
- u as Robot,
35
- g as RobotCard,
36
- Q as RobotListItem,
37
- X as RobotSetupReadinessIndicator,
38
- Y as RobotSetupReadinessState,
39
- fa as SafetyBar,
40
- l as SafetyZonesRenderer,
41
- $ as SelectableFab,
42
- d as SupportedLinearAxis,
43
- c as SupportedLinearAxisExact,
44
- p as SupportedRobot,
45
- S as SupportedRobotExact,
46
- aa as TabBar,
47
- ea as Timer,
15
+ D as JoggingPanel,
16
+ H as JoggingStore,
17
+ s as JointLimitGizmo,
18
+ t as LinearAxis,
19
+ W as LoadingCover,
20
+ k as LoadingErrorMessage,
21
+ B as LogPanel,
22
+ O as LogStore,
23
+ U as LogViewer,
24
+ r as MANUFACTURER_HOME_CONFIGS,
25
+ n as MotionGroupVisualizer,
26
+ i as MotionGroupVisualizerExact,
27
+ _ as MotionStreamConnection,
28
+ Z as NoMotionGroupModal,
29
+ K as PoseCartesianValues,
30
+ Q as PoseJointValues,
31
+ u as PresetEnvironment,
32
+ L as ProgramControl,
33
+ V as ProgramState,
34
+ A as ProgramStateIndicator,
35
+ g as Robot,
36
+ l as RobotCard,
37
+ X as RobotListItem,
38
+ Y as RobotSetupReadinessIndicator,
39
+ $ as RobotSetupReadinessState,
40
+ ba as SafetyBar,
41
+ d as SafetyZonesRenderer,
42
+ aa as SelectableFab,
43
+ c as SupportedLinearAxis,
44
+ p as SupportedLinearAxisExact,
45
+ S as SupportedRobot,
46
+ m as SupportedRobotExact,
47
+ ea as TabBar,
48
+ oa as Timer,
48
49
  M as TrajectoryRenderer,
49
- A as ValueInterpolator,
50
- oa as VelocitySlider,
51
- sa as VelocitySliderLabel,
52
- ta as WandelbotsDataGrid,
53
- ra as createDebugMessage,
54
- na as createErrorMessage,
55
- ia as createInfoMessage,
56
- ua as createLogMessage,
57
- ga as createNovaMuiTheme,
58
- la as createNovaTheme,
59
- da as createWarningMessage,
60
- m as defaultAxisConfig,
61
- C as defaultGetModel,
62
- R as extractManufacturer,
63
- f as getDefaultHomeConfig,
64
- Ca as i18n,
65
- ca as jointValuesEqual,
66
- pa as poseEqual,
67
- Sa as tcpMotionEqual,
50
+ E as ValueInterpolator,
51
+ sa as VelocitySlider,
52
+ ta as VelocitySliderLabel,
53
+ ra as WandelbotsDataGrid,
54
+ na as createDebugMessage,
55
+ ia as createErrorMessage,
56
+ ua as createInfoMessage,
57
+ ga as createLogMessage,
58
+ la as createNovaMuiTheme,
59
+ da as createNovaTheme,
60
+ ca as createWarningMessage,
61
+ C as defaultAxisConfig,
62
+ R as defaultGetModel,
63
+ f as extractManufacturer,
64
+ b as getDefaultHomeConfig,
65
+ Ra as i18n,
66
+ pa as jointValuesEqual,
67
+ Sa as poseEqual,
68
+ ma as tcpMotionEqual,
68
69
  Ma as unwrapRotationVector,
69
- E as useAnimationFrame,
70
- P as useAutorun,
70
+ P as useAnimationFrame,
71
+ J as useAutorun,
71
72
  T as useInterpolation,
72
- J as useMounted,
73
+ G as useMounted,
73
74
  y as useReaction,
74
- G as useSmoothedMotionState
75
+ I as useSmoothedMotionState
75
76
  };
@@ -1,3 +1,4 @@
1
+ import "@wandelbots/mui";
1
2
  export interface AxisControlComponentColors {
2
3
  color?: string;
3
4
  borderColor?: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wandelbots/wandelbots-js-react-components",
3
- "version": "6.2.0",
3
+ "version": "6.3.0",
4
4
  "description": "React UI toolkit for building applications on top of the Wandelbots platform",
5
5
  "type": "module",
6
6
  "sideEffects": false,