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.
- vuer/__pycache__/events.cpython-311.pyc +0 -0
- vuer/__pycache__/server.cpython-311.pyc +0 -0
- vuer/client_build/404.html +1 -1
- vuer/client_build/assets/entries/entry-client-routing.ElPgRW9J.js +5 -0
- vuer/client_build/assets/entries/entry-client-routing.ElPgRW9J.js.map +1 -0
- vuer/client_build/assets/entries/pages_editor.DTJ44V1M.js +2 -0
- vuer/client_build/assets/entries/pages_editor.DTJ44V1M.js.map +1 -0
- vuer/client_build/assets/entries/pages_index.DYUEXAWY.js +2 -0
- vuer/client_build/assets/entries/pages_index.DYUEXAWY.js.map +1 -0
- vuer/client_build/assets/entries/pages_studio.B9ofAf4Z.js +2 -0
- vuer/client_build/assets/entries/pages_studio.B9ofAf4Z.js.map +1 -0
- vuer/client_build/editor/index.html +2 -2
- vuer/client_build/index.html +2 -2
- vuer/client_build/simple/index.html +1 -1
- vuer/client_build/studio/index.html +2 -2
- vuer/schemas/__init__.py +1 -0
- vuer/schemas/__pycache__/__init__.cpython-311.pyc +0 -0
- vuer/schemas/__pycache__/html_components.cpython-311.pyc +0 -0
- vuer/schemas/__pycache__/material_components.cpython-311.pyc +0 -0
- vuer/schemas/__pycache__/scene_components.cpython-311.pyc +0 -0
- vuer/schemas/html_components.py +5 -3
- vuer/schemas/material_components.py +127 -0
- vuer/schemas/scene_components.py +182 -2
- {vuer-0.0.66.dist-info → vuer-0.0.67.dist-info}/METADATA +1 -1
- {vuer-0.0.66.dist-info → vuer-0.0.67.dist-info}/RECORD +29 -19
- {vuer-0.0.66.dist-info → vuer-0.0.67.dist-info}/WHEEL +0 -0
- {vuer-0.0.66.dist-info → vuer-0.0.67.dist-info}/entry_points.txt +0 -0
- {vuer-0.0.66.dist-info → vuer-0.0.67.dist-info}/licenses/LICENSE +0 -0
- {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":"4bAAA,MAAMA,EAAQ,eACRC,EAAgB,IAAI,OAAO,IAAMD,EAAQ,aAAc,IAAI,EAC3DE,EAAe,IAAI,OAAO,IAAMF,EAAQ,KAAM,IAAI,EAExD,SAASG,EAAiBC,EAAYC,EAAO,CAC5C,GAAI,CAEH,MAAO,CAAC,mBAAmBD,EAAW,KAAK,EAAE,CAAC,CAAC,CACjD,MAAS,CAET,CAEC,GAAIA,EAAW,SAAW,EACzB,OAAOA,EAGRC,EAAQA,GAAS,EAGjB,MAAMC,EAAOF,EAAW,MAAM,EAAGC,CAAK,EAChCE,EAAQH,EAAW,MAAMC,CAAK,EAEpC,OAAO,MAAM,UAAU,OAAO,KAAK,CAAA,EAAIF,EAAiBG,CAAI,EAAGH,EAAiBI,CAAK,CAAC,CACvF,CAEA,SAASC,GAAOC,EAAO,CACtB,GAAI,CACH,OAAO,mBAAmBA,CAAK,CACjC,MAAS,CACP,IAAIC,EAASD,EAAM,MAAMR,CAAa,GAAK,CAAE,EAE7C,QAASU,EAAI,EAAGA,EAAID,EAAO,OAAQC,IAClCF,EAAQN,EAAiBO,EAAQC,CAAC,EAAE,KAAK,EAAE,EAE3CD,EAASD,EAAM,MAAMR,CAAa,GAAK,CAAE,EAG1C,OAAOQ,CACT,CACA,CAEA,SAASG,GAAyBH,EAAO,CAExC,MAAMI,EAAa,CAClB,SAAU,KACV,SAAU,IACV,EAED,IAAIC,EAAQZ,EAAa,KAAKO,CAAK,EACnC,KAAOK,GAAO,CACb,GAAI,CAEHD,EAAWC,EAAM,CAAC,CAAC,EAAI,mBAAmBA,EAAM,CAAC,CAAC,CACrD,MAAU,CACP,MAAMC,EAASP,GAAOM,EAAM,CAAC,CAAC,EAE1BC,IAAWD,EAAM,CAAC,IACrBD,EAAWC,EAAM,CAAC,CAAC,EAAIC,EAE3B,CAEED,EAAQZ,EAAa,KAAKO,CAAK,CACjC,CAGCI,EAAW,KAAK,EAAI,IAEpB,MAAMG,EAAU,OAAO,KAAKH,CAAU,EAEtC,UAAWI,KAAOD,EAEjBP,EAAQA,EAAM,QAAQ,IAAI,OAAOQ,EAAK,GAAG,EAAGJ,EAAWI,CAAG,CAAC,EAG5D,OAAOR,CACR,CAEe,SAASS,GAAmBC,EAAY,CACtD,GAAI,OAAOA,GAAe,SACzB,MAAM,IAAI,UAAU,sDAAwD,OAAOA,EAAa,GAAG,EAGpG,GAAI,CAEH,OAAO,mBAAmBA,CAAU,CACtC,MAAS,CAEP,OAAOP,GAAyBO,CAAU,CAC5C,CACA,CCzFO,SAASC,GAAYC,EAAQC,EAAW,CAC9C,MAAMP,EAAS,CAAE,EAEjB,GAAI,MAAM,QAAQO,CAAS,EAC1B,UAAWL,KAAOK,EAAW,CAC5B,MAAMC,EAAa,OAAO,yBAAyBF,EAAQJ,CAAG,EAC1DM,GAAA,MAAAA,EAAY,YACf,OAAO,eAAeR,EAAQE,EAAKM,CAAU,CAEjD,KAGE,WAAWN,KAAO,QAAQ,QAAQI,CAAM,EAAG,CAC1C,MAAME,EAAa,OAAO,yBAAyBF,EAAQJ,CAAG,EAC9D,GAAIM,EAAW,WAAY,CAC1B,MAAMC,EAAQH,EAAOJ,CAAG,EACpBK,EAAUL,EAAKO,EAAOH,CAAM,GAC/B,OAAO,eAAeN,EAAQE,EAAKM,CAAU,CAElD,CACA,CAGC,OAAOR,CACR,CCxBe,SAASU,EAAaC,EAAQC,EAAW,CACvD,GAAI,EAAE,OAAOD,GAAW,UAAY,OAAOC,GAAc,UACxD,MAAM,IAAI,UAAU,+CAA+C,EAGpE,GAAID,IAAW,IAAMC,IAAc,GAClC,MAAO,CAAE,EAGV,MAAMC,EAAiBF,EAAO,QAAQC,CAAS,EAE/C,OAAIC,IAAmB,GACf,CAAE,EAGH,CACNF,EAAO,MAAM,EAAGE,CAAc,EAC9BF,EAAO,MAAME,EAAiBD,EAAU,MAAM,CAC9C,CACF,CCfA,MAAME,GAAoBL,GAASA,GAAU,KAGvCM,GAAkBJ,GAAU,mBAAmBA,CAAM,EAAE,WAAW,WAAYK,GAAK,IAAIA,EAAE,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE,YAAa,CAAA,EAAE,EAEnIC,EAA2B,OAAO,0BAA0B,EAElE,SAASC,GAAsBC,EAAS,CACvC,OAAQA,EAAQ,YAAW,CAC1B,IAAK,QACJ,OAAOjB,GAAO,CAACF,EAAQS,IAAU,CAChC,MAAMW,EAAQpB,EAAO,OAErB,OACCS,IAAU,QACNU,EAAQ,UAAYV,IAAU,MAC9BU,EAAQ,iBAAmBV,IAAU,GAElCT,EAGJS,IAAU,KACN,CACN,GAAGT,EAAQ,CAACqB,EAAOnB,EAAKiB,CAAO,EAAG,IAAKC,EAAO,GAAG,EAAE,KAAK,EAAE,CAC1D,EAGK,CACN,GAAGpB,EACH,CAACqB,EAAOnB,EAAKiB,CAAO,EAAG,IAAKE,EAAOD,EAAOD,CAAO,EAAG,KAAME,EAAOZ,EAAOU,CAAO,CAAC,EAAE,KAAK,EAAE,CACzF,CACD,EAGF,IAAK,UACJ,OAAOjB,GAAO,CAACF,EAAQS,IAErBA,IAAU,QACNU,EAAQ,UAAYV,IAAU,MAC9BU,EAAQ,iBAAmBV,IAAU,GAElCT,EAGJS,IAAU,KACN,CACN,GAAGT,EACH,CAACqB,EAAOnB,EAAKiB,CAAO,EAAG,IAAI,EAAE,KAAK,EAAE,CACpC,EAGK,CACN,GAAGnB,EACH,CAACqB,EAAOnB,EAAKiB,CAAO,EAAG,MAAOE,EAAOZ,EAAOU,CAAO,CAAC,EAAE,KAAK,EAAE,CAC7D,EAIH,IAAK,uBACJ,OAAOjB,GAAO,CAACF,EAAQS,IAErBA,IAAU,QACNU,EAAQ,UAAYV,IAAU,MAC9BU,EAAQ,iBAAmBV,IAAU,GAElCT,EAGJS,IAAU,KACN,CACN,GAAGT,EACH,CAACqB,EAAOnB,EAAKiB,CAAO,EAAG,QAAQ,EAAE,KAAK,EAAE,CACxC,EAGK,CACN,GAAGnB,EACH,CAACqB,EAAOnB,EAAKiB,CAAO,EAAG,SAAUE,EAAOZ,EAAOU,CAAO,CAAC,EAAE,KAAK,EAAE,CAChE,EAIH,IAAK,QACL,IAAK,YACL,IAAK,oBAAqB,CACzB,MAAMG,EAAoBH,EAAQ,cAAgB,oBAC/C,MACA,IAEH,OAAOjB,GAAO,CAACF,EAAQS,IAErBA,IAAU,QACNU,EAAQ,UAAYV,IAAU,MAC9BU,EAAQ,iBAAmBV,IAAU,GAElCT,GAIRS,EAAQA,IAAU,KAAO,GAAKA,EAE1BT,EAAO,SAAW,EACd,CAAC,CAACqB,EAAOnB,EAAKiB,CAAO,EAAGG,EAAmBD,EAAOZ,EAAOU,CAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAG5E,CAAC,CAACnB,EAAQqB,EAAOZ,EAAOU,CAAO,CAAC,EAAE,KAAKA,EAAQ,oBAAoB,CAAC,EAE/E,CAEE,QACC,OAAOjB,GAAO,CAACF,EAAQS,IAErBA,IAAU,QACNU,EAAQ,UAAYV,IAAU,MAC9BU,EAAQ,iBAAmBV,IAAU,GAElCT,EAGJS,IAAU,KACN,CACN,GAAGT,EACHqB,EAAOnB,EAAKiB,CAAO,CACnB,EAGK,CACN,GAAGnB,EACH,CAACqB,EAAOnB,EAAKiB,CAAO,EAAG,IAAKE,EAAOZ,EAAOU,CAAO,CAAC,EAAE,KAAK,EAAE,CAC3D,CAGL,CACA,CAEA,SAASI,GAAqBJ,EAAS,CACtC,IAAInB,EAEJ,OAAQmB,EAAQ,YAAW,CAC1B,IAAK,QACJ,MAAO,CAACjB,EAAKO,EAAOe,IAAgB,CAKnC,GAJAxB,EAAS,YAAY,KAAKE,CAAG,EAE7BA,EAAMA,EAAI,QAAQ,UAAW,EAAE,EAE3B,CAACF,EAAQ,CACZwB,EAAYtB,CAAG,EAAIO,EACnB,MACL,CAEQe,EAAYtB,CAAG,IAAM,SACxBsB,EAAYtB,CAAG,EAAI,CAAE,GAGtBsB,EAAYtB,CAAG,EAAEF,EAAO,CAAC,CAAC,EAAIS,CAC9B,EAGF,IAAK,UACJ,MAAO,CAACP,EAAKO,EAAOe,IAAgB,CAInC,GAHAxB,EAAS,SAAS,KAAKE,CAAG,EAC1BA,EAAMA,EAAI,QAAQ,OAAQ,EAAE,EAExB,CAACF,EAAQ,CACZwB,EAAYtB,CAAG,EAAIO,EACnB,MACL,CAEI,GAAIe,EAAYtB,CAAG,IAAM,OAAW,CACnCsB,EAAYtB,CAAG,EAAI,CAACO,CAAK,EACzB,MACL,CAEIe,EAAYtB,CAAG,EAAI,CAAC,GAAGsB,EAAYtB,CAAG,EAAGO,CAAK,CAC9C,EAGF,IAAK,uBACJ,MAAO,CAACP,EAAKO,EAAOe,IAAgB,CAInC,GAHAxB,EAAS,WAAW,KAAKE,CAAG,EAC5BA,EAAMA,EAAI,QAAQ,SAAU,EAAE,EAE1B,CAACF,EAAQ,CACZwB,EAAYtB,CAAG,EAAIO,EACnB,MACL,CAEI,GAAIe,EAAYtB,CAAG,IAAM,OAAW,CACnCsB,EAAYtB,CAAG,EAAI,CAACO,CAAK,EACzB,MACL,CAEIe,EAAYtB,CAAG,EAAI,CAAC,GAAGsB,EAAYtB,CAAG,EAAGO,CAAK,CAC9C,EAGF,IAAK,QACL,IAAK,YACJ,MAAO,CAACP,EAAKO,EAAOe,IAAgB,CACnC,MAAMC,EAAU,OAAOhB,GAAU,UAAYA,EAAM,SAASU,EAAQ,oBAAoB,EAClFO,EAAkB,OAAOjB,GAAU,UAAY,CAACgB,GAAWhC,EAAOgB,EAAOU,CAAO,EAAE,SAASA,EAAQ,oBAAoB,EAC7HV,EAAQiB,EAAiBjC,EAAOgB,EAAOU,CAAO,EAAIV,EAClD,MAAMkB,EAAWF,GAAWC,EAAiBjB,EAAM,MAAMU,EAAQ,oBAAoB,EAAE,IAAIS,GAAQnC,EAAOmC,EAAMT,CAAO,CAAC,EAAKV,IAAU,KAAOA,EAAQhB,EAAOgB,EAAOU,CAAO,EAC3KK,EAAYtB,CAAG,EAAIyB,CACnB,EAGF,IAAK,oBACJ,MAAO,CAACzB,EAAKO,EAAOe,IAAgB,CACnC,MAAMC,EAAU,SAAS,KAAKvB,CAAG,EAGjC,GAFAA,EAAMA,EAAI,QAAQ,OAAQ,EAAE,EAExB,CAACuB,EAAS,CACbD,EAAYtB,CAAG,EAAIO,GAAQhB,EAAOgB,EAAOU,CAAO,EAChD,MACL,CAEI,MAAMU,EAAapB,IAAU,KAC1B,CAAA,EACAhB,EAAOgB,EAAOU,CAAO,EAAE,MAAMA,EAAQ,oBAAoB,EAE5D,GAAIK,EAAYtB,CAAG,IAAM,OAAW,CACnCsB,EAAYtB,CAAG,EAAI2B,EACnB,MACL,CAEIL,EAAYtB,CAAG,EAAI,CAAC,GAAGsB,EAAYtB,CAAG,EAAG,GAAG2B,CAAU,CACtD,EAGF,QACC,MAAO,CAAC3B,EAAKO,EAAOe,IAAgB,CACnC,GAAIA,EAAYtB,CAAG,IAAM,OAAW,CACnCsB,EAAYtB,CAAG,EAAIO,EACnB,MACL,CAEIe,EAAYtB,CAAG,EAAI,CAAC,GAAG,CAACsB,EAAYtB,CAAG,CAAC,EAAE,KAAM,EAAEO,CAAK,CACvD,CAEJ,CACA,CAEA,SAASqB,EAA6BrB,EAAO,CAC5C,GAAI,OAAOA,GAAU,UAAYA,EAAM,SAAW,EACjD,MAAM,IAAI,UAAU,sDAAsD,CAE5E,CAEA,SAASY,EAAOZ,EAAOU,EAAS,CAC/B,OAAIA,EAAQ,OACJA,EAAQ,OAASJ,GAAgBN,CAAK,EAAI,mBAAmBA,CAAK,EAGnEA,CACR,CAEA,SAAShB,EAAOgB,EAAOU,EAAS,CAC/B,OAAIA,EAAQ,OACJY,GAAgBtB,CAAK,EAGtBA,CACR,CAEA,SAASuB,EAAWtC,EAAO,CAC1B,OAAI,MAAM,QAAQA,CAAK,EACfA,EAAM,KAAM,EAGhB,OAAOA,GAAU,SACbsC,EAAW,OAAO,KAAKtC,CAAK,CAAC,EAClC,KAAK,CAACuC,EAAGC,IAAM,OAAOD,CAAC,EAAI,OAAOC,CAAC,CAAC,EACpC,IAAIhC,GAAOR,EAAMQ,CAAG,CAAC,EAGjBR,CACR,CAEA,SAASyC,EAAWzC,EAAO,CAC1B,MAAM0C,EAAY1C,EAAM,QAAQ,GAAG,EACnC,OAAI0C,IAAc,KACjB1C,EAAQA,EAAM,MAAM,EAAG0C,CAAS,GAG1B1C,CACR,CAEA,SAAS2C,GAAQC,EAAK,CACrB,IAAIC,EAAO,GACX,MAAMH,EAAYE,EAAI,QAAQ,GAAG,EACjC,OAAIF,IAAc,KACjBG,EAAOD,EAAI,MAAMF,CAAS,GAGpBG,CACR,CAEA,SAASC,EAAW/B,EAAOU,EAASsB,EAAM,CACzC,OAAIA,IAAS,UAAY,OAAOhC,GAAU,SAClCA,EAGJ,OAAOgC,GAAS,YAAc,OAAOhC,GAAU,SAC3CgC,EAAKhC,CAAK,EAGdgC,IAAS,WAAahC,IAAU,OAASA,EAAM,YAAa,IAAK,QAAUA,EAAM,YAAa,IAAK,SAC/FA,EAAM,YAAW,IAAO,OAG5BgC,IAAS,WAAahC,IAAU,OAASA,EAAM,YAAa,IAAK,KAAOA,EAAM,YAAa,IAAK,KAC5FA,EAAM,YAAW,IAAO,IAG5BgC,IAAS,YAActB,EAAQ,cAAgB,QAAU,OAAOV,GAAU,SACtE,CAACA,CAAK,EAGVgC,IAAS,YAActB,EAAQ,cAAgB,QAAU,CAAC,OAAO,MAAM,OAAOV,CAAK,CAAC,GAAM,OAAOA,GAAU,UAAYA,EAAM,KAAI,IAAO,GACpI,CAAC,OAAOA,CAAK,CAAC,EAGlBgC,IAAS,UAAY,CAAC,OAAO,MAAM,OAAOhC,CAAK,CAAC,GAAM,OAAOA,GAAU,UAAYA,EAAM,KAAM,IAAK,GAChG,OAAOA,CAAK,EAGhBU,EAAQ,eAAiBV,IAAU,OAASA,EAAM,YAAa,IAAK,QAAUA,EAAM,YAAa,IAAK,SAClGA,EAAM,YAAW,IAAO,OAG5BU,EAAQ,cAAgB,CAAC,OAAO,MAAM,OAAOV,CAAK,CAAC,GAAM,OAAOA,GAAU,UAAYA,EAAM,KAAM,IAAK,GACnG,OAAOA,CAAK,EAGbA,CACR,CAEO,SAASiC,EAAQhD,EAAO,CAC9BA,EAAQyC,EAAWzC,CAAK,EACxB,MAAMiD,EAAajD,EAAM,QAAQ,GAAG,EACpC,OAAIiD,IAAe,GACX,GAGDjD,EAAM,MAAMiD,EAAa,CAAC,CAClC,CAEO,SAASC,EAAMC,EAAO1B,EAAS,CACrCA,EAAU,CACT,OAAQ,GACR,KAAM,GACN,YAAa,OACb,qBAAsB,IACtB,aAAc,GACd,cAAe,GACf,MAAO,OAAO,OAAO,IAAI,EACzB,GAAGA,CACH,EAEDW,EAA6BX,EAAQ,oBAAoB,EAEzD,MAAM2B,EAAYvB,GAAqBJ,CAAO,EAGxC4B,EAAc,OAAO,OAAO,IAAI,EAQtC,GANI,OAAOF,GAAU,WAIrBA,EAAQA,EAAM,KAAI,EAAG,QAAQ,SAAU,EAAE,EAErC,CAACA,GACJ,OAAOE,EAGR,UAAWC,KAAaH,EAAM,MAAM,GAAG,EAAG,CACzC,GAAIG,IAAc,GACjB,SAGD,MAAMC,EAAa9B,EAAQ,OAAS6B,EAAU,WAAW,IAAK,GAAG,EAAIA,EAErE,GAAI,CAAC9C,EAAKO,CAAK,EAAIC,EAAauC,EAAY,GAAG,EAE3C/C,IAAQ,SACXA,EAAM+C,GAKPxC,EAAQA,IAAU,OAAY,KAAQ,CAAC,QAAS,YAAa,mBAAmB,EAAE,SAASU,EAAQ,WAAW,EAAIV,EAAQhB,EAAOgB,EAAOU,CAAO,EAC/I2B,EAAUrD,EAAOS,EAAKiB,CAAO,EAAGV,EAAOsC,CAAW,CACpD,CAEC,SAAW,CAAC7C,EAAKO,CAAK,IAAK,OAAO,QAAQsC,CAAW,EACpD,GAAI,OAAOtC,GAAU,UAAYA,IAAU,MAAQU,EAAQ,MAAMjB,CAAG,IAAM,SACzE,SAAW,CAACgD,EAAMC,CAAM,IAAK,OAAO,QAAQ1C,CAAK,EAAG,CACnD,MAAMgC,EAAOtB,EAAQ,MAAMjB,CAAG,EAAIiB,EAAQ,MAAMjB,CAAG,EAAE,QAAQ,KAAM,EAAE,EAAI,OACzEO,EAAMyC,CAAI,EAAIV,EAAWW,EAAQhC,EAASsB,CAAI,CAClD,MACa,OAAOhC,GAAU,UAAYA,IAAU,MAAQU,EAAQ,MAAMjB,CAAG,IAAM,SAChF6C,EAAY7C,CAAG,EAAI,OAAO,OAAOO,CAAK,EAAE,KAAKU,EAAQ,oBAAoB,EAEzE4B,EAAY7C,CAAG,EAAIsC,EAAW/B,EAAOU,EAASA,EAAQ,MAAMjB,CAAG,CAAC,EAIlE,OAAIiB,EAAQ,OAAS,GACb4B,GAKA5B,EAAQ,OAAS,GAAO,OAAO,KAAK4B,CAAW,EAAE,OAAS,OAAO,KAAKA,CAAW,EAAE,KAAK5B,EAAQ,IAAI,GAAG,OAAO,CAACnB,EAAQE,IAAQ,CACtI,MAAMO,EAAQsC,EAAY7C,CAAG,EAC7B,OAAAF,EAAOE,CAAG,EAAYO,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAK,EAAIuB,EAAWvB,CAAK,EAAIA,EAClGT,CACT,EAAI,OAAO,OAAO,IAAI,CAAC,CACvB,CAEO,SAASoD,EAAU9C,EAAQa,EAAS,CAC1C,GAAI,CAACb,EACJ,MAAO,GAGRa,EAAU,CACT,OAAQ,GACR,OAAQ,GACR,YAAa,OACb,qBAAsB,IACtB,GAAGA,CACH,EAEDW,EAA6BX,EAAQ,oBAAoB,EAEzD,MAAMkC,EAAenD,GACnBiB,EAAQ,UAAYL,GAAkBR,EAAOJ,CAAG,CAAC,GAC9CiB,EAAQ,iBAAmBb,EAAOJ,CAAG,IAAM,GAG1C4C,EAAY5B,GAAsBC,CAAO,EAEzCmC,EAAa,CAAE,EAErB,SAAW,CAACpD,EAAKO,CAAK,IAAK,OAAO,QAAQH,CAAM,EAC1C+C,EAAanD,CAAG,IACpBoD,EAAWpD,CAAG,EAAIO,GAIpB,MAAM8C,EAAO,OAAO,KAAKD,CAAU,EAEnC,OAAInC,EAAQ,OAAS,IACpBoC,EAAK,KAAKpC,EAAQ,IAAI,EAGhBoC,EAAK,IAAIrD,GAAO,CACtB,MAAMO,EAAQH,EAAOJ,CAAG,EAExB,OAAIO,IAAU,OACN,GAGJA,IAAU,KACNY,EAAOnB,EAAKiB,CAAO,EAGvB,MAAM,QAAQV,CAAK,EAClBA,EAAM,SAAW,GAAKU,EAAQ,cAAgB,oBAC1CE,EAAOnB,EAAKiB,CAAO,EAAI,KAGxBV,EACL,OAAOqC,EAAU5C,CAAG,EAAG,CAAE,CAAA,EACzB,KAAK,GAAG,EAGJmB,EAAOnB,EAAKiB,CAAO,EAAI,IAAME,EAAOZ,EAAOU,CAAO,CAC3D,CAAE,EAAE,OAAOH,GAAKA,EAAE,OAAS,CAAC,EAAE,KAAK,GAAG,CACtC,CAEO,SAASwC,EAASlB,EAAKnB,EAAS,OACtCA,EAAU,CACT,OAAQ,GACR,GAAGA,CACH,EAED,GAAI,CAACsC,EAAMlB,CAAI,EAAI7B,EAAa4B,EAAK,GAAG,EAExC,OAAImB,IAAS,SACZA,EAAOnB,GAGD,CACN,MAAKoB,EAAAD,GAAA,YAAAA,EAAM,MAAM,OAAZ,YAAAC,EAAmB,KAAM,GAC9B,MAAOd,EAAMF,EAAQJ,CAAG,EAAGnB,CAAO,EAClC,GAAIA,GAAWA,EAAQ,yBAA2BoB,EAAO,CAAC,mBAAoB9C,EAAO8C,EAAMpB,CAAO,CAAC,EAAI,CAAA,CACvG,CACF,CAEO,SAASwC,EAAarD,EAAQa,EAAS,CAC7CA,EAAU,CACT,OAAQ,GACR,OAAQ,GACR,CAACF,CAAwB,EAAG,GAC5B,GAAGE,CACH,EAED,MAAMmB,EAAMH,EAAW7B,EAAO,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,GAAK,GAC9CsD,EAAelB,EAAQpC,EAAO,GAAG,EAEjCuC,EAAQ,CACb,GAAGD,EAAMgB,EAAc,CAAC,KAAM,EAAK,CAAC,EACpC,GAAGtD,EAAO,KACV,EAED,IAAIuD,EAAcT,EAAUP,EAAO1B,CAAO,EAC1C0C,MAAgB,IAAIA,CAAW,IAE/B,IAAItB,EAAOF,GAAQ/B,EAAO,GAAG,EAC7B,GAAI,OAAOA,EAAO,oBAAuB,SAAU,CAClD,MAAMwD,EAA6B,IAAI,IAAIxB,CAAG,EAC9CwB,EAA2B,KAAOxD,EAAO,mBACzCiC,EAAOpB,EAAQF,CAAwB,EAAI6C,EAA2B,KAAO,IAAIxD,EAAO,kBAAkB,EAC5G,CAEC,MAAO,GAAGgC,CAAG,GAAGuB,CAAW,GAAGtB,CAAI,EACnC,CAEO,SAASwB,EAAKrE,EAAOsE,EAAQ7C,EAAS,CAC5CA,EAAU,CACT,wBAAyB,GACzB,CAACF,CAAwB,EAAG,GAC5B,GAAGE,CACH,EAED,KAAM,CAAC,IAAAmB,EAAK,MAAAO,EAAO,mBAAAoB,CAAkB,EAAIT,EAAS9D,EAAOyB,CAAO,EAEhE,OAAOwC,EAAa,CACnB,IAAArB,EACA,MAAOjC,GAAYwC,EAAOmB,CAAM,EAChC,mBAAAC,CACA,EAAE9C,CAAO,CACX,CAEO,SAAS+C,GAAQxE,EAAOsE,EAAQ7C,EAAS,CAC/C,MAAMgD,EAAkB,MAAM,QAAQH,CAAM,EAAI9D,GAAO,CAAC8D,EAAO,SAAS9D,CAAG,EAAI,CAACA,EAAKO,IAAU,CAACuD,EAAO9D,EAAKO,CAAK,EAEjH,OAAOsD,EAAKrE,EAAOyE,EAAiBhD,CAAO,CAC5C,+KC7eI,OAAO,OAAW,MACpB,OAAO,MAAQiD,EACf,OAAO,SAAWC,EAClB,OAAO,KAAOC,EACd,OAAO,MAAQC,EACf,OAAO,IAAMC,EACb,OAAO,MAAQC,EACf,OAAO,GAAKC,GACZ,OAAO,KAAOC,GACd,OAAO,KAAOC,EACd,OAAO,QAAUC,GAGnB,SAASC,IAAe,CACtB,MAAMC,EAAWC,EAAY,EACvB,CAAE,SAAAC,CAAS,EAAIC,EAAU,EAE/BC,EAAAA,UAAU,IAAM,CACd,GAAI,CAACJ,EAAU,OACf,MAAMK,EAAS,CACbH,EAAS,UAAU,MAAOF,EAAS,WAAW,EAC9CE,EAAS,UAAU,MAAOF,EAAS,WAAW,EAC9CE,EAAS,UAAU,SAAUF,EAAS,WAAW,EACjDE,EAAS,UAAU,SAAUF,EAAS,WAAW,EACjDE,EAAS,UAAU,SAAUF,EAAS,WAAW,CACnD,EAEA,MAAO,IAAM,CACXK,EAAO,QAASC,GAAMA,EAAA,CAAG,CAC3B,CAAA,EACC,CAACN,EAAUE,CAAQ,CAAC,EAEjB,MAAAK,EAAiBC,EAAAA,QAAQ,IACxBR,GAAA,MAAAA,EAAU,MACR,IAAIS,EAAQP,EAAUF,EAAS,KAAK,EADdE,EAE5B,CAACA,EAAUF,GAAA,YAAAA,EAAU,KAAK,CAAC,EAG5B,OAAAU,EAAA,KAACC,GAAA,CACC,OAAQ,IACR,UAAW,GACX,OAAQ,GACR,MAAO,CACL,MAAO,OACP,OAAQ,MACV,EAEA,SAAA,CAAAC,EAAA,IAACC,GAAA,CACC,OAAQN,EACR,OAAQ,oDACR,MAAO,CACL,QAAS,OACT,cAAe,KACjB,EACA,WAAY,CACV,QAAS,OACT,cAAe,KACjB,EAEA,SAAAK,EAAA,IAACE,GAAA,CACC,OAAQP,EACR,SAAU,GACV,WAAY,CACTK,EAAAA,IAAAG,GAAA,CAAwB,KAAK,cAAA,EAApB,cAAmC,EAC7CH,MAACI,MAAyB,qBAAsB,QAC/CC,GAA0B,CAAA,IAAK,GAAI,OAAM,IAA/B,eAAgC,QAC1CC,GAA2C,CAAA,IAAK,GAAI,OAAM,IAApC,oBAAqC,CAC9D,EAEA,SAAAN,EAAA,IAACO,GAAA,CACC,KAAK,wBAGL,QAAQ,qBACR,QAAQ,SACR,KAAK,oBACL,aAAc,CAAC,OAAQ,OAAQ,OAAO,CAAA,CAAA,CACxC,CAAA,CACF,CACF,EAEEP,EAAAA,IAAAQ,EAAA,SAAA,CAAA,SAAAR,MAACS,EACC,CAAA,SAAAX,EAAA,KAACY,EACC,CAAA,SAAA,CAAAV,EAAA,IAACW,EAAY,EAAA,EACZX,EAAA,IAAAY,GAAA,CACC,SAACZ,EAAAA,IAAAa,GAAA,CAAA,CAAS,CAIZ,CAAA,CAAA,CACF,CAAA,CACF,CAAA,EACF,QACCJ,EACC,CAAA,SAAAT,EAAA,IAACU,GACC,SAACV,MAAAW,EAAA,CAAY,CAAA,CACf,CAAA,CACF,CAAA,CAAA,CAAA,CACF,CAEJ,CAEA,SAASG,IAAgB,CAIvB,MAAMC,EAAWC,EAAc,CAAC,CAAE,SAAAD,KAAeA,CAAQ,EACnDE,EAAWD,EAAc,CAAC,CAAE,IAAAE,CAAA,IAAUA,CAAG,EAG/C,cACGC,EAAU,CAAA,SAAQ,GAAC,OAAQ,KAAM,OAAQ,GACxC,SAAA,CAAAnB,EAAA,IAACb,GAAa,EAAA,QACbiC,EAAU,CAAA,MAAM,cAAc,MAAOL,EAAU,SAAAE,CAAoB,CAAA,CAAA,EACtE,CAEJ,CAEA,SAAwBI,IAAO,CACvB,MAAAC,EAAQ,OAAO,OAAW,IAEhC,GAAIA,EAAc,OAAA,KAEZ,MAAAC,EAAU3B,EAAAA,QAAqB,IAAM,CACzC,MAAM4B,EAAStD,GAAY,MAAM,OAAO,SAAS,SAAS,MAAM,EAC5D,OAAA,OAAOsD,EAAO,cAAiB,aAAiB,aAAeA,EAAO,aAAa,YAAY,GAC5FA,CACT,EAAG,EAAE,EAECC,EAAe7B,UAAiB,IAAM2B,EAAQ,eAAiB,OAAQ,CAACA,EAAQ,YAAY,CAAC,EAEnG,OAEIzB,EAAA,KAAAU,WAAA,CAAA,SAAA,CAAAR,MAAC0B,EACC,CAAA,SAAA1B,EAAA,IAAC,QAAM,CAAA,SAAA,aAAW,CAAA,EACpB,SACC,OACC,CAAA,SAAA,CAACA,EAAAA,IAAA2B,EAAA,CACE,WAAQ,KACP3B,EAAA,IAAC4B,GAEC,SAAC5B,EAAAA,IAAAc,GAAA,CAAA,CAAc,EACjB,CAEJ,CAAA,EACAd,EAAA,IAAC6B,EAAA,CACC,MAAO,CACL,MAAO,CACL,UAAW,QACX,aAAc,QACd,oBAAqB,MAAA,CAEzB,EACA,UAAWJ,CAAA,CAAA,CACb,CACF,CAAA,CAAA,EACF,CAEJ","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.
|
|
12
|
-
<link rel="modulepreload" href="/assets/entries/pages_editor.
|
|
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">
|
vuer/client_build/index.html
CHANGED
|
@@ -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.
|
|
12
|
-
<link rel="modulepreload" href="/assets/entries/pages_index.
|
|
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.
|
|
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.
|
|
11
|
-
<link rel="modulepreload" href="/assets/entries/pages_studio.
|
|
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
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
vuer/schemas/html_components.py
CHANGED
|
@@ -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
|
-
|
|
27
|
-
|
|
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)
|
vuer/schemas/scene_components.py
CHANGED
|
@@ -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.
|