diff --git a/web/src/lib/components/app/code-editor.svelte b/web/src/lib/components/app/code-editor.svelte
index 3e95d4a..6424764 100644
--- a/web/src/lib/components/app/code-editor.svelte
+++ b/web/src/lib/components/app/code-editor.svelte
@@ -221,4 +221,4 @@
}
-
+
diff --git a/web/src/lib/components/app/copy-button.svelte b/web/src/lib/components/app/copy-button.svelte
index 51eb157..170538b 100644
--- a/web/src/lib/components/app/copy-button.svelte
+++ b/web/src/lib/components/app/copy-button.svelte
@@ -31,9 +31,9 @@
class="h-6 w-6 text-muted-foreground hover:text-foreground"
>
{#if copied}
-
+
{:else}
-
+
{/if}
{label}
diff --git a/web/src/lib/components/app/disabled-reason-tooltip.svelte b/web/src/lib/components/app/disabled-reason-tooltip.svelte
index b1e7ee6..1a86a71 100644
--- a/web/src/lib/components/app/disabled-reason-tooltip.svelte
+++ b/web/src/lib/components/app/disabled-reason-tooltip.svelte
@@ -15,9 +15,11 @@
{#if reason}
-
- {@render children?.()}
-
+ {#snippet child({ props })}
+
+ {@render children?.()}
+
+ {/snippet}
{reason}
diff --git a/web/src/lib/components/ui/card/card-title.svelte b/web/src/lib/components/ui/card/card-title.svelte
index 1523fc5..64a3820 100644
--- a/web/src/lib/components/ui/card/card-title.svelte
+++ b/web/src/lib/components/ui/card/card-title.svelte
@@ -6,15 +6,21 @@
ref = $bindable(null),
class: className,
children,
+ level = undefined as "1" | "2" | "3" | "4" | "5" | "6" | undefined,
...restProps
- }: WithElementRef> = $props();
+ }: WithElementRef> & {
+ level?: "1" | "2" | "3" | "4" | "5" | "6";
+ } = $props();
+
+ let tag = $derived(level ? `h${level}` : "div");
-
{@render children?.()}
-
+
diff --git a/web/src/lib/components/ui/input-group/input-group-addon.svelte b/web/src/lib/components/ui/input-group/input-group-addon.svelte
index ea075ea..f22b292 100644
--- a/web/src/lib/components/ui/input-group/input-group-addon.svelte
+++ b/web/src/lib/components/ui/input-group/input-group-addon.svelte
@@ -40,12 +40,19 @@
data-slot="input-group-addon"
data-align={align}
class={cn(inputGroupAddonVariants({ align }), className)}
+ tabindex="-1"
onclick={(e) => {
if ((e.target as HTMLElement).closest("button")) {
return;
}
e.currentTarget.parentElement?.querySelector("input")?.focus();
}}
+ onkeydown={(e) => {
+ if (e.key === "Enter" || e.key === " ") {
+ e.preventDefault();
+ e.currentTarget.parentElement?.querySelector("input")?.focus();
+ }
+ }}
{...restProps}
>
{@render children?.()}
diff --git a/web/src/lib/components/ui/pagination/pagination-ellipsis.svelte b/web/src/lib/components/ui/pagination/pagination-ellipsis.svelte
index ca9b8c3..155fe16 100644
--- a/web/src/lib/components/ui/pagination/pagination-ellipsis.svelte
+++ b/web/src/lib/components/ui/pagination/pagination-ellipsis.svelte
@@ -12,11 +12,10 @@
-
+
More pages
diff --git a/web/src/lib/i18n/messages/en-us.ts b/web/src/lib/i18n/messages/en-us.ts
index 9ff6950..e6b3995 100644
--- a/web/src/lib/i18n/messages/en-us.ts
+++ b/web/src/lib/i18n/messages/en-us.ts
@@ -12,6 +12,7 @@ export const enUS = {
subtitle: "Service-first self-hosted operations",
},
nav: {
+ navLabel: "Main navigation",
overview: "Dashboard",
services: "Services",
nodes: "Nodes",
diff --git a/web/src/lib/i18n/messages/zh-hans.ts b/web/src/lib/i18n/messages/zh-hans.ts
index 4e920b3..24dacd9 100644
--- a/web/src/lib/i18n/messages/zh-hans.ts
+++ b/web/src/lib/i18n/messages/zh-hans.ts
@@ -4,6 +4,7 @@ export const zhHans = {
subtitle: "面向服务的自托管运维平台",
},
nav: {
+ navLabel: "主导航",
overview: "概览",
services: "服务",
nodes: "节点",
diff --git a/web/src/routes/+layout.svelte b/web/src/routes/+layout.svelte
index c447d97..35342a5 100644
--- a/web/src/routes/+layout.svelte
+++ b/web/src/routes/+layout.svelte
@@ -77,7 +77,7 @@
>
-