@gradio/dataframe 0.21.7 → 0.23.0

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 (128) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/Dataframe.test.ts +697 -32
  3. package/Index.svelte +107 -106
  4. package/dist/Index.svelte +107 -106
  5. package/dist/Index.svelte.d.ts +0 -1
  6. package/dist/shared/BooleanCell.svelte +12 -6
  7. package/dist/shared/BooleanCell.svelte.d.ts +4 -18
  8. package/dist/shared/CellMenu.svelte +74 -49
  9. package/dist/shared/CellMenu.svelte.d.ts +5 -19
  10. package/dist/shared/CellMenuButton.svelte +3 -3
  11. package/dist/shared/CellMenuButton.svelte.d.ts +4 -18
  12. package/dist/shared/CellMenuIcons.svelte +1 -1
  13. package/dist/shared/CellMenuIcons.svelte.d.ts +4 -18
  14. package/dist/shared/DataCell.svelte +189 -0
  15. package/dist/shared/DataCell.svelte.d.ts +44 -0
  16. package/dist/shared/EditableCell.svelte +88 -64
  17. package/dist/shared/EditableCell.svelte.d.ts +8 -26
  18. package/dist/shared/EmptyRowButton.svelte +2 -2
  19. package/dist/shared/EmptyRowButton.svelte.d.ts +4 -18
  20. package/dist/shared/FilterMenu.svelte +26 -18
  21. package/dist/shared/FilterMenu.svelte.d.ts +5 -21
  22. package/dist/shared/HeaderCell.svelte +218 -0
  23. package/dist/shared/HeaderCell.svelte.d.ts +30 -0
  24. package/dist/shared/RowNumber.svelte +4 -2
  25. package/dist/shared/RowNumber.svelte.d.ts +4 -18
  26. package/dist/shared/Table.svelte +1039 -947
  27. package/dist/shared/Table.svelte.d.ts +12 -30
  28. package/dist/shared/Toolbar.svelte +32 -22
  29. package/dist/shared/Toolbar.svelte.d.ts +6 -21
  30. package/dist/shared/column_measurement.svelte.d.ts +20 -0
  31. package/dist/shared/column_measurement.svelte.js +79 -0
  32. package/dist/shared/icons/FilterIcon.svelte +14 -6
  33. package/dist/shared/icons/FilterIcon.svelte.d.ts +14 -6
  34. package/dist/shared/icons/Padlock.svelte +6 -2
  35. package/dist/shared/icons/Padlock.svelte.d.ts +4 -25
  36. package/dist/shared/icons/SelectionButtons.svelte +23 -8
  37. package/dist/shared/icons/SelectionButtons.svelte.d.ts +4 -18
  38. package/dist/shared/icons/SortButtonDown.svelte +15 -4
  39. package/dist/shared/icons/SortButtonDown.svelte.d.ts +4 -25
  40. package/dist/shared/icons/SortButtonUp.svelte +15 -5
  41. package/dist/shared/icons/SortButtonUp.svelte.d.ts +4 -25
  42. package/dist/shared/icons/SortIcon.svelte +13 -7
  43. package/dist/shared/icons/SortIcon.svelte.d.ts +7 -21
  44. package/dist/shared/tanstack/index.d.ts +3 -0
  45. package/dist/shared/tanstack/index.js +3 -0
  46. package/dist/shared/tanstack/table.svelte.d.ts +26 -0
  47. package/dist/shared/tanstack/table.svelte.js +102 -0
  48. package/dist/shared/tanstack/virtual.svelte.d.ts +14 -0
  49. package/dist/shared/tanstack/virtual.svelte.js +76 -0
  50. package/dist/shared/types.d.ts +2 -0
  51. package/dist/shared/utils/filter.d.ts +5 -0
  52. package/dist/shared/utils/filter.js +62 -0
  53. package/dist/shared/utils/selection_utils.js +1 -1
  54. package/dist/shared/utils/table_utils.d.ts +1 -14
  55. package/dist/shared/utils/table_utils.js +0 -61
  56. package/dist/standalone/Index.svelte +71 -46
  57. package/dist/standalone/Index.svelte.d.ts +4 -23
  58. package/dist/types.d.ts +32 -0
  59. package/dist/types.js +1 -0
  60. package/package.json +12 -11
  61. package/shared/BooleanCell.svelte +12 -6
  62. package/shared/CellMenu.svelte +74 -49
  63. package/shared/CellMenuButton.svelte +3 -3
  64. package/shared/CellMenuIcons.svelte +1 -1
  65. package/shared/DataCell.svelte +189 -0
  66. package/shared/EditableCell.svelte +88 -64
  67. package/shared/EmptyRowButton.svelte +2 -2
  68. package/shared/FilterMenu.svelte +26 -18
  69. package/shared/HeaderCell.svelte +218 -0
  70. package/shared/RowNumber.svelte +4 -2
  71. package/shared/Table.svelte +1039 -947
  72. package/shared/Toolbar.svelte +32 -22
  73. package/shared/column_measurement.svelte.ts +103 -0
  74. package/shared/icons/FilterIcon.svelte +14 -6
  75. package/shared/icons/Padlock.svelte +6 -2
  76. package/shared/icons/SelectionButtons.svelte +23 -8
  77. package/shared/icons/SortButtonDown.svelte +15 -4
  78. package/shared/icons/SortButtonUp.svelte +15 -5
  79. package/shared/icons/SortIcon.svelte +13 -7
  80. package/shared/tanstack/index.ts +23 -0
  81. package/shared/tanstack/table.svelte.ts +117 -0
  82. package/shared/tanstack/virtual.svelte.ts +105 -0
  83. package/shared/types.ts +3 -0
  84. package/shared/utils/filter.ts +66 -0
  85. package/shared/utils/selection_utils.ts +1 -1
  86. package/shared/utils/table_utils.ts +1 -100
  87. package/standalone/Index.svelte +71 -46
  88. package/test/filter.test.ts +350 -0
  89. package/test/selection_utils.test.ts +416 -0
  90. package/test/table_utils.test.ts +45 -112
  91. package/types.ts +34 -0
  92. package/dist/shared/TableCell.svelte +0 -330
  93. package/dist/shared/TableCell.svelte.d.ts +0 -66
  94. package/dist/shared/TableHeader.svelte +0 -344
  95. package/dist/shared/TableHeader.svelte.d.ts +0 -61
  96. package/dist/shared/VirtualTable.svelte +0 -379
  97. package/dist/shared/VirtualTable.svelte.d.ts +0 -42
  98. package/dist/shared/context/dataframe_context.d.ts +0 -180
  99. package/dist/shared/context/dataframe_context.js +0 -412
  100. package/dist/shared/icons/SortArrowDown.svelte +0 -25
  101. package/dist/shared/icons/SortArrowDown.svelte.d.ts +0 -20
  102. package/dist/shared/icons/SortArrowUp.svelte +0 -25
  103. package/dist/shared/icons/SortArrowUp.svelte.d.ts +0 -20
  104. package/dist/shared/utils/data_processing.d.ts +0 -14
  105. package/dist/shared/utils/data_processing.js +0 -47
  106. package/dist/shared/utils/drag_utils.d.ts +0 -15
  107. package/dist/shared/utils/drag_utils.js +0 -67
  108. package/dist/shared/utils/filter_utils.d.ts +0 -29
  109. package/dist/shared/utils/filter_utils.js +0 -123
  110. package/dist/shared/utils/keyboard_utils.d.ts +0 -3
  111. package/dist/shared/utils/keyboard_utils.js +0 -236
  112. package/dist/shared/utils/menu_utils.d.ts +0 -42
  113. package/dist/shared/utils/menu_utils.js +0 -58
  114. package/dist/shared/utils/sort_utils.d.ts +0 -26
  115. package/dist/shared/utils/sort_utils.js +0 -59
  116. package/shared/TableCell.svelte +0 -330
  117. package/shared/TableHeader.svelte +0 -344
  118. package/shared/VirtualTable.svelte +0 -379
  119. package/shared/context/dataframe_context.ts +0 -701
  120. package/shared/icons/SortArrowDown.svelte +0 -25
  121. package/shared/icons/SortArrowUp.svelte +0 -25
  122. package/shared/utils/data_processing.ts +0 -77
  123. package/shared/utils/drag_utils.ts +0 -105
  124. package/shared/utils/filter_utils.ts +0 -208
  125. package/shared/utils/keyboard_utils.ts +0 -309
  126. package/shared/utils/menu_utils.ts +0 -115
  127. package/shared/utils/sort_utils.ts +0 -91
  128. package/test/sort_utils.test.ts +0 -323
