@gradio/image 0.23.2-dev.0 → 0.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +45 -0
- package/Index.svelte +107 -135
- package/dist/Example.svelte +7 -4
- package/dist/Example.svelte.d.ts +20 -18
- package/dist/Index.svelte +149 -146
- package/dist/Index.svelte.d.ts +3 -170
- package/dist/shared/Image.svelte +19 -2
- package/dist/shared/Image.svelte.d.ts +24 -19
- package/dist/shared/ImagePreview.svelte +51 -32
- package/dist/shared/ImagePreview.svelte.d.ts +33 -30
- 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 +8 -2
- package/shared/ImageUploader.svelte +9 -6
- package/shared/Webcam.svelte +6 -30
- package/shared/types.ts +33 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,49 @@
|
|
|
1
1
|
# @gradio/image
|
|
2
|
+
## 0.24.0
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
- [#11908](https://github.com/gradio-app/gradio/pull/11908) [`029034f`](https://github.com/gradio-app/gradio/commit/029034f7853ea018d110efe9b7e2ef7d1407091c) - Clear Error statuses
|
|
7
|
+
- [#11908](https://github.com/gradio-app/gradio/pull/11908) [`029034f`](https://github.com/gradio-app/gradio/commit/029034f7853ea018d110efe9b7e2ef7d1407091c) - Improve audio player UI in gr.Chatbot
|
|
8
|
+
- [#12438](https://github.com/gradio-app/gradio/pull/12438) [`25ffc03`](https://github.com/gradio-app/gradio/commit/25ffc0398f8feb43d817c02b2ab970c16de6d797) - Svelte5 migration and bugfix
|
|
9
|
+
|
|
10
|
+
### Dependencies
|
|
11
|
+
|
|
12
|
+
- @gradio/atoms@0.19.0
|
|
13
|
+
- @gradio/client@2.0.0
|
|
14
|
+
- @gradio/icons@0.15.0
|
|
15
|
+
- @gradio/statustracker@0.12.0
|
|
16
|
+
- @gradio/upload@0.17.2
|
|
17
|
+
- @gradio/utils@0.10.3
|
|
18
|
+
|
|
19
|
+
## 0.24.0-dev.2
|
|
20
|
+
|
|
21
|
+
### Features
|
|
22
|
+
|
|
23
|
+
- [#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!
|
|
24
|
+
|
|
25
|
+
### Dependency updates
|
|
26
|
+
|
|
27
|
+
- @gradio/atoms@0.19.0-dev.1
|
|
28
|
+
- @gradio/client@2.0.0-dev.2
|
|
29
|
+
- @gradio/statustracker@0.12.0-dev.1
|
|
30
|
+
- @gradio/upload@0.17.2-dev.2
|
|
31
|
+
|
|
32
|
+
## 0.23.2-dev.1
|
|
33
|
+
|
|
34
|
+
### Dependency updates
|
|
35
|
+
|
|
36
|
+
- @gradio/atoms@0.18.2-dev.0
|
|
37
|
+
- @gradio/upload@0.17.2-dev.1
|
|
38
|
+
- @gradio/utils@0.10.3-dev.0
|
|
39
|
+
- @gradio/statustracker@0.12.0-dev.0
|
|
40
|
+
- @gradio/icons@0.15.0-dev.0
|
|
41
|
+
|
|
42
|
+
## 0.23.2-dev.0
|
|
43
|
+
|
|
44
|
+
### Dependency updates
|
|
45
|
+
|
|
46
|
+
- @gradio/client@2.0.0-dev.1
|
|
2
47
|
|
|
3
48
|
## 0.23.2-dev.0
|
|
4
49
|
|
package/Index.svelte
CHANGED
|
@@ -9,96 +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 buttons: string[] | null = null;
|
|
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 sources: ("clipboard" | "webcam" | "upload")[] = [
|
|
57
|
-
"upload",
|
|
58
|
-
"clipboard",
|
|
59
|
-
"webcam"
|
|
60
|
-
];
|
|
61
|
-
export let interactive: boolean;
|
|
62
|
-
export let streaming: boolean;
|
|
63
|
-
export let pending: boolean;
|
|
64
|
-
export let placeholder: string | undefined = undefined;
|
|
65
|
-
export let input_ready: boolean;
|
|
66
|
-
export let webcam_options: WebcamOptions;
|
|
67
|
-
let fullscreen = false;
|
|
68
|
-
|
|
69
|
-
let uploading = false;
|
|
70
|
-
$: input_ready = !uploading;
|
|
71
|
-
export let gradio: Gradio<{
|
|
72
|
-
input: never;
|
|
73
|
-
change: never;
|
|
74
|
-
error: string;
|
|
75
|
-
edit: never;
|
|
76
|
-
stream: ValueData;
|
|
77
|
-
drag: never;
|
|
78
|
-
upload: never;
|
|
79
|
-
clear: never;
|
|
80
|
-
select: SelectData;
|
|
81
|
-
share: ShareData;
|
|
82
|
-
clear_status: LoadingStatus;
|
|
83
|
-
close_stream: string;
|
|
84
|
-
}>;
|
|
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
|
+
}
|
|
85
29
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
gradio.dispatch("change");
|
|
90
|
-
if (!value_is_output) {
|
|
91
|
-
gradio.dispatch("input");
|
|
30
|
+
const data = await super.get_data();
|
|
31
|
+
if (props.props.streaming) {
|
|
32
|
+
data.value = stream_data.value;
|
|
92
33
|
}
|
|
34
|
+
|
|
35
|
+
return data;
|
|
93
36
|
}
|
|
94
37
|
}
|
|
95
38
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
+
);
|
|
99
47
|
|
|
100
|
-
let dragging: boolean;
|
|
101
|
-
let active_source: sources = null;
|
|
102
48
|
let upload_component: ImageUploader;
|
|
103
49
|
const handle_drag_event = (event: Event): void => {
|
|
104
50
|
const drag_event = event as DragEvent;
|
|
@@ -112,7 +58,7 @@
|
|
|
112
58
|
};
|
|
113
59
|
|
|
114
60
|
const handle_drop = (event: Event): void => {
|
|
115
|
-
if (interactive) {
|
|
61
|
+
if (gradio.shared.interactive) {
|
|
116
62
|
const drop_event = event as DragEvent;
|
|
117
63
|
drop_event.preventDefault();
|
|
118
64
|
drop_event.stopPropagation();
|
|
@@ -123,28 +69,41 @@
|
|
|
123
69
|
}
|
|
124
70
|
}
|
|
125
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);
|
|
126
83
|
</script>
|
|
127
84
|
|
|
128
|
-
{#if !interactive}
|
|
85
|
+
{#if !gradio.shared.interactive}
|
|
129
86
|
<Block
|
|
130
|
-
{visible}
|
|
87
|
+
visible={gradio.shared.visible}
|
|
131
88
|
variant={"solid"}
|
|
132
89
|
border_mode={dragging ? "focus" : "base"}
|
|
133
90
|
padding={false}
|
|
134
|
-
{elem_id}
|
|
135
|
-
{elem_classes}
|
|
136
|
-
height={height || undefined}
|
|
137
|
-
{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}
|
|
138
95
|
allow_overflow={false}
|
|
139
|
-
{container}
|
|
140
|
-
{scale}
|
|
141
|
-
{min_width}
|
|
96
|
+
container={gradio.shared.container}
|
|
97
|
+
scale{gradio.shared.scale}
|
|
98
|
+
min_width={gradio.shared.min_width}
|
|
142
99
|
bind:fullscreen
|
|
143
100
|
>
|
|
144
101
|
<StatusTracker
|
|
145
|
-
autoscroll={gradio.autoscroll}
|
|
102
|
+
autoscroll={gradio.shared.autoscroll}
|
|
146
103
|
i18n={gradio.i18n}
|
|
147
|
-
{...loading_status}
|
|
104
|
+
{...gradio.shared.loading_status}
|
|
105
|
+
on_clear_status={() =>
|
|
106
|
+
gradio.dispatch("clear_status", gradio.shared.loading_status)}
|
|
148
107
|
/>
|
|
149
108
|
<StaticImage
|
|
150
109
|
on:select={({ detail }) => gradio.dispatch("select", detail)}
|
|
@@ -154,90 +113,103 @@
|
|
|
154
113
|
fullscreen = detail;
|
|
155
114
|
}}
|
|
156
115
|
{fullscreen}
|
|
157
|
-
{value}
|
|
158
|
-
{label}
|
|
159
|
-
{show_label}
|
|
160
|
-
{
|
|
161
|
-
selectable={_selectable}
|
|
116
|
+
value={gradio.props.value}
|
|
117
|
+
label={gradio.shared.label}
|
|
118
|
+
show_label={gradio.shared.show_label}
|
|
119
|
+
selectable={gradio.props._selectable}
|
|
162
120
|
i18n={gradio.i18n}
|
|
121
|
+
buttons={gradio.props.buttons}
|
|
163
122
|
/>
|
|
164
123
|
</Block>
|
|
165
124
|
{:else}
|
|
166
125
|
<Block
|
|
167
|
-
{visible}
|
|
168
|
-
variant={value === null ? "dashed" : "solid"}
|
|
126
|
+
visible={gradio.shared.visible}
|
|
127
|
+
variant={gradio.props.value === null ? "dashed" : "solid"}
|
|
169
128
|
border_mode={dragging ? "focus" : "base"}
|
|
170
129
|
padding={false}
|
|
171
|
-
{elem_id}
|
|
172
|
-
{elem_classes}
|
|
173
|
-
height={height || undefined}
|
|
174
|
-
{width}
|
|
130
|
+
elem_id={gradio.shared.elem_id}
|
|
131
|
+
elem_classes={gradio.shared.elem_classes}
|
|
132
|
+
height={gradio.props.height || undefined}
|
|
133
|
+
width={gradio.props.width}
|
|
175
134
|
allow_overflow={false}
|
|
176
|
-
{container}
|
|
177
|
-
{scale}
|
|
178
|
-
{min_width}
|
|
135
|
+
container={gradio.shared.container}
|
|
136
|
+
scale={gradio.shared.scale}
|
|
137
|
+
min_width={gradio.shared.min_width}
|
|
179
138
|
bind:fullscreen
|
|
180
139
|
on:dragenter={handle_drag_event}
|
|
181
140
|
on:dragleave={handle_drag_event}
|
|
182
141
|
on:dragover={handle_drag_event}
|
|
183
142
|
on:drop={handle_drop}
|
|
184
143
|
>
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
144
|
+
{#if gradio.shared.loading_status.type === "output"}
|
|
145
|
+
<StatusTracker
|
|
146
|
+
autoscroll={gradio.shared.autoscroll}
|
|
147
|
+
i18n={gradio.i18n}
|
|
148
|
+
{...gradio.shared.loading_status}
|
|
149
|
+
on_clear_status={() =>
|
|
150
|
+
gradio.dispatch("clear_status", gradio.shared.loading_status)}
|
|
151
|
+
/>
|
|
152
|
+
{/if}
|
|
192
153
|
<ImageUploader
|
|
154
|
+
bind:upload_promise
|
|
193
155
|
bind:this={upload_component}
|
|
194
|
-
bind:uploading
|
|
195
156
|
bind:active_source
|
|
196
|
-
bind:value
|
|
157
|
+
bind:value={gradio.props.value}
|
|
197
158
|
bind:dragging
|
|
198
|
-
selectable={_selectable}
|
|
199
|
-
{root}
|
|
200
|
-
{sources}
|
|
159
|
+
selectable={gradio.props._selectable}
|
|
160
|
+
root={gradio.shared.root}
|
|
161
|
+
sources={gradio.props.sources}
|
|
201
162
|
{fullscreen}
|
|
202
|
-
show_fullscreen_button={buttons === null
|
|
163
|
+
show_fullscreen_button={gradio.props.buttons === null
|
|
203
164
|
? true
|
|
204
|
-
: buttons.includes("fullscreen")}
|
|
165
|
+
: gradio.props.buttons.includes("fullscreen")}
|
|
205
166
|
on:edit={() => gradio.dispatch("edit")}
|
|
206
167
|
on:clear={() => {
|
|
207
168
|
fullscreen = false;
|
|
208
169
|
gradio.dispatch("clear");
|
|
170
|
+
gradio.dispatch("input");
|
|
171
|
+
}}
|
|
172
|
+
on:stream={({ detail }) => {
|
|
173
|
+
stream_data = detail;
|
|
174
|
+
gradio.dispatch("stream", detail);
|
|
209
175
|
}}
|
|
210
|
-
on:stream={({ detail }) => gradio.dispatch("stream", detail)}
|
|
211
176
|
on:drag={({ detail }) => (dragging = detail)}
|
|
212
|
-
on:upload={() =>
|
|
177
|
+
on:upload={() => {
|
|
178
|
+
gradio.dispatch("upload");
|
|
179
|
+
gradio.dispatch("input");
|
|
180
|
+
}}
|
|
213
181
|
on:select={({ detail }) => gradio.dispatch("select", detail)}
|
|
214
182
|
on:share={({ detail }) => gradio.dispatch("share", detail)}
|
|
215
183
|
on:error={({ detail }) => {
|
|
216
|
-
loading_status =
|
|
217
|
-
loading_status.status = "error";
|
|
184
|
+
gradio.shared.loading_status.status = "error";
|
|
218
185
|
gradio.dispatch("error", detail);
|
|
219
186
|
}}
|
|
220
187
|
on:close_stream={() => {
|
|
221
|
-
gradio.dispatch("close_stream"
|
|
188
|
+
gradio.dispatch("close_stream");
|
|
222
189
|
}}
|
|
223
190
|
on:fullscreen={({ detail }) => {
|
|
224
191
|
fullscreen = detail;
|
|
225
192
|
}}
|
|
226
|
-
{label}
|
|
227
|
-
{show_label}
|
|
228
|
-
{pending
|
|
229
|
-
|
|
230
|
-
{
|
|
231
|
-
{
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
max_file_size={gradio.max_file_size}
|
|
193
|
+
label={gradio.shared.label}
|
|
194
|
+
show_label={gradio.shared.show_label}
|
|
195
|
+
pending={gradio.shared.loading_status?.status === "pending" ||
|
|
196
|
+
gradio.shared.loading_status?.status === "streaming"}
|
|
197
|
+
streaming={gradio.props.streaming}
|
|
198
|
+
webcam_options={gradio.props.webcam_options}
|
|
199
|
+
stream_every={gradio.props.stream_every}
|
|
200
|
+
time_limit={gradio.shared.loading_status?.time_limit}
|
|
201
|
+
max_file_size={gradio.shared.max_file_size}
|
|
235
202
|
i18n={gradio.i18n}
|
|
236
|
-
upload={(...args) => gradio.client.upload(...args)}
|
|
237
|
-
stream_handler={gradio.client?.stream}
|
|
203
|
+
upload={(...args) => gradio.shared.client.upload(...args)}
|
|
204
|
+
stream_handler={gradio.shared.client?.stream}
|
|
205
|
+
stream_state={status}
|
|
238
206
|
>
|
|
239
207
|
{#if active_source === "upload" || !active_source}
|
|
240
|
-
<UploadText
|
|
208
|
+
<UploadText
|
|
209
|
+
i18n={gradio.i18n}
|
|
210
|
+
type="image"
|
|
211
|
+
placeholder={gradio.props.placeholder}
|
|
212
|
+
/>
|
|
241
213
|
{:else if active_source === "clipboard"}
|
|
242
214
|
<UploadText i18n={gradio.i18n} type="clipboard" mode="short" />
|
|
243
215
|
{: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;
|