@gradio/dataframe 0.12.0 → 0.12.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 CHANGED
@@ -1,5 +1,33 @@
1
1
  # @gradio/dataframe
2
2
 
3
+ ## 0.12.2
4
+
5
+ ### Fixes
6
+
7
+ - [#9892](https://github.com/gradio-app/gradio/pull/9892) [`7d77024`](https://github.com/gradio-app/gradio/commit/7d77024cb8f9cfd39a6468de9534e58dcfa69f49) - Fix dataframe height increasing on scroll. Thanks @abidlabs!
8
+
9
+ ### Dependency updates
10
+
11
+ - @gradio/statustracker@0.9.4
12
+ - @gradio/button@0.3.6
13
+ - @gradio/atoms@0.11.0
14
+ - @gradio/upload@0.14.0
15
+
16
+ ## 0.12.1
17
+
18
+ ### Features
19
+
20
+ - [#9649](https://github.com/gradio-app/gradio/pull/9649) [`b1b81c9`](https://github.com/gradio-app/gradio/commit/b1b81c9e1c10c2c14a5cb0661d2503259ece1a1b) - Hide option to add row/col when count is fixed in dataframe. Thanks @hannahblair!
21
+
22
+ ### Dependency updates
23
+
24
+ - @gradio/markdown-code@0.2.1
25
+ - @gradio/statustracker@0.9.3
26
+ - @gradio/atoms@0.10.1
27
+ - @gradio/client@1.7.1
28
+ - @gradio/upload@0.13.5
29
+ - @gradio/button@0.3.5
30
+
3
31
  ## 0.12.0
4
32
 
5
33
  ### Features
@@ -181,12 +181,16 @@
181
181
  play={async ({ canvasElement }) => {
182
182
  const canvas = within(canvasElement);
183
183
 
184
- const cell = canvas.getByText("200");
185
- userEvent.click(cell);
186
- const open_dialog_btn = canvas.getAllByText("⋮");
187
- await userEvent.click(open_dialog_btn[0]);
184
+ const cell_400 = canvas.getAllByRole("cell")[5];
185
+ userEvent.click(cell_400);
186
+
187
+ const open_dialog_btn = within(cell_400).getByText("⋮");
188
+ await userEvent.click(open_dialog_btn);
188
189
 
189
190
  const add_row_btn = canvas.getByText("Add row above");
190
191
  await userEvent.click(add_row_btn);
192
+
193
+ const new_cell = canvas.getAllByRole("cell")[9];
194
+ userEvent.click(new_cell);
191
195
  }}
192
196
  />
@@ -7,10 +7,16 @@ export let on_add_row_below;
7
7
  export let on_add_column_left;
8
8
  export let on_add_column_right;
9
9
  export let row;
10
+ export let col_count;
11
+ export let row_count;
10
12
  export let i18n;
11
13
  let menu_element;
12
14
  $:
13
15
  is_header = row === -1;
16
+ $:
17
+ can_add_rows = row_count[1] === "dynamic";
18
+ $:
19
+ can_add_columns = col_count[1] === "dynamic";
14
20
  onMount(() => {
15
21
  position_menu();
16
22
  });
@@ -34,7 +40,7 @@ function position_menu() {
34
40
  </script>
35
41
 
36
42
  <div bind:this={menu_element} class="cell-menu">
37
- {#if !is_header}
43
+ {#if !is_header && can_add_rows}
38
44
  <button on:click={() => on_add_row_above()}>
39
45
  <Arrow transform="rotate(-90 12 12)" />
40
46
  {i18n("dataframe.add_row_above")}
@@ -44,14 +50,16 @@ function position_menu() {
44
50
  {i18n("dataframe.add_row_below")}
45
51
  </button>
46
52
  {/if}
47
- <button on:click={() => on_add_column_left()}>
48
- <Arrow transform="rotate(180 12 12)" />
49
- {i18n("dataframe.add_column_left")}
50
- </button>
51
- <button on:click={() => on_add_column_right()}>
52
- <Arrow transform="rotate(0 12 12)" />
53
- {i18n("dataframe.add_column_right")}
54
- </button>
53
+ {#if can_add_columns}
54
+ <button on:click={() => on_add_column_left()}>
55
+ <Arrow transform="rotate(180 12 12)" />
56
+ {i18n("dataframe.add_column_left")}
57
+ </button>
58
+ <button on:click={() => on_add_column_right()}>
59
+ <Arrow transform="rotate(0 12 12)" />
60
+ {i18n("dataframe.add_column_right")}
61
+ </button>
62
+ {/if}
55
63
  </div>
56
64
 
57
65
  <style>
@@ -9,6 +9,8 @@ declare const __propDef: {
9
9
  on_add_column_left: () => void;
10
10
  on_add_column_right: () => void;
11
11
  row: number;
12
+ col_count: [number, "fixed" | "dynamic"];
13
+ row_count: [number, "fixed" | "dynamic"];
12
14
  i18n: I18nFormatter;
13
15
  };
14
16
  events: {
@@ -535,10 +535,17 @@ function add_col_at(index, position) {
535
535
  active_cell_menu = null;
536
536
  active_header_menu = null;
537
537
  }
538
+ function handle_resize() {
539
+ active_cell_menu = null;
540
+ active_header_menu = null;
541
+ set_cell_widths();
542
+ }
538
543
  onMount(() => {
539
544
  document.addEventListener("click", handle_click_outside);
545
+ window.addEventListener("resize", handle_resize);
540
546
  return () => {
541
547
  document.removeEventListener("click", handle_click_outside);
548
+ window.removeEventListener("resize", handle_resize);
542
549
  };
543
550
  });
544
551
  let active_button = null;
@@ -740,8 +747,6 @@ function reset_selection() {
740
747
  {#if editable}
741
748
  <button
742
749
  class="cell-menu-button"
743
- class:visible={active_button?.type === "header" &&
744
- active_button.col === i}
745
750
  on:click={(event) => toggle_header_menu(event, i)}
746
751
  >
747
752
 
@@ -786,9 +791,6 @@ function reset_selection() {
786
791
  {#if editable}
787
792
  <button
788
793
  class="cell-menu-button"
789
- class:visible={active_button?.type === "cell" &&
790
- active_button.row === index &&
791
- active_button.col === j}
792
794
  on:click={(event) => toggle_cell_menu(event, index, j)}
793
795
  >
794
796
 
@@ -809,6 +811,8 @@ function reset_selection() {
809
811
  x={active_cell_menu.x}
810
812
  y={active_cell_menu.y}
811
813
  row={active_cell_menu?.row ?? -1}
814
+ {col_count}
815
+ {row_count}
812
816
  on_add_row_above={() => add_row_at(active_cell_menu?.row ?? -1, "above")}
813
817
  on_add_row_below={() => add_row_at(active_cell_menu?.row ?? -1, "below")}
814
818
  on_add_column_left={() => add_col_at(active_cell_menu?.col ?? -1, "left")}
@@ -822,6 +826,8 @@ function reset_selection() {
822
826
  x={active_header_menu.x}
823
827
  y={active_header_menu.y}
824
828
  row={-1}
829
+ {col_count}
830
+ {row_count}
825
831
  on_add_row_above={() => add_row_at(active_cell_menu?.row ?? -1, "above")}
826
832
  on_add_row_below={() => add_row_at(active_cell_menu?.row ?? -1, "below")}
827
833
  on_add_column_left={() => add_col_at(active_header_menu?.col ?? -1, "left")}
@@ -899,6 +905,7 @@ function reset_selection() {
899
905
  top: 0;
900
906
  left: 0;
901
907
  z-index: var(--layer-1);
908
+ box-shadow: var(--shadow-drop);
902
909
  }
903
910
 
904
911
  tr {
@@ -918,6 +925,7 @@ function reset_selection() {
918
925
  --ring-color: transparent;
919
926
  position: relative;
920
927
  outline: none;
928
+ box-shadow: inset 0 0 0 1px var(--ring-color);
921
929
  padding: 0;
922
930
  }
923
931
 
@@ -930,9 +938,8 @@ function reset_selection() {
930
938
  }
931
939
 
932
940
  th.focus,
933
- td.focus,
934
- td.menu-active {
935
- z-index: 1;
941
+ td.focus {
942
+ --ring-color: var(--color-accent);
936
943
  }
937
944
 
938
945
  tr:last-child td:first-child {
@@ -981,10 +988,8 @@ function reset_selection() {
981
988
  }
982
989
 
983
990
  .cell-wrap {
984
- position: relative;
985
991
  display: flex;
986
992
  align-items: center;
987
- justify-content: space-between;
988
993
  outline: none;
989
994
  height: var(--size-full);
990
995
  min-height: var(--size-9);
@@ -999,6 +1004,12 @@ function reset_selection() {
999
1004
  min-width: 0;
1000
1005
  }
1001
1006
 
1007
+ .controls-wrap {
1008
+ display: flex;
1009
+ justify-content: flex-end;
1010
+ padding-top: var(--size-2);
1011
+ }
1012
+
1002
1013
  .row_odd {
1003
1014
  background: var(--table-odd-background-fill);
1004
1015
  }
@@ -1011,13 +1022,6 @@ function reset_selection() {
1011
1022
  border-collapse: separate;
1012
1023
  }
1013
1024
 
1014
- .select-column {
1015
- width: var(--size-3);
1016
- text-align: center;
1017
- padding: var(--size-1);
1018
- border-right: none;
1019
- }
1020
-
1021
1025
  .cell-menu-button {
1022
1026
  flex-shrink: 0;
1023
1027
  display: none;
@@ -1036,16 +1040,12 @@ function reset_selection() {
1036
1040
  background-color: var(--color-bg-hover);
1037
1041
  }
1038
1042
 
1039
- .cell-menu-button.visible {
1043
+ td.focus .cell-menu-button {
1040
1044
  display: flex;
1041
1045
  align-items: center;
1042
1046
  justify-content: center;
1043
1047
  }
1044
1048
 
1045
- th .cell-wrap {
1046
- padding-right: var(--spacing-sm);
1047
- }
1048
-
1049
1049
  th .header-content {
1050
1050
  white-space: nowrap;
1051
1051
  overflow: hidden;
@@ -194,8 +194,6 @@ $:
194
194
  }) : sortedItems.slice(0, max_height / sortedItems.length * average_height + 1).map((data, i) => {
195
195
  return { index: i + start, data };
196
196
  });
197
- $:
198
- actual_height = visible.length * average_height + 10;
199
197
  onMount(() => {
200
198
  rows = contents.children;
201
199
  mounted = true;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gradio/dataframe",
3
- "version": "0.12.0",
3
+ "version": "0.12.2",
4
4
  "description": "Gradio UI packages",
5
5
  "type": "module",
6
6
  "author": "",
@@ -17,13 +17,13 @@
17
17
  "dompurify": "^3.0.3",
18
18
  "katex": "^0.16.7",
19
19
  "marked": "^12.0.0",
20
- "@gradio/atoms": "^0.10.0",
21
- "@gradio/button": "^0.3.4",
22
- "@gradio/client": "^1.7.0",
23
- "@gradio/markdown-code": "^0.2.0",
24
- "@gradio/statustracker": "^0.9.2",
25
- "@gradio/utils": "^0.7.0",
26
- "@gradio/upload": "^0.13.4"
20
+ "@gradio/atoms": "^0.11.0",
21
+ "@gradio/button": "^0.3.6",
22
+ "@gradio/client": "^1.7.1",
23
+ "@gradio/statustracker": "^0.9.4",
24
+ "@gradio/markdown-code": "^0.2.1",
25
+ "@gradio/upload": "^0.14.0",
26
+ "@gradio/utils": "^0.7.0"
27
27
  },
28
28
  "exports": {
29
29
  ".": {
@@ -42,7 +42,7 @@
42
42
  "svelte": "^4.0.0"
43
43
  },
44
44
  "devDependencies": {
45
- "@gradio/preview": "^0.12.1"
45
+ "@gradio/preview": "^0.13.0"
46
46
  },
47
47
  "repository": {
48
48
  "type": "git",
@@ -10,11 +10,15 @@
10
10
  export let on_add_column_left: () => void;
11
11
  export let on_add_column_right: () => void;
12
12
  export let row: number;
13
+ export let col_count: [number, "fixed" | "dynamic"];
14
+ export let row_count: [number, "fixed" | "dynamic"];
13
15
 
14
16
  export let i18n: I18nFormatter;
15
17
  let menu_element: HTMLDivElement;
16
18
 
17
19
  $: is_header = row === -1;
20
+ $: can_add_rows = row_count[1] === "dynamic";
21
+ $: can_add_columns = col_count[1] === "dynamic";
18
22
 
19
23
  onMount(() => {
20
24
  position_menu();
@@ -44,7 +48,7 @@
44
48
  </script>
45
49
 
46
50
  <div bind:this={menu_element} class="cell-menu">
47
- {#if !is_header}
51
+ {#if !is_header && can_add_rows}
48
52
  <button on:click={() => on_add_row_above()}>
49
53
  <Arrow transform="rotate(-90 12 12)" />
50
54
  {i18n("dataframe.add_row_above")}
@@ -54,14 +58,16 @@
54
58
  {i18n("dataframe.add_row_below")}
55
59
  </button>
56
60
  {/if}
57
- <button on:click={() => on_add_column_left()}>
58
- <Arrow transform="rotate(180 12 12)" />
59
- {i18n("dataframe.add_column_left")}
60
- </button>
61
- <button on:click={() => on_add_column_right()}>
62
- <Arrow transform="rotate(0 12 12)" />
63
- {i18n("dataframe.add_column_right")}
64
- </button>
61
+ {#if can_add_columns}
62
+ <button on:click={() => on_add_column_left()}>
63
+ <Arrow transform="rotate(180 12 12)" />
64
+ {i18n("dataframe.add_column_left")}
65
+ </button>
66
+ <button on:click={() => on_add_column_right()}>
67
+ <Arrow transform="rotate(0 12 12)" />
68
+ {i18n("dataframe.add_column_right")}
69
+ </button>
70
+ {/if}
65
71
  </div>
66
72
 
67
73
  <style>
@@ -710,10 +710,18 @@
710
710
  active_header_menu = null;
711
711
  }
712
712
 
713
+ function handle_resize(): void {
714
+ active_cell_menu = null;
715
+ active_header_menu = null;
716
+ set_cell_widths();
717
+ }
718
+
713
719
  onMount(() => {
714
720
  document.addEventListener("click", handle_click_outside);
721
+ window.addEventListener("resize", handle_resize);
715
722
  return () => {
716
723
  document.removeEventListener("click", handle_click_outside);
724
+ window.removeEventListener("resize", handle_resize);
717
725
  };
718
726
  });
719
727
 
@@ -933,8 +941,6 @@
933
941
  {#if editable}
934
942
  <button
935
943
  class="cell-menu-button"
936
- class:visible={active_button?.type === "header" &&
937
- active_button.col === i}
938
944
  on:click={(event) => toggle_header_menu(event, i)}
939
945
  >
940
946
 
@@ -979,9 +985,6 @@
979
985
  {#if editable}
980
986
  <button
981
987
  class="cell-menu-button"
982
- class:visible={active_button?.type === "cell" &&
983
- active_button.row === index &&
984
- active_button.col === j}
985
988
  on:click={(event) => toggle_cell_menu(event, index, j)}
986
989
  >
987
990
 
@@ -1002,6 +1005,8 @@
1002
1005
  x={active_cell_menu.x}
1003
1006
  y={active_cell_menu.y}
1004
1007
  row={active_cell_menu?.row ?? -1}
1008
+ {col_count}
1009
+ {row_count}
1005
1010
  on_add_row_above={() => add_row_at(active_cell_menu?.row ?? -1, "above")}
1006
1011
  on_add_row_below={() => add_row_at(active_cell_menu?.row ?? -1, "below")}
1007
1012
  on_add_column_left={() => add_col_at(active_cell_menu?.col ?? -1, "left")}
@@ -1015,6 +1020,8 @@
1015
1020
  x={active_header_menu.x}
1016
1021
  y={active_header_menu.y}
1017
1022
  row={-1}
1023
+ {col_count}
1024
+ {row_count}
1018
1025
  on_add_row_above={() => add_row_at(active_cell_menu?.row ?? -1, "above")}
1019
1026
  on_add_row_below={() => add_row_at(active_cell_menu?.row ?? -1, "below")}
1020
1027
  on_add_column_left={() => add_col_at(active_header_menu?.col ?? -1, "left")}
@@ -1092,6 +1099,7 @@
1092
1099
  top: 0;
1093
1100
  left: 0;
1094
1101
  z-index: var(--layer-1);
1102
+ box-shadow: var(--shadow-drop);
1095
1103
  }
1096
1104
 
1097
1105
  tr {
@@ -1111,6 +1119,7 @@
1111
1119
  --ring-color: transparent;
1112
1120
  position: relative;
1113
1121
  outline: none;
1122
+ box-shadow: inset 0 0 0 1px var(--ring-color);
1114
1123
  padding: 0;
1115
1124
  }
1116
1125
 
@@ -1123,9 +1132,8 @@
1123
1132
  }
1124
1133
 
1125
1134
  th.focus,
1126
- td.focus,
1127
- td.menu-active {
1128
- z-index: 1;
1135
+ td.focus {
1136
+ --ring-color: var(--color-accent);
1129
1137
  }
1130
1138
 
1131
1139
  tr:last-child td:first-child {
@@ -1174,10 +1182,8 @@
1174
1182
  }
1175
1183
 
1176
1184
  .cell-wrap {
1177
- position: relative;
1178
1185
  display: flex;
1179
1186
  align-items: center;
1180
- justify-content: space-between;
1181
1187
  outline: none;
1182
1188
  height: var(--size-full);
1183
1189
  min-height: var(--size-9);
@@ -1192,6 +1198,12 @@
1192
1198
  min-width: 0;
1193
1199
  }
1194
1200
 
1201
+ .controls-wrap {
1202
+ display: flex;
1203
+ justify-content: flex-end;
1204
+ padding-top: var(--size-2);
1205
+ }
1206
+
1195
1207
  .row_odd {
1196
1208
  background: var(--table-odd-background-fill);
1197
1209
  }
@@ -1204,13 +1216,6 @@
1204
1216
  border-collapse: separate;
1205
1217
  }
1206
1218
 
1207
- .select-column {
1208
- width: var(--size-3);
1209
- text-align: center;
1210
- padding: var(--size-1);
1211
- border-right: none;
1212
- }
1213
-
1214
1219
  .cell-menu-button {
1215
1220
  flex-shrink: 0;
1216
1221
  display: none;
@@ -1229,16 +1234,12 @@
1229
1234
  background-color: var(--color-bg-hover);
1230
1235
  }
1231
1236
 
1232
- .cell-menu-button.visible {
1237
+ td.focus .cell-menu-button {
1233
1238
  display: flex;
1234
1239
  align-items: center;
1235
1240
  justify-content: center;
1236
1241
  }
1237
1242
 
1238
- th .cell-wrap {
1239
- padding-right: var(--spacing-sm);
1240
- }
1241
-
1242
1243
  th .header-content {
1243
1244
  white-space: nowrap;
1244
1245
  overflow: hidden;
@@ -248,7 +248,6 @@
248
248
  return { index: i + start, data };
249
249
  });
250
250
 
251
- $: actual_height = visible.length * average_height + 10;
252
251
  onMount(() => {
253
252
  rows = contents.children as HTMLCollectionOf<HTMLTableRowElement>;
254
253
  mounted = true;