@gradio/core 0.0.2

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.
Files changed (87) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/LICENSE +201 -0
  3. package/blocks.ts +1 -0
  4. package/index.ts +4 -0
  5. package/login.ts +1 -0
  6. package/package.json +83 -0
  7. package/public/favicon.png +0 -0
  8. package/public/static/img/Bunny.obj +7474 -0
  9. package/public/static/img/Duck.glb +0 -0
  10. package/public/static/img/api-logo.svg +4 -0
  11. package/public/static/img/camera.svg +1 -0
  12. package/public/static/img/clear.svg +67 -0
  13. package/public/static/img/edit.svg +39 -0
  14. package/public/static/img/javascript.svg +16 -0
  15. package/public/static/img/logo.svg +19 -0
  16. package/public/static/img/logo_error.svg +134 -0
  17. package/public/static/img/python.svg +20 -0
  18. package/public/static/img/undo-solid.svg +1 -0
  19. package/src/Blocks.svelte +792 -0
  20. package/src/Embed.svelte +197 -0
  21. package/src/Login.stories.svelte +33 -0
  22. package/src/Login.svelte +111 -0
  23. package/src/MountComponents.svelte +30 -0
  24. package/src/Render.svelte +103 -0
  25. package/src/RenderComponent.svelte +67 -0
  26. package/src/api_docs/ApiBanner.svelte +118 -0
  27. package/src/api_docs/ApiDocs.svelte +418 -0
  28. package/src/api_docs/ApiRecorder.svelte +75 -0
  29. package/src/api_docs/CodeSnippet.svelte +198 -0
  30. package/src/api_docs/CopyButton.svelte +17 -0
  31. package/src/api_docs/EndpointDetail.svelte +37 -0
  32. package/src/api_docs/InputPayload.svelte +155 -0
  33. package/src/api_docs/InstallSnippet.svelte +59 -0
  34. package/src/api_docs/NoApi.svelte +74 -0
  35. package/src/api_docs/ParametersSnippet.svelte +106 -0
  36. package/src/api_docs/RecordingSnippet.svelte +224 -0
  37. package/src/api_docs/ResponseSnippet.svelte +97 -0
  38. package/src/api_docs/TryButton.svelte +19 -0
  39. package/src/api_docs/img/api-logo.svg +4 -0
  40. package/src/api_docs/img/bash.svg +8 -0
  41. package/src/api_docs/img/clear.svelte +19 -0
  42. package/src/api_docs/img/javascript.svg +16 -0
  43. package/src/api_docs/img/python.svg +20 -0
  44. package/src/api_docs/index.ts +2 -0
  45. package/src/api_docs/utils.ts +143 -0
  46. package/src/css.ts +116 -0
  47. package/src/gradio_helper.ts +7 -0
  48. package/src/i18n.test.ts +27 -0
  49. package/src/i18n.ts +36 -0
  50. package/src/images/lightning.svg +2 -0
  51. package/src/images/logo.svg +19 -0
  52. package/src/images/play.svg +2 -0
  53. package/src/images/spaces.svg +7 -0
  54. package/src/init.test.ts +521 -0
  55. package/src/init.ts +590 -0
  56. package/src/lang/BCP47_codes.js +58 -0
  57. package/src/lang/README.md +11 -0
  58. package/src/lang/ar.json +16 -0
  59. package/src/lang/ca.json +19 -0
  60. package/src/lang/ckb.json +108 -0
  61. package/src/lang/de.json +16 -0
  62. package/src/lang/en.json +118 -0
  63. package/src/lang/es.json +17 -0
  64. package/src/lang/eu.json +16 -0
  65. package/src/lang/fa.json +16 -0
  66. package/src/lang/fr.json +30 -0
  67. package/src/lang/he.json +16 -0
  68. package/src/lang/hi.json +16 -0
  69. package/src/lang/ja.json +16 -0
  70. package/src/lang/ko.json +16 -0
  71. package/src/lang/lt.json +16 -0
  72. package/src/lang/nl.json +16 -0
  73. package/src/lang/pl.json +16 -0
  74. package/src/lang/pt-BR.json +19 -0
  75. package/src/lang/ru.json +118 -0
  76. package/src/lang/ta.json +16 -0
  77. package/src/lang/tr.json +16 -0
  78. package/src/lang/uk.json +16 -0
  79. package/src/lang/ur.json +16 -0
  80. package/src/lang/uz.json +15 -0
  81. package/src/lang/zh-CN.json +115 -0
  82. package/src/lang/zh-TW.json +16 -0
  83. package/src/s-blocks.ts +1 -0
  84. package/src/s-login.ts +1 -0
  85. package/src/stores.ts +165 -0
  86. package/src/types.ts +106 -0
  87. package/src/vite-env-override.d.ts +20 -0
