@gradio/core 1.1.0 → 1.1.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.
- package/CHANGELOG.md +55 -0
- package/dist/src/Blocks.svelte +21 -8
- package/dist/src/Embed.svelte +20 -6
- package/dist/src/Login.svelte +3 -3
- package/dist/src/api_docs/ApiBanner.svelte +1 -1
- package/dist/src/api_docs/InputPayload.svelte +1 -1
- package/dist/src/api_docs/TryButton.svelte +1 -1
- package/dist/src/init.svelte.js +3 -1
- package/package.json +61 -61
- package/src/Blocks.svelte +21 -8
- package/src/Embed.svelte +20 -6
- package/src/Login.svelte +3 -3
- package/src/api_docs/ApiBanner.svelte +1 -1
- package/src/api_docs/InputPayload.svelte +1 -1
- package/src/api_docs/TryButton.svelte +1 -1
- package/src/init.svelte.ts +5 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,60 @@
|
|
|
1
1
|
# @gradio/core
|
|
2
2
|
|
|
3
|
+
## 1.1.2
|
|
4
|
+
|
|
5
|
+
### Fixes
|
|
6
|
+
|
|
7
|
+
- [#12800](https://github.com/gradio-app/gradio/pull/12800) [`7a1c321`](https://github.com/gradio-app/gradio/commit/7a1c321b6546ba05a353488f5133e8262c4a8a39) - Bump svelte/kit for security reasons. Thanks @freddyaboulton!
|
|
8
|
+
- [#12757](https://github.com/gradio-app/gradio/pull/12757) [`6d9c2d7`](https://github.com/gradio-app/gradio/commit/6d9c2d7d81e4b0936c15fac2eae9e7640ab22777) - Migrate Textbox to Svelte 5. Thanks @dawoodkhan82!
|
|
9
|
+
- [#12607](https://github.com/gradio-app/gradio/pull/12607) [`299728b`](https://github.com/gradio-app/gradio/commit/299728b707c88e7afbc6a60f1f266a9013fa424d) - fix: add ARIA landmarks for accessibility. Thanks @majiayu000!
|
|
10
|
+
|
|
11
|
+
### Dependency updates
|
|
12
|
+
|
|
13
|
+
- @gradio/button@0.6.3
|
|
14
|
+
- @gradio/code@0.17.1
|
|
15
|
+
- @gradio/paramviewer@0.9.2
|
|
16
|
+
- @gradio/statustracker@0.12.2
|
|
17
|
+
- @gradio/tabitem@0.6.5
|
|
18
|
+
- @gradio/tabs@0.5.5
|
|
19
|
+
- @gradio/atoms@0.20.1
|
|
20
|
+
- @gradio/column@0.3.2
|
|
21
|
+
- @gradio/utils@0.11.2
|
|
22
|
+
- @gradio/icons@0.15.1
|
|
23
|
+
- @gradio/upload@0.17.4
|
|
24
|
+
- @gradio/client@2.0.3
|
|
25
|
+
- @gradio/image@0.25.1
|
|
26
|
+
- @gradio/gallery@0.16.2
|
|
27
|
+
- @gradio/plot@0.10.2
|
|
28
|
+
- @gradio/theme@0.6.1
|
|
29
|
+
- @gradio/textbox@0.13.2
|
|
30
|
+
- @gradio/dropdown@0.11.2
|
|
31
|
+
- @gradio/checkbox@0.6.1
|
|
32
|
+
- @gradio/file@0.14.1
|
|
33
|
+
- @gradio/video@0.20.1
|
|
34
|
+
- @gradio/audio@0.22.1
|
|
35
|
+
|
|
36
|
+
## 1.1.1
|
|
37
|
+
|
|
38
|
+
### Features
|
|
39
|
+
|
|
40
|
+
- [#12677](https://github.com/gradio-app/gradio/pull/12677) [`6f37743`](https://github.com/gradio-app/gradio/commit/6f377433e4c64f1d962eef0f9eff74676c72032b) - Make check for active page in navbar robust. Thanks @abidlabs!
|
|
41
|
+
|
|
42
|
+
### Fixes
|
|
43
|
+
|
|
44
|
+
- [#12681](https://github.com/gradio-app/gradio/pull/12681) [`ba46c2d`](https://github.com/gradio-app/gradio/commit/ba46c2df1405c11e495304af8f91acfdf69d0b18) - Migrate Button to Svelte 5. Thanks @freddyaboulton!
|
|
45
|
+
- [#12625](https://github.com/gradio-app/gradio/pull/12625) [`7fb79d4`](https://github.com/gradio-app/gradio/commit/7fb79d45bdc3597bf6b095ff64c420939257fba9) - Fix bug where tabs don't work inside gr.render. Thanks @freddyaboulton!
|
|
46
|
+
|
|
47
|
+
### Dependency updates
|
|
48
|
+
|
|
49
|
+
- @gradio/utils@0.11.1
|
|
50
|
+
- @gradio/button@0.6.2
|
|
51
|
+
- @gradio/client@2.0.2
|
|
52
|
+
- @gradio/column@0.3.1
|
|
53
|
+
- @gradio/theme@0.6.0
|
|
54
|
+
- @gradio/gallery@0.16.1
|
|
55
|
+
- @gradio/plot@0.10.1
|
|
56
|
+
- @gradio/video@0.20.0
|
|
57
|
+
|
|
3
58
|
## 1.1.0
|
|
4
59
|
|
|
5
60
|
### Features
|
package/dist/src/Blocks.svelte
CHANGED
|
@@ -445,17 +445,20 @@
|
|
|
445
445
|
</svelte:head>
|
|
446
446
|
|
|
447
447
|
<div class="wrap" style:min-height={app_mode ? "100%" : "auto"}>
|
|
448
|
-
<
|
|
448
|
+
<main
|
|
449
449
|
class="contain"
|
|
450
450
|
style:flex-grow={app_mode ? "1" : "auto"}
|
|
451
451
|
bind:this={root_container}
|
|
452
452
|
style:margin-right={vibe_mode ? `${vibe_editor_width}px` : "0"}
|
|
453
453
|
>
|
|
454
454
|
<MountComponents node={app_tree.root} />
|
|
455
|
-
</
|
|
455
|
+
</main>
|
|
456
456
|
|
|
457
457
|
{#if footer_links.length > 0}
|
|
458
|
-
<footer
|
|
458
|
+
<footer
|
|
459
|
+
bind:clientHeight={footer_height}
|
|
460
|
+
aria-label="Gradio footer navigation"
|
|
461
|
+
>
|
|
459
462
|
{#if footer_links.includes("api")}
|
|
460
463
|
<button
|
|
461
464
|
on:click={() => {
|
|
@@ -537,7 +540,12 @@
|
|
|
537
540
|
{/if}
|
|
538
541
|
|
|
539
542
|
{#if api_docs_visible && app_tree.root && ApiDocs}
|
|
540
|
-
<div
|
|
543
|
+
<div
|
|
544
|
+
class="api-docs"
|
|
545
|
+
role="dialog"
|
|
546
|
+
aria-modal="true"
|
|
547
|
+
aria-label={$reactive_formatter("errors.use_via_api")}
|
|
548
|
+
>
|
|
541
549
|
<!-- TODO: fix -->
|
|
542
550
|
<!-- svelte-ignore a11y-click-events-have-key-events-->
|
|
543
551
|
<!-- svelte-ignore a11y-no-static-element-interactions-->
|
|
@@ -547,7 +555,7 @@
|
|
|
547
555
|
set_api_docs_visible(false);
|
|
548
556
|
}}
|
|
549
557
|
/>
|
|
550
|
-
<div class="api-docs-wrap">
|
|
558
|
+
<div class="api-docs-wrap" role="document">
|
|
551
559
|
<svelte:component
|
|
552
560
|
this={ApiDocs}
|
|
553
561
|
root_node={app_tree.root}
|
|
@@ -570,7 +578,12 @@
|
|
|
570
578
|
{/if}
|
|
571
579
|
|
|
572
580
|
{#if settings_visible && app.config && app_tree.root && Settings}
|
|
573
|
-
<div
|
|
581
|
+
<div
|
|
582
|
+
class="api-docs"
|
|
583
|
+
role="dialog"
|
|
584
|
+
aria-modal="true"
|
|
585
|
+
aria-label={$reactive_formatter("common.settings")}
|
|
586
|
+
>
|
|
574
587
|
<!-- TODO: fix -->
|
|
575
588
|
<!-- svelte-ignore a11y-click-events-have-key-events-->
|
|
576
589
|
<!-- svelte-ignore a11y-no-static-element-interactions-->
|
|
@@ -580,7 +593,7 @@
|
|
|
580
593
|
set_settings_visible(false);
|
|
581
594
|
}}
|
|
582
595
|
/>
|
|
583
|
-
<div class="api-docs-wrap">
|
|
596
|
+
<div class="api-docs-wrap" role="document">
|
|
584
597
|
<svelte:component
|
|
585
598
|
this={Settings}
|
|
586
599
|
bind:allow_zoom
|
|
@@ -619,7 +632,7 @@
|
|
|
619
632
|
font-size: var(--body-text-size);
|
|
620
633
|
}
|
|
621
634
|
|
|
622
|
-
.contain {
|
|
635
|
+
main.contain {
|
|
623
636
|
display: flex;
|
|
624
637
|
flex-direction: column;
|
|
625
638
|
}
|
package/dist/src/Embed.svelte
CHANGED
|
@@ -47,6 +47,20 @@
|
|
|
47
47
|
$: show_navbar =
|
|
48
48
|
pages.length > 1 && (navbar === null || navbar.visible !== false);
|
|
49
49
|
|
|
50
|
+
function normalize_path(path: string): string {
|
|
51
|
+
// Remove query parameters, hash fragments, and leading/trailing slashes from the path
|
|
52
|
+
let normalized = path.split("?")[0].split("#")[0];
|
|
53
|
+
normalized = normalized.replace(/^\/+|\/+$/g, "");
|
|
54
|
+
return normalized;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function is_active_route(route: string, current: string): boolean {
|
|
58
|
+
if (route.startsWith("http://") || route.startsWith("https://")) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
return normalize_path(route) === normalize_path(current);
|
|
62
|
+
}
|
|
63
|
+
|
|
50
64
|
$: effective_pages = (() => {
|
|
51
65
|
let visible_pages = pages.filter(([route, label, show], index) => {
|
|
52
66
|
if (index === 0 && route === "") {
|
|
@@ -100,7 +114,7 @@
|
|
|
100
114
|
href={route.startsWith("http://") || route.startsWith("https://")
|
|
101
115
|
? route
|
|
102
116
|
: `${root}/${route}`}
|
|
103
|
-
class:active={route
|
|
117
|
+
class:active={is_active_route(route, current_page)}
|
|
104
118
|
data-sveltekit-reload
|
|
105
119
|
target={route.startsWith("http://") || route.startsWith("https://")
|
|
106
120
|
? "_blank"
|
|
@@ -114,7 +128,7 @@
|
|
|
114
128
|
</nav>
|
|
115
129
|
</div>
|
|
116
130
|
{/if}
|
|
117
|
-
<
|
|
131
|
+
<div class="main fillable" class:fill_width class:app={!display && !is_embed}>
|
|
118
132
|
<slot />
|
|
119
133
|
<div>
|
|
120
134
|
{#if display && space && info}
|
|
@@ -139,7 +153,7 @@
|
|
|
139
153
|
</div>
|
|
140
154
|
{/if}
|
|
141
155
|
</div>
|
|
142
|
-
</
|
|
156
|
+
</div>
|
|
143
157
|
</div>
|
|
144
158
|
|
|
145
159
|
<style>
|
|
@@ -187,11 +201,11 @@
|
|
|
187
201
|
padding-bottom: var(--size-7);
|
|
188
202
|
}
|
|
189
203
|
|
|
190
|
-
.embed-container > main {
|
|
204
|
+
.embed-container > .main {
|
|
191
205
|
padding: var(--size-4);
|
|
192
206
|
}
|
|
193
207
|
|
|
194
|
-
main {
|
|
208
|
+
.main {
|
|
195
209
|
display: flex;
|
|
196
210
|
flex-grow: 1;
|
|
197
211
|
flex-direction: column;
|
|
@@ -313,7 +327,7 @@
|
|
|
313
327
|
height: 12px;
|
|
314
328
|
}
|
|
315
329
|
|
|
316
|
-
main a:hover {
|
|
330
|
+
.main a:hover {
|
|
317
331
|
text-decoration: underline;
|
|
318
332
|
}
|
|
319
333
|
</style>
|
package/dist/src/Login.svelte
CHANGED
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
lines={1}
|
|
55
55
|
show_label={true}
|
|
56
56
|
max_lines={1}
|
|
57
|
-
|
|
57
|
+
onsubmit={submit}
|
|
58
58
|
bind:value={username}
|
|
59
59
|
/>
|
|
60
60
|
</Block>
|
|
@@ -66,13 +66,13 @@
|
|
|
66
66
|
show_label={true}
|
|
67
67
|
max_lines={1}
|
|
68
68
|
type="password"
|
|
69
|
-
|
|
69
|
+
onsubmit={submit}
|
|
70
70
|
bind:value={password}
|
|
71
71
|
/>
|
|
72
72
|
</Block>
|
|
73
73
|
</BaseForm>
|
|
74
74
|
|
|
75
|
-
<BaseButton size="lg" variant="primary"
|
|
75
|
+
<BaseButton size="lg" variant="primary" onclick={submit}
|
|
76
76
|
>{i18n("login.login")}</BaseButton
|
|
77
77
|
>
|
|
78
78
|
</BaseColumn>
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
size="sm"
|
|
27
27
|
variant="secondary"
|
|
28
28
|
elem_id="start-api-recorder"
|
|
29
|
-
|
|
29
|
+
onclick={() => dispatch("close", { api_recorder_visible: true })}
|
|
30
30
|
>
|
|
31
31
|
<div class="loading-dot self-baseline"></div>
|
|
32
32
|
<p class="self-baseline btn-text">API Recorder</p>
|
package/dist/src/init.svelte.js
CHANGED
|
@@ -229,10 +229,12 @@ export class AppTree {
|
|
|
229
229
|
map.set(comp.id, comp);
|
|
230
230
|
return map;
|
|
231
231
|
}, new Map());
|
|
232
|
-
const
|
|
232
|
+
const _subtree = this.traverse(layout, (node) => {
|
|
233
233
|
const new_node = this.create_node(node, component_map, false, this.reactive_formatter);
|
|
234
234
|
return new_node;
|
|
235
235
|
});
|
|
236
|
+
gather_initial_tabs(_subtree, this.initial_tabs);
|
|
237
|
+
const subtree = this.traverse(_subtree, (node) => apply_initial_tabs(node, this.initial_tabs));
|
|
236
238
|
const n = find_node_by_id(this.root, subtree.id);
|
|
237
239
|
if (!n) {
|
|
238
240
|
throw new Error("Rerender failed: root node not found in current tree");
|
package/package.json
CHANGED
|
@@ -1,67 +1,67 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gradio/core",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"devDependencies": {
|
|
6
|
-
"@gradio/
|
|
7
|
-
"@gradio/
|
|
8
|
-
"@gradio/
|
|
9
|
-
"@gradio/
|
|
10
|
-
"@gradio/box": "^0.2.
|
|
11
|
-
"@gradio/
|
|
12
|
-
"@gradio/button": "^0.6.
|
|
13
|
-
"@gradio/chatbot": "^0.29.
|
|
14
|
-
"@gradio/checkbox": "^0.6.
|
|
15
|
-
"@gradio/checkboxgroup": "^0.9.
|
|
16
|
-
"@gradio/
|
|
17
|
-
"@gradio/
|
|
18
|
-
"@gradio/colorpicker": "^0.5.
|
|
19
|
-
"@gradio/column": "^0.3.
|
|
20
|
-
"@gradio/dataframe": "^0.21.
|
|
21
|
-
"@gradio/dataset": "^0.5.
|
|
22
|
-
"@gradio/datetime": "^0.4.
|
|
23
|
-
"@gradio/downloadbutton": "^0.4.
|
|
24
|
-
"@gradio/
|
|
25
|
-
"@gradio/
|
|
26
|
-
"@gradio/
|
|
27
|
-
"@gradio/
|
|
28
|
-
"@gradio/
|
|
29
|
-
"@gradio/form": "^0.2.
|
|
30
|
-
"@gradio/
|
|
31
|
-
"@gradio/
|
|
32
|
-
"@gradio/
|
|
33
|
-
"@gradio/
|
|
34
|
-
"@gradio/
|
|
35
|
-
"@gradio/
|
|
36
|
-
"@gradio/imageslider": "^0.4.
|
|
37
|
-
"@gradio/json": "^0.
|
|
38
|
-
"@gradio/label": "^0.6.
|
|
39
|
-
"@gradio/
|
|
40
|
-
"@gradio/model3d": "^0.16.
|
|
41
|
-
"@gradio/
|
|
42
|
-
"@gradio/
|
|
43
|
-
"@gradio/paramviewer": "^0.9.
|
|
44
|
-
"@gradio/plot": "^0.10.
|
|
45
|
-
"@gradio/
|
|
46
|
-
"@gradio/
|
|
47
|
-
"@gradio/
|
|
48
|
-
"@gradio/
|
|
49
|
-
"@gradio/simpledropdown": "^0.3.
|
|
50
|
-
"@gradio/simpleimage": "^0.9.
|
|
51
|
-
"@gradio/
|
|
52
|
-
"@gradio/
|
|
53
|
-
"@gradio/state": "^0.2.
|
|
54
|
-
"@gradio/statustracker": "^0.12.
|
|
55
|
-
"@gradio/
|
|
56
|
-
"@gradio/
|
|
57
|
-
"@gradio/
|
|
58
|
-
"@gradio/
|
|
59
|
-
"@gradio/
|
|
60
|
-
"@gradio/
|
|
61
|
-
"@gradio/
|
|
62
|
-
"@gradio/
|
|
63
|
-
"@gradio/
|
|
64
|
-
"@gradio/
|
|
6
|
+
"@gradio/accordion": "^0.5.29",
|
|
7
|
+
"@gradio/annotatedimage": "^0.11.1",
|
|
8
|
+
"@gradio/atoms": "^0.20.1",
|
|
9
|
+
"@gradio/audio": "^0.22.1",
|
|
10
|
+
"@gradio/box": "^0.2.28",
|
|
11
|
+
"@gradio/browserstate": "^0.3.6",
|
|
12
|
+
"@gradio/button": "^0.6.3",
|
|
13
|
+
"@gradio/chatbot": "^0.29.2",
|
|
14
|
+
"@gradio/checkbox": "^0.6.1",
|
|
15
|
+
"@gradio/checkboxgroup": "^0.9.1",
|
|
16
|
+
"@gradio/code": "^0.17.1",
|
|
17
|
+
"@gradio/client": "^2.0.3",
|
|
18
|
+
"@gradio/colorpicker": "^0.5.4",
|
|
19
|
+
"@gradio/column": "^0.3.2",
|
|
20
|
+
"@gradio/dataframe": "^0.21.3",
|
|
21
|
+
"@gradio/dataset": "^0.5.2",
|
|
22
|
+
"@gradio/datetime": "^0.4.1",
|
|
23
|
+
"@gradio/downloadbutton": "^0.4.17",
|
|
24
|
+
"@gradio/dropdown": "^0.11.2",
|
|
25
|
+
"@gradio/fallback": "^0.4.32",
|
|
26
|
+
"@gradio/fileexplorer": "^0.6.1",
|
|
27
|
+
"@gradio/file": "^0.14.1",
|
|
28
|
+
"@gradio/gallery": "^0.16.2",
|
|
29
|
+
"@gradio/form": "^0.2.29",
|
|
30
|
+
"@gradio/group": "^0.3.2",
|
|
31
|
+
"@gradio/highlightedtext": "^0.11.0",
|
|
32
|
+
"@gradio/html": "^0.9.1",
|
|
33
|
+
"@gradio/icons": "^0.15.1",
|
|
34
|
+
"@gradio/image": "^0.25.1",
|
|
35
|
+
"@gradio/imageeditor": "^0.18.4",
|
|
36
|
+
"@gradio/imageslider": "^0.4.1",
|
|
37
|
+
"@gradio/json": "^0.7.0",
|
|
38
|
+
"@gradio/label": "^0.6.1",
|
|
39
|
+
"@gradio/multimodaltextbox": "^0.11.4",
|
|
40
|
+
"@gradio/model3d": "^0.16.2",
|
|
41
|
+
"@gradio/nativeplot": "^0.10.0",
|
|
42
|
+
"@gradio/markdown": "^0.13.26",
|
|
43
|
+
"@gradio/paramviewer": "^0.9.2",
|
|
44
|
+
"@gradio/plot": "^0.10.2",
|
|
45
|
+
"@gradio/radio": "^0.9.1",
|
|
46
|
+
"@gradio/number": "^0.8.1",
|
|
47
|
+
"@gradio/row": "^0.3.1",
|
|
48
|
+
"@gradio/sidebar": "^0.2.1",
|
|
49
|
+
"@gradio/simpledropdown": "^0.3.32",
|
|
50
|
+
"@gradio/simpleimage": "^0.9.3",
|
|
51
|
+
"@gradio/simpletextbox": "^0.3.34",
|
|
52
|
+
"@gradio/slider": "^0.7.3",
|
|
53
|
+
"@gradio/state": "^0.2.2",
|
|
54
|
+
"@gradio/statustracker": "^0.12.2",
|
|
55
|
+
"@gradio/tabitem": "^0.6.5",
|
|
56
|
+
"@gradio/tabs": "^0.5.5",
|
|
57
|
+
"@gradio/textbox": "^0.13.2",
|
|
58
|
+
"@gradio/theme": "^0.6.1",
|
|
59
|
+
"@gradio/timer": "^0.4.8",
|
|
60
|
+
"@gradio/uploadbutton": "^0.9.17",
|
|
61
|
+
"@gradio/upload": "^0.17.4",
|
|
62
|
+
"@gradio/utils": "^0.11.2",
|
|
63
|
+
"@gradio/video": "^0.20.1",
|
|
64
|
+
"@gradio/vibeeditor": "^0.3.3"
|
|
65
65
|
},
|
|
66
66
|
"msw": {
|
|
67
67
|
"workerDirectory": "public"
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
}
|
|
92
92
|
},
|
|
93
93
|
"peerDependencies": {
|
|
94
|
-
"svelte": "^5.
|
|
94
|
+
"svelte": "^5.48.0"
|
|
95
95
|
},
|
|
96
96
|
"main": "./index.ts",
|
|
97
97
|
"repository": {
|
package/src/Blocks.svelte
CHANGED
|
@@ -445,17 +445,20 @@
|
|
|
445
445
|
</svelte:head>
|
|
446
446
|
|
|
447
447
|
<div class="wrap" style:min-height={app_mode ? "100%" : "auto"}>
|
|
448
|
-
<
|
|
448
|
+
<main
|
|
449
449
|
class="contain"
|
|
450
450
|
style:flex-grow={app_mode ? "1" : "auto"}
|
|
451
451
|
bind:this={root_container}
|
|
452
452
|
style:margin-right={vibe_mode ? `${vibe_editor_width}px` : "0"}
|
|
453
453
|
>
|
|
454
454
|
<MountComponents node={app_tree.root} />
|
|
455
|
-
</
|
|
455
|
+
</main>
|
|
456
456
|
|
|
457
457
|
{#if footer_links.length > 0}
|
|
458
|
-
<footer
|
|
458
|
+
<footer
|
|
459
|
+
bind:clientHeight={footer_height}
|
|
460
|
+
aria-label="Gradio footer navigation"
|
|
461
|
+
>
|
|
459
462
|
{#if footer_links.includes("api")}
|
|
460
463
|
<button
|
|
461
464
|
on:click={() => {
|
|
@@ -537,7 +540,12 @@
|
|
|
537
540
|
{/if}
|
|
538
541
|
|
|
539
542
|
{#if api_docs_visible && app_tree.root && ApiDocs}
|
|
540
|
-
<div
|
|
543
|
+
<div
|
|
544
|
+
class="api-docs"
|
|
545
|
+
role="dialog"
|
|
546
|
+
aria-modal="true"
|
|
547
|
+
aria-label={$reactive_formatter("errors.use_via_api")}
|
|
548
|
+
>
|
|
541
549
|
<!-- TODO: fix -->
|
|
542
550
|
<!-- svelte-ignore a11y-click-events-have-key-events-->
|
|
543
551
|
<!-- svelte-ignore a11y-no-static-element-interactions-->
|
|
@@ -547,7 +555,7 @@
|
|
|
547
555
|
set_api_docs_visible(false);
|
|
548
556
|
}}
|
|
549
557
|
/>
|
|
550
|
-
<div class="api-docs-wrap">
|
|
558
|
+
<div class="api-docs-wrap" role="document">
|
|
551
559
|
<svelte:component
|
|
552
560
|
this={ApiDocs}
|
|
553
561
|
root_node={app_tree.root}
|
|
@@ -570,7 +578,12 @@
|
|
|
570
578
|
{/if}
|
|
571
579
|
|
|
572
580
|
{#if settings_visible && app.config && app_tree.root && Settings}
|
|
573
|
-
<div
|
|
581
|
+
<div
|
|
582
|
+
class="api-docs"
|
|
583
|
+
role="dialog"
|
|
584
|
+
aria-modal="true"
|
|
585
|
+
aria-label={$reactive_formatter("common.settings")}
|
|
586
|
+
>
|
|
574
587
|
<!-- TODO: fix -->
|
|
575
588
|
<!-- svelte-ignore a11y-click-events-have-key-events-->
|
|
576
589
|
<!-- svelte-ignore a11y-no-static-element-interactions-->
|
|
@@ -580,7 +593,7 @@
|
|
|
580
593
|
set_settings_visible(false);
|
|
581
594
|
}}
|
|
582
595
|
/>
|
|
583
|
-
<div class="api-docs-wrap">
|
|
596
|
+
<div class="api-docs-wrap" role="document">
|
|
584
597
|
<svelte:component
|
|
585
598
|
this={Settings}
|
|
586
599
|
bind:allow_zoom
|
|
@@ -619,7 +632,7 @@
|
|
|
619
632
|
font-size: var(--body-text-size);
|
|
620
633
|
}
|
|
621
634
|
|
|
622
|
-
.contain {
|
|
635
|
+
main.contain {
|
|
623
636
|
display: flex;
|
|
624
637
|
flex-direction: column;
|
|
625
638
|
}
|
package/src/Embed.svelte
CHANGED
|
@@ -47,6 +47,20 @@
|
|
|
47
47
|
$: show_navbar =
|
|
48
48
|
pages.length > 1 && (navbar === null || navbar.visible !== false);
|
|
49
49
|
|
|
50
|
+
function normalize_path(path: string): string {
|
|
51
|
+
// Remove query parameters, hash fragments, and leading/trailing slashes from the path
|
|
52
|
+
let normalized = path.split("?")[0].split("#")[0];
|
|
53
|
+
normalized = normalized.replace(/^\/+|\/+$/g, "");
|
|
54
|
+
return normalized;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function is_active_route(route: string, current: string): boolean {
|
|
58
|
+
if (route.startsWith("http://") || route.startsWith("https://")) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
return normalize_path(route) === normalize_path(current);
|
|
62
|
+
}
|
|
63
|
+
|
|
50
64
|
$: effective_pages = (() => {
|
|
51
65
|
let visible_pages = pages.filter(([route, label, show], index) => {
|
|
52
66
|
if (index === 0 && route === "") {
|
|
@@ -100,7 +114,7 @@
|
|
|
100
114
|
href={route.startsWith("http://") || route.startsWith("https://")
|
|
101
115
|
? route
|
|
102
116
|
: `${root}/${route}`}
|
|
103
|
-
class:active={route
|
|
117
|
+
class:active={is_active_route(route, current_page)}
|
|
104
118
|
data-sveltekit-reload
|
|
105
119
|
target={route.startsWith("http://") || route.startsWith("https://")
|
|
106
120
|
? "_blank"
|
|
@@ -114,7 +128,7 @@
|
|
|
114
128
|
</nav>
|
|
115
129
|
</div>
|
|
116
130
|
{/if}
|
|
117
|
-
<
|
|
131
|
+
<div class="main fillable" class:fill_width class:app={!display && !is_embed}>
|
|
118
132
|
<slot />
|
|
119
133
|
<div>
|
|
120
134
|
{#if display && space && info}
|
|
@@ -139,7 +153,7 @@
|
|
|
139
153
|
</div>
|
|
140
154
|
{/if}
|
|
141
155
|
</div>
|
|
142
|
-
</
|
|
156
|
+
</div>
|
|
143
157
|
</div>
|
|
144
158
|
|
|
145
159
|
<style>
|
|
@@ -187,11 +201,11 @@
|
|
|
187
201
|
padding-bottom: var(--size-7);
|
|
188
202
|
}
|
|
189
203
|
|
|
190
|
-
.embed-container > main {
|
|
204
|
+
.embed-container > .main {
|
|
191
205
|
padding: var(--size-4);
|
|
192
206
|
}
|
|
193
207
|
|
|
194
|
-
main {
|
|
208
|
+
.main {
|
|
195
209
|
display: flex;
|
|
196
210
|
flex-grow: 1;
|
|
197
211
|
flex-direction: column;
|
|
@@ -313,7 +327,7 @@
|
|
|
313
327
|
height: 12px;
|
|
314
328
|
}
|
|
315
329
|
|
|
316
|
-
main a:hover {
|
|
330
|
+
.main a:hover {
|
|
317
331
|
text-decoration: underline;
|
|
318
332
|
}
|
|
319
333
|
</style>
|
package/src/Login.svelte
CHANGED
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
lines={1}
|
|
55
55
|
show_label={true}
|
|
56
56
|
max_lines={1}
|
|
57
|
-
|
|
57
|
+
onsubmit={submit}
|
|
58
58
|
bind:value={username}
|
|
59
59
|
/>
|
|
60
60
|
</Block>
|
|
@@ -66,13 +66,13 @@
|
|
|
66
66
|
show_label={true}
|
|
67
67
|
max_lines={1}
|
|
68
68
|
type="password"
|
|
69
|
-
|
|
69
|
+
onsubmit={submit}
|
|
70
70
|
bind:value={password}
|
|
71
71
|
/>
|
|
72
72
|
</Block>
|
|
73
73
|
</BaseForm>
|
|
74
74
|
|
|
75
|
-
<BaseButton size="lg" variant="primary"
|
|
75
|
+
<BaseButton size="lg" variant="primary" onclick={submit}
|
|
76
76
|
>{i18n("login.login")}</BaseButton
|
|
77
77
|
>
|
|
78
78
|
</BaseColumn>
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
size="sm"
|
|
27
27
|
variant="secondary"
|
|
28
28
|
elem_id="start-api-recorder"
|
|
29
|
-
|
|
29
|
+
onclick={() => dispatch("close", { api_recorder_visible: true })}
|
|
30
30
|
>
|
|
31
31
|
<div class="loading-dot self-baseline"></div>
|
|
32
32
|
<p class="self-baseline btn-text">API Recorder</p>
|
package/src/init.svelte.ts
CHANGED
|
@@ -365,7 +365,7 @@ export class AppTree {
|
|
|
365
365
|
map.set(comp.id, comp);
|
|
366
366
|
return map;
|
|
367
367
|
}, new Map<number, ComponentMeta>());
|
|
368
|
-
const
|
|
368
|
+
const _subtree = this.traverse(layout, (node) => {
|
|
369
369
|
const new_node = this.create_node(
|
|
370
370
|
node,
|
|
371
371
|
component_map,
|
|
@@ -374,7 +374,10 @@ export class AppTree {
|
|
|
374
374
|
);
|
|
375
375
|
return new_node;
|
|
376
376
|
});
|
|
377
|
-
|
|
377
|
+
gather_initial_tabs(_subtree, this.initial_tabs);
|
|
378
|
+
const subtree = this.traverse(_subtree, (node) =>
|
|
379
|
+
apply_initial_tabs(node, this.initial_tabs)
|
|
380
|
+
);
|
|
378
381
|
const n = find_node_by_id(this.root!, subtree.id);
|
|
379
382
|
|
|
380
383
|
if (!n) {
|