[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-babylonjs-babylonjs-editor-tools":3,"mdc-yr4skg-key":34,"related-repo-babylonjs-babylonjs-editor-tools":1650,"related-org-babylonjs-babylonjs-editor-tools":1658},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"babylonjs-editor-tools","develop Babylon.js scenes with TypeScript","Write and attach TypeScript scripts, load scenes, and use the editor decorators in projects created with the Babylon.js Editor (the babylonjs-editor-tools runtime package). Use when working with files like src\u002Fscripts\u002F*.ts, src\u002Fscripts.ts, or App.ts that import from \"babylonjs-editor-tools\", or whenever the task mentions editor scripts, IScript onStart\u002FonUpdate, loadScene, AdvancedAssetContainer, or any of the @nodeFromScene \u002F @visibleAs* \u002F @onPointerEvent \u002F @sceneAsset \u002F @visibleAsAsset decorators.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"babylonjs","Babylon.js","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fbabylonjs.png","BabylonJS",[13,17,20],{"name":14,"slug":15,"type":16},"Game Development","game-development","tag",{"name":18,"slug":19,"type":16},"TypeScript","typescript",{"name":21,"slug":22,"type":16},"Design","design",1089,"https:\u002F\u002Fgithub.com\u002FBabylonJS\u002FEditor","2026-07-12T08:15:43.146303",null,296,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"Community managed visual editor for Babylon.js","https:\u002F\u002Fgithub.com\u002FBabylonJS\u002FEditor\u002Ftree\u002FHEAD\u002Fwebsite\u002Fpublic\u002Fskills\u002Fbabylonjs-editor-tools","---\nname: babylonjs-editor-tools\ndescription: >-\n  Write and attach TypeScript scripts, load scenes, and use the editor decorators in projects created\n  with the Babylon.js Editor (the babylonjs-editor-tools runtime package). Use when working with files\n  like src\u002Fscripts\u002F*.ts, src\u002Fscripts.ts, or App.ts that import from \"babylonjs-editor-tools\", or whenever\n  the task mentions editor scripts, IScript onStart\u002FonUpdate, loadScene, AdvancedAssetContainer, or any of\n  the @nodeFromScene \u002F @visibleAs* \u002F @onPointerEvent \u002F @sceneAsset \u002F @visibleAsAsset decorators.\n---\n\n# babylonjs-editor-tools\n\n`babylonjs-editor-tools` is the runtime library bundled into every project exported or packaged by the\nBabylon.js Editor. It is what user game code (`src\u002Fscripts\u002F*.ts`) and the app bootstrap (`App.ts` \u002F\n`page.tsx` \u002F `app.vue`) import. It provides three things:\n\n1. **A scene loader** (`loadScene`) that reconstructs everything the editor saved and re-attaches scripts.\n2. **A script contract** (`IScript`: `onStart` \u002F `onUpdate` \u002F `onStop`).\n3. **Decorators** used inside scripts to retrieve scene objects, expose customizable inspector fields,\n   link assets, and listen to input events.\n\nEverything is imported from the package root:\n\n```ts\nimport { loadScene, nodeFromScene, visibleAsNumber, onPointerEvent } from \"babylonjs-editor-tools\";\n```\n\n## Mental model (read this first)\n\n- A **script** is a default-exported class (recommended) or a set of exported functions, attached to a scene\n  object in the editor (mesh, transform node, light, camera, sprite, or the scene itself).\n- The object the script is attached to is passed to the **constructor** (class) or as the **first argument**\n  (functions). Conventionally the parameter is named after the type, e.g. `public mesh: Mesh`.\n- Decorators are processed by the loader **after** construction, when the scene is loaded. **Decorated\n  properties are `null`\u002Fundefined inside the `constructor` — only use them from `onStart` onward.**\n- Decorators only work on **class-based** scripts, not function-based scripts.\n- The editor works in **centimeters** and auto-scales glTF\u002FGLB imports ×100 — keep that in mind for any\n  positions, speeds, or distances you compute.\n\n## Quick reference\n\n### Lifecycle (`IScript`)\n\n| Method | Called |\n| --- | --- |\n| `onStart(object?)` | Once, when the script loads and the scene is ready. |\n| `onUpdate(object?)` | Every rendered frame. Use `scene.getAnimationRatio()` for frame-rate independence. |\n| `onStop(object?)` | When the script is stopped or the object is disposed. |\n\n### Retrieving scene objects — see [references\u002Fscene-decorators.md](references\u002Fscene-decorators.md)\n\n| Decorator | Retrieves |\n| --- | --- |\n| `@nodeFromScene(name)` | First node (Mesh \u002F TransformNode \u002F Light \u002F Camera) with that name, anywhere in the scene. |\n| `@nodeFromDescendants(name, directOnly?)` | Same, but only among descendants of the attached object. |\n| `@animationGroupFromScene(name)` | An `AnimationGroup` by name. |\n| `@particleSystemFromScene(name, directOnly?)` | A particle system by name. |\n| `@soundFromScene(name)` | A `SoundNode` by name. |\n| `@spriteFromSpriteManager(name)` \u002F `@animationFromSprite(name)` | A sprite \u002F sprite animation (scripts on a `SpriteManagerNode`). |\n| `@componentFromScene(OtherScriptClass)` | The single instance of another script class in the scene. |\n| `@sceneAsset(file)` | A `.scene` loaded as an `AdvancedAssetContainer` (instantiate on demand). |\n\n### Customizable inspector fields — see [references\u002Finspector-decorators.md](references\u002Finspector-decorators.md)\n\n`@visibleAsBoolean`, `@visibleAsNumber`, `@visibleAsString`, `@visibleAsVector2`, `@visibleAsVector3`,\n`@visibleAsColor3`, `@visibleAsColor4`, `@visibleAsEntity`, `@visibleAsTexture`, `@visibleAsKeyMap`.\nEach makes a property editable per-object in the editor inspector.\n\n### Linking assets — see [references\u002Fasset-decorators.md](references\u002Fasset-decorators.md)\n\n`@visibleAsAsset(type, label, config?)` links a property to a project asset (`json`, `material`, `gui`,\n`scene`, `nodeParticleSystemSet`, `navmesh`, `cinematic`, `ragdoll`). Preloaded during scene load.\n\n### Input events — see [references\u002Fevent-decorators.md](references\u002Fevent-decorators.md)\n\n`@onPointerEvent(type | type[], { mode })` and `@onKeyboardEvent(type | type[])` call the decorated method\nwhen the event fires. Pointer `mode` can be `global` (default), `attachedMeshOnly`, or `includeDescendants`.\n\n### Loading scenes — see [references\u002Floading-scenes.md](references\u002Floading-scenes.md)\n\n`await loadScene(rootUrl, sceneFilename, scene, scriptsMap, options?)` appends a saved `.babylon` scene,\npreloads script assets, configures lights\u002Fshadows\u002FLODs\u002Fphysics\u002Fpost-processing, and attaches every script.\n\n### Instantiating sub-scenes — see [references\u002Fscene-containers.md](references\u002Fscene-containers.md)\n\n`AdvancedAssetContainer` (from `@sceneAsset`) — `.removeDefault()`, `.instantiate(options?)`,\n`.getRootNodeByName()`, `.getScriptByClassByObjectName()`.\n\n## Minimal class-based script\n\n```ts\nimport { Mesh } from \"@babylonjs\u002Fcore\u002FMeshes\u002Fmesh\";\nimport { visibleAsNumber } from \"babylonjs-editor-tools\";\n\nexport default class RotateScript {\n    @visibleAsNumber(\"Rotation Speed\", { min: 0, max: 10, step: 0.1 })\n    private _speed: number = 1;\n\n    public constructor(public mesh: Mesh) {\n        \u002F\u002F ⚠️ decorated properties are NOT available here yet.\n    }\n\n    public onStart(): void {\n        \u002F\u002F ✅ decorated properties are now resolved.\n    }\n\n    public onUpdate(): void {\n        this.mesh.rotation.y += this._speed * this.mesh.getScene().getAnimationRatio();\n    }\n}\n```\n\n## Conventions to follow when authoring scripts\n\n- Default-export **one class per file**; name the file in kebab-case (e.g. `rotate-script.ts`).\n- Type decorated reference properties as nullable (`Mesh | null = null`) and guard before use, since they\n  resolve only after construction.\n- Never read decorated properties in the `constructor`.\n- Match the repo's Prettier style: **tabs**, double quotes, semicolons, `printWidth` 180.\n- Import Babylon.js symbols from deep paths (`@babylonjs\u002Fcore\u002FMeshes\u002Fmesh`) to keep tree-shaking working,\n  exactly like the templates and documentation examples do.\n\nFor full details and runnable examples, open the matching file under `references\u002F`.\n",{"data":35,"body":36},{"name":4,"description":6},{"type":37,"children":38},"root",[39,46,90,163,168,261,268,374,380,394,481,493,694,705,781,792,860,871,921,932,951,962,1008,1014,1548,1554,1632,1644],{"type":40,"tag":41,"props":42,"children":43},"element","h1",{"id":4},[44],{"type":45,"value":4},"text",{"type":40,"tag":47,"props":48,"children":49},"p",{},[50,56,58,64,66,72,74,80,82,88],{"type":40,"tag":51,"props":52,"children":54},"code",{"className":53},[],[55],{"type":45,"value":4},{"type":45,"value":57}," is the runtime library bundled into every project exported or packaged by the\nBabylon.js Editor. It is what user game code (",{"type":40,"tag":51,"props":59,"children":61},{"className":60},[],[62],{"type":45,"value":63},"src\u002Fscripts\u002F*.ts",{"type":45,"value":65},") and the app bootstrap (",{"type":40,"tag":51,"props":67,"children":69},{"className":68},[],[70],{"type":45,"value":71},"App.ts",{"type":45,"value":73}," \u002F\n",{"type":40,"tag":51,"props":75,"children":77},{"className":76},[],[78],{"type":45,"value":79},"page.tsx",{"type":45,"value":81}," \u002F ",{"type":40,"tag":51,"props":83,"children":85},{"className":84},[],[86],{"type":45,"value":87},"app.vue",{"type":45,"value":89},") import. It provides three things:",{"type":40,"tag":91,"props":92,"children":93},"ol",{},[94,114,153],{"type":40,"tag":95,"props":96,"children":97},"li",{},[98,104,106,112],{"type":40,"tag":99,"props":100,"children":101},"strong",{},[102],{"type":45,"value":103},"A scene loader",{"type":45,"value":105}," (",{"type":40,"tag":51,"props":107,"children":109},{"className":108},[],[110],{"type":45,"value":111},"loadScene",{"type":45,"value":113},") that reconstructs everything the editor saved and re-attaches scripts.",{"type":40,"tag":95,"props":115,"children":116},{},[117,122,123,129,131,137,138,144,145,151],{"type":40,"tag":99,"props":118,"children":119},{},[120],{"type":45,"value":121},"A script contract",{"type":45,"value":105},{"type":40,"tag":51,"props":124,"children":126},{"className":125},[],[127],{"type":45,"value":128},"IScript",{"type":45,"value":130},": ",{"type":40,"tag":51,"props":132,"children":134},{"className":133},[],[135],{"type":45,"value":136},"onStart",{"type":45,"value":81},{"type":40,"tag":51,"props":139,"children":141},{"className":140},[],[142],{"type":45,"value":143},"onUpdate",{"type":45,"value":81},{"type":40,"tag":51,"props":146,"children":148},{"className":147},[],[149],{"type":45,"value":150},"onStop",{"type":45,"value":152},").",{"type":40,"tag":95,"props":154,"children":155},{},[156,161],{"type":40,"tag":99,"props":157,"children":158},{},[159],{"type":45,"value":160},"Decorators",{"type":45,"value":162}," used inside scripts to retrieve scene objects, expose customizable inspector fields,\nlink assets, and listen to input events.",{"type":40,"tag":47,"props":164,"children":165},{},[166],{"type":45,"value":167},"Everything is imported from the package root:",{"type":40,"tag":169,"props":170,"children":175},"pre",{"className":171,"code":172,"language":173,"meta":174,"style":174},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { loadScene, nodeFromScene, visibleAsNumber, onPointerEvent } from \"babylonjs-editor-tools\";\n","ts","",[176],{"type":40,"tag":51,"props":177,"children":178},{"__ignoreMap":174},[179],{"type":40,"tag":180,"props":181,"children":184},"span",{"class":182,"line":183},"line",1,[185,191,197,203,208,213,217,222,226,231,236,241,246,251,256],{"type":40,"tag":180,"props":186,"children":188},{"style":187},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[189],{"type":45,"value":190},"import",{"type":40,"tag":180,"props":192,"children":194},{"style":193},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[195],{"type":45,"value":196}," {",{"type":40,"tag":180,"props":198,"children":200},{"style":199},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[201],{"type":45,"value":202}," loadScene",{"type":40,"tag":180,"props":204,"children":205},{"style":193},[206],{"type":45,"value":207},",",{"type":40,"tag":180,"props":209,"children":210},{"style":199},[211],{"type":45,"value":212}," nodeFromScene",{"type":40,"tag":180,"props":214,"children":215},{"style":193},[216],{"type":45,"value":207},{"type":40,"tag":180,"props":218,"children":219},{"style":199},[220],{"type":45,"value":221}," visibleAsNumber",{"type":40,"tag":180,"props":223,"children":224},{"style":193},[225],{"type":45,"value":207},{"type":40,"tag":180,"props":227,"children":228},{"style":199},[229],{"type":45,"value":230}," onPointerEvent",{"type":40,"tag":180,"props":232,"children":233},{"style":193},[234],{"type":45,"value":235}," }",{"type":40,"tag":180,"props":237,"children":238},{"style":187},[239],{"type":45,"value":240}," from",{"type":40,"tag":180,"props":242,"children":243},{"style":193},[244],{"type":45,"value":245}," \"",{"type":40,"tag":180,"props":247,"children":249},{"style":248},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[250],{"type":45,"value":4},{"type":40,"tag":180,"props":252,"children":253},{"style":193},[254],{"type":45,"value":255},"\"",{"type":40,"tag":180,"props":257,"children":258},{"style":193},[259],{"type":45,"value":260},";\n",{"type":40,"tag":262,"props":263,"children":265},"h2",{"id":264},"mental-model-read-this-first",[266],{"type":45,"value":267},"Mental model (read this first)",{"type":40,"tag":269,"props":270,"children":271},"ul",{},[272,284,311,350,362],{"type":40,"tag":95,"props":273,"children":274},{},[275,277,282],{"type":45,"value":276},"A ",{"type":40,"tag":99,"props":278,"children":279},{},[280],{"type":45,"value":281},"script",{"type":45,"value":283}," is a default-exported class (recommended) or a set of exported functions, attached to a scene\nobject in the editor (mesh, transform node, light, camera, sprite, or the scene itself).",{"type":40,"tag":95,"props":285,"children":286},{},[287,289,294,296,301,303,309],{"type":45,"value":288},"The object the script is attached to is passed to the ",{"type":40,"tag":99,"props":290,"children":291},{},[292],{"type":45,"value":293},"constructor",{"type":45,"value":295}," (class) or as the ",{"type":40,"tag":99,"props":297,"children":298},{},[299],{"type":45,"value":300},"first argument",{"type":45,"value":302},"\n(functions). Conventionally the parameter is named after the type, e.g. ",{"type":40,"tag":51,"props":304,"children":306},{"className":305},[],[307],{"type":45,"value":308},"public mesh: Mesh",{"type":45,"value":310},".",{"type":40,"tag":95,"props":312,"children":313},{},[314,316,321,323],{"type":45,"value":315},"Decorators are processed by the loader ",{"type":40,"tag":99,"props":317,"children":318},{},[319],{"type":45,"value":320},"after",{"type":45,"value":322}," construction, when the scene is loaded. ",{"type":40,"tag":99,"props":324,"children":325},{},[326,328,334,336,341,343,348],{"type":45,"value":327},"Decorated\nproperties are ",{"type":40,"tag":51,"props":329,"children":331},{"className":330},[],[332],{"type":45,"value":333},"null",{"type":45,"value":335},"\u002Fundefined inside the ",{"type":40,"tag":51,"props":337,"children":339},{"className":338},[],[340],{"type":45,"value":293},{"type":45,"value":342}," — only use them from ",{"type":40,"tag":51,"props":344,"children":346},{"className":345},[],[347],{"type":45,"value":136},{"type":45,"value":349}," onward.",{"type":40,"tag":95,"props":351,"children":352},{},[353,355,360],{"type":45,"value":354},"Decorators only work on ",{"type":40,"tag":99,"props":356,"children":357},{},[358],{"type":45,"value":359},"class-based",{"type":45,"value":361}," scripts, not function-based scripts.",{"type":40,"tag":95,"props":363,"children":364},{},[365,367,372],{"type":45,"value":366},"The editor works in ",{"type":40,"tag":99,"props":368,"children":369},{},[370],{"type":45,"value":371},"centimeters",{"type":45,"value":373}," and auto-scales glTF\u002FGLB imports ×100 — keep that in mind for any\npositions, speeds, or distances you compute.",{"type":40,"tag":262,"props":375,"children":377},{"id":376},"quick-reference",[378],{"type":45,"value":379},"Quick reference",{"type":40,"tag":381,"props":382,"children":384},"h3",{"id":383},"lifecycle-iscript",[385,387,392],{"type":45,"value":386},"Lifecycle (",{"type":40,"tag":51,"props":388,"children":390},{"className":389},[],[391],{"type":45,"value":128},{"type":45,"value":393},")",{"type":40,"tag":395,"props":396,"children":397},"table",{},[398,417],{"type":40,"tag":399,"props":400,"children":401},"thead",{},[402],{"type":40,"tag":403,"props":404,"children":405},"tr",{},[406,412],{"type":40,"tag":407,"props":408,"children":409},"th",{},[410],{"type":45,"value":411},"Method",{"type":40,"tag":407,"props":413,"children":414},{},[415],{"type":45,"value":416},"Called",{"type":40,"tag":418,"props":419,"children":420},"tbody",{},[421,439,464],{"type":40,"tag":403,"props":422,"children":423},{},[424,434],{"type":40,"tag":425,"props":426,"children":427},"td",{},[428],{"type":40,"tag":51,"props":429,"children":431},{"className":430},[],[432],{"type":45,"value":433},"onStart(object?)",{"type":40,"tag":425,"props":435,"children":436},{},[437],{"type":45,"value":438},"Once, when the script loads and the scene is ready.",{"type":40,"tag":403,"props":440,"children":441},{},[442,451],{"type":40,"tag":425,"props":443,"children":444},{},[445],{"type":40,"tag":51,"props":446,"children":448},{"className":447},[],[449],{"type":45,"value":450},"onUpdate(object?)",{"type":40,"tag":425,"props":452,"children":453},{},[454,456,462],{"type":45,"value":455},"Every rendered frame. Use ",{"type":40,"tag":51,"props":457,"children":459},{"className":458},[],[460],{"type":45,"value":461},"scene.getAnimationRatio()",{"type":45,"value":463}," for frame-rate independence.",{"type":40,"tag":403,"props":465,"children":466},{},[467,476],{"type":40,"tag":425,"props":468,"children":469},{},[470],{"type":40,"tag":51,"props":471,"children":473},{"className":472},[],[474],{"type":45,"value":475},"onStop(object?)",{"type":40,"tag":425,"props":477,"children":478},{},[479],{"type":45,"value":480},"When the script is stopped or the object is disposed.",{"type":40,"tag":381,"props":482,"children":484},{"id":483},"retrieving-scene-objects-see-referencesscene-decoratorsmd",[485,487],{"type":45,"value":486},"Retrieving scene objects — see ",{"type":40,"tag":488,"props":489,"children":491},"a",{"href":490},"references\u002Fscene-decorators.md",[492],{"type":45,"value":490},{"type":40,"tag":395,"props":494,"children":495},{},[496,512],{"type":40,"tag":399,"props":497,"children":498},{},[499],{"type":40,"tag":403,"props":500,"children":501},{},[502,507],{"type":40,"tag":407,"props":503,"children":504},{},[505],{"type":45,"value":506},"Decorator",{"type":40,"tag":407,"props":508,"children":509},{},[510],{"type":45,"value":511},"Retrieves",{"type":40,"tag":418,"props":513,"children":514},{},[515,532,549,574,591,614,645,662],{"type":40,"tag":403,"props":516,"children":517},{},[518,527],{"type":40,"tag":425,"props":519,"children":520},{},[521],{"type":40,"tag":51,"props":522,"children":524},{"className":523},[],[525],{"type":45,"value":526},"@nodeFromScene(name)",{"type":40,"tag":425,"props":528,"children":529},{},[530],{"type":45,"value":531},"First node (Mesh \u002F TransformNode \u002F Light \u002F Camera) with that name, anywhere in the scene.",{"type":40,"tag":403,"props":533,"children":534},{},[535,544],{"type":40,"tag":425,"props":536,"children":537},{},[538],{"type":40,"tag":51,"props":539,"children":541},{"className":540},[],[542],{"type":45,"value":543},"@nodeFromDescendants(name, directOnly?)",{"type":40,"tag":425,"props":545,"children":546},{},[547],{"type":45,"value":548},"Same, but only among descendants of the attached object.",{"type":40,"tag":403,"props":550,"children":551},{},[552,561],{"type":40,"tag":425,"props":553,"children":554},{},[555],{"type":40,"tag":51,"props":556,"children":558},{"className":557},[],[559],{"type":45,"value":560},"@animationGroupFromScene(name)",{"type":40,"tag":425,"props":562,"children":563},{},[564,566,572],{"type":45,"value":565},"An ",{"type":40,"tag":51,"props":567,"children":569},{"className":568},[],[570],{"type":45,"value":571},"AnimationGroup",{"type":45,"value":573}," by name.",{"type":40,"tag":403,"props":575,"children":576},{},[577,586],{"type":40,"tag":425,"props":578,"children":579},{},[580],{"type":40,"tag":51,"props":581,"children":583},{"className":582},[],[584],{"type":45,"value":585},"@particleSystemFromScene(name, directOnly?)",{"type":40,"tag":425,"props":587,"children":588},{},[589],{"type":45,"value":590},"A particle system by name.",{"type":40,"tag":403,"props":592,"children":593},{},[594,603],{"type":40,"tag":425,"props":595,"children":596},{},[597],{"type":40,"tag":51,"props":598,"children":600},{"className":599},[],[601],{"type":45,"value":602},"@soundFromScene(name)",{"type":40,"tag":425,"props":604,"children":605},{},[606,607,613],{"type":45,"value":276},{"type":40,"tag":51,"props":608,"children":610},{"className":609},[],[611],{"type":45,"value":612},"SoundNode",{"type":45,"value":573},{"type":40,"tag":403,"props":615,"children":616},{},[617,633],{"type":40,"tag":425,"props":618,"children":619},{},[620,626,627],{"type":40,"tag":51,"props":621,"children":623},{"className":622},[],[624],{"type":45,"value":625},"@spriteFromSpriteManager(name)",{"type":45,"value":81},{"type":40,"tag":51,"props":628,"children":630},{"className":629},[],[631],{"type":45,"value":632},"@animationFromSprite(name)",{"type":40,"tag":425,"props":634,"children":635},{},[636,638,644],{"type":45,"value":637},"A sprite \u002F sprite animation (scripts on a ",{"type":40,"tag":51,"props":639,"children":641},{"className":640},[],[642],{"type":45,"value":643},"SpriteManagerNode",{"type":45,"value":152},{"type":40,"tag":403,"props":646,"children":647},{},[648,657],{"type":40,"tag":425,"props":649,"children":650},{},[651],{"type":40,"tag":51,"props":652,"children":654},{"className":653},[],[655],{"type":45,"value":656},"@componentFromScene(OtherScriptClass)",{"type":40,"tag":425,"props":658,"children":659},{},[660],{"type":45,"value":661},"The single instance of another script class in the scene.",{"type":40,"tag":403,"props":663,"children":664},{},[665,674],{"type":40,"tag":425,"props":666,"children":667},{},[668],{"type":40,"tag":51,"props":669,"children":671},{"className":670},[],[672],{"type":45,"value":673},"@sceneAsset(file)",{"type":40,"tag":425,"props":675,"children":676},{},[677,678,684,686,692],{"type":45,"value":276},{"type":40,"tag":51,"props":679,"children":681},{"className":680},[],[682],{"type":45,"value":683},".scene",{"type":45,"value":685}," loaded as an ",{"type":40,"tag":51,"props":687,"children":689},{"className":688},[],[690],{"type":45,"value":691},"AdvancedAssetContainer",{"type":45,"value":693}," (instantiate on demand).",{"type":40,"tag":381,"props":695,"children":697},{"id":696},"customizable-inspector-fields-see-referencesinspector-decoratorsmd",[698,700],{"type":45,"value":699},"Customizable inspector fields — see ",{"type":40,"tag":488,"props":701,"children":703},{"href":702},"references\u002Finspector-decorators.md",[704],{"type":45,"value":702},{"type":40,"tag":47,"props":706,"children":707},{},[708,714,716,722,723,729,730,736,737,743,745,751,752,758,759,765,766,772,773,779],{"type":40,"tag":51,"props":709,"children":711},{"className":710},[],[712],{"type":45,"value":713},"@visibleAsBoolean",{"type":45,"value":715},", ",{"type":40,"tag":51,"props":717,"children":719},{"className":718},[],[720],{"type":45,"value":721},"@visibleAsNumber",{"type":45,"value":715},{"type":40,"tag":51,"props":724,"children":726},{"className":725},[],[727],{"type":45,"value":728},"@visibleAsString",{"type":45,"value":715},{"type":40,"tag":51,"props":731,"children":733},{"className":732},[],[734],{"type":45,"value":735},"@visibleAsVector2",{"type":45,"value":715},{"type":40,"tag":51,"props":738,"children":740},{"className":739},[],[741],{"type":45,"value":742},"@visibleAsVector3",{"type":45,"value":744},",\n",{"type":40,"tag":51,"props":746,"children":748},{"className":747},[],[749],{"type":45,"value":750},"@visibleAsColor3",{"type":45,"value":715},{"type":40,"tag":51,"props":753,"children":755},{"className":754},[],[756],{"type":45,"value":757},"@visibleAsColor4",{"type":45,"value":715},{"type":40,"tag":51,"props":760,"children":762},{"className":761},[],[763],{"type":45,"value":764},"@visibleAsEntity",{"type":45,"value":715},{"type":40,"tag":51,"props":767,"children":769},{"className":768},[],[770],{"type":45,"value":771},"@visibleAsTexture",{"type":45,"value":715},{"type":40,"tag":51,"props":774,"children":776},{"className":775},[],[777],{"type":45,"value":778},"@visibleAsKeyMap",{"type":45,"value":780},".\nEach makes a property editable per-object in the editor inspector.",{"type":40,"tag":381,"props":782,"children":784},{"id":783},"linking-assets-see-referencesasset-decoratorsmd",[785,787],{"type":45,"value":786},"Linking assets — see ",{"type":40,"tag":488,"props":788,"children":790},{"href":789},"references\u002Fasset-decorators.md",[791],{"type":45,"value":789},{"type":40,"tag":47,"props":793,"children":794},{},[795,801,803,809,810,816,817,823,824,830,831,837,838,844,845,851,852,858],{"type":40,"tag":51,"props":796,"children":798},{"className":797},[],[799],{"type":45,"value":800},"@visibleAsAsset(type, label, config?)",{"type":45,"value":802}," links a property to a project asset (",{"type":40,"tag":51,"props":804,"children":806},{"className":805},[],[807],{"type":45,"value":808},"json",{"type":45,"value":715},{"type":40,"tag":51,"props":811,"children":813},{"className":812},[],[814],{"type":45,"value":815},"material",{"type":45,"value":715},{"type":40,"tag":51,"props":818,"children":820},{"className":819},[],[821],{"type":45,"value":822},"gui",{"type":45,"value":744},{"type":40,"tag":51,"props":825,"children":827},{"className":826},[],[828],{"type":45,"value":829},"scene",{"type":45,"value":715},{"type":40,"tag":51,"props":832,"children":834},{"className":833},[],[835],{"type":45,"value":836},"nodeParticleSystemSet",{"type":45,"value":715},{"type":40,"tag":51,"props":839,"children":841},{"className":840},[],[842],{"type":45,"value":843},"navmesh",{"type":45,"value":715},{"type":40,"tag":51,"props":846,"children":848},{"className":847},[],[849],{"type":45,"value":850},"cinematic",{"type":45,"value":715},{"type":40,"tag":51,"props":853,"children":855},{"className":854},[],[856],{"type":45,"value":857},"ragdoll",{"type":45,"value":859},"). Preloaded during scene load.",{"type":40,"tag":381,"props":861,"children":863},{"id":862},"input-events-see-referencesevent-decoratorsmd",[864,866],{"type":45,"value":865},"Input events — see ",{"type":40,"tag":488,"props":867,"children":869},{"href":868},"references\u002Fevent-decorators.md",[870],{"type":45,"value":868},{"type":40,"tag":47,"props":872,"children":873},{},[874,880,882,888,890,896,898,904,906,912,914,920],{"type":40,"tag":51,"props":875,"children":877},{"className":876},[],[878],{"type":45,"value":879},"@onPointerEvent(type | type[], { mode })",{"type":45,"value":881}," and ",{"type":40,"tag":51,"props":883,"children":885},{"className":884},[],[886],{"type":45,"value":887},"@onKeyboardEvent(type | type[])",{"type":45,"value":889}," call the decorated method\nwhen the event fires. Pointer ",{"type":40,"tag":51,"props":891,"children":893},{"className":892},[],[894],{"type":45,"value":895},"mode",{"type":45,"value":897}," can be ",{"type":40,"tag":51,"props":899,"children":901},{"className":900},[],[902],{"type":45,"value":903},"global",{"type":45,"value":905}," (default), ",{"type":40,"tag":51,"props":907,"children":909},{"className":908},[],[910],{"type":45,"value":911},"attachedMeshOnly",{"type":45,"value":913},", or ",{"type":40,"tag":51,"props":915,"children":917},{"className":916},[],[918],{"type":45,"value":919},"includeDescendants",{"type":45,"value":310},{"type":40,"tag":381,"props":922,"children":924},{"id":923},"loading-scenes-see-referencesloading-scenesmd",[925,927],{"type":45,"value":926},"Loading scenes — see ",{"type":40,"tag":488,"props":928,"children":930},{"href":929},"references\u002Floading-scenes.md",[931],{"type":45,"value":929},{"type":40,"tag":47,"props":933,"children":934},{},[935,941,943,949],{"type":40,"tag":51,"props":936,"children":938},{"className":937},[],[939],{"type":45,"value":940},"await loadScene(rootUrl, sceneFilename, scene, scriptsMap, options?)",{"type":45,"value":942}," appends a saved ",{"type":40,"tag":51,"props":944,"children":946},{"className":945},[],[947],{"type":45,"value":948},".babylon",{"type":45,"value":950}," scene,\npreloads script assets, configures lights\u002Fshadows\u002FLODs\u002Fphysics\u002Fpost-processing, and attaches every script.",{"type":40,"tag":381,"props":952,"children":954},{"id":953},"instantiating-sub-scenes-see-referencesscene-containersmd",[955,957],{"type":45,"value":956},"Instantiating sub-scenes — see ",{"type":40,"tag":488,"props":958,"children":960},{"href":959},"references\u002Fscene-containers.md",[961],{"type":45,"value":959},{"type":40,"tag":47,"props":963,"children":964},{},[965,970,972,978,980,986,987,993,994,1000,1001,1007],{"type":40,"tag":51,"props":966,"children":968},{"className":967},[],[969],{"type":45,"value":691},{"type":45,"value":971}," (from ",{"type":40,"tag":51,"props":973,"children":975},{"className":974},[],[976],{"type":45,"value":977},"@sceneAsset",{"type":45,"value":979},") — ",{"type":40,"tag":51,"props":981,"children":983},{"className":982},[],[984],{"type":45,"value":985},".removeDefault()",{"type":45,"value":715},{"type":40,"tag":51,"props":988,"children":990},{"className":989},[],[991],{"type":45,"value":992},".instantiate(options?)",{"type":45,"value":744},{"type":40,"tag":51,"props":995,"children":997},{"className":996},[],[998],{"type":45,"value":999},".getRootNodeByName()",{"type":45,"value":715},{"type":40,"tag":51,"props":1002,"children":1004},{"className":1003},[],[1005],{"type":45,"value":1006},".getScriptByClassByObjectName()",{"type":45,"value":310},{"type":40,"tag":262,"props":1009,"children":1011},{"id":1010},"minimal-class-based-script",[1012],{"type":45,"value":1013},"Minimal class-based script",{"type":40,"tag":169,"props":1015,"children":1017},{"className":171,"code":1016,"language":173,"meta":174,"style":174},"import { Mesh } from \"@babylonjs\u002Fcore\u002FMeshes\u002Fmesh\";\nimport { visibleAsNumber } from \"babylonjs-editor-tools\";\n\nexport default class RotateScript {\n    @visibleAsNumber(\"Rotation Speed\", { min: 0, max: 10, step: 0.1 })\n    private _speed: number = 1;\n\n    public constructor(public mesh: Mesh) {\n        \u002F\u002F ⚠️ decorated properties are NOT available here yet.\n    }\n\n    public onStart(): void {\n        \u002F\u002F ✅ decorated properties are now resolved.\n    }\n\n    public onUpdate(): void {\n        this.mesh.rotation.y += this._speed * this.mesh.getScene().getAnimationRatio();\n    }\n}\n",[1018],{"type":40,"tag":51,"props":1019,"children":1020},{"__ignoreMap":174},[1021,1062,1102,1112,1143,1246,1283,1291,1336,1346,1355,1363,1390,1399,1407,1415,1440,1531,1539],{"type":40,"tag":180,"props":1022,"children":1023},{"class":182,"line":183},[1024,1028,1032,1037,1041,1045,1049,1054,1058],{"type":40,"tag":180,"props":1025,"children":1026},{"style":187},[1027],{"type":45,"value":190},{"type":40,"tag":180,"props":1029,"children":1030},{"style":193},[1031],{"type":45,"value":196},{"type":40,"tag":180,"props":1033,"children":1034},{"style":199},[1035],{"type":45,"value":1036}," Mesh",{"type":40,"tag":180,"props":1038,"children":1039},{"style":193},[1040],{"type":45,"value":235},{"type":40,"tag":180,"props":1042,"children":1043},{"style":187},[1044],{"type":45,"value":240},{"type":40,"tag":180,"props":1046,"children":1047},{"style":193},[1048],{"type":45,"value":245},{"type":40,"tag":180,"props":1050,"children":1051},{"style":248},[1052],{"type":45,"value":1053},"@babylonjs\u002Fcore\u002FMeshes\u002Fmesh",{"type":40,"tag":180,"props":1055,"children":1056},{"style":193},[1057],{"type":45,"value":255},{"type":40,"tag":180,"props":1059,"children":1060},{"style":193},[1061],{"type":45,"value":260},{"type":40,"tag":180,"props":1063,"children":1065},{"class":182,"line":1064},2,[1066,1070,1074,1078,1082,1086,1090,1094,1098],{"type":40,"tag":180,"props":1067,"children":1068},{"style":187},[1069],{"type":45,"value":190},{"type":40,"tag":180,"props":1071,"children":1072},{"style":193},[1073],{"type":45,"value":196},{"type":40,"tag":180,"props":1075,"children":1076},{"style":199},[1077],{"type":45,"value":221},{"type":40,"tag":180,"props":1079,"children":1080},{"style":193},[1081],{"type":45,"value":235},{"type":40,"tag":180,"props":1083,"children":1084},{"style":187},[1085],{"type":45,"value":240},{"type":40,"tag":180,"props":1087,"children":1088},{"style":193},[1089],{"type":45,"value":245},{"type":40,"tag":180,"props":1091,"children":1092},{"style":248},[1093],{"type":45,"value":4},{"type":40,"tag":180,"props":1095,"children":1096},{"style":193},[1097],{"type":45,"value":255},{"type":40,"tag":180,"props":1099,"children":1100},{"style":193},[1101],{"type":45,"value":260},{"type":40,"tag":180,"props":1103,"children":1105},{"class":182,"line":1104},3,[1106],{"type":40,"tag":180,"props":1107,"children":1109},{"emptyLinePlaceholder":1108},true,[1110],{"type":45,"value":1111},"\n",{"type":40,"tag":180,"props":1113,"children":1115},{"class":182,"line":1114},4,[1116,1121,1126,1132,1138],{"type":40,"tag":180,"props":1117,"children":1118},{"style":187},[1119],{"type":45,"value":1120},"export",{"type":40,"tag":180,"props":1122,"children":1123},{"style":187},[1124],{"type":45,"value":1125}," default",{"type":40,"tag":180,"props":1127,"children":1129},{"style":1128},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[1130],{"type":45,"value":1131}," class",{"type":40,"tag":180,"props":1133,"children":1135},{"style":1134},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1136],{"type":45,"value":1137}," RotateScript",{"type":40,"tag":180,"props":1139,"children":1140},{"style":193},[1141],{"type":45,"value":1142}," {\n",{"type":40,"tag":180,"props":1144,"children":1146},{"class":182,"line":1145},5,[1147,1152,1158,1163,1167,1172,1176,1180,1184,1190,1195,1201,1205,1210,1214,1219,1223,1228,1232,1237,1241],{"type":40,"tag":180,"props":1148,"children":1149},{"style":193},[1150],{"type":45,"value":1151},"    @",{"type":40,"tag":180,"props":1153,"children":1155},{"style":1154},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[1156],{"type":45,"value":1157},"visibleAsNumber",{"type":40,"tag":180,"props":1159,"children":1160},{"style":199},[1161],{"type":45,"value":1162},"(",{"type":40,"tag":180,"props":1164,"children":1165},{"style":193},[1166],{"type":45,"value":255},{"type":40,"tag":180,"props":1168,"children":1169},{"style":248},[1170],{"type":45,"value":1171},"Rotation Speed",{"type":40,"tag":180,"props":1173,"children":1174},{"style":193},[1175],{"type":45,"value":255},{"type":40,"tag":180,"props":1177,"children":1178},{"style":193},[1179],{"type":45,"value":207},{"type":40,"tag":180,"props":1181,"children":1182},{"style":193},[1183],{"type":45,"value":196},{"type":40,"tag":180,"props":1185,"children":1187},{"style":1186},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[1188],{"type":45,"value":1189}," min",{"type":40,"tag":180,"props":1191,"children":1192},{"style":193},[1193],{"type":45,"value":1194},":",{"type":40,"tag":180,"props":1196,"children":1198},{"style":1197},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[1199],{"type":45,"value":1200}," 0",{"type":40,"tag":180,"props":1202,"children":1203},{"style":193},[1204],{"type":45,"value":207},{"type":40,"tag":180,"props":1206,"children":1207},{"style":1186},[1208],{"type":45,"value":1209}," max",{"type":40,"tag":180,"props":1211,"children":1212},{"style":193},[1213],{"type":45,"value":1194},{"type":40,"tag":180,"props":1215,"children":1216},{"style":1197},[1217],{"type":45,"value":1218}," 10",{"type":40,"tag":180,"props":1220,"children":1221},{"style":193},[1222],{"type":45,"value":207},{"type":40,"tag":180,"props":1224,"children":1225},{"style":1186},[1226],{"type":45,"value":1227}," step",{"type":40,"tag":180,"props":1229,"children":1230},{"style":193},[1231],{"type":45,"value":1194},{"type":40,"tag":180,"props":1233,"children":1234},{"style":1197},[1235],{"type":45,"value":1236}," 0.1",{"type":40,"tag":180,"props":1238,"children":1239},{"style":193},[1240],{"type":45,"value":235},{"type":40,"tag":180,"props":1242,"children":1243},{"style":199},[1244],{"type":45,"value":1245},")\n",{"type":40,"tag":180,"props":1247,"children":1249},{"class":182,"line":1248},6,[1250,1255,1260,1264,1269,1274,1279],{"type":40,"tag":180,"props":1251,"children":1252},{"style":1128},[1253],{"type":45,"value":1254},"    private",{"type":40,"tag":180,"props":1256,"children":1257},{"style":1186},[1258],{"type":45,"value":1259}," _speed",{"type":40,"tag":180,"props":1261,"children":1262},{"style":193},[1263],{"type":45,"value":1194},{"type":40,"tag":180,"props":1265,"children":1266},{"style":1134},[1267],{"type":45,"value":1268}," number",{"type":40,"tag":180,"props":1270,"children":1271},{"style":193},[1272],{"type":45,"value":1273}," =",{"type":40,"tag":180,"props":1275,"children":1276},{"style":1197},[1277],{"type":45,"value":1278}," 1",{"type":40,"tag":180,"props":1280,"children":1281},{"style":193},[1282],{"type":45,"value":260},{"type":40,"tag":180,"props":1284,"children":1286},{"class":182,"line":1285},7,[1287],{"type":40,"tag":180,"props":1288,"children":1289},{"emptyLinePlaceholder":1108},[1290],{"type":45,"value":1111},{"type":40,"tag":180,"props":1292,"children":1294},{"class":182,"line":1293},8,[1295,1300,1305,1309,1314,1320,1324,1328,1332],{"type":40,"tag":180,"props":1296,"children":1297},{"style":1128},[1298],{"type":45,"value":1299},"    public",{"type":40,"tag":180,"props":1301,"children":1302},{"style":1128},[1303],{"type":45,"value":1304}," constructor",{"type":40,"tag":180,"props":1306,"children":1307},{"style":193},[1308],{"type":45,"value":1162},{"type":40,"tag":180,"props":1310,"children":1311},{"style":1128},[1312],{"type":45,"value":1313},"public",{"type":40,"tag":180,"props":1315,"children":1317},{"style":1316},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[1318],{"type":45,"value":1319}," mesh",{"type":40,"tag":180,"props":1321,"children":1322},{"style":193},[1323],{"type":45,"value":1194},{"type":40,"tag":180,"props":1325,"children":1326},{"style":1134},[1327],{"type":45,"value":1036},{"type":40,"tag":180,"props":1329,"children":1330},{"style":193},[1331],{"type":45,"value":393},{"type":40,"tag":180,"props":1333,"children":1334},{"style":193},[1335],{"type":45,"value":1142},{"type":40,"tag":180,"props":1337,"children":1339},{"class":182,"line":1338},9,[1340],{"type":40,"tag":180,"props":1341,"children":1343},{"style":1342},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1344],{"type":45,"value":1345},"        \u002F\u002F ⚠️ decorated properties are NOT available here yet.\n",{"type":40,"tag":180,"props":1347,"children":1349},{"class":182,"line":1348},10,[1350],{"type":40,"tag":180,"props":1351,"children":1352},{"style":193},[1353],{"type":45,"value":1354},"    }\n",{"type":40,"tag":180,"props":1356,"children":1358},{"class":182,"line":1357},11,[1359],{"type":40,"tag":180,"props":1360,"children":1361},{"emptyLinePlaceholder":1108},[1362],{"type":45,"value":1111},{"type":40,"tag":180,"props":1364,"children":1366},{"class":182,"line":1365},12,[1367,1371,1376,1381,1386],{"type":40,"tag":180,"props":1368,"children":1369},{"style":1128},[1370],{"type":45,"value":1299},{"type":40,"tag":180,"props":1372,"children":1373},{"style":1186},[1374],{"type":45,"value":1375}," onStart",{"type":40,"tag":180,"props":1377,"children":1378},{"style":193},[1379],{"type":45,"value":1380},"():",{"type":40,"tag":180,"props":1382,"children":1383},{"style":1134},[1384],{"type":45,"value":1385}," void",{"type":40,"tag":180,"props":1387,"children":1388},{"style":193},[1389],{"type":45,"value":1142},{"type":40,"tag":180,"props":1391,"children":1393},{"class":182,"line":1392},13,[1394],{"type":40,"tag":180,"props":1395,"children":1396},{"style":1342},[1397],{"type":45,"value":1398},"        \u002F\u002F ✅ decorated properties are now resolved.\n",{"type":40,"tag":180,"props":1400,"children":1402},{"class":182,"line":1401},14,[1403],{"type":40,"tag":180,"props":1404,"children":1405},{"style":193},[1406],{"type":45,"value":1354},{"type":40,"tag":180,"props":1408,"children":1410},{"class":182,"line":1409},15,[1411],{"type":40,"tag":180,"props":1412,"children":1413},{"emptyLinePlaceholder":1108},[1414],{"type":45,"value":1111},{"type":40,"tag":180,"props":1416,"children":1418},{"class":182,"line":1417},16,[1419,1423,1428,1432,1436],{"type":40,"tag":180,"props":1420,"children":1421},{"style":1128},[1422],{"type":45,"value":1299},{"type":40,"tag":180,"props":1424,"children":1425},{"style":1186},[1426],{"type":45,"value":1427}," onUpdate",{"type":40,"tag":180,"props":1429,"children":1430},{"style":193},[1431],{"type":45,"value":1380},{"type":40,"tag":180,"props":1433,"children":1434},{"style":1134},[1435],{"type":45,"value":1385},{"type":40,"tag":180,"props":1437,"children":1438},{"style":193},[1439],{"type":45,"value":1142},{"type":40,"tag":180,"props":1441,"children":1443},{"class":182,"line":1442},17,[1444,1449,1454,1458,1463,1467,1472,1477,1482,1487,1492,1496,1500,1504,1509,1514,1518,1523,1527],{"type":40,"tag":180,"props":1445,"children":1446},{"style":193},[1447],{"type":45,"value":1448},"        this.",{"type":40,"tag":180,"props":1450,"children":1451},{"style":199},[1452],{"type":45,"value":1453},"mesh",{"type":40,"tag":180,"props":1455,"children":1456},{"style":193},[1457],{"type":45,"value":310},{"type":40,"tag":180,"props":1459,"children":1460},{"style":199},[1461],{"type":45,"value":1462},"rotation",{"type":40,"tag":180,"props":1464,"children":1465},{"style":193},[1466],{"type":45,"value":310},{"type":40,"tag":180,"props":1468,"children":1469},{"style":199},[1470],{"type":45,"value":1471},"y",{"type":40,"tag":180,"props":1473,"children":1474},{"style":193},[1475],{"type":45,"value":1476}," +=",{"type":40,"tag":180,"props":1478,"children":1479},{"style":193},[1480],{"type":45,"value":1481}," this.",{"type":40,"tag":180,"props":1483,"children":1484},{"style":199},[1485],{"type":45,"value":1486},"_speed",{"type":40,"tag":180,"props":1488,"children":1489},{"style":193},[1490],{"type":45,"value":1491}," *",{"type":40,"tag":180,"props":1493,"children":1494},{"style":193},[1495],{"type":45,"value":1481},{"type":40,"tag":180,"props":1497,"children":1498},{"style":199},[1499],{"type":45,"value":1453},{"type":40,"tag":180,"props":1501,"children":1502},{"style":193},[1503],{"type":45,"value":310},{"type":40,"tag":180,"props":1505,"children":1506},{"style":1154},[1507],{"type":45,"value":1508},"getScene",{"type":40,"tag":180,"props":1510,"children":1511},{"style":1186},[1512],{"type":45,"value":1513},"()",{"type":40,"tag":180,"props":1515,"children":1516},{"style":193},[1517],{"type":45,"value":310},{"type":40,"tag":180,"props":1519,"children":1520},{"style":1154},[1521],{"type":45,"value":1522},"getAnimationRatio",{"type":40,"tag":180,"props":1524,"children":1525},{"style":1186},[1526],{"type":45,"value":1513},{"type":40,"tag":180,"props":1528,"children":1529},{"style":193},[1530],{"type":45,"value":260},{"type":40,"tag":180,"props":1532,"children":1534},{"class":182,"line":1533},18,[1535],{"type":40,"tag":180,"props":1536,"children":1537},{"style":193},[1538],{"type":45,"value":1354},{"type":40,"tag":180,"props":1540,"children":1542},{"class":182,"line":1541},19,[1543],{"type":40,"tag":180,"props":1544,"children":1545},{"style":193},[1546],{"type":45,"value":1547},"}\n",{"type":40,"tag":262,"props":1549,"children":1551},{"id":1550},"conventions-to-follow-when-authoring-scripts",[1552],{"type":45,"value":1553},"Conventions to follow when authoring scripts",{"type":40,"tag":269,"props":1555,"children":1556},{},[1557,1576,1589,1600,1620],{"type":40,"tag":95,"props":1558,"children":1559},{},[1560,1562,1567,1569,1575],{"type":45,"value":1561},"Default-export ",{"type":40,"tag":99,"props":1563,"children":1564},{},[1565],{"type":45,"value":1566},"one class per file",{"type":45,"value":1568},"; name the file in kebab-case (e.g. ",{"type":40,"tag":51,"props":1570,"children":1572},{"className":1571},[],[1573],{"type":45,"value":1574},"rotate-script.ts",{"type":45,"value":152},{"type":40,"tag":95,"props":1577,"children":1578},{},[1579,1581,1587],{"type":45,"value":1580},"Type decorated reference properties as nullable (",{"type":40,"tag":51,"props":1582,"children":1584},{"className":1583},[],[1585],{"type":45,"value":1586},"Mesh | null = null",{"type":45,"value":1588},") and guard before use, since they\nresolve only after construction.",{"type":40,"tag":95,"props":1590,"children":1591},{},[1592,1594,1599],{"type":45,"value":1593},"Never read decorated properties in the ",{"type":40,"tag":51,"props":1595,"children":1597},{"className":1596},[],[1598],{"type":45,"value":293},{"type":45,"value":310},{"type":40,"tag":95,"props":1601,"children":1602},{},[1603,1605,1610,1612,1618],{"type":45,"value":1604},"Match the repo's Prettier style: ",{"type":40,"tag":99,"props":1606,"children":1607},{},[1608],{"type":45,"value":1609},"tabs",{"type":45,"value":1611},", double quotes, semicolons, ",{"type":40,"tag":51,"props":1613,"children":1615},{"className":1614},[],[1616],{"type":45,"value":1617},"printWidth",{"type":45,"value":1619}," 180.",{"type":40,"tag":95,"props":1621,"children":1622},{},[1623,1625,1630],{"type":45,"value":1624},"Import Babylon.js symbols from deep paths (",{"type":40,"tag":51,"props":1626,"children":1628},{"className":1627},[],[1629],{"type":45,"value":1053},{"type":45,"value":1631},") to keep tree-shaking working,\nexactly like the templates and documentation examples do.",{"type":40,"tag":47,"props":1633,"children":1634},{},[1635,1637,1643],{"type":45,"value":1636},"For full details and runnable examples, open the matching file under ",{"type":40,"tag":51,"props":1638,"children":1640},{"className":1639},[],[1641],{"type":45,"value":1642},"references\u002F",{"type":45,"value":310},{"type":40,"tag":1645,"props":1646,"children":1647},"style",{},[1648],{"type":45,"value":1649},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1651,"total":183},[1652],{"slug":4,"name":4,"fn":5,"description":6,"org":1653,"tags":1654,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1655,1656,1657],{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":18,"slug":19,"type":16},{"items":1659,"total":183},[1660],{"slug":4,"name":4,"fn":5,"description":6,"org":1661,"tags":1662,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1663,1664,1665],{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":18,"slug":19,"type":16}]