vuer 0.0.66__py3-none-any.whl → 0.0.67__py3-none-any.whl

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.

Potentially problematic release.


This version of vuer might be problematic. Click here for more details.

Files changed (29) hide show
  1. vuer/__pycache__/events.cpython-311.pyc +0 -0
  2. vuer/__pycache__/server.cpython-311.pyc +0 -0
  3. vuer/client_build/404.html +1 -1
  4. vuer/client_build/assets/entries/entry-client-routing.ElPgRW9J.js +5 -0
  5. vuer/client_build/assets/entries/entry-client-routing.ElPgRW9J.js.map +1 -0
  6. vuer/client_build/assets/entries/pages_editor.DTJ44V1M.js +2 -0
  7. vuer/client_build/assets/entries/pages_editor.DTJ44V1M.js.map +1 -0
  8. vuer/client_build/assets/entries/pages_index.DYUEXAWY.js +2 -0
  9. vuer/client_build/assets/entries/pages_index.DYUEXAWY.js.map +1 -0
  10. vuer/client_build/assets/entries/pages_studio.B9ofAf4Z.js +2 -0
  11. vuer/client_build/assets/entries/pages_studio.B9ofAf4Z.js.map +1 -0
  12. vuer/client_build/editor/index.html +2 -2
  13. vuer/client_build/index.html +2 -2
  14. vuer/client_build/simple/index.html +1 -1
  15. vuer/client_build/studio/index.html +2 -2
  16. vuer/schemas/__init__.py +1 -0
  17. vuer/schemas/__pycache__/__init__.cpython-311.pyc +0 -0
  18. vuer/schemas/__pycache__/html_components.cpython-311.pyc +0 -0
  19. vuer/schemas/__pycache__/material_components.cpython-311.pyc +0 -0
  20. vuer/schemas/__pycache__/scene_components.cpython-311.pyc +0 -0
  21. vuer/schemas/html_components.py +5 -3
  22. vuer/schemas/material_components.py +127 -0
  23. vuer/schemas/scene_components.py +182 -2
  24. {vuer-0.0.66.dist-info → vuer-0.0.67.dist-info}/METADATA +1 -1
  25. {vuer-0.0.66.dist-info → vuer-0.0.67.dist-info}/RECORD +29 -19
  26. {vuer-0.0.66.dist-info → vuer-0.0.67.dist-info}/WHEEL +0 -0
  27. {vuer-0.0.66.dist-info → vuer-0.0.67.dist-info}/entry_points.txt +0 -0
  28. {vuer-0.0.66.dist-info → vuer-0.0.67.dist-info}/licenses/LICENSE +0 -0
  29. {vuer-0.0.66.dist-info → vuer-0.0.67.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,2 @@
1
+ import{R as N,d as V,J as M,r as l,j as o,H as z,i as I,a as L,b as $,c as H}from"../chunks/chunk-D_MRHYMT.js";import{V as B,T as _,F as k,L as K,Z as q,P as W,W as X,a as G,u as g,R as J,G as Z,b as Q,c as Y,C as v,d as ee,S as re,e as te,f as ne,g as ae,H as ie,h as se,M as oe,i as S,j as w,k as x,l as de,m as fe}from"../chunks/chunk-C6pZYLoD.js";import{X as ce,D as le}from"../chunks/chunk-DUyeN413.js";import"../chunks/chunk-D7HrI6pR.js";const E="%[a-f0-9]{2}",b=new RegExp("("+E+")|([^%]+?)","gi"),F=new RegExp("("+E+")+","gi");function m(e,r){try{return[decodeURIComponent(e.join(""))]}catch{}if(e.length===1)return e;r=r||1;const t=e.slice(0,r),n=e.slice(r);return Array.prototype.concat.call([],m(t),m(n))}function ue(e){try{return decodeURIComponent(e)}catch{let r=e.match(b)||[];for(let t=1;t<r.length;t++)e=m(r,t).join(""),r=e.match(b)||[];return e}}function me(e){const r={"%FE%FF":"��","%FF%FE":"��"};let t=F.exec(e);for(;t;){try{r[t[0]]=decodeURIComponent(t[0])}catch{const a=ue(t[0]);a!==t[0]&&(r[t[0]]=a)}t=F.exec(e)}r["%C2"]="�";const n=Object.keys(r);for(const a of n)e=e.replace(new RegExp(a,"g"),r[a]);return e}function he(e){if(typeof e!="string")throw new TypeError("Expected `encodedURI` to be of type `string`, got `"+typeof e+"`");try{return decodeURIComponent(e)}catch{return me(e)}}function ye(e,r){const t={};if(Array.isArray(r))for(const n of r){const a=Object.getOwnPropertyDescriptor(e,n);a!=null&&a.enumerable&&Object.defineProperty(t,n,a)}else for(const n of Reflect.ownKeys(e)){const a=Object.getOwnPropertyDescriptor(e,n);if(a.enumerable){const s=e[n];r(n,s,e)&&Object.defineProperty(t,n,a)}}return t}function T(e,r){if(!(typeof e=="string"&&typeof r=="string"))throw new TypeError("Expected the arguments to be of type `string`");if(e===""||r==="")return[];const t=e.indexOf(r);return t===-1?[]:[e.slice(0,t),e.slice(t+r.length)]}const pe=e=>e==null,ge=e=>encodeURIComponent(e).replaceAll(/[!'()*]/g,r=>`%${r.charCodeAt(0).toString(16).toUpperCase()}`),h=Symbol("encodeFragmentIdentifier");function Se(e){switch(e.arrayFormat){case"index":return r=>(t,n)=>{const a=t.length;return n===void 0||e.skipNull&&n===null||e.skipEmptyString&&n===""?t:n===null?[...t,[f(r,e),"[",a,"]"].join("")]:[...t,[f(r,e),"[",f(a,e),"]=",f(n,e)].join("")]};case"bracket":return r=>(t,n)=>n===void 0||e.skipNull&&n===null||e.skipEmptyString&&n===""?t:n===null?[...t,[f(r,e),"[]"].join("")]:[...t,[f(r,e),"[]=",f(n,e)].join("")];case"colon-list-separator":return r=>(t,n)=>n===void 0||e.skipNull&&n===null||e.skipEmptyString&&n===""?t:n===null?[...t,[f(r,e),":list="].join("")]:[...t,[f(r,e),":list=",f(n,e)].join("")];case"comma":case"separator":case"bracket-separator":{const r=e.arrayFormat==="bracket-separator"?"[]=":"=";return t=>(n,a)=>a===void 0||e.skipNull&&a===null||e.skipEmptyString&&a===""?n:(a=a===null?"":a,n.length===0?[[f(t,e),r,f(a,e)].join("")]:[[n,f(a,e)].join(e.arrayFormatSeparator)])}default:return r=>(t,n)=>n===void 0||e.skipNull&&n===null||e.skipEmptyString&&n===""?t:n===null?[...t,f(r,e)]:[...t,[f(r,e),"=",f(n,e)].join("")]}}function we(e){let r;switch(e.arrayFormat){case"index":return(t,n,a)=>{if(r=/\[(\d*)]$/.exec(t),t=t.replace(/\[\d*]$/,""),!r){a[t]=n;return}a[t]===void 0&&(a[t]={}),a[t][r[1]]=n};case"bracket":return(t,n,a)=>{if(r=/(\[])$/.exec(t),t=t.replace(/\[]$/,""),!r){a[t]=n;return}if(a[t]===void 0){a[t]=[n];return}a[t]=[...a[t],n]};case"colon-list-separator":return(t,n,a)=>{if(r=/(:list)$/.exec(t),t=t.replace(/:list$/,""),!r){a[t]=n;return}if(a[t]===void 0){a[t]=[n];return}a[t]=[...a[t],n]};case"comma":case"separator":return(t,n,a)=>{const s=typeof n=="string"&&n.includes(e.arrayFormatSeparator),i=typeof n=="string"&&!s&&c(n,e).includes(e.arrayFormatSeparator);n=i?c(n,e):n;const d=s||i?n.split(e.arrayFormatSeparator).map(u=>c(u,e)):n===null?n:c(n,e);a[t]=d};case"bracket-separator":return(t,n,a)=>{const s=/(\[])$/.test(t);if(t=t.replace(/\[]$/,""),!s){a[t]=n&&c(n,e);return}const i=n===null?[]:c(n,e).split(e.arrayFormatSeparator);if(a[t]===void 0){a[t]=i;return}a[t]=[...a[t],...i]};default:return(t,n,a)=>{if(a[t]===void 0){a[t]=n;return}a[t]=[...[a[t]].flat(),n]}}}function P(e){if(typeof e!="string"||e.length!==1)throw new TypeError("arrayFormatSeparator must be single character string")}function f(e,r){return r.encode?r.strict?ge(e):encodeURIComponent(e):e}function c(e,r){return r.decode?he(e):e}function A(e){return Array.isArray(e)?e.sort():typeof e=="object"?A(Object.keys(e)).sort((r,t)=>Number(r)-Number(t)).map(r=>e[r]):e}function R(e){const r=e.indexOf("#");return r!==-1&&(e=e.slice(0,r)),e}function xe(e){let r="";const t=e.indexOf("#");return t!==-1&&(r=e.slice(t)),r}function j(e,r,t){return t==="string"&&typeof e=="string"?e:typeof t=="function"&&typeof e=="string"?t(e):t==="boolean"&&e!==null&&(e.toLowerCase()==="true"||e.toLowerCase()==="false")?e.toLowerCase()==="true":t==="boolean"&&e!==null&&(e.toLowerCase()==="1"||e.toLowerCase()==="0")?e.toLowerCase()==="1":t==="string[]"&&r.arrayFormat!=="none"&&typeof e=="string"?[e]:t==="number[]"&&r.arrayFormat!=="none"&&!Number.isNaN(Number(e))&&typeof e=="string"&&e.trim()!==""?[Number(e)]:t==="number"&&!Number.isNaN(Number(e))&&typeof e=="string"&&e.trim()!==""?Number(e):r.parseBooleans&&e!==null&&(e.toLowerCase()==="true"||e.toLowerCase()==="false")?e.toLowerCase()==="true":r.parseNumbers&&!Number.isNaN(Number(e))&&typeof e=="string"&&e.trim()!==""?Number(e):e}function y(e){e=R(e);const r=e.indexOf("?");return r===-1?"":e.slice(r+1)}function p(e,r){r={decode:!0,sort:!0,arrayFormat:"none",arrayFormatSeparator:",",parseNumbers:!1,parseBooleans:!1,types:Object.create(null),...r},P(r.arrayFormatSeparator);const t=we(r),n=Object.create(null);if(typeof e!="string"||(e=e.trim().replace(/^[?#&]/,""),!e))return n;for(const a of e.split("&")){if(a==="")continue;const s=r.decode?a.replaceAll("+"," "):a;let[i,d]=T(s,"=");i===void 0&&(i=s),d=d===void 0?null:["comma","separator","bracket-separator"].includes(r.arrayFormat)?d:c(d,r),t(c(i,r),d,n)}for(const[a,s]of Object.entries(n))if(typeof s=="object"&&s!==null&&r.types[a]!=="string")for(const[i,d]of Object.entries(s)){const u=r.types[a]?r.types[a].replace("[]",""):void 0;s[i]=j(d,r,u)}else typeof s=="object"&&s!==null&&r.types[a]==="string"?n[a]=Object.values(s).join(r.arrayFormatSeparator):n[a]=j(s,r,r.types[a]);return r.sort===!1?n:(r.sort===!0?Object.keys(n).sort():Object.keys(n).sort(r.sort)).reduce((a,s)=>{const i=n[s];return a[s]=i&&typeof i=="object"&&!Array.isArray(i)?A(i):i,a},Object.create(null))}function C(e,r){if(!e)return"";r={encode:!0,strict:!0,arrayFormat:"none",arrayFormatSeparator:",",...r},P(r.arrayFormatSeparator);const t=i=>r.skipNull&&pe(e[i])||r.skipEmptyString&&e[i]==="",n=Se(r),a={};for(const[i,d]of Object.entries(e))t(i)||(a[i]=d);const s=Object.keys(a);return r.sort!==!1&&s.sort(r.sort),s.map(i=>{const d=e[i];return d===void 0?"":d===null?f(i,r):Array.isArray(d)?d.length===0&&r.arrayFormat==="bracket-separator"?f(i,r)+"[]":d.reduce(n(i),[]).join("&"):f(i,r)+"="+f(d,r)}).filter(i=>i.length>0).join("&")}function O(e,r){var a;r={decode:!0,...r};let[t,n]=T(e,"#");return t===void 0&&(t=e),{url:((a=t==null?void 0:t.split("?"))==null?void 0:a[0])??"",query:p(y(e),r),...r&&r.parseFragmentIdentifier&&n?{fragmentIdentifier:c(n,r)}:{}}}function U(e,r){r={encode:!0,strict:!0,[h]:!0,...r};const t=R(e.url).split("?")[0]||"",n=y(e.url),a={...p(n,{sort:!1}),...e.query};let s=C(a,r);s&&(s=`?${s}`);let i=xe(e.url);if(typeof e.fragmentIdentifier=="string"){const d=new URL(t);d.hash=e.fragmentIdentifier,i=r[h]?d.hash:`#${e.fragmentIdentifier}`}return`${t}${s}${i}`}function D(e,r,t){t={parseFragmentIdentifier:!0,[h]:!1,...t};const{url:n,query:a,fragmentIdentifier:s}=O(e,t);return U({url:n,query:ye(a,r),fragmentIdentifier:s},t)}function be(e,r,t){const n=Array.isArray(r)?a=>!r.includes(a):(a,s)=>!r(a,s);return D(e,n,t)}const Fe=Object.freeze(Object.defineProperty({__proto__:null,exclude:be,extract:y,parse:p,parseUrl:O,pick:D,stringify:C,stringifyUrl:U},Symbol.toStringTag,{value:"Module"}));typeof window<"u"&&(window.React=N,window.ReactDOM=V,window.VUER=B,window.THREE=_,window.JSX=M,window.FIBER=k,window.XR=ce,window.Drei=le,window.LEVA=K,window.ZUSTAND=q);function je(){const e=Q(),{downlink:r}=Y();l.useEffect(()=>{if(!e)return;const n=[r.subscribe("SET",e.addKeyFrame),r.subscribe("ADD",e.addKeyFrame),r.subscribe("UPDATE",e.addKeyFrame),r.subscribe("UPSERT",e.addKeyFrame),r.subscribe("REMOVE",e.addKeyFrame)];return()=>{n.forEach(a=>a())}},[e,r]);const t=l.useMemo(()=>e!=null&&e.store?new v(r,e.store):r,[r,e==null?void 0:e.store]);return o.jsxs(ee,{offset:200,minOffset:48,hidden:!0,style:{width:"100%",height:"100%"},children:[o.jsx(re,{stream:t,prompt:"scene files supported: *.urdf *.pcd *.ply *.splat",style:{display:"flex",flexDirection:"row"},innerStyle:{display:"flex",flexDirection:"row"},children:o.jsx(te,{stream:t,editMode:!0,bgChildren:[o.jsx(ae,{_key:"default-grid"},"default-grid"),o.jsx(ie,{},"default-light-stage"),o.jsx(se,{fps:30,stream:!0},"default-hands"),o.jsx(oe,{fps:30,stream:!0},"motion-controllers")],children:o.jsx(ne,{_key:"contrib-loader-mujoco",library:"@vuer-ai/mujoco-ts",version:"0.0.60",main:"dist/index.umd.js",dependencies:["VUER","LEVA","FIBER"]})})}),o.jsx(o.Fragment,{children:o.jsx(S,{children:o.jsxs(w,{children:[o.jsx(x,{}),o.jsx(de,{children:o.jsx(fe,{})})]})})}),o.jsx(S,{children:o.jsx(w,{children:o.jsx(x,{})})})]})}function Ee(){const e=g(({children:t})=>t),r=g(({ops:t})=>t);return o.jsxs(J,{vertical:!0,offset:-200,hidden:!0,children:[o.jsx(je,{}),o.jsx(Z,{title:"Scene Graph",nodes:e,sceneOps:r})]})}function Te(){const e=typeof window>"u";if(e)return null;const r=l.useMemo(()=>{const n=Fe.parse(window.document.location.search);return typeof n.collapseMenu=="string"&&(n.collapseMenu=n.collapseMenu.toLowerCase()),n},[]),t=l.useMemo(()=>r.collapseMenu==="true",[r.collapseMenu]);return o.jsxs(o.Fragment,{children:[o.jsx(z,{children:o.jsx("title",{children:"Vuer Editor"})}),o.jsxs("main",{children:[o.jsx(W,{children:e?null:o.jsx(X,{children:o.jsx(Ee,{})})}),o.jsx(G,{theme:{sizes:{rootWidth:"380px",controlWidth:"200px",numberInputMinWidth:"56px"}},collapsed:t})]})]})}const Pe=Object.freeze(Object.defineProperty({__proto__:null,default:Te},Symbol.toStringTag,{value:"Module"})),Ue={onBeforeRenderEnv:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:null}},dataEnv:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:null}},hydrationCanBeAborted:{type:"standard",definedAtData:{filePathToShowToUser:"/renderer/+config.ts",fileExportPathToShowToUser:["default","hydrationCanBeAborted"]},valueSerialized:{type:"js-serialized",value:!0}},hooksTimeout:{type:"standard",definedAtData:{filePathToShowToUser:"/renderer/+config.ts",fileExportPathToShowToUser:["default","hooksTimeout"]},valueSerialized:{type:"js-serialized",value:{data:{error:3e4,warning:1e4}}}},onHydrationEnd:{type:"standard",definedAtData:{filePathToShowToUser:"/renderer/+onHydrationEnd.ts",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:H}},onPageTransitionEnd:{type:"standard",definedAtData:{filePathToShowToUser:"/renderer/+onPageTransitionEnd.ts",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:$}},onPageTransitionStart:{type:"standard",definedAtData:{filePathToShowToUser:"/renderer/+onPageTransitionStart.ts",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:L}},onRenderClient:{type:"standard",definedAtData:{filePathToShowToUser:"/renderer/+onRenderClient.tsx",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:I}},Page:{type:"standard",definedAtData:{filePathToShowToUser:"/pages/editor/+Page.tsx",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:Pe}}};export{Ue as configValuesSerialized};
2
+ //# sourceMappingURL=pages_editor.DTJ44V1M.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages_editor.DTJ44V1M.js","sources":["../../../../node_modules/decode-uri-component/index.js","../../../../node_modules/filter-obj/index.js","../../../../node_modules/split-on-first/index.js","../../../../node_modules/query-string/base.js","../../../../pages/editor/+Page.tsx"],"sourcesContent":["const token = '%[a-f0-9]{2}';\nconst singleMatcher = new RegExp('(' + token + ')|([^%]+?)', 'gi');\nconst multiMatcher = new RegExp('(' + token + ')+', 'gi');\n\nfunction decodeComponents(components, split) {\n\ttry {\n\t\t// Try to decode the entire string first\n\t\treturn [decodeURIComponent(components.join(''))];\n\t} catch {\n\t\t// Do nothing\n\t}\n\n\tif (components.length === 1) {\n\t\treturn components;\n\t}\n\n\tsplit = split || 1;\n\n\t// Split the array in 2 parts\n\tconst left = components.slice(0, split);\n\tconst right = components.slice(split);\n\n\treturn Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));\n}\n\nfunction decode(input) {\n\ttry {\n\t\treturn decodeURIComponent(input);\n\t} catch {\n\t\tlet tokens = input.match(singleMatcher) || [];\n\n\t\tfor (let i = 1; i < tokens.length; i++) {\n\t\t\tinput = decodeComponents(tokens, i).join('');\n\n\t\t\ttokens = input.match(singleMatcher) || [];\n\t\t}\n\n\t\treturn input;\n\t}\n}\n\nfunction customDecodeURIComponent(input) {\n\t// Keep track of all the replacements and prefill the map with the `BOM`\n\tconst replaceMap = {\n\t\t'%FE%FF': '\\uFFFD\\uFFFD',\n\t\t'%FF%FE': '\\uFFFD\\uFFFD',\n\t};\n\n\tlet match = multiMatcher.exec(input);\n\twhile (match) {\n\t\ttry {\n\t\t\t// Decode as big chunks as possible\n\t\t\treplaceMap[match[0]] = decodeURIComponent(match[0]);\n\t\t} catch {\n\t\t\tconst result = decode(match[0]);\n\n\t\t\tif (result !== match[0]) {\n\t\t\t\treplaceMap[match[0]] = result;\n\t\t\t}\n\t\t}\n\n\t\tmatch = multiMatcher.exec(input);\n\t}\n\n\t// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else\n\treplaceMap['%C2'] = '\\uFFFD';\n\n\tconst entries = Object.keys(replaceMap);\n\n\tfor (const key of entries) {\n\t\t// Replace all decoded components\n\t\tinput = input.replace(new RegExp(key, 'g'), replaceMap[key]);\n\t}\n\n\treturn input;\n}\n\nexport default function decodeUriComponent(encodedURI) {\n\tif (typeof encodedURI !== 'string') {\n\t\tthrow new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');\n\t}\n\n\ttry {\n\t\t// Try the built in decoder first\n\t\treturn decodeURIComponent(encodedURI);\n\t} catch {\n\t\t// Fallback to a more advanced decoder\n\t\treturn customDecodeURIComponent(encodedURI);\n\t}\n}\n","export function includeKeys(object, predicate) {\n\tconst result = {};\n\n\tif (Array.isArray(predicate)) {\n\t\tfor (const key of predicate) {\n\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(object, key);\n\t\t\tif (descriptor?.enumerable) {\n\t\t\t\tObject.defineProperty(result, key, descriptor);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// `Reflect.ownKeys()` is required to retrieve symbol properties\n\t\tfor (const key of Reflect.ownKeys(object)) {\n\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(object, key);\n\t\t\tif (descriptor.enumerable) {\n\t\t\t\tconst value = object[key];\n\t\t\t\tif (predicate(key, value, object)) {\n\t\t\t\t\tObject.defineProperty(result, key, descriptor);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport function excludeKeys(object, predicate) {\n\tif (Array.isArray(predicate)) {\n\t\tconst set = new Set(predicate);\n\t\treturn includeKeys(object, key => !set.has(key));\n\t}\n\n\treturn includeKeys(object, (key, value, object) => !predicate(key, value, object));\n}\n","export default function splitOnFirst(string, separator) {\n\tif (!(typeof string === 'string' && typeof separator === 'string')) {\n\t\tthrow new TypeError('Expected the arguments to be of type `string`');\n\t}\n\n\tif (string === '' || separator === '') {\n\t\treturn [];\n\t}\n\n\tconst separatorIndex = string.indexOf(separator);\n\n\tif (separatorIndex === -1) {\n\t\treturn [];\n\t}\n\n\treturn [\n\t\tstring.slice(0, separatorIndex),\n\t\tstring.slice(separatorIndex + separator.length)\n\t];\n}\n","import decodeComponent from 'decode-uri-component';\nimport {includeKeys} from 'filter-obj';\nimport splitOnFirst from 'split-on-first';\n\nconst isNullOrUndefined = value => value === null || value === undefined;\n\n// eslint-disable-next-line unicorn/prefer-code-point\nconst strictUriEncode = string => encodeURIComponent(string).replaceAll(/[!'()*]/g, x => `%${x.charCodeAt(0).toString(16).toUpperCase()}`);\n\nconst encodeFragmentIdentifier = Symbol('encodeFragmentIdentifier');\n\nfunction encoderForArrayFormat(options) {\n\tswitch (options.arrayFormat) {\n\t\tcase 'index': {\n\t\t\treturn key => (result, value) => {\n\t\t\t\tconst index = result.length;\n\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined\n\t\t\t\t\t|| (options.skipNull && value === null)\n\t\t\t\t\t|| (options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t...result, [encode(key, options), '[', index, ']'].join(''),\n\t\t\t\t\t];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '[', encode(index, options), ']=', encode(value, options)].join(''),\n\t\t\t\t];\n\t\t\t};\n\t\t}\n\n\t\tcase 'bracket': {\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined\n\t\t\t\t\t|| (options.skipNull && value === null)\n\t\t\t\t\t|| (options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t...result,\n\t\t\t\t\t\t[encode(key, options), '[]'].join(''),\n\t\t\t\t\t];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '[]=', encode(value, options)].join(''),\n\t\t\t\t];\n\t\t\t};\n\t\t}\n\n\t\tcase 'colon-list-separator': {\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined\n\t\t\t\t\t|| (options.skipNull && value === null)\n\t\t\t\t\t|| (options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t...result,\n\t\t\t\t\t\t[encode(key, options), ':list='].join(''),\n\t\t\t\t\t];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), ':list=', encode(value, options)].join(''),\n\t\t\t\t];\n\t\t\t};\n\t\t}\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\tcase 'bracket-separator': {\n\t\t\tconst keyValueSeparator = options.arrayFormat === 'bracket-separator'\n\t\t\t\t? '[]='\n\t\t\t\t: '=';\n\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined\n\t\t\t\t\t|| (options.skipNull && value === null)\n\t\t\t\t\t|| (options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\t// Translate null to an empty string so that it doesn't serialize as 'null'\n\t\t\t\tvalue = value === null ? '' : value;\n\n\t\t\t\tif (result.length === 0) {\n\t\t\t\t\treturn [[encode(key, options), keyValueSeparator, encode(value, options)].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [[result, encode(value, options)].join(options.arrayFormatSeparator)];\n\t\t\t};\n\t\t}\n\n\t\tdefault: {\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined\n\t\t\t\t\t|| (options.skipNull && value === null)\n\t\t\t\t\t|| (options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t...result,\n\t\t\t\t\t\tencode(key, options),\n\t\t\t\t\t];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '=', encode(value, options)].join(''),\n\t\t\t\t];\n\t\t\t};\n\t\t}\n\t}\n}\n\nfunction parserForArrayFormat(options) {\n\tlet result;\n\n\tswitch (options.arrayFormat) {\n\t\tcase 'index': {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /\\[(\\d*)]$/.exec(key);\n\n\t\t\t\tkey = key.replace(/\\[\\d*]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = {};\n\t\t\t\t}\n\n\t\t\t\taccumulator[key][result[1]] = value;\n\t\t\t};\n\t\t}\n\n\t\tcase 'bracket': {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(\\[])$/.exec(key);\n\t\t\t\tkey = key.replace(/\\[]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [...accumulator[key], value];\n\t\t\t};\n\t\t}\n\n\t\tcase 'colon-list-separator': {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(:list)$/.exec(key);\n\t\t\t\tkey = key.replace(/:list$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [...accumulator[key], value];\n\t\t\t};\n\t\t}\n\n\t\tcase 'comma':\n\t\tcase 'separator': {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = typeof value === 'string' && value.includes(options.arrayFormatSeparator);\n\t\t\t\tconst isEncodedArray = (typeof value === 'string' && !isArray && decode(value, options).includes(options.arrayFormatSeparator));\n\t\t\t\tvalue = isEncodedArray ? decode(value, options) : value;\n\t\t\t\tconst newValue = isArray || isEncodedArray ? value.split(options.arrayFormatSeparator).map(item => decode(item, options)) : (value === null ? value : decode(value, options));\n\t\t\t\taccumulator[key] = newValue;\n\t\t\t};\n\t\t}\n\n\t\tcase 'bracket-separator': {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = /(\\[])$/.test(key);\n\t\t\t\tkey = key.replace(/\\[]$/, '');\n\n\t\t\t\tif (!isArray) {\n\t\t\t\t\taccumulator[key] = value ? decode(value, options) : value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst arrayValue = value === null\n\t\t\t\t\t? []\n\t\t\t\t\t: decode(value, options).split(options.arrayFormatSeparator);\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = arrayValue;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [...accumulator[key], ...arrayValue];\n\t\t\t};\n\t\t}\n\n\t\tdefault: {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [...[accumulator[key]].flat(), value];\n\t\t\t};\n\t\t}\n\t}\n}\n\nfunction validateArrayFormatSeparator(value) {\n\tif (typeof value !== 'string' || value.length !== 1) {\n\t\tthrow new TypeError('arrayFormatSeparator must be single character string');\n\t}\n}\n\nfunction encode(value, options) {\n\tif (options.encode) {\n\t\treturn options.strict ? strictUriEncode(value) : encodeURIComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction decode(value, options) {\n\tif (options.decode) {\n\t\treturn decodeComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction keysSorter(input) {\n\tif (Array.isArray(input)) {\n\t\treturn input.sort();\n\t}\n\n\tif (typeof input === 'object') {\n\t\treturn keysSorter(Object.keys(input))\n\t\t\t.sort((a, b) => Number(a) - Number(b))\n\t\t\t.map(key => input[key]);\n\t}\n\n\treturn input;\n}\n\nfunction removeHash(input) {\n\tconst hashStart = input.indexOf('#');\n\tif (hashStart !== -1) {\n\t\tinput = input.slice(0, hashStart);\n\t}\n\n\treturn input;\n}\n\nfunction getHash(url) {\n\tlet hash = '';\n\tconst hashStart = url.indexOf('#');\n\tif (hashStart !== -1) {\n\t\thash = url.slice(hashStart);\n\t}\n\n\treturn hash;\n}\n\nfunction parseValue(value, options, type) {\n\tif (type === 'string' && typeof value === 'string') {\n\t\treturn value;\n\t}\n\n\tif (typeof type === 'function' && typeof value === 'string') {\n\t\treturn type(value);\n\t}\n\n\tif (type === 'boolean' && value !== null && (value.toLowerCase() === 'true' || value.toLowerCase() === 'false')) {\n\t\treturn value.toLowerCase() === 'true';\n\t}\n\n\tif (type === 'boolean' && value !== null && (value.toLowerCase() === '1' || value.toLowerCase() === '0')) {\n\t\treturn value.toLowerCase() === '1';\n\t}\n\n\tif (type === 'string[]' && options.arrayFormat !== 'none' && typeof value === 'string') {\n\t\treturn [value];\n\t}\n\n\tif (type === 'number[]' && options.arrayFormat !== 'none' && !Number.isNaN(Number(value)) && (typeof value === 'string' && value.trim() !== '')) {\n\t\treturn [Number(value)];\n\t}\n\n\tif (type === 'number' && !Number.isNaN(Number(value)) && (typeof value === 'string' && value.trim() !== '')) {\n\t\treturn Number(value);\n\t}\n\n\tif (options.parseBooleans && value !== null && (value.toLowerCase() === 'true' || value.toLowerCase() === 'false')) {\n\t\treturn value.toLowerCase() === 'true';\n\t}\n\n\tif (options.parseNumbers && !Number.isNaN(Number(value)) && (typeof value === 'string' && value.trim() !== '')) {\n\t\treturn Number(value);\n\t}\n\n\treturn value;\n}\n\nexport function extract(input) {\n\tinput = removeHash(input);\n\tconst queryStart = input.indexOf('?');\n\tif (queryStart === -1) {\n\t\treturn '';\n\t}\n\n\treturn input.slice(queryStart + 1);\n}\n\nexport function parse(query, options) {\n\toptions = {\n\t\tdecode: true,\n\t\tsort: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ',',\n\t\tparseNumbers: false,\n\t\tparseBooleans: false,\n\t\ttypes: Object.create(null),\n\t\t...options,\n\t};\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst formatter = parserForArrayFormat(options);\n\n\t// Create an object with no prototype\n\tconst returnValue = Object.create(null);\n\n\tif (typeof query !== 'string') {\n\t\treturn returnValue;\n\t}\n\n\tquery = query.trim().replace(/^[?#&]/, '');\n\n\tif (!query) {\n\t\treturn returnValue;\n\t}\n\n\tfor (const parameter of query.split('&')) {\n\t\tif (parameter === '') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst parameter_ = options.decode ? parameter.replaceAll('+', ' ') : parameter;\n\n\t\tlet [key, value] = splitOnFirst(parameter_, '=');\n\n\t\tif (key === undefined) {\n\t\t\tkey = parameter_;\n\t\t}\n\n\t\t// Missing `=` should be `null`:\n\t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\t\tvalue = value === undefined ? null : (['comma', 'separator', 'bracket-separator'].includes(options.arrayFormat) ? value : decode(value, options));\n\t\tformatter(decode(key, options), value, returnValue);\n\t}\n\n\tfor (const [key, value] of Object.entries(returnValue)) {\n\t\tif (typeof value === 'object' && value !== null && options.types[key] !== 'string') {\n\t\t\tfor (const [key2, value2] of Object.entries(value)) {\n\t\t\t\tconst type = options.types[key] ? options.types[key].replace('[]', '') : undefined;\n\t\t\t\tvalue[key2] = parseValue(value2, options, type);\n\t\t\t}\n\t\t} else if (typeof value === 'object' && value !== null && options.types[key] === 'string') {\n\t\t\treturnValue[key] = Object.values(value).join(options.arrayFormatSeparator);\n\t\t} else {\n\t\t\treturnValue[key] = parseValue(value, options, options.types[key]);\n\t\t}\n\t}\n\n\tif (options.sort === false) {\n\t\treturn returnValue;\n\t}\n\n\t// TODO: Remove the use of `reduce`.\n\t// eslint-disable-next-line unicorn/no-array-reduce\n\treturn (options.sort === true ? Object.keys(returnValue).sort() : Object.keys(returnValue).sort(options.sort)).reduce((result, key) => {\n\t\tconst value = returnValue[key];\n\t\tresult[key] = Boolean(value) && typeof value === 'object' && !Array.isArray(value) ? keysSorter(value) : value;\n\t\treturn result;\n\t}, Object.create(null));\n}\n\nexport function stringify(object, options) {\n\tif (!object) {\n\t\treturn '';\n\t}\n\n\toptions = {\n\t\tencode: true,\n\t\tstrict: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ',',\n\t\t...options,\n\t};\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst shouldFilter = key => (\n\t\t(options.skipNull && isNullOrUndefined(object[key]))\n\t\t|| (options.skipEmptyString && object[key] === '')\n\t);\n\n\tconst formatter = encoderForArrayFormat(options);\n\n\tconst objectCopy = {};\n\n\tfor (const [key, value] of Object.entries(object)) {\n\t\tif (!shouldFilter(key)) {\n\t\t\tobjectCopy[key] = value;\n\t\t}\n\t}\n\n\tconst keys = Object.keys(objectCopy);\n\n\tif (options.sort !== false) {\n\t\tkeys.sort(options.sort);\n\t}\n\n\treturn keys.map(key => {\n\t\tconst value = object[key];\n\n\t\tif (value === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (value === null) {\n\t\t\treturn encode(key, options);\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\tif (value.length === 0 && options.arrayFormat === 'bracket-separator') {\n\t\t\t\treturn encode(key, options) + '[]';\n\t\t\t}\n\n\t\t\treturn value\n\t\t\t\t.reduce(formatter(key), [])\n\t\t\t\t.join('&');\n\t\t}\n\n\t\treturn encode(key, options) + '=' + encode(value, options);\n\t}).filter(x => x.length > 0).join('&');\n}\n\nexport function parseUrl(url, options) {\n\toptions = {\n\t\tdecode: true,\n\t\t...options,\n\t};\n\n\tlet [url_, hash] = splitOnFirst(url, '#');\n\n\tif (url_ === undefined) {\n\t\turl_ = url;\n\t}\n\n\treturn {\n\t\turl: url_?.split('?')?.[0] ?? '',\n\t\tquery: parse(extract(url), options),\n\t\t...(options && options.parseFragmentIdentifier && hash ? {fragmentIdentifier: decode(hash, options)} : {}),\n\t};\n}\n\nexport function stringifyUrl(object, options) {\n\toptions = {\n\t\tencode: true,\n\t\tstrict: true,\n\t\t[encodeFragmentIdentifier]: true,\n\t\t...options,\n\t};\n\n\tconst url = removeHash(object.url).split('?')[0] || '';\n\tconst queryFromUrl = extract(object.url);\n\n\tconst query = {\n\t\t...parse(queryFromUrl, {sort: false}),\n\t\t...object.query,\n\t};\n\n\tlet queryString = stringify(query, options);\n\tqueryString &&= `?${queryString}`;\n\n\tlet hash = getHash(object.url);\n\tif (typeof object.fragmentIdentifier === 'string') {\n\t\tconst urlObjectForFragmentEncode = new URL(url);\n\t\turlObjectForFragmentEncode.hash = object.fragmentIdentifier;\n\t\thash = options[encodeFragmentIdentifier] ? urlObjectForFragmentEncode.hash : `#${object.fragmentIdentifier}`;\n\t}\n\n\treturn `${url}${queryString}${hash}`;\n}\n\nexport function pick(input, filter, options) {\n\toptions = {\n\t\tparseFragmentIdentifier: true,\n\t\t[encodeFragmentIdentifier]: false,\n\t\t...options,\n\t};\n\n\tconst {url, query, fragmentIdentifier} = parseUrl(input, options);\n\n\treturn stringifyUrl({\n\t\turl,\n\t\tquery: includeKeys(query, filter),\n\t\tfragmentIdentifier,\n\t}, options);\n}\n\nexport function exclude(input, filter, options) {\n\tconst exclusionFilter = Array.isArray(filter) ? key => !filter.includes(key) : (key, value) => !filter(key, value);\n\n\treturn pick(input, exclusionFilter, options);\n}\n","import { Helmet } from '@vuer-ai/react-helmet-async';\nimport './index.scss';\nimport * as VUER from '@vuer-ai/vuer';\nimport {\n Combine,\n ContribLoader,\n GraphView,\n Grid,\n Hands,\n HemisphereLightStage,\n MotionControllers,\n PlaybackBar,\n PlaybackProvider,\n PlaybackStateProvider,\n QueryParams,\n Resizable,\n ResizableSwitch,\n SceneContainer,\n SceneFileDropContainer,\n Timeline,\n TimelineFileDrop,\n TimelineStateProvider,\n usePlayback,\n useSceneStore,\n useSocket,\n WebSocketProvider,\n} from '@vuer-ai/vuer';\nimport * as LEVA from 'leva';\nimport { Leva } from 'leva';\n\n/** inject globals for plugins */\nimport React, { useEffect, useMemo } from 'react';\nimport * as FIBER from '@react-three/fiber';\nimport * as ReactDOM from 'react-dom';\nimport * as THREE from 'three';\nimport * as JSX from 'react/jsx-runtime';\nimport * as Drei from '@react-three/drei';\nimport * as XR from '@react-three/xr';\nimport * as ZUSTAND from 'zustand';\n\nimport queryString from 'query-string';\n\n// import { entrypoint } from '@vuer-ai/mujoco-ts';\n//\n// console.log('calling the mujoco-ts entrypoint', entrypoint);\n// entrypoint();\n\ndeclare global {\n interface Window {\n React: typeof React;\n ReactDOM: typeof ReactDOM;\n VUER: typeof VUER;\n THREE: typeof THREE;\n JSX: typeof JSX;\n FIBER: typeof FIBER;\n XR: typeof XR;\n Drei: typeof Drei;\n LEVA: typeof LEVA;\n ZUSTAND: typeof ZUSTAND;\n }\n}\n\nif (typeof window !== 'undefined') {\n window.React = React;\n window.ReactDOM = ReactDOM;\n window.VUER = VUER;\n window.THREE = THREE;\n window.JSX = JSX;\n window.FIBER = FIBER;\n window.XR = XR;\n window.Drei = Drei;\n window.LEVA = LEVA;\n window.ZUSTAND = ZUSTAND;\n}\n\nfunction VuerPlayback() {\n const playback = usePlayback();\n const { downlink } = useSocket();\n\n useEffect(() => {\n if (!playback) return;\n const cancel = [\n downlink.subscribe('SET', playback.addKeyFrame),\n downlink.subscribe('ADD', playback.addKeyFrame),\n downlink.subscribe('UPDATE', playback.addKeyFrame),\n downlink.subscribe('UPSERT', playback.addKeyFrame),\n downlink.subscribe('REMOVE', playback.addKeyFrame),\n ];\n\n return () => {\n cancel.forEach((f) => f());\n };\n }, [playback, downlink]);\n\n const combinedStream = useMemo(() => {\n if (!playback?.store) return downlink;\n return new Combine(downlink, playback.store);\n }, [downlink, playback?.store]);\n\n return (\n <ResizableSwitch\n offset={200}\n minOffset={48}\n hidden={true}\n style={{\n width: '100%',\n height: '100%',\n }}\n >\n <SceneFileDropContainer\n stream={combinedStream}\n prompt={'scene files supported: *.urdf *.pcd *.ply *.splat'}\n style={{\n display: 'flex',\n flexDirection: 'row',\n }}\n innerStyle={{\n display: 'flex',\n flexDirection: 'row',\n }}\n >\n <SceneContainer\n stream={combinedStream}\n editMode={true}\n bgChildren={[\n <Grid key='default-grid' _key='default-grid' />,\n <HemisphereLightStage key='default-light-stage' />,\n <Hands key='default-hands' fps={30} stream />,\n <MotionControllers key='motion-controllers' fps={30} stream />,\n ]}\n >\n <ContribLoader\n _key='contrib-loader-mujoco'\n // prodOnly // disable to allow vuer-py self-hosted version.\n // dev\n library='@vuer-ai/mujoco-ts'\n version='0.0.60'\n main='dist/index.umd.js'\n dependencies={['VUER', 'LEVA', 'FIBER']}\n />\n </SceneContainer>\n </SceneFileDropContainer>\n <>\n <PlaybackStateProvider>\n <TimelineStateProvider>\n <PlaybackBar />\n <TimelineFileDrop>\n <Timeline />\n {/*{clips.map((clip, i)=>{*/}\n {/* return <Clip {...clip} onDrag onSelectStart onSelectEnd/>*/}\n {/*})}*/}\n </TimelineFileDrop>\n </TimelineStateProvider>\n </PlaybackStateProvider>\n </>\n <PlaybackStateProvider>\n <TimelineStateProvider>\n <PlaybackBar />\n </TimelineStateProvider>\n </PlaybackStateProvider>\n </ResizableSwitch>\n );\n}\n\nfunction SidePanelView() {\n // this is excessive. triggers when position/rotation changes too.\n // const scene = useSceneStore(({ children, bgChildren, rawChildren }) =>\n // ({ children, bgChildren, rawChildren }));\n const children = useSceneStore(({ children }) => children);\n const sceneOps = useSceneStore(({ ops }) => ops);\n // return <VuerPlayback />;\n\n return (\n <Resizable vertical offset={-200} hidden={true}>\n <VuerPlayback />\n <GraphView title='Scene Graph' nodes={children} sceneOps={sceneOps} />\n </Resizable>\n );\n}\n\nexport default function Page() {\n const isSSR = typeof window === 'undefined';\n\n if (isSSR) return null;\n\n const queries = useMemo<QueryParams>(() => {\n const parsed = queryString.parse(window.document.location.search) as QueryParams;\n if (typeof parsed.collapseMenu === 'string') parsed.collapseMenu = parsed.collapseMenu.toLowerCase();\n return parsed;\n }, []);\n\n const collapseMenu = useMemo<boolean>(() => queries.collapseMenu === 'true', [queries.collapseMenu]);\n\n return (\n <>\n <Helmet>\n <title>Vuer Editor</title>\n </Helmet>\n <main>\n <PlaybackProvider>\n {isSSR ? null : (\n <WebSocketProvider>\n {/*<VuerPlayback />*/}\n <SidePanelView />\n </WebSocketProvider>\n )}\n </PlaybackProvider>\n <Leva\n theme={{\n sizes: {\n rootWidth: '380px',\n controlWidth: '200px',\n numberInputMinWidth: '56px',\n },\n }}\n collapsed={collapseMenu}\n />\n </main>\n </>\n );\n}\n"],"names":["token","singleMatcher","multiMatcher","decodeComponents","components","split","left","right","decode","input","tokens","i","customDecodeURIComponent","replaceMap","match","result","entries","key","decodeUriComponent","encodedURI","includeKeys","object","predicate","descriptor","value","splitOnFirst","string","separator","separatorIndex","isNullOrUndefined","strictUriEncode","x","encodeFragmentIdentifier","encoderForArrayFormat","options","index","encode","keyValueSeparator","parserForArrayFormat","accumulator","isArray","isEncodedArray","newValue","item","arrayValue","validateArrayFormatSeparator","decodeComponent","keysSorter","a","b","removeHash","hashStart","getHash","url","hash","parseValue","type","extract","queryStart","parse","query","formatter","returnValue","parameter","parameter_","key2","value2","stringify","shouldFilter","objectCopy","keys","parseUrl","url_","_a","stringifyUrl","queryFromUrl","queryString","urlObjectForFragmentEncode","pick","filter","fragmentIdentifier","exclude","exclusionFilter","React","ReactDOM","VUER","THREE","JSX","FIBER","XR","Drei","LEVA","ZUSTAND","VuerPlayback","playback","usePlayback","downlink","useSocket","useEffect","cancel","f","combinedStream","useMemo","Combine","jsxs","ResizableSwitch","jsx","SceneFileDropContainer","SceneContainer","Grid","HemisphereLightStage","Hands","MotionControllers","ContribLoader","Fragment","PlaybackStateProvider","TimelineStateProvider","PlaybackBar","TimelineFileDrop","Timeline","SidePanelView","children","useSceneStore","sceneOps","ops","Resizable","GraphView","Page","isSSR","queries","parsed","collapseMenu","Helmet","PlaybackProvider","WebSocketProvider","Leva"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
@@ -0,0 +1,2 @@
1
+ import{R as n,e as d,J as l,r as a,j as e,H as u,i as p,a as f,b as c,c as m}from"../chunks/chunk-D_MRHYMT.js";import{V as h,T as w,F as T,L as S,Z as y,A as g,W as x,n as E,f as P,g as j,H as v,h as R,M as A}from"../chunks/chunk-C6pZYLoD.js";import{X as U,D}from"../chunks/chunk-DUyeN413.js";import"../chunks/chunk-D7HrI6pR.js";const z="_main_ct6c1_1",V={main:z};typeof window<"u"&&(window.React=n,window.ReactDOM=d,window.VUER=h,window.THREE=w,window.JSX=l,window.FIBER=T,window.XR=U,window.Drei=D,window.LEVA=S,window.ZUSTAND=y);function b(){return e.jsx(E,{bgChildren:[e.jsx(j,{_key:"grid"},"grid"),e.jsx(v,{},"default-light-stage"),e.jsx(R,{},"hands"),e.jsx(A,{fps:30,stream:!0},"motion-controllers")],children:e.jsx(P,{_key:"contrib-loader-mujoco",library:"@vuer-ai/mujoco-ts",version:"0.0.60",main:"dist/index.umd.js"})})}function H(){const s=typeof window>"u",[{message:C,mtype:M},t]=a.useState({message:null,mtype:null});a.useEffect(()=>{const o=console.error;return()=>{console.error=o}},[]),a.useEffect(()=>{const o=console.warn;return console.warn=r=>{setTimeout(()=>{t({message:r,mtype:"warning"}),console.log(r)},1)},()=>{console.warn=o}},[]);const i=a.useMemo(()=>({showError:o=>setTimeout(()=>t({message:o,mtype:"error"}),1),showSuccess:o=>setTimeout(()=>t({message:o,mtype:"success"}),1),showWarning:o=>setTimeout(()=>t({message:o,mtype:"warning"}),1),showInfo:o=>setTimeout(()=>t({message:o,mtype:"info"}),1),showModal:o=>{console.log(o)}}),[]);return e.jsxs(e.Fragment,{children:[e.jsx(u,{children:e.jsx("title",{children:"Vuer (Technical Preview)"})}),e.jsx("main",{className:V.main,children:e.jsx(g,{value:i,children:s?null:e.jsx(x,{children:e.jsx(b,{})})})})]})}const _=Object.freeze(Object.defineProperty({__proto__:null,default:H},Symbol.toStringTag,{value:"Module"})),F={onBeforeRenderEnv:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:null}},dataEnv:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:null}},hydrationCanBeAborted:{type:"standard",definedAtData:{filePathToShowToUser:"/renderer/+config.ts",fileExportPathToShowToUser:["default","hydrationCanBeAborted"]},valueSerialized:{type:"js-serialized",value:!0}},hooksTimeout:{type:"standard",definedAtData:{filePathToShowToUser:"/renderer/+config.ts",fileExportPathToShowToUser:["default","hooksTimeout"]},valueSerialized:{type:"js-serialized",value:{data:{error:3e4,warning:1e4}}}},onHydrationEnd:{type:"standard",definedAtData:{filePathToShowToUser:"/renderer/+onHydrationEnd.ts",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:m}},onPageTransitionEnd:{type:"standard",definedAtData:{filePathToShowToUser:"/renderer/+onPageTransitionEnd.ts",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:c}},onPageTransitionStart:{type:"standard",definedAtData:{filePathToShowToUser:"/renderer/+onPageTransitionStart.ts",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:f}},onRenderClient:{type:"standard",definedAtData:{filePathToShowToUser:"/renderer/+onRenderClient.tsx",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:p}},Page:{type:"standard",definedAtData:{filePathToShowToUser:"/pages/index/+Page.tsx",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:_}}};export{F as configValuesSerialized};
2
+ //# sourceMappingURL=pages_index.DYUEXAWY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages_index.DYUEXAWY.js","sources":["../../../../pages/index/+Page.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from 'react';\nimport { Helmet } from '@vuer-ai/react-helmet-async';\n// import { ClickAwayListener, useSnackbar } from '@mui/base';\n// import {\n// InfoSnackbar,\n// Snackbars,\n// SuccessSnackbar,\n// WarningSnackbar,\n// } from './_components/snackbars';\nimport style from './index.module.scss';\nimport * as VUER from '@vuer-ai/vuer';\nimport {\n AppProvider,\n ContribLoader,\n Grid,\n Hands,\n HemisphereLightStage,\n MotionControllers,\n VuerRoot,\n WebSocketProvider,\n} from '@vuer-ai/vuer';\nimport ReactDOM from 'react-dom';\nimport * as THREE from 'three';\nimport * as JSX from 'react/jsx-runtime';\nimport * as FIBER from '@react-three/fiber';\nimport * as Drei from '@react-three/drei';\nimport * as XR from '@react-three/xr';\nimport * as LEVA from 'leva';\nimport * as ZUSTAND from 'zustand';\n\n// import { entrypoint } from '@vuer-ai/mujoco-ts';\n//\n// console.log('calling the mujoco-ts entrypoint', entrypoint);\n// entrypoint();\n\ndeclare global {\n interface Window {\n React: typeof React;\n ReactDOM: typeof ReactDOM;\n VUER: typeof VUER;\n THREE: typeof THREE;\n JSX: typeof JSX;\n FIBER: typeof FIBER;\n XR: typeof XR;\n Drei: typeof Drei;\n }\n}\n\nif (typeof window !== 'undefined') {\n window.React = React;\n window.ReactDOM = ReactDOM;\n window.VUER = VUER;\n window.THREE = THREE;\n window.JSX = JSX;\n window.FIBER = FIBER;\n window.XR = XR;\n window.Drei = Drei;\n window.LEVA = LEVA;\n window.ZUSTAND = ZUSTAND;\n}\n\ntype MTypes = 'error' | 'warning' | 'success' | 'info';\ntype StateT = {\n message?: string | null;\n mtype?: MTypes | null;\n};\n\nfunction AppView() {\n return (\n <VuerRoot\n bgChildren={[\n <Grid key='grid' _key='grid' />,\n <HemisphereLightStage key='default-light-stage' />,\n <Hands key='hands' />,\n <MotionControllers key='motion-controllers' fps={30} stream />,\n ]}\n >\n <ContribLoader\n _key='contrib-loader-mujoco'\n // prodOnly\n library='@vuer-ai/mujoco-ts'\n version='0.0.60'\n main='dist/index.umd.js'\n />\n </VuerRoot>\n );\n}\n\nfunction Page() {\n const isSSR = typeof window === 'undefined';\n const [{ message, mtype }, setState] = useState({\n message: null,\n mtype: null,\n } as StateT);\n\n // const { getRootProps, onClickAway } = useSnackbar({\n // onClose: () => {\n // setState({ message: null, mtype: null });\n // },\n // open: !!message,\n // autoHideDuration: 5000,\n // });\n\n useEffect(() => {\n const oldError = console.error;\n // console.error = (err) => {\n // setTimeout(() => {\n // setState({ message: err, mtype: \"error\" });\n // console.log(err);\n // }, 1)\n // };\n return () => {\n console.error = oldError;\n };\n }, []);\n\n useEffect(() => {\n const oldWarn = console.warn;\n console.warn = (err) => {\n setTimeout(() => {\n setState({ message: err, mtype: 'warning' });\n console.log(err);\n }, 1);\n };\n return () => {\n console.warn = oldWarn;\n };\n }, []);\n\n const context = useMemo(\n () => ({\n showError: (message: string) => setTimeout(() => setState({ message, mtype: 'error' }), 1),\n showSuccess: (message: string) => setTimeout(() => setState({ message, mtype: 'success' }), 1),\n showWarning: (message: string) => setTimeout(() => setState({ message, mtype: 'warning' }), 1),\n showInfo: (message: string) => setTimeout(() => setState({ message, mtype: 'info' }), 1),\n showModal: (message: string) => {\n console.log(message);\n },\n }),\n [],\n );\n\n // function render({ message, mtype }: StateT) {\n // switch (mtype) {\n // case 'error':\n // return <Snackbars {...getRootProps()}>ERROR: {message}</Snackbars>;\n // case 'warning':\n // return (\n // <WarningSnackbar {...getRootProps()}>\n // WARNING: {message}\n // </WarningSnackbar>\n // );\n // case 'success':\n // return (\n // <SuccessSnackbar {...getRootProps()}>\n // SUCCESS: {message}\n // </SuccessSnackbar>\n // );\n // case 'info':\n // default:\n // return <InfoSnackbar {...getRootProps()}>INFO: {message}</InfoSnackbar>;\n // }\n // }\n\n // if (isSSR) return null;\n return (\n <>\n <Helmet>\n <title>Vuer (Technical Preview)</title>\n </Helmet>\n <main className={style.main}>\n {/*{message ? (*/}\n {/* <ClickAwayListener onClickAway={onClickAway}>*/}\n {/* {render({ message, mtype })}*/}\n {/* </ClickAwayListener>*/}\n {/*) : null}*/}\n {/*<Suspense fallback={<div>Loading...</div>}>*/}\n <AppProvider value={context}>\n {!isSSR ? (\n <WebSocketProvider>\n <AppView />\n </WebSocketProvider>\n ) : null}\n </AppProvider>\n {/*</Suspense>*/}\n </main>\n </>\n );\n}\n\nexport default Page;\n"],"names":["React","ReactDOM","VUER","THREE","JSX","FIBER","XR","Drei","LEVA","ZUSTAND","AppView","jsx","VuerRoot","Grid","HemisphereLightStage","Hands","MotionControllers","ContribLoader","Page","isSSR","message","mtype","setState","useState","useEffect","oldError","oldWarn","err","context","useMemo","jsxs","Fragment","Helmet","style","AppProvider","WebSocketProvider"],"mappings":"4WAgDI,OAAO,OAAW,MACpB,OAAO,MAAQA,EACf,OAAO,SAAWC,EAClB,OAAO,KAAOC,EACd,OAAO,MAAQC,EACf,OAAO,IAAMC,EACb,OAAO,MAAQC,EACf,OAAO,GAAKC,EACZ,OAAO,KAAOC,EACd,OAAO,KAAOC,EACd,OAAO,QAAUC,GASnB,SAASC,GAAU,CAEf,OAAAC,EAAA,IAACC,EAAA,CACC,WAAY,CACTD,EAAAA,IAAAE,EAAA,CAAgB,KAAK,MAAA,EAAZ,MAAmB,EAC7BF,MAACG,KAAyB,qBAAsB,EAChDH,MAACI,KAAU,OAAQ,QAClBC,EAA2C,CAAA,IAAK,GAAI,OAAM,IAApC,oBAAqC,CAC9D,EAEA,SAAAL,EAAA,IAACM,EAAA,CACC,KAAK,wBAEL,QAAQ,qBACR,QAAQ,SACR,KAAK,mBAAA,CAAA,CACP,CACF,CAEJ,CAEA,SAASC,GAAO,CACR,MAAAC,EAAQ,OAAO,OAAW,IAC1B,CAAC,CAAE,QAAAC,EAAS,MAAAC,CAAS,EAAAC,CAAQ,EAAIC,EAAAA,SAAS,CAC9C,QAAS,KACT,MAAO,IAAA,CACE,EAUXC,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAW,QAAQ,MAOzB,MAAO,IAAM,CACX,QAAQ,MAAQA,CAClB,CACF,EAAG,EAAE,EAELD,EAAAA,UAAU,IAAM,CACd,MAAME,EAAU,QAAQ,KAChB,eAAA,KAAQC,GAAQ,CACtB,WAAW,IAAM,CACfL,EAAS,CAAE,QAASK,EAAK,MAAO,UAAW,EAC3C,QAAQ,IAAIA,CAAG,GACd,CAAC,CACN,EACO,IAAM,CACX,QAAQ,KAAOD,CACjB,CACF,EAAG,EAAE,EAEL,MAAME,EAAUC,EAAA,QACd,KAAO,CACL,UAAYT,GAAoB,WAAW,IAAME,EAAS,CAAE,QAAAF,EAAS,MAAO,OAAS,CAAA,EAAG,CAAC,EACzF,YAAcA,GAAoB,WAAW,IAAME,EAAS,CAAE,QAAAF,EAAS,MAAO,SAAW,CAAA,EAAG,CAAC,EAC7F,YAAcA,GAAoB,WAAW,IAAME,EAAS,CAAE,QAAAF,EAAS,MAAO,SAAW,CAAA,EAAG,CAAC,EAC7F,SAAWA,GAAoB,WAAW,IAAME,EAAS,CAAE,QAAAF,EAAS,MAAO,MAAQ,CAAA,EAAG,CAAC,EACvF,UAAYA,GAAoB,CAC9B,QAAQ,IAAIA,CAAO,CAAA,CACrB,GAEF,CAAA,CACF,EAyBA,OAEIU,EAAA,KAAAC,WAAA,CAAA,SAAA,CAAApB,MAACqB,EACC,CAAA,SAAArB,EAAA,IAAC,QAAM,CAAA,SAAA,0BAAwB,CAAA,EACjC,QACC,OAAK,CAAA,UAAWsB,EAAM,KAOrB,SAAAtB,MAACuB,GAAY,MAAON,EACjB,SAACT,EAIE,WAHDgB,EACC,CAAA,SAAAxB,EAAAA,IAACD,IAAQ,CACX,CAAA,CAEJ,CAAA,CAEF,CAAA,CAAA,EACF,CAEJ"}
@@ -0,0 +1,2 @@
1
+ import{R as a,e as o,J as i,j as e,H as r,i as n,a as s,b as d,c as l}from"../chunks/chunk-D_MRHYMT.js";import{V as p,T as u,F as f,L as h,Z as w,W as S,a as c,c as T,S as x,e as m,f as y,g as j,H as g,h as E,M as P}from"../chunks/chunk-C6pZYLoD.js";import{X as v,D}from"../chunks/chunk-DUyeN413.js";import"../chunks/chunk-D7HrI6pR.js";typeof window<"u"&&(window.React=a,window.ReactDOM=o,window.VUER=p,window.THREE=u,window.JSX=i,window.FIBER=f,window.XR=v,window.Drei=D,window.LEVA=h,window.ZUSTAND=w);function R(){const{downlink:t}=T();return e.jsx(x,{stream:t,style:{display:"flex",flexDirection:"row"},innerStyle:{display:"flex",flexDirection:"row"},children:e.jsx(m,{stream:t,editMode:!0,bgChildren:[e.jsx(j,{_key:"grid"},"grid"),e.jsx(g,{},"default-light-stage"),e.jsx(E,{},"hands"),e.jsx(P,{fps:30,stream:!0},"motion-controllers")],children:e.jsx(y,{_key:"contrib-loader-mujoco",library:"@vuer-ai/mujoco-ts",version:"0.0.60",main:"dist/index.umd.js"})})})}function U(){const t=typeof window>"u";return t?null:e.jsxs(e.Fragment,{children:[e.jsx(r,{children:e.jsx("title",{children:"Vuer Studio"})}),e.jsx("main",{className:"studio-page h-screen w-screen overflow-hidden",children:t?null:e.jsxs(S,{children:[e.jsx(R,{}),e.jsx(c,{theme:{sizes:{rootWidth:"380px",controlWidth:"200px",numberInputMinWidth:"56px"}}})]})})]})}const z=Object.freeze(Object.defineProperty({__proto__:null,default:U},Symbol.toStringTag,{value:"Module"})),H={onBeforeRenderEnv:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:null}},dataEnv:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:null}},hydrationCanBeAborted:{type:"standard",definedAtData:{filePathToShowToUser:"/renderer/+config.ts",fileExportPathToShowToUser:["default","hydrationCanBeAborted"]},valueSerialized:{type:"js-serialized",value:!0}},hooksTimeout:{type:"standard",definedAtData:{filePathToShowToUser:"/renderer/+config.ts",fileExportPathToShowToUser:["default","hooksTimeout"]},valueSerialized:{type:"js-serialized",value:{data:{error:3e4,warning:1e4}}}},onHydrationEnd:{type:"standard",definedAtData:{filePathToShowToUser:"/renderer/+onHydrationEnd.ts",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:l}},onPageTransitionEnd:{type:"standard",definedAtData:{filePathToShowToUser:"/renderer/+onPageTransitionEnd.ts",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:d}},onPageTransitionStart:{type:"standard",definedAtData:{filePathToShowToUser:"/renderer/+onPageTransitionStart.ts",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:s}},onRenderClient:{type:"standard",definedAtData:{filePathToShowToUser:"/renderer/+onRenderClient.tsx",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:n}},Page:{type:"standard",definedAtData:{filePathToShowToUser:"/pages/studio/+Page.tsx",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:z}}};export{H as configValuesSerialized};
2
+ //# sourceMappingURL=pages_studio.B9ofAf4Z.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages_studio.B9ofAf4Z.js","sources":["../../../../pages/studio/+Page.tsx"],"sourcesContent":["import {\n WebSocketProvider,\n Grid,\n HemisphereLightStage,\n Hands,\n MotionControllers,\n ContribLoader,\n SceneContainer,\n SceneFileDropContainer,\n useSocket,\n} from '@vuer-ai/vuer';\nimport { Helmet } from '@vuer-ai/react-helmet-async';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport * as VUER from '@vuer-ai/vuer';\nimport * as THREE from 'three';\nimport * as JSX from 'react/jsx-runtime';\nimport * as FIBER from '@react-three/fiber';\nimport * as XR from '@react-three/xr';\nimport * as Drei from '@react-three/drei';\nimport * as LEVA from 'leva';\nimport * as ZUSTAND from 'zustand/index';\nimport { Leva } from 'leva';\n\ndeclare global {\n interface Window {\n React: typeof React;\n ReactDOM: typeof ReactDOM;\n VUER: typeof VUER;\n THREE: typeof THREE;\n JSX: typeof JSX;\n FIBER: typeof FIBER;\n XR: typeof XR;\n Drei: typeof Drei;\n }\n}\n\nif (typeof window !== 'undefined') {\n window.React = React;\n window.ReactDOM = ReactDOM;\n window.VUER = VUER;\n window.THREE = THREE;\n window.JSX = JSX;\n window.FIBER = FIBER;\n window.XR = XR;\n window.Drei = Drei;\n window.LEVA = LEVA;\n window.ZUSTAND = ZUSTAND;\n}\n\nfunction MainView() {\n const { downlink } = useSocket();\n\n return (\n <SceneFileDropContainer\n stream={downlink}\n style={{\n display: 'flex',\n flexDirection: 'row',\n }}\n innerStyle={{\n display: 'flex',\n flexDirection: 'row',\n }}\n >\n <SceneContainer\n stream={downlink}\n editMode={true}\n bgChildren={[\n <Grid key='grid' _key='grid' />,\n <HemisphereLightStage key='default-light-stage' />,\n <Hands key='hands' />,\n <MotionControllers key='motion-controllers' fps={30} stream />,\n ]}\n >\n <ContribLoader\n _key='contrib-loader-mujoco'\n // prodOnly\n library='@vuer-ai/mujoco-ts'\n version='0.0.60'\n main='dist/index.umd.js'\n />\n </SceneContainer>\n </SceneFileDropContainer>\n );\n}\n\nfunction Page() {\n const isSSR = typeof window === 'undefined';\n\n if (isSSR) return null;\n\n return (\n <>\n <Helmet>\n <title>Vuer Studio</title>\n </Helmet>\n <main className={'studio-page h-screen w-screen overflow-hidden'}>\n {!isSSR ? (\n <WebSocketProvider>\n <MainView />\n <Leva\n theme={{\n sizes: {\n rootWidth: '380px',\n controlWidth: '200px',\n numberInputMinWidth: '56px',\n },\n }}\n />\n </WebSocketProvider>\n ) : null}\n </main>\n </>\n );\n}\n\nexport default Page;\n"],"names":["React","ReactDOM","VUER","THREE","JSX","FIBER","XR","Drei","LEVA","ZUSTAND","MainView","downlink","useSocket","jsx","SceneFileDropContainer","SceneContainer","Grid","HemisphereLightStage","Hands","MotionControllers","ContribLoader","Page","isSSR","jsxs","Fragment","Helmet","WebSocketProvider","Leva"],"mappings":"gVAqCI,OAAO,OAAW,MACpB,OAAO,MAAQA,EACf,OAAO,SAAWC,EAClB,OAAO,KAAOC,EACd,OAAO,MAAQC,EACf,OAAO,IAAMC,EACb,OAAO,MAAQC,EACf,OAAO,GAAKC,EACZ,OAAO,KAAOC,EACd,OAAO,KAAOC,EACd,OAAO,QAAUC,GAGnB,SAASC,GAAW,CACZ,KAAA,CAAE,SAAAC,CAAS,EAAIC,EAAU,EAG7B,OAAAC,EAAA,IAACC,EAAA,CACC,OAAQH,EACR,MAAO,CACL,QAAS,OACT,cAAe,KACjB,EACA,WAAY,CACV,QAAS,OACT,cAAe,KACjB,EAEA,SAAAE,EAAA,IAACE,EAAA,CACC,OAAQJ,EACR,SAAU,GACV,WAAY,CACTE,EAAAA,IAAAG,EAAA,CAAgB,KAAK,MAAA,EAAZ,MAAmB,EAC7BH,MAACI,KAAyB,qBAAsB,EAChDJ,MAACK,KAAU,OAAQ,QAClBC,EAA2C,CAAA,IAAK,GAAI,OAAM,IAApC,oBAAqC,CAC9D,EAEA,SAAAN,EAAA,IAACO,EAAA,CACC,KAAK,wBAEL,QAAQ,qBACR,QAAQ,SACR,KAAK,mBAAA,CAAA,CACP,CAAA,CACF,CACF,CAEJ,CAEA,SAASC,GAAO,CACR,MAAAC,EAAQ,OAAO,OAAW,IAEhC,OAAIA,EAAc,KAIdC,EAAA,KAAAC,WAAA,CAAA,SAAA,CAAAX,MAACY,EACC,CAAA,SAAAZ,EAAA,IAAC,QAAM,CAAA,SAAA,aAAW,CAAA,EACpB,QACC,OAAK,CAAA,UAAW,gDACd,SAACS,EAaE,YAZDI,EACC,CAAA,SAAA,CAAAb,EAAA,IAACH,EAAS,EAAA,EACVG,EAAA,IAACc,EAAA,CACC,MAAO,CACL,MAAO,CACL,UAAW,QACX,aAAc,QACd,oBAAqB,MAAA,CACvB,CACF,CAAA,CACF,CACF,CAAA,CAEJ,CAAA,CAAA,EACF,CAEJ"}
@@ -8,8 +8,8 @@
8
8
  <body>