@@ -3,44 +3,66 @@
3
3
  import CellMenuIcons from "./CellMenuIcons.svelte";
4
4
  import FilterMenu from "./FilterMenu.svelte";
5
5
  import type { I18nFormatter } from "@gradio/utils";
6
- import type {
7
- SortDirection,
8
- FilterDatatype
9
- } from "./context/dataframe_context";
10
-
11
- export let x: number;
12
- export let y: number;
13
- export let on_add_row_above: () => void;
14
- export let on_add_row_below: () => void;
15
- export let on_add_column_left: () => void;
16
- export let on_add_column_right: () => void;
17
- export let row: number;
18
- export let col_count: [number, "fixed" | "dynamic"];
19
- export let row_count: [number, "fixed" | "dynamic"];
20
- export let on_delete_row: () => void;
21
- export let on_delete_col: () => void;
22
- export let can_delete_rows: boolean;
23
- export let can_delete_cols: boolean;
24
- export let on_sort: (direction: SortDirection) => void = () => {};
25
- export let on_clear_sort: () => void = () => {};
26
- export let sort_direction: SortDirection | null = null;
27
- export let sort_priority: number | null = null;
28
- export let on_filter: (
29
- datatype: FilterDatatype,
30
- selected_filter: string,
31
- value: string
32
- ) => void = () => {};
33
- export let on_clear_filter: () => void = () => {};
34
- export let filter_active: boolean | null = null;
35
- export let editable = true;
36
-
37
- export let i18n: I18nFormatter;
6
+ import type { SortDirection, FilterDatatype } from "./types";
7
+
8
+ let {
9
+ x,
10
+ y,
11
+ on_add_row_above,
12
+ on_add_row_below,
13
+ on_add_column_left,
14
+ on_add_column_right,
15
+ row,
16
+ col_count,
17
+ row_count,
18
+ on_delete_row,
19
+ on_delete_col,
20
+ can_delete_rows,
21
+ can_delete_cols,
22
+ on_sort = () => {},
23
+ on_clear_sort = () => {},
24
+ sort_direction = null,
25
+ sort_priority = null,
26
+ on_filter = () => {},
27
+ on_clear_filter = () => {},
28
+ filter_active = null,
29
+ editable = true,
30
+ i18n
31
+ }: {
32
+ x: number;
33
+ y: number;
34
+ on_add_row_above: () => void;
35
+ on_add_row_below: () => void;
36
+ on_add_column_left: () => void;
37
+ on_add_column_right: () => void;
38
+ row: number;
39
+ col_count: [number, "fixed" | "dynamic"];
40
+ row_count: [number, "fixed" | "dynamic"];
41
+ on_delete_row: () => void;
42
+ on_delete_col: () => void;
43
+ can_delete_rows: boolean;
44
+ can_delete_cols: boolean;
45
+ on_sort?: (direction: SortDirection) => void;
46
+ on_clear_sort?: () => void;
47
+ sort_direction?: SortDirection | null;
48
+ sort_priority?: number | null;
49
+ on_filter?: (
50
+ datatype: FilterDatatype,
51
+ selected_filter: string,
52
+ value: string
53
+ ) => void;
54
+ on_clear_filter?: () => void;
55
+ filter_active?: boolean | null;
56
+ editable?: boolean;
57
+ i18n: I18nFormatter;
58
+ } = $props();
59
+
38
60
  let menu_element: HTMLDivElement;
