@gradio/core 0.1.0-beta.1 → 0.1.0-beta.3
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 +83 -21
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/src/Blocks.svelte +82 -51
- package/dist/src/Blocks.svelte.d.ts +4 -0
- package/dist/src/MountComponents.svelte +12 -10
- package/dist/src/Render.svelte +14 -12
- package/dist/src/RenderComponent.svelte +2 -2
- package/dist/src/RenderComponent.svelte.d.ts +0 -2
- package/dist/src/css.js +2 -1
- package/dist/src/init.d.ts +1 -1
- package/dist/src/init.js +16 -11
- package/dist/src/lang/en.json +2 -1
- package/dist/src/types.d.ts +2 -0
- package/index.ts +1 -0
- package/package.json +54 -54
- package/src/Blocks.svelte +93 -54
- package/src/MountComponents.svelte +12 -10
- package/src/Render.svelte +16 -13
- package/src/RenderComponent.svelte +2 -2
- package/src/css.ts +1 -0
- package/src/init.ts +18 -14
- package/src/lang/en.json +2 -1
- package/src/types.ts +2 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,59 @@
|
|
|
1
1
|
# @gradio/core
|
|
2
2
|
|
|
3
|
+
## 0.1.0-beta.3
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- [#9412](https://github.com/gradio-app/gradio/pull/9412) [`c2c2fd9`](https://github.com/gradio-app/gradio/commit/c2c2fd989348f826566773c07c0e0bda200199ff) - fix SSR apps on spaces. Thanks @pngwn!
|
|
8
|
+
|
|
9
|
+
### Dependency updates
|
|
10
|
+
|
|
11
|
+
- @gradio/upload@0.13.0-beta.3
|
|
12
|
+
- @gradio/video@0.11.0-beta.3
|
|
13
|
+
- @gradio/code@0.10.0-beta.3
|
|
14
|
+
- @gradio/client@1.6.0-beta.3
|
|
15
|
+
- @gradio/button@0.3.0-beta.3
|
|
16
|
+
- @gradio/gallery@0.13.0-beta.3
|
|
17
|
+
- @gradio/file@0.10.0-beta.3
|
|
18
|
+
- @gradio/image@0.16.0-beta.3
|
|
19
|
+
|
|
20
|
+
## 0.1.0-beta.2
|
|
21
|
+
|
|
22
|
+
### Features
|
|
23
|
+
|
|
24
|
+
- [#9323](https://github.com/gradio-app/gradio/pull/9323) [`06babda`](https://github.com/gradio-app/gradio/commit/06babda0395fd3fbd323c1c3cb33704ecfd6deb0) - Disable liking user message in chatbot by default but make it configurable. Thanks @freddyaboulton!
|
|
25
|
+
- [#9339](https://github.com/gradio-app/gradio/pull/9339) [`4c8c6f2`](https://github.com/gradio-app/gradio/commit/4c8c6f2fe603081941c5fdc43f48a0632b9f31ad) - Ssr part 2. Thanks @pngwn!
|
|
26
|
+
- [#9269](https://github.com/gradio-app/gradio/pull/9269) [`e05f568`](https://github.com/gradio-app/gradio/commit/e05f568f47e9fa33ef91dbbe5cc477d32762bc36) - Fix reload mode and streaming in 5.0 dev. Thanks @freddyaboulton!
|
|
27
|
+
- [#9253](https://github.com/gradio-app/gradio/pull/9253) [`99648ec`](https://github.com/gradio-app/gradio/commit/99648ec7c4443e74799941e47b0015ac9ca581e1) - Adds ability to block event trigger when file is uploading. Thanks @dawoodkhan82!
|
|
28
|
+
- [#9335](https://github.com/gradio-app/gradio/pull/9335) [`b543465`](https://github.com/gradio-app/gradio/commit/b543465d06d7d1b399c4d0755da05e022611a97f) - Remove lite/theme.css from the Git-managed file tree. Thanks @whitphx!
|
|
29
|
+
|
|
30
|
+
### Fixes
|
|
31
|
+
|
|
32
|
+
- [#9299](https://github.com/gradio-app/gradio/pull/9299) [`aa35b07`](https://github.com/gradio-app/gradio/commit/aa35b0788e613fdd45446d267513e6f94fa208ea) - Trigger state change event on iterators. Thanks @freddyaboulton!
|
|
33
|
+
|
|
34
|
+
### Dependency updates
|
|
35
|
+
|
|
36
|
+
- @gradio/atoms@0.9.0-beta.2
|
|
37
|
+
- @gradio/gallery@0.13.0-beta.2
|
|
38
|
+
- @gradio/upload@0.13.0-beta.2
|
|
39
|
+
- @gradio/wasm@0.14.0-beta.2
|
|
40
|
+
- @gradio/markdown@0.10.0-beta.2
|
|
41
|
+
- @gradio/client@1.6.0-beta.2
|
|
42
|
+
- @gradio/icons@0.8.0-beta.2
|
|
43
|
+
- @gradio/statustracker@0.8.0-beta.2
|
|
44
|
+
- @gradio/utils@0.7.0-beta.2
|
|
45
|
+
- @gradio/plot@0.6.5-beta.2
|
|
46
|
+
- @gradio/button@0.3.0-beta.2
|
|
47
|
+
- @gradio/file@0.10.0-beta.2
|
|
48
|
+
- @gradio/image@0.16.0-beta.2
|
|
49
|
+
- @gradio/video@0.11.0-beta.2
|
|
50
|
+
- @gradio/code@0.10.0-beta.2
|
|
51
|
+
- @gradio/paramviewer@0.4.22-beta.2
|
|
52
|
+
- @gradio/checkbox@0.4.0-beta.2
|
|
53
|
+
- @gradio/column@0.2.0-beta.0
|
|
54
|
+
- @gradio/textbox@0.7.0-beta.2
|
|
55
|
+
- @gradio/tabs@0.3.0-beta.2
|
|
56
|
+
|
|
3
57
|
## 0.1.0-beta.1
|
|
4
58
|
|
|
5
59
|
### Features
|
|
@@ -39,33 +93,41 @@
|
|
|
39
93
|
- [#9052](https://github.com/gradio-app/gradio/pull/9052) [`f3652eb`](https://github.com/gradio-app/gradio/commit/f3652ebe08211e12739df73c15fd97e5ff81276a) - Video gallery. Thanks @dawoodkhan82!
|
|
40
94
|
- [#8941](https://github.com/gradio-app/gradio/pull/8941) [`97a7bf6`](https://github.com/gradio-app/gradio/commit/97a7bf66a79179d1b91a3199d68e5c11216ca500) - Streaming inputs for 5.0. Thanks @freddyaboulton!
|
|
41
95
|
|
|
96
|
+
## 0.0.4
|
|
97
|
+
|
|
98
|
+
### Fixes
|
|
99
|
+
|
|
100
|
+
- [#9188](https://github.com/gradio-app/gradio/pull/9188) [`8f8e1c6`](https://github.com/gradio-app/gradio/commit/8f8e1c6a0b09b0d1985b8377d94d693cb00f8a18) - Fix multiple trigger bug when function has js. Thanks @freddyaboulton!
|
|
101
|
+
|
|
102
|
+
## 0.0.3
|
|
103
|
+
|
|
42
104
|
### Fixes
|
|
43
105
|
|
|
44
106
|
- [#9163](https://github.com/gradio-app/gradio/pull/9163) [`2b6cbf2`](https://github.com/gradio-app/gradio/commit/2b6cbf25908e42cf027324e54ef2cc0baad11a91) - fix exports and generate types. Thanks @pngwn!
|
|
45
107
|
|
|
46
108
|
### Dependency updates
|
|
47
109
|
|
|
48
|
-
- @gradio/
|
|
49
|
-
- @gradio/
|
|
50
|
-
- @gradio/
|
|
51
|
-
- @gradio/
|
|
52
|
-
- @gradio/
|
|
53
|
-
- @gradio/
|
|
54
|
-
- @gradio/
|
|
55
|
-
- @gradio/
|
|
56
|
-
- @gradio/upload@0.12.4
|
|
57
|
-
- @gradio/
|
|
58
|
-
- @gradio/
|
|
59
|
-
- @gradio/
|
|
60
|
-
- @gradio/
|
|
61
|
-
- @gradio/
|
|
62
|
-
- @gradio/
|
|
63
|
-
- @gradio/
|
|
64
|
-
- @gradio/
|
|
65
|
-
- @gradio/
|
|
66
|
-
- @gradio/
|
|
67
|
-
- @gradio/
|
|
68
|
-
- @gradio/tabs@0.2.14
|
|
110
|
+
- @gradio/code@0.9.1
|
|
111
|
+
- @gradio/paramviewer@0.4.22
|
|
112
|
+
- @gradio/utils@0.6.1
|
|
113
|
+
- @gradio/statustracker@0.7.6
|
|
114
|
+
- @gradio/atoms@0.8.1
|
|
115
|
+
- @gradio/icons@0.7.2
|
|
116
|
+
- @gradio/wasm@0.13.1
|
|
117
|
+
- @gradio/client@1.5.2
|
|
118
|
+
- @gradio/upload@0.12.4
|
|
119
|
+
- @gradio/button@0.2.51
|
|
120
|
+
- @gradio/markdown@0.9.4
|
|
121
|
+
- @gradio/gallery@0.12.2
|
|
122
|
+
- @gradio/theme@0.2.5
|
|
123
|
+
- @gradio/plot@0.6.5
|
|
124
|
+
- @gradio/textbox@0.7.0
|
|
125
|
+
- @gradio/image@0.15.1
|
|
126
|
+
- @gradio/video@0.10.4
|
|
127
|
+
- @gradio/file@0.9.4
|
|
128
|
+
- @gradio/checkbox@0.3.13
|
|
129
|
+
- @gradio/column@0.1.4
|
|
130
|
+
- @gradio/tabs@0.2.14
|
|
69
131
|
|
|
70
132
|
## 0.0.2
|
|
71
133
|
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
package/dist/src/Blocks.svelte
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<script>import { tick } from "svelte";
|
|
1
|
+
<script>import { tick, onMount } from "svelte";
|
|
2
2
|
import { _ } from "svelte-i18n";
|
|
3
3
|
import { Client } from "@gradio/client";
|
|
4
4
|
import { setupi18n } from "./i18n";
|
|
@@ -28,7 +28,10 @@ export let js;
|
|
|
28
28
|
export let fill_height = false;
|
|
29
29
|
export let ready;
|
|
30
30
|
export let username;
|
|
31
|
-
|
|
31
|
+
export let api_prefix;
|
|
32
|
+
export let max_file_size;
|
|
33
|
+
export let initial_layout = void 0;
|
|
34
|
+
let {
|
|
32
35
|
layout: _layout,
|
|
33
36
|
targets,
|
|
34
37
|
update_value,
|
|
@@ -41,33 +44,37 @@ const {
|
|
|
41
44
|
create_layout,
|
|
42
45
|
rerender_layout
|
|
43
46
|
} = create_components();
|
|
47
|
+
$_layout = initial_layout;
|
|
44
48
|
$:
|
|
45
|
-
|
|
49
|
+
components, layout, dependencies, root, app, fill_height, target, run();
|
|
50
|
+
$: {
|
|
51
|
+
ready = !!$_layout;
|
|
52
|
+
}
|
|
53
|
+
async function run() {
|
|
54
|
+
await create_layout({
|
|
46
55
|
components,
|
|
47
56
|
layout,
|
|
48
57
|
dependencies,
|
|
49
|
-
root: root +
|
|
58
|
+
root: root + api_prefix,
|
|
50
59
|
app,
|
|
51
60
|
options: {
|
|
52
61
|
fill_height
|
|
53
62
|
}
|
|
54
63
|
});
|
|
55
|
-
$: {
|
|
56
|
-
ready = !!$_layout;
|
|
57
64
|
}
|
|
58
|
-
let
|
|
59
|
-
let api_docs_visible =
|
|
60
|
-
let api_recorder_visible =
|
|
65
|
+
export let search_params;
|
|
66
|
+
let api_docs_visible = search_params.get("view") === "api" && show_api;
|
|
67
|
+
let api_recorder_visible = search_params.get("view") === "api-recorder" && show_api;
|
|
61
68
|
function set_api_docs_visible(visible) {
|
|
62
69
|
api_recorder_visible = false;
|
|
63
70
|
api_docs_visible = visible;
|
|
64
|
-
let
|
|
71
|
+
let params = new URLSearchParams(window.location.search);
|
|
65
72
|
if (visible) {
|
|
66
|
-
|
|
73
|
+
params.set("view", "api");
|
|
67
74
|
} else {
|
|
68
|
-
|
|
75
|
+
params.delete("view");
|
|
69
76
|
}
|
|
70
|
-
history.replaceState(null, "", "?" +
|
|
77
|
+
history.replaceState(null, "", "?" + params.toString());
|
|
71
78
|
}
|
|
72
79
|
let api_calls = [];
|
|
73
80
|
export let render_complete = false;
|
|
@@ -124,22 +131,17 @@ export function add_new_message(message, type) {
|
|
|
124
131
|
}
|
|
125
132
|
let _error_id = -1;
|
|
126
133
|
let user_left_page = false;
|
|
127
|
-
document.addEventListener("visibilitychange", function() {
|
|
128
|
-
if (document.visibilityState === "hidden") {
|
|
129
|
-
user_left_page = true;
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
134
|
const MESSAGE_QUOTE_RE = /^'([^]+)'$/;
|
|
133
135
|
const DUPLICATE_MESSAGE = $_("blocks.long_requests_queue");
|
|
134
136
|
const MOBILE_QUEUE_WARNING = $_("blocks.connection_can_break");
|
|
135
137
|
const MOBILE_RECONNECT_MESSAGE = $_("blocks.lost_connection");
|
|
138
|
+
const WAITING_FOR_INPUTS_MESSAGE = $_("blocks.waiting_for_inputs");
|
|
136
139
|
const SHOW_DUPLICATE_MESSAGE_ON_ETA = 15;
|
|
137
140
|
const SHOW_MOBILE_QUEUE_WARNING_ON_ETA = 10;
|
|
138
|
-
|
|
139
|
-
navigator.userAgent
|
|
140
|
-
);
|
|
141
|
+
let is_mobile_device = false;
|
|
141
142
|
let showed_duplicate_message = false;
|
|
142
143
|
let showed_mobile_warning = false;
|
|
144
|
+
let inputs_waiting = [];
|
|
143
145
|
function wait_then_trigger_api_call(dep_index, trigger_id = null, event_data = null) {
|
|
144
146
|
let _unsub = () => {
|
|
145
147
|
};
|
|
@@ -165,6 +167,14 @@ async function get_component_value_or_event_data(component_id, trigger_id, event
|
|
|
165
167
|
}
|
|
166
168
|
async function trigger_api_call(dep_index, trigger_id = null, event_data = null) {
|
|
167
169
|
let dep = dependencies.find((dep2) => dep2.id === dep_index);
|
|
170
|
+
if (inputs_waiting.length > 0) {
|
|
171
|
+
for (const input of inputs_waiting) {
|
|
172
|
+
if (dep.inputs.includes(input)) {
|
|
173
|
+
add_new_message(WAITING_FOR_INPUTS_MESSAGE, "warning");
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
168
178
|
const current_status = loading_status.get_status_for_fn(dep_index);
|
|
169
179
|
messages = messages.filter(({ fn_index }) => fn_index !== dep_index);
|
|
170
180
|
if (current_status === "pending" || current_status === "generating") {
|
|
@@ -188,7 +198,7 @@ async function trigger_api_call(dep_index, trigger_id = null, event_data = null)
|
|
|
188
198
|
).then((v) => {
|
|
189
199
|
if (dep.backend_fn) {
|
|
190
200
|
payload.data = v;
|
|
191
|
-
|
|
201
|
+
trigger_prediction(dep, payload);
|
|
192
202
|
} else {
|
|
193
203
|
handle_update(v, dep_index);
|
|
194
204
|
}
|
|
@@ -203,17 +213,20 @@ async function trigger_api_call(dep_index, trigger_id = null, event_data = null)
|
|
|
203
213
|
);
|
|
204
214
|
} else {
|
|
205
215
|
if (dep.backend_fn) {
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
216
|
+
trigger_prediction(dep, payload);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
function trigger_prediction(dep2, payload2) {
|
|
220
|
+
if (dep2.trigger_mode === "once") {
|
|
221
|
+
if (!dep2.pending_request)
|
|
222
|
+
make_prediction(payload2, dep2.connection == "stream");
|
|
223
|
+
} else if (dep2.trigger_mode === "multiple") {
|
|
224
|
+
make_prediction(payload2, dep2.connection == "stream");
|
|
225
|
+
} else if (dep2.trigger_mode === "always_last") {
|
|
226
|
+
if (!dep2.pending_request) {
|
|
227
|
+
make_prediction(payload2, dep2.connection == "stream");
|
|
228
|
+
} else {
|
|
229
|
+
dep2.final_event = payload2;
|
|
217
230
|
}
|
|
218
231
|
}
|
|
219
232
|
}
|
|
@@ -231,7 +244,7 @@ async function trigger_api_call(dep_index, trigger_id = null, event_data = null)
|
|
|
231
244
|
} else if (submit_map.has(dep_index) && dep.inputs.some((id) => get_stream_state(id) === "open")) {
|
|
232
245
|
await app.post_data(
|
|
233
246
|
// @ts-ignore
|
|
234
|
-
`${app.config.root}/stream/${submit_map.get(dep_index).event_id()}`,
|
|
247
|
+
`${app.config.root + app.config.api_prefix}/stream/${submit_map.get(dep_index).event_id()}`,
|
|
235
248
|
{ ...payload2, session_hash: app.session_hash }
|
|
236
249
|
);
|
|
237
250
|
return;
|
|
@@ -273,7 +286,7 @@ async function trigger_api_call(dep_index, trigger_id = null, event_data = null)
|
|
|
273
286
|
const { data, fn_index } = message;
|
|
274
287
|
if (dep.pending_request && dep.final_event) {
|
|
275
288
|
dep.pending_request = false;
|
|
276
|
-
make_prediction(dep.final_event);
|
|
289
|
+
make_prediction(dep.final_event, dep.connection == "stream");
|
|
277
290
|
}
|
|
278
291
|
dep.pending_request = false;
|
|
279
292
|
handle_update(data, fn_index);
|
|
@@ -349,12 +362,14 @@ async function trigger_api_call(dep_index, trigger_id = null, event_data = null)
|
|
|
349
362
|
...messages
|
|
350
363
|
];
|
|
351
364
|
}
|
|
352
|
-
if (status.stage === "complete") {
|
|
365
|
+
if (status.stage === "complete" || status.stage === "generating") {
|
|
353
366
|
status.changed_state_ids?.forEach((id) => {
|
|
354
367
|
dependencies.filter((dep2) => dep2.targets.some(([_id, _2]) => _id === id)).forEach((dep2) => {
|
|
355
368
|
wait_then_trigger_api_call(dep2.id, payload2.trigger_id);
|
|
356
369
|
});
|
|
357
370
|
});
|
|
371
|
+
}
|
|
372
|
+
if (status.stage === "complete") {
|
|
358
373
|
dependencies.forEach(async (dep2) => {
|
|
359
374
|
if (dep2.trigger_after === fn_index) {
|
|
360
375
|
wait_then_trigger_api_call(dep2.id, payload2.trigger_id);
|
|
@@ -439,13 +454,19 @@ async function handle_mount() {
|
|
|
439
454
|
wait_then_trigger_api_call(dep.id);
|
|
440
455
|
}
|
|
441
456
|
});
|
|
442
|
-
if (render_complete)
|
|
457
|
+
if (!target || render_complete)
|
|
443
458
|
return;
|
|
444
459
|
target.addEventListener("prop_change", (e) => {
|
|
445
460
|
if (!isCustomEvent(e))
|
|
446
461
|
throw new Error("not a custom event");
|
|
447
462
|
const { id, prop, value } = e.detail;
|
|
448
463
|
update_value([{ id, prop, value }]);
|
|
464
|
+
if (prop === "input_ready" && value === false) {
|
|
465
|
+
inputs_waiting.push(id);
|
|
466
|
+
}
|
|
467
|
+
if (prop === "input_ready" && value === true) {
|
|
468
|
+
inputs_waiting = inputs_waiting.filter((item) => item !== id);
|
|
469
|
+
}
|
|
449
470
|
});
|
|
450
471
|
target.addEventListener("gradio", (e) => {
|
|
451
472
|
if (!isCustomEvent(e))
|
|
@@ -464,7 +485,7 @@ async function handle_mount() {
|
|
|
464
485
|
if (submit_map.has(dep_id)) {
|
|
465
486
|
app.post_data(
|
|
466
487
|
// @ts-ignore
|
|
467
|
-
`${app.config.root}/stream/${submit_map.get(dep_id).event_id()}/close`,
|
|
488
|
+
`${app.config.root + app.config.api_prefix}/stream/${submit_map.get(dep_id).event_id()}/close`,
|
|
468
489
|
{}
|
|
469
490
|
);
|
|
470
491
|
}
|
|
@@ -524,6 +545,16 @@ function set_status(statuses) {
|
|
|
524
545
|
function isCustomEvent(event) {
|
|
525
546
|
return "detail" in event;
|
|
526
547
|
}
|
|
548
|
+
onMount(() => {
|
|
549
|
+
document.addEventListener("visibilitychange", function() {
|
|
550
|
+
if (document.visibilityState === "hidden") {
|
|
551
|
+
user_left_page = true;
|
|
552
|
+
}
|
|
553
|
+
});
|
|
554
|
+
is_mobile_device = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(
|
|
555
|
+
navigator.userAgent
|
|
556
|
+
);
|
|
557
|
+
});
|
|
527
558
|
</script>
|
|
528
559
|
|
|
529
560
|
<svelte:head>
|
|
@@ -534,19 +565,19 @@ function isCustomEvent(event) {
|
|
|
534
565
|
|
|
535
566
|
<div class="wrap" style:min-height={app_mode ? "100%" : "auto"}>
|
|
536
567
|
<div class="contain" style:flex-grow={app_mode ? "1" : "auto"}>
|
|
537
|
-
{#if $_layout
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
{/if}
|
|
568
|
+
<!-- {#if $_layout} -->
|
|
569
|
+
<MountComponents
|
|
570
|
+
rootNode={$_layout}
|
|
571
|
+
{root}
|
|
572
|
+
{target}
|
|
573
|
+
{theme_mode}
|
|
574
|
+
on:mount={handle_mount}
|
|
575
|
+
{version}
|
|
576
|
+
{autoscroll}
|
|
577
|
+
{max_file_size}
|
|
578
|
+
client={app}
|
|
579
|
+
/>
|
|
580
|
+
<!-- {/if} -->
|
|
550
581
|
</div>
|
|
551
582
|
|
|
552
583
|
{#if show_footer}
|
|
@@ -24,6 +24,10 @@ declare const __propDef: {
|
|
|
24
24
|
fill_height?: boolean | undefined;
|
|
25
25
|
ready: boolean;
|
|
26
26
|
username: string | null;
|
|
27
|
+
api_prefix: string;
|
|
28
|
+
max_file_size: number;
|
|
29
|
+
initial_layout?: LayoutNode | undefined;
|
|
30
|
+
search_params: URLSearchParams;
|
|
27
31
|
render_complete?: boolean | undefined;
|
|
28
32
|
add_new_message?: ((message: string, type: ToastMessage["type"]) => void) | undefined;
|
|
29
33
|
};
|
|
@@ -14,13 +14,15 @@ onMount(() => {
|
|
|
14
14
|
});
|
|
15
15
|
</script>
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
17
|
+
{#if rootNode}
|
|
18
|
+
<Render
|
|
19
|
+
node={rootNode}
|
|
20
|
+
{root}
|
|
21
|
+
{target}
|
|
22
|
+
{theme_mode}
|
|
23
|
+
{version}
|
|
24
|
+
{autoscroll}
|
|
25
|
+
{max_file_size}
|
|
26
|
+
{client}
|
|
27
|
+
/>
|
|
28
|
+
{/if}
|
package/dist/src/Render.svelte
CHANGED
|
@@ -25,17 +25,20 @@ onMount(() => {
|
|
|
25
25
|
}
|
|
26
26
|
};
|
|
27
27
|
});
|
|
28
|
-
$:
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
28
|
+
$: {
|
|
29
|
+
if (node) {
|
|
30
|
+
node.children = node.children && node.children.filter((v) => {
|
|
31
|
+
const valid_node = node.type !== "statustracker";
|
|
32
|
+
if (!valid_node) {
|
|
33
|
+
filtered_children.push(v);
|
|
34
|
+
}
|
|
35
|
+
return valid_node;
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
36
39
|
setContext("BLOCK_KEY", parent);
|
|
37
40
|
$: {
|
|
38
|
-
if (node.type === "form") {
|
|
41
|
+
if (node && node.type === "form") {
|
|
39
42
|
if (node.children?.every((c) => !c.props.visible)) {
|
|
40
43
|
node.props.visible = false;
|
|
41
44
|
} else {
|
|
@@ -44,7 +47,7 @@ $: {
|
|
|
44
47
|
}
|
|
45
48
|
}
|
|
46
49
|
$:
|
|
47
|
-
|
|
50
|
+
node.props.gradio = new Gradio(
|
|
48
51
|
node.id,
|
|
49
52
|
target,
|
|
50
53
|
theme_mode,
|
|
@@ -59,7 +62,7 @@ $:
|
|
|
59
62
|
</script>
|
|
60
63
|
|
|
61
64
|
<RenderComponent
|
|
62
|
-
_id={node
|
|
65
|
+
_id={node?.id}
|
|
63
66
|
component={node.component}
|
|
64
67
|
bind:instance={node.instance}
|
|
65
68
|
bind:value={node.props.value}
|
|
@@ -70,7 +73,6 @@ $:
|
|
|
70
73
|
{...node.props}
|
|
71
74
|
{theme_mode}
|
|
72
75
|
{root}
|
|
73
|
-
gradio={gradio_class}
|
|
74
76
|
>
|
|
75
77
|
{#if node.children && node.children.length}
|
|
76
78
|
{#each node.children as _node (_node.id)}
|
|
@@ -7,7 +7,6 @@ export let target;
|
|
|
7
7
|
export let theme_mode;
|
|
8
8
|
export let instance;
|
|
9
9
|
export let value;
|
|
10
|
-
export let gradio;
|
|
11
10
|
export let elem_id;
|
|
12
11
|
export let elem_classes;
|
|
13
12
|
export let _id;
|
|
@@ -19,6 +18,8 @@ function wrap(component2) {
|
|
|
19
18
|
const props = Object.keys(instance2.$$.props);
|
|
20
19
|
function report(props2) {
|
|
21
20
|
return function(propargs) {
|
|
21
|
+
if (!target)
|
|
22
|
+
return;
|
|
22
23
|
const ev = s(_id, props2, propargs);
|
|
23
24
|
target.dispatchEvent(ev);
|
|
24
25
|
};
|
|
@@ -45,7 +46,6 @@ const _component = wrap(component);
|
|
|
45
46
|
{...$$restProps}
|
|
46
47
|
{theme_mode}
|
|
47
48
|
{root}
|
|
48
|
-
{gradio}
|
|
49
49
|
>
|
|
50
50
|
<slot />
|
|
51
51
|
</svelte:component>
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { SvelteComponent } from "svelte";
|
|
2
|
-
import type { Gradio } from "./gradio_helper";
|
|
3
2
|
import type { ComponentMeta, ThemeMode } from "./types";
|
|
4
3
|
declare const __propDef: {
|
|
5
4
|
props: {
|
|
@@ -10,7 +9,6 @@ declare const __propDef: {
|
|
|
10
9
|
theme_mode: ThemeMode;
|
|
11
10
|
instance: ComponentMeta["instance"];
|
|
12
11
|
value: any;
|
|
13
|
-
gradio: Gradio;
|
|
14
12
|
elem_id: string;
|
|
15
13
|
elem_classes: string[];
|
|
16
14
|
_id: number;
|
package/dist/src/css.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
let supports_adopted_stylesheets = false;
|
|
2
|
-
if ("
|
|
2
|
+
if (typeof window !== "undefined" &&
|
|
3
|
+
"attachShadow" in Element.prototype &&
|
|
3
4
|
"adoptedStyleSheets" in Document.prototype) {
|
|
4
5
|
// Both Shadow DOM and adoptedStyleSheets are supported
|
|
5
6
|
const shadow_root_test = document
|
package/dist/src/init.d.ts
CHANGED
package/dist/src/init.js
CHANGED
|
@@ -3,6 +3,10 @@ import { load_component } from "virtual:component-loader";
|
|
|
3
3
|
import { create_loading_status_store } from "./stores";
|
|
4
4
|
import { _ } from "svelte-i18n";
|
|
5
5
|
let pending_updates = [];
|
|
6
|
+
const is_browser = typeof window !== "undefined";
|
|
7
|
+
const raf = is_browser
|
|
8
|
+
? requestAnimationFrame
|
|
9
|
+
: async (fn) => await fn();
|
|
6
10
|
/**
|
|
7
11
|
* Create a store with the layout and a map of targets
|
|
8
12
|
* @returns A store with the layout and a map of targets
|
|
@@ -21,17 +25,19 @@ export function create_components() {
|
|
|
21
25
|
let app;
|
|
22
26
|
let keyed_component_values = {};
|
|
23
27
|
let _rootNode;
|
|
24
|
-
function
|
|
28
|
+
function set_event_specific_args(dependencies) {
|
|
25
29
|
dependencies.forEach((dep) => {
|
|
26
30
|
dep.targets.forEach((target) => {
|
|
27
31
|
const instance = instance_map[target[0]];
|
|
28
|
-
if (instance && dep.
|
|
29
|
-
|
|
32
|
+
if (instance && dep.event_specific_args?.length > 0) {
|
|
33
|
+
dep.event_specific_args?.forEach((arg) => {
|
|
34
|
+
instance.props[arg] = dep[arg];
|
|
35
|
+
});
|
|
30
36
|
}
|
|
31
37
|
});
|
|
32
38
|
});
|
|
33
39
|
}
|
|
34
|
-
function create_layout({ app: _app, components, layout, dependencies, root, options }) {
|
|
40
|
+
async function create_layout({ app: _app, components, layout, dependencies, root, options }) {
|
|
35
41
|
// make sure the state is settled before proceeding
|
|
36
42
|
flush();
|
|
37
43
|
app = _app;
|
|
@@ -66,10 +72,9 @@ export function create_components() {
|
|
|
66
72
|
acc[c.id] = c;
|
|
67
73
|
return acc;
|
|
68
74
|
}, {});
|
|
69
|
-
walk_layout(layout, root)
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
set_stream_every(dependencies);
|
|
75
|
+
await walk_layout(layout, root);
|
|
76
|
+
layout_store.set(_rootNode);
|
|
77
|
+
set_event_specific_args(dependencies);
|
|
73
78
|
}
|
|
74
79
|
/**
|
|
75
80
|
* Rerender the layout when the config has been modified to attach new components
|
|
@@ -118,7 +123,7 @@ export function create_components() {
|
|
|
118
123
|
walk_layout(layout, root, current_element.parent).then(() => {
|
|
119
124
|
layout_store.set(_rootNode);
|
|
120
125
|
});
|
|
121
|
-
|
|
126
|
+
set_event_specific_args(dependencies);
|
|
122
127
|
}
|
|
123
128
|
async function walk_layout(node, root, parent) {
|
|
124
129
|
const instance = instance_map[node.id];
|
|
@@ -190,7 +195,7 @@ export function create_components() {
|
|
|
190
195
|
if (!update_scheduled) {
|
|
191
196
|
update_scheduled = true;
|
|
192
197
|
update_scheduled_store.set(true);
|
|
193
|
-
|
|
198
|
+
raf(flush);
|
|
194
199
|
}
|
|
195
200
|
}
|
|
196
201
|
function get_data(id) {
|
|
@@ -231,7 +236,7 @@ export function create_components() {
|
|
|
231
236
|
set_time_limit,
|
|
232
237
|
loading_status,
|
|
233
238
|
scheduled_updates: update_scheduled_store,
|
|
234
|
-
create_layout:
|
|
239
|
+
create_layout: create_layout,
|
|
235
240
|
rerender_layout
|
|
236
241
|
};
|
|
237
242
|
}
|
package/dist/src/lang/en.json
CHANGED
|
@@ -22,7 +22,8 @@
|
|
|
22
22
|
"blocks": {
|
|
23
23
|
"connection_can_break": "On mobile, the connection can break if this tab is unfocused or the device sleeps, losing your position in queue.",
|
|
24
24
|
"long_requests_queue": "There is a long queue of requests pending. Duplicate this Space to skip.",
|
|
25
|
-
"lost_connection": "Lost connection due to leaving page. Rejoining queue..."
|
|
25
|
+
"lost_connection": "Lost connection due to leaving page. Rejoining queue...",
|
|
26
|
+
"waiting_for_inputs": "Waiting for file(s) to finish uploading, please retry."
|
|
26
27
|
},
|
|
27
28
|
"checkbox": {
|
|
28
29
|
"checkbox": "Checkbox",
|
package/dist/src/types.d.ts
CHANGED
package/index.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,64 +1,64 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gradio/core",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"devDependencies": {
|
|
6
|
-
"@gradio/accordion": "^0.3.23-beta.
|
|
7
|
-
"@gradio/annotatedimage": "^0.
|
|
8
|
-
"@gradio/audio": "^0.14.0-beta.
|
|
9
|
-
"@gradio/atoms": "^0.
|
|
10
|
-
"@gradio/button": "^0.3.0-beta.
|
|
11
|
-
"@gradio/
|
|
12
|
-
"@gradio/
|
|
13
|
-
"@gradio/checkbox": "^0.4.0-beta.
|
|
14
|
-
"@gradio/
|
|
15
|
-
"@gradio/
|
|
16
|
-
"@gradio/
|
|
17
|
-
"@gradio/code": "^0.
|
|
6
|
+
"@gradio/accordion": "^0.3.23-beta.2",
|
|
7
|
+
"@gradio/annotatedimage": "^0.8.0-beta.3",
|
|
8
|
+
"@gradio/audio": "^0.14.0-beta.3",
|
|
9
|
+
"@gradio/atoms": "^0.9.0-beta.2",
|
|
10
|
+
"@gradio/button": "^0.3.0-beta.3",
|
|
11
|
+
"@gradio/chatbot": "^0.14.0-beta.3",
|
|
12
|
+
"@gradio/box": "^0.2.0-beta.0",
|
|
13
|
+
"@gradio/checkbox": "^0.4.0-beta.2",
|
|
14
|
+
"@gradio/client": "^1.6.0-beta.3",
|
|
15
|
+
"@gradio/colorpicker": "^0.3.13-beta.2",
|
|
16
|
+
"@gradio/checkboxgroup": "^0.6.0-beta.2",
|
|
17
|
+
"@gradio/code": "^0.10.0-beta.3",
|
|
18
18
|
"@gradio/column": "^0.2.0-beta.0",
|
|
19
|
-
"@gradio/dataframe": "^0.
|
|
20
|
-
"@gradio/dataset": "^0.2.5-beta.
|
|
21
|
-
"@gradio/
|
|
22
|
-
"@gradio/
|
|
23
|
-
"@gradio/dropdown": "^0.7.13-beta.
|
|
24
|
-
"@gradio/
|
|
25
|
-
"@gradio/
|
|
26
|
-
"@gradio/fileexplorer": "^0.
|
|
27
|
-
"@gradio/form": "^0.1.25-beta.
|
|
28
|
-
"@gradio/gallery": "^0.13.0-beta.
|
|
29
|
-
"@gradio/highlightedtext": "^0.7.7-beta.1",
|
|
19
|
+
"@gradio/dataframe": "^0.11.0-beta.3",
|
|
20
|
+
"@gradio/dataset": "^0.2.5-beta.3",
|
|
21
|
+
"@gradio/datetime": "^0.1.4-beta.2",
|
|
22
|
+
"@gradio/downloadbutton": "^0.1.28-beta.3",
|
|
23
|
+
"@gradio/dropdown": "^0.7.13-beta.2",
|
|
24
|
+
"@gradio/file": "^0.10.0-beta.3",
|
|
25
|
+
"@gradio/fallback": "^0.3.13-beta.2",
|
|
26
|
+
"@gradio/fileexplorer": "^0.5.0-beta.3",
|
|
27
|
+
"@gradio/form": "^0.1.25-beta.2",
|
|
28
|
+
"@gradio/gallery": "^0.13.0-beta.3",
|
|
30
29
|
"@gradio/group": "^0.2.0-beta.1",
|
|
31
|
-
"@gradio/
|
|
32
|
-
"@gradio/
|
|
33
|
-
"@gradio/
|
|
34
|
-
"@gradio/
|
|
35
|
-
"@gradio/
|
|
36
|
-
"@gradio/label": "^0.3.13-beta.
|
|
37
|
-
"@gradio/markdown": "^0.
|
|
38
|
-
"@gradio/
|
|
39
|
-
"@gradio/model3d": "^0.
|
|
40
|
-
"@gradio/
|
|
41
|
-
"@gradio/
|
|
42
|
-
"@gradio/paramviewer": "^0.4.22-beta.
|
|
43
|
-
"@gradio/plot": "^0.6.5-beta.
|
|
44
|
-
"@gradio/radio": "^0.6.0-beta.
|
|
45
|
-
"@gradio/row": "^0.
|
|
46
|
-
"@gradio/simpledropdown": "^0.2.13-beta.
|
|
47
|
-
"@gradio/
|
|
48
|
-
"@gradio/
|
|
49
|
-
"@gradio/
|
|
50
|
-
"@gradio/
|
|
51
|
-
"@gradio/statustracker": "^0.8.0-beta.
|
|
52
|
-
"@gradio/
|
|
53
|
-
"@gradio/tabs": "^0.3.0-beta.
|
|
54
|
-
"@gradio/textbox": "^0.7.0-beta.
|
|
30
|
+
"@gradio/highlightedtext": "^0.7.7-beta.2",
|
|
31
|
+
"@gradio/html": "^0.4.0-beta.2",
|
|
32
|
+
"@gradio/image": "^0.16.0-beta.3",
|
|
33
|
+
"@gradio/icons": "^0.8.0-beta.2",
|
|
34
|
+
"@gradio/imageeditor": "^0.11.0-beta.3",
|
|
35
|
+
"@gradio/label": "^0.3.13-beta.2",
|
|
36
|
+
"@gradio/markdown": "^0.10.0-beta.2",
|
|
37
|
+
"@gradio/json": "^0.5.0-beta.2",
|
|
38
|
+
"@gradio/model3d": "^0.13.0-beta.3",
|
|
39
|
+
"@gradio/multimodaltextbox": "^0.6.0-beta.3",
|
|
40
|
+
"@gradio/number": "^0.4.13-beta.2",
|
|
41
|
+
"@gradio/paramviewer": "^0.4.22-beta.2",
|
|
42
|
+
"@gradio/plot": "^0.6.5-beta.2",
|
|
43
|
+
"@gradio/radio": "^0.6.0-beta.2",
|
|
44
|
+
"@gradio/row": "^0.2.0-beta.1",
|
|
45
|
+
"@gradio/simpledropdown": "^0.2.13-beta.2",
|
|
46
|
+
"@gradio/nativeplot": "^0.4.0-beta.2",
|
|
47
|
+
"@gradio/simpletextbox": "^0.2.13-beta.2",
|
|
48
|
+
"@gradio/state": "^0.1.2",
|
|
49
|
+
"@gradio/slider": "^0.5.0-beta.2",
|
|
50
|
+
"@gradio/statustracker": "^0.8.0-beta.2",
|
|
51
|
+
"@gradio/simpleimage": "^0.8.0-beta.3",
|
|
52
|
+
"@gradio/tabs": "^0.3.0-beta.2",
|
|
53
|
+
"@gradio/textbox": "^0.7.0-beta.2",
|
|
55
54
|
"@gradio/theme": "^0.3.0-beta.1",
|
|
56
|
-
"@gradio/
|
|
57
|
-
"@gradio/
|
|
58
|
-
"@gradio/
|
|
59
|
-
"@gradio/
|
|
60
|
-
"@gradio/
|
|
61
|
-
"@gradio/wasm": "^0.
|
|
55
|
+
"@gradio/uploadbutton": "^0.7.0-beta.3",
|
|
56
|
+
"@gradio/video": "^0.11.0-beta.3",
|
|
57
|
+
"@gradio/tabitem": "^0.3.0-beta.2",
|
|
58
|
+
"@gradio/timer": "^0.3.3-beta.2",
|
|
59
|
+
"@gradio/utils": "^0.7.0-beta.2",
|
|
60
|
+
"@gradio/wasm": "^0.14.0-beta.2",
|
|
61
|
+
"@gradio/upload": "^0.13.0-beta.3"
|
|
62
62
|
},
|
|
63
63
|
"msw": {
|
|
64
64
|
"workerDirectory": "public"
|
package/src/Blocks.svelte
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import { tick } from "svelte";
|
|
2
|
+
import { tick, onMount } from "svelte";
|
|
3
3
|
import { _ } from "svelte-i18n";
|
|
4
4
|
import { Client } from "@gradio/client";
|
|
5
5
|
|
|
@@ -45,8 +45,11 @@
|
|
|
45
45
|
export let fill_height = false;
|
|
46
46
|
export let ready: boolean;
|
|
47
47
|
export let username: string | null;
|
|
48
|
+
export let api_prefix: string;
|
|
49
|
+
export let max_file_size: number;
|
|
50
|
+
export let initial_layout: LayoutNode | undefined = undefined;
|
|
48
51
|
|
|
49
|
-
|
|
52
|
+
let {
|
|
50
53
|
layout: _layout,
|
|
51
54
|
targets,
|
|
52
55
|
update_value,
|
|
@@ -60,24 +63,32 @@
|
|
|
60
63
|
rerender_layout
|
|
61
64
|
} = create_components();
|
|
62
65
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
root: root + app.api_prefix,
|
|
68
|
-
app,
|
|
69
|
-
options: {
|
|
70
|
-
fill_height
|
|
71
|
-
}
|
|
72
|
-
});
|
|
66
|
+
// @ts-ignore
|
|
67
|
+
$_layout = initial_layout;
|
|
68
|
+
|
|
69
|
+
$: components, layout, dependencies, root, app, fill_height, target, run();
|
|
73
70
|
|
|
74
71
|
$: {
|
|
75
72
|
ready = !!$_layout;
|
|
76
73
|
}
|
|
77
74
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
75
|
+
async function run(): Promise<void> {
|
|
76
|
+
await create_layout({
|
|
77
|
+
components,
|
|
78
|
+
layout,
|
|
79
|
+
dependencies,
|
|
80
|
+
root: root + api_prefix,
|
|
81
|
+
app,
|
|
82
|
+
options: {
|
|
83
|
+
fill_height
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export let search_params: URLSearchParams;
|
|
89
|
+
let api_docs_visible = search_params.get("view") === "api" && show_api;
|
|
90
|
+
let api_recorder_visible =
|
|
91
|
+
search_params.get("view") === "api-recorder" && show_api;
|
|
81
92
|
function set_api_docs_visible(visible: boolean): void {
|
|
82
93
|
api_recorder_visible = false;
|
|
83
94
|
api_docs_visible = visible;
|
|
@@ -169,25 +180,19 @@
|
|
|
169
180
|
let _error_id = -1;
|
|
170
181
|
|
|
171
182
|
let user_left_page = false;
|
|
172
|
-
document.addEventListener("visibilitychange", function () {
|
|
173
|
-
if (document.visibilityState === "hidden") {
|
|
174
|
-
user_left_page = true;
|
|
175
|
-
}
|
|
176
|
-
});
|
|
177
183
|
|
|
178
184
|
const MESSAGE_QUOTE_RE = /^'([^]+)'$/;
|
|
179
185
|
|
|
180
186
|
const DUPLICATE_MESSAGE = $_("blocks.long_requests_queue");
|
|
181
187
|
const MOBILE_QUEUE_WARNING = $_("blocks.connection_can_break");
|
|
182
188
|
const MOBILE_RECONNECT_MESSAGE = $_("blocks.lost_connection");
|
|
189
|
+
const WAITING_FOR_INPUTS_MESSAGE = $_("blocks.waiting_for_inputs");
|
|
183
190
|
const SHOW_DUPLICATE_MESSAGE_ON_ETA = 15;
|
|
184
191
|
const SHOW_MOBILE_QUEUE_WARNING_ON_ETA = 10;
|
|
185
|
-
|
|
186
|
-
/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(
|
|
187
|
-
navigator.userAgent
|
|
188
|
-
);
|
|
192
|
+
let is_mobile_device = false;
|
|
189
193
|
let showed_duplicate_message = false;
|
|
190
194
|
let showed_mobile_warning = false;
|
|
195
|
+
let inputs_waiting: number[] = [];
|
|
191
196
|
|
|
192
197
|
// as state updates are not synchronous, we need to ensure updates are flushed before triggering any requests
|
|
193
198
|
function wait_then_trigger_api_call(
|
|
@@ -233,7 +238,14 @@
|
|
|
233
238
|
event_data: unknown = null
|
|
234
239
|
): Promise<void> {
|
|
235
240
|
let dep = dependencies.find((dep) => dep.id === dep_index)!;
|
|
236
|
-
|
|
241
|
+
if (inputs_waiting.length > 0) {
|
|
242
|
+
for (const input of inputs_waiting) {
|
|
243
|
+
if (dep.inputs.includes(input)) {
|
|
244
|
+
add_new_message(WAITING_FOR_INPUTS_MESSAGE, "warning");
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
237
249
|
const current_status = loading_status.get_status_for_fn(dep_index);
|
|
238
250
|
messages = messages.filter(({ fn_index }) => fn_index !== dep_index);
|
|
239
251
|
if (current_status === "pending" || current_status === "generating") {
|
|
@@ -261,7 +273,7 @@
|
|
|
261
273
|
.then((v: unknown[]) => {
|
|
262
274
|
if (dep.backend_fn) {
|
|
263
275
|
payload.data = v;
|
|
264
|
-
|
|
276
|
+
trigger_prediction(dep, payload);
|
|
265
277
|
} else {
|
|
266
278
|
handle_update(v, dep_index);
|
|
267
279
|
}
|
|
@@ -276,17 +288,21 @@
|
|
|
276
288
|
);
|
|
277
289
|
} else {
|
|
278
290
|
if (dep.backend_fn) {
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
291
|
+
trigger_prediction(dep, payload);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
function trigger_prediction(dep: Dependency, payload: Payload): void {
|
|
296
|
+
if (dep.trigger_mode === "once") {
|
|
297
|
+
if (!dep.pending_request)
|
|
283
298
|
make_prediction(payload, dep.connection == "stream");
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
299
|
+
} else if (dep.trigger_mode === "multiple") {
|
|
300
|
+
make_prediction(payload, dep.connection == "stream");
|
|
301
|
+
} else if (dep.trigger_mode === "always_last") {
|
|
302
|
+
if (!dep.pending_request) {
|
|
303
|
+
make_prediction(payload, dep.connection == "stream");
|
|
304
|
+
} else {
|
|
305
|
+
dep.final_event = payload;
|
|
290
306
|
}
|
|
291
307
|
}
|
|
292
308
|
}
|
|
@@ -315,7 +331,7 @@
|
|
|
315
331
|
) {
|
|
316
332
|
await app.post_data(
|
|
317
333
|
// @ts-ignore
|
|
318
|
-
`${app.config.root}/stream/${submit_map.get(dep_index).event_id()}`,
|
|
334
|
+
`${app.config.root + app.config.api_prefix}/stream/${submit_map.get(dep_index).event_id()}`,
|
|
319
335
|
{ ...payload, session_hash: app.session_hash }
|
|
320
336
|
);
|
|
321
337
|
return;
|
|
@@ -360,7 +376,7 @@
|
|
|
360
376
|
const { data, fn_index } = message;
|
|
361
377
|
if (dep.pending_request && dep.final_event) {
|
|
362
378
|
dep.pending_request = false;
|
|
363
|
-
make_prediction(dep.final_event);
|
|
379
|
+
make_prediction(dep.final_event, dep.connection == "stream");
|
|
364
380
|
}
|
|
365
381
|
dep.pending_request = false;
|
|
366
382
|
handle_update(data, fn_index);
|
|
@@ -417,6 +433,7 @@
|
|
|
417
433
|
}
|
|
418
434
|
}
|
|
419
435
|
|
|
436
|
+
/* eslint-disable complexity */
|
|
420
437
|
function handle_status_update(message: StatusMessage): void {
|
|
421
438
|
const { fn_index, ...status } = message;
|
|
422
439
|
if (status.stage === "streaming" && status.time_limit) {
|
|
@@ -463,7 +480,7 @@
|
|
|
463
480
|
];
|
|
464
481
|
}
|
|
465
482
|
|
|
466
|
-
if (status.stage === "complete") {
|
|
483
|
+
if (status.stage === "complete" || status.stage === "generating") {
|
|
467
484
|
status.changed_state_ids?.forEach((id) => {
|
|
468
485
|
dependencies
|
|
469
486
|
.filter((dep) => dep.targets.some(([_id, _]) => _id === id))
|
|
@@ -471,6 +488,8 @@
|
|
|
471
488
|
wait_then_trigger_api_call(dep.id, payload.trigger_id);
|
|
472
489
|
});
|
|
473
490
|
});
|
|
491
|
+
}
|
|
492
|
+
if (status.stage === "complete") {
|
|
474
493
|
dependencies.forEach(async (dep) => {
|
|
475
494
|
if (dep.trigger_after === fn_index) {
|
|
476
495
|
wait_then_trigger_api_call(dep.id, payload.trigger_id);
|
|
@@ -519,6 +538,7 @@
|
|
|
519
538
|
}
|
|
520
539
|
}
|
|
521
540
|
}
|
|
541
|
+
/* eslint-enable complexity */
|
|
522
542
|
|
|
523
543
|
function trigger_share(title: string | undefined, description: string): void {
|
|
524
544
|
if (space_id === null) {
|
|
@@ -571,12 +591,18 @@
|
|
|
571
591
|
}
|
|
572
592
|
});
|
|
573
593
|
|
|
574
|
-
if (render_complete) return;
|
|
594
|
+
if (!target || render_complete) return;
|
|
575
595
|
|
|
576
596
|
target.addEventListener("prop_change", (e: Event) => {
|
|
577
597
|
if (!isCustomEvent(e)) throw new Error("not a custom event");
|
|
578
598
|
const { id, prop, value } = e.detail;
|
|
579
599
|
update_value([{ id, prop, value }]);
|
|
600
|
+
if (prop === "input_ready" && value === false) {
|
|
601
|
+
inputs_waiting.push(id);
|
|
602
|
+
}
|
|
603
|
+
if (prop === "input_ready" && value === true) {
|
|
604
|
+
inputs_waiting = inputs_waiting.filter((item) => item !== id);
|
|
605
|
+
}
|
|
580
606
|
});
|
|
581
607
|
target.addEventListener("gradio", (e: Event) => {
|
|
582
608
|
if (!isCustomEvent(e)) throw new Error("not a custom event");
|
|
@@ -596,7 +622,7 @@
|
|
|
596
622
|
if (submit_map.has(dep_id)) {
|
|
597
623
|
app.post_data(
|
|
598
624
|
// @ts-ignore
|
|
599
|
-
`${app.config.root}/stream/${submit_map.get(dep_id).event_id()}/close`,
|
|
625
|
+
`${app.config.root + app.config.api_prefix}/stream/${submit_map.get(dep_id).event_id()}/close`,
|
|
600
626
|
{}
|
|
601
627
|
);
|
|
602
628
|
}
|
|
@@ -671,6 +697,19 @@
|
|
|
671
697
|
function isCustomEvent(event: Event): event is CustomEvent {
|
|
672
698
|
return "detail" in event;
|
|
673
699
|
}
|
|
700
|
+
|
|
701
|
+
onMount(() => {
|
|
702
|
+
document.addEventListener("visibilitychange", function () {
|
|
703
|
+
if (document.visibilityState === "hidden") {
|
|
704
|
+
user_left_page = true;
|
|
705
|
+
}
|
|
706
|
+
});
|
|
707
|
+
|
|
708
|
+
is_mobile_device =
|
|
709
|
+
/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(
|
|
710
|
+
navigator.userAgent
|
|
711
|
+
);
|
|
712
|
+
});
|
|
674
713
|
</script>
|
|
675
714
|
|
|
676
715
|
<svelte:head>
|
|
@@ -681,19 +720,19 @@
|
|
|
681
720
|
|
|
682
721
|
<div class="wrap" style:min-height={app_mode ? "100%" : "auto"}>
|
|
683
722
|
<div class="contain" style:flex-grow={app_mode ? "1" : "auto"}>
|
|
684
|
-
{#if $_layout
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
{/if}
|
|
723
|
+
<!-- {#if $_layout} -->
|
|
724
|
+
<MountComponents
|
|
725
|
+
rootNode={$_layout}
|
|
726
|
+
{root}
|
|
727
|
+
{target}
|
|
728
|
+
{theme_mode}
|
|
729
|
+
on:mount={handle_mount}
|
|
730
|
+
{version}
|
|
731
|
+
{autoscroll}
|
|
732
|
+
{max_file_size}
|
|
733
|
+
client={app}
|
|
734
|
+
/>
|
|
735
|
+
<!-- {/if} -->
|
|
697
736
|
</div>
|
|
698
737
|
|
|
699
738
|
{#if show_footer}
|
|
@@ -18,13 +18,15 @@
|
|
|
18
18
|
});
|
|
19
19
|
</script>
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
21
|
+
{#if rootNode}
|
|
22
|
+
<Render
|
|
23
|
+
node={rootNode}
|
|
24
|
+
{root}
|
|
25
|
+
{target}
|
|
26
|
+
{theme_mode}
|
|
27
|
+
{version}
|
|
28
|
+
{autoscroll}
|
|
29
|
+
{max_file_size}
|
|
30
|
+
{client}
|
|
31
|
+
/>
|
|
32
|
+
{/if}
|
package/src/Render.svelte
CHANGED
|
@@ -36,20 +36,24 @@
|
|
|
36
36
|
};
|
|
37
37
|
});
|
|
38
38
|
|
|
39
|
-
$:
|
|
40
|
-
node
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
39
|
+
$: {
|
|
40
|
+
if (node) {
|
|
41
|
+
node.children =
|
|
42
|
+
node.children &&
|
|
43
|
+
node.children.filter((v) => {
|
|
44
|
+
const valid_node = node.type !== "statustracker";
|
|
45
|
+
if (!valid_node) {
|
|
46
|
+
filtered_children.push(v);
|
|
47
|
+
}
|
|
48
|
+
return valid_node;
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
48
52
|
|
|
49
53
|
setContext("BLOCK_KEY", parent);
|
|
50
54
|
|
|
51
55
|
$: {
|
|
52
|
-
if (node.type === "form") {
|
|
56
|
+
if (node && node.type === "form") {
|
|
53
57
|
if (node.children?.every((c) => !c.props.visible)) {
|
|
54
58
|
node.props.visible = false;
|
|
55
59
|
} else {
|
|
@@ -58,7 +62,7 @@
|
|
|
58
62
|
}
|
|
59
63
|
}
|
|
60
64
|
|
|
61
|
-
$:
|
|
65
|
+
$: node.props.gradio = new Gradio<Record<string, any>>(
|
|
62
66
|
node.id,
|
|
63
67
|
target,
|
|
64
68
|
theme_mode,
|
|
@@ -73,7 +77,7 @@
|
|
|
73
77
|
</script>
|
|
74
78
|
|
|
75
79
|
<RenderComponent
|
|
76
|
-
_id={node
|
|
80
|
+
_id={node?.id}
|
|
77
81
|
component={node.component}
|
|
78
82
|
bind:instance={node.instance}
|
|
79
83
|
bind:value={node.props.value}
|
|
@@ -84,7 +88,6 @@
|
|
|
84
88
|
{...node.props}
|
|
85
89
|
{theme_mode}
|
|
86
90
|
{root}
|
|
87
|
-
gradio={gradio_class}
|
|
88
91
|
>
|
|
89
92
|
{#if node.children && node.children.length}
|
|
90
93
|
{#each node.children as _node (_node.id)}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
export let theme_mode: ThemeMode;
|
|
14
14
|
export let instance: ComponentMeta["instance"];
|
|
15
15
|
export let value: any;
|
|
16
|
-
export let gradio: Gradio;
|
|
16
|
+
// export let gradio: Gradio;
|
|
17
17
|
export let elem_id: string;
|
|
18
18
|
export let elem_classes: string[];
|
|
19
19
|
export let _id: number;
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
|
|
33
33
|
function report(props: string) {
|
|
34
34
|
return function (propargs: any) {
|
|
35
|
+
if (!target) return;
|
|
35
36
|
const ev = s(_id, props, propargs);
|
|
36
37
|
target.dispatchEvent(ev);
|
|
37
38
|
};
|
|
@@ -61,7 +62,6 @@
|
|
|
61
62
|
{...$$restProps}
|
|
62
63
|
{theme_mode}
|
|
63
64
|
{root}
|
|
64
|
-
{gradio}
|
|
65
65
|
>
|
|
66
66
|
<slot />
|
|
67
67
|
</svelte:component>
|
package/src/css.ts
CHANGED
package/src/init.ts
CHANGED
|
@@ -18,6 +18,10 @@ export interface UpdateTransaction {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
let pending_updates: UpdateTransaction[][] = [];
|
|
21
|
+
const is_browser = typeof window !== "undefined";
|
|
22
|
+
const raf = is_browser
|
|
23
|
+
? requestAnimationFrame
|
|
24
|
+
: async (fn: () => Promise<void> | void) => await fn();
|
|
21
25
|
|
|
22
26
|
/**
|
|
23
27
|
* Create a store with the layout and a map of targets
|
|
@@ -42,7 +46,7 @@ export function create_components(): {
|
|
|
42
46
|
options: {
|
|
43
47
|
fill_height: boolean;
|
|
44
48
|
};
|
|
45
|
-
}) => void
|
|
49
|
+
}) => Promise<void>;
|
|
46
50
|
rerender_layout: (args: {
|
|
47
51
|
render_id: number;
|
|
48
52
|
components: ComponentMeta[];
|
|
@@ -67,18 +71,20 @@ export function create_components(): {
|
|
|
67
71
|
let keyed_component_values: Record<string | number, any> = {};
|
|
68
72
|
let _rootNode: ComponentMeta;
|
|
69
73
|
|
|
70
|
-
function
|
|
74
|
+
function set_event_specific_args(dependencies: Dependency[]): void {
|
|
71
75
|
dependencies.forEach((dep) => {
|
|
72
76
|
dep.targets.forEach((target) => {
|
|
73
77
|
const instance = instance_map[target[0]];
|
|
74
|
-
if (instance && dep.
|
|
75
|
-
|
|
78
|
+
if (instance && dep.event_specific_args?.length > 0) {
|
|
79
|
+
dep.event_specific_args?.forEach((arg: string) => {
|
|
80
|
+
instance.props[arg] = dep[arg as keyof Dependency];
|
|
81
|
+
});
|
|
76
82
|
}
|
|
77
83
|
});
|
|
78
84
|
});
|
|
79
85
|
}
|
|
80
86
|
|
|
81
|
-
function create_layout({
|
|
87
|
+
async function create_layout({
|
|
82
88
|
app: _app,
|
|
83
89
|
components,
|
|
84
90
|
layout,
|
|
@@ -94,7 +100,7 @@ export function create_components(): {
|
|
|
94
100
|
options: {
|
|
95
101
|
fill_height: boolean;
|
|
96
102
|
};
|
|
97
|
-
}): void {
|
|
103
|
+
}): Promise<void> {
|
|
98
104
|
// make sure the state is settled before proceeding
|
|
99
105
|
flush();
|
|
100
106
|
app = _app;
|
|
@@ -146,11 +152,10 @@ export function create_components(): {
|
|
|
146
152
|
{} as { [id: number]: ComponentMeta }
|
|
147
153
|
);
|
|
148
154
|
|
|
149
|
-
walk_layout(layout, root)
|
|
150
|
-
layout_store.set(_rootNode);
|
|
151
|
-
});
|
|
155
|
+
await walk_layout(layout, root);
|
|
152
156
|
|
|
153
|
-
|
|
157
|
+
layout_store.set(_rootNode);
|
|
158
|
+
set_event_specific_args(dependencies);
|
|
154
159
|
}
|
|
155
160
|
|
|
156
161
|
/**
|
|
@@ -227,7 +232,7 @@ export function create_components(): {
|
|
|
227
232
|
layout_store.set(_rootNode);
|
|
228
233
|
});
|
|
229
234
|
|
|
230
|
-
|
|
235
|
+
set_event_specific_args(dependencies);
|
|
231
236
|
}
|
|
232
237
|
|
|
233
238
|
async function walk_layout(
|
|
@@ -333,7 +338,7 @@ export function create_components(): {
|
|
|
333
338
|
if (!update_scheduled) {
|
|
334
339
|
update_scheduled = true;
|
|
335
340
|
update_scheduled_store.set(true);
|
|
336
|
-
|
|
341
|
+
raf(flush);
|
|
337
342
|
}
|
|
338
343
|
}
|
|
339
344
|
|
|
@@ -384,8 +389,7 @@ export function create_components(): {
|
|
|
384
389
|
set_time_limit,
|
|
385
390
|
loading_status,
|
|
386
391
|
scheduled_updates: update_scheduled_store,
|
|
387
|
-
create_layout:
|
|
388
|
-
requestAnimationFrame(() => create_layout(...args)),
|
|
392
|
+
create_layout: create_layout,
|
|
389
393
|
rerender_layout
|
|
390
394
|
};
|
|
391
395
|
}
|
package/src/lang/en.json
CHANGED
|
@@ -22,7 +22,8 @@
|
|
|
22
22
|
"blocks": {
|
|
23
23
|
"connection_can_break": "On mobile, the connection can break if this tab is unfocused or the device sleeps, losing your position in queue.",
|
|
24
24
|
"long_requests_queue": "There is a long queue of requests pending. Duplicate this Space to skip.",
|
|
25
|
-
"lost_connection": "Lost connection due to leaving page. Rejoining queue..."
|
|
25
|
+
"lost_connection": "Lost connection due to leaving page. Rejoining queue...",
|
|
26
|
+
"waiting_for_inputs": "Waiting for file(s) to finish uploading, please retry."
|
|
26
27
|
},
|
|
27
28
|
"checkbox": {
|
|
28
29
|
"checkbox": "Checkbox",
|