shadertown 0.12.0 → 0.13.0
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/CHANGELOG.md +20 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/quality.d.ts +28 -8
- package/dist/quality.d.ts.map +1 -1
- package/dist/quality.js +39 -17
- package/dist/quality.js.map +1 -1
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,26 @@ deploys, not by this file.
|
|
|
6
6
|
This project follows [semantic versioning](https://semver.org). Before 1.0 the
|
|
7
7
|
minor number carries breaking changes, so pin it if that matters to you.
|
|
8
8
|
|
|
9
|
+
## 0.13.0 — 2026-09-05
|
|
10
|
+
|
|
11
|
+
Auto judges a phone by its GPU, not by being a phone.
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- **The device check uses detect-gpu.** `@pmndrs/detect-gpu` is now a
|
|
16
|
+
dependency, imported after the first frame is on screen, the way vgpu's
|
|
17
|
+
`adaptive-quality` example does it. Blocklisted GPUs and benchmark tiers 0
|
|
18
|
+
and 1 ask for Low; a software adapter still does so at once. The rule that
|
|
19
|
+
sent every mobile device to Low is gone: it put an iPhone 14 on Low before
|
|
20
|
+
it had drawn a frame, when its GPU benchmarks at the top tier. A GPU the
|
|
21
|
+
tables do not know keeps High and leaves the verdict to the frame rate.
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
|
|
25
|
+
- **`configureQuality({ benchmarksUrl })`.** Serve detect-gpu's benchmark
|
|
26
|
+
tables from your own origin instead of unpkg. Call it before the first
|
|
27
|
+
canvas mounts.
|
|
28
|
+
|
|
9
29
|
## 0.12.0 — 2026-09-05
|
|
10
30
|
|
|
11
31
|
Two quality tiers, and an Auto that picks between them.
|
package/dist/index.d.ts
CHANGED
|
@@ -7,7 +7,8 @@ export type { ShaderSourceImage, ShaderSourceInput, ShaderSourceLayer, ShaderSou
|
|
|
7
7
|
export { createShaderRenderer } from "./renderer.js";
|
|
8
8
|
export type { ShaderRenderer, ShaderRendererOptions, RendererStatus } from "./renderer.js";
|
|
9
9
|
export { getStage, isWebGpuSupported } from "./stage.js";
|
|
10
|
-
export { setQualityTier, qualityTier, onQualityTier } from "./quality.js";
|
|
10
|
+
export { setQualityTier, qualityTier, onQualityTier, configureQuality } from "./quality.js";
|
|
11
|
+
export type { QualityConfig } from "./quality.js";
|
|
11
12
|
export { diffParams, toConfigSource, toReactSource, toVanillaSource, toExampleSource, toReadme, toLicense, toWgslSource, toInstallCommand, } from "./export.js";
|
|
12
13
|
export type { LicenceHolder } from "./export.js";
|
|
13
14
|
export { shaderSources } from "./generated/sources.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,WAAW,EACX,SAAS,EACT,YAAY,EACZ,UAAU,EACV,cAAc,EACd,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,cAAc,EACd,UAAU,EACV,YAAY,EACZ,WAAW,GACZ,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACnE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElE,OAAO,EACL,aAAa,EACb,eAAe,EACf,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,GACb,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE3F,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,WAAW,EACX,SAAS,EACT,YAAY,EACZ,UAAU,EACV,cAAc,EACd,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,cAAc,EACd,UAAU,EACV,YAAY,EACZ,WAAW,GACZ,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACnE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElE,OAAO,EACL,aAAa,EACb,eAAe,EACf,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,GACb,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE3F,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC5F,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,EACL,UAAU,EACV,cAAc,EACd,aAAa,EACb,eAAe,EACf,eAAe,EACf,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,YAAY,EACV,YAAY,EACZ,WAAW,EACX,SAAS,EACT,eAAe,EACf,cAAc,EACd,SAAS,EACT,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,UAAU,GACX,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@ export { defineShader, defineShadertownConfig } from "./config.js";
|
|
|
3
3
|
export { defaultParams, resolveUniforms, parseColor, formatColor, encodeParams, decodeParams, } from "./params.js";
|
|
4
4
|
export { createShaderRenderer } from "./renderer.js";
|
|
5
5
|
export { getStage, isWebGpuSupported } from "./stage.js";
|
|
6
|
-
export { setQualityTier, qualityTier, onQualityTier } from "./quality.js";
|
|
6
|
+
export { setQualityTier, qualityTier, onQualityTier, configureQuality } from "./quality.js";
|
|
7
7
|
export { diffParams, toConfigSource, toReactSource, toVanillaSource, toExampleSource, toReadme, toLicense, toWgslSource, toInstallCommand, } from "./export.js";
|
|
8
8
|
export { shaderSources } from "./generated/sources.js";
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,WAAW,EACX,SAAS,EACT,YAAY,EACZ,UAAU,EACV,cAAc,EACd,eAAe,GAChB,MAAM,eAAe,CAAC;AAQvB,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAGnE,OAAO,EACL,aAAa,EACb,eAAe,EACf,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,GACb,MAAM,aAAa,CAAC;AAUrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGrD,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,WAAW,EACX,SAAS,EACT,YAAY,EACZ,UAAU,EACV,cAAc,EACd,eAAe,GAChB,MAAM,eAAe,CAAC;AAQvB,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAGnE,OAAO,EACL,aAAa,EACb,eAAe,EACf,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,GACb,MAAM,aAAa,CAAC;AAUrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGrD,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAG5F,OAAO,EACL,UAAU,EACV,cAAc,EACd,aAAa,EACb,eAAe,EACf,eAAe,EACf,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC"}
|
package/dist/quality.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { TierResult } from "@pmndrs/detect-gpu";
|
|
1
2
|
import type { Gpu } from "vgpu";
|
|
2
3
|
import type { DowngradeReason, QualityPreference, QualityTier } from "./types.js";
|
|
3
4
|
/**
|
|
@@ -14,6 +15,17 @@ export declare function setQualityTier(tier: QualityPreference): void;
|
|
|
14
15
|
export declare function qualityTier(): QualityPreference;
|
|
15
16
|
/** Hear every change to the page's tier. Returns the unsubscribe. */
|
|
16
17
|
export declare function onQualityTier(listener: (tier: QualityPreference) => void): () => void;
|
|
18
|
+
export interface QualityConfig {
|
|
19
|
+
/**
|
|
20
|
+
* Where detect-gpu's benchmark tables are served from: a directory holding
|
|
21
|
+
* its `dist/benchmarks/*.json`. Defaults to detect-gpu's own CDN copy on
|
|
22
|
+
* unpkg. Point it at a same-origin copy to keep the page free of third-party
|
|
23
|
+
* requests; a fetch that fails keeps High.
|
|
24
|
+
*/
|
|
25
|
+
readonly benchmarksUrl?: string;
|
|
26
|
+
}
|
|
27
|
+
/** Settings for Auto's device check. Call before the first canvas mounts. */
|
|
28
|
+
export declare function configureQuality(next: QualityConfig): void;
|
|
17
29
|
/** The tier a preference starts on. Auto begins High and earns Low. */
|
|
18
30
|
export declare function initialTier(preference: QualityPreference): QualityTier;
|
|
19
31
|
/** The device pixel ratio clamp for a tier. Low renders one texel per CSS pixel at most. */
|
|
@@ -45,16 +57,24 @@ interface BatteryManagerLike extends EventTarget {
|
|
|
45
57
|
readonly level: number;
|
|
46
58
|
}
|
|
47
59
|
/**
|
|
48
|
-
* Whether the
|
|
60
|
+
* Whether the adapter alone asks for Low, before anything is fetched.
|
|
61
|
+
*
|
|
62
|
+
* A software adapter cannot draw a raymarch at any size, and the browser says
|
|
63
|
+
* so up front. Everything else waits for the benchmark.
|
|
64
|
+
*/
|
|
65
|
+
export declare function adapterRequestsLow(gpu: Gpu): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Whether detect-gpu's verdict on the GPU asks for Low.
|
|
49
68
|
*
|
|
50
|
-
* The example
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
69
|
+
* The example's rule, less one clause. It sends every mobile device to Low
|
|
70
|
+
* as well; that rule put an iPhone 14 on Low before it had drawn a frame, when
|
|
71
|
+
* its GPU benchmarks at the top tier. Phones are judged by their GPU here like
|
|
72
|
+
* everything else. Blocklisted GPUs and benchmark tiers 0 and 1 — under 30
|
|
73
|
+
* frames a second in detect-gpu's tables — ask for Low. A GPU the tables do
|
|
74
|
+
* not know, or a table that could not be fetched, keeps High and leaves the
|
|
75
|
+
* verdict to the frame rate.
|
|
56
76
|
*/
|
|
57
|
-
export declare function
|
|
77
|
+
export declare function gpuTierRequestsLow(result: Pick<TierResult, "tier" | "type">): boolean;
|
|
58
78
|
/** Inclusive threshold, ignored while the device is plugged in. */
|
|
59
79
|
export declare function batteryRequestsLow(battery: Pick<BatteryManagerLike, "charging" | "level">): boolean;
|
|
60
80
|
/**
|
package/dist/quality.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quality.d.ts","sourceRoot":"","sources":["../src/quality.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAwBlF;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAI5D;AAED,sCAAsC;AACtC,wBAAgB,WAAW,IAAI,iBAAiB,CAE/C;AAED,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,GAAG,MAAM,IAAI,CAKrF;AAED,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,UAAU,EAAE,iBAAiB,GAAG,WAAW,CAEtE;AAED,4FAA4F;AAC5F,wBAAgB,OAAO,CACrB,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAG3B;AAED,wCAAwC;AACxC,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAErD;AAYD,MAAM,WAAW,iBAAiB;IAChC,+EAA+E;IAC/E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,4FAA4F;IAC5F,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,+FAA+F;IAC/F,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAC3C,4DAA4D;IAC5D,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,IAAI,kBAAkB,CAuD7D;AAwBD,UAAU,kBAAmB,SAAQ,WAAW;IAC9C,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED
|
|
1
|
+
{"version":3,"file":"quality.d.ts","sourceRoot":"","sources":["../src/quality.ts"],"names":[],"mappings":"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"}
|
package/dist/quality.js
CHANGED
|
@@ -44,6 +44,11 @@ export function onQualityTier(listener) {
|
|
|
44
44
|
pageTierListeners.delete(listener);
|
|
45
45
|
};
|
|
46
46
|
}
|
|
47
|
+
let config = {};
|
|
48
|
+
/** Settings for Auto's device check. Call before the first canvas mounts. */
|
|
49
|
+
export function configureQuality(next) {
|
|
50
|
+
config = { ...config, ...next };
|
|
51
|
+
}
|
|
47
52
|
/** The tier a preference starts on. Auto begins High and earns Low. */
|
|
48
53
|
export function initialTier(preference) {
|
|
49
54
|
return preference === "low" ? "low" : "high";
|
|
@@ -148,25 +153,28 @@ function updatedRefreshFps(current, samples, deltaMs) {
|
|
|
148
153
|
// --- device and battery -----------------------------------------------------------
|
|
149
154
|
const LOW_BATTERY_LEVEL = 0.3;
|
|
150
155
|
/**
|
|
151
|
-
* Whether the
|
|
156
|
+
* Whether the adapter alone asks for Low, before anything is fetched.
|
|
152
157
|
*
|
|
153
|
-
*
|
|
154
|
-
*
|
|
155
|
-
* carry, so this reads what the browser already knows: a phone or tablet
|
|
156
|
-
* (whose pixel ratio is three and whose GPU shares a thermal budget with the
|
|
157
|
-
* radio), or a software adapter, which cannot draw a raymarch at any size.
|
|
158
|
-
* Everything else keeps High and lets the frame rate decide.
|
|
158
|
+
* A software adapter cannot draw a raymarch at any size, and the browser says
|
|
159
|
+
* so up front. Everything else waits for the benchmark.
|
|
159
160
|
*/
|
|
160
|
-
export function
|
|
161
|
-
if (typeof navigator === "undefined")
|
|
162
|
-
return false;
|
|
161
|
+
export function adapterRequestsLow(gpu) {
|
|
163
162
|
const info = gpu.gpu.adapterInfo;
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
163
|
+
return info?.isFallbackAdapter === true;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Whether detect-gpu's verdict on the GPU asks for Low.
|
|
167
|
+
*
|
|
168
|
+
* The example's rule, less one clause. It sends every mobile device to Low
|
|
169
|
+
* as well; that rule put an iPhone 14 on Low before it had drawn a frame, when
|
|
170
|
+
* its GPU benchmarks at the top tier. Phones are judged by their GPU here like
|
|
171
|
+
* everything else. Blocklisted GPUs and benchmark tiers 0 and 1 — under 30
|
|
172
|
+
* frames a second in detect-gpu's tables — ask for Low. A GPU the tables do
|
|
173
|
+
* not know, or a table that could not be fetched, keeps High and leaves the
|
|
174
|
+
* verdict to the frame rate.
|
|
175
|
+
*/
|
|
176
|
+
export function gpuTierRequestsLow(result) {
|
|
177
|
+
return result.type === "BLOCKLISTED" || (result.type === "BENCHMARK" && result.tier <= 1);
|
|
170
178
|
}
|
|
171
179
|
/** Inclusive threshold, ignored while the device is plugged in. */
|
|
172
180
|
export function batteryRequestsLow(battery) {
|
|
@@ -249,10 +257,24 @@ export class QualityMonitor {
|
|
|
249
257
|
return;
|
|
250
258
|
this.armed = true;
|
|
251
259
|
this.health.reset();
|
|
252
|
-
if (
|
|
260
|
+
if (adapterRequestsLow(this.gpu)) {
|
|
253
261
|
this.requestLow("device");
|
|
254
262
|
return;
|
|
255
263
|
}
|
|
264
|
+
// detect-gpu is imported here and not at the top, so its code and its
|
|
265
|
+
// benchmark fetch cost the page nothing until the first frame is on
|
|
266
|
+
// screen — and nothing at all on a page that pins its tier.
|
|
267
|
+
void import("@pmndrs/detect-gpu")
|
|
268
|
+
.then(({ getGPUTier }) => getGPUTier(config.benchmarksUrl ? { benchmarksURL: config.benchmarksUrl } : {}))
|
|
269
|
+
.then((result) => {
|
|
270
|
+
if (!this.armed || this.verdict)
|
|
271
|
+
return;
|
|
272
|
+
if (gpuTierRequestsLow(result))
|
|
273
|
+
this.requestLow("device");
|
|
274
|
+
})
|
|
275
|
+
.catch(() => {
|
|
276
|
+
/* advisory: a GPU that cannot be judged keeps High */
|
|
277
|
+
});
|
|
256
278
|
const nav = typeof navigator === "undefined"
|
|
257
279
|
? undefined
|
|
258
280
|
: navigator;
|
package/dist/quality.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quality.js","sourceRoot":"","sources":["../src/quality.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"quality.js","sourceRoot":"","sources":["../src/quality.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "shadertown",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"webgpu",
|
|
6
6
|
"shader",
|
|
@@ -50,6 +50,7 @@
|
|
|
50
50
|
"./package.json": "./package.json"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
+
"@pmndrs/detect-gpu": "6.0.19",
|
|
53
54
|
"vgpu": "0.3.0"
|
|
54
55
|
},
|
|
55
56
|
"peerDependencies": {
|
|
@@ -65,8 +66,8 @@
|
|
|
65
66
|
}
|
|
66
67
|
},
|
|
67
68
|
"devDependencies": {
|
|
68
|
-
"@types/react": "19.2.18",
|
|
69
69
|
"@types/node": "24.10.1",
|
|
70
|
+
"@types/react": "19.2.18",
|
|
70
71
|
"@webgpu/types": "0.1.69",
|
|
71
72
|
"typescript": "5.9.3"
|
|
72
73
|
},
|