9
9
  <div id="react-root"></div>
10
10
  <script id="vike_pageContext" type="application/json">{"someAsyncProps":42,"abortReason":"!undefined","_urlRewrite":null,"_urlRedirect":"!undefined","abortStatusCode":"!undefined","_abortCall":"!undefined","_pageContextInitIsPassedToClient":"!undefined","_pageId":"/pages/editor","routeParams":{},"data":"!undefined"}</script>
11
- <script src="/assets/entries/entry-client-routing.Cx9W0mvP.js" type="module" async></script>
12
- <link rel="modulepreload" href="/assets/entries/pages_editor.7R7rDGmk.js" as="script" type="text/javascript">
11
+ <script src="/assets/entries/entry-client-routing.ElPgRW9J.js" type="module" async></script>
12
+ <link rel="modulepreload" href="/assets/entries/pages_editor.DTJ44V1M.js" as="script" type="text/javascript">
13
13
  <link rel="modulepreload" href="/assets/chunks/chunk-D_MRHYMT.js" as="script" type="text/javascript">
14
14
  <link rel="modulepreload" href="/assets/chunks/chunk-C6pZYLoD.js" as="script" type="text/javascript">
15
15
  <link rel="modulepreload" href="/assets/chunks/chunk-D7HrI6pR.js" as="script" type="text/javascript">
