diff --git a/packages/app/src/components/dialog-connect-provider.tsx b/packages/app/src/components/dialog-connect-provider.tsx index a0ccc161f..fab172d2e 100644 --- a/packages/app/src/components/dialog-connect-provider.tsx +++ b/packages/app/src/components/dialog-connect-provider.tsx @@ -277,6 +277,7 @@ export function DialogConnectProvider(props: { provider: string }) {
{select()?.message}
x.value} current={select()?.options.find((x) => x.value === formStore.value[select()!.key])} @@ -364,6 +365,7 @@ export function DialogConnectProvider(props: { provider: string }) {
{ listRef = ref }} diff --git a/packages/app/src/components/dialog-fork.tsx b/packages/app/src/components/dialog-fork.tsx index 3618a0581..beb7b3ccb 100644 --- a/packages/app/src/components/dialog-fork.tsx +++ b/packages/app/src/components/dialog-fork.tsx @@ -88,7 +88,7 @@ export const DialogFork: Component = () => { return ( x.id} diff --git a/packages/app/src/components/dialog-manage-models.tsx b/packages/app/src/components/dialog-manage-models.tsx index ace79e38a..b46034bba 100644 --- a/packages/app/src/components/dialog-manage-models.tsx +++ b/packages/app/src/components/dialog-manage-models.tsx @@ -39,6 +39,7 @@ export const DialogManageModels: Component = () => { } > `${x?.provider?.id}:${x?.id}`} diff --git a/packages/app/src/components/dialog-select-directory.tsx b/packages/app/src/components/dialog-select-directory.tsx index c7c3b5098..58601abac 100644 --- a/packages/app/src/components/dialog-select-directory.tsx +++ b/packages/app/src/components/dialog-select-directory.tsx @@ -324,6 +324,7 @@ export function DialogSelectDirectory(props: DialogSelectDirectoryProps) { return ( { description={language.t("dialog.mcp.description", { enabled: enabledCount(), total: totalCount() })} > x?.name ?? ""} diff --git a/packages/app/src/components/dialog-select-model-unpaid.tsx b/packages/app/src/components/dialog-select-model-unpaid.tsx index f916ef623..fae743bb8 100644 --- a/packages/app/src/components/dialog-select-model-unpaid.tsx +++ b/packages/app/src/components/dialog-select-model-unpaid.tsx @@ -45,7 +45,7 @@ export const DialogSelectModelUnpaid: Component<{ model?: ModelState }> = (props
{language.t("dialog.model.unpaid.freeModels.title")}
(listRef = ref)} items={model.list} current={model.current()} @@ -90,7 +90,7 @@ export const DialogSelectModelUnpaid: Component<{ model?: ModelState }> = (props
{language.t("dialog.model.unpaid.addMore.title")}
p.id} items={providers.popular} activeIcon="plus-small" diff --git a/packages/app/src/components/dialog-select-model.tsx b/packages/app/src/components/dialog-select-model.tsx index fdef866a7..ca2643c3b 100644 --- a/packages/app/src/components/dialog-select-model.tsx +++ b/packages/app/src/components/dialog-select-model.tsx @@ -37,7 +37,7 @@ const ModelList: Component<{ return ( `${x.provider.id}:${x.id}`} diff --git a/packages/app/src/components/dialog-select-provider.tsx b/packages/app/src/components/dialog-select-provider.tsx index 1273db596..89310286d 100644 --- a/packages/app/src/components/dialog-select-provider.tsx +++ b/packages/app/src/components/dialog-select-provider.tsx @@ -29,6 +29,7 @@ export const DialogSelectProvider: Component = () => { return ( +
+} + +export function ServerManagementSettings() { + return +} + +function ServerManagement(props: { dialog?: boolean }) { const navigate = useNavigate() const dialog = useDialog() const server = useServer() @@ -351,7 +359,7 @@ export function DialogSelectServer() { async function select(conn: ServerConnection.Any, persist?: boolean) { if (!persist && store.status[ServerConnection.key(conn)]?.healthy === false) return - dialog.close() + if (props.dialog) dialog.close() if (persist && conn.type === "http") { server.add(conn) navigate("/") @@ -502,148 +510,151 @@ export function DialogSelectServer() { } } - return ( - -
+ const content = () => ( +
+ +
{formTitle()}
+
+ + } + > + x.http.url} + onSelect={(x) => { + if (x) void select(x) + }} + divider={true} + > + {(i) => { + const key = ServerConnection.key(i) + return ( +
+
+ +
+ + + {language.t("dialog.server.status.default")} + + + } + showCredentials + /> +
+ + + + + + + e.stopPropagation()} + onPointerDown={(e: PointerEvent) => e.stopPropagation()} + /> + + + { + if (i.type !== "http") return + startEdit(i) + }} + > + {language.t("dialog.server.menu.edit")} + + + setDefault(key)}> + + {language.t("dialog.server.menu.default")} + + + + + setDefault(null)}> + + {language.t("dialog.server.menu.defaultRemove")} + + + + + handleRemove(ServerConnection.key(i))} + class="text-text-on-critical-base hover:bg-surface-critical-weak" + > + {language.t("dialog.server.menu.delete")} + + + + + +
+
+ ) + }} +
+
+ +
+ } > - x.http.url} - onSelect={(x) => { - if (x) void select(x) - }} - divider={true} - class="flex-1 min-h-0 px-5 [&_[data-slot=list-search-wrapper]]:w-full [&_[data-slot=list-scroll]]:flex-1 [&_[data-slot=list-scroll]]:overflow-y-auto [&_[data-slot=list-items]]:bg-surface-base [&_[data-slot=list-items]]:rounded-md [&_[data-slot=list-item]]:min-h-14 [&_[data-slot=list-item]]:p-3 [&_[data-slot=list-item]]:!bg-transparent" - > - {(i) => { - const key = ServerConnection.key(i) - return ( -
-
- -
- - - {language.t("dialog.server.status.default")} - - - } - showCredentials - /> -
- - - - - - - e.stopPropagation()} - onPointerDown={(e: PointerEvent) => e.stopPropagation()} - /> - - - { - if (i.type !== "http") return - startEdit(i) - }} - > - {language.t("dialog.server.menu.edit")} - - - setDefault(key)}> - - {language.t("dialog.server.menu.default")} - - - - - setDefault(null)}> - - {language.t("dialog.server.menu.defaultRemove")} - - - - - handleRemove(ServerConnection.key(i))} - class="text-text-on-critical-base hover:bg-surface-critical-weak" - > - {language.t("dialog.server.menu.delete")} - - - - - -
-
- ) - }} -
+
- -
- - {language.t("dialog.server.add.button")} - - } - > - - -
-
+
) + + return props.dialog ? {content()} : content() } diff --git a/packages/app/src/components/dialog-settings.tsx b/packages/app/src/components/dialog-settings.tsx index 83cea131f..20d71f4bf 100644 --- a/packages/app/src/components/dialog-settings.tsx +++ b/packages/app/src/components/dialog-settings.tsx @@ -8,6 +8,7 @@ import { SettingsGeneral } from "./settings-general" import { SettingsKeybinds } from "./settings-keybinds" import { SettingsProviders } from "./settings-providers" import { SettingsModels } from "./settings-models" +import { SettingsServers } from "./settings-servers" export const DialogSettings: Component = () => { const language = useLanguage() @@ -17,7 +18,7 @@ export const DialogSettings: Component = () => { -
+
@@ -31,6 +32,10 @@ export const DialogSettings: Component = () => { {language.t("settings.tab.shortcuts")} + + + {language.t("status.popover.tab.servers")} +
@@ -61,6 +66,9 @@ export const DialogSettings: Component = () => { + + + diff --git a/packages/app/src/components/settings-servers.tsx b/packages/app/src/components/settings-servers.tsx new file mode 100644 index 000000000..20616f57b --- /dev/null +++ b/packages/app/src/components/settings-servers.tsx @@ -0,0 +1,21 @@ +import { type Component } from "solid-js" +import { useLanguage } from "@/context/language" +import { ServerManagementSettings } from "./dialog-select-server" + +export const SettingsServers: Component = () => { + const language = useLanguage() + + return ( +
+
+
+

{language.t("status.popover.tab.servers")}

+
+
+ +
+ +
+
+ ) +} diff --git a/packages/ui/src/components/list.css b/packages/ui/src/components/list.css index b12d30415..a10df7330 100644 --- a/packages/ui/src/components/list.css +++ b/packages/ui/src/components/list.css @@ -21,7 +21,7 @@ flex-direction: column; gap: 12px; overflow: hidden; - padding: 0 12px; + /*padding: 0 12px;*/ [data-slot="list-search-wrapper"] { display: flex;