@gradio/video 0.17.0-dev.0 → 0.17.0-dev.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.
package/dist/Index.svelte CHANGED
@@ -1,103 +1,109 @@
1
1
  <svelte:options accessors={true} />
2
2
 
3
- <script>import { Block, UploadText } from "@gradio/atoms";
4
- import StaticVideo from "./shared/VideoPreview.svelte";
5
- import Video from "./shared/InteractiveVideo.svelte";
6
- import { StatusTracker } from "@gradio/statustracker";
7
- export let elem_id = "";
8
- export let elem_classes = [];
9
- export let visible = true;
10
- export let value = null;
11
- let old_value = null;
12
- export let subtitles = null;
13
- export let label;
14
- export let sources;
15
- export let root;
16
- export let show_label;
17
- export let loading_status;
18
- export let height;
19
- export let width;
20
- export let container = false;
21
- export let scale = null;
22
- export let min_width = void 0;
23
- export let autoplay = false;
24
- export let buttons = null;
25
- export let gradio;
26
- export let interactive;
27
- export let webcam_options;
28
- export let include_audio;
29
- export let loop = false;
30
- export let input_ready;
31
- let uploading = false;
32
- $: input_ready = !uploading;
33
- let active_source;
34
- let initial_value = null;
35
- $: if (value && initial_value === null) {
36
- initial_value = value;
37
- }
38
- const handle_reset_value = () => {
39
- if (initial_value === null || value === initial_value) {
40
- return;
41
- }
42
- value = initial_value;
43
- };
44
- $: if (sources && !active_source) {
45
- active_source = sources[0];
46
- }
47
- let dragging = false;
48
- $: {
49
- if (JSON.stringify(value) !== JSON.stringify(old_value)) {
50
- old_value = value;
51
- gradio.dispatch("change");
52
- }
53
- }
54
- function handle_change({ detail }) {
55
- if (detail != null) {
56
- value = detail;
57
- } else {
58
- value = null;
59
- }
60
- }
61
- function handle_error({ detail }) {
62
- const [level, status] = detail.includes("Invalid file type") ? ["warning", "complete"] : ["error", "error"];
63
- loading_status = loading_status || {};
64
- loading_status.status = status;
65
- loading_status.message = detail;
66
- gradio.dispatch(level, detail);
67
- }
3
+ <script lang="ts">
4
+ import { tick } from "svelte";
5
+ import type { FileData } from "@gradio/client";
6
+ import { Block, UploadText } from "@gradio/atoms";
7
+ import StaticVideo from "./shared/VideoPreview.svelte";
8
+ import Video from "./shared/InteractiveVideo.svelte";
9
+ import { StatusTracker } from "@gradio/statustracker";
10
+ import { Gradio } from "@gradio/utils";
11
+ import type { VideoProps, VideoEvents } from "./types";
12
+
13
+ const props = $props();
14
+
15
+ let upload_promise = $state<Promise<any>>();
16
+
17
+ class VideoGradio extends Gradio<VideoEvents, VideoProps> {
18
+ async get_data() {
19
+ if (upload_promise) {
20
+ await upload_promise;
21
+ await tick();
22
+ }
23
+ const data = await super.get_data();
24
+
25
+ return data;
26
+ }
27
+ }
28
+
29
+ const gradio = new VideoGradio(props);
30
+ let old_value = $state(gradio.props.value);
31
+
32
+ let uploading = $state(false);
33
+ let dragging = $state(false);
34
+ let active_source = $derived.by(() =>
35
+ gradio.props.sources ? gradio.props.sources[0] : undefined
36
+ );
37
+ let initial_value: FileData | null = gradio.props.value;
38
+
39
+ $effect(() => {
40
+ if (old_value != gradio.props.value) {
41
+ old_value = gradio.props.value;
42
+ gradio.dispatch("change");
43
+ }
44
+ });
45
+
46
+ const handle_reset_value = (): void => {
47
+ if (initial_value === null || gradio.props.value === initial_value) {
48
+ return;
49
+ }
50
+ gradio.props.value = initial_value;
51
+ };
52
+
53
+ function handle_change({ detail }: CustomEvent<FileData | null>): void {
54
+ if (detail != null) {
55
+ gradio.props.value = detail as FileData;
56
+ } else {
57
+ gradio.props.value = null;
58
+ }
59
+ }
60
+
61
+ function handle_error({ detail }: CustomEvent<string>): void {
62
+ const [level, status] = detail.includes("Invalid file type")
63
+ ? ["warning", "complete"]
64
+ : ["error", "error"];
65
+ gradio.shared.loading_status.status = status as any;
66
+ gradio.shared.loading_status.message = detail;
67
+ gradio.dispatch(level as "error" | "warning", detail);
68
+ }
68
69
  </script>
