\r\n\r\nWe should accept an array too\r\n\u003CTresMesh v-layer:enable=\"[1, 2, 3]\" />\r\n\r\nAnd of course other methods like: disable, test (maybe with a console.log), toggle\r\n\r\nFor more info, check:\r\nhttps://threejs.org/docs/index.html?q=layers#api/en/core/Layers\r\n\n\n### Alternative\n\nAny other alternative is considered\n\n### Additional context\n\nAs we discuss, you can achieve this by using template ref, but sometimes is just too much code, this Issue will could improve the UX\r\n\r\nFollowing the directives pattern (to make our user easier)\n\n### Validations\n\n- [X] I agree to follow this project's [Code of Conduct](https://github.com/Tresjs/tres/blob/main/CODE_OF_CONDUCT.md)\n- [X] Read the [Contributing Guidelines](https://github.com/Tresjs/tres/blob/main/CONTRIBUTING.md).\n- [X] Read the [docs](https://tresjs.org/guide).\n- [X] Check that there isn't [already an issue](https://github.com/tresjs/tres/issues) that reports the same bug to avoid creating a duplicate.",[2887,2888],{"name":2871,"color":2872},{"name":2877,"color":2878},543,"tres","v-layer directive","2024-03-30T15:32:13Z","https://github.com/Tresjs/tres/issues/543",0.7222266,{"description":2896,"labels":2897,"number":2902,"owner":2860,"repository":2861,"state":2862,"title":2903,"updated_at":2904,"url":2905,"score":2906},"### Description\r\n\r\nAs a dev using TresJS, I would like to have an abstraction for [Drag Controls](https://threejs.org/docs/#examples/en/controls/DragControls)\r\n\r\n\r\n\r\n### Suggested solution\r\n\r\nSimilar to https://github.com/pmndrs/drei?tab=readme-ov-file#dragcontrols\r\nhttps://threejs.org/examples/?q=drag#misc_controls_drag\r\n\r\n\r\n### Alternative\r\n\r\n_No response_\r\n\r\n### Additional context\r\n\r\n_No response_\r\n\r\n### Validations\r\n\r\n- [X] I agree to follow this project's [Code of Conduct](https://github.com/Tresjs/cientos/blob/main/CODE_OF_CONDUCT.md)\r\n- [X] Read the [Contributing Guidelines](https://github.com/Tresjs/cientos/blob/main/CONTRIBUTING.md).\r\n- [X] Read the [docs](https://cientos.tresjs.org/guide).\r\n- [X] Check that there isn't [already an issue](https://github.com/tresjs/cientos/issues) that reports the same bug to avoid creating a duplicate.",[2898,2899],{"name":2871,"color":2872},{"name":2900,"color":2901},"p3-significant","2C78E3",455,"Drag Controls","2024-11-27T10:47:00Z","https://github.com/Tresjs/cientos/issues/455",0.7282634,{"description":2908,"labels":2909,"number":2919,"owner":2860,"repository":2890,"state":2862,"title":2920,"updated_at":2921,"url":2922,"score":2923},"### Description\r\n\r\nAs a developer using TresJS I would like to have documentation available in my native language\r\n\r\nThis ticket is meant to keep track of the progress of multiple PRs to translate Tres docs:\r\n\r\n- [x] Enable i18n and add Spanish docs done #123 #534 \r\n- [x] Chinese translations @enpitsuLin #550 \r\n- [x] German @DennisSmuda #548\r\n- [ ] Polish @Dekier #546 \r\n- [x] French @AminGtt #555 \r\n\r\nFeel free to comment below if you would like to add your language and help us translate the docs.,\r\n\r\n### Suggested solution\r\n\r\nCreate a branch `docs/translation-\u003Clanguage-unicode>` and a PR similar to #534 with the following steps:\r\n\r\n1. Add a `\u003Clanguage-unicode>.ts` inside `docs/.vitepress/config` ex: `zh.ts` (copy the `en.ts` which is the original and then translate only what's needed.\r\n2. Remember to add the code prefix route to all the links on this file, ex `link: /guide/` -> `link: /zh/guide`\r\n3. Add to config to `docs/.vitepress/config/index.ts` like this:\r\n\r\n```ts\r\nexport default defineConfig({\r\n ...sharedConfig,\r\n locales: {\r\n root: { label: 'English', lang: 'en-US', link: '/', ...enConfig },\r\n es: { label: 'Español', lang: 'es-ES', link: '/es/', ...esConfig },\r\n /* zh: { label: '简体中文', lang: 'zh-CN', link: '/zh/', ...zhConfig }, */\r\n },\r\n})\r\n```\r\n\r\n4. Create a folder with the language code (ex: zh) inside `docs/`, this is where the translations will live, then start translating the files using the same structure as on the docs root, like this:\r\n\r\n`docs/advanced/extending.md` --> `docs/zh/advanced/extending.md`\r\n\r\n\r\n\r\n### Alternative\r\n\r\n_No response_\r\n\r\n### Additional context\r\n\r\n_No response_\r\n\r\n### Validations\r\n\r\n- [X] I agree to follow this project's [Code of Conduct](https://github.com/Tresjs/tres/blob/main/CODE_OF_CONDUCT.md)\r\n- [x] Read the [Contributing Guidelines](https://github.com/Tresjs/tres/blob/main/CONTRIBUTING.md).\r\n- [X] Read the [docs](https://tresjs.org/guide).\r\n- [X] Check that there isn't [already an issue](https://github.com/tresjs/tres/issues) that reports the same bug to avoid creating a duplicate.",[2910,2911,2914,2915,2918],{"name":2857,"color":2858},{"name":2912,"color":2913},"help wanted","008672",{"name":2871,"color":2872},{"name":2916,"color":2917},"dx","1576AD",{"name":2900,"color":2901},540,"Translate docs to multiple languages","2024-07-23T17:42:40Z","https://github.com/Tresjs/tres/issues/540",0.74253505,{"description":2925,"labels":2926,"number":2933,"owner":2860,"repository":2861,"state":2862,"title":2934,"updated_at":2935,"url":2936,"score":2937},"### Describe the bug\r\n\r\nSome controls have long-standing bugs where changing props causes duplicate events to be added. \r\n\r\nE.g., flipping makeDefault in CameraControls causes duplicate events to be added. This will add 100 duplicate events:\r\n\r\n```\r\nconst makeDefault = shallowRef(true)\r\n// Flip `makeDefault` 100 times, add 100 events! Lol\r\nArray.from({length: 100}).fill(0).forEach(\r\n (_, i) => setTimeout(\r\n () => {\r\n makeDefault.value = !makeDefault.value\r\n }, i * 1000 / 25)\r\n)\r\n\u003C/script>\r\n\r\n\u003Ctemplate>\r\n \u003CTresLeches />\r\n \u003CTresCanvas v-bind=\"gl\">\r\n \u003CTresPerspectiveCamera :position=\"[5, 5, 5]\" />\r\n \u003CCameraControls\r\n v-bind=\"controlsState\"\r\n ref=\"controlsRef\"\r\n :make-default=\"makeDefault\"\r\n @change=\"onChange\"\r\n @start=\"onStart\"\r\n @end=\"onEnd\"\r\n />\r\n \r\n```\r\n \r\n \r\nThat means every time these emits would be expected to fire once, they're fired 100 times:\r\n\r\n```\r\nfunction addEventListeners() {\r\n useEventListener(controlsRef.value as any, 'update', () => {\r\n emit('change', controlsRef.value)\r\n invalidateOnDemand()\r\n })\r\n useEventListener(controlsRef.value as any, 'controlend', () => emit('end', controlsRef.value))\r\n useEventListener(controlsRef.value as any, 'controlstart', () => emit('start', controlsRef.value))\r\n}\r\n```\r\n\r\nThe problem is the anonymous functions:\r\n\r\nNote: If a particular anonymous function is in the list of event listeners registered for a certain target, and then later in the code, an identical anonymous function is given in an addEventListener call, the second function will also be added to the list of event listeners for that target.\r\n\r\nIndeed, anonymous functions are not identical even if defined using the same unchanging source-code called repeatedly, even if in a loop.\r\n\r\nRepeatedly defining the same unnamed function in such cases can be problematic. (See Memory issues, below.)\r\n\r\nhttps://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\r\nMDN Web Docs\r\n[EventTarget: addEventListener() method - Web APIs | MDN](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener)\r\nThe addEventListener() method of the EventTarget interface\r\nsets up a function that will be called whenever the specified event is delivered to the target.\r\n\r\n### Reproduction\r\n\r\nN/A\r\n\r\n### Steps to reproduce\r\n\r\n_No response_\r\n\r\n### System Info\r\n\r\n_No response_\r\n\r\n### Used Package Manager\r\n\r\nnpm\r\n\r\n### Code of Conduct\r\n\r\n- [X] I agree to follow this project's [Code of Conduct](https://github.com/Tresjs/cientos/blob/main/CODE_OF_CONDUCT.md)\r\n- [X] Read the [Contributing Guidelines](https://github.com/Tresjs/cientos/blob/main/CONTRIBUTING.md).\r\n- [X] Read the [docs](https://cientos.tresjs.org/guide).\r\n- [X] Check that there isn't [already an issue](https://github.com/Tresjs/cientos/issues) that reports the same bug to avoid creating a duplicate.\r\n- [X] The provided reproduction is a [minimal reproducible example](https://stackoverflow.com/help/minimal-reproducible-example) of the bug.",[2927,2930],{"name":2928,"color":2929},"bug","d73a4a",{"name":2931,"color":2932},"p3-minor-bug","F28C37",457,"useEventListener bug in controls","2024-07-24T06:42:25Z","https://github.com/Tresjs/cientos/issues/457",0.7456342,{"description":2939,"labels":2940,"number":2943,"owner":2860,"repository":2861,"state":2862,"title":2944,"updated_at":2945,"url":2946,"score":2947},"\r\n\r\n\r\n\r\n### Description\r\n\r\nImplement a MeshRefractionMaterial \r\n\r\n\r\n### Suggested solution\r\n\r\nSome links for context:\r\nhttps://medium.com/geekculture/simulating-refraction-in-three-js-9e367753bf6d\r\nhttps://github.com/pmndrs/drei/blob/master/src/core/MeshRefractionMaterial.tsx\r\nhttps://github.com/pmndrs/drei/blob/master/src/materials/MeshRefractionMaterial.tsx\r\n\r\n### Alternative\r\n\r\n_No response_\r\n\r\n### Additional context\r\n\r\n_No response_\r\n\r\n### Validations\r\n\r\n- [X] I agree to follow this project's [Code of Conduct](https://github.com/Tresjs/cientos/blob/main/CODE_OF_CONDUCT.md)\r\n- [X] Read the [Contributing Guidelines](https://github.com/Tresjs/cientos/blob/main/CONTRIBUTING.md).\r\n- [X] Read the [docs](https://cientos.tresjs.org/guide).\r\n- [X] Check that there isn't [already an issue](https://github.com/tresjs/cientos/issues) that reports the same bug to avoid creating a duplicate.",[2941,2942],{"name":2871,"color":2872},{"name":2900,"color":2901},454,"MeshRefractionMaterial","2024-07-23T11:40:40Z","https://github.com/Tresjs/cientos/issues/454",0.7466901,{"description":2949,"labels":2950,"number":2958,"owner":2860,"repository":2890,"state":2959,"title":2960,"updated_at":2961,"url":2962,"score":2963},"**Is your feature request related to a problem? Please describe.**\r\n`useRenderLoop` only provides the register methods like `onBeforeLoop`、`onLoop`、`onAfterLoop`. But, there are no `off-*` methods to remove callback. so, do we need to add some `off-*`methods?\r\n\r\n**Describe the solution you'd like**\r\nadd some methods: `offBeforeLoop`、`offLoop`、`offAfterLoop`\r\n\r\n**Additional context**\r\nYeah, there is a way to remove callback like\r\n```JavaScript\r\nconst offMethod = onBeforeLoop(callback)\r\n// off\r\noffMethod.off() \r\n```\r\n\r\nBut I think a specific API like `offBeforeLoop` is a better choice. 😜",[2951,2952,2955],{"name":2912,"color":2913},{"name":2953,"color":2954},"wontfix","ffffff",{"name":2956,"color":2957},"waiting for author","B145BC",202,"closed","need to add some `off-*`methods?","2024-01-19T14:56:38Z","https://github.com/Tresjs/tres/issues/202",0.71202016,{"description":2965,"labels":2966,"number":2970,"owner":2860,"repository":2890,"state":2959,"title":2971,"updated_at":2972,"url":2973,"score":2974},"### Description\n\nCurrently, \u003Cprimitive> does not support pointer event handlers.\n\n### Suggested solution\n\nPointer event handlers should work on \u003Cprimitive> just like the do on component that inherit from Object3Ds.\n\n### Alternative\n\n_No response_\n\n### Additional context\n\n_No response_\n\n### Validations\n\n- [X] I agree to follow this project's [Code of Conduct](https://github.com/Tresjs/tres/blob/main/CODE_OF_CONDUCT.md)\n- [X] Read the [Contributing Guidelines](https://github.com/Tresjs/tres/blob/main/CONTRIBUTING.md).\n- [X] Read the [docs](https://tresjs.org/guide).\n- [X] Check that there isn't [already an issue](https://github.com/tresjs/tres/issues) that reports the same bug to avoid creating a duplicate.",[2967],{"name":2968,"color":2969},"v4","7980EA",402,"Allow pointer event handlers on \u003Cprimitive>","2024-01-07T14:57:49Z","https://github.com/Tresjs/tres/issues/402",0.71275806,{"description":2976,"labels":2977,"number":2978,"owner":2860,"repository":2861,"state":2959,"title":2979,"updated_at":2980,"url":2981,"score":2982},"### Description\n\nCurrently, in the cientos docs there are just a few examples of the components, it will be better to provide examples as in MeshWobbleMaterial to as many components as possible\n\n### Suggested solution\n\nBasically add example to all abstractions, controls, shapes, material and misc. Possible\n\n### Alternative\n\n_No response_\n\n### Additional context\n\n_No response_\n\n### Validations\n\n- [X] I agree to follow this project's [Code of Conduct](https://github.com/Tresjs/cientos/blob/main/CODE_OF_CONDUCT.md)\n- [X] Read the [Contributing Guidelines](https://github.com/Tresjs/cientos/blob/main/CONTRIBUTING.md).\n- [X] Read the [docs](https://cientos.tresjs.org/guide).\n- [X] Check that there isn't [already an issue](https://github.com/tresjs/cientos/issues) that reports the same bug to avoid creating a duplicate.",[],177,"Add more examples to the Cientos docs","2023-09-13T13:31:29Z","https://github.com/Tresjs/cientos/issues/177",0.7158382,["Reactive",2984],{},["Set"],["ShallowReactive",2987],{"$fTRc1wZytZ_XrK4EfJfei_Sz-An4H4Yy6syhVxH_PVJc":-1,"$fYUp5RjwGA0pLZKX9jiUIbLZtsWMxRytv-Hu_TsOO5Ew":-1},"/Tresjs/cientos/404"]