@lazycatcloud/vue-media-preview 0.1.1 → 0.1.2

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 (31) hide show
  1. package/README.md +1 -1
  2. package/dist/components/MediaPreview.vue.d.ts +2 -2
  3. package/dist/components/PreviewStage.vue.d.ts +5 -2
  4. package/dist/core/rendering/image.d.ts +17 -0
  5. package/dist/core/resources/bitmap/client.d.ts +4 -0
  6. package/dist/core/resources/bitmap/decode.worker.d.ts +1 -0
  7. package/dist/core/resources/bitmap/types.d.ts +14 -0
  8. package/dist/core/resources/imageLimits.d.ts +1 -1
  9. package/dist/core/resources/imageOwnership.d.ts +8 -0
  10. package/dist/core/resources/imageRequest.d.ts +1 -1
  11. package/dist/core/resources/imageResource.d.ts +11 -0
  12. package/dist/core/resources/imageStore.d.ts +3 -0
  13. package/dist/core/resources/imageTransport.d.ts +4 -4
  14. package/dist/core/resources/validation/image.d.ts +13 -0
  15. package/dist/core/video/source/session.d.ts +8 -0
  16. package/dist/core/video/source/types.d.ts +8 -0
  17. package/dist/core/video/timeline/buffered.d.ts +12 -0
  18. package/dist/core/video/timeline/index.d.ts +15 -0
  19. package/dist/core/video/timeline/time.d.ts +3 -0
  20. package/dist/core/video/useVideoPlayback.d.ts +22 -6
  21. package/dist/core/video/useVideoSource.d.ts +3 -3
  22. package/dist/index.d.ts +2 -0
  23. package/dist/renderers/ImageCanvasRenderer.vue.d.ts +12 -3
  24. package/dist/renderers/LivePhotoRenderer.vue.d.ts +2 -2
  25. package/dist/renderers/VideoDomRenderer.vue.d.ts +23 -7
  26. package/dist/vue-media-preview.cjs +2 -1
  27. package/dist/vue-media-preview.css +1 -1
  28. package/dist/vue-media-preview.js +1719 -1443
  29. package/docs/testing.md +12 -2
  30. package/docs/vue-media-preview.md +24 -8
  31. package/package.json +1 -1
package/README.md CHANGED
@@ -65,7 +65,7 @@ import type { PreviewMedia, PreviewAnchor } from '@lazycatcloud/vue-media-previe
65
65
 
66
66
  详见 [接入与架构](docs/vue-media-preview.md) 和 [测试说明](docs/testing.md)。
67
67
 
68
- 大原图通过独立适屏资源预览;默认不直接解码超过 32MiB 或 2400 万像素的原图,未实现瓦片式超大图。真实相册业务与特殊格式边界见接入文档。
68
+ 大原图通过独立适屏资源预览;默认原图上限为 32MiB / 6400 万像素,`resourcePolicy.maxOriginalPixels` 同时用于原图请求前检查和实际图片尺寸检查,未实现瓦片式超大图。真实相册业务与特殊格式边界见接入文档。
69
69
 
70
70
  ## npm 发布
71
71
 
@@ -94,7 +94,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_WithDefaults<__VLS
94
94
  closing: () => void;
95
95
  change: (index: number) => void;
96
96
  close: () => void;
97
- ready: (index: number, quality: "thumbnail" | "screen" | "full") => void;
97
+ ready: (index: number, quality: "full" | "thumbnail" | "screen") => void;
98
98
  originalState: (media: PreviewMedia, status: OriginalStatus, reason: string) => void;
99
99
  opened: (index: number) => void;
100
100
  loadMore: (index: number) => void;
@@ -118,7 +118,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_WithDefaults<__VLS
118
118
  };