@@ -8,8 +8,8 @@
8
8
  <body>
9
9
  <div id="react-root"><main class="_main_ct6c1_1"></main></div>
10
10
  <script id="vike_pageContext" type="application/json">{"someAsyncProps":42,"abortReason":"!undefined","_urlRewrite":null,"_urlRedirect":"!undefined","abortStatusCode":"!undefined","_abortCall":"!undefined","_pageContextInitIsPassedToClient":"!undefined","_pageId":"/pages/index","routeParams":{},"data":"!undefined"}</script>
11
- <script src="/assets/entries/entry-client-routing.Cx9W0mvP.js" type="module" async></script>
12
- <link rel="modulepreload" href="/assets/entries/pages_index.C3IpDS73.js" as="script" type="text/javascript">
11
+ <script src="/assets/entries/entry-client-routing.ElPgRW9J.js" type="module" async></script>
12
+ <link rel="modulepreload" href="/assets/entries/pages_index.DYUEXAWY.js" as="script" type="text/javascript">
13
13
  <link rel="modulepreload" href="/assets/chunks/chunk-D_MRHYMT.js" as="script" type="text/javascript">
14
14
  <link rel="modulepreload" href="/assets/chunks/chunk-C6pZYLoD.js" as="script" type="text/javascript">
15
15
  <link rel="modulepreload" href="/assets/chunks/chunk-D7HrI6pR.js" as="script" type="text/javascript">
