@gradio/core 0.0.4 → 0.1.0-beta.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 +76 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/src/Blocks.svelte +129 -42
- 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/api_docs/ApiDocs.svelte +4 -1
- package/dist/src/api_docs/CodeSnippet.svelte +7 -2
- package/dist/src/api_docs/CodeSnippet.svelte.d.ts +1 -0
- package/dist/src/css.js +2 -1
- package/dist/src/init.d.ts +4 -1
- package/dist/src/init.js +46 -6
- package/dist/src/lang/en.json +5 -3
- package/dist/src/lang/zh-CN.json +2 -1
- package/dist/src/stores.d.ts +2 -1
- package/dist/src/stores.js +1 -1
- package/dist/src/types.d.ts +5 -0
- package/index.ts +1 -0
- package/package.json +56 -56
- package/src/Blocks.svelte +202 -84
- package/src/MountComponents.svelte +12 -10
- package/src/Render.svelte +16 -13
- package/src/RenderComponent.svelte +2 -2
- package/src/api_docs/ApiDocs.svelte +4 -1
- package/src/api_docs/CodeSnippet.svelte +6 -2
- package/src/css.ts +1 -0
- package/src/init.ts +62 -10
- package/src/lang/en.json +5 -3
- package/src/lang/zh-CN.json +2 -1
- package/src/stores.ts +5 -2
- package/src/types.ts +5 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,81 @@
|
|
|
1
1
|
# @gradio/core
|
|
2
2
|
|
|
3
|
+
## 0.1.0-beta.2
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- [#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!
|
|
8
|
+
- [#9339](https://github.com/gradio-app/gradio/pull/9339) [`4c8c6f2`](https://github.com/gradio-app/gradio/commit/4c8c6f2fe603081941c5fdc43f48a0632b9f31ad) - Ssr part 2. Thanks @pngwn!
|
|
9
|
+
- [#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!
|
|
10
|
+
- [#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!
|
|
11
|
+
- [#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!
|
|
12
|
+
|
|
13
|
+
### Fixes
|
|
14
|
+
|
|
15
|
+
- [#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!
|
|
16
|
+
|
|
17
|
+
### Dependency updates
|
|
18
|
+
|
|
19
|
+
- @gradio/atoms@0.9.0-beta.2
|
|
20
|
+
- @gradio/gallery@0.13.0-beta.2
|
|
21
|
+
- @gradio/upload@0.13.0-beta.2
|
|
22
|
+
- @gradio/wasm@0.14.0-beta.2
|
|
23
|
+
- @gradio/markdown@0.10.0-beta.2
|
|
24
|
+
- @gradio/client@1.6.0-beta.2
|
|
25
|
+
- @gradio/icons@0.8.0-beta.2
|
|
26
|
+
- @gradio/statustracker@0.8.0-beta.2
|
|
27
|
+
- @gradio/utils@0.7.0-beta.2
|
|
28
|
+
- @gradio/plot@0.6.5-beta.2
|
|
29
|
+
- @gradio/button@0.3.0-beta.2
|
|
30
|
+
- @gradio/file@0.10.0-beta.2
|
|
31
|
+
- @gradio/image@0.16.0-beta.2
|
|
32
|
+
- @gradio/video@0.11.0-beta.2
|
|
33
|
+
- @gradio/code@0.10.0-beta.2
|
|
34
|
+
- @gradio/paramviewer@0.4.22-beta.2
|
|
35
|
+
- @gradio/checkbox@0.4.0-beta.2
|
|
36
|
+
- @gradio/column@0.2.0-beta.0
|
|
37
|
+
- @gradio/textbox@0.7.0-beta.2
|
|
38
|
+
- @gradio/tabs@0.3.0-beta.2
|
|
39
|
+
|
|
40
|
+
## 0.1.0-beta.1
|
|
41
|
+
|
|
42
|
+
### Features
|
|
43
|
+
|
|
44
|
+
- [#9200](https://github.com/gradio-app/gradio/pull/9200) [`2e179d3`](https://github.com/gradio-app/gradio/commit/2e179d35be6ed60a5a6bfc7303178d63e41781ad) - prefix api routes. Thanks @pngwn!
|
|
45
|
+
|
|
46
|
+
### Dependency updates
|
|
47
|
+
|
|
48
|
+
- @gradio/video@0.11.0-beta.1
|
|
49
|
+
- @gradio/atoms@0.8.1-beta.1
|
|
50
|
+
- @gradio/icons@0.8.0-beta.1
|
|
51
|
+
- @gradio/statustracker@0.8.0-beta.1
|
|
52
|
+
- @gradio/utils@0.7.0-beta.1
|
|
53
|
+
- @gradio/client@1.6.0-beta.1
|
|
54
|
+
- @gradio/image@0.16.0-beta.1
|
|
55
|
+
- @gradio/upload@0.12.4-beta.1
|
|
56
|
+
- @gradio/markdown@0.9.4-beta.1
|
|
57
|
+
- @gradio/wasm@0.13.1-beta.1
|
|
58
|
+
- @gradio/theme@0.3.0-beta.1
|
|
59
|
+
- @gradio/gallery@0.13.0-beta.1
|
|
60
|
+
- @gradio/plot@0.6.5-beta.1
|
|
61
|
+
- @gradio/tabs@0.3.0-beta.1
|
|
62
|
+
- @gradio/column@0.2.0-beta.0
|
|
63
|
+
- @gradio/button@0.3.0-beta.1
|
|
64
|
+
- @gradio/textbox@0.7.0-beta.1
|
|
65
|
+
- @gradio/code@0.9.1-beta.1
|
|
66
|
+
- @gradio/paramviewer@0.4.22-beta.1
|
|
67
|
+
- @gradio/file@0.9.4-beta.1
|
|
68
|
+
- @gradio/checkbox@0.4.0-beta.1
|
|
69
|
+
|
|
70
|
+
## 0.1.0-beta.0
|
|
71
|
+
|
|
72
|
+
### Features
|
|
73
|
+
|
|
74
|
+
- [#9149](https://github.com/gradio-app/gradio/pull/9149) [`3d7a9b8`](https://github.com/gradio-app/gradio/commit/3d7a9b81f6fef06187eca832471dc1692eb493a0) - Open audio/image input stream only when queue is ready. Thanks @freddyaboulton!
|
|
75
|
+
- [#9173](https://github.com/gradio-app/gradio/pull/9173) [`66349fe`](https://github.com/gradio-app/gradio/commit/66349fe26827e3a3c15b738a1177e95fec7f5554) - Streaming Guides. Thanks @freddyaboulton!
|
|
76
|
+
- [#9052](https://github.com/gradio-app/gradio/pull/9052) [`f3652eb`](https://github.com/gradio-app/gradio/commit/f3652ebe08211e12739df73c15fd97e5ff81276a) - Video gallery. Thanks @dawoodkhan82!
|
|
77
|
+
- [#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!
|
|
78
|
+
|
|
3
79
|
## 0.0.4
|
|
4
80
|
|
|
5
81
|
### Fixes
|
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,43 +28,53 @@ 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,
|
|
35
38
|
get_data,
|
|
39
|
+
modify_stream,
|
|
40
|
+
get_stream_state,
|
|
41
|
+
set_time_limit,
|
|
36
42
|
loading_status,
|
|
37
43
|
scheduled_updates,
|
|
38
44
|
create_layout,
|
|
39
45
|
rerender_layout
|
|
40
46
|
} = create_components();
|
|
47
|
+
$_layout = initial_layout;
|
|
41
48
|
$:
|
|
42
|
-
|
|
49
|
+
components, layout, dependencies, root, app, fill_height, target, run();
|
|
50
|
+
$: {
|
|
51
|
+
ready = !!$_layout;
|
|
52
|
+
}
|
|
53
|
+
async function run() {
|
|
54
|
+
await create_layout({
|
|
43
55
|
components,
|
|
44
56
|
layout,
|
|
45
57
|
dependencies,
|
|
46
|
-
root,
|
|
58
|
+
root: root + api_prefix,
|
|
47
59
|
app,
|
|
48
60
|
options: {
|
|
49
61
|
fill_height
|
|
50
62
|
}
|
|
51
63
|
});
|
|
52
|
-
$: {
|
|
53
|
-
ready = !!$_layout;
|
|
54
64
|
}
|
|
55
|
-
let
|
|
56
|
-
let api_docs_visible =
|
|
57
|
-
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;
|
|
58
68
|
function set_api_docs_visible(visible) {
|
|
59
69
|
api_recorder_visible = false;
|
|
60
70
|
api_docs_visible = visible;
|
|
61
|
-
let
|
|
71
|
+
let params = new URLSearchParams(window.location.search);
|
|
62
72
|
if (visible) {
|
|
63
|
-
|
|
73
|
+
params.set("view", "api");
|
|
64
74
|
} else {
|
|
65
|
-
|
|
75
|
+
params.delete("view");
|
|
66
76
|
}
|
|
67
|
-
history.replaceState(null, "", "?" +
|
|
77
|
+
history.replaceState(null, "", "?" + params.toString());
|
|
68
78
|
}
|
|
69
79
|
let api_calls = [];
|
|
70
80
|
export let render_complete = false;
|
|
@@ -121,22 +131,17 @@ export function add_new_message(message, type) {
|
|
|
121
131
|
}
|
|
122
132
|
let _error_id = -1;
|
|
123
133
|
let user_left_page = false;
|
|
124
|
-
document.addEventListener("visibilitychange", function() {
|
|
125
|
-
if (document.visibilityState === "hidden") {
|
|
126
|
-
user_left_page = true;
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
134
|
const MESSAGE_QUOTE_RE = /^'([^]+)'$/;
|
|
130
135
|
const DUPLICATE_MESSAGE = $_("blocks.long_requests_queue");
|
|
131
136
|
const MOBILE_QUEUE_WARNING = $_("blocks.connection_can_break");
|
|
132
137
|
const MOBILE_RECONNECT_MESSAGE = $_("blocks.lost_connection");
|
|
138
|
+
const WAITING_FOR_INPUTS_MESSAGE = $_("blocks.waiting_for_inputs");
|
|
133
139
|
const SHOW_DUPLICATE_MESSAGE_ON_ETA = 15;
|
|
134
140
|
const SHOW_MOBILE_QUEUE_WARNING_ON_ETA = 10;
|
|
135
|
-
|
|
136
|
-
navigator.userAgent
|
|
137
|
-
);
|
|
141
|
+
let is_mobile_device = false;
|
|
138
142
|
let showed_duplicate_message = false;
|
|
139
143
|
let showed_mobile_warning = false;
|
|
144
|
+
let inputs_waiting = [];
|
|
140
145
|
function wait_then_trigger_api_call(dep_index, trigger_id = null, event_data = null) {
|
|
141
146
|
let _unsub = () => {
|
|
142
147
|
};
|
|
@@ -154,8 +159,22 @@ function wait_then_trigger_api_call(dep_index, trigger_id = null, event_data = n
|
|
|
154
159
|
trigger_api_call(dep_index, trigger_id, event_data);
|
|
155
160
|
}
|
|
156
161
|
}
|
|
162
|
+
async function get_component_value_or_event_data(component_id, trigger_id, event_data) {
|
|
163
|
+
if (component_id === trigger_id && event_data && event_data.is_value_data === true) {
|
|
164
|
+
return event_data.value;
|
|
165
|
+
}
|
|
166
|
+
return get_data(component_id);
|
|
167
|
+
}
|
|
157
168
|
async function trigger_api_call(dep_index, trigger_id = null, event_data = null) {
|
|
158
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
|
+
}
|
|
159
178
|
const current_status = loading_status.get_status_for_fn(dep_index);
|
|
160
179
|
messages = messages.filter(({ fn_index }) => fn_index !== dep_index);
|
|
161
180
|
if (current_status === "pending" || current_status === "generating") {
|
|
@@ -163,7 +182,11 @@ async function trigger_api_call(dep_index, trigger_id = null, event_data = null)
|
|
|
163
182
|
}
|
|
164
183
|
let payload = {
|
|
165
184
|
fn_index: dep_index,
|
|
166
|
-
data: await Promise.all(
|
|
185
|
+
data: await Promise.all(
|
|
186
|
+
dep.inputs.map(
|
|
187
|
+
(id) => get_component_value_or_event_data(id, trigger_id, event_data)
|
|
188
|
+
)
|
|
189
|
+
),
|
|
167
190
|
event_data: dep.collects_event_data ? event_data : null,
|
|
168
191
|
trigger_id
|
|
169
192
|
};
|
|
@@ -196,22 +219,39 @@ async function trigger_api_call(dep_index, trigger_id = null, event_data = null)
|
|
|
196
219
|
function trigger_prediction(dep2, payload2) {
|
|
197
220
|
if (dep2.trigger_mode === "once") {
|
|
198
221
|
if (!dep2.pending_request)
|
|
199
|
-
make_prediction(payload2);
|
|
222
|
+
make_prediction(payload2, dep2.connection == "stream");
|
|
200
223
|
} else if (dep2.trigger_mode === "multiple") {
|
|
201
|
-
make_prediction(payload2);
|
|
224
|
+
make_prediction(payload2, dep2.connection == "stream");
|
|
202
225
|
} else if (dep2.trigger_mode === "always_last") {
|
|
203
226
|
if (!dep2.pending_request) {
|
|
204
|
-
make_prediction(payload2);
|
|
227
|
+
make_prediction(payload2, dep2.connection == "stream");
|
|
205
228
|
} else {
|
|
206
229
|
dep2.final_event = payload2;
|
|
207
230
|
}
|
|
208
231
|
}
|
|
209
232
|
}
|
|
210
|
-
|
|
233
|
+
$:
|
|
234
|
+
console.log({ app });
|
|
235
|
+
async function make_prediction(payload2, streaming = false) {
|
|
211
236
|
if (api_recorder_visible) {
|
|
212
237
|
api_calls = [...api_calls, JSON.parse(JSON.stringify(payload2))];
|
|
213
238
|
}
|
|
214
239
|
let submission;
|
|
240
|
+
app.set_current_payload(payload2);
|
|
241
|
+
if (streaming) {
|
|
242
|
+
if (!submit_map.has(dep_index)) {
|
|
243
|
+
dep.inputs.forEach((id) => modify_stream(id, "waiting"));
|
|
244
|
+
} else if (submit_map.has(dep_index) && dep.inputs.some((id) => get_stream_state(id) === "waiting")) {
|
|
245
|
+
return;
|
|
246
|
+
} else if (submit_map.has(dep_index) && dep.inputs.some((id) => get_stream_state(id) === "open")) {
|
|
247
|
+
await app.post_data(
|
|
248
|
+
// @ts-ignore
|
|
249
|
+
`${app.config.root + app.config.api_prefix}/stream/${submit_map.get(dep_index).event_id()}`,
|
|
250
|
+
{ ...payload2, session_hash: app.session_hash }
|
|
251
|
+
);
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
215
255
|
try {
|
|
216
256
|
submission = app.submit(
|
|
217
257
|
payload2.fn_index,
|
|
@@ -248,7 +288,7 @@ async function trigger_api_call(dep_index, trigger_id = null, event_data = null)
|
|
|
248
288
|
const { data, fn_index } = message;
|
|
249
289
|
if (dep.pending_request && dep.final_event) {
|
|
250
290
|
dep.pending_request = false;
|
|
251
|
-
make_prediction(dep.final_event);
|
|
291
|
+
make_prediction(dep.final_event, dep.connection == "stream");
|
|
252
292
|
}
|
|
253
293
|
dep.pending_request = false;
|
|
254
294
|
handle_update(data, fn_index);
|
|
@@ -287,10 +327,24 @@ async function trigger_api_call(dep_index, trigger_id = null, event_data = null)
|
|
|
287
327
|
...messages
|
|
288
328
|
];
|
|
289
329
|
}
|
|
330
|
+
function open_stream_events(status, id, dep2) {
|
|
331
|
+
if (status.original_msg === "process_starts" && dep2.connection === "stream") {
|
|
332
|
+
modify_stream(id, "open");
|
|
333
|
+
}
|
|
334
|
+
}
|
|
290
335
|
function handle_status_update(message) {
|
|
291
336
|
const { fn_index, ...status } = message;
|
|
337
|
+
if (status.stage === "streaming" && status.time_limit) {
|
|
338
|
+
dep.inputs.forEach((id) => {
|
|
339
|
+
set_time_limit(id, status.time_limit);
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
dep.inputs.forEach((id) => {
|
|
343
|
+
open_stream_events(message, id, dep);
|
|
344
|
+
});
|
|
292
345
|
loading_status.update({
|
|
293
346
|
...status,
|
|
347
|
+
time_limit: status.time_limit,
|
|
294
348
|
status: status.stage,
|
|
295
349
|
progress: status.progress_data,
|
|
296
350
|
fn_index
|
|
@@ -310,17 +364,23 @@ async function trigger_api_call(dep_index, trigger_id = null, event_data = null)
|
|
|
310
364
|
...messages
|
|
311
365
|
];
|
|
312
366
|
}
|
|
313
|
-
if (status.stage === "complete") {
|
|
367
|
+
if (status.stage === "complete" || status.stage === "generating") {
|
|
314
368
|
status.changed_state_ids?.forEach((id) => {
|
|
315
369
|
dependencies.filter((dep2) => dep2.targets.some(([_id, _2]) => _id === id)).forEach((dep2) => {
|
|
316
370
|
wait_then_trigger_api_call(dep2.id, payload2.trigger_id);
|
|
317
371
|
});
|
|
318
372
|
});
|
|
373
|
+
}
|
|
374
|
+
if (status.stage === "complete") {
|
|
319
375
|
dependencies.forEach(async (dep2) => {
|
|
320
376
|
if (dep2.trigger_after === fn_index) {
|
|
321
377
|
wait_then_trigger_api_call(dep2.id, payload2.trigger_id);
|
|
322
378
|
}
|
|
323
379
|
});
|
|
380
|
+
dep.inputs.forEach((id) => {
|
|
381
|
+
modify_stream(id, "closed");
|
|
382
|
+
});
|
|
383
|
+
submit_map.delete(dep_index);
|
|
324
384
|
}
|
|
325
385
|
if (status.broken && is_mobile_device && user_left_page) {
|
|
326
386
|
window.setTimeout(() => {
|
|
@@ -396,13 +456,19 @@ async function handle_mount() {
|
|
|
396
456
|
wait_then_trigger_api_call(dep.id);
|
|
397
457
|
}
|
|
398
458
|
});
|
|
399
|
-
if (render_complete)
|
|
459
|
+
if (!target || render_complete)
|
|
400
460
|
return;
|
|
401
461
|
target.addEventListener("prop_change", (e) => {
|
|
402
462
|
if (!isCustomEvent(e))
|
|
403
463
|
throw new Error("not a custom event");
|
|
404
464
|
const { id, prop, value } = e.detail;
|
|
405
465
|
update_value([{ id, prop, value }]);
|
|
466
|
+
if (prop === "input_ready" && value === false) {
|
|
467
|
+
inputs_waiting.push(id);
|
|
468
|
+
}
|
|
469
|
+
if (prop === "input_ready" && value === true) {
|
|
470
|
+
inputs_waiting = inputs_waiting.filter((item) => item !== id);
|
|
471
|
+
}
|
|
406
472
|
});
|
|
407
473
|
target.addEventListener("gradio", (e) => {
|
|
408
474
|
if (!isCustomEvent(e))
|
|
@@ -415,6 +481,17 @@ async function handle_mount() {
|
|
|
415
481
|
messages = [new_message(data, -1, event), ...messages];
|
|
416
482
|
} else if (event == "clear_status") {
|
|
417
483
|
update_status(id, "complete", data);
|
|
484
|
+
} else if (event == "close_stream") {
|
|
485
|
+
const deps = $targets[id]?.[data];
|
|
486
|
+
deps?.forEach((dep_id) => {
|
|
487
|
+
if (submit_map.has(dep_id)) {
|
|
488
|
+
app.post_data(
|
|
489
|
+
// @ts-ignore
|
|
490
|
+
`${app.config.root + app.config.api_prefix}/stream/${submit_map.get(dep_id).event_id()}/close`,
|
|
491
|
+
{}
|
|
492
|
+
);
|
|
493
|
+
}
|
|
494
|
+
});
|
|
418
495
|
} else {
|
|
419
496
|
const deps = $targets[id]?.[event];
|
|
420
497
|
deps?.forEach((dep_id) => {
|
|
@@ -470,6 +547,16 @@ function set_status(statuses) {
|
|
|
470
547
|
function isCustomEvent(event) {
|
|
471
548
|
return "detail" in event;
|
|
472
549
|
}
|
|
550
|
+
onMount(() => {
|
|
551
|
+
document.addEventListener("visibilitychange", function() {
|
|
552
|
+
if (document.visibilityState === "hidden") {
|
|
553
|
+
user_left_page = true;
|
|
554
|
+
}
|
|
555
|
+
});
|
|
556
|
+
is_mobile_device = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(
|
|
557
|
+
navigator.userAgent
|
|
558
|
+
);
|
|
559
|
+
});
|
|
473
560
|
</script>
|
|
474
561
|
|
|
475
562
|
<svelte:head>
|
|
@@ -480,19 +567,19 @@ function isCustomEvent(event) {
|
|
|
480
567
|
|
|
481
568
|
<div class="wrap" style:min-height={app_mode ? "100%" : "auto"}>
|
|
482
569
|
<div class="contain" style:flex-grow={app_mode ? "1" : "auto"}>
|
|
483
|
-
{#if $_layout
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
{/if}
|
|
570
|
+
<!-- {#if $_layout} -->
|
|
571
|
+
<MountComponents
|
|
572
|
+
rootNode={$_layout}
|
|
573
|
+
{root}
|
|
574
|
+
{target}
|
|
575
|
+
{theme_mode}
|
|
576
|
+
on:mount={handle_mount}
|
|
577
|
+
{version}
|
|
578
|
+
{autoscroll}
|
|
579
|
+
{max_file_size}
|
|
580
|
+
client={app}
|
|
581
|
+
/>
|
|
582
|
+
<!-- {/if} -->
|
|
496
583
|
</div>
|
|
497
584
|
|
|
498
585
|
{#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;
|
|
@@ -38,7 +38,9 @@ const langs = [
|
|
|
38
38
|
];
|
|
39
39
|
let is_running = false;
|
|
40
40
|
async function get_info() {
|
|
41
|
-
let response = await fetch(
|
|
41
|
+
let response = await fetch(
|
|
42
|
+
root.replace(/\/$/, "") + app.api_prefix + "/info"
|
|
43
|
+
);
|
|
42
44
|
let data = await response.json();
|
|
43
45
|
return data;
|
|
44
46
|
}
|
|
@@ -205,6 +207,7 @@ onMount(() => {
|
|
|
205
207
|
{root}
|
|
206
208
|
{space_id}
|
|
207
209
|
{username}
|
|
210
|
+
api_prefix={app.api_prefix}
|
|
208
211
|
/>
|
|
209
212
|
|
|
210
213
|
<ParametersSnippet
|
|
@@ -5,6 +5,7 @@ import EndpointDetail from "./EndpointDetail.svelte";
|
|
|
5
5
|
export let dependency;
|
|
6
6
|
export let dependency_index;
|
|
7
7
|
export let root;
|
|
8
|
+
export let api_prefix;
|
|
8
9
|
export let space_id;
|
|
9
10
|
export let endpoint_parameters;
|
|
10
11
|
export let named;
|
|
@@ -21,6 +22,10 @@ let blob_components = ["Audio", "File", "Image", "Video"];
|
|
|
21
22
|
let blob_examples = endpoint_parameters.filter(
|
|
22
23
|
(param) => blob_components.includes(param.component)
|
|
23
24
|
);
|
|
25
|
+
$:
|
|
26
|
+
normalised_api_prefix = api_prefix ? api_prefix : "/";
|
|
27
|
+
$:
|
|
28
|
+
normalised_root = root.replace(/\/$/, "");
|
|
24
29
|
</script>
|
|
25
30
|
|
|
26
31
|
<div class="container">
|
|
@@ -121,7 +126,7 @@ console.log(result.data);
|
|
|
121
126
|
</div>
|
|
122
127
|
|
|
123
128
|
<div bind:this={bash_post_code}>
|
|
124
|
-
<pre>curl -X POST {
|
|
129
|
+
<pre>curl -X POST {normalised_root}{normalised_api_prefix}/call/{dependency.api_name} -s -H "Content-Type: application/json" -d '{"{"}
|
|
125
130
|
"data": [{#each endpoint_parameters as { label, parameter_name, type, python_type, component, example_input, serializer }, i}
|
|
126
131
|
<!--
|
|
127
132
|
-->{represent_value(
|
|
@@ -133,7 +138,7 @@ console.log(result.data);
|
|
|
133
138
|
{/each}
|
|
134
139
|
]{"}"}' \
|
|
135
140
|
| awk -F'"' '{"{"} print $4{"}"}' \
|
|
136
|
-
| read EVENT_ID; curl -N {
|
|
141
|
+
| read EVENT_ID; curl -N {normalised_root}{normalised_api_prefix}/call/{dependency.api_name}/$EVENT_ID</pre>
|
|
137
142
|
</div>
|
|
138
143
|
</code>
|
|
139
144
|
</Block>
|
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
|
@@ -16,6 +16,9 @@ export declare function create_components(): {
|
|
|
16
16
|
targets: Writable<TargetMap>;
|
|
17
17
|
update_value: (updates: UpdateTransaction[]) => void;
|
|
18
18
|
get_data: (id: number) => any | Promise<any>;
|
|
19
|
+
modify_stream: (id: number, state: "open" | "waiting" | "closed") => void;
|
|
20
|
+
get_stream_state: (id: number) => "open" | "waiting" | "closed" | "not_set";
|
|
21
|
+
set_time_limit: (id: number, time_limit: number | undefined) => void;
|
|
19
22
|
loading_status: ReturnType<typeof create_loading_status_store>;
|
|
20
23
|
scheduled_updates: Writable<boolean>;
|
|
21
24
|
create_layout: (args: {
|
|
@@ -27,7 +30,7 @@ export declare function create_components(): {
|
|
|
27
30
|
options: {
|
|
28
31
|
fill_height: boolean;
|
|
29
32
|
};
|
|
30
|
-
}) => void
|
|
33
|
+
}) => Promise<void>;
|
|
31
34
|
rerender_layout: (args: {
|
|
32
35
|
render_id: number;
|
|
33
36
|
components: ComponentMeta[];
|