fix: add missing Toaster component to enable toast display (#65)

The project was calling toast.success/error/warning from sonner in 7 files,
but the <Toaster> component was never rendered in the React tree. This meant
sonner stored toast data internally but no UI was ever displayed to users.

Changes:
- Create src/components/ui/sonner.tsx with shadcn/ui-style Toaster wrapper
  that integrates with ThemeModeProvider for light/dark theme support
- Add <Toaster /> to AppRoot.tsx so it works across all entry points
  (popup, sidepanel, browser-tab)

fix: always convert dots to underscores in i18n t() key lookup

The t() function only converted dots to underscores when the key contained
a colon (namespace:key format). Keys using dot notation like
'messages.copySuccess' were passed directly to chrome.i18n.getMessage()
without dot-to-underscore conversion, causing lookups to fail silently and
return empty strings - resulting in toast notifications with no text.

Now all separators (both ':' and '.') are consistently converted to '_'
regardless of format, matching the messages.json key convention.

fix: position toast at bottom-center instead of bottom-right
This commit is contained in:
LingandRX
2026-06-05 19:29:21 +08:00
committed by 雨霖铃
parent a0b1ade662
commit 2c45ddada9
3 changed files with 30 additions and 6 deletions
+2
View File
@@ -1,6 +1,7 @@
import React from 'react';
import { ThemeModeProvider } from './ThemeModeProvider';
import { RouterProvider } from './RouterProvider';
import { Toaster } from '@/components/ui/sonner';
interface AppRootProps {
children: React.ReactNode;
@@ -11,6 +12,7 @@ export default function AppRoot({ children }: AppRootProps) {
<React.StrictMode>
<ThemeModeProvider>
<RouterProvider>{children}</RouterProvider>
<Toaster />
</ThemeModeProvider>
</React.StrictMode>
);