@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 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/test/test_files/cheetah1.jpg",
60
- orig_name: "bus.png",
61
- path: "https://github.com/gradio-app/gradio/blob/main/test/test_files/cheetah1.jpg"
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 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 show_download_button: boolean;
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 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
- if (JSON.stringify(value) !== JSON.stringify(old_value)) {
90
- old_value = value;
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
- afterUpdate(() => {
99
- value_is_output = false;
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
- {show_download_button}
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
- {show_fullscreen_button}
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
- <StatusTracker
190
- autoscroll={gradio.autoscroll}
191
- i18n={gradio.i18n}
192
- {...loading_status}
193
- on:clear_status={() => gradio.dispatch("clear_status", loading_status)}
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={() => gradio.dispatch("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 = 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", "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
- {streaming}
231
- {webcam_options}
232
- {stream_every}
233
- bind:modify_stream={_modify_stream}
234
- bind:set_time_limit
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 i18n={gradio.i18n} type="image" {placeholder} />
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}
@@ -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;