@gradio/dataset 0.5.2 → 0.5.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 +13 -0
- package/Dataset.svelte +91 -79
- package/dist/Dataset.svelte +91 -79
- package/dist/Dataset.svelte.d.ts +5 -19
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# @gradio/dataset
|
|
2
2
|
|
|
3
|
+
## 0.5.3
|
|
4
|
+
|
|
5
|
+
### Fixes
|
|
6
|
+
|
|
7
|
+
- [#12818](https://github.com/gradio-app/gradio/pull/12818) [`6594c9c`](https://github.com/gradio-app/gradio/commit/6594c9c5b2829771f79dc04c6fafb6da72031b90) - Migrate Dataset to Svelte 5. Thanks @freddyaboulton!
|
|
8
|
+
|
|
9
|
+
### Dependency updates
|
|
10
|
+
|
|
11
|
+
- @gradio/atoms@0.21.0
|
|
12
|
+
- @gradio/client@2.0.4
|
|
13
|
+
- @gradio/upload@0.17.5
|
|
14
|
+
- @gradio/textbox@0.13.3
|
|
15
|
+
|
|
3
16
|
## 0.5.2
|
|
4
17
|
|
|
5
18
|
### Fixes
|
package/Dataset.svelte
CHANGED
|
@@ -1,91 +1,105 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import { Block } from "@gradio/atoms";
|
|
3
2
|
import type { SvelteComponent, ComponentType } from "svelte";
|
|
4
|
-
import type {
|
|
3
|
+
import type { SelectData } from "@gradio/utils";
|
|
5
4
|
import { BaseExample } from "@gradio/textbox";
|
|
6
5
|
import type { load_component as load_component_type } from "@gradio/utils";
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
7
|
+
interface Props {
|
|
8
|
+
components: string[];
|
|
9
|
+
component_props: Record<string, any>[];
|
|
10
|
+
load_component: load_component_type;
|
|
11
|
+
headers: string[];
|
|
12
|
+
samples: any[][] | null;
|
|
13
|
+
sample_labels?: string[] | null;
|
|
14
|
+
value?: number | null;
|
|
15
|
+
root: string;
|
|
16
|
+
proxy_url: null | string;
|
|
17
|
+
samples_per_page?: number;
|
|
18
|
+
onclick: (data: SelectData) => void;
|
|
19
|
+
onselect: (data: SelectData) => void;
|
|
20
|
+
layout?: "gallery" | "table" | null;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
let {
|
|
24
|
+
components,
|
|
25
|
+
component_props,
|
|
26
|
+
load_component,
|
|
27
|
+
headers,
|
|
28
|
+
samples,
|
|
29
|
+
sample_labels = null,
|
|
30
|
+
value = $bindable(null),
|
|
31
|
+
root,
|
|
32
|
+
proxy_url,
|
|
33
|
+
samples_per_page = 10,
|
|
34
|
+
onclick,
|
|
35
|
+
onselect,
|
|
36
|
+
layout = null
|
|
37
|
+
}: Props = $props();
|
|
29
38
|
|
|
30
39
|
// Although the `samples_dir` prop is not used in any of the core Gradio component, it is kept for backward compatibility
|
|
31
40
|
// with any custom components created with gradio<=4.20.0
|
|
32
|
-
let samples_dir: string =
|
|
33
|
-
? `/proxy=${proxy_url}file=`
|
|
34
|
-
|
|
35
|
-
let page = 0;
|
|
41
|
+
let samples_dir: string = $derived(
|
|
42
|
+
proxy_url ? `/proxy=${proxy_url}file=` : `${root}/file=`
|
|
43
|
+
);
|
|
36
44
|
|
|
37
|
-
|
|
38
|
-
(components.length < 2 || sample_labels !== null) && layout !== "table";
|
|
39
|
-
let paginate = samples ? samples.length > samples_per_page : false;
|
|
45
|
+
let current_hover = $state(-1);
|
|
40
46
|
|
|
41
|
-
let
|
|
42
|
-
|
|
43
|
-
|
|
47
|
+
let gallery = $derived(
|
|
48
|
+
(components.length < 2 || sample_labels !== null) && layout !== "table"
|
|
49
|
+
);
|
|
44
50
|
|
|
45
|
-
let
|
|
51
|
+
let effective_samples = $derived.by(() => {
|
|
52
|
+
if (sample_labels) {
|
|
53
|
+
return sample_labels.map((e) => [e]);
|
|
54
|
+
}
|
|
55
|
+
return samples ?? [];
|
|
56
|
+
});
|
|
46
57
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
58
|
+
// page resets to 0 whenever effective_samples changes,
|
|
59
|
+
// but can still be overwritten by user clicks
|
|
60
|
+
let page = $derived.by(() => {
|
|
61
|
+
effective_samples;
|
|
62
|
+
return 0;
|
|
63
|
+
});
|
|
50
64
|
|
|
51
|
-
|
|
52
|
-
current_hover = -1;
|
|
53
|
-
}
|
|
65
|
+
let paginate = $derived(effective_samples.length > samples_per_page);
|
|
54
66
|
|
|
55
|
-
|
|
56
|
-
if (sample_labels) {
|
|
57
|
-
samples = sample_labels.map((e) => [e]);
|
|
58
|
-
} else if (!samples) {
|
|
59
|
-
samples = [];
|
|
60
|
-
}
|
|
61
|
-
if (JSON.stringify(samples) !== JSON.stringify(old_samples)) {
|
|
62
|
-
page = 0;
|
|
63
|
-
old_samples = samples;
|
|
64
|
-
}
|
|
65
|
-
paginate = samples.length > samples_per_page;
|
|
67
|
+
let selected_samples = $derived.by(() => {
|
|
66
68
|
if (paginate) {
|
|
67
|
-
|
|
68
|
-
selected_samples = samples.slice(
|
|
69
|
+
return effective_samples.slice(
|
|
69
70
|
page * samples_per_page,
|
|
70
71
|
(page + 1) * samples_per_page
|
|
71
72
|
);
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
73
|
+
}
|
|
74
|
+
return effective_samples.slice();
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
let page_count = $derived(
|
|
78
|
+
Math.ceil(effective_samples.length / samples_per_page)
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
let visible_pages = $derived.by(() => {
|
|
82
|
+
if (!paginate) return [];
|
|
83
|
+
let pages: number[] = [];
|
|
84
|
+
[0, page, page_count - 1].forEach((anchor) => {
|
|
85
|
+
for (let i = anchor - 2; i <= anchor + 2; i++) {
|
|
86
|
+
if (i >= 0 && i < page_count && !pages.includes(i)) {
|
|
87
|
+
if (pages.length > 0 && i - pages[pages.length - 1] > 1) {
|
|
88
|
+
pages.push(-1);
|
|
83
89
|
}
|
|
90
|
+
pages.push(i);
|
|
84
91
|
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
return pages;
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
function handle_mouseenter(i: number): void {
|
|
98
|
+
current_hover = i;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function handle_mouseleave(): void {
|
|
102
|
+
current_hover = -1;
|
|
89
103
|
}
|
|
90
104
|
|
|
91
105
|
let component_meta: {
|
|
@@ -115,11 +129,9 @@
|
|
|
115
129
|
);
|
|
116
130
|
}
|
|
117
131
|
|
|
118
|
-
// Need to
|
|
132
|
+
// Need to stringify the samples otherwise get_component_meta will trigger infinitely
|
|
119
133
|
// Saw this when rendering examples in a gr.render block
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
// $: get_component_meta(selected_samples_json);
|
|
134
|
+
let selected_samples_json = $derived(JSON.stringify(selected_samples || []));
|
|
123
135
|
</script>
|
|
124
136
|
|
|
125
137
|
{#await get_component_meta(selected_samples_json) then _}
|
|
@@ -129,13 +141,13 @@
|
|
|
129
141
|
{#if sample_row[0] != null}
|
|
130
142
|
<button
|
|
131
143
|
class="gallery-item"
|
|
132
|
-
|
|
144
|
+
onclick={() => {
|
|
133
145
|
value = i + page * samples_per_page;
|
|
134
146
|
onclick({ index: value, value: sample_row });
|
|
135
147
|
onselect({ index: value, value: sample_row });
|
|
136
148
|
}}
|
|
137
|
-
|
|
138
|
-
|
|
149
|
+
onmouseenter={() => handle_mouseenter(i)}
|
|
150
|
+
onmouseleave={() => handle_mouseleave()}
|
|
139
151
|
>
|
|
140
152
|
{#if sample_labels}
|
|
141
153
|
<BaseExample
|
|
@@ -179,7 +191,7 @@
|
|
|
179
191
|
{#each component_meta as sample_row, i}
|
|
180
192
|
<tr
|
|
181
193
|
class="tr-body"
|
|
182
|
-
|
|
194
|
+
onclick={() => {
|
|
183
195
|
value = i + page * samples_per_page;
|
|
184
196
|
onclick({ index: value, value: sample_row });
|
|
185
197
|
onselect({
|
|
@@ -187,8 +199,8 @@
|
|
|
187
199
|
value: selected_samples[i]
|
|
188
200
|
});
|
|
189
201
|
}}
|
|
190
|
-
|
|
191
|
-
|
|
202
|
+
onmouseenter={() => handle_mouseenter(i)}
|
|
203
|
+
onmouseleave={() => handle_mouseleave()}
|
|
192
204
|
>
|
|
193
205
|
{#each sample_row as { value, component }, j}
|
|
194
206
|
{@const component_name = components[j]}
|
|
@@ -230,7 +242,7 @@
|
|
|
230
242
|
{:else}
|
|
231
243
|
<button
|
|
232
244
|
class:current-page={page === visible_page}
|
|
233
|
-
|
|
245
|
+
onclick={() => (page = visible_page)}
|
|
234
246
|
>
|
|
235
247
|
{visible_page + 1}
|
|
236
248
|
</button>
|
package/dist/Dataset.svelte
CHANGED
|
@@ -1,91 +1,105 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import { Block } from "@gradio/atoms";
|
|
3
2
|
import type { SvelteComponent, ComponentType } from "svelte";
|
|
4
|
-
import type {
|
|
3
|
+
import type { SelectData } from "@gradio/utils";
|
|
5
4
|
import { BaseExample } from "@gradio/textbox";
|
|
6
5
|
import type { load_component as load_component_type } from "@gradio/utils";
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
7
|
+
interface Props {
|
|
8
|
+
components: string[];
|
|
9
|
+
component_props: Record<string, any>[];
|
|
10
|
+
load_component: load_component_type;
|
|
11
|
+
headers: string[];
|
|
12
|
+
samples: any[][] | null;
|
|
13
|
+
sample_labels?: string[] | null;
|
|
14
|
+
value?: number | null;
|
|
15
|
+
root: string;
|
|
16
|
+
proxy_url: null | string;
|
|
17
|
+
samples_per_page?: number;
|
|
18
|
+
onclick: (data: SelectData) => void;
|
|
19
|
+
onselect: (data: SelectData) => void;
|
|
20
|
+
layout?: "gallery" | "table" | null;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
let {
|
|
24
|
+
components,
|
|
25
|
+
component_props,
|
|
26
|
+
load_component,
|
|
27
|
+
headers,
|
|
28
|
+
samples,
|
|
29
|
+
sample_labels = null,
|
|
30
|
+
value = $bindable(null),
|
|
31
|
+
root,
|
|
32
|
+
proxy_url,
|
|
33
|
+
samples_per_page = 10,
|
|
34
|
+
onclick,
|
|
35
|
+
onselect,
|
|
36
|
+
layout = null
|
|
37
|
+
}: Props = $props();
|
|
29
38
|
|
|
30
39
|
// Although the `samples_dir` prop is not used in any of the core Gradio component, it is kept for backward compatibility
|
|
31
40
|
// with any custom components created with gradio<=4.20.0
|
|
32
|
-
let samples_dir: string =
|
|
33
|
-
? `/proxy=${proxy_url}file=`
|
|
34
|
-
|
|
35
|
-
let page = 0;
|
|
41
|
+
let samples_dir: string = $derived(
|
|
42
|
+
proxy_url ? `/proxy=${proxy_url}file=` : `${root}/file=`
|
|
43
|
+
);
|
|
36
44
|
|
|
37
|
-
|
|
38
|
-
(components.length < 2 || sample_labels !== null) && layout !== "table";
|
|
39
|
-
let paginate = samples ? samples.length > samples_per_page : false;
|
|
45
|
+
let current_hover = $state(-1);
|
|
40
46
|
|
|
41
|
-
let
|
|
42
|
-
|
|
43
|
-
|
|
47
|
+
let gallery = $derived(
|
|
48
|
+
(components.length < 2 || sample_labels !== null) && layout !== "table"
|
|
49
|
+
);
|
|
44
50
|
|
|
45
|
-
let
|
|
51
|
+
let effective_samples = $derived.by(() => {
|
|
52
|
+
if (sample_labels) {
|
|
53
|
+
return sample_labels.map((e) => [e]);
|
|
54
|
+
}
|
|
55
|
+
return samples ?? [];
|
|
56
|
+
});
|
|
46
57
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
58
|
+
// page resets to 0 whenever effective_samples changes,
|
|
59
|
+
// but can still be overwritten by user clicks
|
|
60
|
+
let page = $derived.by(() => {
|
|
61
|
+
effective_samples;
|
|
62
|
+
return 0;
|
|
63
|
+
});
|
|
50
64
|
|
|
51
|
-
|
|
52
|
-
current_hover = -1;
|
|
53
|
-
}
|
|
65
|
+
let paginate = $derived(effective_samples.length > samples_per_page);
|
|
54
66
|
|
|
55
|
-
|
|
56
|
-
if (sample_labels) {
|
|
57
|
-
samples = sample_labels.map((e) => [e]);
|
|
58
|
-
} else if (!samples) {
|
|
59
|
-
samples = [];
|
|
60
|
-
}
|
|
61
|
-
if (JSON.stringify(samples) !== JSON.stringify(old_samples)) {
|
|
62
|
-
page = 0;
|
|
63
|
-
old_samples = samples;
|
|
64
|
-
}
|
|
65
|
-
paginate = samples.length > samples_per_page;
|
|
67
|
+
let selected_samples = $derived.by(() => {
|
|
66
68
|
if (paginate) {
|
|
67
|
-
|
|
68
|
-
selected_samples = samples.slice(
|
|
69
|
+
return effective_samples.slice(
|
|
69
70
|
page * samples_per_page,
|
|
70
71
|
(page + 1) * samples_per_page
|
|
71
72
|
);
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
73
|
+
}
|
|
74
|
+
return effective_samples.slice();
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
let page_count = $derived(
|
|
78
|
+
Math.ceil(effective_samples.length / samples_per_page)
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
let visible_pages = $derived.by(() => {
|
|
82
|
+
if (!paginate) return [];
|
|
83
|
+
let pages: number[] = [];
|
|
84
|
+
[0, page, page_count - 1].forEach((anchor) => {
|
|
85
|
+
for (let i = anchor - 2; i <= anchor + 2; i++) {
|
|
86
|
+
if (i >= 0 && i < page_count && !pages.includes(i)) {
|
|
87
|
+
if (pages.length > 0 && i - pages[pages.length - 1] > 1) {
|
|
88
|
+
pages.push(-1);
|
|
83
89
|
}
|
|
90
|
+
pages.push(i);
|
|
84
91
|
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
return pages;
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
function handle_mouseenter(i: number): void {
|
|
98
|
+
current_hover = i;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function handle_mouseleave(): void {
|
|
102
|
+
current_hover = -1;
|
|
89
103
|
}
|
|
90
104
|
|
|
91
105
|
let component_meta: {
|
|
@@ -115,11 +129,9 @@
|
|
|
115
129
|
);
|
|
116
130
|
}
|
|
117
131
|
|
|
118
|
-
// Need to
|
|
132
|
+
// Need to stringify the samples otherwise get_component_meta will trigger infinitely
|
|
119
133
|
// Saw this when rendering examples in a gr.render block
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
// $: get_component_meta(selected_samples_json);
|
|
134
|
+
let selected_samples_json = $derived(JSON.stringify(selected_samples || []));
|
|
123
135
|
</script>
|
|
124
136
|
|
|
125
137
|
{#await get_component_meta(selected_samples_json) then _}
|
|
@@ -129,13 +141,13 @@
|
|
|
129
141
|
{#if sample_row[0] != null}
|
|
130
142
|
<button
|
|
131
143
|
class="gallery-item"
|
|
132
|
-
|
|
144
|
+
onclick={() => {
|
|
133
145
|
value = i + page * samples_per_page;
|
|
134
146
|
onclick({ index: value, value: sample_row });
|
|
135
147
|
onselect({ index: value, value: sample_row });
|
|
136
148
|
}}
|
|
137
|
-
|
|
138
|
-
|
|
149
|
+
onmouseenter={() => handle_mouseenter(i)}
|
|
150
|
+
onmouseleave={() => handle_mouseleave()}
|
|
139
151
|
>
|
|
140
152
|
{#if sample_labels}
|
|
141
153
|
<BaseExample
|
|
@@ -179,7 +191,7 @@
|
|
|
179
191
|
{#each component_meta as sample_row, i}
|
|
180
192
|
<tr
|
|
181
193
|
class="tr-body"
|
|
182
|
-
|
|
194
|
+
onclick={() => {
|
|
183
195
|
value = i + page * samples_per_page;
|
|
184
196
|
onclick({ index: value, value: sample_row });
|
|
185
197
|
onselect({
|
|
@@ -187,8 +199,8 @@
|
|
|
187
199
|
value: selected_samples[i]
|
|
188
200
|
});
|
|
189
201
|
}}
|
|
190
|
-
|
|
191
|
-
|
|
202
|
+
onmouseenter={() => handle_mouseenter(i)}
|
|
203
|
+
onmouseleave={() => handle_mouseleave()}
|
|
192
204
|
>
|
|
193
205
|
{#each sample_row as { value, component }, j}
|
|
194
206
|
{@const component_name = components[j]}
|
|
@@ -230,7 +242,7 @@
|
|
|
230
242
|
{:else}
|
|
231
243
|
<button
|
|
232
244
|
class:current-page={page === visible_page}
|
|
233
|
-
|
|
245
|
+
onclick={() => (page = visible_page)}
|
|
234
246
|
>
|
|
235
247
|
{visible_page + 1}
|
|
236
248
|
</button>
|
package/dist/Dataset.svelte.d.ts
CHANGED
|
@@ -1,24 +1,11 @@
|
|
|
1
1
|
import type { SelectData } from "@gradio/utils";
|
|
2
2
|
import type { load_component as load_component_type } from "@gradio/utils";
|
|
3
|
-
interface
|
|
4
|
-
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
5
|
-
$$bindings?: Bindings;
|
|
6
|
-
} & Exports;
|
|
7
|
-
(internal: unknown, props: Props & {
|
|
8
|
-
$$events?: Events;
|
|
9
|
-
$$slots?: Slots;
|
|
10
|
-
}): Exports & {
|
|
11
|
-
$set?: any;
|
|
12
|
-
$on?: any;
|
|
13
|
-
};
|
|
14
|
-
z_$$bindings?: Bindings;
|
|
15
|
-
}
|
|
16
|
-
declare const Dataset: $$__sveltets_2_IsomorphicComponent<{
|
|
3
|
+
interface Props {
|
|
17
4
|
components: string[];
|
|
18
5
|
component_props: Record<string, any>[];
|
|
19
6
|
load_component: load_component_type;
|
|
20
7
|
headers: string[];
|
|
21
|
-
samples
|
|
8
|
+
samples: any[][] | null;
|
|
22
9
|
sample_labels?: string[] | null;
|
|
23
10
|
value?: number | null;
|
|
24
11
|
root: string;
|
|
@@ -27,8 +14,7 @@ declare const Dataset: $$__sveltets_2_IsomorphicComponent<{
|
|
|
27
14
|
onclick: (data: SelectData) => void;
|
|
28
15
|
onselect: (data: SelectData) => void;
|
|
29
16
|
layout?: "gallery" | "table" | null;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
type Dataset = InstanceType<typeof Dataset>;
|
|
17
|
+
}
|
|
18
|
+
declare const Dataset: import("svelte").Component<Props, {}, "value">;
|
|
19
|
+
type Dataset = ReturnType<typeof Dataset>;
|
|
34
20
|
export default Dataset;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gradio/dataset",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.3",
|
|
4
4
|
"description": "Gradio UI packages",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "",
|
|
@@ -16,11 +16,11 @@
|
|
|
16
16
|
"./package.json": "./package.json"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@gradio/atoms": "^0.
|
|
20
|
-
"@gradio/
|
|
21
|
-
"@gradio/client": "^2.0.3",
|
|
19
|
+
"@gradio/atoms": "^0.21.0",
|
|
20
|
+
"@gradio/client": "^2.0.4",
|
|
22
21
|
"@gradio/utils": "^0.11.2",
|
|
23
|
-
"@gradio/
|
|
22
|
+
"@gradio/textbox": "^0.13.3",
|
|
23
|
+
"@gradio/upload": "^0.17.5"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@gradio/preview": "^0.15.2"
|