@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.
- package/dist/3d.cjs +1 -1
- package/dist/3d.d.ts +3 -2
- package/dist/3d.js +17 -16
- package/dist/chunks/MotionGroupVisualizer-DshWR1wY.js +1653 -0
- package/dist/chunks/MotionGroupVisualizer-eD7yFEcF.cjs +1 -0
- package/dist/components/3d-viewport/JointLimitGizmo.d.ts +34 -0
- package/dist/components/3d-viewport/jointLimitFrames.d.ts +8 -0
- package/dist/index.cjs +1 -1
- package/dist/index.js +68 -67
- package/dist/themes/themeTypes.d.ts +1 -0
- package/package.json +1 -1
- package/dist/chunks/MotionGroupVisualizer-CEiRJk_l.js +0 -1423
- package/dist/chunks/MotionGroupVisualizer-rrhU4sYi.cjs +0 -1
|
@@ -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-
|
|
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,
|
|
2
|
-
import { P as
|
|
3
|
-
import { A as
|
|
4
|
-
import { i as
|
|
5
|
-
import { S as
|
|
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
|
-
|
|
8
|
-
|
|
7
|
+
h as AdornedTextField,
|
|
8
|
+
v as AppHeader,
|
|
9
9
|
o as CollisionSceneRenderer,
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
F as ConnectedMotionGroup,
|
|
11
|
+
j as CycleTimer,
|
|
12
|
+
q as JoggerConnection,
|
|
13
|
+
z as JoggingCartesianAxisControl,
|
|
14
14
|
w as JoggingJointValueControl,
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
s as
|
|
18
|
-
|
|
19
|
-
W as
|
|
20
|
-
k as
|
|
21
|
-
B as
|
|
22
|
-
O as
|
|
23
|
-
|
|
24
|
-
r as
|
|
25
|
-
n as
|
|
26
|
-
|
|
27
|
-
_ as
|
|
28
|
-
Z as
|
|
29
|
-
K as
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
L as
|
|
33
|
-
V as
|
|
34
|
-
|
|
35
|
-
g as
|
|
36
|
-
|
|
37
|
-
X as
|
|
38
|
-
Y as
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
c as
|
|
44
|
-
p as
|
|
45
|
-
S as
|
|
46
|
-
|
|
47
|
-
ea as
|
|
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
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
|
|
70
|
-
|
|
70
|
+
P as useAnimationFrame,
|
|
71
|
+
J as useAutorun,
|
|
71
72
|
T as useInterpolation,
|
|
72
|
-
|
|
73
|
+
G as useMounted,
|
|
73
74
|
y as useReaction,
|
|
74
|
-
|
|
75
|
+
I as useSmoothedMotionState
|
|
75
76
|
};
|
package/package.json
CHANGED