diff --git a/web/src/features/search/contact-popover.tsx b/web/src/features/search/contact-popover.tsx index 15d32b2..2a9fe21 100644 --- a/web/src/features/search/contact-popover.tsx +++ b/web/src/features/search/contact-popover.tsx @@ -62,7 +62,7 @@ export function MailFilterPopover() { size="sm" variant="outline" className={cn( - 'h-6 rounded-none px-3 gap-1.5 transition-colors', + 'h-6 rounded-none px-3 gap-1.5 transition-colors border-l-0', activeCount > 0 && 'bg-primary/10 text-primary hover:bg-primary/20' )} > diff --git a/web/src/features/search/mailbox-popover.tsx b/web/src/features/search/mailbox-popover.tsx index 6447fec..3349419 100644 --- a/web/src/features/search/mailbox-popover.tsx +++ b/web/src/features/search/mailbox-popover.tsx @@ -271,7 +271,7 @@ export function MailboxPopover() { variant="outline" disabled={disabled} className={cn( - 'h-6 rounded-none px-3 gap-1.5 transition-colors', + 'h-6 rounded-none px-3 gap-1.5 transition-colors border-l-0', selectedMailboxIds.length > 0 && 'bg-primary/10 text-primary border-primary/20' )} > diff --git a/web/src/features/search/tag-filter-popover.tsx b/web/src/features/search/tag-filter-popover.tsx index e9ee5fc..0b8317a 100644 --- a/web/src/features/search/tag-filter-popover.tsx +++ b/web/src/features/search/tag-filter-popover.tsx @@ -98,7 +98,7 @@ export function TagFilterPopover() { size="sm" variant="outline" className={cn( - 'h-6 gap-1.5 px-3 rounded-none', + 'h-6 gap-1.5 px-3 rounded-none border-l-0', selectedTags.length > 0 && 'bg-primary/10 border-primary text-primary' )} diff --git a/web/src/features/settings/access/index.tsx b/web/src/features/settings/access/index.tsx index 4c06b2a..a8f8288 100644 --- a/web/src/features/settings/access/index.tsx +++ b/web/src/features/settings/access/index.tsx @@ -25,6 +25,7 @@ import { useCurrentUser } from '@/hooks/use-current-user' import { PermissionsDialog } from './permissions-dialog' import Logo from '@/assets/logo.svg' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' +import LongText from '@/components/long-text' export function AccountAccessList() { @@ -70,13 +71,15 @@ export function AccountAccessList() { if (!email) return null return ( - +
{email.charAt(0).toUpperCase()}
-
- {email} +
+ + {email} + {t('settings.profile.account.id', { id: accountId })} diff --git a/web/src/features/settings/configurations/index.tsx b/web/src/features/settings/configurations/index.tsx index 39bee3f..2f676b2 100644 --- a/web/src/features/settings/configurations/index.tsx +++ b/web/src/features/settings/configurations/index.tsx @@ -16,6 +16,7 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . + import * as React from "react" import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card" import { Badge } from "@/components/ui/badge" @@ -35,9 +36,9 @@ import { useQuery } from "@tanstack/react-query" import { useTranslation } from "react-i18next" const formatMB = (bytes?: number) => { - if (!bytes) return "—"; - return `${(bytes / 1024 / 1024).toFixed(0)} MB`; -}; + if (!bytes) return "—" + return `${(bytes / 1024 / 1024).toFixed(0)} MB` +} function BooleanBadge({ value }: { value: boolean }) { const { t } = useTranslation() @@ -58,13 +59,13 @@ function SettingRow({ description?: string }) { return ( -
-
-
{label}
-
{value}
+
+
+
{label}
+
{value}
{description && ( -
{description}
+
{description}
)}
) @@ -82,31 +83,36 @@ function SettingsCard({ children: React.ReactNode }) { return ( - - - + + +
+ +
{title} - {description && {description}} + {description && ( + {description} + )}
- {children} + {children}
) } function PageSkeleton() { return ( -
+
{Array.from({ length: 6 }).map((_, i) => ( - + - + + ))} @@ -121,109 +127,119 @@ export default function ServerConfigurationsPage() { queryFn: get_system_configurations, }) - if (isLoading) return - if (isError || !data) { - return
{t("systemConfig.fields.loadError")}
+ if (isError || (!isLoading && !data)) { + return ( +
+ {t("systemConfig.fields.loadError")} +
+ ) } return ( -
+
-
-
-
- -
+
+ +
+
-

- {t("systemConfig.pageTitle")} -

-

+

{t("systemConfig.pageTitle")}

+

{t("systemConfig.pageDescription")}

-
-
- - - - - - } - /> - - - } /> - - - } /> - - - - } - /> - - - {data.bichon_root_dir}} /> - {data.bichon_data_dir} : "—"} /> - {data.bichon_index_dir} : "—"} /> - - - - - - {t("systemConfig.status.configured")} - - ) : ( - {t("systemConfig.status.missing")} - ) - } - /> - - - - {data.bichon_log_level}} /> - } /> - } /> - } /> - - + + {isLoading ? ( + + ) : ( +
+ + + + + + } + /> + + + + } /> + + + } /> + + + + + } + /> + + + + {data!.bichon_root_dir}} /> + {data!.bichon_data_dir} : "—"} /> + {data!.bichon_index_dir} : "—"} /> + + + + + + + {t("systemConfig.status.configured")} + + ) : ( + {t("systemConfig.status.missing")} + ) + } + /> + + + + + {data!.bichon_log_level}} /> + } /> + } /> + } /> + + +
+ )}
diff --git a/web/src/features/settings/index.tsx b/web/src/features/settings/index.tsx index 04d3588..66dc381 100644 --- a/web/src/features/settings/index.tsx +++ b/web/src/features/settings/index.tsx @@ -24,6 +24,7 @@ import { KeyRound, Palette, SettingsIcon, ShieldCheck, UserCog, Waypoints } from import { FixedHeader } from '@/components/layout/fixed-header' import { useCurrentUser } from '@/hooks/use-current-user' import { useTranslation } from 'react-i18next' +import { Separator } from '@/components/ui/separator' export default function Settings() { const { t } = useTranslation() @@ -68,6 +69,15 @@ export default function Settings() { <>
+
+

+ {t('settings.header.title')} +

+

+ {t('settings.header.description')} +

+
+