Cmd/Ctrl+S used to snapshot silently. A new app-wide ToastProvider (components/Toast.tsx) owns a bottom-center stack — permanent polite live region, auto-dismiss after 2.5 s, click to dismiss early, error variant. Both snapshot paths (the keyboard chords in PageEditorPage and the save-version TopBar button) now confirm with the version name when there is one, and their failure alert becomes an error toast. The plugin host capability ui.toast (declared since #74, wired nowhere) connects to the same stack: PluginBlockScope carries the showToast handle, plugin-block passes it into the sandbox context. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fb2VzvcoBPHkjh8bZ6PzQn
45 lines
1.3 KiB
TypeScript
45 lines
1.3 KiB
TypeScript
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
import { StrictMode } from 'react';
|
|
import { createRoot } from 'react-dom/client';
|
|
import { BrowserRouter } from 'react-router-dom';
|
|
|
|
import { App } from './App';
|
|
import { AuthProvider } from './auth/auth-context';
|
|
import { ToastProvider } from './components/Toast';
|
|
import './i18n';
|
|
import { ApiError } from './lib/api';
|
|
import './styles/tokens.css';
|
|
import './styles/base.css';
|
|
|
|
const queryClient = new QueryClient({
|
|
defaultOptions: {
|
|
queries: {
|
|
// A 4xx won't turn into something else on retry (wrong permissions,
|
|
// page in trash, not found, …) — only retry on network/5xx errors.
|
|
retry: (failureCount, error) => {
|
|
if (error instanceof ApiError && error.status >= 400 && error.status < 500) return false;
|
|
return failureCount < 3;
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
const container = document.getElementById('root');
|
|
if (!container) {
|
|
throw new Error('index.html is missing the #root element');
|
|
}
|
|
|
|
createRoot(container).render(
|
|
<StrictMode>
|
|
<QueryClientProvider client={queryClient}>
|
|
<AuthProvider>
|
|
<ToastProvider>
|
|
<BrowserRouter>
|
|
<App />
|
|
</BrowserRouter>
|
|
</ToastProvider>
|
|
</AuthProvider>
|
|
</QueryClientProvider>
|
|
</StrictMode>,
|
|
);
|