@gradio/dataframe 0.20.1 → 0.21.0-dev.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.
Files changed (58) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/Dataframe.stories.svelte +0 -25
  3. package/Example.svelte +17 -13
  4. package/Index.svelte +114 -110
  5. package/dist/Example.svelte +26 -20
  6. package/dist/Example.svelte.d.ts +21 -19
  7. package/dist/Index.svelte +121 -99
  8. package/dist/Index.svelte.d.ts +4 -168
  9. package/dist/shared/BooleanCell.svelte +12 -9
  10. package/dist/shared/BooleanCell.svelte.d.ts +20 -18
  11. package/dist/shared/CellMenu.svelte +82 -64
  12. package/dist/shared/CellMenu.svelte.d.ts +39 -37
  13. package/dist/shared/CellMenuButton.svelte +2 -1
  14. package/dist/shared/CellMenuButton.svelte.d.ts +18 -16
  15. package/dist/shared/CellMenuIcons.svelte +2 -1
  16. package/dist/shared/CellMenuIcons.svelte.d.ts +18 -16
  17. package/dist/shared/EditableCell.svelte +97 -56
  18. package/dist/shared/EditableCell.svelte.d.ts +50 -48
  19. package/dist/shared/EmptyRowButton.svelte +2 -1
  20. package/dist/shared/EmptyRowButton.svelte.d.ts +18 -16
  21. package/dist/shared/Example.svelte +2 -1
  22. package/dist/shared/Example.svelte.d.ts +18 -16
  23. package/dist/shared/FilterMenu.svelte +53 -39
  24. package/dist/shared/FilterMenu.svelte.d.ts +20 -18
  25. package/dist/shared/RowNumber.svelte +3 -2
  26. package/dist/shared/RowNumber.svelte.d.ts +19 -17
  27. package/dist/shared/Table.svelte +826 -624
  28. package/dist/shared/Table.svelte.d.ts +59 -57
  29. package/dist/shared/TableCell.svelte +95 -50
  30. package/dist/shared/TableCell.svelte.d.ts +61 -59
  31. package/dist/shared/TableHeader.svelte +86 -58
  32. package/dist/shared/TableHeader.svelte.d.ts +55 -53
  33. package/dist/shared/Toolbar.svelte +49 -39
  34. package/dist/shared/Toolbar.svelte.d.ts +27 -25
  35. package/dist/shared/VirtualTable.svelte +207 -154
  36. package/dist/shared/VirtualTable.svelte.d.ts +40 -37
  37. package/dist/shared/icons/FilterIcon.svelte +2 -1
  38. package/dist/shared/icons/FilterIcon.svelte.d.ts +16 -14
  39. package/dist/shared/icons/Padlock.svelte.d.ts +22 -21
  40. package/dist/shared/icons/SelectionButtons.svelte +15 -5
  41. package/dist/shared/icons/SelectionButtons.svelte.d.ts +20 -18
  42. package/dist/shared/icons/SortArrowDown.svelte +2 -1
  43. package/dist/shared/icons/SortArrowDown.svelte.d.ts +18 -16
  44. package/dist/shared/icons/SortArrowUp.svelte +2 -1
  45. package/dist/shared/icons/SortArrowUp.svelte.d.ts +18 -16
  46. package/dist/shared/icons/SortButtonDown.svelte.d.ts +22 -21
  47. package/dist/shared/icons/SortButtonUp.svelte.d.ts +22 -21
  48. package/dist/shared/icons/SortIcon.svelte +12 -8
  49. package/dist/shared/icons/SortIcon.svelte.d.ts +22 -20
  50. package/dist/shared/utils/data_processing.d.ts +1 -1
  51. package/dist/standalone/Index.svelte +104 -78
  52. package/dist/standalone/Index.svelte.d.ts +41 -41
  53. package/dist/standalone/stubs/Upload.svelte +5 -4
  54. package/dist/standalone/stubs/Upload.svelte.d.ts +35 -25
  55. package/package.json +15 -14
  56. package/shared/Table.svelte +13 -11
  57. package/shared/VirtualTable.svelte +1 -1
  58. package/standalone/Index.svelte +17 -19
package/CHANGELOG.md CHANGED
@@ -1,5 +1,64 @@
1
1
  # @gradio/dataframe
2
2
 
