layershift 0.3.0 → 0.4.1

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.
Files changed (48) hide show
  1. package/README.md +46 -43
  2. package/dist/components/layershift.js +264 -1119
  3. package/dist/npm/layershift.es.js +2277 -3774
  4. package/dist/types/components/layershift/global.d.ts +2 -2
  5. package/dist/types/components/layershift/index.d.ts +5 -1
  6. package/dist/types/components/layershift/index.d.ts.map +1 -1
  7. package/dist/types/components/layershift/layershift-element.d.ts +39 -9
  8. package/dist/types/components/layershift/layershift-element.d.ts.map +1 -1
  9. package/dist/types/components/layershift/lifecycle.d.ts +6 -0
  10. package/dist/types/components/layershift/lifecycle.d.ts.map +1 -1
  11. package/dist/types/components/layershift/portal-element.d.ts +11 -3
  12. package/dist/types/components/layershift/portal-element.d.ts.map +1 -1
  13. package/dist/types/components/layershift/types.d.ts +22 -9
  14. package/dist/types/components/layershift/types.d.ts.map +1 -1
  15. package/dist/types/depth-analysis.d.ts +10 -6
  16. package/dist/types/depth-analysis.d.ts.map +1 -1
  17. package/dist/types/{parallax-renderer.d.ts → depth-effect-renderer.d.ts} +63 -15
  18. package/dist/types/depth-effect-renderer.d.ts.map +1 -0
  19. package/dist/types/depth-estimator.d.ts +96 -0
  20. package/dist/types/depth-estimator.d.ts.map +1 -0
  21. package/dist/types/input-handler.d.ts +8 -2
  22. package/dist/types/input-handler.d.ts.map +1 -1
  23. package/dist/types/media-source.d.ts +76 -0
  24. package/dist/types/media-source.d.ts.map +1 -0
  25. package/dist/types/portal-renderer.d.ts +2 -1
  26. package/dist/types/portal-renderer.d.ts.map +1 -1
  27. package/dist/types/precomputed-depth.d.ts +5 -0
  28. package/dist/types/precomputed-depth.d.ts.map +1 -1
  29. package/dist/types/renderer-base.d.ts +13 -8
  30. package/dist/types/renderer-base.d.ts.map +1 -1
  31. package/dist/types/shared/channel-to-renderer.d.ts +72 -0
  32. package/dist/types/shared/channel-to-renderer.d.ts.map +1 -0
  33. package/dist/types/shared/filter-config.d.ts +184 -0
  34. package/dist/types/shared/filter-config.d.ts.map +1 -0
  35. package/dist/types/video-source.d.ts +0 -1
  36. package/dist/types/video-source.d.ts.map +1 -1
  37. package/package.json +9 -3
  38. package/dist/types/gpu-backend.d.ts +0 -37
  39. package/dist/types/gpu-backend.d.ts.map +0 -1
  40. package/dist/types/parallax-renderer-webgpu.d.ts +0 -103
  41. package/dist/types/parallax-renderer-webgpu.d.ts.map +0 -1
  42. package/dist/types/parallax-renderer.d.ts.map +0 -1
  43. package/dist/types/portal-renderer-webgpu.d.ts +0 -199
  44. package/dist/types/portal-renderer-webgpu.d.ts.map +0 -1
  45. package/dist/types/render-pass-webgpu.d.ts +0 -76
  46. package/dist/types/render-pass-webgpu.d.ts.map +0 -1
  47. package/dist/types/webgpu-utils.d.ts +0 -42
  48. package/dist/types/webgpu-utils.d.ts.map +0 -1