@@ -7,7 +7,7 @@
7
7
  <body>
8
8
  <div id="react-root"><main><!--$--><div><h1 class="_listName_1s0ny_1">Simple Component</h1><p>This is cool!</p></div><!--/$--></main></div>
9
9
  <script id="vike_pageContext" type="application/json">{"someAsyncProps":42,"abortReason":"!undefined","_urlRewrite":null,"_urlRedirect":"!undefined","abortStatusCode":"!undefined","_abortCall":"!undefined","_pageContextInitIsPassedToClient":"!undefined","_pageId":"/pages/simple","routeParams":{},"data":"!undefined"}</script>
10
- <script src="/assets/entries/entry-client-routing.Cx9W0mvP.js" type="module" async></script>
10
+ <script src="/assets/entries/entry-client-routing.ElPgRW9J.js" type="module" async></script>
11
11
  <link rel="modulepreload" href="/assets/entries/pages_simple.Bic9vm0Z.js" as="script" type="text/javascript">
12
12
  <link rel="modulepreload" href="/assets/chunks/chunk-D_MRHYMT.js" as="script" type="text/javascript">
13
13
  <link rel="modulepreload" href="/assets/chunks/chunk-C6pZYLoD.js" as="script" type="text/javascript">
@@ -7,8 +7,8 @@
7
7
  <body>
