@gradio/core 0.29.2 → 1.0.0-dev.3

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 (107) hide show
  1. package/CHANGELOG.md +103 -0
  2. package/dist/index.d.ts +1 -1
  3. package/dist/index.js +1 -1
  4. package/dist/src/Blocks.svelte +518 -999
  5. package/dist/src/Blocks.svelte.d.ts +31 -46
  6. package/dist/src/Embed.svelte +82 -55
  7. package/dist/src/Embed.svelte.d.ts +39 -30
  8. package/dist/src/Login.svelte +33 -29
  9. package/dist/src/Login.svelte.d.ts +21 -19
  10. package/dist/src/MountComponents.svelte +19 -25
  11. package/dist/src/MountComponents.svelte.d.ts +5 -28
  12. package/dist/src/{init.d.ts → _init.d.ts} +5 -4
  13. package/dist/src/{init.js → _init.js} +31 -108
  14. package/dist/src/api_docs/ApiBanner.svelte +12 -8
  15. package/dist/src/api_docs/ApiBanner.svelte.d.ts +22 -20
  16. package/dist/src/api_docs/ApiDocs.svelte +338 -246
  17. package/dist/src/api_docs/ApiDocs.svelte.d.ts +26 -24
  18. package/dist/src/api_docs/ApiRecorder.svelte +9 -3
  19. package/dist/src/api_docs/ApiRecorder.svelte.d.ts +19 -17
  20. package/dist/src/api_docs/CodeSnippet.svelte +60 -30
  21. package/dist/src/api_docs/CodeSnippet.svelte.d.ts +27 -24
  22. package/dist/src/api_docs/CopyButton.svelte +69 -13
  23. package/dist/src/api_docs/CopyButton.svelte.d.ts +18 -16
  24. package/dist/src/api_docs/CopyMarkdown.svelte +734 -0
  25. package/dist/src/api_docs/CopyMarkdown.svelte.d.ts +37 -0
  26. package/dist/src/api_docs/EndpointDetail.svelte +8 -6
  27. package/dist/src/api_docs/EndpointDetail.svelte.d.ts +20 -18
  28. package/dist/src/api_docs/IconArrowUpRight.svelte +34 -0
  29. package/dist/src/api_docs/IconArrowUpRight.svelte.d.ts +20 -0
  30. package/dist/src/api_docs/IconCaret.svelte +39 -0
  31. package/dist/src/api_docs/IconCaret.svelte.d.ts +20 -0
  32. package/dist/src/api_docs/IconHuggingChat.svelte +62 -0
  33. package/dist/src/api_docs/IconHuggingChat.svelte.d.ts +20 -0
  34. package/dist/src/api_docs/InputPayload.svelte +17 -11
  35. package/dist/src/api_docs/InputPayload.svelte.d.ts +25 -23
  36. package/dist/src/api_docs/InstallSnippet.svelte +9 -6
  37. package/dist/src/api_docs/InstallSnippet.svelte.d.ts +18 -16
  38. package/dist/src/api_docs/MCPSnippet.svelte +119 -99
  39. package/dist/src/api_docs/MCPSnippet.svelte.d.ts +59 -58
  40. package/dist/src/api_docs/NoApi.svelte +8 -5
  41. package/dist/src/api_docs/NoApi.svelte.d.ts +20 -18
  42. package/dist/src/api_docs/ParametersSnippet.svelte +8 -6
  43. package/dist/src/api_docs/ParametersSnippet.svelte.d.ts +21 -19
  44. package/dist/src/api_docs/RecordingSnippet.svelte +124 -110
  45. package/dist/src/api_docs/RecordingSnippet.svelte.d.ts +24 -22
  46. package/dist/src/api_docs/ResponseSnippet.svelte +7 -5
  47. package/dist/src/api_docs/ResponseSnippet.svelte.d.ts +21 -19
  48. package/dist/src/api_docs/Settings.svelte +73 -62
  49. package/dist/src/api_docs/Settings.svelte.d.ts +25 -23
  50. package/dist/src/api_docs/SettingsBanner.svelte +11 -8
  51. package/dist/src/api_docs/SettingsBanner.svelte.d.ts +20 -18
  52. package/dist/src/api_docs/TryButton.svelte +5 -3
  53. package/dist/src/api_docs/TryButton.svelte.d.ts +19 -17
  54. package/dist/src/api_docs/img/IconCheck.svelte +33 -0
  55. package/dist/src/api_docs/img/IconCheck.svelte.d.ts +26 -0
  56. package/dist/src/api_docs/img/IconCopy.svelte +40 -0
  57. package/dist/src/api_docs/img/IconCopy.svelte.d.ts +26 -0
  58. package/dist/src/api_docs/img/clear.svelte.d.ts +22 -21
  59. package/dist/src/dependency.d.ts +142 -0
  60. package/dist/src/dependency.js +653 -0
  61. package/dist/src/init.svelte.d.ts +78 -0
  62. package/dist/src/init.svelte.js +469 -0
  63. package/dist/src/init_utils.d.ts +32 -0
  64. package/dist/src/init_utils.js +73 -0
  65. package/dist/src/lang/en.json +10 -1
  66. package/dist/src/lang/get_lang_names.js +0 -3
  67. package/dist/src/lang/ru.json +10 -1
  68. package/dist/src/stores.d.ts +0 -21
  69. package/dist/src/stories/I18nMultiLanguageTestComponent.svelte +5 -3
  70. package/dist/src/stories/I18nMultiLanguageTestComponent.svelte.d.ts +16 -14
  71. package/dist/src/stories/I18nTestSetup.svelte +14 -10
  72. package/dist/src/stories/I18nTestSetup.svelte.d.ts +18 -16
  73. package/dist/src/types.d.ts +29 -25
  74. package/index.ts +1 -1
  75. package/package.json +59 -59
  76. package/src/Blocks.svelte +344 -1059
  77. package/src/MountComponents.svelte +17 -27
  78. package/src/{init.ts → _init.ts} +49 -126
  79. package/src/api_docs/ApiDocs.svelte +67 -62
  80. package/src/api_docs/ApiRecorder.svelte +3 -0
  81. package/src/api_docs/CodeSnippet.svelte +20 -5
  82. package/src/api_docs/CopyButton.svelte +61 -7
  83. package/src/api_docs/CopyMarkdown.svelte +734 -0
  84. package/src/api_docs/IconArrowUpRight.svelte +34 -0
  85. package/src/api_docs/IconCaret.svelte +39 -0
  86. package/src/api_docs/IconHuggingChat.svelte +62 -0
  87. package/src/api_docs/MCPSnippet.svelte +24 -46
  88. package/src/api_docs/NoApi.svelte +1 -1
  89. package/src/api_docs/ParametersSnippet.svelte +1 -1
  90. package/src/api_docs/ResponseSnippet.svelte +1 -1
  91. package/src/api_docs/Settings.svelte +11 -11
  92. package/src/api_docs/img/IconCheck.svelte +33 -0
  93. package/src/api_docs/img/IconCopy.svelte +40 -0
  94. package/src/dependency.ts +880 -0
  95. package/src/init.svelte.ts +717 -0
  96. package/src/init_utils.ts +99 -0
  97. package/src/lang/en.json +10 -1
  98. package/src/lang/get_lang_names.js +0 -3
  99. package/src/lang/ru.json +10 -1
  100. package/src/stores.ts +22 -22
  101. package/src/types.ts +54 -43
  102. package/dist/src/Render.svelte +0 -105
  103. package/dist/src/Render.svelte.d.ts +0 -31
  104. package/dist/src/RenderComponent.svelte +0 -72
  105. package/dist/src/RenderComponent.svelte.d.ts +0 -33
  106. package/src/Render.svelte +0 -126
  107. package/src/RenderComponent.svelte +0 -91
