├── .devcontainer └── devcontainer.json ├── .editorconfig ├── .eslintignore ├── .eslintrc.json ├── .github ├── dependabot.yml ├── scripts │ └── check-no-local-packages.cjs └── workflows │ ├── ci.yml │ ├── ready_for_review.yml │ ├── release-docs.yml │ └── update-unity-renderer.yml ├── .gitignore ├── .prettierrc.json ├── .syncpackrc.json ├── .vscode ├── launch.json └── settings.json ├── LICENSE ├── Makefile ├── README.md ├── codecov.yml ├── docs ├── adding-or-modifying-a-component.md ├── bytebuffer-interface.md ├── components-definition.md ├── components-serialization.md ├── summary.json └── wire-message.md ├── jest.config.js ├── package-lock.json ├── package.json ├── packages └── @dcl │ ├── ecs │ ├── .gitattributes │ ├── .gitignore │ ├── .vscode │ │ ├── launch.json │ │ └── tasks.json │ ├── Makefile │ ├── README.md │ ├── package-lock.json │ ├── package.json │ ├── src │ │ ├── components │ │ │ ├── component-number.ts │ │ │ ├── extended │ │ │ │ ├── Animator.ts │ │ │ │ ├── AudioSource.ts │ │ │ │ ├── AudioStream.ts │ │ │ │ ├── InputModifier.ts │ │ │ │ ├── Material.ts │ │ │ │ ├── MeshCollider.ts │ │ │ │ ├── MeshRenderer.ts │ │ │ │ ├── Tween.ts │ │ │ │ └── VirtualCamera.ts │ │ │ ├── index.ts │ │ │ ├── manual │ │ │ │ ├── Name.ts │ │ │ │ ├── NetworkEntity.ts │ │ │ │ ├── NetworkParent.ts │ │ │ │ ├── SyncComponents.ts │ │ │ │ └── Transform.ts │ │ │ └── types.ts │ │ ├── composite │ │ │ ├── components.ts │ │ │ ├── index.ts │ │ │ ├── instance.ts │ │ │ ├── path.ts │ │ │ └── proto │ │ │ │ └── composite.proto │ │ ├── ecs.md │ │ ├── engine │ │ │ ├── component.ts │ │ │ ├── entity.ts │ │ │ ├── grow-only-value-set-component-definition.ts │ │ │ ├── index.ts │ │ │ ├── input.ts │ │ │ ├── lww-element-set-component-definition.ts │ │ │ ├── readonly.ts │ │ │ ├── systems.ts │ │ │ └── types.ts │ │ ├── index.ts │ │ ├── runtime │ │ │ ├── crc.ts │ │ │ ├── helpers │ │ │ │ ├── coordinates.ts │ │ │ │ ├── index.ts │ │ │ │ └── tree.ts │ │ │ ├── initialization │ │ │ │ └── index.ts │ │ │ ├── invariant.ts │ │ │ └── types.ts │ │ ├── schemas │ │ │ ├── Array.ts │ │ │ ├── ISchema.ts │ │ │ ├── Map.ts │ │ │ ├── OneOf.ts │ │ │ ├── Optional.ts │ │ │ ├── basic │ │ │ │ ├── Boolean.ts │ │ │ │ ├── Enum.ts │ │ │ │ ├── Float.ts │ │ │ │ ├── Integer.ts │ │ │ │ └── String.ts │ │ │ ├── buildSchema │ │ │ │ ├── index.ts │ │ │ │ ├── types.ts │ │ │ │ └── utils.ts │ │ │ ├── custom │ │ │ │ ├── Color3.ts │ │ │ │ ├── Color4.ts │ │ │ │ ├── Entity.ts │ │ │ │ ├── Quaternion.ts │ │ │ │ └── Vector3.ts │ │ │ ├── index.ts │ │ │ └── typing.ts │ │ ├── serialization │ │ │ ├── ByteBuffer │ │ │ │ └── index.ts │ │ │ └── crdt │ │ │ │ ├── appendValue.ts │ │ │ │ ├── crdtMessageProtocol.ts │ │ │ │ ├── deleteComponent.ts │ │ │ │ ├── deleteEntity.ts │ │ │ │ ├── index.ts │ │ │ │ ├── message.ts │ │ │ │ ├── network │ │ │ │ ├── deleteComponentNetwork.ts │ │ │ │ ├── deleteEntityNetwork.ts │ │ │ │ ├── putComponentNetwork.ts │ │ │ │ └── utils.ts │ │ │ │ ├── putComponent.ts │ │ │ │ └── types.ts │ │ └── systems │ │ │ ├── async-task.ts │ │ │ ├── crdt │ │ │ ├── gset.ts │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ │ ├── cyclicParentingChecker.ts │ │ │ ├── events.ts │ │ │ ├── pointer-event-collider-checker.ts │ │ │ ├── raycast.ts │ │ │ ├── tween.ts │ │ │ └── videoEvents.ts │ ├── tsconfig.cjs.json │ └── tsconfig.json │ ├── inspector │ ├── .env │ ├── .gitignore │ ├── .npmignore │ ├── .vscode │ │ └── settings.json │ ├── README.md │ ├── __mocks__ │ │ └── @babylonjs │ │ │ └── inspector.ts │ ├── architecture.excalidraw.svg │ ├── build.js │ ├── docs │ │ └── entity-select.md │ ├── hot-reload.js │ ├── jest-puppeteer.config.js │ ├── jest.config.js │ ├── package-lock.json │ ├── package.json │ ├── public │ │ └── index.html │ ├── scripts │ │ ├── copy-bin.ts │ │ └── tsconfig.json │ ├── src │ │ ├── components │ │ │ ├── App │ │ │ │ ├── App.css │ │ │ │ ├── App.tsx │ │ │ │ └── index.ts │ │ │ ├── AssetPreview │ │ │ │ ├── AssetPreview.css │ │ │ │ ├── AssetPreview.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── types.ts │ │ │ │ └── utils.ts │ │ │ ├── Assets │ │ │ │ ├── Assets.css │ │ │ │ ├── Assets.tsx │ │ │ │ ├── custom-asset-icon.svg │ │ │ │ └── index.ts │ │ │ ├── AssetsCatalog │ │ │ │ ├── Asset │ │ │ │ │ ├── Asset.css │ │ │ │ │ ├── Asset.tsx │ │ │ │ │ ├── icons │ │ │ │ │ │ └── ground.svg │ │ │ │ │ └── index.ts │ │ │ │ ├── Assets │ │ │ │ │ ├── Assets.css │ │ │ │ │ ├── Assets.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── AssetsCatalog.css │ │ │ │ ├── AssetsCatalog.tsx │ │ │ │ ├── Categories │ │ │ │ │ ├── Categories.css │ │ │ │ │ ├── Categories.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── Header │ │ │ │ │ ├── Header.css │ │ │ │ │ ├── Header.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── Themes │ │ │ │ │ ├── Themes.css │ │ │ │ │ ├── Themes.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ ├── Block │ │ │ │ ├── Block.css │ │ │ │ ├── Block.tsx │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ ├── Box │ │ │ │ ├── Box.css │ │ │ │ ├── Box.tsx │ │ │ │ └── index.ts │ │ │ ├── Button │ │ │ │ ├── Button.css │ │ │ │ ├── Button.tsx │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ ├── Container │ │ │ │ ├── Container.css │ │ │ │ ├── Container.tsx │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ ├── ContexMenu │ │ │ │ ├── ContextMenu.tsx │ │ │ │ └── index.ts │ │ │ ├── CreateCustomAsset │ │ │ │ ├── CreateCustomAsset.css │ │ │ │ ├── CreateCustomAsset.tsx │ │ │ │ └── index.ts │ │ │ ├── CustomAssets │ │ │ │ ├── ContextMenu │ │ │ │ │ ├── ContextMenu.ts │ │ │ │ │ └── CustomAssetContextMenu.tsx │ │ │ │ ├── CustomAssetItem.tsx │ │ │ │ ├── CustomAssets.css │ │ │ │ ├── CustomAssets.tsx │ │ │ │ └── index.ts │ │ │ ├── EntityInspector │ │ │ │ ├── ActionInspector │ │ │ │ │ ├── ActionInspector.css │ │ │ │ │ ├── ActionInspector.tsx │ │ │ │ │ ├── BatchAction │ │ │ │ │ │ ├── BatchAction.css │ │ │ │ │ │ ├── BatchAction.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── CloneEntityAction │ │ │ │ │ │ ├── CloneEntityAction.css │ │ │ │ │ │ ├── CloneEntityAction.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── DelayAction │ │ │ │ │ │ ├── DelayAction.css │ │ │ │ │ │ ├── DelayAction.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── FollowPlayerAction │ │ │ │ │ │ ├── FollowPlayerAction.css │ │ │ │ │ │ ├── FollowPlayerAction.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── LoopAction │ │ │ │ │ │ ├── LoopAction.css │ │ │ │ │ │ ├── LoopAction.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── MovePlayerAction │ │ │ │ │ │ ├── MovePlayerAction.css │ │ │ │ │ │ ├── MovePlayerAction.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── OpenLinkAction │ │ │ │ │ │ ├── OpenLinkAction.css │ │ │ │ │ │ ├── OpenLinkAction.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── PlayAnimationAction │ │ │ │ │ │ ├── PlayAnimationAction.css │ │ │ │ │ │ ├── PlayAnimationAction.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── PlayAudioStreamAction │ │ │ │ │ │ ├── PlayAudioStreamAction.css │ │ │ │ │ │ ├── PlayAudioStreamAction.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── PlayCustomEmoteAction │ │ │ │ │ │ ├── PlayCustomEmoteAction.css │ │ │ │ │ │ ├── PlayCustomEmoteAction.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── PlayDefaultEmoteAction │ │ │ │ │ │ ├── PlayDefaultEmoteAction.css │ │ │ │ │ │ ├── PlayDefaultEmoteAction.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── PlaySoundAction │ │ │ │ │ │ ├── PlaySoundAction.css │ │ │ │ │ │ ├── PlaySoundAction.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── PlayVideoStreamAction │ │ │ │ │ │ ├── PlayVideoStreamAction.css │ │ │ │ │ │ ├── PlayVideoStreamAction.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── RandomAction │ │ │ │ │ │ ├── RandomAction.css │ │ │ │ │ │ ├── RandomAction.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── SetPositionAction │ │ │ │ │ │ ├── SetPositionAction.css │ │ │ │ │ │ ├── SetPositionAction.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── SetRotationAction │ │ │ │ │ │ ├── SetRotationAction.css │ │ │ │ │ │ ├── SetRotationAction.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── SetScaleAction │ │ │ │ │ │ ├── SetScaleAction.css │ │ │ │ │ │ ├── SetScaleAction.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── SetVisibilityAction │ │ │ │ │ │ ├── SetVisibilityAction.css │ │ │ │ │ │ ├── SetVisibilityAction.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── ShowImageAction │ │ │ │ │ │ ├── ShowImageAction.css │ │ │ │ │ │ ├── ShowImageAction.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── ShowTextAction │ │ │ │ │ │ ├── ShowTextAction.css │ │ │ │ │ │ ├── ShowTextAction.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── TeleportPlayerAction │ │ │ │ │ │ ├── TeleportPlayerAction.css │ │ │ │ │ │ ├── TeleportPlayerAction.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── TriggerProximityAction │ │ │ │ │ │ ├── TriggerProximityAction.css │ │ │ │ │ │ ├── TriggerProximityAction.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── TweenAction │ │ │ │ │ │ ├── TweenAction.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── AddButton │ │ │ │ │ ├── AddButton.css │ │ │ │ │ ├── AddButton.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── AdminToolkitView │ │ │ │ │ ├── AdminToolkitView.css │ │ │ │ │ ├── AdminToolkitView.tsx │ │ │ │ │ ├── RewardsControl │ │ │ │ │ │ ├── RewardsControl.css │ │ │ │ │ │ ├── RewardsControl.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── SmartItemControl │ │ │ │ │ │ ├── SmartItemControl.css │ │ │ │ │ │ ├── SmartItemControl.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── TextAnnouncementControl │ │ │ │ │ │ ├── TextAnnouncementControl.css │ │ │ │ │ │ ├── TextAnnouncementControl.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── VideoControl │ │ │ │ │ │ ├── VideoControl.css │ │ │ │ │ │ ├── VideoControl.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── AnimatorInspector │ │ │ │ │ ├── AnimatorInspector.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── utils.spec.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── AudioSourceInspector │ │ │ │ │ ├── AudioSourceInspector.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── AudioStreamInspector │ │ │ │ │ ├── AudioStreamInspector.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── utils.spec.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── CounterBarInspector │ │ │ │ │ ├── CounterBarInspector.css │ │ │ │ │ ├── CounterBarInspector.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── CounterInspector │ │ │ │ │ ├── CounterInspector.css │ │ │ │ │ ├── CounterInspector.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── EntityHeader │ │ │ │ │ ├── EntityHeader.css │ │ │ │ │ ├── EntityHeader.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── EntityInspector.css │ │ │ │ ├── EntityInspector.tsx │ │ │ │ ├── GltfInspector │ │ │ │ │ ├── GltfInspector.css │ │ │ │ │ ├── GltfInspector.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── utils.spec.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── MaterialInspector │ │ │ │ │ ├── MaterialInspector.tsx │ │ │ │ │ ├── Texture │ │ │ │ │ │ ├── Texture.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ ├── utils.spec.ts │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── utils.spec.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── MeshColliderInspector │ │ │ │ │ ├── MeshColliderInspector.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── utils.spec.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── MeshRendererInspector │ │ │ │ │ ├── MeshRendererInspector.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── utils.spec.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── MoreOptionsMenu │ │ │ │ │ ├── MoreOptionsMenu.css │ │ │ │ │ ├── MoreOptionsMenu.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── NftShapeInspector │ │ │ │ │ ├── NftShapeInspector.css │ │ │ │ │ ├── NftShapeInspector.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── utils.spec.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── PointerEventsInspector │ │ │ │ │ ├── PointerEventsInspector.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── utils.spec.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── RemoveButton │ │ │ │ │ ├── RemoveButton.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── RewardInspector │ │ │ │ │ ├── RewardInspector.css │ │ │ │ │ ├── RewardInspector.tsx │ │ │ │ │ ├── RewardsForm.css │ │ │ │ │ ├── RewardsForm.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── SceneInspector │ │ │ │ │ ├── Layout │ │ │ │ │ │ ├── Grid │ │ │ │ │ │ │ ├── Grid.css │ │ │ │ │ │ │ ├── Grid.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ │ ├── utils.spec.ts │ │ │ │ │ │ │ └── utils.ts │ │ │ │ │ │ ├── Layout.css │ │ │ │ │ │ ├── Layout.tsx │ │ │ │ │ │ ├── ModeAdvanced │ │ │ │ │ │ │ ├── ModeAdvanced.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── types.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ ├── utils.spec.ts │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── SceneInspector.css │ │ │ │ │ ├── SceneInspector.tsx │ │ │ │ │ ├── icons │ │ │ │ │ │ ├── details.svg │ │ │ │ │ │ ├── layout.svg │ │ │ │ │ │ └── settings.svg │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── utils.spec.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── SmartItemBasicView │ │ │ │ │ ├── ActionView │ │ │ │ │ │ ├── ActionView.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── AdminToolsBasicView │ │ │ │ │ │ ├── AdminToolsBasicView.css │ │ │ │ │ │ ├── AdminToolsBasicView.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── CounterBarView │ │ │ │ │ │ ├── CounterBarView.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── DefaultBasicViewField │ │ │ │ │ │ ├── DefaultBasicViewField.css │ │ │ │ │ │ ├── DefaultBasicViewField.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── NftView │ │ │ │ │ │ ├── NftView.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── PointerEventView │ │ │ │ │ │ ├── PointerEventView.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── RewardsBasicView │ │ │ │ │ │ ├── RewardsBasicView.css │ │ │ │ │ │ ├── RewardsBasicView.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── SmartItemBasicView.css │ │ │ │ │ ├── SmartItemBasicView.tsx │ │ │ │ │ ├── TriggerView │ │ │ │ │ │ ├── TriggerView.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── TweenView │ │ │ │ │ │ ├── TweenView.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── VideoScreenBasicView │ │ │ │ │ │ ├── VideoScreenBasicView.css │ │ │ │ │ │ ├── VideoScreenBasicView.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── VideoView │ │ │ │ │ │ ├── VideoView.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── StatesInspector │ │ │ │ │ ├── StatesInspector.css │ │ │ │ │ ├── StatesInspector.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── SyncComponentsInspector │ │ │ │ │ ├── SyncComponentsInspector.css │ │ │ │ │ ├── SyncComponentsInspector.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── utils.spec.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── Tab │ │ │ │ │ ├── Tab.css │ │ │ │ │ ├── Tab.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── Tabs │ │ │ │ │ ├── Tabs.css │ │ │ │ │ ├── Tabs.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── TextShapeInspector │ │ │ │ │ ├── TextShapeInspector.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── utils.spec.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── TransformInspector │ │ │ │ │ ├── Link │ │ │ │ │ │ ├── Link.css │ │ │ │ │ │ ├── Link.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── TransformInspector.css │ │ │ │ │ ├── TransformInspector.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── utils.spec.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── TriggerInspector │ │ │ │ │ ├── TriggerAction │ │ │ │ │ │ ├── TriggerAction.css │ │ │ │ │ │ ├── TriggerAction.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── TriggerCondition │ │ │ │ │ │ ├── TriggerCondition.css │ │ │ │ │ │ ├── TriggerCondition.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── TriggerEvent │ │ │ │ │ │ ├── TriggerEvent.css │ │ │ │ │ │ ├── TriggerEvent.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── TriggerInspector.css │ │ │ │ │ ├── TriggerInspector.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── TweenInspector │ │ │ │ │ ├── TweenInspector.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── VideoPlayerInspector │ │ │ │ │ ├── VideoPlayerInspector.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── utils.spec.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── VisibilityComponentInspector │ │ │ │ │ ├── VisibilityComponentInspector.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── index.ts │ │ │ │ └── utils.ts │ │ │ ├── FileInput │ │ │ │ ├── FileInput.tsx │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ ├── Hierarchy │ │ │ │ ├── ContextMenu │ │ │ │ │ ├── ContextMenu.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── Hierarchy.css │ │ │ │ ├── Hierarchy.tsx │ │ │ │ ├── icons │ │ │ │ │ ├── camera.svg │ │ │ │ │ ├── custom.svg │ │ │ │ │ ├── entity.svg │ │ │ │ │ ├── group.svg │ │ │ │ │ ├── player.svg │ │ │ │ │ ├── smart.svg │ │ │ │ │ └── tile.svg │ │ │ │ └── index.ts │ │ │ ├── Icons │ │ │ │ ├── CustomAsset │ │ │ │ │ ├── CustomAsset.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── Folder │ │ │ │ │ ├── Folder.tsx │ │ │ │ │ ├── FolderOpen.tsx │ │ │ │ │ └── index.ts │ │ │ │ └── Search │ │ │ │ │ ├── Search.tsx │ │ │ │ │ └── index.ts │ │ │ ├── ImportAsset │ │ │ │ ├── Error │ │ │ │ │ ├── Error.css │ │ │ │ │ ├── Error.tsx │ │ │ │ │ ├── alert.svg │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── ImportAsset.css │ │ │ │ ├── ImportAsset.tsx │ │ │ │ ├── Slider │ │ │ │ │ ├── Slider.css │ │ │ │ │ ├── Slider.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── index.ts │ │ │ │ ├── types.ts │ │ │ │ ├── utils.spec.ts │ │ │ │ └── utils.ts │ │ │ ├── Input │ │ │ │ ├── Input.css │ │ │ │ ├── Input.tsx │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ ├── Loading │ │ │ │ ├── Loading.tsx │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ ├── Modal │ │ │ │ ├── Modal.css │ │ │ │ ├── Modal.tsx │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ ├── ProjectAssetExplorer │ │ │ │ ├── Filters │ │ │ │ │ ├── Filters.css │ │ │ │ │ ├── Filters.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── ProjectAssetExplorer.css │ │ │ │ ├── ProjectAssetExplorer.tsx │ │ │ │ ├── ProjectView.tsx │ │ │ │ ├── Tile │ │ │ │ │ ├── Tile.css │ │ │ │ │ ├── Tile.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── index.ts │ │ │ │ ├── tree.ts │ │ │ │ ├── types.ts │ │ │ │ ├── utils.spec.ts │ │ │ │ └── utils.ts │ │ │ ├── RenameAsset │ │ │ │ ├── RenameAsset.css │ │ │ │ ├── RenameAsset.tsx │ │ │ │ └── index.ts │ │ │ ├── Renderer │ │ │ │ ├── CameraSpeed │ │ │ │ │ ├── CameraSpeed.css │ │ │ │ │ ├── CameraSpeed.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── Metrics │ │ │ │ │ ├── Metrics.css │ │ │ │ │ ├── Metrics.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── Renderer.css │ │ │ │ ├── Renderer.tsx │ │ │ │ ├── Shortcuts │ │ │ │ │ ├── Shortcuts.css │ │ │ │ │ ├── Shortcuts.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ └── index.ts │ │ │ ├── SdkProvider │ │ │ │ ├── SdkProvider.tsx │ │ │ │ └── index.ts │ │ │ ├── Search │ │ │ │ ├── Search.css │ │ │ │ ├── Search.tsx │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ ├── Toolbar │ │ │ │ ├── Gizmos │ │ │ │ │ ├── Gizmos.css │ │ │ │ │ ├── Gizmos.tsx │ │ │ │ │ ├── Snap │ │ │ │ │ │ ├── Snap.css │ │ │ │ │ │ ├── Snap.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── icons │ │ │ │ │ │ ├── free.svg │ │ │ │ │ │ ├── position.svg │ │ │ │ │ │ ├── rotation.svg │ │ │ │ │ │ └── scale.svg │ │ │ │ │ └── index.ts │ │ │ │ ├── Preferences │ │ │ │ │ ├── Preferences.css │ │ │ │ │ ├── Preferences.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── Toolbar.css │ │ │ │ ├── Toolbar.tsx │ │ │ │ ├── ToolbarButton │ │ │ │ │ ├── ToolbarButton.css │ │ │ │ │ ├── ToolbarButton.tsx │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ ├── Tree │ │ │ │ ├── ActionArea │ │ │ │ │ ├── ActionArea.css │ │ │ │ │ ├── ActionArea.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── ContextMenu │ │ │ │ │ ├── ContextMenu.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── Edit │ │ │ │ │ ├── Edit.css │ │ │ │ │ ├── Edit.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── Tree.css │ │ │ │ ├── Tree.tsx │ │ │ │ ├── index.ts │ │ │ │ └── utils.ts │ │ │ ├── Warnings │ │ │ │ ├── MultipleEntitiesSelected │ │ │ │ │ ├── MultipleEntitiesSelected.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── RotationGizmoLocalAlignmentDisabled │ │ │ │ │ ├── RotationGizmoLocalAlignmentDisabled.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── SdkOperation │ │ │ │ │ ├── SdkOperation.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── SocketConnection │ │ │ │ │ ├── SocketConnection.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── Warning │ │ │ │ │ ├── Warning.css │ │ │ │ │ ├── Warning.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── Warnings.css │ │ │ │ ├── Warnings.tsx │ │ │ │ └── index.ts │ │ │ └── ui │ │ │ │ ├── Accordion │ │ │ │ ├── Accordion.css │ │ │ │ ├── Accordion.tsx │ │ │ │ └── index.ts │ │ │ │ ├── CheckboxField │ │ │ │ ├── CheckboxField.css │ │ │ │ ├── CheckboxField.tsx │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ │ ├── CheckboxGroup │ │ │ │ ├── CheckboxGroup.css │ │ │ │ ├── CheckboxGroup.tsx │ │ │ │ └── index.ts │ │ │ │ ├── ColorField │ │ │ │ ├── ColorField.css │ │ │ │ ├── ColorField.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── types.ts │ │ │ │ └── utils.ts │ │ │ │ ├── ColorPicker │ │ │ │ ├── ColorPicker.css │ │ │ │ ├── ColorPicker.tsx │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ │ ├── Dropdown │ │ │ │ ├── Dropdown.css │ │ │ │ ├── Dropdown.tsx │ │ │ │ ├── MultipleOption │ │ │ │ │ ├── MultipleOption.css │ │ │ │ │ ├── MultipleOption.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── Option │ │ │ │ │ ├── Option.css │ │ │ │ │ ├── Option.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── OptionList │ │ │ │ │ ├── OptionList.css │ │ │ │ │ ├── OptionList.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── SelectedOption │ │ │ │ │ ├── SelectedOption.css │ │ │ │ │ ├── SelectedOption.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── index.ts │ │ │ │ ├── types.ts │ │ │ │ └── utils.ts │ │ │ │ ├── EntityField │ │ │ │ ├── EntityField.tsx │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ │ ├── FileUploadField │ │ │ │ ├── FileUploadField.css │ │ │ │ ├── FileUploadField.tsx │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ │ ├── HybridField │ │ │ │ ├── HybridField.css │ │ │ │ ├── HybridField.tsx │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ │ ├── InfoTooltip │ │ │ │ ├── InfoTooltip.css │ │ │ │ ├── InfoTooltip.tsx │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ │ ├── Label │ │ │ │ ├── Label.css │ │ │ │ ├── Label.tsx │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ │ ├── Message │ │ │ │ ├── Message.css │ │ │ │ ├── Message.tsx │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ │ ├── Pill │ │ │ │ ├── Pill.css │ │ │ │ ├── Pill.tsx │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ │ ├── RangeField │ │ │ │ ├── RangeField.css │ │ │ │ ├── RangeField.tsx │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ │ ├── TextArea │ │ │ │ ├── TextArea.css │ │ │ │ ├── TextArea.tsx │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ │ ├── TextField │ │ │ │ ├── TextField.css │ │ │ │ ├── TextField.tsx │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ │ ├── Vector3Field │ │ │ │ ├── Vector3Field.css │ │ │ │ ├── Vector3Field.tsx │ │ │ │ └── index.ts │ │ │ │ ├── WalletField │ │ │ │ ├── WalletField.tsx │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ │ ├── index.ts │ │ │ │ └── utils.ts │ │ ├── hoc │ │ │ ├── withContextMenu.tsx │ │ │ └── withSdk.tsx │ │ ├── hooks │ │ │ ├── catalog │ │ │ │ └── useAssetTree.ts │ │ │ ├── editor │ │ │ │ ├── useGizmoAlignment.spec.ts │ │ │ │ ├── useGizmoAlignment.ts │ │ │ │ ├── useSnap.spec.ts │ │ │ │ └── useSnap.ts │ │ │ ├── sdk │ │ │ │ ├── useChange.ts │ │ │ │ ├── useComponentInput.spec.ts │ │ │ │ ├── useComponentInput.ts │ │ │ │ ├── useComponentValue.ts │ │ │ │ ├── useComponentsWith.ts │ │ │ │ ├── useContextMenu.ts │ │ │ │ ├── useCustomAsset.ts │ │ │ │ ├── useEntitiesWith.ts │ │ │ │ ├── useEntityComponent.ts │ │ │ │ ├── useHasComponent.ts │ │ │ │ ├── useRenderer.ts │ │ │ │ ├── useSdk.spec.ts │ │ │ │ ├── useSdk.ts │ │ │ │ ├── useSdkContext.ts │ │ │ │ ├── useSelectedEntity.ts │ │ │ │ └── useTree.ts │ │ │ ├── useArrayState.ts │ │ │ ├── useContainerSize.ts │ │ │ ├── useHotkey.ts │ │ │ ├── useIsMounted.ts │ │ │ ├── useOutsideClick.ts │ │ │ ├── useWindowSize.spec.ts │ │ │ └── useWindowSize.ts │ │ ├── index.css │ │ ├── index.tsx │ │ ├── lib │ │ │ ├── babylon │ │ │ │ ├── decentraland │ │ │ │ │ ├── EcsEntity.spec.ts │ │ │ │ │ ├── EcsEntity.ts │ │ │ │ │ ├── SceneContext.ts │ │ │ │ │ ├── camera.spec.ts │ │ │ │ │ ├── camera.ts │ │ │ │ │ ├── colliders-utils.ts │ │ │ │ │ ├── component-operations.ts │ │ │ │ │ ├── editorComponents │ │ │ │ │ │ ├── hide.ts │ │ │ │ │ │ ├── lock.ts │ │ │ │ │ │ ├── scene.ts │ │ │ │ │ │ └── selection.ts │ │ │ │ │ ├── get-resources.ts │ │ │ │ │ ├── gizmo-manager.spec.ts │ │ │ │ │ ├── gizmo-manager.ts │ │ │ │ │ ├── gizmo-patch.ts │ │ │ │ │ ├── keys.ts │ │ │ │ │ ├── layout-manager.ts │ │ │ │ │ ├── mouse-utils.ts │ │ │ │ │ ├── sdkComponents │ │ │ │ │ │ ├── billboard.ts │ │ │ │ │ │ ├── gltf-container.spec.ts │ │ │ │ │ │ ├── gltf-container.ts │ │ │ │ │ │ ├── material.ts │ │ │ │ │ │ ├── mesh-renderer.ts │ │ │ │ │ │ ├── nft.ts │ │ │ │ │ │ ├── text-shape.ts │ │ │ │ │ │ ├── transform.ts │ │ │ │ │ │ └── video-player.ts │ │ │ │ │ ├── snap-manager.spec.ts │ │ │ │ │ └── snap-manager.ts │ │ │ │ └── setup │ │ │ │ │ ├── init.spec.ts │ │ │ │ │ ├── init.ts │ │ │ │ │ ├── input.ts │ │ │ │ │ ├── setup.spec.ts │ │ │ │ │ └── setup.ts │ │ │ ├── data-layer │ │ │ │ ├── README.md │ │ │ │ ├── assets.md │ │ │ │ ├── client │ │ │ │ │ ├── builder-utils.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── feeded-local-fs.ts │ │ │ │ │ ├── iframe-data-layer.ts │ │ │ │ │ └── local-data-layer.ts │ │ │ │ ├── host │ │ │ │ │ ├── fs-utils.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── rpc-methods.spec.ts │ │ │ │ │ ├── rpc-methods.ts │ │ │ │ │ ├── scene.ts │ │ │ │ │ ├── stream.spec.ts │ │ │ │ │ ├── stream.ts │ │ │ │ │ ├── undo-redo.spec.ts │ │ │ │ │ ├── undo-redo.ts │ │ │ │ │ ├── upsert-asset.ts │ │ │ │ │ └── utils │ │ │ │ │ │ ├── component.ts │ │ │ │ │ │ ├── composite-dirty.ts │ │ │ │ │ │ ├── engine-to-composite.ts │ │ │ │ │ │ ├── engine.ts │ │ │ │ │ │ ├── fs-composite-provider.ts │ │ │ │ │ │ ├── install-bin.ts │ │ │ │ │ │ ├── migrations │ │ │ │ │ │ ├── add-nodes-to-player-and-camera.ts │ │ │ │ │ │ ├── build-nodes-hierarchy.ts │ │ │ │ │ │ ├── build-nodes-hierarchy.ts.spec.ts │ │ │ │ │ │ ├── fix-network-entity-values.ts │ │ │ │ │ │ ├── legacy-entity-node.ts │ │ │ │ │ │ └── select-scene-entity.ts │ │ │ │ │ │ ├── undo-redo-array.spec.ts │ │ │ │ │ │ └── undo-redo-array.ts │ │ │ │ ├── proto │ │ │ │ │ └── data-layer.proto │ │ │ │ ├── remote-data-layer.ts │ │ │ │ └── types.ts │ │ │ ├── logic │ │ │ │ ├── analytics.ts │ │ │ │ ├── catalog.ts │ │ │ │ ├── config.ts │ │ │ │ ├── consume-stream.ts │ │ │ │ ├── ethereum.ts │ │ │ │ ├── file-system-interface.ts │ │ │ │ ├── get-set-value.ts │ │ │ │ ├── math.spec.ts │ │ │ │ ├── math.ts │ │ │ │ ├── once.ts │ │ │ │ ├── preferences │ │ │ │ │ ├── io.spec.ts │ │ │ │ │ ├── io.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── remove-base-path.ts │ │ │ │ └── storage │ │ │ │ │ ├── iframe.ts │ │ │ │ │ ├── in-memory.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ ├── rpc │ │ │ │ ├── camera │ │ │ │ │ ├── camera.spec.ts │ │ │ │ │ ├── client.ts │ │ │ │ │ ├── server.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── scene-metrics │ │ │ │ │ ├── client.ts │ │ │ │ │ ├── scene-metrics.spec.ts │ │ │ │ │ ├── server.ts │ │ │ │ │ └── types.ts │ │ │ │ └── ui │ │ │ │ │ ├── client.ts │ │ │ │ │ ├── server.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── ui.spec.ts │ │ │ ├── sdk │ │ │ │ ├── components │ │ │ │ │ ├── TransformConfig.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── connect-stream.ts │ │ │ │ ├── context.ts │ │ │ │ ├── crdt-logger.ts │ │ │ │ ├── drag-drop.spec.ts │ │ │ │ ├── drag-drop.ts │ │ │ │ ├── enum-entity.spec.ts │ │ │ │ ├── enum-entity.ts │ │ │ │ ├── inspector-engine.ts │ │ │ │ ├── nodes.spec.ts │ │ │ │ ├── nodes.ts │ │ │ │ ├── operations │ │ │ │ │ ├── add-asset │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── utils.spec.ts │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── add-child.spec.ts │ │ │ │ │ ├── add-child.ts │ │ │ │ │ ├── add-component.spec.ts │ │ │ │ │ ├── add-component.ts │ │ │ │ │ ├── create-custom-asset.spec.ts │ │ │ │ │ ├── create-custom-asset.ts │ │ │ │ │ ├── duplicate-entity.spec.ts │ │ │ │ │ ├── duplicate-entity.ts │ │ │ │ │ ├── entitySyncUtils.spec.ts │ │ │ │ │ ├── entitySyncUtils.ts │ │ │ │ │ ├── get-selected-entities.ts │ │ │ │ │ ├── hide.ts │ │ │ │ │ ├── index.spec.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── lock.ts │ │ │ │ │ ├── remove-component.spec.ts │ │ │ │ │ ├── remove-component.ts │ │ │ │ │ ├── remove-entity.ts │ │ │ │ │ ├── remove-selected-entities.ts │ │ │ │ │ ├── reorder.ts │ │ │ │ │ ├── set-ground.spec.ts │ │ │ │ │ ├── set-ground.ts │ │ │ │ │ ├── set-parent.spec.ts │ │ │ │ │ ├── set-parent.ts │ │ │ │ │ ├── update-selected-entity.ts │ │ │ │ │ └── update-value.ts │ │ │ │ ├── test-local-scene │ │ │ │ │ └── index.ts │ │ │ │ ├── tree.spec.ts │ │ │ │ └── tree.ts │ │ │ └── utils │ │ │ │ ├── array.ts │ │ │ │ ├── debounce.ts │ │ │ │ ├── gizmo.ts │ │ │ │ ├── img.ts │ │ │ │ ├── layout.ts │ │ │ │ ├── media.ts │ │ │ │ ├── scene.ts │ │ │ │ ├── strings.ts │ │ │ │ ├── url.spec.ts │ │ │ │ └── url.ts │ │ ├── redux │ │ │ ├── app │ │ │ │ └── index.ts │ │ │ ├── data-layer │ │ │ │ ├── index.ts │ │ │ │ └── sagas │ │ │ │ │ ├── connect.spec.ts │ │ │ │ │ ├── connect.ts │ │ │ │ │ ├── connected.ts │ │ │ │ │ ├── create-custom-asset.spec.ts │ │ │ │ │ ├── create-custom-asset.ts │ │ │ │ │ ├── delete-custom-asset.spec.ts │ │ │ │ │ ├── delete-custom-asset.ts │ │ │ │ │ ├── get-asset-catalog.ts │ │ │ │ │ ├── get-inspector-preferences.ts │ │ │ │ │ ├── get-thumbnails.ts │ │ │ │ │ ├── import-asset.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── reconnect.spec.ts │ │ │ │ │ ├── reconnect.ts │ │ │ │ │ ├── remove-asset.ts │ │ │ │ │ ├── rename-custom-asset.spec.ts │ │ │ │ │ ├── rename-custom-asset.ts │ │ │ │ │ ├── save-thumbnail.ts │ │ │ │ │ ├── save.ts │ │ │ │ │ ├── set-inspector-preferences.ts │ │ │ │ │ └── undo-redo.ts │ │ │ ├── hooks.ts │ │ │ ├── root-saga.ts │ │ │ ├── scene-metrics │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ │ ├── sdk │ │ │ │ ├── index.ts │ │ │ │ └── sagas │ │ │ │ │ ├── connect-stream.spec.ts │ │ │ │ │ ├── connect-stream.ts │ │ │ │ │ └── index.ts │ │ │ ├── store.ts │ │ │ └── ui │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ ├── tooling-entrypoint.ts │ │ └── vars.css │ ├── test │ │ ├── data-layer │ │ │ └── utils.ts │ │ ├── e2e │ │ │ ├── Assets.spec.ts │ │ │ ├── Hierarchy.spec.ts │ │ │ ├── _config.ts │ │ │ ├── pageObjects │ │ │ │ ├── App.ts │ │ │ │ ├── Assets.ts │ │ │ │ └── Hierarchy.ts │ │ │ └── utils │ │ │ │ ├── drag-and-drop.ts │ │ │ │ ├── install-mouse-helper.ts │ │ │ │ └── sleep.ts │ │ ├── jest-transformer.js │ │ ├── setup.ts │ │ ├── tsconfig.json │ │ └── utils.ts │ ├── tsconfig.cjs.json │ └── tsconfig.json │ ├── js-runtime │ ├── .gitignore │ ├── README.md │ ├── index.d.ts │ ├── package.json │ ├── sdk.d.ts │ └── tsconfig.json │ ├── playground-assets │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── api-extractor.json │ ├── etc │ │ └── playground-assets.api.md │ ├── package.json │ ├── scene.json │ ├── src │ │ └── index.ts │ └── tsconfig.json │ ├── react-ecs │ ├── .gitattributes │ ├── .gitignore │ ├── README.md │ ├── package-lock.json │ ├── package.json │ ├── src │ │ ├── components │ │ │ ├── Button │ │ │ │ ├── index.tsx │ │ │ │ └── types.ts │ │ │ ├── Dropdown │ │ │ │ ├── index.tsx │ │ │ │ └── types.ts │ │ │ ├── Input │ │ │ │ ├── index.tsx │ │ │ │ └── types.ts │ │ │ ├── Label │ │ │ │ ├── index.tsx │ │ │ │ ├── types.ts │ │ │ │ └── utils.ts │ │ │ ├── index.tsx │ │ │ ├── listeners │ │ │ │ └── types.ts │ │ │ ├── types.ts │ │ │ ├── uiBackground │ │ │ │ ├── index.ts │ │ │ │ ├── types.ts │ │ │ │ └── utils.ts │ │ │ ├── uiTransform │ │ │ │ ├── index.ts │ │ │ │ ├── types.ts │ │ │ │ └── utils.ts │ │ │ └── utils.ts │ │ ├── index.ts │ │ ├── react-ecs.ts │ │ ├── reconciler │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ └── system.ts │ └── tsconfig.json │ ├── sdk-commands │ ├── .dclrc │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── package-lock.json │ ├── package.json │ ├── src │ │ ├── commands │ │ │ ├── build │ │ │ │ └── index.ts │ │ │ ├── deploy │ │ │ │ ├── analytics-features.ts │ │ │ │ ├── index.ts │ │ │ │ └── utils.ts │ │ │ ├── export-static │ │ │ │ └── index.ts │ │ │ ├── init │ │ │ │ ├── download-github-folder.ts │ │ │ │ ├── index.ts │ │ │ │ ├── project.ts │ │ │ │ └── repos.ts │ │ │ ├── pack-smart-wearable │ │ │ │ └── index.ts │ │ │ ├── quests │ │ │ │ ├── index.ts │ │ │ │ ├── types.ts │ │ │ │ └── utils.ts │ │ │ └── start │ │ │ │ ├── data-layer │ │ │ │ ├── fs.ts │ │ │ │ ├── rpc.ts │ │ │ │ └── ws.ts │ │ │ │ ├── explorer-alpha.ts │ │ │ │ ├── index.ts │ │ │ │ ├── server │ │ │ │ ├── endpoints.ts │ │ │ │ ├── file-watch-notifier.ts │ │ │ │ ├── realm.ts │ │ │ │ ├── routes.ts │ │ │ │ └── ws.ts │ │ │ │ └── types.ts │ │ ├── components │ │ │ ├── analytics.ts │ │ │ ├── config.ts │ │ │ ├── eth.ts │ │ │ ├── exit-signal.ts │ │ │ ├── fetch.ts │ │ │ ├── fs.ts │ │ │ ├── index.ts │ │ │ └── log.ts │ │ ├── index.ts │ │ ├── linker-dapp │ │ │ └── routes.ts │ │ ├── logic │ │ │ ├── account.ts │ │ │ ├── args.ts │ │ │ ├── beautiful-logs.ts │ │ │ ├── bundle.ts │ │ │ ├── catalyst-requests.ts │ │ │ ├── commands.ts │ │ │ ├── composite.ts │ │ │ ├── config.ts │ │ │ ├── coordinates.ts │ │ │ ├── dcl-ignore.ts │ │ │ ├── error.ts │ │ │ ├── exec.ts │ │ │ ├── fs.ts │ │ │ ├── get-free-port.ts │ │ │ ├── portable-experience-sw-validations.ts │ │ │ ├── project-files.ts │ │ │ ├── project-validations.ts │ │ │ ├── realm.ts │ │ │ ├── scene-validations.ts │ │ │ └── workspace-validations.ts │ │ ├── run-command.ts │ │ └── run-dapp.ts │ └── tsconfig.json │ └── sdk │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── package.json │ ├── src │ ├── composite-provider.ts │ ├── ecs.ts │ ├── ethereum-provider │ │ ├── index.ts │ │ ├── text-encoder.ts │ │ └── text-encoding.d.ts │ ├── index.ts │ ├── internal │ │ ├── Observable.ts │ │ ├── provider.ts │ │ └── transports │ │ │ ├── logger.ts │ │ │ └── rendererTransport.ts │ ├── math.ts │ ├── message-bus.ts │ ├── network │ │ ├── README.md │ │ ├── binary-message-bus.ts │ │ ├── entities.ts │ │ ├── filter.ts │ │ ├── index.ts │ │ ├── message-bus-sync.ts │ │ ├── state.ts │ │ └── utils.ts │ ├── observables.ts │ ├── players │ │ └── index.ts │ ├── react-ecs.ts │ └── testing │ │ ├── assert.ts │ │ ├── index.ts │ │ ├── runtime.ts │ │ └── types.ts │ ├── tsconfig.json │ └── types │ ├── tsconfig.ecs7.json │ └── tsconfig.ecs7.strict.json ├── scripts ├── build.spec.ts ├── common.ts ├── docs.spec.ts ├── helpers.ts ├── prepare.spec.ts ├── protocol-buffer-generation │ ├── componentSchemaTemplate.ts │ ├── generateComponent.ts │ ├── generateExportedTypes.ts │ ├── generateIndex.ts │ ├── generateProtocolBuffer.ts │ ├── generateProtocolTypes.ts │ ├── index.ts │ └── protoConst.ts ├── rpc-api-generation │ ├── index.ts │ └── src │ │ ├── .gitignore │ │ └── tsconfig.module.json ├── tsconfig.json └── utils │ ├── compareFolder.ts │ ├── getFilePathsSync.ts │ ├── shellCommand.ts │ ├── snakeToPascal.ts │ └── stringParser.ts ├── test ├── __mocks__ │ ├── @segment │ │ └── analytics-node │ │ │ └── index.js │ └── ~system │ │ └── EngineApi.js ├── build-ecs │ ├── compile-ecs7.spec.ts │ ├── compile-lib-and-scene.spec.ts │ ├── compile-scene.spec.ts │ ├── fixtures │ │ ├── dcl-test-lib-integration │ │ │ ├── .gitignore │ │ │ ├── package.json │ │ │ ├── src │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── dcl-workspace.json │ │ ├── ecs7-composite │ │ │ ├── .dclignore │ │ │ ├── main.composite │ │ │ ├── package.json │ │ │ ├── scene.json │ │ │ ├── src │ │ │ │ └── index.ts │ │ │ ├── tsconfig.json │ │ │ └── world-assets │ │ │ │ └── snow │ │ │ │ └── snow.glb │ │ ├── ecs7-scene │ │ │ ├── package.json │ │ │ ├── scene.json │ │ │ ├── src │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── ecs7-ui-ethereum │ │ │ ├── .dclignore │ │ │ ├── package.json │ │ │ ├── scene.json │ │ │ ├── src │ │ │ │ ├── index.ts │ │ │ │ └── ui.tsx │ │ │ └── tsconfig.json │ │ ├── sdk7-humming-birds-sync │ │ │ ├── .dclignore │ │ │ ├── .gitignore │ │ │ ├── .vscode │ │ │ │ └── launch.json │ │ │ ├── README.md │ │ │ ├── images │ │ │ │ └── scene-thumbnail.png │ │ │ ├── models │ │ │ │ ├── ColorAtlas_2.png │ │ │ │ ├── Ground.gltf │ │ │ │ ├── Hummingbird.png │ │ │ │ ├── Tree.gltf │ │ │ │ ├── baseLight.glb │ │ │ │ ├── brownCheckerColor.png │ │ │ │ ├── greenCheckerColor.png │ │ │ │ ├── hummingbird.glb │ │ │ │ ├── magentaCheckerColor.png │ │ │ │ ├── movingPlatform.glb │ │ │ │ ├── orangeCheckerColor.png │ │ │ │ └── staticPlatforms.glb │ │ │ ├── package.json │ │ │ ├── scene.json │ │ │ ├── sounds │ │ │ │ └── pickUp.mp3 │ │ │ ├── src │ │ │ │ ├── create-cube.ts │ │ │ │ ├── hummingBird.ts │ │ │ │ ├── index.ts │ │ │ │ ├── moving-platforms.ts │ │ │ │ ├── sync-enum.ts │ │ │ │ └── ui.tsx │ │ │ └── tsconfig.json │ │ ├── sdk7-smart-wearable │ │ │ ├── AvatarWearables_TX.png │ │ │ ├── glasses.glb │ │ │ ├── package.json │ │ │ ├── scene.json │ │ │ ├── src │ │ │ │ └── index.ts │ │ │ ├── thumbnail.png │ │ │ ├── tsconfig.json │ │ │ └── wearable.json │ │ ├── side-effect-free-build │ │ │ ├── package.json │ │ │ ├── scene.json │ │ │ ├── src │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── simple-scene-with-bundled │ │ │ ├── package.json │ │ │ ├── scene.json │ │ │ ├── src │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── simple-scene-with-library │ │ │ ├── package.json │ │ │ ├── scene.json │ │ │ ├── src │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ └── simple-scene │ │ │ ├── .dclrc │ │ │ ├── package.json │ │ │ ├── scene.json │ │ │ ├── src │ │ │ ├── index.ts │ │ │ └── subfolder │ │ │ │ └── subfoldergame.ts │ │ │ └── tsconfig.json │ ├── sourcemaps.ts │ └── workspace.spec.ts ├── ecs │ ├── byteBuffer.spec.ts │ ├── component-numbers.spec.ts │ ├── component-on-change.spec.ts │ ├── components │ │ ├── Animator.spec.ts │ │ ├── AudioEvent.spec.ts │ │ ├── AudioSource.spec.ts │ │ ├── AudioStream.spec.ts │ │ ├── AvatarAttach.spec.ts │ │ ├── AvatarBase.spec.ts │ │ ├── AvatarEmoteCommand.spec.ts │ │ ├── AvatarEquippedData.spec.ts │ │ ├── AvatarModifierArea.spec.ts │ │ ├── AvatarShape.spec.ts │ │ ├── Billboard.spec.ts │ │ ├── CameraMode.spec.ts │ │ ├── CameraModeArea.spec.ts │ │ ├── EngineInfo.spec.ts │ │ ├── GltfContainer.spec.ts │ │ ├── GltfContainerLoadingState.spec.ts │ │ ├── InputModifier.spec.ts │ │ ├── MainCamera.spec.ts │ │ ├── MapPin.spec.ts │ │ ├── Material.spec.ts │ │ ├── MeshCollider.spec.ts │ │ ├── MeshRenderer.spec.ts │ │ ├── NFTShape.spec.ts │ │ ├── Name.spec.ts │ │ ├── PlayerIdentityData.spec.ts │ │ ├── PointerEvents.spec.ts │ │ ├── PointerEventsResult.spec.ts │ │ ├── PointerLock.spec.ts │ │ ├── PrimaryPointerInfo.spec.ts │ │ ├── Raycast.spec.ts │ │ ├── RaycastResult.spec.ts │ │ ├── RealmInfo.spec.ts │ │ ├── TextShape.spec.ts │ │ ├── Transform.spec.ts │ │ ├── Tween.spec.ts │ │ ├── TweenSequence.spec.ts │ │ ├── TweenState.spec.ts │ │ ├── UiBackground.spec.ts │ │ ├── UiCanvasInformation.spec.ts │ │ ├── UiComponent.spec.ts │ │ ├── UiDropdown.spec.ts │ │ ├── UiDropdownResult.spec.ts │ │ ├── UiInput.spec.ts │ │ ├── UiInputResult.spec.ts │ │ ├── UiText.spec.ts │ │ ├── VideoEvent.spec.ts │ │ ├── VideoPlayer.spec.ts │ │ ├── VirtualCamera.spec.ts │ │ ├── VisibilityComponent.spec.ts │ │ ├── assertion.ts │ │ └── components.spec.ts │ ├── composite.spec.ts │ ├── composites │ │ ├── 2-level-deep.composite │ │ ├── 2-level-deep.composite.scene-snapshot.json │ │ ├── cool-sphere.composite │ │ ├── cool-sphere.composite.scene-snapshot.json │ │ ├── cube-scene.composite │ │ ├── cube-scene.composite.scene-snapshot.json │ │ ├── data-binary.composite │ │ ├── data-binary.composite.scene-snapshot.json │ │ ├── empty.composite │ │ ├── empty.composite.scene-snapshot.json │ │ ├── full-binary.composite.bin │ │ ├── full-binary.composite.bin.scene-snapshot.json │ │ ├── invalid │ │ │ ├── core-component-inexistent.composite │ │ │ ├── custom-component-incomplete.composite │ │ │ └── recursive-composite.composite │ │ ├── non-binary.composite │ │ ├── non-binary.composite.scene-snapshot.json │ │ ├── one-transform.composite │ │ ├── one-transform.composite.scene-snapshot.json │ │ ├── only-children.composite │ │ ├── only-children.composite.scene-snapshot.json │ │ ├── parented-transform.composite │ │ ├── parented-transform.composite.scene-snapshot.json │ │ └── relative │ │ │ ├── second-level │ │ │ ├── one-transform.composite │ │ │ └── one-transform.composite.scene-snapshot.json │ │ │ ├── with-references.composite │ │ │ └── with-references.composite.scene-snapshot.json │ ├── crdt-rules-gset.spec.ts │ ├── crdt-rules-lww.spec.ts │ ├── crdtMessage.spec.ts │ ├── customComponent.spec.ts │ ├── customComponentWithSystems.spec.ts │ ├── ecs.crdt.spec.ts │ ├── engine.spec.ts │ ├── engineUtils.spec.ts │ ├── entity.spec.ts │ ├── events │ │ ├── isPressed.spec.ts │ │ ├── raycastHelperSystem.spec.ts │ │ ├── system.spec.ts │ │ ├── tween.spec.ts │ │ ├── utils.ts │ │ ├── videoEventsSystem.spec.ts │ │ └── wasJustClicked.spec.ts │ ├── execute-task.spec.ts │ ├── int8component.ts │ ├── math.spec.ts │ ├── performance.spec.ts │ ├── serialization.spec.ts │ ├── setup.ts │ ├── snippets.spec.ts │ ├── snippets │ │ ├── README.md │ │ ├── billboard │ │ │ ├── index.ts │ │ │ └── info.json │ │ ├── cube-spawner │ │ │ ├── index.ts │ │ │ └── info.json │ │ ├── material │ │ │ ├── index.ts │ │ │ └── info.json │ │ ├── mesh │ │ │ ├── index.ts │ │ │ └── info.json │ │ ├── pointer-events │ │ │ ├── index.ts │ │ │ └── info.json │ │ ├── raycast-hit-many │ │ │ ├── index.ts │ │ │ └── info.json │ │ ├── raycast-hit │ │ │ ├── index.ts │ │ │ └── info.json │ │ ├── tsconfig.json │ │ ├── ui-backgrounds │ │ │ ├── index.tsx │ │ │ └── info.json │ │ ├── ui-dropdown │ │ │ ├── index.tsx │ │ │ └── info.json │ │ └── ui │ │ │ ├── index.tsx │ │ │ └── info.json │ ├── transports.spec.ts │ └── utils.ts ├── globals.d.ts ├── kernel-and-renderer-version.spec.ts ├── react-ecs │ ├── background.spec.tsx │ ├── button.spec.tsx │ ├── dropdown.spec.tsx │ ├── index.spec.tsx │ ├── input.spec.tsx │ ├── isequal.spec.tsx │ ├── label.spec.tsx │ ├── leak.spec.tsx │ ├── listeners.spec.tsx │ ├── transform.spec.tsx │ ├── tree.spec.tsx │ └── utils.ts ├── sdk-commands │ ├── blackbox │ │ ├── build-and-export-static.spec.ts │ │ └── init.spec.ts │ ├── commands │ │ ├── build │ │ │ └── index.spec.ts │ │ ├── deploy │ │ │ └── scene.json.ts │ │ ├── init │ │ │ └── index.spec.ts │ │ └── quests │ │ │ ├── index.spec.ts │ │ │ ├── invalid_quest.json │ │ │ ├── not_valid_json │ │ │ └── valid_quest.json │ └── utils │ │ ├── account.spec.ts │ │ ├── analytics.spec.ts │ │ ├── commands.spec.ts │ │ ├── config.spec.ts │ │ ├── data-layer-fs.spec.ts │ │ ├── exec.spec.ts │ │ ├── fs.spec.ts │ │ ├── get-free-port.spec.ts │ │ ├── log.spec.ts │ │ ├── scene-validation.spec.ts │ │ ├── validations.spec.ts │ │ └── workspace.spec.ts ├── sdk │ └── network │ │ ├── messages.spec.ts │ │ ├── network-transport.spec.ts │ │ ├── state-to-crdt.spec.ts │ │ └── sync-engines.spec.ts ├── snapshots.spec.ts ├── snapshots │ ├── development-bundles │ │ ├── static-scene.test.js-main.crdt │ │ ├── static-scene.test.ts │ │ ├── static-scene.test.ts.crdt │ │ ├── testing-fw.test.ts │ │ ├── testing-fw.test.ts.crdt │ │ ├── two-way-crdt.test.ts │ │ └── two-way-crdt.test.ts.crdt │ ├── helpers │ │ ├── assertions.ts │ │ ├── ui.tsx │ │ └── with-renderer.ts │ ├── jest-snapshots-helpers.ts │ ├── package-lock.json │ ├── package.json │ ├── production-bundles │ │ ├── append-value-crdt.ts │ │ ├── append-value-crdt.ts.crdt │ │ ├── billboard.ts │ │ ├── billboard.ts.crdt │ │ ├── composite.ts.crdt │ │ ├── cube-deleted.ts │ │ ├── cube-deleted.ts.crdt │ │ ├── cube.ts │ │ ├── cube.ts.crdt │ │ ├── cubes.ts │ │ ├── cubes.ts.crdt │ │ ├── package.json │ │ ├── pointer-events.ts │ │ ├── pointer-events.ts.crdt │ │ ├── scene.json │ │ ├── schema-components.ts │ │ ├── schema-components.ts.crdt │ │ ├── simple.ts │ │ ├── simple.ts.crdt │ │ ├── ui.ts │ │ ├── ui.ts.crdt │ │ ├── with-main-function.ts │ │ └── with-main-function.ts.crdt │ ├── scene.json │ └── tsconfig.json ├── tsconfig.json ├── vm.spec.ts └── vm.ts └── typedoc.json /.editorconfig: -------------------------------------------------------------------------------- 1 | ; http://editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | indent_style = space 7 | indent_size = 2 8 | end_of_line = lf 9 | charset = utf-8 10 | trim_trailing_whitespace = true 11 | insert_final_newline = true 12 | 13 | [{Makefile,**.mk}] 14 | # Use tabs for indentation (Makefiles require tabs) 15 | indent_style = tab 16 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | packages/@dcl/js-runtime 2 | *.js 3 | *.d.ts 4 | test/sdk/simple-scene 5 | packages/@dcl/ecs/dist/ 6 | packages/@dcl/sdk/dist/ 7 | packages/@dcl/sdk/internal/ 8 | packages/@dcl/sdk/testing/ 9 | packages/@dcl/playground-assets/dist 10 | packages/@dcl/ecs/src/components/generated 11 | tmp -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: npm 4 | directory: "/packages/@dcl/sdk" 5 | schedule: 6 | interval: daily 7 | allow: 8 | - dependency-name: "@dcl/explorer" 9 | - dependency-name: "@dcl/schemas" 10 | versioning-strategy: auto 11 | -------------------------------------------------------------------------------- /.github/workflows/release-docs.yml: -------------------------------------------------------------------------------- 1 | name: "Release Api Reference" 2 | 3 | on: 4 | release: 5 | branches: 6 | - main 7 | types: 8 | - published 9 | 10 | jobs: 11 | run-updater: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - name: REST API with curl 15 | run: | 16 | curl -X POST "https://api.cloudflare.com/client/v4/pages/webhooks/deploy_hooks/${{ secrets.CLOUDFLARE_WEBHOOK_TOKEN }}" -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "singleQuote": true, 4 | "printWidth": 120, 5 | "trailingComma": "none" 6 | } 7 | -------------------------------------------------------------------------------- /.syncpackrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "versionGroups": [ 3 | { 4 | "packages": ["**"], 5 | "dependencies": ["@dcl/ecs", "@dcl/inspector", "@dcl/js-runtime", "@dcl/playground-assets", "@dcl/sdk", "@dcl/sdk-commands", "@dcl/react-ecs"], 6 | "isIgnored": true 7 | } 8 | ] 9 | } -------------------------------------------------------------------------------- /codecov.yml: -------------------------------------------------------------------------------- 1 | coverage: 2 | status: 3 | project: 4 | default: 5 | threshold: 1% 6 | patch: 7 | default: 8 | threshold: 1% -------------------------------------------------------------------------------- /docs/bytebuffer-interface.md: -------------------------------------------------------------------------------- 1 | # Bytebuffer 2 | TODO 3 | 4 | ## Typescript 5 | TODO 6 | 7 | ## C# 8 | TODO -------------------------------------------------------------------------------- /docs/summary.json: -------------------------------------------------------------------------------- 1 | { 2 | "contributor": [ 3 | { 4 | "name": "SDK", 5 | "children": [ 6 | { 7 | "name": "New ECS", 8 | "children": [ 9 | { 10 | "name": "Component definition", 11 | "slug": "/contributor/sdk/new-ecs/component-definition" 12 | } 13 | ] 14 | } 15 | ] 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /docs/wire-message.md: -------------------------------------------------------------------------------- 1 | TODO -------------------------------------------------------------------------------- /packages/@dcl/ecs/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | temp 4 | tsdoc-metadata.json 5 | coverage 6 | src/components/generated 7 | src/composite/proto/gen 8 | dist-cjs -------------------------------------------------------------------------------- /packages/@dcl/ecs/.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "tasks": [ 4 | { 5 | "label": "Clean tools build", 6 | "type": "process", 7 | "command": "rm", 8 | "args": ["-rf", "${workspaceFolder}/tools/dist"] 9 | }, 10 | { 11 | "label": "Build tools", 12 | "dependsOrder": "sequence", 13 | "dependsOn": ["Clean tools build", "Build tools typescript"], 14 | "type": "process", 15 | "command": "chmod", 16 | "args": ["+x", "${workspaceFolder}/tools/dist/protocol-buffer-generation/index.js"] 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /packages/@dcl/ecs/Makefile: -------------------------------------------------------------------------------- 1 | 2 | ifneq ($(CI), true) 3 | LOCAL_ARG = --local --verbose --diagnostics 4 | endif 5 | 6 | clean: 7 | rm -rf dist/ 8 | rm -rf src/components/generated 9 | 10 | watch: 11 | ./node_modules/.bin/tsc -p tsconfig.json -w 12 | 13 | .PHONY: build test clean 14 | -------------------------------------------------------------------------------- /packages/@dcl/ecs/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@dcl/ecs", 3 | "version": "7.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "@dcl/ecs", 9 | "version": "7.0.0", 10 | "license": "Apache-2.0" 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/@dcl/ecs/src/components/manual/Name.ts: -------------------------------------------------------------------------------- 1 | import { IEngine, LastWriteWinElementSetComponentDefinition } from '../../engine/types' 2 | import { Schemas } from '../../schemas' 3 | 4 | export type NameComponent = LastWriteWinElementSetComponentDefinition 5 | export interface NameType { 6 | value: string 7 | } 8 | 9 | function defineNameComponent(engine: Pick) { 10 | const Name = engine.defineComponent('core-schema::Name', { 11 | value: Schemas.String 12 | }) 13 | return Name 14 | } 15 | 16 | export default defineNameComponent 17 | -------------------------------------------------------------------------------- /packages/@dcl/ecs/src/composite/proto/composite.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | import "google/protobuf/struct.proto"; 4 | message ComponentData { 5 | oneof data { 6 | google.protobuf.Value json = 1; 7 | bytes binary = 2; 8 | } 9 | } 10 | 11 | message CompositeComponent { 12 | string name = 1; 13 | google.protobuf.Value json_schema = 2; 14 | map data = 3; 15 | } 16 | 17 | message CompositeDefinition { 18 | int32 version = 1; 19 | repeated CompositeComponent components = 2; 20 | } -------------------------------------------------------------------------------- /packages/@dcl/ecs/src/runtime/helpers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './coordinates' 2 | export * from './tree' 3 | -------------------------------------------------------------------------------- /packages/@dcl/ecs/src/runtime/types.ts: -------------------------------------------------------------------------------- 1 | export type { SystemFn, SYSTEMS_REGULAR_PRIORITY } from '../engine/systems' 2 | export type { TransportMessage, ReceiveMessage, Transport } from '../systems/crdt/types' 3 | export { TransformType, TransformComponent } from '../components/manual/Transform' 4 | export * from '../engine/component' 5 | export * from '../schemas/typing' 6 | export type { MapResult, Spec } from '../schemas/Map' 7 | -------------------------------------------------------------------------------- /packages/@dcl/ecs/src/schemas/basic/Boolean.ts: -------------------------------------------------------------------------------- 1 | import { ByteBuffer } from '../../serialization/ByteBuffer' 2 | import { ISchema } from '../ISchema' 3 | 4 | /** 5 | * @internal 6 | */ 7 | export const Bool: ISchema = { 8 | serialize(value: boolean, builder: ByteBuffer): void { 9 | builder.writeInt8(value ? 1 : 0) 10 | }, 11 | deserialize(reader: ByteBuffer): boolean { 12 | return reader.readInt8() === 1 13 | }, 14 | create() { 15 | return false 16 | }, 17 | jsonSchema: { 18 | type: 'boolean', 19 | serializationType: 'boolean' 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/@dcl/ecs/src/schemas/buildSchema/types.ts: -------------------------------------------------------------------------------- 1 | import { JsonSchemaExtended } from '../ISchema' 2 | 3 | export type UnknownSchema = { type: JsonSchemaExtended; value: unknown } 4 | -------------------------------------------------------------------------------- /packages/@dcl/ecs/src/schemas/custom/Entity.ts: -------------------------------------------------------------------------------- 1 | import { Entity } from '../../engine/entity' 2 | import { ByteBuffer } from '../../serialization/ByteBuffer' 3 | import { ISchema } from '../ISchema' 4 | 5 | /** 6 | * @internal 7 | */ 8 | export const EntitySchema: ISchema = { 9 | serialize(value: Entity, builder: ByteBuffer): void { 10 | builder.writeInt32(value as number) 11 | }, 12 | deserialize(reader: ByteBuffer): Entity { 13 | return reader.readInt32() as Entity 14 | }, 15 | create() { 16 | return 0 as Entity 17 | }, 18 | jsonSchema: { 19 | type: 'integer', 20 | serializationType: 'entity' 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /packages/@dcl/ecs/src/serialization/crdt/index.ts: -------------------------------------------------------------------------------- 1 | export * from './deleteComponent' 2 | export * from './appendValue' 3 | export * from './deleteEntity' 4 | export * from './putComponent' 5 | export * from './network/putComponentNetwork' 6 | export * from './network/deleteComponentNetwork' 7 | export * from './network/deleteEntityNetwork' 8 | export * from './types' 9 | export * from './crdtMessageProtocol' 10 | -------------------------------------------------------------------------------- /packages/@dcl/ecs/tsconfig.cjs.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "module": "CommonJS", 5 | "outDir": "dist-cjs" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/@dcl/ecs/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2020", 4 | "module": "esnext", 5 | "moduleResolution": "node", 6 | "strict": true, 7 | "esModuleInterop": true, 8 | "skipLibCheck": true, 9 | "forceConsistentCasingInFileNames": true, 10 | "allowSyntheticDefaultImports": true, 11 | "declaration": true, 12 | "stripInternal": true, 13 | "downlevelIteration": true, 14 | "preserveConstEnums": true, 15 | "outDir": "dist", 16 | "lib": ["ES2020"] 17 | }, 18 | "include": ["src"], 19 | "exclude": ["dist", "dist-cjs"] 20 | } 21 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/.env: -------------------------------------------------------------------------------- 1 | DISABLE_ESLINT_PLUGIN=true 2 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | 25 | public/bundle* 26 | public/bin 27 | 28 | src/lib/data-layer/proto/gen 29 | 30 | !jest.config.js 31 | !jest-puppeteer.config.js -------------------------------------------------------------------------------- /packages/@dcl/inspector/.npmignore: -------------------------------------------------------------------------------- 1 | * 2 | **/** 3 | !package.json 4 | !public/** 5 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript.tsdk": "node_modules/typescript/lib" 3 | } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/__mocks__/@babylonjs/inspector.ts: -------------------------------------------------------------------------------- 1 | export default {} 2 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/jest-puppeteer.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | launch: { 3 | headless: 'new', // Change this to false to run the test on a non-headless Chrome 4 | // slowMo: 100 5 | }, 6 | browserContext: 'default', 7 | } 8 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/scripts/copy-bin.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs' 2 | import { resolve } from 'path' 3 | 4 | console.log('Copying "@dcl/asset-packs/bin/index.js" into "public/bin/index.js"...') 5 | const binDirPath = resolve(__dirname, '../public/bin') 6 | if (!fs.existsSync(binDirPath)) { 7 | fs.mkdirSync(binDirPath) 8 | } 9 | fs.copyFileSync( 10 | resolve(__dirname, '../node_modules/@dcl/asset-packs/bin/index.js'), 11 | resolve(__dirname, '../public/bin/index.js') 12 | ) 13 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/scripts/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2016", 4 | "module": "NodeNext", 5 | "esModuleInterop": true, 6 | "forceConsistentCasingInFileNames": true, 7 | "strict": true, 8 | "skipLibCheck": true 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/App/index.ts: -------------------------------------------------------------------------------- 1 | import App from './App' 2 | export { App } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/AssetPreview/AssetPreview.css: -------------------------------------------------------------------------------- 1 | .AssetPreview { 2 | display: flex; 3 | align-items: center; 4 | justify-content: center; 5 | } 6 | 7 | .AssetPreview canvas { 8 | width: 100%; 9 | } 10 | 11 | .AssetPreview .GltfPreview.hidden { 12 | visibility: hidden; 13 | } 14 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/AssetPreview/index.ts: -------------------------------------------------------------------------------- 1 | import { AssetPreview } from './AssetPreview' 2 | export { AssetPreview } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/AssetPreview/types.ts: -------------------------------------------------------------------------------- 1 | export interface Props { 2 | value: File 3 | resources?: File[] 4 | onScreenshot: (value: string) => void 5 | onLoad?: () => void 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Assets/index.ts: -------------------------------------------------------------------------------- 1 | import Assets from './Assets' 2 | 3 | export default Assets 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/AssetsCatalog/Asset/index.ts: -------------------------------------------------------------------------------- 1 | import Asset from './Asset' 2 | export { Asset } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/AssetsCatalog/Assets/Assets.css: -------------------------------------------------------------------------------- 1 | .assets-catalog:not(:has(.assets-catalog-categories)) .assets-catalog-assets-container { 2 | height: 100%; 3 | overflow: scroll; 4 | overflow-y: auto; 5 | overflow-x: hidden; 6 | padding: 0 24px; 7 | } 8 | 9 | .assets-catalog-assets-container { 10 | display: flex; 11 | flex-wrap: wrap; 12 | gap: 8px; 13 | } 14 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/AssetsCatalog/Assets/index.ts: -------------------------------------------------------------------------------- 1 | import Assets from './Assets' 2 | export { Assets } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/AssetsCatalog/Categories/index.ts: -------------------------------------------------------------------------------- 1 | import Categories from './Categories' 2 | export { Categories } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/AssetsCatalog/Categories/types.ts: -------------------------------------------------------------------------------- 1 | import { AssetPack } from '../../../lib/logic/catalog' 2 | 3 | export interface Props { 4 | onGoBack: () => void 5 | value: AssetPack 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/AssetsCatalog/Header/index.ts: -------------------------------------------------------------------------------- 1 | import Header from './Header' 2 | export { Header } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/AssetsCatalog/Header/types.ts: -------------------------------------------------------------------------------- 1 | import { AssetPack } from '../../../lib/logic/catalog' 2 | 3 | export interface Props { 4 | selectedTheme: AssetPack | undefined 5 | search: string 6 | onChangeTheme: (value?: AssetPack) => void 7 | onSearch: (value: string) => void 8 | } 9 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/AssetsCatalog/Themes/index.ts: -------------------------------------------------------------------------------- 1 | import Themes from './Themes' 2 | export { Themes } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/AssetsCatalog/Themes/types.ts: -------------------------------------------------------------------------------- 1 | import { AssetPack } from '../../../lib/logic/catalog' 2 | 3 | export interface Props { 4 | catalog: AssetPack[] 5 | onClick: (value: AssetPack) => void 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/AssetsCatalog/index.ts: -------------------------------------------------------------------------------- 1 | import AssetsCatalog from './AssetsCatalog' 2 | export { AssetsCatalog } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/AssetsCatalog/types.ts: -------------------------------------------------------------------------------- 1 | import { AssetPack } from '../../lib/logic/catalog' 2 | 3 | export interface Props { 4 | catalog: AssetPack[] 5 | } 6 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Block/Block.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import cx from 'classnames' 3 | import { Label } from '../ui' 4 | import { Props } from './types' 5 | 6 | import './Block.css' 7 | 8 | const Block = React.forwardRef>( 9 | ({ label, error, className, children }, ref) => { 10 | return ( 11 |
12 |
15 | ) 16 | } 17 | ) 18 | 19 | export default React.memo(Block) 20 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Block/index.ts: -------------------------------------------------------------------------------- 1 | import Block from './Block' 2 | export { Block } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Block/types.ts: -------------------------------------------------------------------------------- 1 | export type Props = { 2 | label?: React.ReactNode 3 | error?: boolean 4 | className?: string 5 | } 6 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Box/Box.css: -------------------------------------------------------------------------------- 1 | .Box { 2 | height: calc(100% - 4.8px); 3 | } 4 | 5 | .Box { 6 | margin: 1.2px; 7 | padding: 1.2px; 8 | border-radius: 2.4px; 9 | background: #21262f; 10 | } 11 | 12 | .Box > .content { 13 | border: 1px solid var(--main-bg-color); 14 | background: var(--main-bg-color); 15 | width: 100%; 16 | height: 100%; 17 | position: relative; 18 | } 19 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Box/Box.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import cx from 'classnames' 3 | 4 | import './Box.css' 5 | 6 | interface Props { 7 | className?: string 8 | } 9 | 10 | function Box({ children, className }: React.PropsWithChildren) { 11 | return ( 12 |
13 |
{children}
14 |
15 | ) 16 | } 17 | 18 | export default Box 19 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Box/index.ts: -------------------------------------------------------------------------------- 1 | import Box from './Box' 2 | export { Box } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Button/Button.tsx: -------------------------------------------------------------------------------- 1 | import cx from 'classnames' 2 | 3 | import { PropTypes } from './types' 4 | import './Button.css' 5 | 6 | function Button({ size, type, ...props }: PropTypes) { 7 | return ( 8 | 11 | ) 12 | } 13 | 14 | export default Button 15 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Button/index.ts: -------------------------------------------------------------------------------- 1 | import Button from './Button' 2 | 3 | export { Button } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Button/types.ts: -------------------------------------------------------------------------------- 1 | type Button = React.DetailedHTMLProps, HTMLButtonElement> 2 | 3 | export type PropTypes = Omit & { 4 | type?: 'danger' | 'dark' | 'blue' | 'etc' | 'text' 5 | size?: 'big' | 'etc' 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Container/index.ts: -------------------------------------------------------------------------------- 1 | import Container from './Container' 2 | export { Container } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Container/types.ts: -------------------------------------------------------------------------------- 1 | export type Props = { 2 | label?: string 3 | className?: string 4 | rightContent?: JSX.Element 5 | initialOpen?: boolean 6 | indicator?: boolean | string | JSX.Element 7 | border?: boolean 8 | gap?: boolean 9 | onRemoveContainer?: () => void 10 | } 11 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/ContexMenu/index.ts: -------------------------------------------------------------------------------- 1 | import { ContextMenu } from './ContextMenu' 2 | export { ContextMenu } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/CreateCustomAsset/index.ts: -------------------------------------------------------------------------------- 1 | export { default as CreateCustomAsset } from './CreateCustomAsset' 2 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/CustomAssets/index.ts: -------------------------------------------------------------------------------- 1 | import CustomAssets from './CustomAssets' 2 | export { CustomAssets } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/BatchAction/BatchAction.css: -------------------------------------------------------------------------------- 1 | .BatchActionContainer { 2 | display: flex; 3 | flex-direction: column; 4 | width: 100%; 5 | } 6 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/BatchAction/index.ts: -------------------------------------------------------------------------------- 1 | import BatchAction from './BatchAction' 2 | 3 | export { BatchAction } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/BatchAction/types.ts: -------------------------------------------------------------------------------- 1 | import { Action, ActionPayload, ActionType } from '@dcl/asset-packs' 2 | 3 | export interface Props { 4 | availableActions: Action[] 5 | value: Partial> 6 | onUpdate: (value: ActionPayload) => void 7 | } 8 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/CloneEntityAction/CloneEntityAction.css: -------------------------------------------------------------------------------- 1 | .CloneEntityActionContainer { 2 | display: flex; 3 | flex-direction: row; 4 | gap: 15px; 5 | width: 100%; 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/CloneEntityAction/index.ts: -------------------------------------------------------------------------------- 1 | import CloneEntityAction from './CloneEntityAction' 2 | 3 | export { CloneEntityAction } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/CloneEntityAction/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionPayload, ActionType } from '@dcl/asset-packs' 2 | 3 | export interface Props { 4 | value: Partial> 5 | onUpdate: (value: ActionPayload) => void 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/DelayAction/DelayAction.css: -------------------------------------------------------------------------------- 1 | .DelayActionContainer { 2 | display: flex; 3 | flex-direction: column; 4 | width: 100%; 5 | } 6 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/DelayAction/index.ts: -------------------------------------------------------------------------------- 1 | import DelayAction from './DelayAction' 2 | 3 | export { DelayAction } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/DelayAction/types.ts: -------------------------------------------------------------------------------- 1 | import { Action, ActionPayload, ActionType } from '@dcl/asset-packs' 2 | 3 | export interface Props> { 4 | availableActions: Action[] 5 | value: T 6 | onUpdate: (value: T) => void 7 | } 8 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/FollowPlayerAction/FollowPlayerAction.css: -------------------------------------------------------------------------------- 1 | .FollowPlayerActionContainer { 2 | display: flex; 3 | flex-direction: row; 4 | gap: 15px; 5 | width: 100%; 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/FollowPlayerAction/index.ts: -------------------------------------------------------------------------------- 1 | import FollowPlayerAction from './FollowPlayerAction' 2 | 3 | export { FollowPlayerAction } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/FollowPlayerAction/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionPayload, ActionType } from '@dcl/asset-packs' 2 | 3 | export interface Props { 4 | value: Partial> 5 | onUpdate: (value: ActionPayload) => void 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/LoopAction/LoopAction.css: -------------------------------------------------------------------------------- 1 | .LoopActionContainer { 2 | display: flex; 3 | flex-direction: column; 4 | width: 100%; 5 | } 6 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/LoopAction/index.ts: -------------------------------------------------------------------------------- 1 | import LoopAction from './LoopAction' 2 | 3 | export { LoopAction } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/LoopAction/types.ts: -------------------------------------------------------------------------------- 1 | import { Action, ActionPayload, ActionType } from '@dcl/asset-packs' 2 | 3 | export interface Props> { 4 | availableActions: Action[] 5 | value: T 6 | onUpdate: (value: T) => void 7 | } 8 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/MovePlayerAction/MovePlayerAction.css: -------------------------------------------------------------------------------- 1 | .MovePlayerActionContainer { 2 | display: flex; 3 | flex-direction: row; 4 | gap: 15px; 5 | width: 100%; 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/MovePlayerAction/index.ts: -------------------------------------------------------------------------------- 1 | import MovePlayerAction from './MovePlayerAction' 2 | 3 | export { MovePlayerAction } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/MovePlayerAction/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionPayload, ActionType } from '@dcl/asset-packs' 2 | 3 | export interface Props { 4 | value: Partial> 5 | onUpdate: (value: ActionPayload) => void 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/OpenLinkAction/OpenLinkAction.css: -------------------------------------------------------------------------------- 1 | .OpenLinkActionContainer { 2 | display: flex; 3 | flex-direction: row; 4 | gap: 15px; 5 | width: 100%; 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/OpenLinkAction/index.ts: -------------------------------------------------------------------------------- 1 | import OpenLinkAction from './OpenLinkAction' 2 | 3 | export { OpenLinkAction } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/OpenLinkAction/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionPayload, ActionType } from '@dcl/asset-packs' 2 | 3 | export interface Props { 4 | value: Partial> 5 | onUpdate: (value: ActionPayload) => void 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/PlayAnimationAction/PlayAnimationAction.css: -------------------------------------------------------------------------------- 1 | .PlayAnimationActionContainer { 2 | width: 100%; 3 | } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/PlayAnimationAction/index.ts: -------------------------------------------------------------------------------- 1 | import PlayAnimationAction from './PlayAnimationAction' 2 | export { PlayAnimationAction } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/PlayAnimationAction/types.ts: -------------------------------------------------------------------------------- 1 | import { AnimationGroup } from '@babylonjs/core' 2 | import { ActionPayload, ActionType } from '@dcl/asset-packs' 3 | 4 | export interface Props { 5 | value: Partial> 6 | animations: AnimationGroup[] 7 | onUpdate: (value: ActionPayload) => void 8 | } 9 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/PlayAnimationAction/utils.ts: -------------------------------------------------------------------------------- 1 | import { ActionPayload, ActionType } from '@dcl/asset-packs' 2 | 3 | export function isValid( 4 | payload: Partial> 5 | ): payload is ActionPayload { 6 | return !!payload.animation 7 | } 8 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/PlayAudioStreamAction/PlayAudioStreamAction.css: -------------------------------------------------------------------------------- 1 | .PlayAudioStreamActionContainer { 2 | display: flex; 3 | flex-direction: column; 4 | width: 100%; 5 | row-gap: 12px; 6 | } 7 | 8 | .PlayAudioStreamActionContainer .Block { 9 | margin: 0; 10 | } 11 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/PlayAudioStreamAction/index.ts: -------------------------------------------------------------------------------- 1 | import PlayAudioStreamAction from './PlayAudioStreamAction' 2 | export { PlayAudioStreamAction } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/PlayAudioStreamAction/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionPayload, ActionType } from '@dcl/asset-packs' 2 | 3 | export interface Props { 4 | value: Partial> 5 | onUpdate: (value: ActionPayload) => void 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/PlayAudioStreamAction/utils.ts: -------------------------------------------------------------------------------- 1 | import { ActionPayload, ActionType } from '@dcl/asset-packs' 2 | 3 | export function isValid( 4 | payload: Partial> 5 | ): payload is ActionPayload { 6 | return !!payload.url 7 | } 8 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/PlayCustomEmoteAction/PlayCustomEmoteAction.css: -------------------------------------------------------------------------------- 1 | .PlayCustomEmoteActionContainer { 2 | display: flex; 3 | flex-direction: row; 4 | gap: 15px; 5 | width: 100%; 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/PlayCustomEmoteAction/index.ts: -------------------------------------------------------------------------------- 1 | import PlayCustomEmoteAction from './PlayCustomEmoteAction' 2 | 3 | export { PlayCustomEmoteAction } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/PlayCustomEmoteAction/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionPayload, ActionType } from '@dcl/asset-packs' 2 | 3 | export interface Props { 4 | value: Partial> 5 | onUpdate: (value: ActionPayload) => void 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/PlayCustomEmoteAction/utils.ts: -------------------------------------------------------------------------------- 1 | import { TreeNode } from '../../../ProjectAssetExplorer/ProjectView' 2 | import { AssetNodeItem } from '../../../ProjectAssetExplorer/types' 3 | import { isAssetNode } from '../../../ProjectAssetExplorer/utils' 4 | 5 | export const isAsset = (value: string): boolean => value.endsWith('.gltf') || value.endsWith('.glb') 6 | export const isModel = (node: TreeNode): node is AssetNodeItem => isAssetNode(node) && isAsset(node.name) 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/PlayDefaultEmoteAction/PlayDefaultEmoteAction.css: -------------------------------------------------------------------------------- 1 | .PlayDefaultEmoteActionContainer { 2 | display: flex; 3 | flex-direction: row; 4 | gap: 15px; 5 | width: 100%; 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/PlayDefaultEmoteAction/index.ts: -------------------------------------------------------------------------------- 1 | import PlayDefaultEmoteAction from './PlayDefaultEmoteAction' 2 | 3 | export { PlayDefaultEmoteAction } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/PlayDefaultEmoteAction/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionPayload, ActionType } from '@dcl/asset-packs' 2 | 3 | export interface Props { 4 | value: Partial> 5 | onUpdate: (value: ActionPayload) => void 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/PlaySoundAction/PlaySoundAction.css: -------------------------------------------------------------------------------- 1 | .PlaySoundActionContainer { 2 | display: flex; 3 | flex-direction: column; 4 | gap: 15px; 5 | width: 100%; 6 | } 7 | 8 | .PlaySoundActionContainer .field.drop { 9 | border: 1px solid white; 10 | } 11 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/PlaySoundAction/index.ts: -------------------------------------------------------------------------------- 1 | import PlaySoundAction from './PlaySoundAction' 2 | export { PlaySoundAction } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/PlaySoundAction/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionPayload, ActionType } from '@dcl/asset-packs' 2 | 3 | export interface Props { 4 | value: Partial> 5 | onUpdate: (value: ActionPayload) => void 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/PlaySoundAction/utils.ts: -------------------------------------------------------------------------------- 1 | import { ActionPayload, ActionType } from '@dcl/asset-packs' 2 | 3 | export function isValid( 4 | payload: Partial> 5 | ): payload is ActionPayload { 6 | return !!payload.src 7 | } 8 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/PlayVideoStreamAction/PlayVideoStreamAction.css: -------------------------------------------------------------------------------- 1 | .PlayVideoStreamActionContainer { 2 | display: flex; 3 | flex-direction: column; 4 | width: 100%; 5 | row-gap: 12px; 6 | } 7 | 8 | .PlayVideoStreamActionContainer .Block { 9 | margin: 0; 10 | } 11 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/PlayVideoStreamAction/index.ts: -------------------------------------------------------------------------------- 1 | import PlayVideoStreamAction from './PlayVideoStreamAction' 2 | export { PlayVideoStreamAction } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/PlayVideoStreamAction/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionPayload, ActionType } from '@dcl/asset-packs' 2 | 3 | export interface Props { 4 | value: Partial> 5 | onUpdate: (value: ActionPayload) => void 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/PlayVideoStreamAction/utils.ts: -------------------------------------------------------------------------------- 1 | import { ActionPayload, ActionType } from '@dcl/asset-packs' 2 | 3 | export function isValid( 4 | payload: Partial> 5 | ): payload is ActionPayload { 6 | return payload.dclCast || !!payload.src 7 | } 8 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/RandomAction/RandomAction.css: -------------------------------------------------------------------------------- 1 | .RandomActionContainer { 2 | display: flex; 3 | flex-direction: column; 4 | width: 100%; 5 | } 6 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/RandomAction/index.ts: -------------------------------------------------------------------------------- 1 | import RandomAction from './RandomAction' 2 | 3 | export { RandomAction } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/RandomAction/types.ts: -------------------------------------------------------------------------------- 1 | import { Action, ActionPayload, ActionType } from '@dcl/asset-packs' 2 | 3 | export interface Props { 4 | availableActions: Action[] 5 | value: Partial> 6 | onUpdate: (value: ActionPayload) => void 7 | } 8 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/SetPositionAction/SetPositionAction.css: -------------------------------------------------------------------------------- 1 | .SetPositionActionContainer { 2 | display: flex; 3 | flex-direction: column; 4 | gap: 15px; 5 | width: 100%; 6 | } 7 | 8 | .SetPositionActionContainer .row { 9 | display: flex; 10 | flex-direction: row; 11 | } 12 | 13 | .SetPositionActionContainer .Block { 14 | width: 100%; 15 | } 16 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/SetPositionAction/index.ts: -------------------------------------------------------------------------------- 1 | import SetPositionAction from './SetPositionAction' 2 | 3 | export { SetPositionAction } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/SetPositionAction/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionPayload, ActionType } from '@dcl/asset-packs' 2 | 3 | export interface Props { 4 | value: Partial> 5 | onUpdate: (value: ActionPayload) => void 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/SetRotationAction/SetRotationAction.css: -------------------------------------------------------------------------------- 1 | .SetRotationActionContainer { 2 | display: flex; 3 | flex-direction: column; 4 | gap: 15px; 5 | width: 100%; 6 | } 7 | 8 | .SetPositionActionContainer .row { 9 | display: flex; 10 | flex-direction: row; 11 | } 12 | 13 | .SetRotationActionContainer .Block { 14 | width: 100%; 15 | } 16 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/SetRotationAction/index.ts: -------------------------------------------------------------------------------- 1 | import SetRotationAction from './SetRotationAction' 2 | 3 | export { SetRotationAction } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/SetRotationAction/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionPayload, ActionType } from '@dcl/asset-packs' 2 | 3 | export interface Props { 4 | value: Partial> 5 | onUpdate: (value: ActionPayload) => void 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/SetScaleAction/SetScaleAction.css: -------------------------------------------------------------------------------- 1 | .SetScaleActionContainer { 2 | display: flex; 3 | flex-direction: column; 4 | gap: 15px; 5 | width: 100%; 6 | } 7 | 8 | .SetPositionActionContainer .row { 9 | display: flex; 10 | flex-direction: row; 11 | } 12 | 13 | .SetScaleActionContainer .Block { 14 | width: 100%; 15 | } 16 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/SetScaleAction/index.ts: -------------------------------------------------------------------------------- 1 | import SetScaleAction from './SetScaleAction' 2 | 3 | export { SetScaleAction } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/SetScaleAction/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionPayload, ActionType } from '@dcl/asset-packs' 2 | 3 | export interface Props { 4 | value: Partial> 5 | onUpdate: (value: ActionPayload) => void 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/SetVisibilityAction/SetVisibilityAction.css: -------------------------------------------------------------------------------- 1 | .SetVisibilityActionContainer { 2 | width: 100%; 3 | } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/SetVisibilityAction/index.ts: -------------------------------------------------------------------------------- 1 | import SetVisibilityAction from './SetVisibilityAction' 2 | 3 | export { SetVisibilityAction } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/SetVisibilityAction/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionPayload, ActionType } from '@dcl/asset-packs' 2 | 3 | export interface Props { 4 | value: Partial> 5 | onUpdate: (value: ActionPayload) => void 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/ShowImageAction/ShowImageAction.css: -------------------------------------------------------------------------------- 1 | .ShowImageActionContainer { 2 | display: flex; 3 | flex-direction: column; 4 | width: 100%; 5 | row-gap: 12px; 6 | } 7 | 8 | .ShowImageActionContainer > .Block > .content:has(.Text.Field) { 9 | flex-wrap: wrap; 10 | row-gap: 12px; 11 | } 12 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/ShowImageAction/index.ts: -------------------------------------------------------------------------------- 1 | import ShowImageAction from './ShowImageAction' 2 | 3 | export { ShowImageAction } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/ShowImageAction/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionPayload, ActionType } from '@dcl/asset-packs' 2 | 3 | export interface Props { 4 | value: Partial> 5 | onUpdate: (value: ActionPayload) => void 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/ShowTextAction/ShowTextAction.css: -------------------------------------------------------------------------------- 1 | .ShowTextActionContainer { 2 | display: flex; 3 | flex-direction: column; 4 | width: 100%; 5 | row-gap: 12px; 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/ShowTextAction/index.ts: -------------------------------------------------------------------------------- 1 | import ShowTextAction from './ShowTextAction' 2 | 3 | export { ShowTextAction } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/ShowTextAction/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionPayload, ActionType } from '@dcl/asset-packs' 2 | 3 | export interface Props { 4 | value: Partial> 5 | onUpdate: (value: ActionPayload) => void 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/TeleportPlayerAction/TeleportPlayerAction.css: -------------------------------------------------------------------------------- 1 | .TeleportPlayerActionContainer { 2 | display: flex; 3 | flex-direction: row; 4 | gap: 15px; 5 | width: 100%; 6 | } 7 | 8 | .TeleportPlayerActionContainer .Block { 9 | width: 100%; 10 | } 11 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/TeleportPlayerAction/index.ts: -------------------------------------------------------------------------------- 1 | import TeleportPlayerAction from './TeleportPlayerAction' 2 | 3 | export { TeleportPlayerAction } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/TeleportPlayerAction/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionPayload, ActionType } from '@dcl/asset-packs' 2 | 3 | export interface Props { 4 | value: Partial> 5 | onUpdate: (value: ActionPayload) => void 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/TriggerProximityAction/TriggerProximityAction.css: -------------------------------------------------------------------------------- 1 | .TriggerProximityActionContainer { 2 | display: flex; 3 | flex-direction: row; 4 | gap: 15px; 5 | width: 100%; 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/TriggerProximityAction/index.ts: -------------------------------------------------------------------------------- 1 | import FollowPlayerAction from './TriggerProximityAction' 2 | 3 | export { FollowPlayerAction } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/TriggerProximityAction/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionPayload, ActionType, ProximityLayer } from '@dcl/asset-packs' 2 | 3 | export interface Props { 4 | value: Partial> 5 | onUpdate: (value: ActionPayload) => void 6 | } 7 | 8 | export const LayerOptions = [ 9 | { 10 | value: ProximityLayer.ALL, 11 | label: 'All' 12 | }, 13 | { 14 | value: ProximityLayer.PLAYER, 15 | label: 'Player' 16 | }, 17 | { 18 | value: ProximityLayer.NON_PLAYER, 19 | label: 'Non Player' 20 | } 21 | ] 22 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/TweenAction/index.ts: -------------------------------------------------------------------------------- 1 | import TweenAction from './TweenAction' 2 | export { TweenAction } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/TweenAction/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionPayload } from '@dcl/asset-packs' 2 | 3 | export interface Props { 4 | tween: ActionPayload['start_tween'] 5 | onUpdateTween: (tween: ActionPayload['start_tween']) => void 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/TweenAction/utils.ts: -------------------------------------------------------------------------------- 1 | import { ActionPayload } from '@dcl/asset-packs' 2 | 3 | export function isValidTween(tween: ActionPayload['start_tween']) { 4 | return ( 5 | !!tween.type && 6 | !isNaN(Number(tween.end.x)) && 7 | !isNaN(Number(tween.end.y)) && 8 | !isNaN(Number(tween.end.z)) && 9 | tween.relative !== undefined && 10 | !!tween.interpolationType && 11 | !isNaN(Number(tween.duration)) 12 | ) 13 | } 14 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/index.ts: -------------------------------------------------------------------------------- 1 | import ActionInspector from './ActionInspector' 2 | export { ActionInspector } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/ActionInspector/types.ts: -------------------------------------------------------------------------------- 1 | import { Entity } from '@dcl/ecs' 2 | 3 | export interface Props { 4 | entity: Entity 5 | } 6 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/AddButton/AddButton.css: -------------------------------------------------------------------------------- 1 | .AddButton { 2 | margin-top: 12px; 3 | border: 1px solid var(--base-15); 4 | border-radius: 4px; 5 | background: #1e1e1e; 6 | background: var(--base-20); 7 | display: flex; 8 | padding: 4px; 9 | justify-content: center; 10 | align-items: center; 11 | gap: 4px; 12 | align-self: stretch; 13 | color: #ccc; 14 | font-size: 12px; 15 | font-style: normal; 16 | font-weight: 500; 17 | line-height: normal; 18 | width: 100%; 19 | cursor: pointer; 20 | } 21 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/AddButton/AddButton.tsx: -------------------------------------------------------------------------------- 1 | import { ButtonHTMLAttributes, memo } from 'react' 2 | import { AiOutlinePlus as AddIcon } from 'react-icons/ai' 3 | import './AddButton.css' 4 | 5 | const AddButton = memo>((props) => { 6 | const { children, ...rest } = props 7 | return ( 8 | 11 | ) 12 | }) 13 | 14 | export default AddButton 15 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/AddButton/index.ts: -------------------------------------------------------------------------------- 1 | import AddButton from './AddButton' 2 | export { AddButton } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/AdminToolkitView/RewardsControl/index.ts: -------------------------------------------------------------------------------- 1 | import RewardsControl from './RewardsControl' 2 | 3 | export { RewardsControl } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/AdminToolkitView/SmartItemControl/index.ts: -------------------------------------------------------------------------------- 1 | import SmartItemControl from './SmartItemControl' 2 | 3 | export { SmartItemControl } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/AdminToolkitView/TextAnnouncementControl/index.ts: -------------------------------------------------------------------------------- 1 | import TextAnnouncementControl from './TextAnnouncementControl' 2 | 3 | export { TextAnnouncementControl } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/AdminToolkitView/VideoControl/index.ts: -------------------------------------------------------------------------------- 1 | import VideoControl from './VideoControl' 2 | 3 | export { VideoControl } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/AdminToolkitView/index.ts: -------------------------------------------------------------------------------- 1 | import AdminToolkitView from './AdminToolkitView' 2 | 3 | export * from './types' 4 | export { AdminToolkitView } 5 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/AnimatorInspector/index.ts: -------------------------------------------------------------------------------- 1 | import AnimatorInspector from './AnimatorInspector' 2 | export { AnimatorInspector } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/AnimatorInspector/types.ts: -------------------------------------------------------------------------------- 1 | import { Entity, PBAnimationState } from '@dcl/ecs' 2 | 3 | export interface Props { 4 | entity: Entity 5 | } 6 | 7 | export type AnimatorInput = { 8 | states: PBAnimationState[] 9 | } 10 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/AudioSourceInspector/index.ts: -------------------------------------------------------------------------------- 1 | import AudioSourceInspector from './AudioSourceInspector' 2 | export { AudioSourceInspector } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/AudioSourceInspector/types.ts: -------------------------------------------------------------------------------- 1 | import { Entity } from '@dcl/ecs' 2 | 3 | export interface Props { 4 | entity: Entity 5 | } 6 | 7 | export type AudioSourceInput = { 8 | audioClipUrl: string 9 | playing?: boolean 10 | loop?: boolean 11 | volume?: string 12 | global?: boolean 13 | } 14 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/AudioStreamInspector/index.ts: -------------------------------------------------------------------------------- 1 | import AudioStreamInspector from './AudioStreamInspector' 2 | export { AudioStreamInspector } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/AudioStreamInspector/types.ts: -------------------------------------------------------------------------------- 1 | import { Entity } from '@dcl/ecs' 2 | 3 | export interface Props { 4 | entity: Entity 5 | } 6 | 7 | export type AudioStreamInput = { 8 | url: string 9 | playing?: boolean 10 | volume?: string 11 | } 12 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/CounterBarInspector/CounterBarInspector.css: -------------------------------------------------------------------------------- 1 | .CounterBarInspector.Container { 2 | height: auto; 3 | } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/CounterBarInspector/index.ts: -------------------------------------------------------------------------------- 1 | import CounterBarInspector from './CounterBarInspector' 2 | export { CounterBarInspector } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/CounterBarInspector/types.ts: -------------------------------------------------------------------------------- 1 | import { Entity } from '@dcl/ecs' 2 | 3 | export interface Props { 4 | entity: Entity 5 | } 6 | 7 | export type CounterBarInput = { 8 | primaryColor: string 9 | secondaryColor: string 10 | maxValue: string 11 | } 12 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/CounterInspector/CounterInspector.css: -------------------------------------------------------------------------------- 1 | .CounterInspector.Container { 2 | height: auto; 3 | } 4 | 5 | .CounterInspector .content .Text.Field { 6 | margin-top: 8px; 7 | width: 100%; 8 | } 9 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/CounterInspector/index.ts: -------------------------------------------------------------------------------- 1 | import CounterInspector from './CounterInspector' 2 | export { CounterInspector } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/CounterInspector/types.ts: -------------------------------------------------------------------------------- 1 | import { Entity } from '@dcl/ecs' 2 | 3 | export interface Props { 4 | entity: Entity 5 | } 6 | 7 | export type CounterInput = { 8 | id: string 9 | value: string 10 | } 11 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/EntityHeader/index.ts: -------------------------------------------------------------------------------- 1 | import EntityHeader from './EntityHeader' 2 | export { EntityHeader } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/EntityInspector.css: -------------------------------------------------------------------------------- 1 | .EntityInspector { 2 | position: absolute; 3 | display: flex; 4 | flex-direction: column; 5 | width: 100%; 6 | height: 100%; 7 | padding: 8px; 8 | background-color: var(--base-20); 9 | border-right: 1px solid var(--base-15, #3a3d41); 10 | overflow-y: auto; 11 | gap: 12px; 12 | } 13 | 14 | .EntityInspector > .with-context-menu:empty { 15 | display: none; 16 | } 17 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/GltfInspector/GltfInspector.css: -------------------------------------------------------------------------------- 1 | .GltfInspector > .content > .column { 2 | display: flex; 3 | flex-direction: column; 4 | width: 100%; 5 | } 6 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/GltfInspector/index.ts: -------------------------------------------------------------------------------- 1 | import GltfInspector from './GltfInspector' 2 | export { GltfInspector } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/GltfInspector/types.ts: -------------------------------------------------------------------------------- 1 | import { Entity } from '@dcl/ecs' 2 | 3 | export interface Props { 4 | entity: Entity 5 | } 6 | 7 | export type GltfContainerInput = { 8 | src: string 9 | visibleMeshesCollisionMask: string 10 | invisibleMeshesCollisionMask: string 11 | } 12 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/MaterialInspector/Texture/index.ts: -------------------------------------------------------------------------------- 1 | import Texture from './Texture' 2 | import { Props } from './types' 3 | export { Texture, Props } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/MaterialInspector/index.ts: -------------------------------------------------------------------------------- 1 | import MaterialInspector from './MaterialInspector' 2 | export { MaterialInspector } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/MeshColliderInspector/index.ts: -------------------------------------------------------------------------------- 1 | import MeshColliderInspector from './MeshColliderInspector' 2 | export { MeshColliderInspector } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/MeshColliderInspector/types.ts: -------------------------------------------------------------------------------- 1 | import { Entity } from '@dcl/ecs' 2 | 3 | import { MeshType } from '../MeshRendererInspector/types' 4 | 5 | export interface Props { 6 | entity: Entity 7 | } 8 | 9 | export type MeshColliderInput = { 10 | mesh: MeshType 11 | radiusTop?: string 12 | radiusBottom?: string 13 | collisionMask?: string 14 | } 15 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/MeshRendererInspector/index.ts: -------------------------------------------------------------------------------- 1 | import MeshRendererInspector from './MeshRendererInspector' 2 | export { MeshRendererInspector } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/MeshRendererInspector/types.ts: -------------------------------------------------------------------------------- 1 | import { Entity } from '@dcl/ecs' 2 | 3 | export interface Props { 4 | entity: Entity 5 | } 6 | 7 | export enum MeshType { 8 | MT_BOX = 'box', 9 | MT_SPHERE = 'sphere', 10 | MT_CYLINDER = 'cylinder', 11 | MT_PLANE = 'plane' 12 | } 13 | 14 | export type MeshRendererInput = { 15 | mesh: MeshType 16 | radiusTop?: string 17 | radiusBottom?: string 18 | uvs?: string 19 | } 20 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/MoreOptionsMenu/index.ts: -------------------------------------------------------------------------------- 1 | import { MoreOptionsMenu } from './MoreOptionsMenu' 2 | 3 | export default MoreOptionsMenu 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/NftShapeInspector/NftShapeInspector.css: -------------------------------------------------------------------------------- 1 | .Container.NftShape .urn .content { 2 | flex-direction: column; 3 | align-items: inherit; 4 | } 5 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/NftShapeInspector/index.ts: -------------------------------------------------------------------------------- 1 | import NftShapeInspector from './NftShapeInspector' 2 | export { NftShapeInspector } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/NftShapeInspector/types.ts: -------------------------------------------------------------------------------- 1 | import { Entity } from '@dcl/ecs' 2 | 3 | export interface Props { 4 | entity: Entity 5 | } 6 | 7 | export type NftShapeInput = { 8 | urn: string 9 | color?: string 10 | style?: string 11 | } 12 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/PointerEventsInspector/index.ts: -------------------------------------------------------------------------------- 1 | import PointerEventsInspector from './PointerEventsInspector' 2 | export { PointerEventsInspector } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/PointerEventsInspector/types.ts: -------------------------------------------------------------------------------- 1 | import { Entity, PBPointerEvents_Entry } from '@dcl/ecs' 2 | 3 | export interface Props { 4 | entity: Entity 5 | } 6 | 7 | export type AnimatorInput = { 8 | pointerEvents: PBPointerEvents_Entry[] 9 | } 10 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/RemoveButton/RemoveButton.tsx: -------------------------------------------------------------------------------- 1 | import { HTMLAttributes, memo } from 'react' 2 | import { VscTrash as RemoveIcon } from 'react-icons/vsc' 3 | import { Button } from '../../Button' 4 | 5 | const RemoveButton = memo>((props) => { 6 | const { children, ...rest } = props 7 | return ( 8 | 11 | ) 12 | }) 13 | 14 | export default RemoveButton 15 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/RemoveButton/index.ts: -------------------------------------------------------------------------------- 1 | import RemoveButton from './RemoveButton' 2 | export { RemoveButton } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/RewardInspector/RewardsForm.css: -------------------------------------------------------------------------------- 1 | .RewardsForm { 2 | display: flex; 3 | flex-direction: column; 4 | gap: 16px; 5 | } 6 | 7 | .RewardsForm .field-with-link { 8 | display: flex; 9 | flex-direction: column; 10 | gap: 8px; 11 | } 12 | 13 | .RewardsForm .masked-field { 14 | display: flex; 15 | gap: 8px; 16 | align-items: center; 17 | } 18 | 19 | .RewardsForm .masked-field .TextArea { 20 | flex: 1; 21 | } 22 | 23 | .RewardsForm .Button.text.link:hover:not(:disabled) { 24 | text-decoration: underline; 25 | } 26 | 27 | .RewardsForm .disabled { 28 | color: #616161; 29 | } 30 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/RewardInspector/index.ts: -------------------------------------------------------------------------------- 1 | import RewardInspector from './RewardInspector' 2 | export { RewardInspector } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SceneInspector/Layout/Grid/index.ts: -------------------------------------------------------------------------------- 1 | import Grid from './Grid' 2 | import { Props } from './types' 3 | export { Grid, Props } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SceneInspector/Layout/Grid/types.ts: -------------------------------------------------------------------------------- 1 | import { Coords } from '@dcl/ecs' 2 | 3 | export type Props = { 4 | coords: Coords[] 5 | isBaseTile?: (coord: Coords) => boolean 6 | isTileDisabled?: (coord: Coords) => boolean 7 | handleTileClick?: (coord: Coords) => void 8 | maxTileSize?: number // in % 9 | minTileSize?: number // in % 10 | visualThreshold?: number // in % 11 | } 12 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SceneInspector/Layout/ModeAdvanced/index.ts: -------------------------------------------------------------------------------- 1 | import { ModeAdvanced } from './ModeAdvanced' 2 | import { Props } from './types' 3 | export { ModeAdvanced, Props } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SceneInspector/Layout/ModeAdvanced/types.ts: -------------------------------------------------------------------------------- 1 | export type Value = { coords: string; base: string } 2 | 3 | export type Props = { 4 | value: Value 5 | disabled: boolean 6 | onSubmit: (value: Value) => void 7 | onGoBack: () => void 8 | } 9 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SceneInspector/Layout/index.ts: -------------------------------------------------------------------------------- 1 | import Layout from './Layout' 2 | import { Props } from './types' 3 | export { Layout, Props } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SceneInspector/Layout/types.ts: -------------------------------------------------------------------------------- 1 | import { Layout } from '../../../../lib/utils/layout' 2 | 3 | export type Props = { 4 | value: Layout 5 | onChange: (value: Layout) => void 6 | } 7 | 8 | export enum Mode { 9 | GRID, 10 | ADVANCED 11 | } 12 | 13 | export enum GridError { 14 | NOT_CONNECTED = 1, // start from 1 so we can use GridError as boolean type 15 | NUMBER_OF_PARCELS, 16 | MISSING_BASE_PARCEL 17 | } 18 | 19 | export const MAX_AXIS_PARCELS = 32 20 | export const TILE_OPTIONS = Array.from({ length: MAX_AXIS_PARCELS }, (_, i) => ({ 21 | value: i + 1 22 | })) 23 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SceneInspector/icons/details.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SceneInspector/icons/layout.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SceneInspector/index.ts: -------------------------------------------------------------------------------- 1 | import SceneInspector from './SceneInspector' 2 | export { SceneInspector } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SmartItemBasicView/ActionView/index.ts: -------------------------------------------------------------------------------- 1 | import ActionView from './ActionView' 2 | export { ActionView } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SmartItemBasicView/AdminToolsBasicView/AdminToolsBasicView.css: -------------------------------------------------------------------------------- 1 | .AdminToolsBasicViewInspector { 2 | display: flex; 3 | flex-direction: column; 4 | gap: 16px; 5 | } 6 | 7 | .PanelSection { 8 | margin-bottom: 8px; 9 | } 10 | 11 | .PanelSection:last-child { 12 | margin-bottom: 0; 13 | } 14 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SmartItemBasicView/AdminToolsBasicView/index.ts: -------------------------------------------------------------------------------- 1 | import AdminToolsBasicView from './AdminToolsBasicView' 2 | 3 | export { AdminToolsBasicView } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SmartItemBasicView/CounterBarView/index.ts: -------------------------------------------------------------------------------- 1 | import CounterBarView from './CounterBarView' 2 | export { CounterBarView } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SmartItemBasicView/DefaultBasicViewField/DefaultBasicViewField.css: -------------------------------------------------------------------------------- 1 | .DefaultBasicViewField { 2 | display: flex; 3 | flex-direction: column; 4 | gap: 8px; 5 | } 6 | 7 | .DefaultBasicViewField .Block .Field .Label { 8 | text-transform: capitalize; 9 | } 10 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SmartItemBasicView/DefaultBasicViewField/index.ts: -------------------------------------------------------------------------------- 1 | import DefaultBasicViewField from './DefaultBasicViewField' 2 | export { DefaultBasicViewField } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SmartItemBasicView/NftView/index.ts: -------------------------------------------------------------------------------- 1 | import NftView from './NftView' 2 | export { NftView } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SmartItemBasicView/PointerEventView/index.ts: -------------------------------------------------------------------------------- 1 | import PointerEventView from './PointerEventView' 2 | export { PointerEventView } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SmartItemBasicView/RewardsBasicView/RewardsBasicView.css: -------------------------------------------------------------------------------- 1 | .RewardsBasicViewInspector { 2 | margin-bottom: 16px; 3 | } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SmartItemBasicView/RewardsBasicView/index.ts: -------------------------------------------------------------------------------- 1 | import RewardsBasicView from './RewardsBasicView' 2 | 3 | export { RewardsBasicView } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SmartItemBasicView/TriggerView/index.ts: -------------------------------------------------------------------------------- 1 | import TriggerView from './TriggerView' 2 | export { TriggerView } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SmartItemBasicView/TweenView/index.ts: -------------------------------------------------------------------------------- 1 | import TweenView from './TweenView' 2 | export { TweenView } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SmartItemBasicView/VideoScreenBasicView/index.ts: -------------------------------------------------------------------------------- 1 | import VideoScreenBasicView from './VideoScreenBasicView' 2 | 3 | export { VideoScreenBasicView } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SmartItemBasicView/VideoView/index.ts: -------------------------------------------------------------------------------- 1 | import VideoView from './VideoView' 2 | export { VideoView } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SmartItemBasicView/index.ts: -------------------------------------------------------------------------------- 1 | import SmartItemBasicView from './SmartItemBasicView' 2 | 3 | export { SmartItemBasicView } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SmartItemBasicView/types.ts: -------------------------------------------------------------------------------- 1 | import { Entity } from '@dcl/ecs' 2 | 3 | export type Props = { 4 | entity: Entity 5 | } 6 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/StatesInspector/StatesInspector.css: -------------------------------------------------------------------------------- 1 | .StatesInspector.Container { 2 | height: auto; 3 | } 4 | 5 | .StatesInspector .states-list .content { 6 | flex-direction: column; 7 | align-items: normal; 8 | } 9 | 10 | .StatesInspector .states-list .content .Text.Field { 11 | width: 100%; 12 | } 13 | 14 | .StatesInspector .states-list .content .row { 15 | display: flex; 16 | align-items: center; 17 | } 18 | 19 | .StatesInspector .states-list .content .row + .row { 20 | margin-top: 4px; 21 | } 22 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/StatesInspector/index.ts: -------------------------------------------------------------------------------- 1 | import StatesInspector from './StatesInspector' 2 | export { StatesInspector } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/StatesInspector/types.ts: -------------------------------------------------------------------------------- 1 | import { Entity } from '@dcl/ecs' 2 | 3 | export interface Props { 4 | entity: Entity 5 | } 6 | 7 | export type StatesInput = { 8 | value: string[] 9 | defaultValue?: string 10 | } 11 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SyncComponentsInspector/SyncComponentsInspector.css: -------------------------------------------------------------------------------- 1 | .SyncComponents .Block .content { 2 | flex-direction: column; 3 | align-items: flex-start; 4 | row-gap: 8px; 5 | } 6 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SyncComponentsInspector/index.ts: -------------------------------------------------------------------------------- 1 | import SyncComponentsInspector from './SyncComponentsInspector' 2 | export { SyncComponentsInspector } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/SyncComponentsInspector/types.ts: -------------------------------------------------------------------------------- 1 | import { Entity } from '@dcl/ecs' 2 | 3 | export interface Props { 4 | entity: Entity 5 | } 6 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/Tab/Tab.css: -------------------------------------------------------------------------------- 1 | .Tab { 2 | flex: 1 1 auto; 3 | display: flex; 4 | align-items: center; 5 | justify-content: center; 6 | border-bottom: 1px solid transparent; 7 | cursor: default; 8 | text-transform: uppercase; 9 | padding-bottom: 8px; 10 | } 11 | 12 | .Tab.active { 13 | border-bottom: 1px solid white; 14 | } 15 | 16 | .Tab:not(.active):hover { 17 | cursor: pointer; 18 | } 19 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/Tab/Tab.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import cx from 'classnames' 3 | 4 | import { Props } from './types' 5 | 6 | import './Tab.css' 7 | 8 | const Tab: React.FC> = (props) => { 9 | const classNames = cx('Tab', props.className, { active: props.active }) 10 | return ( 11 |
12 | {props.children} 13 |
14 | ) 15 | } 16 | 17 | export default React.memo(Tab) 18 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/Tab/index.ts: -------------------------------------------------------------------------------- 1 | import Tab from './Tab' 2 | export { Tab } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/Tab/types.ts: -------------------------------------------------------------------------------- 1 | export type Props = { 2 | active?: boolean 3 | className?: string 4 | onClick?: () => void 5 | } 6 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/Tabs/Tabs.css: -------------------------------------------------------------------------------- 1 | .Tabs { 2 | flex: 1 1 auto; 3 | display: flex; 4 | flex-direction: row; 5 | align-items: center; 6 | justify-content: space-between; 7 | } 8 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/Tabs/Tabs.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import cx from 'classnames' 3 | 4 | import { Props } from './types' 5 | 6 | import './Tabs.css' 7 | 8 | const Tabs: React.FC> = (props) => { 9 | const classNames = cx('Tabs', props.className) 10 | return
{props.children}
11 | } 12 | 13 | export default React.memo(Tabs) 14 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/Tabs/index.ts: -------------------------------------------------------------------------------- 1 | import Tabs from './Tabs' 2 | export { Tabs } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/Tabs/types.ts: -------------------------------------------------------------------------------- 1 | export type Props = { 2 | className?: string 3 | } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/TextShapeInspector/index.ts: -------------------------------------------------------------------------------- 1 | import TextShapeInspector from './TextShapeInspector' 2 | export { TextShapeInspector } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/TextShapeInspector/types.ts: -------------------------------------------------------------------------------- 1 | import { Entity } from '@dcl/ecs' 2 | 3 | export interface Props { 4 | entity: Entity 5 | } 6 | 7 | export type TextShapeInput = { 8 | text: string 9 | fontSize: string 10 | fontAutoSize: boolean 11 | textAlign: string 12 | paddingTop: string 13 | paddingRight: string 14 | paddingBottom: string 15 | paddingLeft: string 16 | outlineWidth: string 17 | lineSpacing: string 18 | lineCount: string 19 | outlineColor: string 20 | textColor: string 21 | } 22 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/TransformInspector/Link/Link.css: -------------------------------------------------------------------------------- 1 | .Link { 2 | cursor: pointer; 3 | } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/TransformInspector/Link/index.ts: -------------------------------------------------------------------------------- 1 | import { Link } from './Link' 2 | import { Props } from './types' 3 | export { Link, Props } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/TransformInspector/Link/types.ts: -------------------------------------------------------------------------------- 1 | import { useComponentInput } from '../../../../hooks/sdk/useComponentInput' 2 | import { TransformConfig } from '../../../../lib/sdk/components/TransformConfig' 3 | 4 | export type Props = { 5 | field: keyof TransformConfig 6 | getInputProps: ReturnType['getInputProps'] 7 | } 8 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/TransformInspector/TransformInspector.css: -------------------------------------------------------------------------------- 1 | .Container.Transform svg { 2 | margin-right: 5px; 3 | } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/TransformInspector/index.ts: -------------------------------------------------------------------------------- 1 | import TransformInspector from './TransformInspector' 2 | export { TransformInspector } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/TransformInspector/types.ts: -------------------------------------------------------------------------------- 1 | import { Entity } from '@dcl/ecs' 2 | 3 | export interface Props { 4 | entities: Entity[] 5 | } 6 | 7 | export type TransformInput = { 8 | position: { 9 | x: string 10 | y: string 11 | z: string 12 | } 13 | scale: { 14 | x: string 15 | y: string 16 | z: string 17 | } 18 | rotation: { 19 | x: string 20 | y: string 21 | z: string 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/TriggerInspector/TriggerAction/index.ts: -------------------------------------------------------------------------------- 1 | import TriggerActionContainer from './TriggerAction' 2 | export { TriggerActionContainer } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/TriggerInspector/TriggerAction/types.ts: -------------------------------------------------------------------------------- 1 | import type { Action, Trigger, TriggerAction } from '@dcl/asset-packs' 2 | 3 | export type Props = { 4 | trigger: Trigger 5 | availableActions: Map 6 | onUpdateActions: (actions: TriggerAction[]) => void 7 | } 8 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/TriggerInspector/TriggerCondition/index.ts: -------------------------------------------------------------------------------- 1 | import TriggerConditionContainer from './TriggerCondition' 2 | export { TriggerConditionContainer } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/TriggerInspector/TriggerEvent/index.ts: -------------------------------------------------------------------------------- 1 | import { TriggerEvent } from './TriggerEvent' 2 | export { TriggerEvent } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/TriggerInspector/TriggerEvent/types.ts: -------------------------------------------------------------------------------- 1 | import type { Trigger } from '@dcl/asset-packs' 2 | 3 | export type Props = { 4 | trigger: Trigger 5 | availableTriggers: string[] 6 | onChangeTriggerType: React.ChangeEventHandler 7 | onAddNewTriggerAction: React.MouseEventHandler 8 | onAddNewTriggerCondition: React.MouseEventHandler 9 | onRemoveTriggerEvent: React.MouseEventHandler 10 | children: JSX.Element | JSX.Element[] 11 | } 12 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/TriggerInspector/TriggerInspector.css: -------------------------------------------------------------------------------- 1 | .TriggerInspector > .content { 2 | display: flex; 3 | flex-direction: column; 4 | } 5 | 6 | .TriggerInspector > .content > .Block > .content { 7 | display: flex; 8 | flex-direction: column; 9 | align-items: normal; 10 | } 11 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/TriggerInspector/index.ts: -------------------------------------------------------------------------------- 1 | import TriggerInspector from './TriggerInspector' 2 | export { TriggerInspector } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/TriggerInspector/types.ts: -------------------------------------------------------------------------------- 1 | import { Entity } from '@dcl/ecs' 2 | 3 | export interface Props { 4 | entity: Entity 5 | } 6 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/TweenInspector/index.ts: -------------------------------------------------------------------------------- 1 | import TweenInspector from './TweenInspector' 2 | export { TweenInspector } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/TweenInspector/types.ts: -------------------------------------------------------------------------------- 1 | import { Entity } from '@dcl/ecs' 2 | import { TweenType } from '@dcl/asset-packs' 3 | 4 | export interface Props { 5 | entity: Entity 6 | } 7 | 8 | export type TweenInput = { 9 | type: TweenType 10 | start: { 11 | x: string 12 | y: string 13 | z: string 14 | } 15 | end: { 16 | x: string 17 | y: string 18 | z: string 19 | } 20 | easingFunction: string 21 | duration: string 22 | playing?: boolean 23 | relative?: boolean 24 | } 25 | 26 | export type TweenSequenceInput = { 27 | loop?: boolean 28 | } 29 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/VideoPlayerInspector/index.ts: -------------------------------------------------------------------------------- 1 | import VideoPlayerInspector from './VideoPlayerInspector' 2 | export { VideoPlayerInspector } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/VideoPlayerInspector/types.ts: -------------------------------------------------------------------------------- 1 | import { Entity } from '@dcl/ecs' 2 | 3 | export interface Props { 4 | entity: Entity 5 | } 6 | 7 | export type VideoPlayerInput = { 8 | src: string 9 | playing?: boolean 10 | loop?: boolean 11 | volume?: string 12 | playbackRate?: string 13 | } 14 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/VisibilityComponentInspector/index.ts: -------------------------------------------------------------------------------- 1 | import VisibilityComponentInspector from './VisibilityComponentInspector' 2 | export { VisibilityComponentInspector } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/VisibilityComponentInspector/types.ts: -------------------------------------------------------------------------------- 1 | import { Entity } from '@dcl/ecs' 2 | 3 | export interface Props { 4 | entity: Entity 5 | } 6 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/index.ts: -------------------------------------------------------------------------------- 1 | import { EntityInspector } from './EntityInspector' 2 | export { EntityInspector } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/EntityInspector/utils.ts: -------------------------------------------------------------------------------- 1 | export const toNumber = (value: string, def: number = 0) => { 2 | const num = Number(value) 3 | return isNaN(num) ? def : num 4 | } 5 | 6 | export const toString = (value: unknown, def: number | string = 0) => (value ?? def).toString() 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/FileInput/index.ts: -------------------------------------------------------------------------------- 1 | import FileInput from './FileInput' 2 | 3 | export default FileInput 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/FileInput/types.ts: -------------------------------------------------------------------------------- 1 | export interface PropTypes { 2 | onDrop(files: File[]): void 3 | onHover?(isHover: boolean): void 4 | accept?: Record 5 | disabled?: boolean 6 | multiple?: boolean 7 | } 8 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Hierarchy/ContextMenu/index.ts: -------------------------------------------------------------------------------- 1 | import ContextMenu from './ContextMenu' 2 | export { ContextMenu } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Hierarchy/icons/camera.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Hierarchy/icons/entity.svg: -------------------------------------------------------------------------------- 1 | 4 | 6 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Hierarchy/index.ts: -------------------------------------------------------------------------------- 1 | import Hierarchy from './Hierarchy' 2 | export { Hierarchy } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Icons/CustomAsset/index.ts: -------------------------------------------------------------------------------- 1 | import CustomAssetIcon from './CustomAsset' 2 | 3 | export default CustomAssetIcon 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Icons/Folder/index.ts: -------------------------------------------------------------------------------- 1 | import Folder from './Folder' 2 | import FolderOpen from './FolderOpen' 3 | 4 | export default Folder 5 | 6 | export { Folder, FolderOpen } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Icons/Search/index.ts: -------------------------------------------------------------------------------- 1 | import SearchIcon from './Search' 2 | 3 | export default SearchIcon 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/ImportAsset/Error/index.ts: -------------------------------------------------------------------------------- 1 | export { Error } from './Error' 2 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/ImportAsset/Error/types.ts: -------------------------------------------------------------------------------- 1 | import { Asset } from '../types' 2 | 3 | export type PropTypes = { 4 | assets: Asset[] 5 | onSubmit: () => void 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/ImportAsset/Slider/index.ts: -------------------------------------------------------------------------------- 1 | export { Slider } from './Slider' 2 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/ImportAsset/Slider/types.ts: -------------------------------------------------------------------------------- 1 | import { Asset } from '../types' 2 | 3 | export type PropTypes = { 4 | assets: Asset[] 5 | onSubmit(assets: Asset[]): void 6 | isNameValid(asset: Asset, newName: string): boolean 7 | } 8 | 9 | export type Thumbnails = Record 10 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/ImportAsset/index.ts: -------------------------------------------------------------------------------- 1 | import ImportAsset from './ImportAsset' 2 | 3 | export default ImportAsset 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Input/Input.css: -------------------------------------------------------------------------------- 1 | .Input { 2 | border: none; 3 | background-color: var(--background-gray); 4 | outline: var(--input-border-color); 5 | color: var(--white-gray); 6 | font-size: 13px; 7 | padding: 4px; 8 | width: 100%; 9 | font-weight: 500; 10 | } 11 | 12 | .Input::placeholder { 13 | color: var(--white) 14 | } 15 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Input/index.ts: -------------------------------------------------------------------------------- 1 | import Input from './Input' 2 | export { Input } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Input/types.ts: -------------------------------------------------------------------------------- 1 | export interface PropTypes { 2 | value: string 3 | placeholder?: string 4 | disabled?: boolean 5 | onChange?: (value: string) => void 6 | onCancel?: () => void 7 | onSubmit?: (newValue: string) => void 8 | onBlur?: (event: FocusEvent) => void 9 | } 10 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Loading/Loading.tsx: -------------------------------------------------------------------------------- 1 | import { Loader } from 'decentraland-ui/dist/components/Loader/Loader' 2 | import { Dimmer } from 'decentraland-ui/dist/components/Dimmer/Dimmer' 3 | 4 | import { Props } from './types' 5 | 6 | export function Loading({ dimmer = true }: Props) { 7 | return ( 8 |
9 | 10 | 11 |
12 | ) 13 | } 14 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Loading/index.ts: -------------------------------------------------------------------------------- 1 | import { Loading } from './Loading' 2 | export { Loading } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Loading/types.ts: -------------------------------------------------------------------------------- 1 | export interface Props { 2 | dimmer?: boolean 3 | } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Modal/Modal.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import _Modal from 'react-modal' 3 | 4 | import { Props } from './types' 5 | 6 | import './Modal.css' 7 | 8 | const Modal = ({ children, className = '', overlayClassName = '', ...props }: Props) => { 9 | return ( 10 | <_Modal 11 | ariaHideApp={false} 12 | className={`${className} Modal`} 13 | overlayClassName={`${overlayClassName} ModalOverlay`} 14 | {...props} 15 | > 16 | {children} 17 | 18 | ) 19 | } 20 | 21 | export default React.memo(Modal) 22 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Modal/index.ts: -------------------------------------------------------------------------------- 1 | import Modal from './Modal' 2 | export { Modal } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Modal/types.ts: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Modal from 'react-modal' 3 | 4 | export type Props = React.PropsWithChildren 5 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/ProjectAssetExplorer/Filters/index.ts: -------------------------------------------------------------------------------- 1 | export { Filters } from './Filters' 2 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/ProjectAssetExplorer/Filters/types.ts: -------------------------------------------------------------------------------- 1 | export enum Filter { 2 | All = 'all', 3 | Recents = 'recents', 4 | Models = 'models', 5 | Images = 'images', 6 | Video = 'video', 7 | Audio = 'audio', 8 | Other = 'other' 9 | } 10 | 11 | export type PropTypes = { 12 | filters: Filter[] 13 | active?: Filter 14 | onClick(type: Filter): void 15 | } 16 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/ProjectAssetExplorer/Tile/index.ts: -------------------------------------------------------------------------------- 1 | import { Tile } from './Tile' 2 | export { Tile } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/ProjectAssetExplorer/Tile/types.ts: -------------------------------------------------------------------------------- 1 | import { TreeNode } from '../ProjectView' 2 | 3 | export interface Props { 4 | valueId: string 5 | value?: TreeNode 6 | getDragContext: () => unknown 7 | onSelect: () => void 8 | onRemove: (value: string) => void 9 | dndType: string 10 | getThumbnail: (value: string) => Uint8Array | undefined 11 | } 12 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/ProjectAssetExplorer/index.ts: -------------------------------------------------------------------------------- 1 | import ProjectAssetExplorer from './ProjectAssetExplorer' 2 | export { ProjectAssetExplorer } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/RenameAsset/index.ts: -------------------------------------------------------------------------------- 1 | import RenameAsset from './RenameAsset' 2 | 3 | export { RenameAsset } 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Renderer/CameraSpeed/CameraSpeed.css: -------------------------------------------------------------------------------- 1 | .CameraSpeed { 2 | position: absolute; 3 | top: 10px; 4 | left: 10px; 5 | z-index: 1; 6 | } 7 | 8 | .CameraSpeed.invisible { 9 | opacity: 0; 10 | transition: opacity 0.5s ease; 11 | } 12 | 13 | .CameraSpeed.visible { 14 | opacity: 1; 15 | } 16 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Renderer/CameraSpeed/index.ts: -------------------------------------------------------------------------------- 1 | import CameraSpeed from './CameraSpeed' 2 | export { CameraSpeed } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Renderer/Metrics/index.ts: -------------------------------------------------------------------------------- 1 | import Metrics from './Metrics' 2 | export { Metrics } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Renderer/Metrics/types.ts: -------------------------------------------------------------------------------- 1 | export interface Metrics { 2 | triangles: number 3 | entities: number 4 | bodies: number 5 | materials: number 6 | textures: number 7 | } 8 | 9 | export enum Limits { 10 | triangles = 10000, 11 | entities = 200, 12 | bodies = 300, 13 | materials = 20, 14 | textures = 10 15 | } 16 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Renderer/Metrics/utils.ts: -------------------------------------------------------------------------------- 1 | import { Limits, type Metrics } from './types' 2 | 3 | export function getSceneLimits(parcels: number): Metrics { 4 | return { 5 | triangles: parcels * Limits.triangles, 6 | entities: parcels * Limits.entities, 7 | bodies: parcels * Limits.bodies, 8 | materials: Math.floor(Math.log2(parcels + 1) * Limits.materials), 9 | textures: Math.floor(Math.log2(parcels + 1) * Limits.textures) 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Renderer/Shortcuts/index.ts: -------------------------------------------------------------------------------- 1 | import Shortcuts from './Shortcuts' 2 | export { Shortcuts } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Renderer/Shortcuts/types.ts: -------------------------------------------------------------------------------- 1 | export interface Props { 2 | canvas: React.RefObject 3 | onResetCamera: () => void 4 | onZoomIn: () => void 5 | onZoomOut: () => void 6 | } 7 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Renderer/index.ts: -------------------------------------------------------------------------------- 1 | import Renderer from './Renderer' 2 | export { Renderer } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/SdkProvider/index.ts: -------------------------------------------------------------------------------- 1 | import { SdkContext, SdkProvider } from './SdkProvider' 2 | export { SdkContext, SdkProvider } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Search/Search.css: -------------------------------------------------------------------------------- 1 | .Search { 2 | display: flex; 3 | align-items: center; 4 | padding: 5px; 5 | position: relative; 6 | } 7 | 8 | .Search .Search-icon { 9 | position: absolute; 10 | left: 10px; 11 | width: 14px; 12 | height: 14px; 13 | text-align: center; 14 | height: 100%; 15 | color: red; 16 | } 17 | 18 | .Search input { 19 | padding-left: 26px; 20 | font-style: normal; 21 | font-weight: 500; 22 | font-size: 12px; 23 | line-height: 16px; 24 | } 25 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Search/Search.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | import { Input } from '../Input' 4 | import { PropTypes } from './types' 5 | 6 | import './Search.css' 7 | import SearchIcon from '../Icons/Search' 8 | 9 | function Search(props: PropTypes) { 10 | return ( 11 |
e.stopPropagation()}> 12 | 13 | 14 |
15 | ) 16 | } 17 | 18 | export default Search 19 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Search/index.ts: -------------------------------------------------------------------------------- 1 | import Search from './Search' 2 | export default Search 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Search/types.ts: -------------------------------------------------------------------------------- 1 | import { PropTypes as InputTypes } from '../Input/types' 2 | 3 | export type PropTypes = InputTypes 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Toolbar/Gizmos/Snap/Snap.css: -------------------------------------------------------------------------------- 1 | .Snap { 2 | display: flex; 3 | } 4 | 5 | .Snap>.label { 6 | flex: none; 7 | margin-right: 8px; 8 | color: var(--secondary-text); 9 | } 10 | 11 | .Snap>input { 12 | flex: 1 1 auto; 13 | min-width: 0; 14 | text-align: right; 15 | background: none; 16 | color: var(--text); 17 | border: none; 18 | outline: none; 19 | } 20 | 21 | .Snap>input:disabled { 22 | user-select: none; 23 | color: var(--secondary-text); 24 | } -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Toolbar/Gizmos/Snap/index.ts: -------------------------------------------------------------------------------- 1 | import Snap from './Snap' 2 | export { Snap } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Toolbar/Gizmos/icons/free.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Toolbar/Gizmos/icons/scale.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Toolbar/Gizmos/index.ts: -------------------------------------------------------------------------------- 1 | import Gizmos from './Gizmos' 2 | export { Gizmos } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Toolbar/Preferences/index.ts: -------------------------------------------------------------------------------- 1 | import Preferences from './Preferences' 2 | export { Preferences } 3 | -------------------------------------------------------------------------------- /packages/@dcl/inspector/src/components/Toolbar/ToolbarButton/ToolbarButton.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import cx from 'classnames' 3 | 4 | import './ToolbarButton.css' 5 | 6 | const ToolbarButton: React.FC> = (props) => { 7 | const { className, ...rest } = props 8 | return