@@ -1,6 +1,12 @@
1
- export interface ParallaxInput {
1
+ export interface EffectInput {
2
2
  x: number;
3
3
  y: number;
4
+ /** Depth offset for blur curve lookup. Used by rack focus focal band input. */
5
+ focalBandOffset?: number;
6
+ /** Tilted focal plane normal vector [nx, ny, nz] (Scheimpflug simulation). */
7
+ tiltPlaneNormal?: [number, number, number];
8
+ /** Tilted focal plane distance constant (dot(normal, focalPoint)). */
9
+ tiltPlaneD?: number;
4
10
  }
5
11
  export declare class InputHandler {
6
12
  private readonly motionLerpFactor;
@@ -16,7 +22,7 @@ export declare class InputHandler {
16
22
  get isMotionSupported(): boolean;
17
23
  get isMotionEnabled(): boolean;
18
24
  enableMotionControls(): Promise<boolean>;
19
- update(): ParallaxInput;
25
+ update(): EffectInput;
20
26
  dispose(): void;
21
27
  private readonly handleMouseMove;
22
28
  private readonly resetPointerTarget;
@@ -1 +1 @@
1
- {"version":3,"file":"input-handler.d.ts","sourceRoot":"","sources":["../../src/input-handler.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AASD,qBAAa,YAAY;IAUX,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAT7C,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,cAAc,CAAiC;IACvD,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,sBAAsB,CAAS;IACvC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,YAAY,CAAK;gBAEI,gBAAgB,EAAE,MAAM;IASrD,IAAI,iBAAiB,IAAI,OAAO,CAkB/B;IAED,IAAI,eAAe,IAAI,OAAO,CAE7B;IAEK,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC;IAsB9C,MAAM,IAAI,aAAa;IAqBvB,OAAO,IAAI,IAAI;IAaf,OAAO,CAAC,QAAQ,CAAC,eAAe,CAK9B;IAEF,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAGjC;IAEF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAQ/B;IAEF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAO9B;IAEF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAI7B;IAEF,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAOtC;CACH"}
1
+ {"version":3,"file":"input-handler.d.ts","sourceRoot":"","sources":["../../src/input-handler.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,+EAA+E;IAC/E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,8EAA8E;IAC9E,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AASD,qBAAa,YAAY;IAUX,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAT7C,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,sBAAsB,CAAS;IACvC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,YAAY,CAAK;gBAEI,gBAAgB,EAAE,MAAM;IASrD,IAAI,iBAAiB,IAAI,OAAO,CAkB/B;IAED,IAAI,eAAe,IAAI,OAAO,CAE7B;IAEK,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC;IAsB9C,MAAM,IAAI,WAAW;IAqBrB,OAAO,IAAI,IAAI;IAaf,OAAO,CAAC,QAAQ,CAAC,eAAe,CAK9B;IAEF,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAGjC;IAEF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAQ/B;IAEF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAO9B;IAEF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAI7B;IAEF,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAOtC;CACH"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Unified media source abstraction.
3
+ *
4
+ * Provides a common interface over HTMLVideoElement, HTMLImageElement,
5
+ * and MediaStream-backed video (camera) so that renderers and Web
6
+ * Components can consume any visual source without branching.
7
+ */
8
+ export type MediaSourceType = 'video' | 'image' | 'camera';
9
+ /**
10
+ * Texture-uploadable image source — the subset of CanvasImageSource that
11
+ * is accepted by both WebGL texImage2D and WebGPU copyExternalImageToTexture.
12
+ * Excludes SVGImageElement which neither API supports.
13
+ */
14
+ export type TextureImageSource = HTMLCanvasElement | HTMLImageElement | HTMLVideoElement | ImageBitmap | OffscreenCanvas | VideoFrame;
15
+ export interface MediaSource {
16
+ readonly type: MediaSourceType;
17
+ readonly width: number;
18
+ readonly height: number;
19
+ readonly currentTime: number;
20
+ /** Duration in seconds. Infinity for camera, 0 for images, finite for video. */
21
+ readonly duration: number;
22
+ /** Whether playback is currently paused. Always false for images. */
23
+ readonly paused: boolean;
24
+ /** True for video and camera (continuous frame stream). */
25
+ readonly isLive: boolean;
26
+ /** Return the underlying element suitable for texImage2D / copyExternalImageToTexture. */
27
+ getImageSource(): TextureImageSource | null;
28
+ requestVideoFrameCallback?(cb: (now: number, metadata: VideoFrameCallbackMetadata) => void): number;
29
+ cancelVideoFrameCallback?(handle: number): void;
30
+ play?(): Promise<void>;
31
+ pause?(): void;
32
+ addEventListener?(type: string, listener: EventListener): void;
33
+ removeEventListener?(type: string, listener: EventListener): void;
34
+ dispose(): void;
35
+ }
36
+ export interface VideoSourceOptions {
37
+ parent?: Node;
38
+ loop?: boolean;
39
+ muted?: boolean;
40
+ autoplay?: boolean;
41
+ }
42
+ /**
43
+ * Create a MediaSource backed by an HTMLVideoElement.
44
+ *
45
+ * The video is appended to `parent` (default: `document.body`) as a
46
+ * hidden element and metadata is loaded before the promise resolves.
47
+ */
48
+ export declare function createVideoSource(url: string, options?: VideoSourceOptions): Promise<MediaSource>;
49
+ export interface ImageSourceOptions {
50
+ parent?: Node;
51
+ }
52
+ /**
53
+ * Create a MediaSource backed by an HTMLImageElement.
54
+ *
55
+ * Static source — `currentTime` is always 0, `isLive` is false.
56
+ * RVFC is not available; renderers fall back to RAF-only.
57
+ */
58
+ export declare function createImageSource(url: string, _options?: ImageSourceOptions): Promise<MediaSource>;
59
+ export interface CameraSourceOptions {
60
+ parent?: Node;
61
+ }
62
+ /**
63
+ * Create a MediaSource backed by a camera stream (getUserMedia).
64
+ *
65
+ * Live source — `currentTime` ticks with the stream, `isLive` is true.
66
+ * RVFC is available on the underlying video element.
67
+ */
68
+ export declare function createCameraSource(constraints?: MediaStreamConstraints, options?: CameraSourceOptions): Promise<MediaSource>;
69
+ /**
70
+ * Convenience factory that dispatches to the correct source creator
71
+ * based on `sourceType`.
72
+ */
73
+ export declare function createMediaSource(src: string, sourceType: MediaSourceType, options?: VideoSourceOptions & CameraSourceOptions & {
74
+ cameraConstraints?: MediaStreamConstraints;
75
+ }): Promise<MediaSource>;
76
+ //# sourceMappingURL=media-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-source.d.ts","sourceRoot":"","sources":["../../src/media-source.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE3D;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAC1B,iBAAiB,GACjB,gBAAgB,GAChB,gBAAgB,GAChB,WAAW,GACX,eAAe,GACf,UAAU,CAAC;AAEf,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,gFAAgF;IAChF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAEzB,0FAA0F;IAC1F,cAAc,IAAI,kBAAkB,GAAG,IAAI,CAAC;IAE5C,yBAAyB,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,0BAA0B,KAAK,IAAI,GAAG,MAAM,CAAC;IACpG,wBAAwB,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhD,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,KAAK,CAAC,IAAI,IAAI,CAAC;IAEf,gBAAgB,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/D,mBAAmB,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAElE,OAAO,IAAI,IAAI,CAAC;CACjB;AAMD,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,WAAW,CAAC,CAyBtB;AAkDD,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,IAAI,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,QAAQ,GAAE,kBAAuB,GAChC,OAAO,CAAC,WAAW,CAAC,CAYtB;AAyBD,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,IAAI,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,GAAE,sBAAwC,EACrD,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,WAAW,CAAC,CAkBtB;AAuDD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,eAAe,EAC3B,OAAO,CAAC,EAAE,kBAAkB,GAAG,mBAAmB,GAAG;IAAE,iBAAiB,CAAC,EAAE,sBAAsB,CAAA;CAAE,GAClG,OAAO,CAAC,WAAW,CAAC,CAStB"}
@@ -32,6 +32,7 @@
32
32
  import type { ShapeMesh } from './shape-generator';
33
33
  import type { QualityTier } from './quality';
34
34
  import { RendererBase } from './renderer-base';
35
+ import type { MediaSource } from './media-source';
35
36
  export interface PortalRendererConfig {
36
37
  parallaxStrength: number;
37
38
  overscanPadding: number;
@@ -146,7 +147,7 @@ export declare class PortalRenderer extends RendererBase {
146
147
  private lightDir3;
147
148
  private readonly config;
148
149
  constructor(parent: HTMLElement, config: PortalRendererConfig);
149
- initialize(video: HTMLVideoElement, depthWidth: number, depthHeight: number, mesh: ShapeMesh): void;
150
+ initialize(source: MediaSource, depthWidth: number, depthHeight: number, mesh: ShapeMesh): void;
150
151
  private uploadStencilMesh;
151
152
  private uploadMaskMesh;
152
153
  private uploadBoundaryMesh;
@@ -1 +1 @@
1
- {"version":3,"file":"portal-renderer.d.ts","sourceRoot":"","sources":["../../src/portal-renderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"portal-renderer.d.ts","sourceRoot":"","sources":["../../src/portal-renderer.ts"],"names":[],"mappings":"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"}
@@ -36,4 +36,9 @@ export declare class DepthFrameInterpolator {
36
36
  sample(timeSec: number): Uint8Array;
37
37
  }
38
38
  export declare function loadPrecomputedDepth(depthDataUrl: string, depthMetaUrl: string, onProgress?: (progress: BinaryDownloadProgress) => void): Promise<PrecomputedDepthData>;
39
+ /**
40
+ * Generate a single-frame flat depth map (mid-gray 128) for sources
41
+ * that lack precomputed depth data, such as live camera feeds.
42
+ */
43
+ export declare function createFlatDepthData(width: number, height: number): PrecomputedDepthData;
39
44
  //# sourceMappingURL=precomputed-depth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"precomputed-depth.d.ts","sourceRoot":"","sources":["../../src/precomputed-depth.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,sBAAsB;IAS/B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAR5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IAGzC,OAAO,CAAC,cAAc,CAAM;IAC5B,OAAO,CAAC,kBAAkB,CAAM;IAChC,OAAO,CAAC,cAAc,CAAM;gBAGT,SAAS,EAAE,oBAAoB;IAMlD,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU;CA4BpC;AAED,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,sBAAsB,KAAK,IAAI,GACtD,OAAO,CAAC,oBAAoB,CAAC,CAO/B"}
1
+ {"version":3,"file":"precomputed-depth.d.ts","sourceRoot":"","sources":["../../src/precomputed-depth.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,sBAAsB;IAS/B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAR5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IAGzC,OAAO,CAAC,cAAc,CAAM;IAC5B,OAAO,CAAC,kBAAkB,CAAM;IAChC,OAAO,CAAC,cAAc,CAAM;gBAGT,SAAS,EAAE,oBAAoB;IAMlD,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU;CA4BpC;AAED,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,sBAAsB,KAAK,IAAI,GACtD,OAAO,CAAC,oBAAoB,CAAC,CAO/B;AA8ID;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,oBAAoB,CAOvF"}
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Abstract base class for Layershift renderers.
3
3
  *
4
- * Extracts shared non-GPU logic common to both the parallax and portal
5
- * renderers (and their future WebGPU counterparts):
4
+ * Extracts shared non-GPU logic common to both the depth-effect and portal
5
+ * renderers (and their WebGPU counterparts):
6
6
  *
7
7
  * - Canvas creation + container attachment
8
8
  * - Dual-loop animation management (RVFC + RAF)
@@ -15,7 +15,8 @@
15
15
  * `onRenderFrame()`, `onDepthUpdate()`, `recalculateViewportLayout()`,
16
16
  * `disposeRenderer()`, and `onContextRestored()`.
17
17
  */
18
- import type { ParallaxInput } from './input-handler';
18
+ import type { MediaSource } from './media-source';
19
+ import type { EffectInput } from './input-handler';
19
20
  import type { QualityParams } from './quality';
20
21
  export declare abstract class RendererBase {
21
22
  protected static readonly RESIZE_DEBOUNCE_MS = 100;
@@ -30,11 +31,13 @@ export declare abstract class RendererBase {
30
31
  /** Reusable buffer for subsampling depth data when GPU dims < source dims. */
31
32
  protected depthSubsampleBuffer: Uint8Array | null;
32
33
  protected videoAspect: number;
34
+ /** When true, computeCoverFitUV mirrors the X-axis for selfie mode. */
35
+ protected isCameraSource: boolean;
33
36
  protected uvOffset: number[];
34
37
  protected uvScale: number[];
35
38
  protected readDepth: ((timeSec: number) => Uint8Array) | null;
36
- protected readInput: (() => ParallaxInput) | null;
37
- protected playbackVideo: HTMLVideoElement | null;
39
+ protected readInput: (() => EffectInput) | null;
40
+ protected mediaSource: MediaSource | null;
38
41
  /**
39
42
  * Optional callback invoked on each new video frame (from RVFC).
40
43
  * The Web Component uses this to dispatch frame events.
@@ -50,16 +53,18 @@ export declare abstract class RendererBase {
50
53
  /** Adaptive quality parameters. Set by subclass constructor after GL init. */
51
54
  protected qualityParams: QualityParams;
52
55
  constructor(parent: HTMLElement);
56
+ /** The underlying canvas element. */
57
+ get canvasElement(): HTMLCanvasElement;
53
58
  /**
54
59
  * Begin the render loop.
55
60
  *
56
- * When `requestVideoFrameCallback` is available, two loops run:
61
+ * For live sources (video/camera) with RVFC support, two loops run:
57
62
  * 1. RVFC loop — fires once per new video frame, handles depth update.
58
63
  * 2. RAF loop — fires at display refresh rate, handles input + render.
59
64
  *
60
- * When RVFC is not available, falls back to a single RAF loop.
65
+ * For static sources (image) or when RVFC is unavailable, RAF-only.
61
66
  */
62
- start(video: HTMLVideoElement, readDepth: (timeSec: number) => Uint8Array, readInput: () => ParallaxInput, onVideoFrame?: (currentTime: number, frameNumber: number) => void): void;
67
+ start(source: MediaSource, readDepth: (timeSec: number) => Uint8Array, readInput: () => EffectInput, onVideoFrame?: (currentTime: number, frameNumber: number) => void): void;
63
68
  /** Stop both render loops and release callbacks. */
64
69
  stop(): void;
65
70
  /** Stop rendering and release all GPU resources. */
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-base.d.ts","sourceRoot":"","sources":["../../src/renderer-base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderer-base.d.ts","sourceRoot":"","sources":["../../src/renderer-base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Adapter: converts ChannelLayer[] → renderer configs.
3
+ *
4
+ * Both DepthEffectRenderer (WebGL2) and DepthEffectRendererWebGPU consume
5
+ * scalar config values. This adapter derives those scalars from the
6
+ * channel/curve model, keeping both renderers untouched.
7
+ *
8
+ * Also exports evaluateCurve(), which the curve editor UI will need.
9
+ */
10
+ import type { ChannelLayer, DepthCurve } from './filter-config';
11
+ /**
12
+ * Evaluate a DepthCurve at a given depth value (0-1).
13
+ */
14
+ export declare function evaluateCurve(curve: DepthCurve, depth: number): number;
15
+ /**
16
+ * Bake a DepthCurve into a sampled LUT (for GPU upload).
17
+ *
18
+ * DEPTH CONVENTION (canonical — see DEPTH_CONVENTION.md):
19
+ * Depth Anything v2 outputs higher = closer.
20
+ * The depth texture stores 0.0 = far, 1.0 = near.
21
+ * The curve editor x-axis is 0 = far, 1 = near.
22
+ * These match, so the LUT is a direct mapping with NO inversion.
23
+ * The shader samples `texture(uCurve, vec2(depth, 0.5))`, and
24
+ * depth=0(far) → LUT index 0 → curve x=0(far). Correct.
25
+ */
26
+ export declare function bakeCurveLUT(curve: DepthCurve, size?: number): Uint8Array;
27
+ export interface RendererConfigValues {
28
+ parallaxStrength: number;
29
+ pomEnabled: boolean;
30
+ pomSteps: number;
31
+ contrastLow: number;
32
+ contrastHigh: number;
33
+ verticalReduction: number;
34
+ dofStart: number;
35
+ dofStrength: number;
36
+ blurRadius: number;
37
+ glowColor: [number, number, number];
38
+ glowRadius: number;
39
+ glowSoftness: number;
40
+ tiltEnabled: boolean;
41
+ tiltHalfTanFov: number;
42
+ tiltTransitionWidth: number;
43
+ tiltPeakIntensity: number;
44
+ }
45
+ /**
46
+ * Derives DepthEffectRenderer config from the channel model.
47
+ *
48
+ * - Displacement channel params → strength, pomEnabled, pomSteps
49
+ * - Blur channel curve → dofStart, dofStrength
50
+ * - contrastLow/contrastHigh/verticalReduction have no channel equivalent
51
+ * yet, so they're passed through from fallback values.
52
+ */
53
+ export declare function channelsToRendererConfig(channels: ChannelLayer[], fallback: {
54
+ contrastLow: number;
55
+ contrastHigh: number;
56
+ verticalReduction: number;
57
+ }): RendererConfigValues;
58
+ export interface CurveLUTs {
59
+ displacementLUT: Uint8Array | null;
60
+ blurLUT: Uint8Array | null;
61
+ glowLUT: Uint8Array | null;
62
+ colorShiftLUT: Uint8Array | null;
63
+ colorShiftParams: {
64
+ hueShift: number;
65
+ saturation: number;
66
+ brightness: number;
67
+ tintStrength: number;
68
+ tintColor: [number, number, number];
69
+ } | null;
70
+ }
71
+ export declare function bakeCurveLUTs(channels: ChannelLayer[]): CurveLUTs;
72
+ //# sourceMappingURL=channel-to-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-to-renderer.d.ts","sourceRoot":"","sources":["../../../src/shared/channel-to-renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAe,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAM7E;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CA2BtE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,SAAM,GAAG,UAAU,CAOtE;AAcD,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,YAAY,EAAE,EACxB,QAAQ,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,GACjF,oBAAoB,CAyCtB;AAED,MAAM,WAAW,SAAS;IACxB,eAAe,EAAE,UAAU,GAAG,IAAI,CAAC;IACnC,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,UAAU,GAAG,IAAI,CAAC;IACjC,gBAAgB,EAAE;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KACrC,GAAG,IAAI,CAAC;CACV;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,SAAS,CAsBjE"}
@@ -0,0 +1,184 @@
1
+ /**
2
+ * Filter config schema — defines the shape of an authored filter.
3
+ *
4
+ * This is the central data model shared between the editor, web component,
5
+ * and export pipeline. Every parameter the user configures is captured here,
6
+ * and the export pipeline serializes it to JSON.
7
+ */
8
+ export type EffectType = 'parallax' | 'tilt-shift' | 'depth-glow' | 'rack-focus' | 'depth-color-grade' | 'fog-atmosphere' | 'pop-out' | 'freestyle';
9
+ export declare const EFFECT_LABELS: Record<EffectType, string>;
10
+ export declare const EFFECT_DESCRIPTIONS: Record<EffectType, string>;
11
+ export interface CurvePoint {
12
+ /** Depth position (0=far, 1=near). */
13
+ x: number;
14
+ /** Intensity at this depth (0-1). */
15
+ y: number;
16
+ /** Bezier handle for incoming tangent (relative to point). */
17
+ handleIn?: {
18
+ x: number;
19
+ y: number;
20
+ };
21
+ /** Bezier handle for outgoing tangent (relative to point). */
22
+ handleOut?: {
23
+ x: number;
24
+ y: number;
25
+ };
26
+ }
27
+ export type CurveInterpolation = 'linear' | 'smooth' | 'step';
28
+ export interface DepthCurve {
29
+ /** Control points defining the curve shape. Must be sorted by x ascending. */
30
+ points: CurvePoint[];
31
+ /** Interpolation mode between control points. */
32
+ interpolation: CurveInterpolation;
33
+ }
34
+ export type ChannelType = 'displacement' | 'blur' | 'glow' | 'color-shift';
35
+ export declare const CHANNEL_LABELS: Record<ChannelType, string>;
36
+ export interface DisplacementChannelParams {
37
+ /** Overall displacement strength multiplier. */
38
+ strength: number;
39
+ /** Enable parallax occlusion mapping. */
40
+ pomEnabled: boolean;
41
+ /** POM ray-march step count. */
42
+ pomSteps: number;
43
+ }
44
+ export interface BlurChannelParams {
45
+ /** Maximum blur radius (at curve intensity = 1). */
46
+ maxRadius: number;
47
+ /** Blur kernel sample count. */
48
+ samples: number;
49
+ /** Parametric: center of the sharp focus band in depth space (0-1). Used by tilt-shift. */
50
+ focalCenter?: number;
51
+ /** Parametric: width of the sharp focus band (0-1). Used by tilt-shift. */
52
+ focalWidth?: number;
53
+ /** Parametric: peak blur intensity at edges (0-1). */
54
+ peakIntensity?: number;
55
+ /** Parametric: transition softness from sharp to blurred (0-1). */
56
+ transitionSoftness?: number;
57
+ /** Enable tilted focal plane blur (Scheimpflug simulation). Used by tilt-shift. */
58
+ tiltEnabled?: boolean;
59
+ /** Virtual FOV in degrees for pseudo-world reconstruction (default 50). */
60
+ tiltFov?: number;
61
+ }
62
+ export interface GlowChannelParams {
63
+ /** Glow color [r, g, b] each 0-1. */
64
+ color: [number, number, number];
65
+ /** Glow spread radius. */
66
+ radius: number;
67
+ /** Edge softness of glow boundary. */
68
+ softness: number;
69
+ /** Parametric: depth threshold below which glow begins (0-1, 0=near). */
70
+ glowThreshold?: number;
71
+ /** Parametric: peak glow intensity (0-1). */
72
+ glowIntensity?: number;
73
+ }
74
+ export interface ColorShiftChannelParams {
75
+ /** Hue rotation in degrees (-180 to 180). */
76
+ hueShift: number;
77
+ /** Saturation multiplier (0 = grayscale, 1 = unchanged, >1 = boosted). */
78
+ saturation: number;
79
+ /** Brightness/value multiplier (0 = black, 1 = unchanged, >1 = brighter). */
80
+ brightness: number;
81
+ /** Blend factor toward tintColor (0 = no tint, 1 = fully tinted). */
82
+ tintStrength: number;
83
+ /** Target tint color [r, g, b] each 0-1. Used for fog/atmosphere effects. */
84
+ tintColor: [number, number, number];
85
+ /** Depth where the color-shift effect begins (0=far, 1=near). */
86
+ depthStart: number;
87
+ /** Depth where the color-shift effect reaches full intensity. */
88
+ depthEnd: number;
89
+ }
90
+ export type ChannelParams = {
91
+ 'displacement': DisplacementChannelParams;
92
+ 'blur': BlurChannelParams;
93
+ 'glow': GlowChannelParams;
94
+ 'color-shift': ColorShiftChannelParams;
95
+ };
96
+ export interface ChannelLayer<T extends ChannelType = ChannelType> {
97
+ /** Which channel this layer drives. */
98
+ channel: T;
99
+ /** Depth-to-intensity transfer function. */
100
+ curve: DepthCurve;
101
+ /** Channel-specific parameters (non-depth-dependent knobs). */
102
+ params: ChannelParams[T];
103
+ /** Display label in the layer panel. */
104
+ label: string;
105
+ /** Mute this channel without deleting it. */
106
+ enabled: boolean;
107
+ /**
108
+ * True if the user has manually edited the curve in the curve editor.
109
+ * When set, parametric sliders update params but do NOT regenerate the curve,
110
+ * preserving the user's manual edits. Reset when switching effect presets.
111
+ */
112
+ curveManuallyEdited?: boolean;
113
+ }
114
+ export interface MotionConfig {
115
+ /** X-axis sensitivity multiplier. */
116
+ sensitivityX: number;
117
+ /** Y-axis sensitivity multiplier. */
118
+ sensitivityY: number;
119
+ /** Interpolation smoothing factor (0-1, lower = smoother). */
120
+ lerpFactor: number;
121
+ /** When true, XY input rotates a tilted focal plane in 3D space (Scheimpflug). */
122
+ tiltPlaneInput?: boolean;
123
+ /** Pitch sensitivity in radians per unit input Y (default 0.35). */
124
+ tiltPitchSensitivity?: number;
125
+ /** Yaw sensitivity in radians per unit input X (default 0.15). */
126
+ tiltYawSensitivity?: number;
127
+ }
128
+ export type EdgeStrategy = 'fade' | 'clamp' | 'mirror' | 'wrap';
129
+ export interface FilterConfig {
130
+ /** Filter name (kebab-case, used for tag name: <layershift-{name}>). */
131
+ name: string;
132
+ /** Display name. */
133
+ displayName: string;
134
+ /** Effect type. */
135
+ effectType: EffectType;
136
+ /** Video source reference. */
137
+ video: {
138
+ id: string;
139
+ src: string;
140
+ depthSrc: string;
141
+ depthMeta: string;
142
+ type: 'video' | 'image';
143
+ };
144
+ /** Channel layer stack — the curve-based effect model. */
145
+ channels: ChannelLayer[];
146
+ /** Motion/input configuration. */
147
+ motion: MotionConfig;
148
+ /** Edge handling strategy. */
149
+ edgeStrategy: EdgeStrategy;
150
+ /** Overscan padding (UV space). */
151
+ overscanPadding: number;
152
+ /** Adaptive quality preference. */
153
+ quality: 'auto' | 'high' | 'medium' | 'low';
154
+ }
155
+ export declare const DEFAULT_MOTION: MotionConfig;
156
+ export declare const DEFAULT_LINEAR_RISING: DepthCurve;
157
+ export declare const DEFAULT_FLAT_FULL: DepthCurve;
158
+ export declare const DEFAULT_VALLEY: DepthCurve;
159
+ export declare const DEFAULT_CHANNEL_PARAMS: {
160
+ [K in ChannelType]: ChannelParams[K];
161
+ };
162
+ /** A single axis target. 'input' routes to renderer per-frame offset. */
163
+ export interface InputAxisTarget {
164
+ /** 'input' for renderer offset, or a ChannelType for channel param. */
165
+ target: 'input' | ChannelType;
166
+ /** Param name within the target. */
167
+ param: string;
168
+ /** Display label for this axis. */
169
+ label: string;
170
+ }
171
+ export interface InputMapping {
172
+ x: InputAxisTarget;
173
+ y: InputAxisTarget;
174
+ }
175
+ /** Valid ranges for channel params controllable via the ball. */
176
+ export declare const PARAM_RANGES: Record<string, {
177
+ min: number;
178
+ max: number;
179
+ default: number;
180
+ }>;
181
+ /** Default input mappings per effect type. */
182
+ export declare const DEFAULT_INPUT_MAPPINGS: Record<EffectType, InputMapping>;
183
+ export declare const DEFAULT_CHANNELS: ChannelLayer[];
184
+ //# sourceMappingURL=filter-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-config.d.ts","sourceRoot":"","sources":["../../../src/shared/filter-config.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,6 @@ export interface ExtractedFrame {
17
17
  width: number;
18
18
  height: number;
19
19
  }
20
- export declare function createHiddenVideoElement(url: string): Promise<HTMLVideoElement>;
21
20
  export declare function createExtractionPlan(video: HTMLVideoElement, options: FrameExtractionOptions): ExtractionPlan;
22
21
  export declare function extractFramesBySeeking(video: HTMLVideoElement, plan: ExtractionPlan, onFrame: (frame: ExtractedFrame, totalFrames: number) => Promise<void> | void, onProgress?: (progress: number) => void): Promise<void>;
23
22
  //# sourceMappingURL=video-source.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"video-source.d.ts","sourceRoot":"","sources":["../../src/video-source.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAID,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmBrF;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,sBAAsB,GAC9B,cAAc,CAehB;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,EAC7E,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GACtC,OAAO,CAAC,IAAI,CAAC,CAmCf"}
1
+ {"version":3,"file":"video-source.d.ts","sourceRoot":"","sources":["../../src/video-source.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAID,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,sBAAsB,GAC9B,cAAc,CAehB;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,EAC7E,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GACtC,OAAO,CAAC,IAAI,CAAC,CAmCf"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "layershift",
3
- "version": "0.3.0",
3
+ "version": "0.4.1",
4
4
  "description": "Embeddable video effects as Web Components. Drop-in parallax, depth-aware motion, and more.",
5
5
  "type": "module",
6
6
  "main": "dist/components/layershift.js",
@@ -27,7 +27,8 @@
27
27
  "scripts": {
28
28
  "dev": "vite",
29
29
  "precompute": "npx tsx scripts/precompute-depth.ts",
30
- "build": "tsc && vite build",
30
+ "generate:configs": "npx tsx scripts/generate-configs.ts",
31
+ "build": "npm run generate:configs && tsc && vite build",
31
32
  "build:component": "vite build --config vite.config.component.ts",
32
33
  "build:npm": "vite build --config vite.config.npm.ts",
33
34
  "build:types": "tsc -p tsconfig.declarations.json && cp src/components/layershift/global.d.ts dist/types/components/layershift/global.d.ts",
@@ -43,7 +44,10 @@
43
44
  "docs:dev": "vitepress dev docs",
44
45
  "build:docs": "vitepress build docs",
45
46
  "storybook": "storybook dev -p 6006",
46
- "build:storybook": "storybook build -o dist/storybook"
47
+ "build:storybook": "storybook build -o dist/storybook",
48
+ "dev:editor": "vite --config vite.config.editor.ts",
49
+ "build:editor": "vite build --config vite.config.editor.ts",
50
+ "build:editor:consumer": "vite build --config vite.config.editor.ts --mode consumer"
47
51
  },
48
52
  "repository": {
49
53
  "type": "git",
@@ -102,7 +106,9 @@
102
106
  "dependencies": {
103
107
  "class-variance-authority": "^0.7.1",
104
108
  "clsx": "^2.1.1",
109
+ "jszip": "^3.10.1",
105
110
  "lucide-react": "^0.574.0",
111
+ "onnxruntime-web": "^1.24.2",
106
112
  "react": "^19.2.4",
107
113
  "react-dom": "^19.2.4",
108
114
  "tailwind-merge": "^3.5.0",
@@ -1,37 +0,0 @@
1
- /**
2
- * GPU Backend Detection — WebGPU / WebGL2 feature detection and selection.
3
- *
4
- * Provides async detection with a timeout to gracefully fall back to WebGL2
5
- * when WebGPU is unavailable or adapter request hangs.
6
- *
7
- * Default behavior: auto-detect. WebGPU is used when available, WebGL2 fallback.
8
- * The `gpu-backend` attribute on Web Components is an optional escape hatch.
9
- */
10
- export type GPUBackendType = 'webgpu' | 'webgl2';
11
- export interface GPUBackendInfo {
12
- readonly type: GPUBackendType;
13
- /** Present only when type === 'webgpu'. */
14
- readonly adapter?: GPUAdapter;
15
- /** Present only when type === 'webgpu'. */
16
- readonly device?: GPUDevice;
17
- }
18
- /**
19
- * Synchronous check for WebGPU API availability.
20
- *
21
- * Returns true if `navigator.gpu` exists. Does NOT request an adapter,
22
- * so this cannot confirm actual WebGPU support — use `detectGPUBackend()`
23
- * for a definitive answer.
24
- */
25
- export declare function isWebGPUAvailable(): boolean;
26
- /**
27
- * Detect the best available GPU backend.
28
- *
29
- * 1. If `preference` is 'webgl2', returns WebGL2 immediately.
30
- * 2. If `preference` is 'webgpu', attempts WebGPU and throws on failure.
31
- * 3. If `preference` is 'auto' (default), tries WebGPU with a timeout
32
- * and falls back to WebGL2 silently on any failure.
33
- *
34
- * @param preference - 'webgpu' | 'webgl2' | 'auto' (default: 'auto')
35
- */
36
- export declare function detectGPUBackend(preference?: 'webgpu' | 'webgl2' | 'auto'): Promise<GPUBackendInfo>;
37
- //# sourceMappingURL=gpu-backend.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gpu-backend.d.ts","sourceRoot":"","sources":["../../src/gpu-backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEjD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;IAC9B,2CAA2C;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;CAC7B;AAaD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAMD;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,GAAE,QAAQ,GAAG,QAAQ,GAAG,MAAe,GAChD,OAAO,CAAC,cAAc,CAAC,CAqCzB"}