119
119
  }>>> & {
120
120
  onError?: ((error: Error, media: PreviewMedia) => any) | undefined;
121
- onReady?: ((index: number, quality: "thumbnail" | "screen" | "full") => any) | undefined;
121
+ onReady?: ((index: number, quality: "full" | "thumbnail" | "screen") => any) | undefined;
122
122
  onOriginalState?: ((media: PreviewMedia, status: OriginalStatus, reason: string) => any) | undefined;
123
123
  onChange?: ((index: number) => any) | undefined;
124
124
  onClose?: (() => any) | undefined;
@@ -55,13 +55,16 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_WithDefaults<__V
55
55
  togglePlayback: () => void;
56
56
  toggleFullscreen: () => Promise<void>;
57
57
  captureFrame: () => {
58
+ image: HTMLImageElement | ImageBitmap;
59
+ scale: number;
60
+ } | {
58
61
  image: HTMLCanvasElement | HTMLImageElement | HTMLVideoElement;
59
62
  scale: number;
60
63
  };
61
64
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
62
65
  error: (error: Error) => void;
63
66
  close: () => void;
64
- ready: (quality: "thumbnail" | "screen" | "full") => void;
67
+ ready: (quality: "full" | "thumbnail" | "screen") => void;
65
68
  originalState: (status: OriginalStatus, reason: string) => void;
66
69
  liveState: (status: LivePhotoStatus) => void;
67
70
  liveEnded: () => void;
@@ -93,7 +96,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_WithDefaults<__V
93
96
  paging: boolean;
94
97
  }>>> & {
95
98
  onError?: ((error: Error) => any) | undefined;
96
- onReady?: ((quality: "thumbnail" | "screen" | "full") => any) | undefined;
99
+ onReady?: ((quality: "full" | "thumbnail" | "screen") => any) | undefined;
97
100
  onOriginalState?: ((status: OriginalStatus, reason: string) => any) | undefined;
98
101
  onLiveState?: ((status: LivePhotoStatus) => any) | undefined;
99
102
  onLiveEnded?: (() => any) | undefined;
@@ -0,0 +1,17 @@
1
+ import type { PreviewRotation, PreviewSize } from "../types";
2
+ export interface ImageFrame {
3
+ viewport: PreviewSize;
4
+ size: PreviewSize;
5
+ offsetX: number;
6
+ offsetY: number;
7
+ rotation: PreviewRotation;
8
+ }
9
+ /** Visible rectangle in the unrotated image's rendered CSS pixels. */
10
+ export declare function visibleImageRect(frame: ImageFrame): {
11
+ x: number;
12
+ y: number;
13
+ width: number;
14
+ height: number;
15
+ };
16
+ /** Crop before sampling so zoomed originals do not resample offscreen pixels. */
17
+ export declare function drawViewportImage(context: CanvasRenderingContext2D, image: HTMLImageElement | ImageBitmap, frame: ImageFrame, moving: boolean): void;
@@ -0,0 +1,4 @@
1
+ import type { PreparedBitmaps } from "./types";
2
+ export declare function closeBitmaps({ full, motion }: PreparedBitmaps): void;
3
+ /** Each queued store load owns its worker; cancellation terminates its decode/resize work. */
4
+ export declare function prepareJpegBitmaps(blob: Blob, maxMotionPixels: number, signal: AbortSignal): Promise<PreparedBitmaps>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,14 @@
1
+ export interface DecodeRequest {
2
+ blob: Blob;
3
+ maxMotionPixels: number;
4
+ }
5
+ export interface PreparedBitmaps {
6
+ full: ImageBitmap;
7
+ motion: ImageBitmap;
8
+ }
9
+ export type DecodeResult = ({
10
+ status: "ready";
11
+ } & PreparedBitmaps) | {
12
+ status: "error";
13
+ message: string;
14
+ };
@@ -1,6 +1,6 @@
1
1
  /** Resource budgets shared by transport, caching and Canvas renderers. */
2
2
  export declare const imageLimits: {
3
- readonly maxDecodedPixels: 24000000;
3
+ readonly maxDecodedPixels: 64000000;
4
4
  readonly maxCanvasPixels: 6000000;
5
5
  readonly maxDevicePixelRatio: 2.5;
6
6
  readonly maxOriginalBytes: number;
@@ -0,0 +1,8 @@
1
+ import type { ImageLease } from "./imageStore";
2
+ /** Request replacement must not release pixels that are still displayed. */
3
+ export declare function createImageOwnership(): {
4
+ replace(leases: ImageLease[]): void;
5
+ display(lease: ImageLease): void;
6
+ clearDisplay(): void;
7
+ dispose(): void;
8
+ };
@@ -11,5 +11,5 @@ interface ImageRequest {
11
11
  originalReason: string;
12
12
  }
13
13
  /** Decide resource tiers and safety before the renderer acquires any transport leases. */
14
- export declare function planImageRequest(media: PreviewMedia, requestedQuality: ImageQuality, policy: ImagePolicy, resolveSource: ImageSourceResolver, targetWidth: number): ImageRequest;
14
+ export declare function planImageRequest(media: PreviewMedia, requestedQuality: ImageQuality, policy: ImagePolicy, resolveSource: ImageSourceResolver, targetWidth: number, originalEnabled?: boolean): ImageRequest;
15
15
  export {};
@@ -0,0 +1,11 @@
1
+ /** The DOM image supplies geometry and the public media handle; Canvas uses the prepared pixel source. */
2
+ export interface ImageResource {
3
+ image: HTMLImageElement;
4
+ source: HTMLImageElement | ImageBitmap;
5
+ motionSource: HTMLImageElement | ImageBitmap;
6
+ bytes: number;
7
+ dispose: () => void;
8
+ }
9
+ export declare function imageElementResource(image: HTMLImageElement): ImageResource;
10
+ /** Blob decoding avoids Chromium's scale-dependent lazy JPEG decode during drawImage. */
11
+ export declare function prepareImageResource(image: HTMLImageElement, blob: Blob, signal: AbortSignal): Promise<ImageResource>;
@@ -1,11 +1,14 @@
1
1
  import type { ImageLoader } from "./imageTransport";
2
+ import type { ImageResource } from "./imageResource";
2
3
  export interface ImageLease {
3
4
  ready: Promise<HTMLImageElement>;
5
+ resource: Promise<ImageResource>;
4
6
  release: () => void;
5
7
  }
6
8
  export interface ImageRequestOptions {
7
9
  priority?: number;
8
10
  maxBytes?: number;
11
+ maxPixels?: number;
9
12
  }
10
13
  /** Shared ownership, bounded fetch/decode concurrency and cancellation of unowned requests. */
11
14
  export declare class ImageStore {
@@ -1,9 +1,9 @@
1
- export declare class ImageLimitError extends Error {
2
- constructor(message: string);
3
- }
1
+ import type { ImageResource } from "./imageResource";
2
+ export { ImageLimitError } from "./validation/image";
4
3
  export interface ImageLoadOptions {
5
4
  signal: AbortSignal;
6
5
  readonly maxBytes: number;
6
+ readonly maxPixels: number;
7
7
  }
8
- export type ImageLoader = (url: string, options: ImageLoadOptions) => Promise<HTMLImageElement>;
8
+ export type ImageLoader = (url: string, options: ImageLoadOptions) => Promise<ImageResource>;
9
9
  export declare const loadImage: ImageLoader;
@@ -0,0 +1,13 @@
1
+ export declare class ImageLimitError extends Error {
2
+ constructor(message: string);
3
+ }
4
+ /** Apply the same decoded-pixel boundary to downloads and every cached-resource owner. */
5
+ export declare function assertImagePixels(image: HTMLImageElement, maxPixels: number): void;
6
+ export declare const originalLimitReason = "\u539F\u56FE\u8D85\u8FC7\u8D44\u6E90\u9650\u5236";
7
+ export declare function originalLoadFailure(error: unknown): {
8
+ status: "blocked";
9
+ reason: string;
10
+ } | {
11
+ status: "error";
12
+ reason: string;
13
+ };
@@ -0,0 +1,8 @@
1
+ import type { PreviewMedia } from "../../types";
2
+ import type { VideoSourceLoader, VideoSourceObserver } from "./types";
3
+ /** Retire callbacks before cleanup can dispatch queued media/transport events. */
4
+ export declare function createVideoSourceSession(observer: VideoSourceObserver): {
5
+ clear: () => void;
6
+ dispose: () => void;
7
+ start(video: HTMLVideoElement, media: PreviewMedia, loader: VideoSourceLoader): void;
8
+ };
@@ -0,0 +1,8 @@
1
+ import type { PreviewMedia } from "../../types";
2
+ /** Hosts own transport; the component owns playback and the effective timeline. */
3
+ export type VideoSourceLoader = (video: HTMLVideoElement, media: PreviewMedia, reportError: (error: Error) => void, reportDuration: (seconds: number) => void) => () => void;
4
+ export interface VideoSourceObserver {
5
+ error: (error: Error) => void;
6
+ duration: (seconds: number) => void;
7
+ reset: () => void;
8
+ }
@@ -0,0 +1,12 @@
1
+ export interface BufferedRange {
2
+ start: number;
3
+ end: number;
4
+ }
5
+ export type CompletedBuffer = {
6
+ kind: "pending";
7
+ } | {
8
+ kind: "retained";
9
+ end: number;
10
+ };
11
+ /** Preserve holes and normalize the retained tail once playback has reached its end. */
12
+ export declare function readBufferedRanges(video: HTMLVideoElement, duration: number, completed: CompletedBuffer): BufferedRange[];
@@ -0,0 +1,15 @@
1
+ import { type BufferedRange } from "./buffered";
2
+ export interface VideoTimelineSnapshot {
3
+ duration: number;
4
+ time: number;
5
+ buffered: number;
6
+ bufferedRanges: BufferedRange[];
7
+ }
8
+ export declare function emptyVideoTimeline(): VideoTimelineSnapshot;
9
+ /** One source of timing truth for text, seek bounds, playback and retained buffers. */
10
+ export declare function createVideoTimeline(): {
11
+ setDuration(seconds: number): void;
12
+ complete(video: HTMLVideoElement): void;
13
+ reset(): void;
14
+ read(video: HTMLVideoElement, ended: boolean): VideoTimelineSnapshot;
15
+ };
@@ -0,0 +1,3 @@
1
+ /** UI text truncates seconds; timeline calculations retain their fractional precision. */
2
+ export declare function formatVideoTime(seconds: number): string;
3
+ export declare function finiteDuration(seconds: number): number;
@@ -1,22 +1,30 @@
1
- export declare function formatVideoTime(seconds: number): string;
1
+ export { formatVideoTime } from "./timeline/time";
2
2
  /** Playback owns media state; the preview still owns navigation and transitions. */
3
3
  export declare function useVideoPlayback(video: () => HTMLVideoElement, reportError: (error: Error) => void): {
4
4
  state: {
5
- playing: boolean;
6
- buffering: boolean;
7
- duration: number;
8
- time: number;
9
- buffered: number;
10
5
  muted: boolean;
11
6
  ended: boolean;
12
7
  scrubbing: boolean;
13
8
  scrubTime: number;
14
9
  status: "loading" | "ready" | "error";
10
+ duration: number;
11
+ time: number;
12
+ buffered: number;
13
+ bufferedRanges: {
14
+ start: number;
15
+ end: number;
16
+ }[];
17
+ playing: boolean;
18
+ buffering: boolean;
15
19
  };
16
20
  seekable: import("vue").ComputedRef<boolean>;
17
21
  displayTime: import("vue").ComputedRef<number>;
18
22
  progress: import("vue").ComputedRef<number>;
19
23
  bufferedProgress: import("vue").ComputedRef<number>;
24
+ bufferedRanges: import("vue").ComputedRef<{
25
+ left: number;
26
+ width: number;
27
+ }[]>;
20
28
  events: {
21
29
  loadedmetadata: () => void;
22
30
  durationchange: () => void;
@@ -24,6 +32,7 @@ export declare function useVideoPlayback(video: () => HTMLVideoElement, reportEr
24
32
  progress: () => void;
25
33
  loadeddata: () => void;
26
34
  canplay: () => void;
35
+ canplaythrough: () => void;
27
36
  play: () => void;
28
37
  playing: () => void;
29
38
  pause: () => void;
@@ -42,5 +51,12 @@ export declare function useVideoPlayback(video: () => HTMLVideoElement, reportEr
42
51
  endScrub: (commit?: boolean) => void;
43
52
  toggleMuted: () => void;
44
53
  retry: () => void;
54
+ setSourceDuration: (seconds: number) => void;
55
+ resetSource: () => void;
56
+ sourceObserver: {
57
+ error: (error: Error) => void;
58
+ duration: (seconds: number) => void;
59
+ reset: () => void;
60
+ };
45
61
  dispose: () => void;
46
62
  };
@@ -1,5 +1,5 @@
1
1
  import type { PreviewMedia } from "../types";
2
- /** A host can attach its own streaming transport without coupling the renderer to it. */
3
- export type VideoSourceLoader = (video: HTMLVideoElement, media: PreviewMedia, reportError: (error: Error) => void) => () => void;
2
+ import type { VideoSourceLoader, VideoSourceObserver } from "./source/types";
3
+ export type { VideoSourceLoader } from "./source/types";
4
4
  export declare const nativeVideoSource: VideoSourceLoader;
5
- export declare function useVideoSource(video: () => HTMLVideoElement, media: () => PreviewMedia, enabled: () => boolean, loader: () => VideoSourceLoader, reportError: (error: Error) => void): () => number;
5
+ export declare function useVideoSource(video: () => HTMLVideoElement, media: () => PreviewMedia, enabled: () => boolean, loader: () => VideoSourceLoader, observer: VideoSourceObserver): () => number;
package/dist/index.d.ts CHANGED
@@ -12,6 +12,8 @@ export { default as VirtualTimeline } from "./components/VirtualTimeline.vue";
12
12
  export { defaultImagePolicy, defaultImageSource } from "./core/resources/imagePolicy";
13
13
  export type { ImagePolicy, ImageSourceResolver, ImageQuality, OriginalStatus, } from "./core/resources/imagePolicy";
14
14
  export { previewImageStore, ImageStore } from "./core/resources/imageStore";
15
+ export type { ImageLease, ImageRequestOptions } from "./core/resources/imageStore";
16
+ export type { ImageResource } from "./core/resources/imageResource";
15
17
  export type { TimelineGroup, VirtualTimelineHandle } from "./core/timeline/layout";
16
18
  export { nativeVideoSource } from "./core/video/useVideoSource";
17
19
  export type { VideoSourceLoader } from "./core/video/useVideoSource";
@@ -8,6 +8,7 @@ type __VLS_Props = {
8
8
  rendering?: boolean;
9
9
  requestVersion?: number;
10
10
  loadEnabled?: boolean;
11
+ originalEnabled?: boolean;
11
12
  priority?: number;
12
13
  resourcePolicy?: ImagePolicy;
13
14
  resolveSource?: ImageSourceResolver;
@@ -18,32 +19,40 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_WithDefaults<__V
18
19
  initialImage: () => InitialImage;
19
20
  rendering: boolean;
20
21
  loadEnabled: boolean;
22
+ originalEnabled: boolean;
21
23
  requestVersion: number;
22
24
  priority: number;
23
25
  resourcePolicy: () => ImagePolicy;
24
26
  resolveSource: ImageSourceResolver;
25
- }>, unknown, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
27
+ }>, {
28
+ captureFrame: () => {
29
+ image: HTMLImageElement | ImageBitmap;
30
+ scale: number;
31
+ };
32
+ }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
26
33
  error: (error: Error) => void;
27
- ready: (quality: "thumbnail" | "screen" | "full") => void;
34
+ ready: (quality: "full" | "thumbnail" | "screen") => void;
28
35
  originalState: (status: OriginalStatus, reason: string) => void;
29
36
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<__VLS_Props>, {
30
37
  quality: string;
31
38
  initialImage: () => InitialImage;
32
39
  rendering: boolean;
33
40
  loadEnabled: boolean;
41
+ originalEnabled: boolean;
34
42
  requestVersion: number;
35
43
  priority: number;
36
44
  resourcePolicy: () => ImagePolicy;
37
45
  resolveSource: ImageSourceResolver;
38
46
  }>>> & {
39
47
  onError?: ((error: Error) => any) | undefined;
40
- onReady?: ((quality: "thumbnail" | "screen" | "full") => any) | undefined;
48
+ onReady?: ((quality: "full" | "thumbnail" | "screen") => any) | undefined;
41
49
  onOriginalState?: ((status: OriginalStatus, reason: string) => any) | undefined;
42
50
  }, {
43
51
  quality: ImageQuality;
44
52
  rendering: boolean;
45
53
  requestVersion: number;
46
54
  loadEnabled: boolean;
55
+ originalEnabled: boolean;
47
56
  priority: number;
48
57
  resourcePolicy: ImagePolicy;
49
58
  resolveSource: ImageSourceResolver;
@@ -37,7 +37,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_WithDefaults<__V
37
37
  captureFrame: typeof captureFrame;
38
38
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
39
39
  error: (error: Error) => void;
40
- ready: (quality: "thumbnail" | "screen" | "full") => void;
40
+ ready: (quality: "full" | "thumbnail" | "screen") => void;
41
41
  originalState: (status: OriginalStatus, reason: string) => void;
42
42
  liveState: (status: LivePhotoStatus) => void;
43
43
  liveEnded: () => void;
@@ -55,7 +55,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_WithDefaults<__V
55
55
  resolveSource: ImageSourceResolver;
56
56
  }>>> & {
57
57
  onError?: ((error: Error) => any) | undefined;
58
- onReady?: ((quality: "thumbnail" | "screen" | "full") => any) | undefined;
58
+ onReady?: ((quality: "full" | "thumbnail" | "screen") => any) | undefined;
59
59
  onOriginalState?: ((status: OriginalStatus, reason: string) => any) | undefined;
60
60
  onLiveState?: ((status: LivePhotoStatus) => any) | undefined;
61
61
  onLiveEnded?: (() => any) | undefined;
@@ -54,21 +54,29 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_WithDefaults<__V
54
54
  toggleFullscreen: typeof toggleFullscreen;
55
55
  playback: {
56
56
  state: {
57
- playing: boolean;
58
- buffering: boolean;
59
- duration: number;
60
- time: number;
61
- buffered: number;
62
57
  muted: boolean;
63
58
  ended: boolean;
64
59
  scrubbing: boolean;
65
60
  scrubTime: number;
66
61
  status: "loading" | "ready" | "error";
62
+ duration: number;
63
+ time: number;
64
+ buffered: number;
65
+ bufferedRanges: {
66
+ start: number;
67
+ end: number;
68
+ }[];
69
+ playing: boolean;
70
+ buffering: boolean;
67
71
  };
68
72
  seekable: import("vue").ComputedRef<boolean>;
69
73
  displayTime: import("vue").ComputedRef<number>;
70
74
  progress: import("vue").ComputedRef<number>;
71
75
  bufferedProgress: import("vue").ComputedRef<number>;
76
+ bufferedRanges: import("vue").ComputedRef<{
77
+ left: number;
78
+ width: number;
79
+ }[]>;
72
80
  events: {
73
81
  loadedmetadata: () => void;
74
82
  durationchange: () => void;
@@ -76,6 +84,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_WithDefaults<__V
76
84
  progress: () => void;
77
85
  loadeddata: () => void;
78
86
  canplay: () => void;
87
+ canplaythrough: () => void;
79
88
  play: () => void;
80
89
  playing: () => void;
81
90
  pause: () => void;
@@ -94,12 +103,19 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_WithDefaults<__V
94
103
  endScrub: (commit?: boolean) => void;
95
104
  toggleMuted: () => void;
96
105
  retry: () => void;
106
+ setSourceDuration: (seconds: number) => void;
107
+ resetSource: () => void;
108
+ sourceObserver: {
109
+ error: (error: Error) => void;
110
+ duration: (seconds: number) => void;
111
+ reset: () => void;
112
+ };
97
113
  dispose: () => void;
98
114
  };
99
115
  captureFrame: typeof captureFrame;
100
116
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
101
117
  error: (error: Error) => void;
102
- ready: (quality: "thumbnail" | "screen" | "full") => void;
118
+ ready: (quality: "full" | "thumbnail" | "screen") => void;
103
119
  originalState: (status: OriginalStatus, reason: string) => void;
104
120
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<__VLS_Props>, {
105
121
  initialImage: () => InitialImage;
@@ -122,7 +138,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_WithDefaults<__V
122
138
  controlsTarget: string;
123
139
  }>>> & {
124
140
  onError?: ((error: Error) => any) | undefined;
125
- onReady?: ((quality: "thumbnail" | "screen" | "full") => any) | undefined;
141
+ onReady?: ((quality: "full" | "thumbnail" | "screen") => any) | undefined;
126
142
  onOriginalState?: ((status: OriginalStatus, reason: string) => any) | undefined;
127
143
  }, {
128
144
  active: boolean;