@gradio/image 0.23.2-dev.0 → 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 +29 -0
- package/Index.svelte +105 -135
- package/dist/Example.svelte +7 -4
- package/dist/Example.svelte.d.ts +20 -18
- package/dist/Index.svelte +147 -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,5 +1,34 @@
|
|
|
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
|
+
|
|
3
32
|
## 0.23.2-dev.0
|
|
4
33
|
|
|
5
34
|
### Dependency updates
|
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,39 @@
|
|
|
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}
|
|
148
105
|
/>
|
|
149
106
|
<StaticImage
|
|
150
107
|
on:select={({ detail }) => gradio.dispatch("select", detail)}
|
|
@@ -154,90 +111,103 @@
|
|
|
154
111
|
fullscreen = detail;
|
|
155
112
|
}}
|
|
156
113
|
{fullscreen}
|
|
157
|
-
{value}
|
|
158
|
-
{label}
|
|
159
|
-
{show_label}
|
|
160
|
-
{
|
|
161
|
-
selectable={_selectable}
|
|
114
|
+
value={gradio.props.value}
|
|
115
|
+
label={gradio.shared.label}
|
|
116
|
+
show_label={gradio.shared.show_label}
|
|
117
|
+
selectable={gradio.props._selectable}
|
|
162
118
|
i18n={gradio.i18n}
|
|
119
|
+
buttons={gradio.props.buttons}
|
|
163
120
|
/>
|
|
164
121
|
</Block>
|
|
165
122
|
{:else}
|
|
166
123
|
<Block
|
|
167
|
-
{visible}
|
|
168
|
-
variant={value === null ? "dashed" : "solid"}
|
|
124
|
+
visible={gradio.shared.visible}
|
|
125
|
+
variant={gradio.props.value === null ? "dashed" : "solid"}
|
|
169
126
|
border_mode={dragging ? "focus" : "base"}
|
|
170
127
|
padding={false}
|
|
171
|
-
{elem_id}
|
|
172
|
-
{elem_classes}
|
|
173
|
-
height={height || undefined}
|
|
174
|
-
{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}
|
|
175
132
|
allow_overflow={false}
|
|
176
|
-
{container}
|
|
177
|
-
{scale}
|
|
178
|
-
{min_width}
|
|
133
|
+
container={gradio.shared.container}
|
|
134
|
+
scale={gradio.shared.scale}
|
|
135
|
+
min_width={gradio.shared.min_width}
|
|
179
136
|
bind:fullscreen
|
|
180
137
|
on:dragenter={handle_drag_event}
|
|
181
138
|
on:dragleave={handle_drag_event}
|
|
182
139
|
on:dragover={handle_drag_event}
|
|
183
140
|
on:drop={handle_drop}
|
|
184
141
|
>
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
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}
|
|
192
151
|
<ImageUploader
|
|
152
|
+
bind:upload_promise
|
|
193
153
|
bind:this={upload_component}
|
|
194
|
-
bind:uploading
|
|
195
154
|
bind:active_source
|
|
196
|
-
bind:value
|
|
155
|
+
bind:value={gradio.props.value}
|
|
197
156
|
bind:dragging
|
|
198
|
-
selectable={_selectable}
|
|
199
|
-
{root}
|
|
200
|
-
{sources}
|
|
157
|
+
selectable={gradio.props._selectable}
|
|
158
|
+
root={gradio.shared.root}
|
|
159
|
+
sources={gradio.props.sources}
|
|
201
160
|
{fullscreen}
|
|
202
|
-
show_fullscreen_button={buttons === null
|
|
161
|
+
show_fullscreen_button={gradio.props.buttons === null
|
|
203
162
|
? true
|
|
204
|
-
: buttons.includes("fullscreen")}
|
|
163
|
+
: gradio.props.buttons.includes("fullscreen")}
|
|
205
164
|
on:edit={() => gradio.dispatch("edit")}
|
|
206
165
|
on:clear={() => {
|
|
207
166
|
fullscreen = false;
|
|
208
167
|
gradio.dispatch("clear");
|
|
168
|
+
gradio.dispatch("input");
|
|
169
|
+
}}
|
|
170
|
+
on:stream={({ detail }) => {
|
|
171
|
+
stream_data = detail;
|
|
172
|
+
gradio.dispatch("stream", detail);
|
|
209
173
|
}}
|
|
210
|
-
on:stream={({ detail }) => gradio.dispatch("stream", detail)}
|
|
211
174
|
on:drag={({ detail }) => (dragging = detail)}
|
|
212
|
-
on:upload={() =>
|
|
175
|
+
on:upload={() => {
|
|
176
|
+
gradio.dispatch("upload");
|
|
177
|
+
gradio.dispatch("input");
|
|
178
|
+
}}
|
|
213
179
|
on:select={({ detail }) => gradio.dispatch("select", detail)}
|
|
214
180
|
on:share={({ detail }) => gradio.dispatch("share", detail)}
|
|
215
181
|
on:error={({ detail }) => {
|
|
216
|
-
loading_status =
|
|
217
|
-
loading_status.status = "error";
|
|
182
|
+
gradio.shared.loading_status.status = "error";
|
|
218
183
|
gradio.dispatch("error", detail);
|
|
219
184
|
}}
|
|
220
185
|
on:close_stream={() => {
|
|
221
|
-
gradio.dispatch("close_stream"
|
|
186
|
+
gradio.dispatch("close_stream");
|
|
222
187
|
}}
|
|
223
188
|
on:fullscreen={({ detail }) => {
|
|
224
189
|
fullscreen = detail;
|
|
225
190
|
}}
|
|
226
|
-
{label}
|
|
227
|
-
{show_label}
|
|
228
|
-
{pending
|
|
229
|
-
|
|
230
|
-
{
|
|
231
|
-
{
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
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}
|
|
235
200
|
i18n={gradio.i18n}
|
|
236
|
-
upload={(...args) => gradio.client.upload(...args)}
|
|
237
|
-
stream_handler={gradio.client?.stream}
|
|
201
|
+
upload={(...args) => gradio.shared.client.upload(...args)}
|
|
202
|
+
stream_handler={gradio.shared.client?.stream}
|
|
203
|
+
stream_state={status}
|
|
238
204
|
>
|
|
239
205
|
{#if active_source === "upload" || !active_source}
|
|
240
|
-
<UploadText
|
|
206
|
+
<UploadText
|
|
207
|
+
i18n={gradio.i18n}
|
|
208
|
+
type="image"
|
|
209
|
+
placeholder={gradio.props.placeholder}
|
|
210
|
+
/>
|
|
241
211
|
{:else if active_source === "clipboard"}
|
|
242
212
|
<UploadText i18n={gradio.i18n} type="clipboard" mode="short" />
|
|
243
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;
|