@gradio/image 0.23.1 → 0.24.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/CHANGELOG.md +42 -0
- package/Image.test.ts +3 -3
- package/Index.svelte +106 -137
- package/dist/Example.svelte +7 -4
- package/dist/Example.svelte.d.ts +20 -18
- package/dist/Index.svelte +148 -148
- package/dist/Index.svelte.d.ts +3 -178
- package/dist/shared/Image.svelte +19 -2
- package/dist/shared/Image.svelte.d.ts +24 -19
- package/dist/shared/ImagePreview.svelte +54 -37
- package/dist/shared/ImagePreview.svelte.d.ts +33 -32
- package/dist/shared/ImageUploader.svelte +185 -138
- package/dist/shared/ImageUploader.svelte.d.ts +59 -49
- package/dist/shared/Webcam.svelte +264 -228
- package/dist/shared/Webcam.svelte.d.ts +42 -41
- package/dist/shared/WebcamPermissions.svelte +7 -3
- package/dist/shared/WebcamPermissions.svelte.d.ts +18 -16
- package/dist/shared/types.d.ts +30 -0
- package/package.json +11 -11
- package/shared/Image.svelte +18 -9
- package/shared/ImagePreview.svelte +12 -8
- package/shared/ImageUploader.svelte +9 -6
- package/shared/Webcam.svelte +6 -30
- package/shared/types.ts +33 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,47 @@
|
|
|
1
1
|
# @gradio/image
|
|
2
2
|
|
|
3
|
+
## 0.24.0-dev.2
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- [#12102](https://github.com/gradio-app/gradio/pull/12102) [`baa1cd6`](https://github.com/gradio-app/gradio/commit/baa1cd67573292f95d4b4263c8f15fe89fbeeaa1) - Improve audio player UI in gr.Chatbot. Thanks @hannahblair!
|
|
8
|
+
|
|
9
|
+
### Dependency updates
|
|
10
|
+
|
|
11
|
+
- @gradio/atoms@0.19.0-dev.1
|
|
12
|
+
- @gradio/client@2.0.0-dev.2
|
|
13
|
+
- @gradio/statustracker@0.12.0-dev.1
|
|
14
|
+
- @gradio/upload@0.17.2-dev.2
|
|
15
|
+
|
|
16
|
+
## 0.23.2-dev.1
|
|
17
|
+
|
|
18
|
+
### Dependency updates
|
|
19
|
+
|
|
20
|
+
- @gradio/atoms@0.18.2-dev.0
|
|
21
|
+
- @gradio/upload@0.17.2-dev.1
|
|
22
|
+
- @gradio/utils@0.10.3-dev.0
|
|
23
|
+
- @gradio/statustracker@0.12.0-dev.0
|
|
24
|
+
- @gradio/icons@0.15.0-dev.0
|
|
25
|
+
|
|
26
|
+
## 0.23.2-dev.0
|
|
27
|
+
|
|
28
|
+
### Dependency updates
|
|
29
|
+
|
|
30
|
+
- @gradio/client@2.0.0-dev.1
|
|
31
|
+
|
|
32
|
+
## 0.23.2-dev.0
|
|
33
|
+
|
|
34
|
+
### Dependency updates
|
|
35
|
+
|
|
36
|
+
- @gradio/upload@0.17.2-dev.0
|
|
37
|
+
- @gradio/client@2.0.0-dev.0
|
|
38
|
+
|
|
39
|
+
## 0.23.1
|
|
40
|
+
|
|
41
|
+
### Dependency updates
|
|
42
|
+
|
|
43
|
+
- @gradio/client@1.19.1
|
|
44
|
+
|
|
3
45
|
## 0.23.1
|
|
4
46
|
|
|
5
47
|
### Fixes
|
package/Image.test.ts
CHANGED
|
@@ -56,9 +56,9 @@ describe("Image", () => {
|
|
|
56
56
|
const mock = listen("change");
|
|
57
57
|
|
|
58
58
|
component.value = {
|
|
59
|
-
url: "https://github.com/gradio-app/gradio/blob/main/
|
|
60
|
-
orig_name: "
|
|
61
|
-
path: "https://github.com/gradio-app/gradio/blob/main/
|
|
59
|
+
url: "https://github.com/gradio-app/gradio/blob/main/gradio/media_assets/images/cheetah1.jpg",
|
|
60
|
+
orig_name: "cheetah1.jpg",
|
|
61
|
+
path: "https://github.com/gradio-app/gradio/blob/main/gradio/media_assets/images/cheetah1.jpg"
|
|
62
62
|
};
|
|
63
63
|
assert.equal(mock.callCount, 1);
|
|
64
64
|
});
|
package/Index.svelte
CHANGED
|
@@ -9,98 +9,42 @@
|
|
|
9
9
|
</script>
|
|
10
10
|
|
|
11
11
|
<script lang="ts">
|
|
12
|
-
import
|
|
12
|
+
import { tick } from "svelte";
|
|
13
|
+
import { Gradio } from "@gradio/utils";
|
|
13
14
|
import StaticImage from "./shared/ImagePreview.svelte";
|
|
14
15
|
import ImageUploader from "./shared/ImageUploader.svelte";
|
|
15
|
-
import { afterUpdate } from "svelte";
|
|
16
|
-
import type { WebcamOptions } from "./shared/types";
|
|
17
|
-
|
|
18
16
|
import { Block, Empty, UploadText } from "@gradio/atoms";
|
|
19
17
|
import { Image } from "@gradio/icons";
|
|
20
18
|
import { StatusTracker } from "@gradio/statustracker";
|
|
21
|
-
import {
|
|
22
|
-
import type { LoadingStatus } from "@gradio/statustracker";
|
|
23
|
-
|
|
24
|
-
type sources = "upload" | "webcam" | "clipboard" | null;
|
|
25
|
-
|
|
26
|
-
let stream_state = "closed";
|
|
27
|
-
let _modify_stream: (state: "open" | "closed" | "waiting") => void = () => {};
|
|
28
|
-
export function modify_stream_state(
|
|
29
|
-
state: "open" | "closed" | "waiting"
|
|
30
|
-
): void {
|
|
31
|
-
stream_state = state;
|
|
32
|
-
_modify_stream(state);
|
|
33
|
-
}
|
|
34
|
-
export const get_stream_state: () => void = () => stream_state;
|
|
35
|
-
export let set_time_limit: (arg0: number) => void;
|
|
36
|
-
export let value_is_output = false;
|
|
37
|
-
export let elem_id = "";
|
|
38
|
-
export let elem_classes: string[] = [];
|
|
39
|
-
export let visible: boolean | "hidden" = true;
|
|
40
|
-
export let value: null | FileData = null;
|
|
41
|
-
let old_value: null | FileData = null;
|
|
42
|
-
export let label: string;
|
|
43
|
-
export let show_label: boolean;
|
|
44
|
-
export let show_download_button: boolean;
|
|
45
|
-
export let root: string;
|
|
19
|
+
import type { ImageProps, ImageEvents } from "./shared/types";
|
|
46
20
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
export let loading_status: LoadingStatus;
|
|
56
|
-
export let show_share_button = false;
|
|
57
|
-
export let sources: ("clipboard" | "webcam" | "upload")[] = [
|
|
58
|
-
"upload",
|
|
59
|
-
"clipboard",
|
|
60
|
-
"webcam"
|
|
61
|
-
];
|
|
62
|
-
export let interactive: boolean;
|
|
63
|
-
export let streaming: boolean;
|
|
64
|
-
export let pending: boolean;
|
|
65
|
-
export let placeholder: string | undefined = undefined;
|
|
66
|
-
export let show_fullscreen_button: boolean;
|
|
67
|
-
export let input_ready: boolean;
|
|
68
|
-
export let webcam_options: WebcamOptions;
|
|
69
|
-
let fullscreen = false;
|
|
70
|
-
|
|
71
|
-
let uploading = false;
|
|
72
|
-
$: input_ready = !uploading;
|
|
73
|
-
export let gradio: Gradio<{
|
|
74
|
-
input: never;
|
|
75
|
-
change: never;
|
|
76
|
-
error: string;
|
|
77
|
-
edit: never;
|
|
78
|
-
stream: ValueData;
|
|
79
|
-
drag: never;
|
|
80
|
-
upload: never;
|
|
81
|
-
clear: never;
|
|
82
|
-
select: SelectData;
|
|
83
|
-
share: ShareData;
|
|
84
|
-
clear_status: LoadingStatus;
|
|
85
|
-
close_stream: string;
|
|
86
|
-
}>;
|
|
21
|
+
let stream_data = { value: null };
|
|
22
|
+
let upload_promise = $state<Promise<any>>();
|
|
23
|
+
class ImageGradio extends Gradio<ImageEvents, ImageProps> {
|
|
24
|
+
async get_data() {
|
|
25
|
+
if (upload_promise) {
|
|
26
|
+
await upload_promise;
|
|
27
|
+
await tick();
|
|
28
|
+
}
|
|
87
29
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
gradio.dispatch("change");
|
|
92
|
-
if (!value_is_output) {
|
|
93
|
-
gradio.dispatch("input");
|
|
30
|
+
const data = await super.get_data();
|
|
31
|
+
if (props.props.streaming) {
|
|
32
|
+
data.value = stream_data.value;
|
|
94
33
|
}
|
|
34
|
+
|
|
35
|
+
return data;
|
|
95
36
|
}
|
|
96
37
|
}
|
|
97
38
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
39
|
+
const props = $props();
|
|
40
|
+
const gradio = new ImageGradio(props);
|
|
41
|
+
|
|
42
|
+
let fullscreen = $state(false);
|
|
43
|
+
let dragging = $state(false);
|
|
44
|
+
let active_source = $derived.by(() =>
|
|
45
|
+
gradio.props.sources ? gradio.props.sources[0] : null
|
|
46
|
+
);
|
|
101
47
|
|
|
102
|
-
let dragging: boolean;
|
|
103
|
-
let active_source: sources = null;
|
|
104
48
|
let upload_component: ImageUploader;
|
|
105
49
|
const handle_drag_event = (event: Event): void => {
|
|
106
50
|
const drag_event = event as DragEvent;
|
|
@@ -114,7 +58,7 @@
|
|
|
114
58
|
};
|
|
115
59
|
|
|
116
60
|
const handle_drop = (event: Event): void => {
|
|
117
|
-
if (interactive) {
|
|
61
|
+
if (gradio.shared.interactive) {
|
|
118
62
|
const drop_event = event as DragEvent;
|
|
119
63
|
drop_event.preventDefault();
|
|
120
64
|
drop_event.stopPropagation();
|
|
@@ -125,28 +69,39 @@
|
|
|
125
69
|
}
|
|
126
70
|
}
|
|
127
71
|
};
|
|
72
|
+
|
|
73
|
+
let old_value = $state(gradio.props.value);
|
|
74
|
+
|
|
75
|
+
$effect(() => {
|
|
76
|
+
if (old_value != gradio.props.value) {
|
|
77
|
+
old_value = gradio.props.value;
|
|
78
|
+
gradio.dispatch("change");
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
let status = $derived(gradio?.shared?.loading_status.stream_state);
|
|
128
83
|
</script>
|
|
129
84
|
|
|
130
|
-
{#if !interactive}
|
|
85
|
+
{#if !gradio.shared.interactive}
|
|
131
86
|
<Block
|
|
132
|
-
{visible}
|
|
87
|
+
visible={gradio.shared.visible}
|
|
133
88
|
variant={"solid"}
|
|
134
89
|
border_mode={dragging ? "focus" : "base"}
|
|
135
90
|
padding={false}
|
|
136
|
-
{elem_id}
|
|
137
|
-
{elem_classes}
|
|
138
|
-
height={height || undefined}
|
|
139
|
-
{width}
|
|
91
|
+
elem_id={gradio.shared.elem_id}
|
|
92
|
+
elem_classes={gradio.shared.elem_classes}
|
|
93
|
+
height={gradio.props.height || undefined}
|
|
94
|
+
width={gradio.props.width}
|
|
140
95
|
allow_overflow={false}
|
|
141
|
-
{container}
|
|
142
|
-
{scale}
|
|
143
|
-
{min_width}
|
|
96
|
+
container={gradio.shared.container}
|
|
97
|
+
scale{gradio.shared.scale}
|
|
98
|
+
min_width={gradio.shared.min_width}
|
|
144
99
|
bind:fullscreen
|
|
145
100
|
>
|
|
146
101
|
<StatusTracker
|
|
147
|
-
autoscroll={gradio.autoscroll}
|
|
102
|
+
autoscroll={gradio.shared.autoscroll}
|
|
148
103
|
i18n={gradio.i18n}
|
|
149
|
-
{...loading_status}
|
|
104
|
+
{...gradio.shared.loading_status}
|
|
150
105
|
/>
|
|
151
106
|
<StaticImage
|
|
152
107
|
on:select={({ detail }) => gradio.dispatch("select", detail)}
|
|
@@ -156,89 +111,103 @@
|
|
|
156
111
|
fullscreen = detail;
|
|
157
112
|
}}
|
|
158
113
|
{fullscreen}
|
|
159
|
-
{value}
|
|
160
|
-
{label}
|
|
161
|
-
{show_label}
|
|
162
|
-
{
|
|
163
|
-
selectable={_selectable}
|
|
164
|
-
{show_share_button}
|
|
114
|
+
value={gradio.props.value}
|
|
115
|
+
label={gradio.shared.label}
|
|
116
|
+
show_label={gradio.shared.show_label}
|
|
117
|
+
selectable={gradio.props._selectable}
|
|
165
118
|
i18n={gradio.i18n}
|
|
166
|
-
{
|
|
119
|
+
buttons={gradio.props.buttons}
|
|
167
120
|
/>
|
|
168
121
|
</Block>
|
|
169
122
|
{:else}
|
|
170
123
|
<Block
|
|
171
|
-
{visible}
|
|
172
|
-
variant={value === null ? "dashed" : "solid"}
|
|
124
|
+
visible={gradio.shared.visible}
|
|
125
|
+
variant={gradio.props.value === null ? "dashed" : "solid"}
|
|
173
126
|
border_mode={dragging ? "focus" : "base"}
|
|
174
127
|
padding={false}
|
|
175
|
-
{elem_id}
|
|
176
|
-
{elem_classes}
|
|
177
|
-
height={height || undefined}
|
|
178
|
-
{width}
|
|
128
|
+
elem_id={gradio.shared.elem_id}
|
|
129
|
+
elem_classes={gradio.shared.elem_classes}
|
|
130
|
+
height={gradio.props.height || undefined}
|
|
131
|
+
width={gradio.props.width}
|
|
179
132
|
allow_overflow={false}
|
|
180
|
-
{container}
|
|
181
|
-
{scale}
|
|
182
|
-
{min_width}
|
|
133
|
+
container={gradio.shared.container}
|
|
134
|
+
scale={gradio.shared.scale}
|
|
135
|
+
min_width={gradio.shared.min_width}
|
|
183
136
|
bind:fullscreen
|
|
184
137
|
on:dragenter={handle_drag_event}
|
|
185
138
|
on:dragleave={handle_drag_event}
|
|
186
139
|
on:dragover={handle_drag_event}
|
|
187
140
|
on:drop={handle_drop}
|
|
188
141
|
>
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
142
|
+
{#if gradio.shared.loading_status.type === "output"}
|
|
143
|
+
<StatusTracker
|
|
144
|
+
autoscroll={gradio.shared.autoscroll}
|
|
145
|
+
i18n={gradio.i18n}
|
|
146
|
+
{...gradio.shared.loading_status}
|
|
147
|
+
on:clear_status={() =>
|
|
148
|
+
gradio.dispatch("clear_status", gradio.shared.loading_status)}
|
|
149
|
+
/>
|
|
150
|
+
{/if}
|
|
196
151
|
<ImageUploader
|
|
152
|
+
bind:upload_promise
|
|
197
153
|
bind:this={upload_component}
|
|
198
|
-
bind:uploading
|
|
199
154
|
bind:active_source
|
|
200
|
-
bind:value
|
|
155
|
+
bind:value={gradio.props.value}
|
|
201
156
|
bind:dragging
|
|
202
|
-
selectable={_selectable}
|
|
203
|
-
{root}
|
|
204
|
-
{sources}
|
|
157
|
+
selectable={gradio.props._selectable}
|
|
158
|
+
root={gradio.shared.root}
|
|
159
|
+
sources={gradio.props.sources}
|
|
205
160
|
{fullscreen}
|
|
161
|
+
show_fullscreen_button={gradio.props.buttons === null
|
|
162
|
+
? true
|
|
163
|
+
: gradio.props.buttons.includes("fullscreen")}
|
|
206
164
|
on:edit={() => gradio.dispatch("edit")}
|
|
207
165
|
on:clear={() => {
|
|
208
166
|
fullscreen = false;
|
|
209
167
|
gradio.dispatch("clear");
|
|
168
|
+
gradio.dispatch("input");
|
|
169
|
+
}}
|
|
170
|
+
on:stream={({ detail }) => {
|
|
171
|
+
stream_data = detail;
|
|
172
|
+
gradio.dispatch("stream", detail);
|
|
210
173
|
}}
|
|
211
|
-
on:stream={({ detail }) => gradio.dispatch("stream", detail)}
|
|
212
174
|
on:drag={({ detail }) => (dragging = detail)}
|
|
213
|
-
on:upload={() =>
|
|
175
|
+
on:upload={() => {
|
|
176
|
+
gradio.dispatch("upload");
|
|
177
|
+
gradio.dispatch("input");
|
|
178
|
+
}}
|
|
214
179
|
on:select={({ detail }) => gradio.dispatch("select", detail)}
|
|
215
180
|
on:share={({ detail }) => gradio.dispatch("share", detail)}
|
|
216
181
|
on:error={({ detail }) => {
|
|
217
|
-
loading_status =
|
|
218
|
-
loading_status.status = "error";
|
|
182
|
+
gradio.shared.loading_status.status = "error";
|
|
219
183
|
gradio.dispatch("error", detail);
|
|
220
184
|
}}
|
|
221
185
|
on:close_stream={() => {
|
|
222
|
-
gradio.dispatch("close_stream"
|
|
186
|
+
gradio.dispatch("close_stream");
|
|
223
187
|
}}
|
|
224
188
|
on:fullscreen={({ detail }) => {
|
|
225
189
|
fullscreen = detail;
|
|
226
190
|
}}
|
|
227
|
-
{label}
|
|
228
|
-
{show_label}
|
|
229
|
-
{pending
|
|
230
|
-
|
|
231
|
-
{
|
|
232
|
-
{
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
max_file_size={gradio.max_file_size}
|
|
191
|
+
label={gradio.shared.label}
|
|
192
|
+
show_label={gradio.shared.show_label}
|
|
193
|
+
pending={gradio.shared.loading_status?.status === "pending" ||
|
|
194
|
+
gradio.shared.loading_status?.status === "streaming"}
|
|
195
|
+
streaming={gradio.props.streaming}
|
|
196
|
+
webcam_options={gradio.props.webcam_options}
|
|
197
|
+
stream_every={gradio.props.stream_every}
|
|
198
|
+
time_limit={gradio.shared.loading_status?.time_limit}
|
|
199
|
+
max_file_size={gradio.shared.max_file_size}
|
|
236
200
|
i18n={gradio.i18n}
|
|
237
|
-
upload={(...args) => gradio.client.upload(...args)}
|
|
238
|
-
stream_handler={gradio.client?.stream}
|
|
201
|
+
upload={(...args) => gradio.shared.client.upload(...args)}
|
|
202
|
+
stream_handler={gradio.shared.client?.stream}
|
|
203
|
+
stream_state={status}
|
|
239
204
|
>
|
|
240
205
|
{#if active_source === "upload" || !active_source}
|
|
241
|
-
<UploadText
|
|
206
|
+
<UploadText
|
|
207
|
+
i18n={gradio.i18n}
|
|
208
|
+
type="image"
|
|
209
|
+
placeholder={gradio.props.placeholder}
|
|
210
|
+
/>
|
|
242
211
|
{:else if active_source === "clipboard"}
|
|
243
212
|
<UploadText i18n={gradio.i18n} type="clipboard" mode="short" />
|
|
244
213
|
{:else}
|
package/dist/Example.svelte
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
<script
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import Image from "./shared/Image.svelte";
|
|
3
|
+
import type { FileData } from "@gradio/client";
|
|
4
|
+
|
|
5
|
+
export let value: null | FileData;
|
|
6
|
+
export let type: "gallery" | "table";
|
|
7
|
+
export let selected = false;
|
|
5
8
|
</script>
|
|
6
9
|
|
|
7
10
|
<div
|
package/dist/Example.svelte.d.ts
CHANGED
|
@@ -1,21 +1,23 @@
|
|
|
1
|
-
import { SvelteComponent } from "svelte";
|
|
2
1
|
import type { FileData } from "@gradio/client";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
3
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
4
|
+
$$bindings?: Bindings;
|
|
5
|
+
} & Exports;
|
|
6
|
+
(internal: unknown, props: Props & {
|
|
7
|
+
$$events?: Events;
|
|
8
|
+
$$slots?: Slots;
|
|
9
|
+
}): Exports & {
|
|
10
|
+
$set?: any;
|
|
11
|
+
$on?: any;
|
|
8
12
|
};
|
|
9
|
-
|
|
10
|
-
[evt: string]: CustomEvent<any>;
|
|
11
|
-
};
|
|
12
|
-
slots: {};
|
|
13
|
-
exports?: {} | undefined;
|
|
14
|
-
bindings?: string | undefined;
|
|
15
|
-
};
|
|
16
|
-
export type ExampleProps = typeof __propDef.props;
|
|
17
|
-
export type ExampleEvents = typeof __propDef.events;
|
|
18
|
-
export type ExampleSlots = typeof __propDef.slots;
|
|
19
|
-
export default class Example extends SvelteComponent<ExampleProps, ExampleEvents, ExampleSlots> {
|
|
13
|
+
z_$$bindings?: Bindings;
|
|
20
14
|
}
|
|
21
|
-
|
|
15
|
+
declare const Example: $$__sveltets_2_IsomorphicComponent<{
|
|
16
|
+
value: null | FileData;
|
|
17
|
+
type: "gallery" | "table";
|
|
18
|
+
selected?: boolean;
|
|
19
|
+
}, {
|
|
20
|
+
[evt: string]: CustomEvent<any>;
|
|
21
|
+
}, {}, {}, string>;
|
|
22
|
+
type Example = InstanceType<typeof Example>;
|
|
23
|
+
export default Example;
|