@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 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 type { Gradio, SelectData, ValueData } from "@gradio/utils";
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 { upload, type FileData } from "@gradio/client";
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
- export let height: number | undefined;
48
- export let width: number | undefined;
49
- export let stream_every: number;
50
-
51
- export let _selectable = false;
52
- export let container = true;
53
- export let scale: number | null = null;
54
- export let min_width: number | undefined = undefined;
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
- if (JSON.stringify(value) !== JSON.stringify(old_value)) {
88
- old_value = value;
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
- afterUpdate(() => {
97
- value_is_output = false;
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
- {buttons}
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
- <StatusTracker
186
- autoscroll={gradio.autoscroll}
187
- i18n={gradio.i18n}
188
- {...loading_status}
189
- on:clear_status={() => gradio.dispatch("clear_status", loading_status)}
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={() => gradio.dispatch("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 = 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", "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
- {streaming}
230
- {webcam_options}
231
- {stream_every}
232
- bind:modify_stream={_modify_stream}
233
- bind:set_time_limit
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 i18n={gradio.i18n} type="image" {placeholder} />
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}
@@ -1,7 +1,10 @@
1
- <script>import Image from "./shared/Image.svelte";
2
- export let value;
3
- export let type;
4
- export let selected = false;
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
@@ -1,21 +1,23 @@
1
- import { SvelteComponent } from "svelte";
2
1
  import type { FileData } from "@gradio/client";
3
- declare const __propDef: {
4
- props: {
5
- value: null | FileData;
6
- type: "gallery" | "table";
7
- selected?: boolean;
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
- events: {
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
- export {};
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;