Notifications
{#if $unreadCount > 0}
@@ -251,13 +251,13 @@
{:else if $notifications.length === 0}
-
+
No notifications yet
{:else}
{#each $notifications as notification}
{
@@ -297,10 +297,10 @@
{notification.subject}
-
+
{notification.body}
-
+
{formatTime(notification.created_at)}
@@ -313,7 +313,7 @@
{/if}
-
+
{/if}
-
-
diff --git a/frontend/src/components/Spinner.svelte b/frontend/src/components/Spinner.svelte
index 81337b36..2dabee59 100644
--- a/frontend/src/components/Spinner.svelte
+++ b/frontend/src/components/Spinner.svelte
@@ -16,7 +16,7 @@
primary: 'text-primary dark:text-primary-light',
white: 'text-white',
current: 'text-current',
- muted: 'text-gray-400 dark:text-gray-500'
+ muted: 'text-fg-subtle dark:text-dark-fg-subtle'
};
let sizeClass = $derived(sizeClasses[size] || sizeClasses.medium);
diff --git a/frontend/src/components/ToastContainer.svelte b/frontend/src/components/ToastContainer.svelte
index 677f338f..a09fc119 100644
--- a/frontend/src/components/ToastContainer.svelte
+++ b/frontend/src/components/ToastContainer.svelte
@@ -64,7 +64,7 @@
});
function getToastClasses(type: ToastType): string {
- const base = "toast";
+ const base = "toast-item";
switch (type) {
case 'success':
return `${base} bg-green-50 border-green-200 text-green-800 dark:bg-green-950 dark:border-green-800 dark:text-green-200`;
@@ -101,7 +101,7 @@
}
function getTimerClasses(type: ToastType): string {
- const base = "timer";
+ const base = "toast-timer";
switch (type) {
case 'success': return `${base} bg-green-300 dark:bg-green-600`;
case 'error': return `${base} bg-red-300 dark:bg-red-600`;
@@ -112,7 +112,7 @@
}
-
+
{#each toastList as toast (toast.id)}
{/each}
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/frontend/src/components/__tests__/NotificationCenter.test.ts b/frontend/src/components/__tests__/NotificationCenter.test.ts
index 3b8d0cc9..e4e007f8 100644
--- a/frontend/src/components/__tests__/NotificationCenter.test.ts
+++ b/frontend/src/components/__tests__/NotificationCenter.test.ts
@@ -211,7 +211,7 @@ const iconTestCases = [
];
const priorityTestCases = [
- { severity: 'low' as const, css: '.text-gray-600' },
+ { severity: 'low' as const, css: '.text-fg-muted' },
{ severity: 'medium' as const, css: '.text-blue-600' },
{ severity: 'high' as const, css: '.text-orange-600' },
{ severity: 'urgent' as const, css: '.text-red-600' },
diff --git a/frontend/src/components/__tests__/Spinner.test.ts b/frontend/src/components/__tests__/Spinner.test.ts
index 3418df8a..f871f075 100644
--- a/frontend/src/components/__tests__/Spinner.test.ts
+++ b/frontend/src/components/__tests__/Spinner.test.ts
@@ -42,7 +42,7 @@ describe('Spinner', () => {
{ color: 'primary', expectedClass: 'text-primary' },
{ color: 'white', expectedClass: 'text-white' },
{ color: 'current', expectedClass: 'text-current' },
- { color: 'muted', expectedClass: 'text-gray-400' },
+ { color: 'muted', expectedClass: 'text-fg-subtle' },
] as const)('applies $expectedClass for color="$color"', ({ color, expectedClass }) => {
render(Spinner, { props: { color } });
expect(getSpinner().classList.contains(expectedClass)).toBe(true);
diff --git a/frontend/src/components/__tests__/ToastContainer.test.ts b/frontend/src/components/__tests__/ToastContainer.test.ts
index 8f9cedfe..351c0412 100644
--- a/frontend/src/components/__tests__/ToastContainer.test.ts
+++ b/frontend/src/components/__tests__/ToastContainer.test.ts
@@ -20,7 +20,7 @@ describe('ToastContainer', () => {
describe('rendering', () => {
it('renders empty container when no toasts', () => {
const { container } = render(ToastContainer);
- const toastContainer = container.querySelector('.toasts-container');
+ const toastContainer = container.querySelector('.toast-container');
expect(toastContainer).toBeInTheDocument();
expect(toastContainer?.children.length).toBe(0);
});
@@ -83,11 +83,11 @@ describe('ToastContainer', () => {
addToast('Timed toast', 'info');
await waitFor(() => {
- const timer = screen.getByRole('alert').querySelector('.timer');
+ const timer = screen.getByRole('alert').querySelector('.toast-timer');
expect(timer).toBeInTheDocument();
});
- const timer = screen.getByRole('alert').querySelector('.timer') as HTMLElement;
+ const timer = screen.getByRole('alert').querySelector('.toast-timer') as HTMLElement;
await vi.advanceTimersByTimeAsync(1000);
await waitFor(() => { expect(timer.style.transform).toContain('scaleX'); });
@@ -194,8 +194,8 @@ describe('ToastContainer', () => {
// Both toasts should have progress bars
const alerts = screen.getAllByRole('alert');
- expect(alerts[0].querySelector('.timer')).toBeInTheDocument();
- expect(alerts[1].querySelector('.timer')).toBeInTheDocument();
+ expect(alerts[0].querySelector('.toast-timer')).toBeInTheDocument();
+ expect(alerts[1].querySelector('.toast-timer')).toBeInTheDocument();
});
it('cleans up timers on unmount', async () => {
diff --git a/frontend/src/routes/Editor.svelte b/frontend/src/routes/Editor.svelte
index e85562e1..60254f26 100644
--- a/frontend/src/routes/Editor.svelte
+++ b/frontend/src/routes/Editor.svelte
@@ -807,7 +807,7 @@
-