@crapthings/run3d 0.2.9 → 0.2.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/package.json +1 -1
- package/template/index.html +1 -1
- package/template/package.json +3 -0
- package/template/pnpm-lock.yaml +48 -0
- package/template/src/main.jsx +16 -0
- package/template/src/styles.css +10 -0
package/README.md
CHANGED
|
@@ -53,6 +53,8 @@ Drag to orbit the scene, scroll to zoom, and right-drag to pan. Edit `src/Scenes
|
|
|
53
53
|
|
|
54
54
|
### Media
|
|
55
55
|
|
|
56
|
+
- [Elementary](https://github.com/elemaudio/elementary) — creates declarative audio DSP graphs with `@elemaudio/core` and runs them in the browser with `@elemaudio/web-renderer`.
|
|
57
|
+
- [Howler.js](https://github.com/goldfire/howler.js#documentation) — plays audio with volume controls, sound sprites, and 3D spatial sound.
|
|
56
58
|
- [Mediabunny](https://mediabunny.dev/) — reads, writes, and converts audio and video files in the browser.
|
|
57
59
|
|
|
58
60
|
### Interface
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "0.2.
|
|
6
|
+
"version": "0.2.11",
|
|
7
7
|
"description": "From idea to interactive 3D prototype in one command. A JavaScript starter with Vite, React Three Fiber, and tools for creative experimentation.",
|
|
8
8
|
"type": "module",
|
|
9
9
|
"bin": {
|
package/template/index.html
CHANGED
package/template/package.json
CHANGED
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
"preview": "vite preview"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
+
"@elemaudio/core": "^4.0.1",
|
|
17
|
+
"@elemaudio/web-renderer": "^4.0.3",
|
|
16
18
|
"@floating-ui/react": "^0.27.20",
|
|
17
19
|
"@gsap/react": "^2.1.2",
|
|
18
20
|
"@headlessui/react": "^2.2.10",
|
|
@@ -24,6 +26,7 @@
|
|
|
24
26
|
"d3": "^7.9.0",
|
|
25
27
|
"fastnoise-lite": "^1.1.1",
|
|
26
28
|
"gsap": "^3.15.0",
|
|
29
|
+
"howler": "^2.2.4",
|
|
27
30
|
"koota": "^0.6.6",
|
|
28
31
|
"math": "0.1.0",
|
|
29
32
|
"mediabunny": "^1.61.6",
|
package/template/pnpm-lock.yaml
CHANGED
|
@@ -166,6 +166,12 @@ importers:
|
|
|
166
166
|
|
|
167
167
|
.:
|
|
168
168
|
dependencies:
|
|
169
|
+
'@elemaudio/core':
|
|
170
|
+
specifier: ^4.0.1
|
|
171
|
+
version: 4.0.1
|
|
172
|
+
'@elemaudio/web-renderer':
|
|
173
|
+
specifier: ^4.0.3
|
|
174
|
+
version: 4.0.3
|
|
169
175
|
'@floating-ui/react':
|
|
170
176
|
specifier: ^0.27.20
|
|
171
177
|
version: 0.27.20(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
|
|
@@ -199,6 +205,9 @@ importers:
|
|
|
199
205
|
gsap:
|
|
200
206
|
specifier: ^3.15.0
|
|
201
207
|
version: 3.15.0
|
|
208
|
+
howler:
|
|
209
|
+
specifier: ^2.2.4
|
|
210
|
+
version: 2.2.4
|
|
202
211
|
koota:
|
|
203
212
|
specifier: ^0.6.6
|
|
204
213
|
version: 0.6.6(@types/react@19.3.0)(react@19.2.8)
|
|
@@ -276,6 +285,12 @@ packages:
|
|
|
276
285
|
'@dimforge/rapier3d-compat@0.19.2':
|
|
277
286
|
resolution: {integrity: sha512-AZHL1jqUF55QJkJyU1yKeh4ImX2J93bVLIezT1+o0FZqTix6O06MOaqpKoJ4MmbDCsoZmwO+qc471/SDMDm2AA==}
|
|
278
287
|
|
|
288
|
+
'@elemaudio/core@4.0.1':
|
|
289
|
+
resolution: {integrity: sha512-O58CaR5ttxzPt1LwkJoXVipPLlZ8lZmOIHhJFiih3rWkfCZ3/H1X2XTG0HM2jAn3BokoP5jYSbnbEiQybyvRGw==}
|
|
290
|
+
|
|
291
|
+
'@elemaudio/web-renderer@4.0.3':
|
|
292
|
+
resolution: {integrity: sha512-mvMt6SsUzcOEx97SGsf0u1/kafMkxWKtEa1FOuzwdzkmcdLAQIwouzZ87PExf452gi4tJqhMF0RDFb62LJqfZg==}
|
|
293
|
+
|
|
279
294
|
'@floating-ui/core@1.8.0':
|
|
280
295
|
resolution: {integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==}
|
|
281
296
|
|
|
@@ -983,6 +998,9 @@ packages:
|
|
|
983
998
|
eventemitter3@4.0.7:
|
|
984
999
|
resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
|
|
985
1000
|
|
|
1001
|
+
eventemitter3@5.0.4:
|
|
1002
|
+
resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==}
|
|
1003
|
+
|
|
986
1004
|
fastnoise-lite@1.1.1:
|
|
987
1005
|
resolution: {integrity: sha512-3XEk16gmVq1HUL0+BdoR+/wD/tfB6VQjpliqQ7rSSE2omh23wrJGidQ5Mfr4mECCUtBGtcEov44BGIyVqs+U4w==}
|
|
988
1006
|
|
|
@@ -1021,6 +1039,9 @@ packages:
|
|
|
1021
1039
|
hls.js@1.7.3:
|
|
1022
1040
|
resolution: {integrity: sha512-MsPlx6yVW4Qv4C7mEVou4/gk/5cN2dVxOTnrNjPSmyH2f0Ln+/UkG10Ax1PE6OvrmTVPKgQYozTtBaPOuCzq7A==}
|
|
1023
1041
|
|
|
1042
|
+
howler@2.2.4:
|
|
1043
|
+
resolution: {integrity: sha512-iARIBPgcQrwtEr+tALF+rapJ8qSc+Set2GJQl7xT1MQzWaVkFebdJhR3alVlSiUf5U7nAANKuj3aWpwerocD5w==}
|
|
1044
|
+
|
|
1024
1045
|
i18next-browser-languagedetector@4.3.1:
|
|
1025
1046
|
resolution: {integrity: sha512-KIToAzf8zwWvacgnRwJp63ase26o24AuNUlfNVJ5YZAFmdGhsJpmFClxXPuk9rv1FMI4lnc8zLSqgZPEZMrW4g==}
|
|
1026
1047
|
|
|
@@ -1041,6 +1062,9 @@ packages:
|
|
|
1041
1062
|
resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==}
|
|
1042
1063
|
engines: {node: '>=12'}
|
|
1043
1064
|
|
|
1065
|
+
invariant@2.2.4:
|
|
1066
|
+
resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
|
|
1067
|
+
|
|
1044
1068
|
is-promise@2.2.2:
|
|
1045
1069
|
resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==}
|
|
1046
1070
|
|
|
@@ -1411,6 +1435,9 @@ packages:
|
|
|
1411
1435
|
scheduler@0.28.0:
|
|
1412
1436
|
resolution: {integrity: sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==}
|
|
1413
1437
|
|
|
1438
|
+
shallowequal@1.1.0:
|
|
1439
|
+
resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==}
|
|
1440
|
+
|
|
1414
1441
|
shebang-command@2.0.0:
|
|
1415
1442
|
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
|
|
1416
1443
|
engines: {node: '>=8'}
|
|
@@ -1616,6 +1643,17 @@ snapshots:
|
|
|
1616
1643
|
|
|
1617
1644
|
'@dimforge/rapier3d-compat@0.19.2': {}
|
|
1618
1645
|
|
|
1646
|
+
'@elemaudio/core@4.0.1':
|
|
1647
|
+
dependencies:
|
|
1648
|
+
eventemitter3: 5.0.4
|
|
1649
|
+
invariant: 2.2.4
|
|
1650
|
+
shallowequal: 1.1.0
|
|
1651
|
+
|
|
1652
|
+
'@elemaudio/web-renderer@4.0.3':
|
|
1653
|
+
dependencies:
|
|
1654
|
+
'@elemaudio/core': 4.0.1
|
|
1655
|
+
invariant: 2.2.4
|
|
1656
|
+
|
|
1619
1657
|
'@floating-ui/core@1.8.0':
|
|
1620
1658
|
dependencies:
|
|
1621
1659
|
'@floating-ui/utils': 0.2.12
|
|
@@ -2306,6 +2344,8 @@ snapshots:
|
|
|
2306
2344
|
|
|
2307
2345
|
eventemitter3@4.0.7: {}
|
|
2308
2346
|
|
|
2347
|
+
eventemitter3@5.0.4: {}
|
|
2348
|
+
|
|
2309
2349
|
fastnoise-lite@1.1.1: {}
|
|
2310
2350
|
|
|
2311
2351
|
fdir@6.5.0(picomatch@4.0.7):
|
|
@@ -2329,6 +2369,8 @@ snapshots:
|
|
|
2329
2369
|
|
|
2330
2370
|
hls.js@1.7.3: {}
|
|
2331
2371
|
|
|
2372
|
+
howler@2.2.4: {}
|
|
2373
|
+
|
|
2332
2374
|
i18next-browser-languagedetector@4.3.1:
|
|
2333
2375
|
dependencies:
|
|
2334
2376
|
'@babel/runtime': 7.29.7
|
|
@@ -2347,6 +2389,10 @@ snapshots:
|
|
|
2347
2389
|
|
|
2348
2390
|
internmap@2.0.3: {}
|
|
2349
2391
|
|
|
2392
|
+
invariant@2.2.4:
|
|
2393
|
+
dependencies:
|
|
2394
|
+
loose-envify: 1.4.0
|
|
2395
|
+
|
|
2350
2396
|
is-promise@2.2.2: {}
|
|
2351
2397
|
|
|
2352
2398
|
isexe@2.0.0: {}
|
|
@@ -2676,6 +2722,8 @@ snapshots:
|
|
|
2676
2722
|
|
|
2677
2723
|
scheduler@0.28.0: {}
|
|
2678
2724
|
|
|
2725
|
+
shallowequal@1.1.0: {}
|
|
2726
|
+
|
|
2679
2727
|
shebang-command@2.0.0:
|
|
2680
2728
|
dependencies:
|
|
2681
2729
|
shebang-regex: 3.0.0
|
package/template/src/main.jsx
CHANGED
|
@@ -4,6 +4,22 @@ import { createRoot } from 'react-dom/client'
|
|
|
4
4
|
import { App } from '@/App'
|
|
5
5
|
import '@/styles.css'
|
|
6
6
|
|
|
7
|
+
// Keep Tab available to game controls without moving focus outside editable fields.
|
|
8
|
+
function preventTabFocus (event) {
|
|
9
|
+
if (event.key !== 'Tab') return
|
|
10
|
+
if (!(event.target instanceof window.Element)) return
|
|
11
|
+
if (event.target.closest('input, textarea, select, [contenteditable]:not([contenteditable="false"]), [role="textbox"]')) return
|
|
12
|
+
event.preventDefault()
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
window.addEventListener('keydown', preventTabFocus)
|
|
16
|
+
|
|
17
|
+
if (import.meta.hot) {
|
|
18
|
+
import.meta.hot.dispose(() => {
|
|
19
|
+
window.removeEventListener('keydown', preventTabFocus)
|
|
20
|
+
})
|
|
21
|
+
}
|
|
22
|
+
|
|
7
23
|
createRoot(document.getElementById('root')).render(
|
|
8
24
|
<StrictMode>
|
|
9
25
|
<App />
|