diff --git a/src/app/components/accessibility/ScreenReaderOptimizer.tsx b/src/app/components/accessibility/ScreenReaderOptimizer.tsx
index b1dc78a8..698d3360 100644
--- a/src/app/components/accessibility/ScreenReaderOptimizer.tsx
+++ b/src/app/components/accessibility/ScreenReaderOptimizer.tsx
@@ -104,11 +104,19 @@ export function AccessibleDescription({ id, children }: AccessibleDescriptionPro
interface AccessibleLoadingProps {
message?: string;
isLoading: boolean;
+ className?: string;
+ spinnerClassName?: string;
+ showText?: boolean;
+ spinner?: React.ReactNode;
}
export function AccessibleLoading({
message = 'Loading content',
isLoading,
+ className = 'flex items-center justify-center p-4',
+ spinnerClassName = 'animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600',
+ showText = false,
+ spinner,
}: AccessibleLoadingProps) {
const announce = useScreenReaderAnnouncement();
@@ -127,10 +135,14 @@ export function AccessibleLoading({
role="status"
aria-live="polite"
aria-busy="true"
- className="flex items-center justify-center p-4"
+ className={className}
>
-
- {message}
+ {spinner || }
+ {showText ? (
+ {message}
+ ) : (
+ {message}
+ )}
);
}
diff --git a/src/app/components/dashboard/widgets/LearningStreakWidget.tsx b/src/app/components/dashboard/widgets/LearningStreakWidget.tsx
index ec16e53b..9b075cde 100644
--- a/src/app/components/dashboard/widgets/LearningStreakWidget.tsx
+++ b/src/app/components/dashboard/widgets/LearningStreakWidget.tsx
@@ -1,4 +1,4 @@
-import React, { useEffect, useState } from 'react';
+import { AccessibleLoading } from '../../accessibility/ScreenReaderOptimizer';
import { motion } from 'framer-motion';
import { Flame, Trophy, Target, Settings } from 'lucide-react';
@@ -177,7 +177,7 @@ export const LearningStreakWidget: React.FC = ({
{/* Content */}
- {isLoading &&
Loading…
}
+ {isLoading &&
}
{error &&
{error}
}
{/* Current Streak */}
diff --git a/src/app/components/dashboard/widgets/ProgressSummaryWidget.tsx b/src/app/components/dashboard/widgets/ProgressSummaryWidget.tsx
index 2ad0790f..a0ea93b8 100644
--- a/src/app/components/dashboard/widgets/ProgressSummaryWidget.tsx
+++ b/src/app/components/dashboard/widgets/ProgressSummaryWidget.tsx
@@ -2,7 +2,7 @@
import React, { useEffect, useState } from 'react';
import { motion } from 'framer-motion';
-import { DollarSign, Users, BarChart3, BookOpen, TrendingUp, Settings } from 'lucide-react';
+import { AccessibleLoading } from '../../accessibility/ScreenReaderOptimizer';
interface ProgressSummaryWidgetProps {
id: string;
@@ -162,7 +162,7 @@ export const ProgressSummaryWidget: React.FC
= ({
layout
className="bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 p-6 hover:shadow-md transition-shadow"
>
- {isLoading && Loading…
}
+ {isLoading && }
{error && {error}
}
@@ -321,7 +321,7 @@ export const ProgressSummaryWidget: React.FC
= ({
{/* Content */}
- {isLoading &&
Loading…
}
+ {isLoading &&
}
{error &&
{error}
}
diff --git a/src/app/components/dashboard/widgets/RecentActivityWidget.tsx b/src/app/components/dashboard/widgets/RecentActivityWidget.tsx
index f2c4ba6a..2cf9d003 100644
--- a/src/app/components/dashboard/widgets/RecentActivityWidget.tsx
+++ b/src/app/components/dashboard/widgets/RecentActivityWidget.tsx
@@ -1,6 +1,6 @@
'use client';
-import React, { useEffect, useState } from 'react';
+import { AccessibleLoading } from '../../accessibility/ScreenReaderOptimizer';
import { motion } from 'framer-motion';
import { Activity, Settings, Clock } from 'lucide-react';
import { format } from 'date-fns';
@@ -245,7 +245,7 @@ export const RecentActivityWidget: React.FC
= ({
{/* Content */}
- {isLoading &&
Loading…
}
+ {isLoading &&
}
{error &&
{error}
}
{/* Subtitle */}
diff --git a/src/app/components/dashboard/widgets/RecentSalesWidget.tsx b/src/app/components/dashboard/widgets/RecentSalesWidget.tsx
index 786ed029..f65b1eaa 100644
--- a/src/app/components/dashboard/widgets/RecentSalesWidget.tsx
+++ b/src/app/components/dashboard/widgets/RecentSalesWidget.tsx
@@ -1,6 +1,7 @@
'use client';
import React, { useEffect, useState } from 'react';
+import { AccessibleLoading } from '../../accessibility/ScreenReaderOptimizer';
import { motion } from 'framer-motion';
import { DollarSign, Settings } from 'lucide-react';
import { format } from 'date-fns';
@@ -236,7 +237,7 @@ export const RecentSalesWidget: React.FC
= ({
{/* Content */}
- {isLoading &&
Loading…
}
+ {isLoading &&
}
{error &&
{error}
}
{/* Subtitle */}
diff --git a/src/app/components/dashboard/widgets/RecommendedCoursesWidget.tsx b/src/app/components/dashboard/widgets/RecommendedCoursesWidget.tsx
index 11ca5408..8c545625 100644
--- a/src/app/components/dashboard/widgets/RecommendedCoursesWidget.tsx
+++ b/src/app/components/dashboard/widgets/RecommendedCoursesWidget.tsx
@@ -1,4 +1,5 @@
import React, { useEffect, useState } from 'react';
+import { AccessibleLoading } from '../../accessibility/ScreenReaderOptimizer';
import { motion } from 'framer-motion';
import { BookOpen, Star, Clock, Users, Settings } from 'lucide-react';
@@ -217,7 +218,7 @@ export const RecommendedCoursesWidget: React.FC
=
- {isLoading &&
Loading...
}
+ {isLoading &&
}
{error &&
{error}
}
{recommendedCourses.map((course, index) => (
= (
{/* Content */}
- {isLoading &&
Loading…
}
+ {isLoading &&
}
{error &&
{error}
}
{/* Subtitle */}
diff --git a/src/components/forms/SubmitButton.tsx b/src/components/forms/SubmitButton.tsx
index 543308f3..77ece121 100644
--- a/src/components/forms/SubmitButton.tsx
+++ b/src/components/forms/SubmitButton.tsx
@@ -13,27 +13,11 @@
*/
import React from 'react';
+import { AccessibleLoading } from '../../app/components/accessibility/ScreenReaderOptimizer';
// ─── Spinner ──────────────────────────────────────────────────────────────────
-function Spinner({ className = '' }: { className?: string }) {
- return (
-
- );
-}
+
// ─── Props ────────────────────────────────────────────────────────────────────
@@ -73,10 +57,13 @@ export const SubmitButton: React.FC
= ({
{...props}
>
{isLoading ? (
-
-
- {loadingText}
-
+
) : (
children
)}