@@ -0,0 +1,34 @@
1
+ <script lang="ts">
2
+ export let classNames = "";
3
+ </script>
4
+
5
+ <svg
6
+ class={classNames || "menu-icon-arrow"}
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ width="24"
9
+ height="24"
10
+ viewBox="0 0 24 24"
11
+ fill="none"
12
+ stroke="currentColor"
13
+ stroke-width="1.75"
14
+ stroke-linecap="round"
15
+ stroke-linejoin="round"
16
+ >
17
+ <path d="M7 7h10v10"></path>
18
+ <path d="M7 17 17 7"></path>
19
+ </svg>
20
+
21
+ <style>
22
+ .menu-icon-arrow {
23
+ width: 1rem;
24
+ height: 1rem;
25
+ color: rgb(107, 114, 128);
26
+ flex-shrink: 0;
27
+ }
28
+
29
+ @media (prefers-color-scheme: dark) {
30
+ .menu-icon-arrow {
31
+ color: rgb(209, 213, 219);
32
+ }
33
+ }
34
+ </style>
@@ -0,0 +1,39 @@
1
+ <script lang="ts">
2
+ export let classNames = "";
3
+ </script>
4
+
5
+ <svg
6
+ class={classNames}
7
+ width="1em"
8
+ height="1em"
9
+ viewBox="0 0 12 7"
10
+ fill="none"
11
+ xmlns="http://www.w3.org/2000/svg"
12
+ >
13
+ <path d="M1 1L6 6L11 1" stroke="currentColor" />
14
+ </svg>
15
+
16
+ <style>
17
+ .caret-icon {
18
+ transition: transform 0.2s ease-in-out;
19
+ color: rgb(156, 163, 175);
20
+ overflow: visible;
21
+ width: 0.75rem;
22
+ height: 0.75rem;
23
+ }
24
+
25
+ @media (max-width: 640px) {
26
+ .caret-icon {
27
+ width: 0.625rem;
28
+ height: 0.625rem;
29
+ }
30
+ }
31
+
32
+ .rotate-180 {
33
+ transform: rotate(180deg);
34
+ }
35
+
36
+ .rotate-0 {
37
+ transform: rotate(0deg);
38
+ }
39
+ </style>
@@ -0,0 +1,62 @@
1
+ <script lang="ts">
2
+ export let classNames = "";
3
+ </script>
4
+
5
+ <svg
6
+ class={classNames || "icon-size"}
7
+ width="1em"
8
+ height="1em"
9
+ viewBox="5 5 22 22"
10
+ fill="none"
11
+ xmlns="http://www.w3.org/2000/svg"
12
+ >
13
+ <title>HuggingChat</title>
14
+ <path
15
+ d="M16.0006 25.9992C13.8266 25.999 11.7118 25.2901 9.97686 23.9799C8.2419 22.6698 6.98127 20.8298 6.38599 18.7388C5.79071 16.6478 5.89323 14.4198 6.678 12.3923C7.46278 10.3648 8.88705 8.64837 10.735 7.50308C12.5829 6.35779 14.7538 5.84606 16.9187 6.04544C19.0837 6.24481 21.1246 7.14442 22.7323 8.60795C24.34 10.0715 25.4268 12.0192 25.8281 14.1559C26.2293 16.2926 25.9232 18.5019 24.9561 20.449C24.7703 20.8042 24.7223 21.2155 24.8211 21.604L25.4211 23.8316C25.4803 24.0518 25.4805 24.2837 25.4216 24.5039C25.3627 24.7242 25.2468 24.925 25.0856 25.0862C24.9244 25.2474 24.7235 25.3633 24.5033 25.4222C24.283 25.4811 24.0512 25.4809 23.831 25.4217L21.6034 24.8217C21.2172 24.7248 20.809 24.7729 20.4558 24.9567C19.0683 25.6467 17.5457 26.0068 16.0006 26.0068V25.9992Z"
16
+ fill="black"
17
+ class="block dark:hidden"
18
+ />
19
+ <path
20
+ d="M9.62598 16.0013C9.62598 15.3799 10.1294 14.8765 10.7508 14.8765C11.3721 14.8765 11.8756 15.3799 11.8756 16.0013C11.8756 17.0953 12.3102 18.1448 13.0838 18.9184C13.8574 19.692 14.9069 20.1266 16.001 20.1267C17.095 20.1267 18.1445 19.692 18.9181 18.9184C19.6918 18.1448 20.1264 17.0953 20.1264 16.0013C20.1264 15.3799 20.6299 14.8765 21.2512 14.8765C21.8725 14.8765 22.3759 15.3799 22.3759 16.0013C22.3759 17.6921 21.7046 19.3137 20.509 20.5093C19.3134 21.7049 17.6918 22.3762 16.001 22.3762C14.3102 22.3762 12.6885 21.7049 11.4929 20.5093C10.2974 19.3137 9.62598 17.6921 9.62598 16.0013Z"
21
+ fill="white"
22
+ class="block dark:hidden"
23
+ />
24
+ <path
25
+ d="M16.0006 25.9992C13.8266 25.999 11.7118 25.2901 9.97686 23.9799C8.2419 22.6698 6.98127 20.8298 6.38599 18.7388C5.79071 16.6478 5.89323 14.4198 6.678 12.3923C7.46278 10.3648 8.88705 8.64837 10.735 7.50308C12.5829 6.35779 14.7538 5.84606 16.9187 6.04544C19.0837 6.24481 21.1246 7.14442 22.7323 8.60795C24.34 10.0715 25.4268 12.0192 25.8281 14.1559C26.2293 16.2926 25.9232 18.5019 24.9561 20.449C24.7703 20.8042 24.7223 21.2155 24.8211 21.604L25.4211 23.8316C25.4803 24.0518 25.4805 24.2837 25.4216 24.5039C25.3627 24.7242 25.2468 24.925 25.0856 25.0862C24.9244 25.2474 24.7235 25.3633 24.5033 25.4222C24.283 25.4811 24.0512 25.4809 23.831 25.4217L21.6034 24.8217C21.2172 24.7248 20.809 24.7729 20.4558 24.9567C19.0683 25.6467 17.5457 26.0068 16.0006 26.0068V25.9992Z"
26
+ fill="white"
27
+ class="hidden dark:block"
28
+ />
29
+ <path
30
+ d="M9.62598 16.0013C9.62598 15.3799 10.1294 14.8765 10.7508 14.8765C11.3721 14.8765 11.8756 15.3799 11.8756 16.0013C11.8756 17.0953 12.3102 18.1448 13.0838 18.9184C13.8574 19.692 14.9069 20.1266 16.001 20.1267C17.095 20.1267 18.1445 19.692 18.9181 18.9184C19.6918 18.1448 20.1264 17.0953 20.1264 16.0013C20.1264 15.3799 20.6299 14.8765 21.2512 14.8765C21.8725 14.8765 22.3759 15.3799 22.3759 16.0013C22.3759 17.6921 21.7046 19.3137 20.509 20.5093C19.3134 21.7049 17.6918 22.3762 16.001 22.3762C14.3102 22.3762 12.6885 21.7049 11.4929 20.5093C10.2974 19.3137 9.62598 17.6921 9.62598 16.0013Z"
31
+ fill="black"
32
+ class="hidden dark:block"
33
+ />
34
+ </svg>
35
+
36
+ <style>
37
+ .icon-size {
38
+ width: 0.75rem;
39
+ height: 0.75rem;
40
+ }
41
+
42
+ @media (max-width: 640px) {
43
+ .icon-size {
44
+ width: 0.625rem;
45
+ height: 0.625rem;
46
+ }
47
+ }
48
+
49
+ .menu-icon {
50
+ width: 1rem;
51
+ height: 1rem;
52
+ flex-shrink: 0;
53
+ }
54
+
55
+ .hidden {
56
+ display: none;
57
+ }
58
+
59
+ .block {
60
+ display: block;
61
+ }
62
+ </style>
@@ -5,16 +5,15 @@
5
5
  import { format_latency, get_color_from_success_rate } from "./utils";
