diff --git a/surfsense_web/app/dashboard/[search_space_id]/documents/(manage)/components/DocumentsTableShell.tsx b/surfsense_web/app/dashboard/[search_space_id]/documents/(manage)/components/DocumentsTableShell.tsx index 38d61a6ce..6d28f9166 100644 --- a/surfsense_web/app/dashboard/[search_space_id]/documents/(manage)/components/DocumentsTableShell.tsx +++ b/surfsense_web/app/dashboard/[search_space_id]/documents/(manage)/components/DocumentsTableShell.tsx @@ -1,6 +1,6 @@ "use client"; -import { ChevronDown, ChevronUp, FileX, Loader2, Plus } from "lucide-react"; +import { ChevronDown, ChevronUp, FileX, Plus } from "lucide-react"; import { motion } from "motion/react"; import { useParams } from "next/navigation"; import { useTranslations } from "next-intl"; @@ -8,6 +8,7 @@ import React from "react"; import { useDocumentUploadDialog } from "@/components/assistant-ui/document-upload-popup"; import { DocumentViewer } from "@/components/document-viewer"; import { Button } from "@/components/ui/button"; +import { Spinner } from "@/components/ui/spinner"; import { Checkbox } from "@/components/ui/checkbox"; import { Table, @@ -114,7 +115,7 @@ export function DocumentsTableShell({ {loading ? (
- +

{t("loading")}

diff --git a/surfsense_web/app/dashboard/[search_space_id]/editor/[documentId]/page.tsx b/surfsense_web/app/dashboard/[search_space_id]/editor/[documentId]/page.tsx index 2320b3b9a..74104f450 100644 --- a/surfsense_web/app/dashboard/[search_space_id]/editor/[documentId]/page.tsx +++ b/surfsense_web/app/dashboard/[search_space_id]/editor/[documentId]/page.tsx @@ -1,8 +1,7 @@ "use client"; -import { useQueryClient } from "@tanstack/react-query"; import { useAtom } from "jotai"; -import { AlertCircle, ArrowLeft, FileText, Loader2, Save } from "lucide-react"; +import { AlertCircle, ArrowLeft, FileText, Save } from "lucide-react"; import { motion } from "motion/react"; import { useParams, useRouter } from "next/navigation"; import { useEffect, useMemo, useState } from "react"; @@ -21,6 +20,7 @@ import { } from "@/components/ui/alert-dialog"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Spinner } from "@/components/ui/spinner"; import { notesApiService } from "@/lib/apis/notes-api.service"; import { authenticatedFetch, getBearerToken, redirectToLogin } from "@/lib/auth-utils"; @@ -78,7 +78,6 @@ function extractTitleFromBlockNote(blocknoteDocument: BlockNoteDocument): string export default function EditorPage() { const params = useParams(); const router = useRouter(); - const queryClient = useQueryClient(); const documentId = params.documentId as string; const searchSpaceId = Number(params.search_space_id); const isNewNote = documentId === "new"; @@ -349,8 +348,8 @@ export default function EditorPage() {
- -

Loading editor...

+ +

Loading editor

@@ -437,7 +436,7 @@ export default function EditorPage() { > {saving ? ( <> - + {isNewNote ? "Creating" : "Saving"} ) : ( diff --git a/surfsense_web/app/dashboard/[search_space_id]/onboard/page.tsx b/surfsense_web/app/dashboard/[search_space_id]/onboard/page.tsx index 25f189203..1b7fa297f 100644 --- a/surfsense_web/app/dashboard/[search_space_id]/onboard/page.tsx +++ b/surfsense_web/app/dashboard/[search_space_id]/onboard/page.tsx @@ -1,7 +1,6 @@ "use client"; import { useAtomValue } from "jotai"; -import { Loader2 } from "lucide-react"; import { motion } from "motion/react"; import { useParams, useRouter } from "next/navigation"; import { useEffect, useRef, useState } from "react"; @@ -17,6 +16,7 @@ import { import { Logo } from "@/components/Logo"; import { LLMConfigForm, type LLMConfigFormData } from "@/components/shared/llm-config-form"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Spinner } from "@/components/ui/spinner"; import { getBearerToken, redirectToLogin } from "@/lib/auth-utils"; export default function OnboardPage() { @@ -156,7 +156,7 @@ export default function OnboardPage() {
- +
diff --git a/surfsense_web/app/dashboard/[search_space_id]/team/page.tsx b/surfsense_web/app/dashboard/[search_space_id]/team/page.tsx index b661e9222..c535da9f1 100644 --- a/surfsense_web/app/dashboard/[search_space_id]/team/page.tsx +++ b/surfsense_web/app/dashboard/[search_space_id]/team/page.tsx @@ -14,7 +14,6 @@ import { Hash, Link2, LinkIcon, - Loader2, Logs, type LucideIcon, MessageCircle, @@ -106,6 +105,7 @@ import { } from "@/components/ui/table"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Textarea } from "@/components/ui/textarea"; +import { Spinner } from "@/components/ui/spinner"; import type { CreateInviteRequest, DeleteInviteRequest, @@ -321,7 +321,7 @@ export default function TeamManagementPage() { animate={{ opacity: 1, scale: 1 }} className="flex flex-col items-center gap-4" > - +

Loading team data...

@@ -571,7 +571,7 @@ function MembersTab({ if (loading) { return (
- +
); } @@ -911,7 +911,7 @@ function RolesTab({ if (loading) { return (
- +
); } @@ -1068,7 +1068,7 @@ function InvitesTab({ if (loading) { return (
- +
); } @@ -1446,7 +1446,7 @@ function CreateInviteDialog({
diff --git a/surfsense_web/app/invite/[invite_code]/page.tsx b/surfsense_web/app/invite/[invite_code]/page.tsx index 1f2a786a5..a778962b4 100644 --- a/surfsense_web/app/invite/[invite_code]/page.tsx +++ b/surfsense_web/app/invite/[invite_code]/page.tsx @@ -6,8 +6,6 @@ import { AlertCircle, ArrowRight, CheckCircle2, - Clock, - Loader2, LogIn, Shield, Sparkles, @@ -30,6 +28,7 @@ import { CardHeader, CardTitle, } from "@/components/ui/card"; +import { Spinner } from "@/components/ui/spinner"; import type { AcceptInviteResponse } from "@/contracts/types/invites.types"; import { invitesApiService } from "@/lib/apis/invites-api.service"; import { getBearerToken } from "@/lib/auth-utils"; @@ -164,7 +163,7 @@ export default function InviteAcceptPage() { animate={{ rotate: 360 }} transition={{ duration: 1, repeat: Infinity, ease: "linear" }} > - +

Loading invite details...

@@ -353,7 +352,7 @@ export default function InviteAcceptPage() { @@ -33,8 +34,9 @@ export function CommentActions({ canEdit, canDelete, onEdit, onDelete }: Comment Edit )} + {canEdit && canDelete && } {canDelete && ( - + Delete diff --git a/surfsense_web/components/chat-comments/member-mention-picker/member-mention-picker.tsx b/surfsense_web/components/chat-comments/member-mention-picker/member-mention-picker.tsx index 77ba1b697..78dff877a 100644 --- a/surfsense_web/components/chat-comments/member-mention-picker/member-mention-picker.tsx +++ b/surfsense_web/components/chat-comments/member-mention-picker/member-mention-picker.tsx @@ -1,7 +1,7 @@ "use client"; -import { Loader2 } from "lucide-react"; import { ScrollArea } from "@/components/ui/scroll-area"; +import { Spinner } from "@/components/ui/spinner"; import { MemberMentionItem } from "./member-mention-item"; import type { MemberMentionPickerProps } from "./types"; @@ -24,7 +24,7 @@ export function MemberMentionPicker({ if (isLoading) { return (
- +
); } diff --git a/surfsense_web/components/connectors/composio-drive-folder-tree.tsx b/surfsense_web/components/connectors/composio-drive-folder-tree.tsx index 76ae218cb..bc6330faa 100644 --- a/surfsense_web/components/connectors/composio-drive-folder-tree.tsx +++ b/surfsense_web/components/connectors/composio-drive-folder-tree.tsx @@ -10,12 +10,12 @@ import { FolderOpen, HardDrive, Image, - Loader2, Presentation, } from "lucide-react"; import { useState } from "react"; import { Checkbox } from "@/components/ui/checkbox"; import { ScrollArea } from "@/components/ui/scroll-area"; +import { Spinner } from "@/components/ui/spinner"; import { useComposioDriveFolders } from "@/hooks/use-composio-drive-folders"; import { connectorsApiService } from "@/lib/apis/connectors-api.service"; import { cn } from "@/lib/utils"; @@ -253,7 +253,7 @@ export function ComposioDriveFolderTree({ aria-label={isExpanded ? `Collapse ${item.name}` : `Expand ${item.name}`} > {isLoading ? ( - + ) : isExpanded ? ( ) : ( @@ -344,7 +344,7 @@ export function ComposioDriveFolderTree({ {isLoadingRoot && (
- +
)} diff --git a/surfsense_web/components/connectors/google-drive-folder-tree.tsx b/surfsense_web/components/connectors/google-drive-folder-tree.tsx index 30df2d788..bb6fd822e 100644 --- a/surfsense_web/components/connectors/google-drive-folder-tree.tsx +++ b/surfsense_web/components/connectors/google-drive-folder-tree.tsx @@ -10,12 +10,12 @@ import { FolderOpen, HardDrive, Image, - Loader2, Presentation, } from "lucide-react"; import { useState } from "react"; import { Checkbox } from "@/components/ui/checkbox"; import { ScrollArea } from "@/components/ui/scroll-area"; +import { Spinner } from "@/components/ui/spinner"; import { useGoogleDriveFolders } from "@/hooks/use-google-drive-folders"; import { connectorsApiService } from "@/lib/apis/connectors-api.service"; import { cn } from "@/lib/utils"; @@ -253,7 +253,7 @@ export function GoogleDriveFolderTree({ aria-label={isExpanded ? `Collapse ${item.name}` : `Expand ${item.name}`} > {isLoading ? ( - + ) : isExpanded ? ( ) : ( @@ -344,7 +344,7 @@ export function GoogleDriveFolderTree({ {isLoadingRoot && (
- +
)} diff --git a/surfsense_web/components/layout/ui/dialogs/CreateSearchSpaceDialog.tsx b/surfsense_web/components/layout/ui/dialogs/CreateSearchSpaceDialog.tsx index 427cbd31b..c0f92b440 100644 --- a/surfsense_web/components/layout/ui/dialogs/CreateSearchSpaceDialog.tsx +++ b/surfsense_web/components/layout/ui/dialogs/CreateSearchSpaceDialog.tsx @@ -2,7 +2,7 @@ import { zodResolver } from "@hookform/resolvers/zod"; import { useAtomValue } from "jotai"; -import { Loader2, Plus, Search } from "lucide-react"; +import { Plus, Search } from "lucide-react"; import { useTranslations } from "next-intl"; import { useState } from "react"; import { useForm } from "react-hook-form"; @@ -26,6 +26,7 @@ import { FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; +import { Spinner } from "@/components/ui/spinner"; import { trackSearchSpaceCreated } from "@/lib/posthog/events"; const formSchema = z.object({ @@ -145,7 +146,7 @@ export function CreateSearchSpaceDialog({ open, onOpenChange }: CreateSearchSpac @@ -337,7 +337,7 @@ export function MediaCardLoading({ title = "Loading preview..." }: { title?: str return (
- +
diff --git a/surfsense_web/components/tool-ui/write-todos.tsx b/surfsense_web/components/tool-ui/write-todos.tsx index a5da31e9e..9b959bd33 100644 --- a/surfsense_web/components/tool-ui/write-todos.tsx +++ b/surfsense_web/components/tool-ui/write-todos.tsx @@ -2,7 +2,6 @@ import { makeAssistantToolUI, useAssistantState } from "@assistant-ui/react"; import { useAtomValue, useSetAtom } from "jotai"; -import { Loader2 } from "lucide-react"; import { useEffect, useMemo } from "react"; import { z } from "zod"; import { @@ -11,6 +10,7 @@ import { registerPlanOwner, updatePlanStateAtom, } from "@/atoms/chat/plan-state.atom"; +import { Spinner } from "@/components/ui/spinner"; import { Plan, PlanErrorBoundary, parseSerializablePlan, TodoStatusSchema } from "./plan"; // ============================================================================ @@ -46,7 +46,7 @@ function WriteTodosLoading() { return (
- + Creating plan...
diff --git a/surfsense_web/messages/en.json b/surfsense_web/messages/en.json index 59b9cf56a..f23359bf2 100644 --- a/surfsense_web/messages/en.json +++ b/surfsense_web/messages/en.json @@ -321,10 +321,10 @@ "columns": "Columns", "confirm_delete": "Confirm Delete", "confirm_delete_desc": "Are you sure you want to delete {count} document(s)? This action cannot be undone.", - "uploading": "Uploading...", + "uploading": "Uploading", "upload_success": "Document uploaded successfully", "upload_failed": "Failed to upload document", - "loading": "Loading documents...", + "loading": "Loading documents", "error_loading": "Error loading documents", "retry": "Retry", "no_documents": "No documents found", @@ -391,8 +391,8 @@ "selected_files": "Selected Files ({count})", "total_size": "Total size", "clear_all": "Clear all", - "uploading_files": "Uploading files...", - "uploading": "Uploading...", + "uploading_files": "Uploading files", + "uploading": "Uploading", "upload_button": "Upload {count} {count, plural, one {file} other {files}}", "upload_initiated": "Upload Task Initiated", "upload_initiated_desc": "Files Uploading Initiated",