39
- let active_filter_menu: { x: number; y: number } | null = null;
61
+ let active_filter_menu: { x: number; y: number } | null = $state(null);
40
62
 
41
- $: is_header = row === -1;
42
- $: can_add_rows = editable && row_count[1] === "dynamic";
43
- $: can_add_columns = editable && col_count[1] === "dynamic";
63
+ let is_header = $derived(row === -1);
64
+ let can_add_rows = $derived(editable && row_count[1] === "dynamic");
65
+ let can_add_columns = $derived(editable && col_count[1] === "dynamic");
44
66
 
45
67
  onMount(() => {
46
68
  position_menu();
@@ -86,7 +108,7 @@
86
108
  {#if is_header}
87
109
  <button
88
110
  role="menuitem"
89
- on:click={() => on_sort("asc")}
111
+ onclick={() => on_sort("asc")}
90
112
  class:active={sort_direction === "asc"}
91
113
  >
92
114
  <CellMenuIcons icon="sort-asc" />
@@ -97,7 +119,7 @@
97
119
  </button>
98
120
  <button
99
121
  role="menuitem"
100
- on:click={() => on_sort("desc")}
122
+ onclick={() => on_sort("desc")}
101
123
  class:active={sort_direction === "desc"}
102
124
  >
103
125
  <CellMenuIcons icon="sort-desc" />
@@ -106,13 +128,16 @@
106
128
  <span class="priority">{sort_priority}</span>
107
129
  {/if}
108
130
  </button>
109
- <button role="menuitem" on:click={on_clear_sort}>
131
+ <button role="menuitem" onclick={on_clear_sort}>
110
132
  <CellMenuIcons icon="clear-sort" />
111
133
  {i18n("dataframe.clear_sort")}
112
134
  </button>
113
135
  <button
114
136
  role="menuitem"
115
- on:click|stopPropagation={toggle_filter_menu}
137
+ onclick={(e) => {
138
+ e.stopPropagation();
139
+ toggle_filter_menu();
140
+ }}
116
141
  class:active={filter_active || active_filter_menu}
117
142
  >
118
143
  <CellMenuIcons icon="filter" />
@@ -121,7 +146,7 @@
121
146
  <span class="priority">1</span>
122
147
  {/if}
123
148
  </button>
124
- <button role="menuitem" on:click={on_clear_filter}>
149
+ <button role="menuitem" onclick={on_clear_filter}>
125
150
  <CellMenuIcons icon="clear-filter" />
126
151
  {i18n("dataframe.clear_filter")}
127
152
  </button>
@@ -130,7 +155,7 @@
130
155
  {#if !is_header && can_add_rows}
131
156
  <button
132
157
  role="menuitem"
133
- on:click={() => on_add_row_above()}
158
+ onclick={() => on_add_row_above()}
134
159
  aria-label="Add row above"
135
160
  >
136
161
  <CellMenuIcons icon="add-row-above" />
@@ -138,7 +163,7 @@
138
163
  </button>
139
164
  <button
140
165
  role="menuitem"
141
- on:click={() => on_add_row_below()}
166
+ onclick={() => on_add_row_below()}
142
167
  aria-label="Add row below"
143
168
  >
144
169
  <CellMenuIcons icon="add-row-below" />
@@ -147,7 +172,7 @@
147
172
  {#if can_delete_rows}
148
173
  <button
149
174
  role="menuitem"
150
- on:click={on_delete_row}
175
+ onclick={on_delete_row}
151
176
  class="delete"
152
177
  aria-label="Delete row"
153
178
  >
@@ -159,7 +184,7 @@
159
184
  {#if can_add_columns}
160
185
  <button
161
186
  role="menuitem"
162
- on:click={() => on_add_column_left()}
187
+ onclick={() => on_add_column_left()}
163
188
  aria-label="Add column to the left"
164
189
  >
165
190
  <CellMenuIcons icon="add-column-left" />
@@ -167,7 +192,7 @@
167
192
  </button>
168
193
  <button
169
194
  role="menuitem"
170
- on:click={() => on_add_column_right()}
195
+ onclick={() => on_add_column_right()}
171
196
  aria-label="Add column to the right"
172
197
  >
173
198
  <CellMenuIcons icon="add-column-right" />
@@ -176,7 +201,7 @@
176
201
  {#if can_delete_cols}
177
202
  <button
178
203
  role="menuitem"
179
- on:click={on_delete_col}
204
+ onclick={on_delete_col}
180
205
  class="delete"
181
206
  aria-label="Delete column"
182
207
  >
@@ -194,7 +219,7 @@
194
219
  <style>
195
220
  .cell-menu {
196
221
  position: fixed;
197
- z-index: 9;
222
+ z-index: var(--layer-1);
198
223
  background: var(--background-fill-primary);
199
224
  border: 1px solid var(--border-color-primary);
200
225
  border-radius: var(--radius-sm);
@@ -204,7 +229,7 @@
204
229
  gap: var(--size-1);
205
230
  box-shadow: var(--shadow-drop-lg);
206
231
  min-width: 150px;
207
- z-index: var(--layer-1);
232
+ width: max-content;
208
233
  }
209
234
 
210
235
  .cell-menu button {
@@ -1,19 +1,6 @@
1
1
  import type { I18nFormatter } from "@gradio/utils";
2
- import type { SortDirection, FilterDatatype } from "./context/dataframe_context";
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 CellMenu: $$__sveltets_2_IsomorphicComponent<{
2
+ import type { SortDirection, FilterDatatype } from "./types";
3
+ type $$ComponentProps = {
17
4
  x: number;
18
5
  y: number;
19
6
  on_add_row_above: () => void;
@@ -36,8 +23,7 @@ declare const CellMenu: $$__sveltets_2_IsomorphicComponent<{
36
23
  filter_active?: boolean | null;
37
24
  editable?: boolean;
38
25
  i18n: I18nFormatter;
39
- }, {
40
- [evt: string]: CustomEvent<any>;
41
- }, {}, {}, string>;
42
- type CellMenu = InstanceType<typeof CellMenu>;
26
+ };
27
+ declare const CellMenu: import("svelte").Component<$$ComponentProps, {}, "">;
28
+ type CellMenu = ReturnType<typeof CellMenu>;
43
29
  export default CellMenu;
@@ -1,13 +1,13 @@
1
1
  <script lang="ts">
2
- export let on_click: (event: MouseEvent) => void;
2
+ let { on_click }: { on_click: (event: MouseEvent) => void } = $props();
3
3
  </script>
4
4
 
5
5
  <button
6
6
  aria-label="Open cell menu"
7
7
  class="cell-menu-button"
8
8
  aria-haspopup="menu"
9
- on:click={on_click}
10
- on:touchstart={(event) => {
9
+ onclick={on_click}
10
+ ontouchstart={(event) => {
11
11
  event.preventDefault();
12
12
  const touch = event.touches[0];
13
13
  const mouseEvent = new MouseEvent("click", {
@@ -1,20 +1,6 @@
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;
11
- };
12
- z_$$bindings?: Bindings;
13
- }
14
- declare const CellMenuButton: $$__sveltets_2_IsomorphicComponent<{
1
+ type $$ComponentProps = {
15
2
  on_click: (event: MouseEvent) => void;
16
- }, {
17
- [evt: string]: CustomEvent<any>;
18
- }, {}, {}, string>;
19
- type CellMenuButton = InstanceType<typeof CellMenuButton>;
3
+ };
4
+ declare const CellMenuButton: import("svelte").Component<$$ComponentProps, {}, "">;
5
+ type CellMenuButton = ReturnType<typeof CellMenuButton>;
20
6
  export default CellMenuButton;
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- export let icon: string;
2
+ let { icon }: { icon: string } = $props();
3
3
  </script>
4
4
 
5
5
  {#if icon == "add-column-right"}
@@ -1,20 +1,6 @@
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;
11
- };
12
- z_$$bindings?: Bindings;
13
- }
14
- declare const CellMenuIcons: $$__sveltets_2_IsomorphicComponent<{
1
+ type $$ComponentProps = {
15
2
  icon: string;
16
- }, {
17
- [evt: string]: CustomEvent<any>;
18
- }, {}, {}, string>;
19
- type CellMenuIcons = InstanceType<typeof CellMenuIcons>;
3
+ };
4
+ declare const CellMenuIcons: import("svelte").Component<$$ComponentProps, {}, "">;
5
+ type CellMenuIcons = ReturnType<typeof CellMenuIcons>;
20
6
  export default CellMenuIcons;
@@ -0,0 +1,189 @@
1
+ <script lang="ts">
2
+ import EditableCell from "./EditableCell.svelte";
3
+ import CellMenuButton from "./CellMenuButton.svelte";
4
+ import type { I18nFormatter } from "js/core/src/gradio_helper";
5
+ import type { CellValue } from "./types";
6
+ import type { Datatype } from "./utils/utils";
7
+
8
+ let {
9
+ value,
10
+ display_value = null,
11
+ datatype = "str",
12
+ row_idx,
13
+ col_idx,
14
+ col_style = "",
15
+ cell_style = "",
16
+ selection_classes = "",
17
+ is_editing = false,
18
+ is_flash = false,
19
+ is_static = false,
20
+ show_menu_button = false,
21
+ show_selection_buttons = false,
22
+ is_first_column = false,
23
+ latex_delimiters,
24
+ line_breaks = true,
25
+ editable = true,
26
+ max_chars = undefined,
27
+ i18n,
28
+ components = {},
29
+ is_dragging = false,
30
+ wrap_text = false,
31
+ onmousedown,
32
+ ondblclick,
33
+ oncontextmenu,
34
+ onblur,
35
+ on_menu_click,
36
+ on_select_column,
37
+ on_select_row
38
+ }: {
39
+ value: CellValue;
40
+ display_value?: string | null;
41
+ datatype?: Datatype;
42
+ row_idx: number;
43
+ col_idx: number;
44
+ col_style?: string;
45
+ cell_style?: string;
46
+ selection_classes?: string;
47
+ is_editing?: boolean;
48
+ is_flash?: boolean;
49
+ is_static?: boolean;
50
+ show_menu_button?: boolean;
51
+ show_selection_buttons?: boolean;
52
+ is_first_column?: boolean;
53
+ latex_delimiters: { left: string; right: string; display: boolean }[];
54
+ line_breaks?: boolean;
55
+ editable?: boolean;
56
+ max_chars?: number | undefined;
57
+ i18n: I18nFormatter;
58
+ components?: Record<string, any>;
59
+ is_dragging?: boolean;
60
+ wrap_text?: boolean;
61
+ onmousedown: (event: MouseEvent) => void;
62
+ ondblclick: (event: MouseEvent) => void;
63
+ oncontextmenu: (event: MouseEvent) => void;
64
+ onblur: (detail: {
65
+ blur_event: FocusEvent;
66
+ coords: [number, number];
67
+ }) => void;
68
+ on_menu_click: (event: MouseEvent) => void;
69
+ on_select_column: (col: number) => void;
70
+ on_select_row: (row: number) => void;
71
+ } = $props();
72
+
73
+ let is_selected = $derived(selection_classes !== "");
74
+ </script>
75
+
76
+ <div
77
+ class="body-cell {selection_classes}"
78
+ class:flash={is_flash}
79
+ class:first-column={is_first_column}
80
+ data-row={row_idx}
81
+ data-col={col_idx}
82
+ data-testid={`cell-${row_idx}-${col_idx}`}
83
+ {onmousedown}
84
+ {ondblclick}
85
+ {oncontextmenu}
86
+ style="{col_style} {cell_style}"
87
+ >
88
+ <div class="cell-wrap">
89
+ <EditableCell
90
+ {value}
91
+ {display_value}
92
+ {latex_delimiters}
93
+ {line_breaks}
94
+ {editable}
95
+ {is_static}
96
+ edit={is_editing}
97
+ {datatype}
98
+ {onblur}
99
+ {max_chars}
100
+ {i18n}
101
+ {components}
102
+ {show_selection_buttons}
103
+ coords={[row_idx, col_idx]}
104
+ {on_select_column}
105
+ {on_select_row}
106
+ {is_dragging}
107
+ {wrap_text}
108
+ />
109
+ {#if show_menu_button}
110
+ <CellMenuButton on_click={on_menu_click} />
111
+ {/if}
112
+ </div>
113
+ </div>
114
+
115
+ <style>
116
+ .body-cell {
117
+ --ring-color: transparent;
118
+ outline: none;
119
+ box-shadow:
120
+ inset 1px 0 0 var(--border-color-primary),
121
+ inset 0 0 0 1px var(--ring-color);
122
+ padding: 0;
123
+ overflow: visible;
124
+ box-sizing: border-box;
125
+ }
126
+
127
+ .body-cell.first-column {
128
+ box-shadow: inset 0 0 0 1px var(--ring-color);
129
+ }
130
+
131
+ .body-cell:hover :global(.cell-menu-button),
132
+ .body-cell.cell-selected :global(.cell-menu-button) {
133
+ display: flex;
134
+ }
135
+
136
+ .body-cell.cell-selected {
137
+ --ring-color: var(--color-accent);
138
+ --sel-top: inset 0 2px 0 0 var(--ring-color);
139
+ --sel-bottom: inset 0 -2px 0 0 var(--ring-color);
140
+ --sel-left: inset 2px 0 0 0 var(--ring-color);
141
+ --sel-right: inset -2px 0 0 0 var(--ring-color);
142
+ box-shadow:
143
+ var(--sel-top), var(--sel-bottom), var(--sel-left), var(--sel-right);
144
+ z-index: 2;
145
+ position: relative;
146
+ }
147
+
148
+ .body-cell.cell-selected.no-top {
149
+ --sel-top: inset 0 0 0 0 transparent;
150
+ }
151
+ .body-cell.cell-selected.no-bottom {
152
+ --sel-bottom: inset 0 0 0 0 transparent;
153
+ }
154
+ .body-cell.cell-selected.no-left {
155
+ --sel-left: inset 0 0 0 0 transparent;
156
+ }
157
+ .body-cell.cell-selected.no-right {
158
+ --sel-right: inset 0 0 0 0 transparent;
159
+ }
160
+
161
+ .body-cell.flash.cell-selected {
162
+ animation: flash-color 700ms ease-out;
163
+ }
164
+
165
+ @keyframes flash-color {
166
+ 0%,
167
+ 30% {
168
+ background: var(--color-accent-copied);
169
+ }
170
+ 100% {
171
+ background: transparent;
172
+ }
173
+ }
174
+
175
+ .cell-wrap {
176
+ display: flex;
177
+ align-items: center;
178
+ justify-content: flex-start;
179
+ outline: none;
180
+ min-height: var(--size-9);
181
+ position: relative;
182
+ padding: var(--size-2);
183
+ box-sizing: border-box;
184
+ gap: var(--size-1);
185
+ overflow: visible;
186
+ min-width: 0;
187
+ height: 100%;
188
+ }
189
+ </style>
@@ -0,0 +1,44 @@
1
+ import type { I18nFormatter } from "js/core/src/gradio_helper";
2
+ import type { CellValue } from "./types";
3
+ import type { Datatype } from "./utils/utils";
4
+ type $$ComponentProps = {
5
+ value: CellValue;
6
+ display_value?: string | null;
7
+ datatype?: Datatype;
8
+ row_idx: number;
9
+ col_idx: number;
10
+ col_style?: string;
11
+ cell_style?: string;
12
+ selection_classes?: string;
13
+ is_editing?: boolean;
14
+ is_flash?: boolean;
15
+ is_static?: boolean;
16
+ show_menu_button?: boolean;
17
+ show_selection_buttons?: boolean;
18
+ is_first_column?: boolean;
19
+ latex_delimiters: {
20
+ left: string;
21
+ right: string;
22
+ display: boolean;
23
+ }[];
24
+ line_breaks?: boolean;
25
+ editable?: boolean;
26
+ max_chars?: number | undefined;
27
+ i18n: I18nFormatter;
28
+ components?: Record<string, any>;
29
+ is_dragging?: boolean;
30
+ wrap_text?: boolean;
31
+ onmousedown: (event: MouseEvent) => void;
32
+ ondblclick: (event: MouseEvent) => void;
33
+ oncontextmenu: (event: MouseEvent) => void;
34
+ onblur: (detail: {
35
+ blur_event: FocusEvent;
36
+ coords: [number, number];
37
+ }) => void;
38
+ on_menu_click: (event: MouseEvent) => void;
39
+ on_select_column: (col: number) => void;
40
+ on_select_row: (row: number) => void;
41
+ };
42
+ declare const DataCell: import("svelte").Component<$$ComponentProps, {}, "">;
43
+ type DataCell = ReturnType<typeof DataCell>;
44
+ export default DataCell;