@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 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>
@@ -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;
@@ -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 tabs = [];
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(false);
25
- const selected_tab_index = writable(0);
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 = tabs.some(
112
- (t) => t.id === $selected_tab && overflow_nav.contains(document.querySelector(`[data-tab-id="${t.id}"]`))
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 | object;
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.0-beta.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-beta.2"
20
+ "@gradio/utils": "^0.7.0"
21
21
  },
22
22
  "devDependencies": {
23
- "@gradio/preview": "^0.11.2-beta.0"
23
+ "@gradio/preview": "^0.12.0"
24
24
  },
25
25
  "peerDependencies": {
26
26
  "svelte": "^4.0.0"
@@ -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: object;
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 | object;
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 | object | number | string>(false);
39
- const selected_tab_index = writable<number>(0);
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: object | string | number): void {
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
- overflow_has_selected_tab = tabs.some(
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 === $selected_tab &&
169
+ t.id === selected_tab &&
156
170
  overflow_nav.contains(document.querySelector(`[data-tab-id="${t.id}"]`))
157
171
  );
158
172
  }