@gradio/tabs 0.3.0-beta.3 → 0.3.1
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 +19 -0
- package/Index.svelte +10 -0
- package/dist/Index.svelte +2 -0
- package/dist/Index.svelte.d.ts +7 -0
- package/dist/shared/Tabs.svelte +20 -9
- package/dist/shared/Tabs.svelte.d.ts +8 -1
- package/package.json +3 -3
- package/shared/Tabs.svelte +26 -12
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# @gradio/tabs
|
|
2
2
|
|
|
3
|
+
## 0.3.1
|
|
4
|
+
|
|
5
|
+
### Fixes
|
|
6
|
+
|
|
7
|
+
- [#9728](https://github.com/gradio-app/gradio/pull/9728) [`d0b2ce8`](https://github.com/gradio-app/gradio/commit/d0b2ce8c0f150f0b636ad7d2226f7c8c61401996) - Ensure tabs render in SSR mode and reduce time it takes for them to render. Thanks @pngwn!
|
|
8
|
+
|
|
9
|
+
## 0.3.0
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
- [#8843](https://github.com/gradio-app/gradio/pull/8843) [`6f95286`](https://github.com/gradio-app/gradio/commit/6f95286337459efbccb95c9cfac63355669df9ee) - Playground requirements tab
|
|
14
|
+
- [#8843](https://github.com/gradio-app/gradio/pull/8843) [`6f95286`](https://github.com/gradio-app/gradio/commit/6f95286337459efbccb95c9cfac63355669df9ee) - Redesign `gr.Tabs()`
|
|
15
|
+
- [#8843](https://github.com/gradio-app/gradio/pull/8843) [`6f95286`](https://github.com/gradio-app/gradio/commit/6f95286337459efbccb95c9cfac63355669df9ee) - UI theme fixes
|
|
16
|
+
- [#8843](https://github.com/gradio-app/gradio/pull/8843) [`6f95286`](https://github.com/gradio-app/gradio/commit/6f95286337459efbccb95c9cfac63355669df9ee) - Ssr part 2
|
|
17
|
+
|
|
18
|
+
### Dependencies
|
|
19
|
+
|
|
20
|
+
- @gradio/utils@0.7.0
|
|
21
|
+
|
|
3
22
|
## 0.3.0-beta.3
|
|
4
23
|
|
|
5
24
|
### Features
|
package/Index.svelte
CHANGED
|
@@ -9,10 +9,19 @@
|
|
|
9
9
|
|
|
10
10
|
const dispatch = createEventDispatcher();
|
|
11
11
|
|
|
12
|
+
interface Tab {
|
|
13
|
+
name: string;
|
|
14
|
+
id: string | number;
|
|
15
|
+
elem_id: string | undefined;
|
|
16
|
+
visible: boolean;
|
|
17
|
+
interactive: boolean;
|
|
18
|
+
}
|
|
19
|
+
|
|
12
20
|
export let visible = true;
|
|
13
21
|
export let elem_id = "";
|
|
14
22
|
export let elem_classes: string[] = [];
|
|
15
23
|
export let selected: number | string;
|
|
24
|
+
export let inital_tabs: Tab[];
|
|
16
25
|
export let gradio: Gradio<{
|
|
17
26
|
change: never;
|
|
18
27
|
select: SelectData;
|
|
@@ -28,6 +37,7 @@
|
|
|
28
37
|
bind:selected
|
|
29
38
|
on:change={() => gradio.dispatch("change")}
|
|
30
39
|
on:select={(e) => gradio.dispatch("select", e.detail)}
|
|
40
|
+
{inital_tabs}
|
|
31
41
|
>
|
|
32
42
|
<slot />
|
|
33
43
|
</Tabs>
|
package/dist/Index.svelte
CHANGED
|
@@ -8,6 +8,7 @@ export let visible = true;
|
|
|
8
8
|
export let elem_id = "";
|
|
9
9
|
export let elem_classes = [];
|
|
10
10
|
export let selected;
|
|
11
|
+
export let inital_tabs;
|
|
11
12
|
export let gradio;
|
|
12
13
|
$:
|
|
13
14
|
dispatch("prop_change", { selected });
|
|
@@ -20,6 +21,7 @@ $:
|
|
|
20
21
|
bind:selected
|
|
21
22
|
on:change={() => gradio.dispatch("change")}
|
|
22
23
|
on:select={(e) => gradio.dispatch("select", e.detail)}
|
|
24
|
+
{inital_tabs}
|
|
23
25
|
>
|
|
24
26
|
<slot />
|
|
25
27
|
</Tabs>
|
package/dist/Index.svelte.d.ts
CHANGED
|
@@ -7,6 +7,13 @@ declare const __propDef: {
|
|
|
7
7
|
elem_id?: string | undefined;
|
|
8
8
|
elem_classes?: string[] | undefined;
|
|
9
9
|
selected: number | string;
|
|
10
|
+
inital_tabs: {
|
|
11
|
+
name: string;
|
|
12
|
+
id: string | number;
|
|
13
|
+
elem_id: string | undefined;
|
|
14
|
+
visible: boolean;
|
|
15
|
+
interactive: boolean;
|
|
16
|
+
}[];
|
|
10
17
|
gradio: Gradio<{
|
|
11
18
|
change: never;
|
|
12
19
|
select: SelectData;
|
package/dist/shared/Tabs.svelte
CHANGED
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
setContext,
|
|
7
7
|
createEventDispatcher,
|
|
8
8
|
onMount,
|
|
9
|
-
onDestroy
|
|
9
|
+
onDestroy,
|
|
10
|
+
tick
|
|
10
11
|
} from "svelte";
|
|
11
12
|
import OverflowIcon from "./OverflowIcon.svelte";
|
|
12
13
|
import { writable } from "svelte/store";
|
|
@@ -14,15 +15,20 @@ export let visible = true;
|
|
|
14
15
|
export let elem_id = "";
|
|
15
16
|
export let elem_classes = [];
|
|
16
17
|
export let selected;
|
|
17
|
-
let
|
|
18
|
+
export let inital_tabs;
|
|
19
|
+
let tabs = inital_tabs;
|
|
18
20
|
let overflow_menu_open = false;
|
|
19
21
|
let overflow_menu;
|
|
20
22
|
$:
|
|
21
23
|
has_tabs = tabs.length > 0;
|
|
22
24
|
let tab_nav_el;
|
|
23
25
|
let overflow_nav;
|
|
24
|
-
const selected_tab = writable(
|
|
25
|
-
|
|
26
|
+
const selected_tab = writable(
|
|
27
|
+
selected || tabs[0]?.id || false
|
|
28
|
+
);
|
|
29
|
+
const selected_tab_index = writable(
|
|
30
|
+
tabs.findIndex((t) => t.id === selected) || 0
|
|
31
|
+
);
|
|
26
32
|
const dispatch = createEventDispatcher();
|
|
27
33
|
let is_overflowing = false;
|
|
28
34
|
let overflow_has_selected_tab = false;
|
|
@@ -54,14 +60,12 @@ setContext(TABS, {
|
|
|
54
60
|
});
|
|
55
61
|
function change_tab(id) {
|
|
56
62
|
const tab_to_activate = tabs.find((t) => t.id === id);
|
|
57
|
-
if (tab_to_activate && tab_to_activate.interactive && tab_to_activate.visible) {
|
|
63
|
+
if (tab_to_activate && tab_to_activate.interactive && tab_to_activate.visible && $selected_tab !== tab_to_activate.id) {
|
|
58
64
|
selected = id;
|
|
59
65
|
$selected_tab = id;
|
|
60
66
|
$selected_tab_index = tabs.findIndex((t) => t.id === id);
|
|
61
67
|
dispatch("change");
|
|
62
68
|
overflow_menu_open = false;
|
|
63
|
-
} else {
|
|
64
|
-
console.warn("Attempted to select a non-interactive or hidden tab.");
|
|
65
69
|
}
|
|
66
70
|
}
|
|
67
71
|
$:
|
|
@@ -108,8 +112,15 @@ function handle_menu_overflow() {
|
|
|
108
112
|
});
|
|
109
113
|
nav_items.forEach((item) => tab_nav_el.appendChild(item));
|
|
110
114
|
overflow_items.forEach((item) => overflow_nav.appendChild(item));
|
|
111
|
-
overflow_has_selected_tab =
|
|
112
|
-
|
|
115
|
+
overflow_has_selected_tab = handle_overflow_has_selected_tab($selected_tab);
|
|
116
|
+
}
|
|
117
|
+
$:
|
|
118
|
+
overflow_has_selected_tab = handle_overflow_has_selected_tab($selected_tab);
|
|
119
|
+
function handle_overflow_has_selected_tab(selected_tab2) {
|
|
120
|
+
if (selected_tab2 === false || !overflow_nav)
|
|
121
|
+
return false;
|
|
122
|
+
return tabs.some(
|
|
123
|
+
(t) => t.id === selected_tab2 && overflow_nav.contains(document.querySelector(`[data-tab-id="${t.id}"]`))
|
|
113
124
|
);
|
|
114
125
|
}
|
|
115
126
|
</script>
|
|
@@ -6,7 +6,14 @@ declare const __propDef: {
|
|
|
6
6
|
visible?: boolean | undefined;
|
|
7
7
|
elem_id?: string | undefined;
|
|
8
8
|
elem_classes?: string[] | undefined;
|
|
9
|
-
selected: number | string
|
|
9
|
+
selected: number | string;
|
|
10
|
+
inital_tabs: {
|
|
11
|
+
name: string;
|
|
12
|
+
id: string | number;
|
|
13
|
+
elem_id: string | undefined;
|
|
14
|
+
visible: boolean;
|
|
15
|
+
interactive: boolean;
|
|
16
|
+
}[];
|
|
10
17
|
};
|
|
11
18
|
events: {
|
|
12
19
|
change: CustomEvent<undefined>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gradio/tabs",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Gradio UI packages",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "",
|
|
@@ -17,10 +17,10 @@
|
|
|
17
17
|
"./package.json": "./package.json"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@gradio/utils": "^0.7.0
|
|
20
|
+
"@gradio/utils": "^0.7.0"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
|
-
"@gradio/preview": "^0.
|
|
23
|
+
"@gradio/preview": "^0.12.0"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|
|
26
26
|
"svelte": "^4.0.0"
|
package/shared/Tabs.svelte
CHANGED
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
setContext,
|
|
8
8
|
createEventDispatcher,
|
|
9
9
|
onMount,
|
|
10
|
-
onDestroy
|
|
10
|
+
onDestroy,
|
|
11
|
+
tick
|
|
11
12
|
} from "svelte";
|
|
12
13
|
import OverflowIcon from "./OverflowIcon.svelte";
|
|
13
14
|
import { writable } from "svelte/store";
|
|
@@ -15,7 +16,7 @@
|
|
|
15
16
|
|
|
16
17
|
interface Tab {
|
|
17
18
|
name: string;
|
|
18
|
-
id:
|
|
19
|
+
id: string | number;
|
|
19
20
|
elem_id: string | undefined;
|
|
20
21
|
visible: boolean;
|
|
21
22
|
interactive: boolean;
|
|
@@ -24,9 +25,10 @@
|
|
|
24
25
|
export let visible = true;
|
|
25
26
|
export let elem_id = "";
|
|
26
27
|
export let elem_classes: string[] = [];
|
|
27
|
-
export let selected: number | string
|
|
28
|
+
export let selected: number | string;
|
|
29
|
+
export let inital_tabs: Tab[];
|
|
28
30
|
|
|
29
|
-
let tabs: Tab[] =
|
|
31
|
+
let tabs: Tab[] = inital_tabs;
|
|
30
32
|
let overflow_menu_open = false;
|
|
31
33
|
let overflow_menu: HTMLElement;
|
|
32
34
|
|
|
@@ -35,8 +37,12 @@
|
|
|
35
37
|
let tab_nav_el: HTMLElement;
|
|
36
38
|
let overflow_nav: HTMLElement;
|
|
37
39
|
|
|
38
|
-
const selected_tab = writable<false |
|
|
39
|
-
|
|
40
|
+
const selected_tab = writable<false | number | string>(
|
|
41
|
+
selected || tabs[0]?.id || false
|
|
42
|
+
);
|
|
43
|
+
const selected_tab_index = writable<number>(
|
|
44
|
+
tabs.findIndex((t) => t.id === selected) || 0
|
|
45
|
+
);
|
|
40
46
|
const dispatch = createEventDispatcher<{
|
|
41
47
|
change: undefined;
|
|
42
48
|
select: SelectData;
|
|
@@ -72,20 +78,19 @@
|
|
|
72
78
|
selected_tab_index
|
|
73
79
|
});
|
|
74
80
|
|
|
75
|
-
function change_tab(id:
|
|
81
|
+
function change_tab(id: string | number): void {
|
|
76
82
|
const tab_to_activate = tabs.find((t) => t.id === id);
|
|
77
83
|
if (
|
|
78
84
|
tab_to_activate &&
|
|
79
85
|
tab_to_activate.interactive &&
|
|
80
|
-
tab_to_activate.visible
|
|
86
|
+
tab_to_activate.visible &&
|
|
87
|
+
$selected_tab !== tab_to_activate.id
|
|
81
88
|
) {
|
|
82
89
|
selected = id;
|
|
83
90
|
$selected_tab = id;
|
|
84
91
|
$selected_tab_index = tabs.findIndex((t) => t.id === id);
|
|
85
92
|
dispatch("change");
|
|
86
93
|
overflow_menu_open = false;
|
|
87
|
-
} else {
|
|
88
|
-
console.warn("Attempted to select a non-interactive or hidden tab.");
|
|
89
94
|
}
|
|
90
95
|
}
|
|
91
96
|
|
|
@@ -149,10 +154,19 @@
|
|
|
149
154
|
|
|
150
155
|
nav_items.forEach((item) => tab_nav_el.appendChild(item));
|
|
151
156
|
overflow_items.forEach((item) => overflow_nav.appendChild(item));
|
|
157
|
+
overflow_has_selected_tab = handle_overflow_has_selected_tab($selected_tab);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
$: overflow_has_selected_tab =
|
|
161
|
+
handle_overflow_has_selected_tab($selected_tab);
|
|
152
162
|
|
|
153
|
-
|
|
163
|
+
function handle_overflow_has_selected_tab(
|
|
164
|
+
selected_tab: number | string | false
|
|
165
|
+
): boolean {
|
|
166
|
+
if (selected_tab === false || !overflow_nav) return false;
|
|
167
|
+
return tabs.some(
|
|
154
168
|
(t) =>
|
|
155
|
-
t.id ===
|
|
169
|
+
t.id === selected_tab &&
|
|
156
170
|
overflow_nav.contains(document.querySelector(`[data-tab-id="${t.id}"]`))
|
|
157
171
|
);
|
|
158
172
|
}
|