6
6
 
7
7
  export let mcp_server_active: boolean;
8
- export let mcp_server_url: string;
9
8
  export let mcp_server_url_streamable: string;
10
9
  export let tools: Tool[];
11
10
  export let all_tools: Tool[] = [];
12
11
  export let selected_tools: Set<string> = new Set();
13
- export let mcp_json_sse: any;
14
12
  export let mcp_json_stdio: any;
15
13
  export let file_data_present: boolean;
16
14
  export let mcp_docs: string;
17
15
  export let analytics: Record<string, any>;
16
+ export let config_snippets: Record<string, string>;
18
17
 
19
18
  interface ToolParameter {
20
19
  title?: string;
@@ -36,13 +35,12 @@
36
35
  };
37
36
  }
38
37
 
39
- type Transport = "streamable_http" | "sse" | "stdio";
38
+ type Transport = "streamable_http" | "stdio";
40
39
  let current_transport: Transport = "streamable_http";
41
40
  let include_file_upload = true;
42
41
 
43
42
  const transports = [
44
43
  ["streamable_http", "Streamable HTTP"],
45
- ["sse", "SSE"],
46
44
  ["stdio", "STDIO"]
47
45
  ] as const;
48
46
 
@@ -52,8 +50,7 @@
52
50
  prompt: Prompt