8
8
  <div id="react-root"></div>
9
9
  <script id="vike_pageContext" type="application/json">{"someAsyncProps":42,"abortReason":"!undefined","_urlRewrite":null,"_urlRedirect":"!undefined","abortStatusCode":"!undefined","_abortCall":"!undefined","_pageContextInitIsPassedToClient":"!undefined","_pageId":"/pages/studio","routeParams":{},"data":"!undefined"}</script>
10
- <script src="/assets/entries/entry-client-routing.Cx9W0mvP.js" type="module" async></script>
11
- <link rel="modulepreload" href="/assets/entries/pages_studio.BNbFnXTD.js" as="script" type="text/javascript">
10
+ <script src="/assets/entries/entry-client-routing.ElPgRW9J.js" type="module" async></script>
11
+ <link rel="modulepreload" href="/assets/entries/pages_studio.B9ofAf4Z.js" as="script" type="text/javascript">
12
12
  <link rel="modulepreload" href="/assets/chunks/chunk-D_MRHYMT.js" as="script" type="text/javascript">
13
13
  <link rel="modulepreload" href="/assets/chunks/chunk-C6pZYLoD.js" as="script" type="text/javascript">
14
14
  <link rel="modulepreload" href="/assets/chunks/chunk-D7HrI6pR.js" as="script" type="text/javascript">
