@gradio/tabitem 0.6.6 → 0.7.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.
- package/CHANGELOG.md +36 -0
- package/TabItem.test.ts +75 -0
- package/TabItemHarness.svelte +34 -0
- package/dist/TabItemHarness.svelte +34 -0
- package/dist/TabItemHarness.svelte.d.ts +3 -0
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,41 @@
|
|
|
1
1
|
# @gradio/tabitem
|
|
2
2
|
|
|
3
|
+
## 0.7.0
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- [#13467](https://github.com/gradio-app/gradio/pull/13467) [`feba2e1`](https://github.com/gradio-app/gradio/commit/feba2e1e41c68f4bbdacf4c963d8d9689d4b3346) - `Tab`, `TabItem`, `Plot` Unit tests. Thanks @dawoodkhan82!
|
|
8
|
+
|
|
9
|
+
### Dependency updates
|
|
10
|
+
|
|
11
|
+
- @gradio/tabs@0.6.0
|
|
12
|
+
|
|
13
|
+
## 0.6.6
|
|
14
|
+
|
|
15
|
+
### Dependency updates
|
|
16
|
+
|
|
17
|
+
- @gradio/tabs@0.5.10
|
|
18
|
+
|
|
19
|
+
## 0.6.6
|
|
20
|
+
|
|
21
|
+
### Dependency updates
|
|
22
|
+
|
|
23
|
+
- @gradio/column@0.3.3
|
|
24
|
+
|
|
25
|
+
## 0.6.6
|
|
26
|
+
|
|
27
|
+
### Dependency updates
|
|
28
|
+
|
|
29
|
+
- @gradio/utils@0.12.2
|
|
30
|
+
- @gradio/tabs@0.5.9
|
|
31
|
+
|
|
32
|
+
## 0.6.6
|
|
33
|
+
|
|
34
|
+
### Dependency updates
|
|
35
|
+
|
|
36
|
+
- @gradio/utils@0.12.1
|
|
37
|
+
- @gradio/column@0.3.2
|
|
38
|
+
|
|
3
39
|
## 0.6.6
|
|
4
40
|
|
|
5
41
|
### Dependency updates
|
package/TabItem.test.ts
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { test, describe, afterEach, expect, vi } from "vitest";
|
|
2
|
+
import { cleanup, render, waitFor } from "@self/tootils/render";
|
|
3
|
+
|
|
4
|
+
import TabItemHarness from "./TabItemHarness.svelte";
|
|
5
|
+
|
|
6
|
+
describe("TabItem", () => {
|
|
7
|
+
afterEach(() => cleanup());
|
|
8
|
+
|
|
9
|
+
test("renders its slot content inside a tabpanel", async () => {
|
|
10
|
+
const { getByRole, getByTestId } = await render(TabItemHarness, {
|
|
11
|
+
tab_selected: "t1"
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
expect(getByRole("tabpanel", { hidden: true })).toBeInTheDocument();
|
|
15
|
+
expect(getByTestId("tab-content")).toHaveTextContent("tab panel content");
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
test("content is visible when this tab is the selected tab", async () => {
|
|
19
|
+
const { getByTestId } = await render(TabItemHarness, {
|
|
20
|
+
tab_selected: "t1"
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
expect(getByTestId("tab-content")).toBeVisible();
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
test("content is hidden when a different tab is selected", async () => {
|
|
27
|
+
const { getByTestId } = await render(TabItemHarness, {
|
|
28
|
+
tab_selected: "t2"
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
expect(getByTestId("tab-content")).not.toBeVisible();
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
test("content stays hidden when visible is false even if selected", async () => {
|
|
35
|
+
const { getByTestId } = await render(TabItemHarness, {
|
|
36
|
+
tab_selected: "t1",
|
|
37
|
+
tab_visible: false
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
expect(getByTestId("tab-content")).not.toBeVisible();
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
describe("Events: select", () => {
|
|
45
|
+
afterEach(() => cleanup());
|
|
46
|
+
|
|
47
|
+
test("fires when this tab is the active index on mount", async () => {
|
|
48
|
+
const on_tab_select = vi.fn();
|
|
49
|
+
|
|
50
|
+
await render(TabItemHarness, {
|
|
51
|
+
tab_selected: "t1",
|
|
52
|
+
tab_selected_index: 0,
|
|
53
|
+
on_tab_select
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
await waitFor(() => {
|
|
57
|
+
expect(on_tab_select).toHaveBeenCalledWith({
|
|
58
|
+
value: "First Tab",
|
|
59
|
+
index: 0
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
test("does not fire when this tab is not the active index", async () => {
|
|
65
|
+
const on_tab_select = vi.fn();
|
|
66
|
+
|
|
67
|
+
await render(TabItemHarness, {
|
|
68
|
+
tab_selected: "t2",
|
|
69
|
+
tab_selected_index: 1,
|
|
70
|
+
on_tab_select
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
expect(on_tab_select).not.toHaveBeenCalled();
|
|
74
|
+
});
|
|
75
|
+
});
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { setContext } from "svelte";
|
|
3
|
+
import { writable } from "svelte/store";
|
|
4
|
+
import { TABS } from "@gradio/tabs";
|
|
5
|
+
import { BaseTabItem } from "./Index.svelte";
|
|
6
|
+
|
|
7
|
+
let all = $props();
|
|
8
|
+
const cfg = (all as any).props ?? {};
|
|
9
|
+
|
|
10
|
+
const selected_tab = writable<string | number | false>(
|
|
11
|
+
cfg.tab_selected ?? "t1"
|
|
12
|
+
);
|
|
13
|
+
const selected_tab_index = writable<number>(cfg.tab_selected_index ?? 0);
|
|
14
|
+
|
|
15
|
+
setContext(TABS, {
|
|
16
|
+
register_tab: (_tab: any, order: number) => order,
|
|
17
|
+
unregister_tab: () => {},
|
|
18
|
+
selected_tab,
|
|
19
|
+
selected_tab_index
|
|
20
|
+
});
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<BaseTabItem
|
|
24
|
+
label="First Tab"
|
|
25
|
+
id="t1"
|
|
26
|
+
order={0}
|
|
27
|
+
visible={cfg.tab_visible ?? true}
|
|
28
|
+
interactive={true}
|
|
29
|
+
scale={0}
|
|
30
|
+
component_id={1}
|
|
31
|
+
on:select={(e) => cfg.on_tab_select?.(e.detail)}
|
|
32
|
+
>
|
|
33
|
+
<div data-testid="tab-content">tab panel content</div>
|
|
34
|
+
</BaseTabItem>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { setContext } from "svelte";
|
|
3
|
+
import { writable } from "svelte/store";
|
|
4
|
+
import { TABS } from "@gradio/tabs";
|
|
5
|
+
import { BaseTabItem } from "./Index.svelte";
|
|
6
|
+
|
|
7
|
+
let all = $props();
|
|
8
|
+
const cfg = (all as any).props ?? {};
|
|
9
|
+
|
|
10
|
+
const selected_tab = writable<string | number | false>(
|
|
11
|
+
cfg.tab_selected ?? "t1"
|
|
12
|
+
);
|
|
13
|
+
const selected_tab_index = writable<number>(cfg.tab_selected_index ?? 0);
|
|
14
|
+
|
|
15
|
+
setContext(TABS, {
|
|
16
|
+
register_tab: (_tab: any, order: number) => order,
|
|
17
|
+
unregister_tab: () => {},
|
|
18
|
+
selected_tab,
|
|
19
|
+
selected_tab_index
|
|
20
|
+
});
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<BaseTabItem
|
|
24
|
+
label="First Tab"
|
|
25
|
+
id="t1"
|
|
26
|
+
order={0}
|
|
27
|
+
visible={cfg.tab_visible ?? true}
|
|
28
|
+
interactive={true}
|
|
29
|
+
scale={0}
|
|
30
|
+
component_id={1}
|
|
31
|
+
on:select={(e) => cfg.on_tab_select?.(e.detail)}
|
|
32
|
+
>
|
|
33
|
+
<div data-testid="tab-content">tab panel content</div>
|
|
34
|
+
</BaseTabItem>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gradio/tabitem",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "Gradio UI packages",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "",
|
|
@@ -16,12 +16,12 @@
|
|
|
16
16
|
"./package.json": "./package.json"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@gradio/
|
|
20
|
-
"@gradio/
|
|
21
|
-
"@gradio/utils": "^0.12.
|
|
19
|
+
"@gradio/tabs": "^0.6.0",
|
|
20
|
+
"@gradio/column": "^0.3.3",
|
|
21
|
+
"@gradio/utils": "^0.12.2"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@gradio/preview": "^0.16.
|
|
24
|
+
"@gradio/preview": "^0.16.2"
|
|
25
25
|
},
|
|
26
26
|
"peerDependencies": {
|
|
27
27
|
"svelte": "^5.48.0"
|