@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 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 { Gradio, SelectData } from "@gradio/utils";
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
- export let components: string[];
9
- export let component_props: Record<string, any>[];
10
- let component_map: Map<
11
- string,
12
- Promise<{
13
- default: ComponentType<SvelteComponent>;
14
- }>
15
- > = new Map();
16
- export let load_component: load_component_type;
17
- export let headers: string[];
18
- export let samples: any[][] | null = null;
19
- let old_samples: any[][] | null = null;
20
- export let sample_labels: string[] | null = null;
21
- export let value: number | null = null;
22
- export let root: string;
23
- export let proxy_url: null | string;
24
- export let samples_per_page = 10;
25
- export let onclick: (data: SelectData) => void;
26
- export let onselect: (data: SelectData) => void;
27
-
28
- export let layout: "gallery" | "table" | null = null;
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 = proxy_url
33
- ? `/proxy=${proxy_url}file=`
34
- : `${root}/file=`;
35
- let page = 0;
41
+ let samples_dir: string = $derived(
42
+ proxy_url ? `/proxy=${proxy_url}file=` : `${root}/file=`
43
+ );
36
44
 
37
- $: gallery =
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 selected_samples: any[][];
42
- let page_count: number;
43
- let visible_pages: number[] = [];
47
+ let gallery = $derived(
48
+ (components.length < 2 || sample_labels !== null) && layout !== "table"
49
+ );
44
50
 
45
- let current_hover = -1;
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
- function handle_mouseenter(i: number): void {
48
- current_hover = i;
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
- function handle_mouseleave(): void {
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
- visible_pages = [];
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
- page_count = Math.ceil(samples.length / samples_per_page);
73
- [0, page, page_count - 1].forEach((anchor) => {
74
- for (let i = anchor - 2; i <= anchor + 2; i++) {
75
- if (i >= 0 && i < page_count && !visible_pages.includes(i)) {
76
- if (
77
- visible_pages.length > 0 &&
78
- i - visible_pages[visible_pages.length - 1] > 1
79
- ) {
80
- visible_pages.push(-1);
81
- }
82
- visible_pages.push(i);
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
- } else {
87
- selected_samples = samples.slice();
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 striginfiy the samples otherwise get_component_meta will trigger infinitely
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
- $: selected_samples_json = JSON.stringify(selected_samples || []);
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
- on:click={() => {
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
- on:mouseenter={() => handle_mouseenter(i)}
138
- on:mouseleave={() => handle_mouseleave()}
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
- on:click={() => {
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
- on:mouseenter={() => handle_mouseenter(i)}
191
- on:mouseleave={() => handle_mouseleave()}
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
- on:click={() => (page = visible_page)}
245
+ onclick={() => (page = visible_page)}
234
246
  >
235
247
  {visible_page + 1}
236
248
  </button>
@@ -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 { Gradio, SelectData } from "@gradio/utils";
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
- export let components: string[];
9
- export let component_props: Record<string, any>[];
10
- let component_map: Map<
11
- string,
12
- Promise<{
13
- default: ComponentType<SvelteComponent>;
14
- }>
15
- > = new Map();
16
- export let load_component: load_component_type;
17
- export let headers: string[];
18
- export let samples: any[][] | null = null;
19
- let old_samples: any[][] | null = null;
20
- export let sample_labels: string[] | null = null;
21
- export let value: number | null = null;
22
- export let root: string;
23
- export let proxy_url: null | string;
24
- export let samples_per_page = 10;
25
- export let onclick: (data: SelectData) => void;
26
- export let onselect: (data: SelectData) => void;
27
-
28
- export let layout: "gallery" | "table" | null = null;
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 = proxy_url
33
- ? `/proxy=${proxy_url}file=`
34
- : `${root}/file=`;
35
- let page = 0;
41
+ let samples_dir: string = $derived(
42
+ proxy_url ? `/proxy=${proxy_url}file=` : `${root}/file=`
43
+ );
36
44
 
37
- $: gallery =
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 selected_samples: any[][];
42
- let page_count: number;
43
- let visible_pages: number[] = [];
47
+ let gallery = $derived(
48
+ (components.length < 2 || sample_labels !== null) && layout !== "table"
49
+ );
44
50
 
45
- let current_hover = -1;
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
- function handle_mouseenter(i: number): void {
48
- current_hover = i;
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
- function handle_mouseleave(): void {
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
- visible_pages = [];
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
- page_count = Math.ceil(samples.length / samples_per_page);
73
- [0, page, page_count - 1].forEach((anchor) => {
74
- for (let i = anchor - 2; i <= anchor + 2; i++) {
75
- if (i >= 0 && i < page_count && !visible_pages.includes(i)) {
76
- if (
77
- visible_pages.length > 0 &&
78
- i - visible_pages[visible_pages.length - 1] > 1
79
- ) {
80
- visible_pages.push(-1);
81
- }
82
- visible_pages.push(i);
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
- } else {
87
- selected_samples = samples.slice();
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 striginfiy the samples otherwise get_component_meta will trigger infinitely
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
- $: selected_samples_json = JSON.stringify(selected_samples || []);
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
- on:click={() => {
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
- on:mouseenter={() => handle_mouseenter(i)}
138
- on:mouseleave={() => handle_mouseleave()}
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
- on:click={() => {
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
- on:mouseenter={() => handle_mouseenter(i)}
191
- on:mouseleave={() => handle_mouseleave()}
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
- on:click={() => (page = visible_page)}
245
+ onclick={() => (page = visible_page)}
234
246
  >
235
247
  {visible_page + 1}
236
248
  </button>
@@ -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 $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
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?: any[][] | null;
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
- [evt: string]: CustomEvent<any>;
32
- }, {}, {}, string>;
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.2",
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.1",
20
- "@gradio/textbox": "^0.13.2",
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/upload": "^0.17.4"
22
+ "@gradio/textbox": "^0.13.3",
23
+ "@gradio/upload": "^0.17.5"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@gradio/preview": "^0.15.2"