vuer/schemas/__init__.py CHANGED
@@ -2,4 +2,5 @@ from .html_components import *
2
2
  from .scene_components import *
3
3
  from .drei_components import *
4
4
  from .physics_components import *
5
+ from .material_components import *
5
6
  from .vuer_components import *
@@ -6,6 +6,7 @@ from vuer.serdes import IMAGE_FORMATS
6
6
 
7
7
  element_count = 0
8
8
 
9
+ _UNSET = object()
9
10
 
10
11
  class Element:
11
12
  """
@@ -23,8 +24,10 @@ class Element:
23
24
  key = str(element_count)
24
25
  element_count += 1
25
26
 
26
- self.__dict__.update(tag=self.tag, key=key, **kwargs)
27
- self.__post_init__(**{k: v for k, v in kwargs.items() if k.startswith("_")})
27
+ clean_kwargs = {k: v for k, v in kwargs.items() if v is not _UNSET}
28
+
29
+ self.__dict__.update(tag=self.tag, key=key, **clean_kwargs)
30
+ self.__post_init__(**{k: v for k, v in clean_kwargs.items() if k.startswith("_")})
28
31
 
29
32
  def serialize(self):
30
33
  """
@@ -45,7 +48,6 @@ class Element:
45
48
 
46
49
  return output