@@ -0,0 +1,15 @@
1
+ {
2
+ "common": {
3
+ "built_with_gradio": "gradio bilan qilingan",
4
+ "clear": "Tozalash",
5
+ "submit": "Yubor"
6
+ },
7
+ "upload_text": {
8
+ "click_to_upload": "Yuklash uchun Bosing",
9
+ "drop_audio": "Audioni Shu Yerga Tashlang",
10
+ "drop_csv": "CSVni Shu Yerga Tashlang",
11
+ "drop_file": "Faylni Shu Yerga Tashlang",
12
+ "drop_image": "Rasmni Shu Yerga Tashlang",
13
+ "drop_video": "Videoni Shu Yerga Tashlang"
14
+ }
15
+ }
@@ -0,0 +1,115 @@
1
+ {
2
+ "3D_model": {
3
+ "3d_model": "3D模型"
4
+ },
5
+ "annotated_image": {
6
+ "annotated_image": "标注图像"
7
+ },
8
+ "audio": {
9
+ "allow_recording_access": "请允许访问麦克风以进行录音。",
10
+ "audio": "音频",
11
+ "record_from_microphone": "从麦克风录制",
12
+ "stop_recording": "停止录制",
13
+ "no_device_support": "无法访问媒体设备。请检查您是否在安全来源(https)或本地主机上运行(或者您已经通过 ssl_verify 传递了有效的 SSL 证书),并且您已经允许浏览器访问您的设备。",
14
+ "stop": "停止",
15
+ "resume": "继续",
16
+ "record": "录制",
17
+ "no_microphone": "找不到麦克风",
18
+ "pause": "暂停",
19
+ "play": "播放"
20
+ },
21
+ "blocks": {
22
+ "connection_can_break": "在移动设备上,如果此标签页失去焦点或设备休眠,连接可能会中断,导致您在队列中失去位置。",
23
+ "long_requests_queue": "有一个长时间的待处理请求队列。复制此空间以跳过。",
24
+ "lost_connection": "由于离开页面,连接已丢失。重新加入队列..."
25
+ },
26
+ "checkbox": {
27
+ "checkbox": "复选框",
28
+ "checkbox_group": "复选框组"
29
+ },
30
+ "code": {
31
+ "code": "代码"
32
+ },
33
+ "color_picker": {
34
+ "color_picker": "颜色选择器"
35
+ },
36
+ "common": {
37
+ "built_with": "构建于",
38
+ "built_with_gradio": "使用 Gradio 构建",
39
+ "clear": "清除",
40
+ "download": "下载",
41
+ "edit": "编辑",
42
+ "empty": "空",
43
+ "error": "错误",
44
+ "hosted_on": "托管在",
45
+ "loading": "加载中",
46
+ "logo": "标志",
47
+ "or": "或",
48
+ "remove": "移除",
49
+ "share": "分享",
50
+ "submit": "提交",
51
+ "undo": "撤销"
52
+ },
53
+ "dataframe": {
54
+ "incorrect_format": "格式不正确,仅支持 CSV 和 TSV 文件",
55
+ "new_column": "新列",
56
+ "new_row": "新行"
57
+ },
58
+ "dropdown": {
59
+ "dropdown": "下拉菜单"
60
+ },
61
+ "errors": {
62
+ "build_error": "存在构建错误",
63
+ "config_error": "存在配置错误",
64
+ "contact_page_author": "请联系页面的作者并告知他们。",
65
+ "no_app_file": "不存在应用文件",
66
+ "runtime_error": "存在运行时错误",
67
+ "space_not_working": "\"空间无法工作,原因:\" {0}",
68
+ "space_paused": "空间已暂停",
69
+ "use_via_api": "通过 API 使用"
70
+ },
71
+ "file": {
72
+ "uploading": "正在上传..."
73
+ },
74
+ "highlighted_text": {
75
+ "highlighted_text": "高亮文本"
76
+ },
77
+ "image": {
78
+ "allow_webcam_access": "请允许访问网络摄像头以进行录制。",
79
+ "brush_color": "画笔颜色",
80
+ "brush_radius": "画笔半径",
81
+ "image": "图像",
82
+ "remove_image": "移除图像",
83
+ "select_brush_color": "选择画笔颜色",
84
+ "start_drawing": "开始绘画",
85
+ "use_brush": "使用画笔"
86
+ },
87
+ "label": {
88
+ "label": "标签"
89
+ },
90
+ "login": {
91
+ "enable_cookies": "如果您正在使用隐身模式访问 HuggingFace 空间,您必须启用第三方 cookie。",
92
+ "incorrect_credentials": "凭据不正确",
93
+ "login": "登录"
94
+ },
95
+ "number": {
96
+ "number": "数字"
97
+ },
98
+ "plot": {
99
+ "plot": "图表"
100
+ },
101
+ "radio": {
102
+ "radio": "单选框"
103
+ },
104
+ "slider": {
105
+ "slider": "滑块"
106
+ },
107
+ "upload_text": {
108
+ "click_to_upload": "点击上传",
109
+ "drop_audio": "将音频拖放到此处",
110
+ "drop_csv": "将 CSV 文件拖放到此处",
111
+ "drop_file": "将文件拖放到此处",
112
+ "drop_image": "将图像拖放到此处",
113
+ "drop_video": "将视频拖放到此处"
114
+ }
115
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "common": {
3
+ "built_with_gradio": "使用Gradio構建",
4
+ "clear": "清除",
5
+ "or": "或",
6
+ "submit": "提交"
7
+ },
8
+ "upload_text": {
9
+ "click_to_upload": "點擊上傳",
10
+ "drop_audio": "拖放音訊至此處",
11
+ "drop_csv": "拖放CSV至此處",
12
+ "drop_file": "拖放檔案至此處",
13
+ "drop_image": "拖放圖片至此處",
14
+ "drop_video": "拖放影片至此處"
15
+ }
16
+ }
@@ -0,0 +1 @@
1
+ export { default as default } from "./Blocks.svelte";
package/src/s-login.ts ADDED
@@ -0,0 +1 @@
1
+ export { default as default } from "./Login.svelte";
package/src/stores.ts ADDED
@@ -0,0 +1,165 @@
1
+ import { type Writable, writable, get } from "svelte/store";
2
+
3
+ export interface LoadingStatus {
4
+ eta: number | null;
5
+ status: "pending" | "error" | "complete" | "generating";
6
+ queue: boolean;
7
+ queue_position: number | null;
8
+ queue_size?: number;
9
+ fn_index: number;
10
+ message?: string | null;
11
+ scroll_to_output?: boolean;
12
+ show_progress?: "full" | "minimal" | "hidden";
13
+ progress?: {
14
+ progress: number | null;
15
+ index: number | null;
16
+ length: number | null;
17
+ unit: string | null;
18
+ desc: string | null;
19
+ }[];
20
+ }
21
+
22
+ export type LoadingStatusCollection = Record<number, LoadingStatus>;
23
+
24
+ interface LoadingStatusStore {
25
+ update: (status: LoadingStatus) => void;
26
+ subscribe: Writable<LoadingStatusCollection>["subscribe"];
27
+ register: (index: number, inputs: number[], outputs: number[]) => void;
28
+ get_status_for_fn: (i: number) => LoadingStatus["status"];
29
+ get_inputs_to_update: () => Map<number, string>;
30
+ }
31
+
32
+ export function create_loading_status_store(): LoadingStatusStore {
33
+ const store = writable<LoadingStatusCollection>({});
34
+
35
+ const fn_inputs: Record<number, number[]> = {};
36
+ const fn_outputs: Record<number, number[]> = {};
37
+ const pending_outputs = new Map<number, number>();
38
+ const pending_inputs = new Map<number, number>();
39
+
40
+ const inputs_to_update = new Map<number, string>();
41
+ const fn_status: Record<number, LoadingStatus["status"]> = {};
42
+
43
+ function update({
44
+ fn_index,
45
+ status,
46
+ queue = true,
47
+ size,
48
+ position = null,
49
+ eta = null,
50
+ message = null,
51
+ progress
52
+ }: {
53
+ fn_index: LoadingStatus["fn_index"];
54
+ status: LoadingStatus["status"];
55
+ queue?: LoadingStatus["queue"];
56
+ size?: LoadingStatus["queue_size"];
57
+ position?: LoadingStatus["queue_position"];
58
+ eta?: LoadingStatus["eta"];
59
+ message?: LoadingStatus["message"];
60
+ progress?: LoadingStatus["progress"];
61
+ }): void {
62
+ const outputs = fn_outputs[fn_index];
63
+ const inputs = fn_inputs[fn_index];
64
+ const last_status = fn_status[fn_index];
65
+
66
+ const outputs_to_update = outputs.map((id) => {
67
+ let new_status: LoadingStatus["status"];
68
+
69
+ const pending_count = pending_outputs.get(id) || 0;
70
+
71
+ // from (pending -> error) | complete - decrement pending count
72
+ if (last_status === "pending" && status !== "pending") {
73
+ let new_count = pending_count - 1;
74
+
75
+ pending_outputs.set(id, new_count < 0 ? 0 : new_count);
76
+
77
+ new_status = new_count > 0 ? "pending" : status;
78
+
79
+ // from pending -> pending - do nothing
80
+ } else if (last_status === "pending" && status === "pending") {
81
+ new_status = "pending";
82
+
83
+ // (error | complete) -> pending - - increment pending count
84
+ } else if (last_status !== "pending" && status === "pending") {
85
+ new_status = "pending";
86
+ pending_outputs.set(id, pending_count + 1);
87
+ } else {
88
+ new_status = status;
89
+ }
90
+
91
+ return {
92
+ id,
93
+ queue_position: position,
94
+ queue_size: size,
95
+ eta: eta,
96
+ status: new_status,
97
+ message: message,
98
+ progress: progress
99
+ };
100
+ });
101
+
102
+ inputs.forEach((id) => {
103
+ const pending_count = pending_inputs.get(id) || 0;
104
+
105
+ // from (pending -> error) | complete - decrement pending count
106
+ if (last_status === "pending" && status !== "pending") {
107
+ let new_count = pending_count - 1;
108
+ pending_inputs.set(id, new_count < 0 ? 0 : new_count);
109
+ inputs_to_update.set(id, status);
110
+ } else if (last_status !== "pending" && status === "pending") {
111
+ pending_inputs.set(id, pending_count + 1);
112
+ inputs_to_update.set(id, status);
113
+ } else {
114
+ inputs_to_update.delete(id);
115
+ }
116
+ });
117
+
118
+ store.update((outputs: LoadingStatusCollection) => {
119
+ outputs_to_update.forEach(
120
+ ({
121
+ id,
122
+ queue_position,
123
+ queue_size,
124
+ eta,
125
+ status,
126
+ message,
127
+ progress
128
+ }) => {
129
+ outputs[id] = {
130
+ queue: queue,
131
+ queue_size: queue_size,
132
+ queue_position: queue_position,
133
+ eta: eta,
134
+ message: message,
135
+ progress,
136
+ status,
137
+ fn_index
138
+ };
139
+ }
140
+ );
141
+
142
+ return outputs;
143
+ });
144
+ fn_status[fn_index] = status;
145
+ }
146
+
147
+ function register(index: number, inputs: number[], outputs: number[]): void {
148
+ fn_inputs[index] = inputs;
149
+ fn_outputs[index] = outputs;
150
+ }
151
+
152
+ return {
153
+ update,
154
+ register,
155
+ subscribe: store.subscribe,
156
+ get_status_for_fn(i: number) {
157
+ return fn_status[i];
158
+ },
159
+ get_inputs_to_update() {
160
+ return inputs_to_update;
161
+ }
162
+ };
163
+ }
164
+
165
+ export type LoadingStatusType = ReturnType<typeof create_loading_status_store>;
package/src/types.ts ADDED
@@ -0,0 +1,106 @@
1
+ import type { ComponentType } from "svelte";
2
+ import type { SvelteComponent } from "svelte";
3
+
4
+ /** The props that are always present on a component */
5
+ interface SharedProps {
6
+ elem_id?: string;
7
+ elem_classes?: string[];
8
+ components?: string[];
9
+ server_fns?: string[];
10
+ interactive: boolean;
11
+ [key: string]: unknown;
12
+ }
13
+
14
+ /** The metadata for a component
15
+ * The non optional fields are what are received from the backend
16
+ * The optional fields are what are added by the frontend
17
+ */
18
+ export interface ComponentMeta {
19
+ type: string;
20
+ id: number;
21
+ has_modes: boolean;
22
+ props: SharedProps;
23
+ instance: SvelteComponent;
24
+ component: ComponentType<SvelteComponent>;
25
+ documentation?: Documentation;
26
+ children?: ComponentMeta[];
27
+ parent?: ComponentMeta;
28
+ value?: any;
29
+ component_class_id: string;
30
+ key: string | number | null;
31
+ rendered_in?: number;
32
+ }
33
+
34
+ /** Dictates whether a dependency is continous and/or a generator */
35
+ export interface DependencyTypes {
36
+ generator: boolean;
37
+ cancel: boolean;
38
+ }
39
+
40
+ /** An event payload that is sent with an API request */
41
+ export interface Payload {
42
+ fn_index: number;
43
+ data: unknown[];
44
+ event_data?: unknown | null;
45
+ trigger_id?: number | null;
46
+ }
47
+
48
+ /** A dependency as received from the backend */
49
+ export interface Dependency {
50
+ id: number;
51
+ targets: [number, string][];
52
+ inputs: number[];
53
+ outputs: number[];
54
+ backend_fn: boolean;
55
+ js: string | null;
56
+ scroll_to_output: boolean;
57
+ show_progress: "full" | "minimal" | "hidden";
58
+ frontend_fn: ((...args: unknown[]) => Promise<unknown[]>) | null;
59
+ status?: string;
60
+ queue: boolean | null;
61
+ api_name: string | null;
62
+ cancels: number[];
63
+ types: DependencyTypes;
64
+ collects_event_data: boolean;
65
+ pending_request?: boolean;
66
+ trigger_after?: number;
67
+ trigger_only_on_success?: boolean;
68
+ trigger_mode: "once" | "multiple" | "always_last";
69
+ final_event: Payload | null;
70
+ show_api: boolean;
71
+ rendered_in: number | null;
72
+ }
73
+
74
+ interface TypeDescription {
75
+ input_payload?: string;
76
+ response_object?: string;
77
+ payload?: string;
78
+ }
79
+
80
+ export interface Documentation {
81
+ type?: TypeDescription;
82
+ description?: TypeDescription;
83
+ example_data?: string;
84
+ }
85
+
86
+ /** A layout node as recived from the backend */
87
+ export interface LayoutNode {
88
+ id: number;
89
+ children: LayoutNode[];
90
+ }
91
+
92
+ /** The system theme mode */
93
+ export type ThemeMode = "system" | "light" | "dark";
94
+
95
+ /** the target map is an object mapping the target id to a series of events (another object), those events are a mapping of the event name to the function id's they trigger */
96
+ export type TargetMap = Record<number, Record<string, number[]>>;
97
+
98
+ /** A component that has been loaded via dynamic import */
99
+ export type LoadedComponent = {
100
+ default: ComponentMeta["component"];
101
+ };
102
+
103
+ /**A component that is loading */
104
+ export type LoadingComponent = Promise<{
105
+ default: ComponentMeta["component"];
106
+ }>;
@@ -0,0 +1,20 @@
1
+ // See https://vitejs.dev/guide/features.html#client-types
2
+
3
+ declare module "*.whl" {
4
+ const content: string;
5
+ export default content;
6
+ }
7
+
8
+ // virtual module component type definition
9
+ declare module "virtual:component-loader" {
10
+ interface Args {
11
+ api_url: string;
12
+ name: string;
13
+ id?: string;
14
+ variant: "component" | "example" | "base";
15
+ }
16
+ export function load_component(args: Args): {
17
+ name: ComponentMeta["type"];
18
+ component: LoadedComponent;
19
+ };
20
+ }