3
+ ## 0.21.0-dev.3
4
+
5
+ ### Dependency updates
6
+
7
+ - @gradio/markdown-code@0.5.2
8
+ - @gradio/atoms@0.19.0-dev.1
9
+ - @gradio/client@2.0.0-dev.2
10
+ - @gradio/statustracker@0.12.0-dev.1
11
+ - @gradio/button@0.5.14-dev.2
12
+ - @gradio/upload@0.17.2-dev.2
13
+ - @gradio/dataframe-interim@0.21.0-dev.3
14
+ - @gradio/checkbox@0.5.0-dev.1
15
+
16
+ ## 0.21.0-dev.2
17
+
18
+ ### Features
19
+
20
+ - [#12357](https://github.com/gradio-app/gradio/pull/12357) [`c9cf634`](https://github.com/gradio-app/gradio/commit/c9cf634a9cd34b4adadde1a6a98d60faf732639a) - Fix various event issues. Thanks @pngwn!
21
+
22
+ ### Dependency updates
23
+
24
+ - @gradio/dataframe-interim@0.21.0-dev.2
25
+
26
+ ## 0.21.0-dev.1
27
+
28
+ ### Features
29
+
30
+ - [#12110](https://github.com/gradio-app/gradio/pull/12110) [`e80fc6f`](https://github.com/gradio-app/gradio/commit/e80fc6f9eba1b895680b19803bbd15e7e303d969) - Fix issue with boolean columns in dataframe. Thanks @abidlabs!
31
+
32
+ ### Dependency updates
33
+
34
+ - @gradio/atoms@0.18.2-dev.0
35
+ - @gradio/upload@0.17.2-dev.1
36
+ - @gradio/utils@0.10.3-dev.0
37
+ - @gradio/button@0.5.14-dev.1
38
+ - @gradio/statustracker@0.12.0-dev.0
39
+ - @gradio/icons@0.15.0-dev.0
40
+ - @gradio/checkbox@0.5.0-dev.0
41
+
42
+ ## 0.20.2-dev.0
43
+
44
+ ### Dependency updates
45
+
46
+ - @gradio/client@2.0.0-dev.1
47
+
48
+ ## 0.20.2-dev.0
49
+
50
+ ### Dependency updates
51
+
52
+ - @gradio/upload@0.17.2-dev.0
53
+ - @gradio/client@2.0.0-dev.0
54
+ - @gradio/button@0.5.14-dev.0
55
+
56
+ ## 0.20.1
57
+
58
+ ### Dependency updates
59
+
60
+ - @gradio/client@1.19.1
61
+
3
62
  ## 0.20.1
4
63
 
5
64
  ### Fixes
@@ -439,31 +439,6 @@
439
439
  }}
440
440
  />
441
441
 
442
- <Story
443
- name="Dataframe with custom components"
444
- args={{
445
- values: [
446
- [
447
- "Absol G",
448
- 70,
449
- "https://images.pokemontcg.io/pl3/1_hires.png",
450
- "pl3-1",
451
- "Supreme Victors"
452
- ]
453
- ],
454
- datatype: ["str", "number", "image", "str", "str"],
455
- headers: ["Pokemon", "HP", "Image", "ID", "Set"],
456
- label: "Pokemon Cards",
457
- col_count: [5, "fixed"],
458
- row_count: [1, "dynamic"],
459
- editable: true,
460
- editable: true,
461
- components: {
462
- image: Image
463
- }
464
- }}
465
- />
466
-
467
442
  <Story
468
443
  name="Dataframe with row and column selection"