53
51
  };
54
52
 
55
- $: display_url =
56
- current_transport === "sse" ? mcp_server_url : mcp_server_url_streamable;
53
+ $: display_url = mcp_server_url_streamable;
57
54
 
58
55
  // Helper function to add/remove file upload tool from config
59
56
  function update_config_with_file_upload(
@@ -72,9 +69,7 @@
72
69
  "gradio[mcp]",
73
70
  "gradio",
74
71
  "upload-mcp",
75
- current_transport === "sse"
76
- ? mcp_server_url
77
- : mcp_server_url_streamable,
72
+ mcp_server_url_streamable,
78
73
  "<UPLOAD_DIRECTORY>"
79
74
  ]
80
75
  };
@@ -87,13 +82,10 @@
87
82
  }
88
83
 
89
84
  $: mcp_json_streamable_http = update_config_with_file_upload(
90
- mcp_json_sse
85
+ mcp_json_stdio
91
86
  ? {
92
- ...mcp_json_sse,
93
87
  mcpServers: {
94
- ...mcp_json_sse.mcpServers,
95
88
  gradio: {
96
- ...mcp_json_sse.mcpServers.gradio,
97
89
  url: mcp_server_url_streamable
98
90
  }
99
91
  }
@@ -102,14 +94,15 @@
102
94
  include_file_upload
103
95
  );
104
96
 
105
- $: mcp_json_sse_updated = update_config_with_file_upload(
106
- mcp_json_sse,
107
- include_file_upload
108
- );
109
97
  $: mcp_json_stdio_updated = update_config_with_file_upload(
110
98
  mcp_json_stdio,
111
99
  include_file_upload
112
100
  );
101
+
102
+ $: config_snippets = {
103
+ streamable_http: JSON.stringify(mcp_json_streamable_http, null, 2),
104
+ stdio: JSON.stringify(mcp_json_stdio_updated, null, 2)
105
+ };
113
106
  </script>
114
107
 
115
108
  {#if mcp_server_active}
@@ -134,10 +127,8 @@
134
127
  <Block>
135
128
  <div class="mcp-url">
136
129
  <label for="mcp-server-url"
137
- ><span class="status-indicator active">●</span>MCP Server URL ({current_transport ===
138
- "sse"
139
- ? "SSE"
140
- : "Streamable HTTP"})</label
130
+ ><span class="status-indicator active">●</span>MCP Server URL
131
+ (Streamable HTTP)</label
141
132
  >
142
133
  <div class="textbox">
143
134
  <input id="mcp-server-url" type="text" readonly value={display_url} />
@@ -290,7 +281,7 @@
290
281
  </div>
291
282
  <p>&nbsp;</p>
292
283
 
293
- {#if current_transport === "streamable_http"}
284
+ <div class:hidden={current_transport !== "streamable_http"}>
294
285
  <strong>Streamable HTTP Transport</strong>: To add this MCP to clients that
295
286
  support Streamable HTTP, simply add the following configuration to your MCP
296
287
  config.
@@ -298,32 +289,15 @@
298
289
  <Block>
299
290
  <code>
300
291
  <div class="copy">
301
- <CopyButton
302
- code={JSON.stringify(mcp_json_streamable_http, null, 2)}
303
- />
304
- </div>
305
- <div>
306
- <pre>{JSON.stringify(mcp_json_streamable_http, null, 2)}</pre>
307
- </div>
308
- </code>
309
- </Block>
310
- {:else if current_transport === "sse"}
311
- <strong>SSE Transport</strong>: The SSE transport has been deprecated by the
312
- MCP spec. We recommend using the Streamable HTTP transport instead. But to
313
- add this MCP to clients that only support server-sent events (SSE), simply
314
- add the following configuration to your MCP config.
315
- <p>&nbsp;</p>
316
- <Block>
317
- <code>
318
- <div class="copy">
319
- <CopyButton code={JSON.stringify(mcp_json_sse_updated, null, 2)} />
292
+ <CopyButton code={config_snippets.streamable_http} />
320
293
  </div>
321
294
  <div>
322
- <pre>{JSON.stringify(mcp_json_sse_updated, null, 2)}</pre>
295
+ <pre>{config_snippets.streamable_http}</pre>
323
296
  </div>
324
297
  </code>
325
298
  </Block>
326
- {:else if current_transport === "stdio"}
299
+ </div>
300
+ <div class:hidden={current_transport !== "stdio"}>
327
301
  <strong>STDIO Transport</strong>: For clients that only support stdio (e.g.
328
302
  Claude Desktop), first
329
303
  <a href="https://nodejs.org/en/download/" target="_blank">install Node.js</a
@@ -332,14 +306,14 @@
332
306
  <Block>
333
307
  <code>
334
308
  <div class="copy">
335
- <CopyButton code={JSON.stringify(mcp_json_stdio_updated, null, 2)} />
309
+ <CopyButton code={config_snippets.stdio} />
336
310
  </div>
337
311
  <div>
338
- <pre>{JSON.stringify(mcp_json_stdio_updated, null, 2)}</pre>
312
+ <pre>{config_snippets.stdio}</pre>
339
313
  </div>
340
314
  </code>
341
315
  </Block>
342
- {/if}
316
+ </div>
343
317
  {#if file_data_present}
344
318
  <div class="file-upload-section">
345
319
  <label class="checkbox-label">
@@ -665,4 +639,8 @@
665
639
  a {
666
640
  text-decoration: underline;
667
641
  }
642
+
643
+ .hidden {
644
+ display: none;
645
+ }
668
646
  </style>
@@ -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.
@@ -5,7 +5,7 @@
5
5
  export let is_running: boolean;
6
6
  export let endpoint_returns: any;
7
7
  export let js_returns: any;
8
- export let current_language: "python" | "javascript" | "bash";
8
+ export let current_language: "python" | "javascript" | "bash" | "mcp";
9
9
  </script>
10
10
 
11
11
  <h4>
@@ -4,7 +4,7 @@
4
4
  export let is_running: boolean;
5
5
  export let endpoint_returns: any;
6
6
  export let js_returns: any;
7
- export let current_language: "python" | "javascript" | "bash";
7
+ export let current_language: "python" | "javascript" | "bash" | "mcp";
8
8
  </script>
9
9
 
10
10
  <h4>
@@ -2,17 +2,21 @@
2
2
  /* eslint-disable */
3
3
  import { onMount } from "svelte";
4
4
  import SettingsBanner from "./SettingsBanner.svelte";
5
- export let root: string;
6
- export let space_id: string | null;
7
- export let pwa_enabled: boolean | undefined;
8
5
  import { BaseDropdown as Dropdown } from "@gradio/dropdown";
9
6
  import { BaseCheckbox as Checkbox } from "@gradio/checkbox";
10
7
  import { language_choices, changeLocale } from "../i18n";
11
8
  import { locale, _ } from "svelte-i18n";
12
- import { setupi18n } from "../i18n";
13
9
  import record from "./img/record.svg";
14
10
  import { createEventDispatcher } from "svelte";
15
11
 
12
+ let {
13
+ root,
14
+ space_id,
15
+ pwa_enabled,
16
+ allow_zoom = $bindable(),
17
+ allow_video_trim = $bindable()
18
+ } = $props();
19
+
16
20
  const dispatch = createEventDispatcher();
17
21
  if (root === "") {
18
22
  root = location.protocol + "//" + location.host + location.pathname;
@@ -34,7 +38,7 @@
34
38
  }
35
39
 
36
40
  onMount(() => {
37
- document.body.style.overflow = "hidden";
41
+ // document.body.style.overflow = "hidden";
38
42
  if ("parentIFrame" in window) {
39
43
  window.parentIFrame?.scrollTo(0, 0);
40
44
  }
@@ -46,10 +50,8 @@
46
50
  };
47
51
  });
48
52
 
49
- let current_locale: string;
50
- let current_theme: "light" | "dark" | "system" = "system";
51
- export let allow_zoom = true;
52
- export let allow_video_trim = true;
53
+ let current_locale: string = $state("en");
54
+ let current_theme: "light" | "dark" | "system" = $state("system");
53
55
 
54
56
  locale.subscribe((value) => {
55
57
  if (value) {
@@ -69,8 +71,6 @@
69
71
  function handleVideoTrimChange(e: CustomEvent): void {
70
72
  allow_video_trim = e.detail;
71
73
  }
72
-
73
- setupi18n();
74
74
  </script>
75
75
 
76
76
  <div class="banner-wrap">
@@ -0,0 +1,33 @@
1
+ <script>
2
+ export let classNames = "";
3
+ </script>
4
+
5
+ <svg
6
+ class={classNames || "icon-size"}
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ aria-hidden="true"
9
+ height="16"
10
+ viewBox="0 0 16 16"
11
+ version="1.1"
12
+ width="16"
13
+ data-view-component="true"
14
+ ><path
15
+ fill-rule="evenodd"
16
+ fill="rgb(255, 124, 1)"
17
+ d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"
18
+ ></path></svg
19
+ >
20
+
21
+ <style>
22
+ .icon-size {
23
+ width: 0.75rem;
24
+ height: 0.75rem;
25
+ }
26
+
27
+ @media (max-width: 640px) {
28
+ .icon-size {
29
+ width: 0.625rem;
30
+ height: 0.625rem;
31
+ }
32
+ }
33
+ </style>
@@ -0,0 +1,40 @@
1
+ <script>
2
+ export let classNames = "";
3
+ </script>
4
+
5
+ <svg
6
+ class={classNames}
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ aria-hidden="true"
9
+ fill="currentColor"
10
+ focusable="false"
11
+ role="img"
12
+ width="1em"
13
+ height="1em"
14
+ preserveAspectRatio="xMidYMid meet"
15
+ viewBox="0 0 32 32"
16
+ >
17
+ <path
18
+ d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z"
19
+ transform="translate(0)"
20
+ />
21
+ <path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)" /><rect
22
+ fill="none"
23
+ width="32"
24
+ height="32"
25
+ />
26
+ </svg>
27
+
28
+ <style>
29
+ .icon-size {
30
+ width: 0.75rem;
31
+ height: 0.75rem;
32
+ }
33
+
34
+ @media (max-width: 640px) {
35
+ .icon-size {
36
+ width: 0.625rem;
37
+ height: 0.625rem;
38
+ }
39
+ }
40
+ </style>