@gradio/tabitem 0.6.5 → 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 CHANGED
@@ -1,5 +1,62 @@
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
+
39
+ ## 0.6.6
40
+
41
+ ### Dependency updates
42
+
43
+ - @gradio/tabs@0.5.8
44
+ - @gradio/utils@0.12.0
45
+ - @gradio/column@0.3.2
46
+
47
+ ## 0.6.5
48
+
49
+ ### Dependency updates
50
+
51
+ - @gradio/tabs@0.5.7
52
+
53
+ ## 0.6.5
54
+
55
+ ### Dependency updates
56
+
57
+ - @gradio/utils@0.11.3
58
+ - @gradio/tabs@0.5.6
59
+
3
60
  ## 0.6.5
4
61
 
5
62
  ### Fixes
@@ -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>
@@ -0,0 +1,3 @@
1
+ declare const TabItemHarness: import("svelte").Component<$$ComponentProps, {}, "">;
2
+ type TabItemHarness = ReturnType<typeof TabItemHarness>;
3
+ export default TabItemHarness;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gradio/tabitem",
3
- "version": "0.6.5",
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/column": "^0.3.2",
20
- "@gradio/tabs": "^0.5.5",
21
- "@gradio/utils": "^0.11.2"
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.15.2"
24
+ "@gradio/preview": "^0.16.2"
25
25
  },
26
26
  "peerDependencies": {
27
27
  "svelte": "^5.48.0"