469
444
  args={{
package/Example.svelte CHANGED
@@ -23,22 +23,26 @@
23
23
  {value}
24
24
  {:else if is_empty}
25
25
  <table class="">
26
- <tr>
27
- <td>Empty</td>
28
- </tr>
26
+ <tbody>
27
+ <tr>
28
+ <td>Empty</td>
29
+ </tr>
30
+ </tbody>
29
31
  </table>
30
32
  {:else}
31
33
  <table class="">
32
- {#each value.slice(0, 3) as row, i}
33
- <tr>
34
- {#each row.slice(0, 3) as cell, j}
35
- <td>{cell}</td>
36
- {/each}
37
- {#if row.length > 3}
38
- <td>…</td>
39
- {/if}
40
- </tr>
41
- {/each}
34
+ <tbody>
35
+ {#each value.slice(0, 3) as row, i}
36
+ <tr>
37
+ {#each row.slice(0, 3) as cell, j}
38
+ <td>{cell}</td>
39
+ {/each}
40
+ {#if row.length > 3}
41
+ <td>…</td>
42
+ {/if}
43
+ </tr>
44
+ {/each}
45
+ </tbody>
42
46
  </table>
43
47
  {#if value.length > 3}
44
48
  <div
package/Index.svelte CHANGED
@@ -6,118 +6,122 @@
6
6
  </script>
7
7
 
8
8
  <script lang="ts">
9
- import type { Gradio, SelectData } from "@gradio/utils";
10
- import { Block } from "@gradio/atoms";
11
- import Table from "./shared/Table.svelte";
12
- import { StatusTracker } from "@gradio/statustracker";
13
- import type { LoadingStatus } from "@gradio/statustracker";
14
- import type { Datatype, DataframeValue } from "./shared/utils/utils";
15
- import Image from "@gradio/image";
9
+ import type { SharedProps } from "@gradio/utils";
10
+ import { Gradio } from "@gradio/utils";
16
11
 
17
- export let elem_id = "";
18
- export let elem_classes: string[] = [];
19
- export let visible: boolean | "hidden" = true;
20
- export let value: DataframeValue = {
21
- data: [["", "", ""]],
22
- headers: ["1", "2", "3"],
23
- metadata: null
12
+ import type { DataframeProps, DataframeEvents } from "./types";
13
+ import { dequal } from "dequal";
14
+ import { onMount } from "svelte";
15
+ import DF from "@gradio/dataframe-interim";
16
+ import "@gradio/dataframe-interim/css";
17
+
18
+ let prev_data: any = null;
19
+
20
+ let changed = false;
21
+
22
+ class DataframeGradio extends Gradio<DataframeEvents, DataframeProps> {
23
+ async set_data(data: Partial<DataframeProps & SharedProps>): Promise<void> {
24
+ console.log("DataframeGradio set_data called", data);
25
+ if (data.value) {
26
+ changed = true;
27
+ }
28
+
29
+ super.set_data(data);
30
+ if (data.value && dequal(data.value, JSON.parse(prev_data)) === false) {
31
+ // this.dispatch("change");
32
+ prev_data = JSON.stringify(data.value);
33
+ }
34
+ }
35
+ }
36
+
37
+ let props = $props();
38
+
39
+ let gradio = new DataframeGradio(props);
40
+ let el: HTMLDivElement;
41
+ let Component: typeof DF | null = null;
42
+ onMount(() => {
43
+ Component = new DF({
44
+ target: el,
45
+ props: {
46
+ elem_id: gradio.shared.elem_id,
47
+ elem_classes: gradio.shared.elem_classes,
48
+ visible: gradio.shared.visible,
49
+ value: gradio.props.value,
50
+
51
+ col_count: gradio.props.col_count,
52
+ row_count: gradio.props.row_count,
53
+ label: gradio.shared.label,
54
+ show_label: gradio.shared.show_label,
55
+ wrap: gradio.props.wrap,
56
+ datatype: gradio.props.datatype,
57
+ scale: gradio.shared.scale,
58
+ min_width: gradio.shared.min_width,
59
+ root: gradio.shared.root,
60
+ line_breaks: gradio.props.line_breaks,
61
+ column_widths: gradio.props.column_widths,
62
+ gradio: compat_gradio,
63
+ latex_delimiters: gradio.props.latex_delimiters,
64
+ max_height: gradio.props.max_height,
65
+ loading_status: gradio.shared.loading_status,
66
+ interactive: gradio.shared.interactive,
67
+ buttons: gradio.props.buttons,
68
+ max_chars: gradio.props.max_chars,
69
+ show_row_numbers: gradio.props.show_row_numbers,
70
+ show_search: gradio.props.show_search,
71
+ pinned_columns: gradio.props.pinned_columns,
72
+ static_columns: gradio.props.static_columns,
73
+ fullscreen: gradio.props.fullscreen
74
+ }
75
+ });
76
+ });
77
+
78
+ const compat_gradio = {
79
+ i18n: gradio.i18n,
80
+ client: gradio.shared.client,
81
+ dispatch(name: keyof DataframeEvents, detail?: any) {
82
+ if (name === "input" && changed) {
83
+ console.log("Skipping duplicate input event");
84
+ changed = false;
85
+ return;
86
+ }
87
+ gradio.dispatch(name, detail);
88
+ },
89
+ autoscroll: gradio.shared.autoscroll
24
90
  };
25
- export let value_is_output = false;
26
- export let col_count: [number, "fixed" | "dynamic"];
27
- export let row_count: [number, "fixed" | "dynamic"];
28
- export let label: string | null = null;
29
- export let show_label = true;
30
- export let wrap: boolean;
31
- export let datatype: Datatype | Datatype[];
32
- export let scale: number | null = null;
33
- export let min_width: number | undefined = undefined;
34
- export let root: string;
91
+ $effect(() => {
92
+ if (Component) {
93
+ Component.$set({
94
+ elem_id: gradio.shared.elem_id,
95
+ elem_classes: gradio.shared.elem_classes,
96
+ visible: gradio.shared.visible,
97
+ value: gradio.props.value,
35
98
 
36
- export let line_breaks = true;
37
- export let column_widths: string[] = [];
38
- export let gradio: Gradio<{
39
- change: never;
40
- select: SelectData;
41
- input: never;
42
- clear_status: LoadingStatus;
43
- search: string | null;
44
- edit: SelectData;
45
- }>;
46
- export let latex_delimiters: {
47
- left: string;
48
- right: string;
49
- display: boolean;
50
- }[];
51
- export let max_height: number | undefined = undefined;
52
- export let loading_status: LoadingStatus;
53
- export let interactive: boolean;
54
- export let show_fullscreen_button = false;
55
- export let max_chars: number | undefined = undefined;
56
- export let show_copy_button = false;
57
- export let show_row_numbers = false;
58
- export let show_search: "none" | "search" | "filter" = "none";
59
- export let pinned_columns = 0;
60
- export let static_columns: (string | number)[] = [];
61
- export let fullscreen = false;
99
+ col_count: gradio.props.col_count,
100
+ row_count: gradio.props.row_count,
101
+ label: gradio.shared.label,
102
+ show_label: gradio.shared.show_label,
103
+ wrap: gradio.props.wrap,
104
+ datatype: gradio.props.datatype,
105
+ scale: gradio.shared.scale,
106
+ min_width: gradio.shared.min_width,
107
+ root: gradio.shared.root,
108
+ line_breaks: gradio.props.line_breaks,
109
+ column_widths: gradio.props.column_widths,
110
+ gradio: compat_gradio,
111
+ latex_delimiters: gradio.props.latex_delimiters,
112
+ max_height: gradio.props.max_height,
113
+ loading_status: gradio.shared.loading_status,
114
+ interactive: gradio.shared.interactive,
115
+ buttons: gradio.props.buttons,
116
+ max_chars: gradio.props.max_chars,
117
+ show_row_numbers: gradio.props.show_row_numbers,
118
+ show_search: gradio.props.show_search,
119
+ pinned_columns: gradio.props.pinned_columns,
120
+ static_columns: gradio.props.static_columns,
121
+ fullscreen: gradio.props.fullscreen
122
+ });
123
+ }
124
+ });
62
125
  </script>
63
126
 
64
- <Block
65
- {visible}
66
- padding={false}
67
- {elem_id}
68
- {elem_classes}
69
- container={false}
70
- {scale}
71
- {min_width}
72
- overflow_behavior="visible"
73
- bind:fullscreen
74
- >
75
- <StatusTracker
76
- autoscroll={gradio.autoscroll}
77
- i18n={gradio.i18n}
78
- {...loading_status}
79
- on:clear_status={() => gradio.dispatch("clear_status", loading_status)}
80
- />
81
- <Table
82
- {root}
83
- {label}
84
- {show_label}
85
- {row_count}
86
- {col_count}
87
- values={value.data}
88
- display_value={value.metadata?.display_value}
89
- styling={value.metadata?.styling}
90
- headers={value.headers}
91
- {fullscreen}
92
- on:change={(e) => {
93
- value.data = e.detail.data;
94
- value.headers = e.detail.headers;
95
- gradio.dispatch("change");
96
- }}
97
- on:input={(e) => gradio.dispatch("input")}
98
- on:select={(e) => gradio.dispatch("select", e.detail)}
99
- on:edit={(e) => gradio.dispatch("edit", e.detail)}
100
- on:fullscreen={({ detail }) => {
101
- fullscreen = detail;
102
- }}
103
- {wrap}
104
- {datatype}
105
- {latex_delimiters}
106
- editable={interactive}
107
- {max_height}
108
- i18n={gradio.i18n}
109
- {line_breaks}
110
- {column_widths}
111
- upload={(...args) => gradio.client.upload(...args)}
112
- stream_handler={(...args) => gradio.client.stream(...args)}
113
- bind:value_is_output
114
- {show_fullscreen_button}
115
- {max_chars}
116
- {show_copy_button}
117
- {show_row_numbers}
118
- {show_search}
119
- {pinned_columns}
120
- components={{ image: Image }}
121
- {static_columns}
122
- />
123
- </Block>
127
+ <div bind:this={el} />
@@ -1,10 +1,12 @@
1
- <script>export let value;
2
- export let type;
3
- export let selected = false;
4
- export let index;
5
- let hovered = false;
6
- let loaded = Array.isArray(value);
7
- let is_empty = loaded && (value.length === 0 || value[0].length === 0);
1
+ <script lang="ts">
2
+ export let value: (string | number)[][] | string;
3
+ export let type: "gallery" | "table";
4
+ export let selected = false;
5
+ export let index: number;
6
+
7
+ let hovered = false;
8
+ let loaded = Array.isArray(value);
9
+ let is_empty = loaded && (value.length === 0 || value[0].length === 0);
8
10
  </script>
9
11
 
10
12
  {#if loaded}
@@ -21,22 +23,26 @@ let is_empty = loaded && (value.length === 0 || value[0].length === 0);
21
23
  {value}
22
24
  {:else if is_empty}
23
25
  <table class="">
24
- <tr>
25
- <td>Empty</td>
26
- </tr>
26
+ <tbody>
27
+ <tr>
28
+ <td>Empty</td>
29
+ </tr>
30
+ </tbody>
27
31
  </table>
28
32
  {:else}
29
33
  <table class="">
30
- {#each value.slice(0, 3) as row, i}
31
- <tr>
32
- {#each row.slice(0, 3) as cell, j}
33
- <td>{cell}</td>
34
- {/each}
35
- {#if row.length > 3}
36
- <td>…</td>
37
- {/if}
38
- </tr>
39
- {/each}
34
+ <tbody>
35
+ {#each value.slice(0, 3) as row, i}
36
+ <tr>
37
+ {#each row.slice(0, 3) as cell, j}
38
+ <td>{cell}</td>
39
+ {/each}
40
+ {#if row.length > 3}
41
+ <td>…</td>
42
+ {/if}
43
+ </tr>
44
+ {/each}
45
+ </tbody>
40
46
  </table>
41
47
  {#if value.length > 3}
42
48
  <div
@@ -1,21 +1,23 @@
1
- import { SvelteComponent } from "svelte";
2
- declare const __propDef: {
3
- props: {
4
- value: (string | number)[][] | string;
5
- type: "gallery" | "table";
6
- selected?: boolean;
7
- index: number;
1
+ 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> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: Props & {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
8
11
  };
9
- events: {
10
- [evt: string]: CustomEvent<any>;
11
- };
12
- slots: {};
13
- exports?: {} | undefined;
14
- bindings?: string | undefined;
15
- };
16
- export type ExampleProps = typeof __propDef.props;
17
- export type ExampleEvents = typeof __propDef.events;
18
- export type ExampleSlots = typeof __propDef.slots;
19
- export default class Example extends SvelteComponent<ExampleProps, ExampleEvents, ExampleSlots> {
12
+ z_$$bindings?: Bindings;
20
13
  }
21
- export {};
14
+ declare const Example: $$__sveltets_2_IsomorphicComponent<{
15
+ value: (string | number)[][] | string;
16
+ type: "gallery" | "table";
17
+ selected?: boolean;
18
+ index: number;
19
+ }, {
20
+ [evt: string]: CustomEvent<any>;
21
+ }, {}, {}, string>;
22
+ type Example = InstanceType<typeof Example>;
23
+ export default Example;