47
50
 
48
-
49
51
  class BlockElement(Element):
50
52
  def __init__(self, *children, **kwargs):
51
53
  self.children = children
@@ -0,0 +1,127 @@
1
+ from .html_components import Element
2
+
3
+
4
+ class LineBasicMaterial(Element):
5
+ tag = "lineBasicMaterial"
6
+
7
+ def __init__(self, **kwargs):
8
+ super().__init__(**kwargs)
9
+
10
+
11
+ class LineDashedMaterial(Element):
12
+ tag = "lineDashedMaterial"
13
+
14
+ def __init__(self, **kwargs):
15
+ super().__init__(**kwargs)
16
+
17
+
18
+ class Material(Element):
19
+ tag = "material"
20
+
21
+ def __init__(self, **kwargs):
22
+ super().__init__(**kwargs)
23
+
24
+
25
+ class MeshBasicMaterial(Element):
26
+ tag = "meshBasicMaterial"
27
+
28
+ def __init__(self, **kwargs):
29
+ super().__init__(**kwargs)
30
+
31
+
32
+ class MeshDepthMaterial(Element):
33
+ tag = "meshDepthMaterial"
34
+
35
+ def __init__(self, **kwargs):
36
+ super().__init__(**kwargs)
37
+
38
+
39
+ class MeshDistanceMaterial(Element):
40
+ tag = "meshDistanceMaterial"
41
+
42
+ def __init__(self, **kwargs):
43
+ super().__init__(**kwargs)
44
+
45
+
46
+ class MeshLambertMaterial(Element):
47
+ tag = "meshLambertMaterial"
48
+
49
+ def __init__(self, **kwargs):
50
+ super().__init__(**kwargs)
51
+
52
+
53
+ class MeshMatcapMaterial(Element):
54
+ tag = "meshMatcapMaterial"
55
+
56
+ def __init__(self, **kwargs):
57
+ super().__init__(**kwargs)
58
+
59
+
60
+ class MeshNormalMaterial(Element):
61
+ tag = "meshNormalMaterial"
62
+
63
+ def __init__(self, **kwargs):
64
+ super().__init__(**kwargs)
65
+
66
+
67
+ class MeshPhongMaterial(Element):
68
+ tag = "meshPhongMaterial"
69
+
70
+ def __init__(self, **kwargs):
71
+ super().__init__(**kwargs)
72
+
73
+
74
+ class MeshPhysicalMaterial(Element):
75
+ tag = "meshPhysicalMaterial"
76
+
77
+ def __init__(self, **kwargs):
78
+ super().__init__(**kwargs)
79
+
80
+
81
+ class MeshStandardMaterial(Element):
82
+ tag = "meshStandardMaterial"
83
+
84
+ def __init__(self, **kwargs):
85
+ super().__init__(**kwargs)
86
+
87
+
88
+ class MeshToonMaterial(Element):
89
+ tag = "meshToonMaterial"
90
+
91
+ def __init__(self, **kwargs):
92
+ super().__init__(**kwargs)
93
+
94
+
95
+ class PointsMaterial(Element):
96
+ tag = "pointsMaterial"
97
+
98
+ def __init__(self, **kwargs):
99
+ super().__init__(**kwargs)
100
+
101
+
102
+ class RawShaderMaterial(Element):
103
+ tag = "rawShaderMaterial"
104
+
105
+ def __init__(self, **kwargs):
106
+ super().__init__(**kwargs)
107
+
108
+
109
+ class ShaderMaterial(Element):
110
+ tag = "shaderMaterial"
111
+
112
+ def __init__(self, **kwargs):
113
+ super().__init__(**kwargs)
114
+
115
+
116
+ class ShadowMaterial(Element):
117
+ tag = "shadowMaterial"
118
+
119
+ def __init__(self, **kwargs):
120
+ super().__init__(**kwargs)
121
+
122
+
123
+ class SpriteMaterial(Element):
124
+ tag = "spriteMaterial"
125
+
126
+ def __init__(self, **kwargs):
127
+ super().__init__(**kwargs)
@@ -1,9 +1,9 @@
1
- from typing import List, Literal
1
+ from typing import List, Literal, Optional, Union
2
2
 
