@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 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 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,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
- {buttons}
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
- <StatusTracker
186
- autoscroll={gradio.autoscroll}
187
- i18n={gradio.i18n}
188
- {...loading_status}
189
- on:clear_status={() => gradio.dispatch("clear_status", loading_status)}
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={() => gradio.dispatch("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 = 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", "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
- {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}
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 i18n={gradio.i18n} type="image" {placeholder} />
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}
@@ -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;