@gradio/core 0.29.1 → 1.0.0-dev.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,35 @@
1
1
  # @gradio/core
2
2
 
3
+ ## 1.0.0-dev.0
4
+
5
+ ### Features
6
+
7
+ - [#12069](https://github.com/gradio-app/gradio/pull/12069) [`9de88ca`](https://github.com/gradio-app/gradio/commit/9de88ca470ce529366d259f0deaa955f658000b9) - Rename show_api. Thanks @freddyaboulton!
8
+
9
+ ### Dependency updates
10
+
11
+ - @gradio/client@2.0.0-dev.1
12
+ - @gradio/gallery@0.15.35-dev.1
13
+
14
+ ## 0.29.2
15
+
16
+ ### Dependency updates
17
+
18
+ - @gradio/upload@0.17.2-dev.0
19
+ - @gradio/code@0.15.1-dev.0
20
+ - @gradio/client@2.0.0-dev.0
21
+ - @gradio/gallery@0.15.35-dev.0
22
+ - @gradio/image@0.23.2-dev.0
23
+ - @gradio/button@0.5.14-dev.0
24
+ - @gradio/file@0.13.1-dev.0
25
+ - @gradio/video@0.17.0-dev.0
26
+
27
+ ## 0.29.2
28
+
29
+ ### Fixes
30
+
31
+ - [#11994](https://github.com/gradio-app/gradio/pull/11994) [`d6f591e`](https://github.com/gradio-app/gradio/commit/d6f591e823dad8e7387de4124fa1e3ab16203a73) - Add render_children parameter to Tab component. Thanks @freddyaboulton!
32
+
3
33
  ## 0.29.1
4
34
 
5
35
  ### Fixes
@@ -19,8 +19,7 @@ export let dependencies;
19
19
  export let title = "Gradio";
20
20
  export let target;
21
21
  export let autoscroll;
22
- export let show_api = true;
23
- export let show_footer = true;
22
+ export let footer_links = ["gradio", "settings", "api"];
24
23
  export let control_page_title = false;
25
24
  export let app_mode;
26
25
  export let theme_mode;
@@ -79,9 +78,9 @@ async function run() {
79
78
  layout_creating = false;
80
79
  }
81
80
  export let search_params;
82
- let api_docs_visible = search_params.get("view") === "api" && show_api;
81
+ let api_docs_visible = search_params.get("view") === "api" && footer_links.includes("api");
83
82
  let settings_visible = search_params.get("view") === "settings";
84
- let api_recorder_visible = search_params.get("view") === "api-recorder" && show_api;
83
+ let api_recorder_visible = search_params.get("view") === "api-recorder" && footer_links.includes("api");
85
84
  let allow_zoom = true;
86
85
  let allow_video_trim = true;
87
86
  let ApiDocs = null;
@@ -395,7 +394,7 @@ async function trigger_api_call(dep_index, trigger_id = null, event_data = null)
395
394
  } else if (submit_map.has(dep_index) && dep.inputs.some((id) => get_stream_state(id) === "waiting")) {
396
395
  return;
397
396
  } else if (submit_map.has(dep_index) && dep.inputs.some((id) => get_stream_state(id) === "open")) {
398
- await app.send_ws_message(
397
+ await app.post_data(
399
398
  // @ts-ignore
400
399
  `${app.config.root + app.config.api_prefix}/stream/${submit_map.get(dep_index).event_id()}`,
401
400
  { ...payload2, session_hash: app.session_hash }
@@ -718,7 +717,6 @@ async function handle_mount() {
718
717
  if (submit_map.has(dep_id)) {
719
718
  const url = `${app.config.root + app.config.api_prefix}/stream/${submit_map.get(dep_id).event_id()}`;
720
719
  app.post_data(`${url}/close`, {});
721
- app.close_ws(url);
722
720
  }
723
721
  });
724
722
  } else {
@@ -897,9 +895,9 @@ onMount(() => {
897
895
  {/if}
898
896
  </div>
899
897
 
900
- {#if show_footer}
898
+ {#if footer_links.length > 0}
901
899
  <footer bind:clientHeight={footer_height}>
902
- {#if show_api}
900
+ {#if footer_links.includes("api")}
903
901
  <button
904
902
  on:click={() => {
905
903
  set_api_docs_visible(!api_docs_visible);
@@ -917,18 +915,19 @@ onMount(() => {
917
915
  {/if}
918
916
  <img src={api_logo} alt={$_("common.logo")} />
919
917
  </button>
918
+ {/if}
919
+ {#if footer_links.includes("gradio")}
920
920
  <div class="divider show-api-divider">·</div>
921
+ <a
922
+ href="https://gradio.app"
923
+ class="built-with"
924
+ target="_blank"
925
+ rel="noreferrer"
926
+ >
927
+ {$_("common.built_with_gradio")}
928
+ <img src={logo} alt={$_("common.logo")} />
929
+ </a>
921
930
  {/if}
922
- <a
923
- href="https://gradio.app"
924
- class="built-with"
925
- target="_blank"
926
- rel="noreferrer"
927
- >
928
- {$_("common.built_with_gradio")}
929
- <img src={logo} alt={$_("common.logo")} />
930
- </a>
931
- <div class="divider" class:hidden={!$is_screen_recording}>·</div>
932
931
  <button
933
932
  class:hidden={!$is_screen_recording}
934
933
  on:click={() => {
@@ -940,18 +939,21 @@ onMount(() => {
940
939
  <img src={record_stop} alt={$_("common.stop_recording")} />
941
940
  </button>
942
941
  <div class="divider">·</div>
943
- <button
944
- on:click={() => {
945
- set_settings_visible(!settings_visible);
946
- }}
947
- on:mouseenter={() => {
948
- loadSettings();
949
- }}
950
- class="settings"
951
- >
952
- {$_("common.settings")}
953
- <img src={settings_logo} alt={$_("common.settings")} />
954
- </button>
942
+ {#if footer_links.includes("settings")}
943
+ <div class="divider" class:hidden={!$is_screen_recording}>·</div>
944
+ <button
945
+ on:click={() => {
946
+ set_settings_visible(!settings_visible);
947
+ }}
948
+ on:mouseenter={() => {
949
+ loadSettings();
950
+ }}
951
+ class="settings"
952
+ >
953
+ {$_("common.settings")}
954
+ <img src={settings_logo} alt={$_("common.settings")} />
955
+ </button>
956
+ {/if}
955
957
  </footer>
956
958
  {/if}
957
959
  </div>
@@ -12,8 +12,7 @@ declare const __propDef: {
12
12
  title?: string;
13
13
  target: HTMLElement;
14
14
  autoscroll: boolean;
15
- show_api?: boolean;
16
- show_footer?: boolean;
15
+ footer_links?: string[];
17
16
  control_page_title?: boolean;
18
17
  app_mode: boolean;
19
18
  theme_mode: ThemeMode;
@@ -26,7 +26,7 @@ const bash_docs = "https://www.gradio.app/guides/querying-gradio-apps-with-curl"
26
26
  const spaces_docs_suffix = "#connecting-to-a-hugging-face-space";
27
27
  const mcp_docs = "https://www.gradio.app/guides/building-mcp-server-with-gradio";
28
28
  let api_count = dependencies.filter(
29
- (dependency) => dependency.show_api
29
+ (dependency) => dependency.api_visibility === "public"
30
30
  ).length;
31
31
  if (root === "") {
32
32
  root = location.protocol + "//" + location.host + location.pathname;
@@ -379,7 +379,7 @@ onMount(() => {
379
379
 
380
380
  {#if current_language !== "mcp"}
381
381
  {#each dependencies as dependency}
382
- {#if dependency.show_api && info.named_endpoints["/" + dependency.api_name]}
382
+ {#if dependency.api_visibility === "public" && info.named_endpoints["/" + dependency.api_name]}
383
383
  <div class="endpoint-container">
384
384
  <CodeSnippet
385
385
  endpoint_parameters={info.named_endpoints[
@@ -23,7 +23,7 @@ export let root;
23
23
  API Page guide
24
24
  </a>
25
25
  . To hide the API documentation button and this page, set
26
- <code>show_api=False</code>
26
+ <code>footer_links=["gradio", "settings"]</code>
27
27
  in the
28
28
  <code>Blocks.launch()</code>
29
29
  method.
package/dist/src/init.js CHANGED
@@ -622,8 +622,11 @@ function get_selected_tab_id(component, layout, components) {
622
622
  function process_children_visibility(layout, components, parent_tabs_context) {
623
623
  const visible_components = new Set();
624
624
  if (layout.children) {
625
+ const layout_component = components.find((c) => c.id === layout.id);
625
626
  for (const child of layout.children) {
626
- const child_visible = determine_visible_components(child, components, true, parent_tabs_context);
627
+ const child_visible = determine_visible_components(child, components, layout_component?.type === "tabitem"
628
+ ? layout_component.props.children_visible !== false
629
+ : true, parent_tabs_context);
627
630
  child_visible.forEach((id) => visible_components.add(id));
628
631
  }
629
632
  }
@@ -658,7 +661,9 @@ function determine_visible_components(layout, components, parent_visible = true,
658
661
  child_visible.forEach((id) => visible_components.add(id));
659
662
  }
660
663
  else if (component.type === "tabitem") {
661
- if (is_tab_item_visible(component, component_visible, parent_tabs_context)) {
664
+ const tab_item_visible = is_tab_item_visible(component, component_visible, parent_tabs_context);
665
+ if (tab_item_visible ||
666
+ (!tab_item_visible && component.props.render_children)) {
662
667
  visible_components.add(layout.id);
663
668
  const child_visible = process_children_visibility(layout, components, parent_tabs_context);
664
669
  child_visible.forEach((id) => visible_components.add(id));
@@ -66,7 +66,7 @@ export interface Dependency {
66
66
  trigger_only_on_failure?: boolean;
67
67
  trigger_mode: "once" | "multiple" | "always_last";
68
68
  final_event: Payload | null;
69
- show_api: boolean;
69
+ api_visibility: "public" | "private" | "undocumented";
70
70
  rendered_in: number | null;
71
71
  render_id: number | null;
72
72
  connection: "stream" | "sse";
package/package.json CHANGED
@@ -1,68 +1,68 @@
1
1
  {
2
2
  "name": "@gradio/core",
3
- "version": "0.29.1",
3
+ "version": "1.0.0-dev.0",
4
4
  "type": "module",
5
5
  "devDependencies": {
6
6
  "@gradio/accordion": "^0.5.24",
7
- "@gradio/annotatedimage": "^0.10.0",
8
7
  "@gradio/atoms": "^0.18.1",
9
- "@gradio/audio": "^0.19.2",
10
- "@gradio/browserstate": "^0.3.2",
11
8
  "@gradio/box": "^0.2.25",
12
- "@gradio/button": "^0.5.13",
13
- "@gradio/chatbot": "^0.27.0",
9
+ "@gradio/annotatedimage": "^0.10.1-dev.0",
10
+ "@gradio/audio": "^0.19.4-dev.0",
11
+ "@gradio/browserstate": "^0.3.2",
12
+ "@gradio/chatbot": "^0.28.0-dev.1",
13
+ "@gradio/button": "^0.5.14-dev.0",
14
14
  "@gradio/checkboxgroup": "^0.7.0",
15
15
  "@gradio/checkbox": "^0.4.31",
16
- "@gradio/client": "^1.19.1",
17
- "@gradio/code": "^0.15.0",
18
- "@gradio/column": "^0.2.2",
16
+ "@gradio/client": "^2.0.0-dev.1",
19
17
  "@gradio/colorpicker": "^0.4.29",
20
- "@gradio/dataframe": "^0.20.1",
21
- "@gradio/dataset": "^0.4.34",
18
+ "@gradio/column": "^0.2.2",
19
+ "@gradio/dataframe": "^0.20.2-dev.0",
20
+ "@gradio/code": "^0.15.1-dev.0",
21
+ "@gradio/dataset": "^0.4.35-dev.0",
22
22
  "@gradio/datetime": "^0.3.22",
23
- "@gradio/downloadbutton": "^0.4.12",
23
+ "@gradio/dropdown": "^0.10.5",
24
+ "@gradio/downloadbutton": "^0.4.13-dev.0",
25
+ "@gradio/file": "^0.13.1-dev.0",
24
26
  "@gradio/fallback": "^0.4.29",
25
- "@gradio/file": "^0.13.0",
26
- "@gradio/dropdown": "^0.10.4",
27
- "@gradio/fileexplorer": "^0.5.41",
27
+ "@gradio/fileexplorer": "^0.5.42-dev.0",
28
28
  "@gradio/form": "^0.2.25",
29
- "@gradio/gallery": "^0.15.34",
29
+ "@gradio/gallery": "^0.15.35-dev.1",
30
30
  "@gradio/group": "^0.2.1",
31
- "@gradio/icons": "^0.14.0",
32
31
  "@gradio/highlightedtext": "^0.9.13",
32
+ "@gradio/icons": "^0.14.0",
33
+ "@gradio/image": "^0.23.2-dev.0",
34
+ "@gradio/imageslider": "^0.3.1-dev.0",
33
35
  "@gradio/html": "^0.7.2",
34
- "@gradio/image": "^0.23.1",
35
- "@gradio/imageeditor": "^0.17.1",
36
- "@gradio/imageslider": "^0.3.0",
37
36
  "@gradio/json": "^0.5.31",
38
- "@gradio/markdown": "^0.13.22",
39
- "@gradio/multimodaltextbox": "^0.10.20",
40
- "@gradio/model3d": "^0.15.0",
41
37
  "@gradio/label": "^0.5.21",
42
- "@gradio/nativeplot": "^0.8.0",
38
+ "@gradio/imageeditor": "^0.18.2-dev.0",
39
+ "@gradio/markdown": "^0.13.22",
40
+ "@gradio/model3d": "^0.15.1-dev.0",
41
+ "@gradio/nativeplot": "^0.9.0-dev.0",
42
+ "@gradio/multimodaltextbox": "^0.10.22-dev.0",
43
43
  "@gradio/paramviewer": "^0.8.1",
44
- "@gradio/number": "^0.7.1",
45
44
  "@gradio/plot": "^0.9.24",
46
45
  "@gradio/radio": "^0.7.12",
47
- "@gradio/sidebar": "^0.1.23",
48
46
  "@gradio/row": "^0.2.2",
49
- "@gradio/simpleimage": "^0.9.0",
50
- "@gradio/simpletextbox": "^0.3.30",
51
- "@gradio/sketchbox": "^0.6.17",
47
+ "@gradio/number": "^0.7.1",
48
+ "@gradio/sidebar": "^0.1.23",
52
49
  "@gradio/simpledropdown": "^0.3.29",
50
+ "@gradio/simpletextbox": "^0.3.30",
51
+ "@gradio/simpleimage": "^0.9.1-dev.0",
53
52
  "@gradio/slider": "^0.6.18",
54
53
  "@gradio/state": "^0.1.2",
54
+ "@gradio/statustracker": "^0.11.1",
55
+ "@gradio/sketchbox": "^0.6.17",
55
56
  "@gradio/tabitem": "^0.6.1",
56
57
  "@gradio/textbox": "^0.11.1",
57
58
  "@gradio/tabs": "^0.5.1",
58
- "@gradio/statustracker": "^0.11.1",
59
- "@gradio/timer": "^0.4.5",
60
- "@gradio/upload": "^0.17.1",
61
59
  "@gradio/theme": "^0.4.0",
62
- "@gradio/uploadbutton": "^0.9.12",
63
- "@gradio/vibeeditor": "^0.3.0",
60
+ "@gradio/timer": "^0.4.5",
61
+ "@gradio/uploadbutton": "^0.9.13-dev.0",
64
62
  "@gradio/utils": "^0.10.2",
65
- "@gradio/video": "^0.16.0"
63
+ "@gradio/vibeeditor": "^0.3.1-dev.0",
64
+ "@gradio/upload": "^0.17.2-dev.0",
65
+ "@gradio/video": "^0.17.0-dev.0"
66
66
  },
67
67
  "msw": {
68
68
  "workerDirectory": "public"
package/src/Blocks.svelte CHANGED
@@ -40,8 +40,7 @@
40
40
  export let title = "Gradio";
41
41
  export let target: HTMLElement;
42
42
  export let autoscroll: boolean;
43
- export let show_api = true;
44
- export let show_footer = true;
43
+ export let footer_links = ["gradio", "settings", "api"];
45
44
  export let control_page_title = false;
46
45
  export let app_mode: boolean;
47
46
  export let theme_mode: ThemeMode;
@@ -113,10 +112,12 @@
113
112
  }
114
113
 
115
114
  export let search_params: URLSearchParams;
116
- let api_docs_visible = search_params.get("view") === "api" && show_api;
115
+ let api_docs_visible =
116
+ search_params.get("view") === "api" && footer_links.includes("api");
117
117
  let settings_visible = search_params.get("view") === "settings";
118
118
  let api_recorder_visible =
119
- search_params.get("view") === "api-recorder" && show_api;
119
+ search_params.get("view") === "api-recorder" &&
120
+ footer_links.includes("api");
120
121
  let allow_zoom = true;
121
122
  let allow_video_trim = true;
122
123
 
@@ -518,7 +519,7 @@
518
519
  submit_map.has(dep_index) &&
519
520
  dep.inputs.some((id) => get_stream_state(id) === "open")
520
521
  ) {
521
- await app.send_ws_message(
522
+ await app.post_data(
522
523
  // @ts-ignore
523
524
  `${app.config.root + app.config.api_prefix}/stream/${submit_map.get(dep_index).event_id()}`,
524
525
  { ...payload, session_hash: app.session_hash }
@@ -914,7 +915,6 @@
914
915
  // @ts-ignore
915
916
  const url = `${app.config.root + app.config.api_prefix}/stream/${submit_map.get(dep_id).event_id()}`;
916
917
  app.post_data(`${url}/close`, {});
917
- app.close_ws(url);
918
918
  }
919
919
  });
920
920
  } else {
@@ -1131,9 +1131,9 @@
1131
1131
  {/if}
1132
1132
  </div>
1133
1133
 
1134
- {#if show_footer}
1134
+ {#if footer_links.length > 0}
1135
1135
  <footer bind:clientHeight={footer_height}>
1136
- {#if show_api}
1136
+ {#if footer_links.includes("api")}
1137
1137
  <button
1138
1138
  on:click={() => {
1139
1139
  set_api_docs_visible(!api_docs_visible);
@@ -1151,18 +1151,19 @@
1151
1151
  {/if}
1152
1152
  <img src={api_logo} alt={$_("common.logo")} />
1153
1153
  </button>
1154
+ {/if}
1155
+ {#if footer_links.includes("gradio")}
1154
1156
  <div class="divider show-api-divider">·</div>
1157
+ <a
1158
+ href="https://gradio.app"
1159
+ class="built-with"
1160
+ target="_blank"
1161
+ rel="noreferrer"
1162
+ >
1163
+ {$_("common.built_with_gradio")}
1164
+ <img src={logo} alt={$_("common.logo")} />
1165
+ </a>
1155
1166
  {/if}
1156
- <a
1157
- href="https://gradio.app"
1158
- class="built-with"
1159
- target="_blank"
1160
- rel="noreferrer"
1161
- >
1162
- {$_("common.built_with_gradio")}
1163
- <img src={logo} alt={$_("common.logo")} />
1164
- </a>
1165
- <div class="divider" class:hidden={!$is_screen_recording}>·</div>
1166
1167
  <button
1167
1168
  class:hidden={!$is_screen_recording}
1168
1169
  on:click={() => {
@@ -1174,18 +1175,21 @@
1174
1175
  <img src={record_stop} alt={$_("common.stop_recording")} />
1175
1176
  </button>
1176
1177
  <div class="divider">·</div>
1177
- <button
1178
- on:click={() => {
1179
- set_settings_visible(!settings_visible);
1180
- }}
1181
- on:mouseenter={() => {
1182
- loadSettings();
1183
- }}
1184
- class="settings"
1185
- >
1186
- {$_("common.settings")}
1187
- <img src={settings_logo} alt={$_("common.settings")} />
1188
- </button>
1178
+ {#if footer_links.includes("settings")}
1179
+ <div class="divider" class:hidden={!$is_screen_recording}>·</div>
1180
+ <button
1181
+ on:click={() => {
1182
+ set_settings_visible(!settings_visible);
1183
+ }}
1184
+ on:mouseenter={() => {
1185
+ loadSettings();
1186
+ }}
1187
+ class="settings"
1188
+ >
1189
+ {$_("common.settings")}
1190
+ <img src={settings_logo} alt={$_("common.settings")} />
1191
+ </button>
1192
+ {/if}
1189
1193
  </footer>
1190
1194
  {/if}
1191
1195
  </div>
@@ -40,7 +40,7 @@
40
40
  "https://www.gradio.app/guides/building-mcp-server-with-gradio";
41
41
 
42
42
  let api_count = dependencies.filter(
43
- (dependency) => dependency.show_api
43
+ (dependency) => dependency.api_visibility === "public"
44
44
  ).length;
45
45
 
46
46
  if (root === "") {
@@ -466,7 +466,7 @@
466
466
 
467
467
  {#if current_language !== "mcp"}
468
468
  {#each dependencies as dependency}
469
- {#if dependency.show_api && info.named_endpoints["/" + dependency.api_name]}
469
+ {#if dependency.api_visibility === "public" && info.named_endpoints["/" + dependency.api_name]}
470
470
  <div class="endpoint-container">
471
471
  <CodeSnippet
472
472
  endpoint_parameters={info.named_endpoints[
@@ -26,7 +26,7 @@
26
26
  API Page guide
27
27
  </a>
28
28
  . To hide the API documentation button and this page, set
29
- <code>show_api=False</code>
29
+ <code>footer_links=["gradio", "settings"]</code>
30
30
  in the
31
31
  <code>Blocks.launch()</code>
32
32
  method.
package/src/init.ts CHANGED
@@ -938,11 +938,14 @@ function process_children_visibility(
938
938
  const visible_components: Set<number> = new Set();
939
939
 
940
940
  if (layout.children) {
941
+ const layout_component = components.find((c) => c.id === layout.id);
941
942
  for (const child of layout.children) {
942
943
  const child_visible = determine_visible_components(
943
944
  child,
944
945
  components,
945
- true,
946
+ layout_component?.type === "tabitem"
947
+ ? layout_component.props.children_visible !== false
948
+ : true,
946
949
  parent_tabs_context
947
950
  );
948
951
  child_visible.forEach((id) => visible_components.add(id));
@@ -998,8 +1001,14 @@ function determine_visible_components(
998
1001
  );
999
1002
  child_visible.forEach((id) => visible_components.add(id));
1000
1003
  } else if (component.type === "tabitem") {
1004
+ const tab_item_visible = is_tab_item_visible(
1005
+ component,
1006
+ component_visible,
1007
+ parent_tabs_context
1008
+ );
1001
1009
  if (
1002
- is_tab_item_visible(component, component_visible, parent_tabs_context)
1010
+ tab_item_visible ||
1011
+ (!tab_item_visible && component.props.render_children)
1003
1012
  ) {
1004
1013
  visible_components.add(layout.id);
1005
1014
 
package/src/types.ts CHANGED
@@ -71,7 +71,7 @@ export interface Dependency {
71
71
  trigger_only_on_failure?: boolean;
72
72
  trigger_mode: "once" | "multiple" | "always_last";
73
73
  final_event: Payload | null;
74
- show_api: boolean;
74
+ api_visibility: "public" | "private" | "undocumented";
75
75
  rendered_in: number | null;
76
76
  render_id: number | null;
77
77
  connection: "stream" | "sse";