3
3
  import numpy as np
4
4
  from numpy.typing import NDArray
5
5
 
6
- from .html_components import BlockElement, Element, Image
6
+ from .html_components import BlockElement, Element, Image, _UNSET
7
7
 
8
8
 
9
9
  class SceneElement(BlockElement):
@@ -995,6 +995,186 @@ class Center(SceneElement):
995
995
 
996
996
  tag = "Center"
997
997
 
998
+ class Billboard(SceneElement):
999
+ """
1000
+ Renders its children as a billboard that always faces the camera.
1001
+
1002
+ :param follow: Whether the billboard should follow the camera position (default: True)
1003
+ :type follow: bool, optional
1004
+ :param lockX: Lock rotation on the X axis (default: False)
1005
+ :type lockX: bool, optional
1006
+ :param lockY: Lock rotation on the Y axis (default: False)
1007
+ :type lockY: bool, optional
1008
+ :param lockZ: Lock rotation on the Z axis (default: False)
1009
+ :type lockZ: bool, optional
1010
+
1011
+ Example Usage::
1012
+
1013
+ Billboard(
1014
+ follow=True,
1015
+ lockX=False,
1016
+ lockY=True,
1017
+ children=[mesh]
1018
+ )
1019
+ """
1020
+ tag = "Billboard"
1021
+
1022
+ def __init__(
1023
+ self,
1024
+ *children,
1025
+ follow: bool = True,
1026
+ lockX: bool = False,
1027
+ lockY: bool = False,
1028
+ lockZ: bool = False,
1029
+ **kwargs
1030
+ ):
1031
+ super().__init__(
1032
+ *children,
1033
+ follow=follow,
1034
+ lockX=lockX,
1035
+ lockY=lockY,
1036
+ lockZ=lockZ,
1037
+ **kwargs
1038
+ )
1039
+
1040
+ class Text(SceneElement):
1041
+ """
1042
+ Renders 2D text in the scene with extensive styling and layout options.
1043
+
1044
+ :param children: The text content to render.
1045
+ :type children: str
1046
+ :param characters: Restrict the set of characters to use for glyph generation.
1047
+ :type characters: str, optional
1048
+ :param color: Text color.
1049
+ :type color: str, optional
1050
+ :param fontSize: Font size in world units.
1051
+ :type fontSize: float, optional
1052
+ :param fontWeight: Font weight (number or string, e.g. 'bold').
1053
+ :type fontWeight: int or str, optional
1054
+ :param fontStyle: Font style, either 'italic' or 'normal'.
1055
+ :type fontStyle: str, optional
1056
+ :param maxWidth: Maximum width of the text block before wrapping.
1057
+ :type maxWidth: float, optional
1058
+ :param lineHeight: Line height as a multiple of fontSize.
1059
+ :type lineHeight: float, optional
1060
+ :param letterSpacing: Additional spacing between letters.
1061
+ :type letterSpacing: float, optional
1062
+ :param textAlign: Text alignment: 'left', 'right', 'center', or 'justify'.
1063
+ :type textAlign: str, optional
1064
+ :param font: Font URL or name.
1065
+ :type font: str, optional
1066
+ :param anchorX: Horizontal anchor: number or 'left', 'center', 'right'.
1067
+ :type anchorX: float or str, optional
1068
+ :param anchorY: Vertical anchor: number or 'top', 'top-baseline', 'middle', 'bottom-baseline', 'bottom'.
1069
+ :type anchorY: float or str, optional
1070
+ :param clipRect: Rectangle [minX, minY, maxX, maxY] to clip text rendering.
1071
+ :type clipRect: list[float], optional
1072
+ :param depthOffset: Offset in Z to avoid z-fighting.
1073
+ :type depthOffset: float, optional
1074
+ :param direction: Text direction: 'auto', 'ltr', or 'rtl'.
1075
+ :type direction: str, optional
1076
+ :param overflowWrap: Wrapping behavior: 'normal' or 'break-word'.
1077
+ :type overflowWrap: str, optional
1078
+ :param whiteSpace: White space handling: 'normal', 'overflowWrap', or 'nowrap'.
1079
+ :type whiteSpace: str, optional
1080
+ :param outlineWidth: Outline width (number or string, e.g. '2px').
1081
+ :type outlineWidth: float or str, optional
1082
+ :param outlineOffsetX: Outline X offset (number or string).
1083
+ :type outlineOffsetX: float or str, optional
1084
+ :param outlineOffsetY: Outline Y offset (number or string).
1085
+ :type outlineOffsetY: float or str, optional
1086
+ :param outlineBlur: Outline blur radius (number or string).
1087
+ :type outlineBlur: float or str, optional
1088
+ :param outlineColor: Outline color.
1089
+ :type outlineColor: str, optional
1090
+ :param outlineOpacity: Outline opacity (0-1).
1091
+ :type outlineOpacity: float, optional
1092
+ :param strokeWidth: Stroke width (number or string).
1093
+ :type strokeWidth: float or str, optional
1094
+ :param strokeColor: Stroke color.
1095
+ :type strokeColor: str, optional
1096
+ :param strokeOpacity: Stroke opacity (0-1).
1097
+ :type strokeOpacity: float, optional
1098
+ :param fillOpacity: Fill opacity (0-1).
1099
+ :type fillOpacity: float, optional
1100
+ :param sdfGlyphSize: SDF glyph size for rendering quality.
1101
+ :type sdfGlyphSize: int, optional
1102
+ :param debugSDF: Show SDF debug overlay.
1103
+ :type debugSDF: bool, optional
1104
+ :param glyphGeometryDetail: Level of detail for glyph geometry.
1105
+ :type glyphGeometryDetail: int, optional
1106
+ """
1107
+ tag = "Text"
1108
+
1109
+ def __init__(
1110
+ self,
1111
+ *children,
1112
+ characters: Union[str, None, object] = _UNSET,
1113
+ color: Union[str, None, object] = _UNSET,
1114
+ fontSize: Union[float, None, object] = _UNSET,
1115
+ fontWeight: Union[int, str, None, object] = _UNSET,
1116
+ fontStyle: Union[str, None, object] = _UNSET,
1117
+ maxWidth: Union[float, None, object] = _UNSET,
1118
+ lineHeight: Union[float, None, object] = _UNSET,
1119
+ letterSpacing: Union[float, None, object] = _UNSET,
1120
+ textAlign: Union[str, None, object] = _UNSET,
1121
+ font: Union[str, None, object] = _UNSET,
1122
+ anchorX: Union[float, str, None, object] = _UNSET,
1123
+ anchorY: Union[float, str, None, object] = _UNSET,
1124
+ clipRect: Union[list, None, object] = _UNSET,
1125
+ depthOffset: Union[float, None, object] = _UNSET,
1126
+ direction: Union[str, None, object] = _UNSET,
1127
+ overflowWrap: Union[str, None, object] = _UNSET,
1128
+ whiteSpace: Union[str, None, object] = _UNSET,
1129
+ outlineWidth: Union[float, str, None, object] = _UNSET,
1130
+ outlineOffsetX: Union[float, str, None, object] = _UNSET,
1131
+ outlineOffsetY: Union[float, str, None, object] = _UNSET,
1132
+ outlineBlur: Union[float, str, None, object] = _UNSET,
1133
+ outlineColor: Union[str, None, object] = _UNSET,
1134
+ outlineOpacity: Union[float, None, object] = _UNSET,
1135
+ strokeWidth: Union[float, str, None, object] = _UNSET,
1136
+ strokeColor: Union[str, None, object] = _UNSET,
1137
+ strokeOpacity: Union[float, None, object] = _UNSET,
1138
+ fillOpacity: Union[float, None, object] = _UNSET,
1139
+ sdfGlyphSize: Union[int, None, object] = _UNSET,
1140
+ debugSDF: Union[bool, None, object] = _UNSET,
1141
+ glyphGeometryDetail: Union[int, None, object] = _UNSET,
1142
+ **kwargs
1143
+ ):
1144
+ super().__init__(
1145
+ *children,
1146
+ characters=characters,
1147
+ color=color,
1148
+ fontSize=fontSize,
1149
+ fontWeight=fontWeight,
1150
+ fontStyle=fontStyle,
1151
+ maxWidth=maxWidth,
1152
+ lineHeight=lineHeight,
1153
+ letterSpacing=letterSpacing,
1154
+ textAlign=textAlign,
1155
+ font=font,
1156
+ anchorX=anchorX,
1157
+ anchorY=anchorY,
1158
+ clipRect=clipRect,
1159
+ depthOffset=depthOffset,
1160
+ direction=direction,
1161
+ overflowWrap=overflowWrap,
1162
+ whiteSpace=whiteSpace,
1163
+ outlineWidth=outlineWidth,
1164
+ outlineOffsetX=outlineOffsetX,
1165
+ outlineOffsetY=outlineOffsetY,
1166
+ outlineBlur=outlineBlur,
1167
+ outlineColor=outlineColor,
1168
+ outlineOpacity=outlineOpacity,
1169
+ strokeWidth=strokeWidth,
1170
+ strokeColor=strokeColor,
1171
+ strokeOpacity=strokeOpacity,
1172
+ fillOpacity=fillOpacity,
1173
+ sdfGlyphSize=sdfGlyphSize,
1174
+ debugSDF=debugSDF,
1175
+ glyphGeometryDetail=glyphGeometryDetail,
1176
+ **kwargs
1177
+ )
998
1178
 
999
1179
  class Text3D(SceneElement):
1000
1180
  """Renders 3D text using ThreeJS's TextGeometry.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vuer
3
- Version: 0.0.66
3
+ Version: 0.0.67
4
4
  Home-page: https://github.com/vuer-ai/vuer
5
5
  Author: Ge Yang<ge.ike.yang@gmail.com>
6
6
  Author-email: ge.ike.yang@gmail.com