69
70
 
70
- {#if !interactive}
71
+ {#if !gradio.shared.interactive}
71
72
  <Block
72
- {visible}
73
- variant={value === null && active_source === "upload" ? "dashed" : "solid"}
73
+ visible={gradio.shared.visible}
74
+ variant={gradio.props.value === null && active_source === "upload"
75
+ ? "dashed"
76
+ : "solid"}
74
77
  border_mode={dragging ? "focus" : "base"}
75
78
  padding={false}
76
- {elem_id}
77
- {elem_classes}
78
- {height}
79
- {width}
80
- {container}
81
- {scale}
82
- {min_width}
79
+ elem_id={gradio.shared.elem_id}
80
+ elem_classes={gradio.shared.elem_classes}
81
+ height={gradio.props.height || undefined}
82
+ width={gradio.props.width}
83
+ container={gradio.shared.container}
84
+ scale={gradio.shared.scale}
85
+ min_width={gradio.shared.min_width}
83
86
  allow_overflow={false}
84
87
  >
85
88
  <StatusTracker
86
- autoscroll={gradio.autoscroll}
89
+ autoscroll={gradio.shared.autoscroll}
87
90
  i18n={gradio.i18n}
88
- {...loading_status}
89
- on:clear_status={() => gradio.dispatch("clear_status", loading_status)}
91
+ {...gradio.shared.loading_status}
92
+ on:clear_status={() =>
93
+ gradio.dispatch("clear_status", gradio.shared.loading_status)}
90
94
  />
91
95
 
92
96
  <StaticVideo
93
- {value}
94
- subtitle={subtitles}
95
- {label}
96
- {show_label}
97
- {autoplay}
98
- {loop}
99
- show_share_button={buttons?.includes("share") ?? true}
100
- show_download_button={buttons?.includes("download") ?? true}
97
+ value={gradio.props.value}
98
+ subtitle={gradio.props.subtitles}
99
+ label={gradio.shared.label}
100
+ show_label={gradio.shared.show_label}
101
+ autoplay={gradio.props.autoplay}
102
+ loop={gradio.props.loop}
103
+ show_share_button={(gradio.props.buttons || []).includes("share")}
104
+ show_download_button={(gradio.props.buttons || ["download"]).includes(
105
+ "download"
106
+ )}
101
107
  on:play={() => gradio.dispatch("play")}
102
108
  on:pause={() => gradio.dispatch("pause")}
103
109
  on:stop={() => gradio.dispatch("stop")}
@@ -105,50 +111,57 @@ function handle_error({ detail }) {
105
111
  on:share={({ detail }) => gradio.dispatch("share", detail)}
106
112
  on:error={({ detail }) => gradio.dispatch("error", detail)}
107
113
  i18n={gradio.i18n}
108
- upload={(...args) => gradio.client.upload(...args)}
114
+ upload={(...args) => gradio.shared.client.upload(...args)}
109
115
  />
110
116
  </Block>
111
117
  {:else}
112
118
  <Block
113
- {visible}
114
- variant={value === null && active_source === "upload" ? "dashed" : "solid"}
119
+ visible={gradio.shared.visible}
120
+ variant={gradio.props.value === null && active_source === "upload"
121
+ ? "dashed"
122
+ : "solid"}
115
123
  border_mode={dragging ? "focus" : "base"}
116
124
  padding={false}
117
- {elem_id}
118
- {elem_classes}
119
- {height}
120
- {width}
121
- {container}
122
- {scale}
123
- {min_width}
125
+ elem_id={gradio.shared.elem_id}
126
+ elem_classes={gradio.shared.elem_classes}
127
+ height={gradio.props.height || undefined}
128
+ width={gradio.props.width}
129
+ container={gradio.shared.container}
130
+ scale={gradio.shared.scale}
131
+ min_width={gradio.shared.min_width}
124
132
  allow_overflow={false}
125
133
  >
126
134
  <StatusTracker
127
- autoscroll={gradio.autoscroll}
135
+ autoscroll={gradio.shared.autoscroll}
128
136
  i18n={gradio.i18n}
129
- {...loading_status}
130
- on:clear_status={() => gradio.dispatch("clear_status", loading_status)}
137
+ {...gradio.shared.loading_status}
138
+ on:clear_status={() =>
139
+ gradio.dispatch("clear_status", gradio.shared.loading_status)}
131
140
  />
132
141
 
133
142
  <Video
134
- {value}
135
- subtitle={subtitles}
143
+ bind:upload_promise
144
+ value={gradio.props.value}
145
+ subtitle={gradio.props.subtitles}
136
146
  on:change={handle_change}
137
147
  on:drag={({ detail }) => (dragging = detail)}
138
148
  on:error={handle_error}
139
149
  bind:uploading
140
- {label}
141
- {show_label}
142
- show_download_button={buttons?.includes("download") ?? false}
143
- {sources}
150
+ label={gradio.shared.label}
151
+ show_label={gradio.shared.show_label}
152
+ show_download_button={(gradio.props.buttons || []).includes("download")}
153
+ sources={gradio.props.sources}
144
154
  {active_source}
145
- {webcam_options}
146
- {include_audio}
147
- {autoplay}
148
- {root}
149
- {loop}
155
+ webcam_options={gradio.props.webcam_options}
156
+ include_audio={gradio.props.include_audio}
157
+ autoplay={gradio.props.autoplay}
158
+ root={gradio.shared.root}
159
+ loop={gradio.props.loop}
150
160
  {handle_reset_value}
151
- on:clear={() => gradio.dispatch("clear")}
161
+ on:clear={() => {
162
+ gradio.props.value = null;
163
+ gradio.dispatch("clear");
164
+ }}
152
165
  on:play={() => gradio.dispatch("play")}
153
166
  on:pause={() => gradio.dispatch("pause")}
154
167
  on:upload={() => gradio.dispatch("upload")}
@@ -157,9 +170,9 @@ function handle_error({ detail }) {
157
170
  on:start_recording={() => gradio.dispatch("start_recording")}
158
171
  on:stop_recording={() => gradio.dispatch("stop_recording")}
159
172
  i18n={gradio.i18n}
160
- max_file_size={gradio.max_file_size}
161
- upload={(...args) => gradio.client.upload(...args)}
162
- stream_handler={(...args) => gradio.client.stream(...args)}
173
+ max_file_size={gradio.shared.max_file_size}
174
+ upload={(...args) => gradio.shared.client.upload(...args)}
175
+ stream_handler={(...args) => gradio.shared.client.stream(...args)}
163
176
  >
164
177
  <UploadText i18n={gradio.i18n} type="video" />
165
178
  </Video>
@@ -1,155 +1,3 @@
1
- import { SvelteComponent } from "svelte";
2
- import type { Gradio, ShareData } from "@gradio/utils";
3
- import type { FileData } from "@gradio/client";
4
- import type { LoadingStatus } from "@gradio/statustracker";
5
- import type { WebcamOptions } from "./shared/utils";
6
- declare const __propDef: {
7
- props: {
8
- elem_id?: string;
9
- elem_classes?: string[];
10
- visible?: boolean | "hidden";
11
- value?: null | FileData;
12
- subtitles?: null | FileData;
13
- label: string;
14
- sources: ["webcam"] | ["upload"] | ["webcam", "upload"] | ["upload", "webcam"];
15
- root: string;
16
- show_label: boolean;
17
- loading_status: LoadingStatus;
18
- height: number | undefined;
19
- width: number | undefined;
20
- container?: boolean;
21
- scale?: number | null;
22
- min_width?: number | undefined;
23
- autoplay?: boolean;
24
- buttons?: string[] | null;
25
- gradio: Gradio<{
26
- change: never;
27
- clear: never;
28
- play: never;
29
- pause: never;
30
- upload: never;
31
- stop: never;
32
- end: never;
33
- start_recording: never;
34
- stop_recording: never;
35
- share: ShareData;
36
- error: string;
37
- warning: string;
38
- clear_status: LoadingStatus;
39
- }>;
40
- interactive: boolean;
41
- webcam_options: WebcamOptions;
42
- include_audio: boolean;
43
- loop?: boolean;
44
- input_ready: boolean;
45
- };
46
- events: {
47
- [evt: string]: CustomEvent<any>;
48
- };
49
- slots: {};
50
- exports?: {} | undefined;
51
- bindings?: string | undefined;
52
- };
53
- export type IndexProps = typeof __propDef.props;
54
- export type IndexEvents = typeof __propDef.events;
55
- export type IndexSlots = typeof __propDef.slots;
56
- export default class Index extends SvelteComponent<IndexProps, IndexEvents, IndexSlots> {
57
- get elem_id(): string | undefined;
58
- /**accessor*/
59
- set elem_id(_: string | undefined);
60
- get elem_classes(): string[] | undefined;
61
- /**accessor*/
62
- set elem_classes(_: string[] | undefined);
63
- get visible(): boolean | "hidden" | undefined;
64
- /**accessor*/
65
- set visible(_: boolean | "hidden" | undefined);
66
- get value(): any;
67
- /**accessor*/
68
- set value(_: any);
69
- get subtitles(): any;
70
- /**accessor*/
71
- set subtitles(_: any);
72
- get label(): string;
73
- /**accessor*/
74
- set label(_: string);
75
- get sources(): ["upload"] | ["webcam"] | ["webcam", "upload"] | ["upload", "webcam"];
76
- /**accessor*/
77
- set sources(_: ["upload"] | ["webcam"] | ["webcam", "upload"] | ["upload", "webcam"]);
78
- get root(): string;
79
- /**accessor*/
80
- set root(_: string);
81
- get show_label(): boolean;
82
- /**accessor*/
83
- set show_label(_: boolean);
84
- get loading_status(): LoadingStatus;
85
- /**accessor*/
86
- set loading_status(_: LoadingStatus);
87
- get height(): number | undefined;
88
- /**accessor*/
89
- set height(_: number | undefined);
90
- get width(): number | undefined;
91
- /**accessor*/
92
- set width(_: number | undefined);
93
- get container(): boolean | undefined;
94
- /**accessor*/
95
- set container(_: boolean | undefined);
96
- get scale(): number | null | undefined;
97
- /**accessor*/
98
- set scale(_: number | null | undefined);
99
- get min_width(): number | undefined;
100
- /**accessor*/
101
- set min_width(_: number | undefined);
102
- get autoplay(): boolean | undefined;
103
- /**accessor*/
104
- set autoplay(_: boolean | undefined);
105
- get buttons(): string[] | null | undefined;
106
- /**accessor*/
107
- set buttons(_: string[] | null | undefined);
108
- get gradio(): Gradio<{
109
- change: never;
110
- clear: never;
111
- play: never;
112
- pause: never;
113
- upload: never;
114
- stop: never;
115
- end: never;
116
- start_recording: never;
117
- stop_recording: never;
118
- share: ShareData;
119
- error: string;
120
- warning: string;
121
- clear_status: LoadingStatus;
122
- }>;
123
- /**accessor*/
124
- set gradio(_: Gradio<{
125
- change: never;
126
- clear: never;
127
- play: never;
128
- pause: never;
129
- upload: never;
130
- stop: never;
131
- end: never;
132
- start_recording: never;
133
- stop_recording: never;
134
- share: ShareData;
135
- error: string;
136
- warning: string;
137
- clear_status: LoadingStatus;
138
- }>);
139
- get interactive(): boolean;
140
- /**accessor*/
141
- set interactive(_: boolean);
142
- get webcam_options(): WebcamOptions;
143
- /**accessor*/
144
- set webcam_options(_: WebcamOptions);
145
- get include_audio(): boolean;
146
- /**accessor*/
147
- set include_audio(_: boolean);
148
- get loop(): boolean | undefined;
149
- /**accessor*/
150
- set loop(_: boolean | undefined);
151
- get input_ready(): boolean;
152
- /**accessor*/
153
- set input_ready(_: boolean);
154
- }
155
- export {};
1
+ declare const Index: import("svelte").Component<$$ComponentProps, {}, "">;
2
+ type Index = ReturnType<typeof Index>;
3
+ export default Index;
@@ -1,61 +1,89 @@
1
- <script>import { createEventDispatcher } from "svelte";
2
- import { Upload, ModifyUpload } from "@gradio/upload";
3
- import { BlockLabel } from "@gradio/atoms";
4
- import { Webcam } from "@gradio/image";
5
- import { Video } from "@gradio/icons";
6
- import { prettyBytes, playable } from "./utils";
7
- import Player from "./Player.svelte";
8
- import { SelectSource } from "@gradio/atoms";
9
- export let value = null;
10
- export let subtitle = null;
11
- export let sources = ["webcam", "upload"];
12
- export let label = void 0;
13
- export let show_download_button = false;
14
- export let show_label = true;
15
- export let webcam_options;
16
- export let include_audio;
17
- export let autoplay;
18
- export let root;
19
- export let i18n;
20
- export let active_source = "webcam";
21
- export let handle_reset_value = () => {
22
- };
23
- export let max_file_size = null;
24
- export let upload;
25
- export let stream_handler;
26
- export let loop;
27
- export let uploading = false;
28
- let has_change_history = false;
29
- const dispatch = createEventDispatcher();
30
- function handle_load({ detail }) {
31
- value = detail;
32
- dispatch("change", detail);
33
- dispatch("upload", detail);
34
- }
35
- function handle_clear() {
36
- value = null;
37
- dispatch("change", null);
38
- dispatch("clear");
39
- }
40
- function handle_change(video) {
41
- has_change_history = true;
42
- dispatch("change", video);
43
- }
44
- function handle_capture({
45
- detail
46
- }) {
47
- dispatch("change", detail);
48
- }
49
- let dragging = false;
50
- $: dispatch("drag", dragging);
1
+ <script lang="ts">
2
+ import { createEventDispatcher } from "svelte";
3
+ import { Upload, ModifyUpload } from "@gradio/upload";
4
+ import type { FileData, Client } from "@gradio/client";
5
+ import { BlockLabel } from "@gradio/atoms";
6
+ import { Webcam } from "@gradio/image";
7
+ import { Video } from "@gradio/icons";
8
+ import type { WebcamOptions } from "./utils";
9
+ import { prettyBytes, playable } from "./utils";
10
+ import Player from "./Player.svelte";
11
+ import type { I18nFormatter } from "@gradio/utils";
12
+ import { SelectSource } from "@gradio/atoms";
13
+
14
+ export let value: FileData | null = null;
15
+ export let subtitle: FileData | null = null;
16
+ export let sources:
17
+ | ["webcam"]
18
+ | ["upload"]
19
+ | ["webcam", "upload"]
20
+ | ["upload", "webcam"] = ["webcam", "upload"];
21
+ export let label: string | undefined = undefined;
22
+ export let show_download_button = false;
23
+ export let show_label = true;
24
+ export let webcam_options: WebcamOptions;
25
+ export let include_audio: boolean;
26
+ export let autoplay: boolean;
27
+ export let root: string;
28
+ export let i18n: I18nFormatter;
29
+ export let active_source: "webcam" | "upload" = "webcam";
30
+ export let handle_reset_value: () => void = () => {};
31
+ export let max_file_size: number | null = null;
32
+ export let upload: Client["upload"];
33
+ export let stream_handler: Client["stream"];
34
+ export let loop: boolean;
35
+ export let uploading = false;
36
+ export let upload_promise: Promise<any> | null = null;
37
+
38
+ let has_change_history = false;
39
+
40
+ const dispatch = createEventDispatcher<{
41
+ change: FileData | null;
42
+ clear?: never;
43
+ play?: never;
44
+ pause?: never;
45
+ end?: never;
46
+ drag: boolean;
47
+ error: string;
48
+ upload: FileData;
49
+ start_recording?: never;
50
+ stop_recording?: never;
51
+ }>();
52
+
53
+ function handle_load({ detail }: CustomEvent<FileData | null>): void {
54
+ value = detail;
55
+ dispatch("change", detail);
56
+ dispatch("upload", detail!);
57
+ }
58
+
59
+ function handle_clear(): void {
60
+ value = null;
61
+ dispatch("change", null);
62
+ dispatch("clear");
63
+ }
64
+
65
+ function handle_change(video: FileData): void {
66
+ has_change_history = true;
67
+ dispatch("change", video);
68
+ }
69
+
70
+ function handle_capture({
71
+ detail
72
+ }: CustomEvent<FileData | any | null>): void {
73
+ dispatch("change", detail);
74
+ }
75
+
76
+ let dragging = false;
77
+ $: dispatch("drag", dragging);
51
78
  </script>
52
79
 
53
80
  <BlockLabel {show_label} Icon={Video} label={label || "Video"} />
54
81
  <div data-testid="video" class="video-container">
55
- {#if value === null || value.url === undefined}
82
+ {#if value === null || value?.url === undefined}
56
83
  <div class="upload-container">
57
84
  {#if active_source === "upload"}
58
85
  <Upload
86
+ bind:upload_promise
59
87
  bind:dragging
60
88
  bind:uploading
61
89
  filetype="video/x-m4v,video/*"