diff --git a/frontend/src/app/admin/page.tsx b/frontend/app/admin/page.tsx similarity index 100% rename from frontend/src/app/admin/page.tsx rename to frontend/app/admin/page.tsx diff --git a/frontend/src/app/api/[...path]/route.ts b/frontend/app/api/[...path]/route.ts similarity index 100% rename from frontend/src/app/api/[...path]/route.ts rename to frontend/app/api/[...path]/route.ts diff --git a/frontend/src/app/api/get-query-client.ts b/frontend/app/api/get-query-client.ts similarity index 100% rename from frontend/src/app/api/get-query-client.ts rename to frontend/app/api/get-query-client.ts diff --git a/frontend/src/app/api/mutations/useCancelTaskMutation.ts b/frontend/app/api/mutations/useCancelTaskMutation.ts similarity index 100% rename from frontend/src/app/api/mutations/useCancelTaskMutation.ts rename to frontend/app/api/mutations/useCancelTaskMutation.ts diff --git a/frontend/src/app/api/mutations/useCreateFilter.ts b/frontend/app/api/mutations/useCreateFilter.ts similarity index 100% rename from frontend/src/app/api/mutations/useCreateFilter.ts rename to frontend/app/api/mutations/useCreateFilter.ts diff --git a/frontend/src/app/api/mutations/useDeleteDocument.ts b/frontend/app/api/mutations/useDeleteDocument.ts similarity index 100% rename from frontend/src/app/api/mutations/useDeleteDocument.ts rename to frontend/app/api/mutations/useDeleteDocument.ts diff --git a/frontend/src/app/api/mutations/useDeleteFilter.ts b/frontend/app/api/mutations/useDeleteFilter.ts similarity index 100% rename from frontend/src/app/api/mutations/useDeleteFilter.ts rename to frontend/app/api/mutations/useDeleteFilter.ts diff --git a/frontend/src/app/api/mutations/useOnboardingMutation.ts b/frontend/app/api/mutations/useOnboardingMutation.ts similarity index 100% rename from frontend/src/app/api/mutations/useOnboardingMutation.ts rename to frontend/app/api/mutations/useOnboardingMutation.ts diff --git a/frontend/src/app/api/mutations/useUpdateFilter.ts b/frontend/app/api/mutations/useUpdateFilter.ts similarity index 100% rename from frontend/src/app/api/mutations/useUpdateFilter.ts rename to frontend/app/api/mutations/useUpdateFilter.ts diff --git a/frontend/src/app/api/mutations/useUpdateSettingsMutation.ts b/frontend/app/api/mutations/useUpdateSettingsMutation.ts similarity index 100% rename from frontend/src/app/api/mutations/useUpdateSettingsMutation.ts rename to frontend/app/api/mutations/useUpdateSettingsMutation.ts diff --git a/frontend/src/app/api/queries/useDeleteSessionMutation.ts b/frontend/app/api/queries/useDeleteSessionMutation.ts similarity index 100% rename from frontend/src/app/api/queries/useDeleteSessionMutation.ts rename to frontend/app/api/queries/useDeleteSessionMutation.ts diff --git a/frontend/src/app/api/queries/useDoclingHealthQuery.ts b/frontend/app/api/queries/useDoclingHealthQuery.ts similarity index 100% rename from frontend/src/app/api/queries/useDoclingHealthQuery.ts rename to frontend/app/api/queries/useDoclingHealthQuery.ts diff --git a/frontend/src/app/api/queries/useGetConversationsQuery.ts b/frontend/app/api/queries/useGetConversationsQuery.ts similarity index 100% rename from frontend/src/app/api/queries/useGetConversationsQuery.ts rename to frontend/app/api/queries/useGetConversationsQuery.ts diff --git a/frontend/src/app/api/queries/useGetFiltersSearchQuery.ts b/frontend/app/api/queries/useGetFiltersSearchQuery.ts similarity index 100% rename from frontend/src/app/api/queries/useGetFiltersSearchQuery.ts rename to frontend/app/api/queries/useGetFiltersSearchQuery.ts diff --git a/frontend/src/app/api/queries/useGetModelsQuery.ts b/frontend/app/api/queries/useGetModelsQuery.ts similarity index 100% rename from frontend/src/app/api/queries/useGetModelsQuery.ts rename to frontend/app/api/queries/useGetModelsQuery.ts diff --git a/frontend/src/app/api/queries/useGetNudgesQuery.ts b/frontend/app/api/queries/useGetNudgesQuery.ts similarity index 100% rename from frontend/src/app/api/queries/useGetNudgesQuery.ts rename to frontend/app/api/queries/useGetNudgesQuery.ts diff --git a/frontend/src/app/api/queries/useGetSearchAggregations.ts b/frontend/app/api/queries/useGetSearchAggregations.ts similarity index 100% rename from frontend/src/app/api/queries/useGetSearchAggregations.ts rename to frontend/app/api/queries/useGetSearchAggregations.ts diff --git a/frontend/src/app/api/queries/useGetSearchQuery.ts b/frontend/app/api/queries/useGetSearchQuery.ts similarity index 100% rename from frontend/src/app/api/queries/useGetSearchQuery.ts rename to frontend/app/api/queries/useGetSearchQuery.ts diff --git a/frontend/src/app/api/queries/useGetSettingsQuery.ts b/frontend/app/api/queries/useGetSettingsQuery.ts similarity index 100% rename from frontend/src/app/api/queries/useGetSettingsQuery.ts rename to frontend/app/api/queries/useGetSettingsQuery.ts diff --git a/frontend/src/app/api/queries/useGetTasksQuery.ts b/frontend/app/api/queries/useGetTasksQuery.ts similarity index 100% rename from frontend/src/app/api/queries/useGetTasksQuery.ts rename to frontend/app/api/queries/useGetTasksQuery.ts diff --git a/frontend/src/app/api/queries/useProviderHealthQuery.ts b/frontend/app/api/queries/useProviderHealthQuery.ts similarity index 100% rename from frontend/src/app/api/queries/useProviderHealthQuery.ts rename to frontend/app/api/queries/useProviderHealthQuery.ts diff --git a/frontend/src/app/auth/callback/page.tsx b/frontend/app/auth/callback/page.tsx similarity index 97% rename from frontend/src/app/auth/callback/page.tsx rename to frontend/app/auth/callback/page.tsx index d12637f9..83c0cf96 100644 --- a/frontend/src/app/auth/callback/page.tsx +++ b/frontend/app/auth/callback/page.tsx @@ -1,7 +1,10 @@ "use client"; -import { useEffect, useState, Suspense } from "react"; +import { ArrowLeft, CheckCircle, Loader2, XCircle } from "lucide-react"; import { useRouter, useSearchParams } from "next/navigation"; +import { Suspense, useEffect, useState } from "react"; +import AnimatedProcessingIcon from "@/components/icons/animated-processing-icon"; +import { Button } from "@/components/ui/button"; import { Card, CardContent, @@ -9,10 +12,7 @@ import { CardHeader, CardTitle, } from "@/components/ui/card"; -import { Button } from "@/components/ui/button"; -import { Loader2, CheckCircle, XCircle, ArrowLeft } from "lucide-react"; import { useAuth } from "@/contexts/auth-context"; -import AnimatedProcessingIcon from "@/components/ui/animated-processing-icon"; function AuthCallbackContent() { const router = useRouter(); diff --git a/frontend/src/app/chat/components/assistant-message.tsx b/frontend/app/chat/_components/assistant-message.tsx similarity index 87% rename from frontend/src/app/chat/components/assistant-message.tsx rename to frontend/app/chat/_components/assistant-message.tsx index 0f24dd8c..91626376 100644 --- a/frontend/src/app/chat/components/assistant-message.tsx +++ b/frontend/app/chat/_components/assistant-message.tsx @@ -1,9 +1,9 @@ import { GitBranch } from "lucide-react"; import { motion } from "motion/react"; -import DogIcon from "@/components/logo/dog-icon"; +import DogIcon from "@/components/icons/dog-icon"; import { MarkdownRenderer } from "@/components/markdown-renderer"; import { cn } from "@/lib/utils"; -import type { FunctionCall } from "../types"; +import type { FunctionCall } from "../_types/types"; import { FunctionCalls } from "./function-calls"; import { Message } from "./message"; @@ -83,10 +83,10 @@ export function AssistantMessage({ )} chatMessage={ isStreaming - ? (content.trim() - ? content + - ' ' - : 'Thinking') + ? content.trim() + ? content + + ' ' + : 'Thinking' : content } /> diff --git a/frontend/src/app/chat/components/chat-input.tsx b/frontend/app/chat/_components/chat-input.tsx similarity index 99% rename from frontend/src/app/chat/components/chat-input.tsx rename to frontend/app/chat/_components/chat-input.tsx index 8aab4bd9..aeb44073 100644 --- a/frontend/src/app/chat/components/chat-input.tsx +++ b/frontend/app/chat/_components/chat-input.tsx @@ -8,7 +8,7 @@ import { PopoverAnchor, PopoverContent, } from "@/components/ui/popover"; -import type { KnowledgeFilterData } from "../types"; +import type { KnowledgeFilterData } from "../_types/types"; import { FilePreview } from "./file-preview"; import { SelectedKnowledgeFilter } from "./selected-knowledge-filter"; diff --git a/frontend/src/app/chat/components/file-preview.tsx b/frontend/app/chat/_components/file-preview.tsx similarity index 100% rename from frontend/src/app/chat/components/file-preview.tsx rename to frontend/app/chat/_components/file-preview.tsx diff --git a/frontend/src/app/chat/components/function-calls.tsx b/frontend/app/chat/_components/function-calls.tsx similarity index 99% rename from frontend/src/app/chat/components/function-calls.tsx rename to frontend/app/chat/_components/function-calls.tsx index 3d6624ea..fa4f7591 100644 --- a/frontend/src/app/chat/components/function-calls.tsx +++ b/frontend/app/chat/_components/function-calls.tsx @@ -1,5 +1,5 @@ import { ChevronDown, ChevronRight, Settings } from "lucide-react"; -import type { FunctionCall } from "../types"; +import type { FunctionCall } from "../_types/types"; interface FunctionCallsProps { functionCalls: FunctionCall[]; diff --git a/frontend/src/app/chat/components/message.tsx b/frontend/app/chat/_components/message.tsx similarity index 100% rename from frontend/src/app/chat/components/message.tsx rename to frontend/app/chat/_components/message.tsx diff --git a/frontend/src/app/chat/nudges.tsx b/frontend/app/chat/_components/nudges.tsx similarity index 100% rename from frontend/src/app/chat/nudges.tsx rename to frontend/app/chat/_components/nudges.tsx diff --git a/frontend/src/app/chat/components/selected-knowledge-filter.tsx b/frontend/app/chat/_components/selected-knowledge-filter.tsx similarity index 93% rename from frontend/src/app/chat/components/selected-knowledge-filter.tsx rename to frontend/app/chat/_components/selected-knowledge-filter.tsx index 098bd30e..c2365cbe 100644 --- a/frontend/src/app/chat/components/selected-knowledge-filter.tsx +++ b/frontend/app/chat/_components/selected-knowledge-filter.tsx @@ -1,7 +1,7 @@ import { X } from "lucide-react"; -import type { KnowledgeFilterData } from "../types"; -import { filterAccentClasses } from "@/components/knowledge-filter-panel"; import type { FilterColor } from "@/components/filter-icon-popover"; +import { filterAccentClasses } from "@/components/knowledge-filter-panel"; +import type { KnowledgeFilterData } from "../_types/types"; interface SelectedKnowledgeFilterProps { selectedFilter: KnowledgeFilterData; diff --git a/frontend/src/app/chat/components/user-message.tsx b/frontend/app/chat/_components/user-message.tsx similarity index 100% rename from frontend/src/app/chat/components/user-message.tsx rename to frontend/app/chat/_components/user-message.tsx diff --git a/frontend/src/app/chat/types.ts b/frontend/app/chat/_types/types.ts similarity index 100% rename from frontend/src/app/chat/types.ts rename to frontend/app/chat/_types/types.ts diff --git a/frontend/src/app/chat/page.tsx b/frontend/app/chat/page.tsx similarity index 99% rename from frontend/src/app/chat/page.tsx rename to frontend/app/chat/page.tsx index 36709b38..d63fc92a 100644 --- a/frontend/src/app/chat/page.tsx +++ b/frontend/app/chat/page.tsx @@ -12,10 +12,10 @@ import { useChatStreaming } from "@/hooks/useChatStreaming"; import { FILE_CONFIRMATION, FILES_REGEX } from "@/lib/constants"; import { useLoadingStore } from "@/stores/loadingStore"; import { useGetNudgesQuery } from "../api/queries/useGetNudgesQuery"; -import { AssistantMessage } from "./components/assistant-message"; -import { ChatInput, type ChatInputHandle } from "./components/chat-input"; -import { UserMessage } from "./components/user-message"; -import Nudges from "./nudges"; +import { AssistantMessage } from "./_components/assistant-message"; +import { ChatInput, type ChatInputHandle } from "./_components/chat-input"; +import Nudges from "./_components/nudges"; +import { UserMessage } from "./_components/user-message"; import type { FunctionCall, KnowledgeFilterData, @@ -23,7 +23,7 @@ import type { RequestBody, SelectedFilters, ToolCallResult, -} from "./types"; +} from "./_types/types"; function ChatPage() { const isDebugMode = process.env.NEXT_PUBLIC_OPENRAG_DEBUG === "true"; diff --git a/frontend/src/app/connectors/page.tsx b/frontend/app/connectors/page.tsx similarity index 100% rename from frontend/src/app/connectors/page.tsx rename to frontend/app/connectors/page.tsx diff --git a/frontend/src/app/favicon.ico b/frontend/app/favicon.ico similarity index 100% rename from frontend/src/app/favicon.ico rename to frontend/app/favicon.ico diff --git a/frontend/src/app/globals.css b/frontend/app/globals.css similarity index 100% rename from frontend/src/app/globals.css rename to frontend/app/globals.css diff --git a/frontend/src/app/icon.png b/frontend/app/icon.png similarity index 100% rename from frontend/src/app/icon.png rename to frontend/app/icon.png diff --git a/frontend/src/app/knowledge/chunks/page.tsx b/frontend/app/knowledge/chunks/page.tsx similarity index 100% rename from frontend/src/app/knowledge/chunks/page.tsx rename to frontend/app/knowledge/chunks/page.tsx diff --git a/frontend/src/app/knowledge/page.tsx b/frontend/app/knowledge/page.tsx similarity index 97% rename from frontend/src/app/knowledge/page.tsx rename to frontend/app/knowledge/page.tsx index ebc41d3c..3ddf71af 100644 --- a/frontend/src/app/knowledge/page.tsx +++ b/frontend/app/knowledge/page.tsx @@ -31,11 +31,11 @@ import { DialogTrigger, } from "@/components/ui/dialog"; import { StatusBadge } from "@/components/ui/status-badge"; -import { DeleteConfirmationDialog } from "../../../components/confirmation-dialog"; +import { DeleteConfirmationDialog } from "../../components/delete-confirmation-dialog"; +import GoogleDriveIcon from "../../components/icons/google-drive-logo"; +import OneDriveIcon from "../../components/icons/one-drive-logo"; +import SharePointIcon from "../../components/icons/share-point-logo"; import { useDeleteDocument } from "../api/mutations/useDeleteDocument"; -import GoogleDriveIcon from "../settings/icons/google-drive-icon"; -import OneDriveIcon from "../settings/icons/one-drive-icon"; -import SharePointIcon from "../settings/icons/share-point-icon"; // Function to get the appropriate icon for a connector type function getSourceIcon(connectorType?: string) { diff --git a/frontend/src/app/layout.tsx b/frontend/app/layout.tsx similarity index 100% rename from frontend/src/app/layout.tsx rename to frontend/app/layout.tsx diff --git a/frontend/src/app/login/page.tsx b/frontend/app/login/page.tsx similarity index 95% rename from frontend/src/app/login/page.tsx rename to frontend/app/login/page.tsx index e6d91bca..b05e2b0e 100644 --- a/frontend/src/app/login/page.tsx +++ b/frontend/app/login/page.tsx @@ -3,8 +3,8 @@ import { Loader2 } from "lucide-react"; import { useRouter, useSearchParams } from "next/navigation"; import { Suspense, useEffect } from "react"; -import GoogleLogo from "@/components/logo/google-logo"; -import Logo from "@/components/logo/logo"; +import GoogleLogo from "@/components/icons/google-logo"; +import Logo from "@/components/icons/openrag-logo"; import { Button } from "@/components/ui/button"; import { useAuth } from "@/contexts/auth-context"; diff --git a/frontend/src/app/onboarding/components/advanced.tsx b/frontend/app/onboarding/_components/advanced.tsx similarity index 100% rename from frontend/src/app/onboarding/components/advanced.tsx rename to frontend/app/onboarding/_components/advanced.tsx diff --git a/frontend/src/app/onboarding/components/animated-provider-steps.tsx b/frontend/app/onboarding/_components/animated-provider-steps.tsx similarity index 98% rename from frontend/src/app/onboarding/components/animated-provider-steps.tsx rename to frontend/app/onboarding/_components/animated-provider-steps.tsx index 7239718b..79188ba0 100644 --- a/frontend/src/app/onboarding/components/animated-provider-steps.tsx +++ b/frontend/app/onboarding/_components/animated-provider-steps.tsx @@ -3,14 +3,13 @@ import { AnimatePresence, motion } from "framer-motion"; import { CheckIcon, XIcon } from "lucide-react"; import { useEffect, useState } from "react"; - +import AnimatedProcessingIcon from "@/components/icons/animated-processing-icon"; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from "@/components/ui/accordion"; -import AnimatedProcessingIcon from "@/components/ui/animated-processing-icon"; import { cn } from "@/lib/utils"; export function AnimatedProviderSteps({ diff --git a/frontend/src/app/onboarding/components/anthropic-onboarding.tsx b/frontend/app/onboarding/_components/anthropic-onboarding.tsx similarity index 95% rename from frontend/src/app/onboarding/components/anthropic-onboarding.tsx rename to frontend/app/onboarding/_components/anthropic-onboarding.tsx index 3fb75bb8..d58fc1ba 100644 --- a/frontend/src/app/onboarding/components/anthropic-onboarding.tsx +++ b/frontend/app/onboarding/_components/anthropic-onboarding.tsx @@ -1,8 +1,8 @@ import type { Dispatch, SetStateAction } from "react"; import { useEffect, useState } from "react"; +import AnthropicLogo from "@/components/icons/anthropic-logo"; import { LabelInput } from "@/components/label-input"; import { LabelWrapper } from "@/components/label-wrapper"; -import AnthropicLogo from "@/components/logo/anthropic-logo"; import { Switch } from "@/components/ui/switch"; import { Tooltip, @@ -12,8 +12,8 @@ import { import { useDebouncedValue } from "@/lib/debounce"; import type { OnboardingVariables } from "../../api/mutations/useOnboardingMutation"; import { useGetAnthropicModelsQuery } from "../../api/queries/useGetModelsQuery"; -import { useModelSelection } from "../hooks/useModelSelection"; -import { useUpdateSettings } from "../hooks/useUpdateSettings"; +import { useModelSelection } from "../_hooks/useModelSelection"; +import { useUpdateSettings } from "../_hooks/useUpdateSettings"; import { AdvancedOnboarding } from "./advanced"; export function AnthropicOnboarding({ diff --git a/frontend/src/app/onboarding/components/ibm-onboarding.tsx b/frontend/app/onboarding/_components/ibm-onboarding.tsx similarity index 93% rename from frontend/src/app/onboarding/components/ibm-onboarding.tsx rename to frontend/app/onboarding/_components/ibm-onboarding.tsx index 3bb830b6..6cc2ebef 100644 --- a/frontend/src/app/onboarding/components/ibm-onboarding.tsx +++ b/frontend/app/onboarding/_components/ibm-onboarding.tsx @@ -2,12 +2,12 @@ import type { Dispatch, SetStateAction } from "react"; import { useEffect, useState } from "react"; import { LabelInput } from "@/components/label-input"; import { LabelWrapper } from "@/components/label-wrapper"; -import IBMLogo from "@/components/logo/ibm-logo"; +import IBMLogo from "@/components/icons/ibm-logo"; import { useDebouncedValue } from "@/lib/debounce"; import type { OnboardingVariables } from "../../api/mutations/useOnboardingMutation"; import { useGetIBMModelsQuery } from "../../api/queries/useGetModelsQuery"; -import { useModelSelection } from "../hooks/useModelSelection"; -import { useUpdateSettings } from "../hooks/useUpdateSettings"; +import { useModelSelection } from "../_hooks/useModelSelection"; +import { useUpdateSettings } from "../_hooks/useUpdateSettings"; import { AdvancedOnboarding } from "./advanced"; import { ModelSelector } from "./model-selector"; @@ -26,7 +26,9 @@ export function IBMOnboarding({ setIsLoadingModels?: (isLoading: boolean) => void; alreadyConfigured?: boolean; }) { - const [endpoint, setEndpoint] = useState(alreadyConfigured ? "" : "https://us-south.ml.cloud.ibm.com"); + const [endpoint, setEndpoint] = useState( + alreadyConfigured ? "" : "https://us-south.ml.cloud.ibm.com", + ); const [apiKey, setApiKey] = useState(""); const [projectId, setProjectId] = useState(""); @@ -77,7 +79,13 @@ export function IBMOnboarding({ apiKey: debouncedApiKey ? debouncedApiKey : undefined, projectId: debouncedProjectId ? debouncedProjectId : undefined, }, - { enabled: !!debouncedEndpoint || !!debouncedApiKey || !!debouncedProjectId || alreadyConfigured }, + { + enabled: + !!debouncedEndpoint || + !!debouncedApiKey || + !!debouncedProjectId || + alreadyConfigured, + }, ); // Use custom hook for model selection logic diff --git a/frontend/src/app/onboarding/components/model-selector.tsx b/frontend/app/onboarding/_components/model-selector.tsx similarity index 100% rename from frontend/src/app/onboarding/components/model-selector.tsx rename to frontend/app/onboarding/_components/model-selector.tsx diff --git a/frontend/src/app/onboarding/components/ollama-onboarding.tsx b/frontend/app/onboarding/_components/ollama-onboarding.tsx similarity index 94% rename from frontend/src/app/onboarding/components/ollama-onboarding.tsx rename to frontend/app/onboarding/_components/ollama-onboarding.tsx index e85366ba..01c3285c 100644 --- a/frontend/src/app/onboarding/components/ollama-onboarding.tsx +++ b/frontend/app/onboarding/_components/ollama-onboarding.tsx @@ -2,12 +2,12 @@ import type { Dispatch, SetStateAction } from "react"; import { useEffect, useState } from "react"; import { LabelInput } from "@/components/label-input"; import { LabelWrapper } from "@/components/label-wrapper"; -import OllamaLogo from "@/components/logo/ollama-logo"; +import OllamaLogo from "@/components/icons/ollama-logo"; import { useDebouncedValue } from "@/lib/debounce"; import type { OnboardingVariables } from "../../api/mutations/useOnboardingMutation"; import { useGetOllamaModelsQuery } from "../../api/queries/useGetModelsQuery"; -import { useModelSelection } from "../hooks/useModelSelection"; -import { useUpdateSettings } from "../hooks/useUpdateSettings"; +import { useModelSelection } from "../_hooks/useModelSelection"; +import { useUpdateSettings } from "../_hooks/useUpdateSettings"; import { ModelSelector } from "./model-selector"; export function OllamaOnboarding({ @@ -25,7 +25,9 @@ export function OllamaOnboarding({ isEmbedding?: boolean; alreadyConfigured?: boolean; }) { - const [endpoint, setEndpoint] = useState(alreadyConfigured ? undefined : `http://localhost:11434`); + const [endpoint, setEndpoint] = useState( + alreadyConfigured ? undefined : `http://localhost:11434`, + ); const [showConnecting, setShowConnecting] = useState(false); const debouncedEndpoint = useDebouncedValue(endpoint, 500); diff --git a/frontend/src/app/onboarding/components/onboarding-card.tsx b/frontend/app/onboarding/_components/onboarding-card.tsx similarity index 98% rename from frontend/src/app/onboarding/components/onboarding-card.tsx rename to frontend/app/onboarding/_components/onboarding-card.tsx index e98f92e8..d79259cf 100644 --- a/frontend/src/app/onboarding/components/onboarding-card.tsx +++ b/frontend/app/onboarding/_components/onboarding-card.tsx @@ -13,10 +13,10 @@ import { useGetSettingsQuery } from "@/app/api/queries/useGetSettingsQuery"; import { useGetTasksQuery } from "@/app/api/queries/useGetTasksQuery"; import type { ProviderHealthResponse } from "@/app/api/queries/useProviderHealthQuery"; import { useDoclingHealth } from "@/components/docling-health-banner"; -import AnthropicLogo from "@/components/logo/anthropic-logo"; -import IBMLogo from "@/components/logo/ibm-logo"; -import OllamaLogo from "@/components/logo/ollama-logo"; -import OpenAILogo from "@/components/logo/openai-logo"; +import AnthropicLogo from "@/components/icons/anthropic-logo"; +import IBMLogo from "@/components/icons/ibm-logo"; +import OllamaLogo from "@/components/icons/ollama-logo"; +import OpenAILogo from "@/components/icons/openai-logo"; import { Button } from "@/components/ui/button"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { diff --git a/frontend/src/app/onboarding/components/onboarding-content.tsx b/frontend/app/onboarding/_components/onboarding-content.tsx similarity index 93% rename from frontend/src/app/onboarding/components/onboarding-content.tsx rename to frontend/app/onboarding/_components/onboarding-content.tsx index 0c617bf1..2167ec0f 100644 --- a/frontend/src/app/onboarding/components/onboarding-content.tsx +++ b/frontend/app/onboarding/_components/onboarding-content.tsx @@ -2,11 +2,11 @@ import { useEffect, useState } from "react"; import { StickToBottom } from "use-stick-to-bottom"; -import { AssistantMessage } from "@/app/chat/components/assistant-message"; -import { UserMessage } from "@/app/chat/components/user-message"; -import Nudges from "@/app/chat/nudges"; -import type { Message } from "@/app/chat/types"; -import OnboardingCard from "@/app/onboarding/components/onboarding-card"; +import { AssistantMessage } from "@/app/chat/_components/assistant-message"; +import Nudges from "@/app/chat/_components/nudges"; +import { UserMessage } from "@/app/chat/_components/user-message"; +import type { Message } from "@/app/chat/_types/types"; +import OnboardingCard from "@/app/onboarding/_components/onboarding-card"; import { useChatStreaming } from "@/hooks/useChatStreaming"; import { OnboardingStep } from "./onboarding-step"; diff --git a/frontend/src/app/onboarding/components/onboarding-step.tsx b/frontend/app/onboarding/_components/onboarding-step.tsx similarity index 97% rename from frontend/src/app/onboarding/components/onboarding-step.tsx rename to frontend/app/onboarding/_components/onboarding-step.tsx index 436baa3a..1e393d72 100644 --- a/frontend/src/app/onboarding/components/onboarding-step.tsx +++ b/frontend/app/onboarding/_components/onboarding-step.tsx @@ -1,7 +1,7 @@ import { AnimatePresence, motion } from "motion/react"; import { type ReactNode, useEffect, useState } from "react"; -import { Message } from "@/app/chat/components/message"; -import DogIcon from "@/components/logo/dog-icon"; +import { Message } from "@/app/chat/_components/message"; +import DogIcon from "@/components/icons/dog-icon"; import { MarkdownRenderer } from "@/components/markdown-renderer"; import { cn } from "@/lib/utils"; diff --git a/frontend/src/app/onboarding/components/onboarding-upload.tsx b/frontend/app/onboarding/_components/onboarding-upload.tsx similarity index 97% rename from frontend/src/app/onboarding/components/onboarding-upload.tsx rename to frontend/app/onboarding/_components/onboarding-upload.tsx index 3ea2a22a..70d487bd 100644 --- a/frontend/src/app/onboarding/components/onboarding-upload.tsx +++ b/frontend/app/onboarding/_components/onboarding-upload.tsx @@ -2,7 +2,7 @@ import { AnimatePresence, motion } from "motion/react"; import { type ChangeEvent, useEffect, useRef, useState } from "react"; import { useGetNudgesQuery } from "@/app/api/queries/useGetNudgesQuery"; import { useGetTasksQuery } from "@/app/api/queries/useGetTasksQuery"; -import { AnimatedProviderSteps } from "@/app/onboarding/components/animated-provider-steps"; +import { AnimatedProviderSteps } from "@/app/onboarding/_components/animated-provider-steps"; import { Button } from "@/components/ui/button"; import { uploadFile } from "@/lib/upload-utils"; diff --git a/frontend/src/app/onboarding/components/openai-onboarding.tsx b/frontend/app/onboarding/_components/openai-onboarding.tsx similarity index 94% rename from frontend/src/app/onboarding/components/openai-onboarding.tsx rename to frontend/app/onboarding/_components/openai-onboarding.tsx index 47c427a9..db676553 100644 --- a/frontend/src/app/onboarding/components/openai-onboarding.tsx +++ b/frontend/app/onboarding/_components/openai-onboarding.tsx @@ -2,7 +2,7 @@ import type { Dispatch, SetStateAction } from "react"; import { useEffect, useState } from "react"; import { LabelInput } from "@/components/label-input"; import { LabelWrapper } from "@/components/label-wrapper"; -import OpenAILogo from "@/components/logo/openai-logo"; +import OpenAILogo from "@/components/icons/openai-logo"; import { Switch } from "@/components/ui/switch"; import { Tooltip, @@ -12,8 +12,8 @@ import { import { useDebouncedValue } from "@/lib/debounce"; import type { OnboardingVariables } from "../../api/mutations/useOnboardingMutation"; import { useGetOpenAIModelsQuery } from "../../api/queries/useGetModelsQuery"; -import { useModelSelection } from "../hooks/useModelSelection"; -import { useUpdateSettings } from "../hooks/useUpdateSettings"; +import { useModelSelection } from "../_hooks/useModelSelection"; +import { useUpdateSettings } from "../_hooks/useUpdateSettings"; import { AdvancedOnboarding } from "./advanced"; export function OpenAIOnboarding({ @@ -34,7 +34,9 @@ export function OpenAIOnboarding({ alreadyConfigured?: boolean; }) { const [apiKey, setApiKey] = useState(""); - const [getFromEnv, setGetFromEnv] = useState(hasEnvApiKey && !alreadyConfigured); + const [getFromEnv, setGetFromEnv] = useState( + hasEnvApiKey && !alreadyConfigured, + ); const debouncedApiKey = useDebouncedValue(apiKey, 500); // Fetch models from API when API key is provided diff --git a/frontend/src/app/onboarding/components/progress-bar.tsx b/frontend/app/onboarding/_components/progress-bar.tsx similarity index 100% rename from frontend/src/app/onboarding/components/progress-bar.tsx rename to frontend/app/onboarding/_components/progress-bar.tsx diff --git a/frontend/src/app/onboarding/components/tab-trigger.tsx b/frontend/app/onboarding/_components/tab-trigger.tsx similarity index 91% rename from frontend/src/app/onboarding/components/tab-trigger.tsx rename to frontend/app/onboarding/_components/tab-trigger.tsx index efaecfa6..7948a307 100644 --- a/frontend/src/app/onboarding/components/tab-trigger.tsx +++ b/frontend/app/onboarding/_components/tab-trigger.tsx @@ -1,4 +1,4 @@ -import AnimatedProcessingIcon from "@/components/ui/animated-processing-icon"; +import AnimatedProcessingIcon from "@/components/icons/animated-processing-icon"; import { cn } from "@/lib/utils"; export function TabTrigger({ diff --git a/frontend/src/app/onboarding/hooks/useModelSelection.ts b/frontend/app/onboarding/_hooks/useModelSelection.ts similarity index 100% rename from frontend/src/app/onboarding/hooks/useModelSelection.ts rename to frontend/app/onboarding/_hooks/useModelSelection.ts diff --git a/frontend/src/app/onboarding/hooks/useUpdateSettings.ts b/frontend/app/onboarding/_hooks/useUpdateSettings.ts similarity index 100% rename from frontend/src/app/onboarding/hooks/useUpdateSettings.ts rename to frontend/app/onboarding/_hooks/useUpdateSettings.ts diff --git a/frontend/src/app/onboarding/page.tsx b/frontend/app/onboarding/page.tsx similarity index 97% rename from frontend/src/app/onboarding/page.tsx rename to frontend/app/onboarding/page.tsx index 529718a1..5cbaa250 100644 --- a/frontend/src/app/onboarding/page.tsx +++ b/frontend/app/onboarding/page.tsx @@ -7,7 +7,7 @@ import { ProtectedRoute } from "@/components/protected-route"; import { DotPattern } from "@/components/ui/dot-pattern"; import { cn } from "@/lib/utils"; import { useGetSettingsQuery } from "@/app/api/queries/useGetSettingsQuery"; -import OnboardingCard from "./components/onboarding-card"; +import OnboardingCard from "./_components/onboarding-card"; function LegacyOnboardingPage() { const router = useRouter(); diff --git a/frontend/src/app/page.tsx b/frontend/app/page.tsx similarity index 100% rename from frontend/src/app/page.tsx rename to frontend/app/page.tsx diff --git a/frontend/src/app/providers.tsx b/frontend/app/providers.tsx similarity index 100% rename from frontend/src/app/providers.tsx rename to frontend/app/providers.tsx diff --git a/frontend/src/app/settings/components/anthropic-settings-dialog.tsx b/frontend/app/settings/_components/anthropic-settings-dialog.tsx similarity index 98% rename from frontend/src/app/settings/components/anthropic-settings-dialog.tsx rename to frontend/app/settings/_components/anthropic-settings-dialog.tsx index c7c1b1fe..caac712f 100644 --- a/frontend/src/app/settings/components/anthropic-settings-dialog.tsx +++ b/frontend/app/settings/_components/anthropic-settings-dialog.tsx @@ -6,7 +6,7 @@ import { toast } from "sonner"; import { useUpdateSettingsMutation } from "@/app/api/mutations/useUpdateSettingsMutation"; import { useGetAnthropicModelsQuery } from "@/app/api/queries/useGetModelsQuery"; import type { ProviderHealthResponse } from "@/app/api/queries/useProviderHealthQuery"; -import AnthropicLogo from "@/components/logo/anthropic-logo"; +import AnthropicLogo from "@/components/icons/anthropic-logo"; import { Button } from "@/components/ui/button"; import { Dialog, diff --git a/frontend/src/app/settings/components/anthropic-settings-form.tsx b/frontend/app/settings/_components/anthropic-settings-form.tsx similarity index 100% rename from frontend/src/app/settings/components/anthropic-settings-form.tsx rename to frontend/app/settings/_components/anthropic-settings-form.tsx diff --git a/frontend/src/app/settings/components/model-providers.tsx b/frontend/app/settings/_components/model-providers.tsx similarity index 96% rename from frontend/src/app/settings/components/model-providers.tsx rename to frontend/app/settings/_components/model-providers.tsx index cd67f542..53e6c40e 100644 --- a/frontend/src/app/settings/components/model-providers.tsx +++ b/frontend/app/settings/_components/model-providers.tsx @@ -1,16 +1,16 @@ import { useRouter, useSearchParams } from "next/navigation"; import { type ReactNode, useEffect, useState } from "react"; import { useGetSettingsQuery } from "@/app/api/queries/useGetSettingsQuery"; -import AnthropicLogo from "@/components/logo/anthropic-logo"; -import IBMLogo from "@/components/logo/ibm-logo"; -import OllamaLogo from "@/components/logo/ollama-logo"; -import OpenAILogo from "@/components/logo/openai-logo"; +import AnthropicLogo from "@/components/icons/anthropic-logo"; +import IBMLogo from "@/components/icons/ibm-logo"; +import OllamaLogo from "@/components/icons/ollama-logo"; +import OpenAILogo from "@/components/icons/openai-logo"; import { useProviderHealth } from "@/components/provider-health-banner"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { useAuth } from "@/contexts/auth-context"; import { cn } from "@/lib/utils"; -import type { ModelProvider } from "../helpers/model-helpers"; +import type { ModelProvider } from "../_helpers/model-helpers"; import AnthropicSettingsDialog from "./anthropic-settings-dialog"; import OllamaSettingsDialog from "./ollama-settings-dialog"; import OpenAISettingsDialog from "./openai-settings-dialog"; diff --git a/frontend/src/app/settings/components/model-selectors.tsx b/frontend/app/settings/_components/model-selectors.tsx similarity index 98% rename from frontend/src/app/settings/components/model-selectors.tsx rename to frontend/app/settings/_components/model-selectors.tsx index 6e6f724f..14c8b969 100644 --- a/frontend/src/app/settings/components/model-selectors.tsx +++ b/frontend/app/settings/_components/model-selectors.tsx @@ -1,7 +1,7 @@ import { type ReactNode, useEffect } from "react"; import { Controller, useFormContext } from "react-hook-form"; import type { ModelOption } from "@/app/api/queries/useGetModelsQuery"; -import { ModelSelector } from "@/app/onboarding/components/model-selector"; +import { ModelSelector } from "@/app/onboarding/_components/model-selector"; import { LabelWrapper } from "@/components/label-wrapper"; interface ModelSelectorsProps { diff --git a/frontend/src/app/settings/components/ollama-settings-dialog.tsx b/frontend/app/settings/_components/ollama-settings-dialog.tsx similarity index 98% rename from frontend/src/app/settings/components/ollama-settings-dialog.tsx rename to frontend/app/settings/_components/ollama-settings-dialog.tsx index bea6dd3f..a20ce303 100644 --- a/frontend/src/app/settings/components/ollama-settings-dialog.tsx +++ b/frontend/app/settings/_components/ollama-settings-dialog.tsx @@ -1,4 +1,13 @@ -import OllamaLogo from "@/components/logo/ollama-logo"; +import { useQueryClient } from "@tanstack/react-query"; +import { AnimatePresence, motion } from "motion/react"; +import { useState } from "react"; +import { FormProvider, useForm } from "react-hook-form"; +import { toast } from "sonner"; +import { useUpdateSettingsMutation } from "@/app/api/mutations/useUpdateSettingsMutation"; +import { useGetOllamaModelsQuery } from "@/app/api/queries/useGetModelsQuery"; +import { useGetSettingsQuery } from "@/app/api/queries/useGetSettingsQuery"; +import type { ProviderHealthResponse } from "@/app/api/queries/useProviderHealthQuery"; +import OllamaLogo from "@/components/icons/ollama-logo"; import { Button } from "@/components/ui/button"; import { Dialog, @@ -7,20 +16,11 @@ import { DialogHeader, DialogTitle, } from "@/components/ui/dialog"; -import { useState } from "react"; -import { FormProvider, useForm } from "react-hook-form"; -import { toast } from "sonner"; +import { useAuth } from "@/contexts/auth-context"; import { OllamaSettingsForm, type OllamaSettingsFormData, } from "./ollama-settings-form"; -import { useGetSettingsQuery } from "@/app/api/queries/useGetSettingsQuery"; -import { useGetOllamaModelsQuery } from "@/app/api/queries/useGetModelsQuery"; -import { useAuth } from "@/contexts/auth-context"; -import { useUpdateSettingsMutation } from "@/app/api/mutations/useUpdateSettingsMutation"; -import { useQueryClient } from "@tanstack/react-query"; -import type { ProviderHealthResponse } from "@/app/api/queries/useProviderHealthQuery"; -import { AnimatePresence, motion } from "motion/react"; const OllamaSettingsDialog = ({ open, diff --git a/frontend/src/app/settings/components/ollama-settings-form.tsx b/frontend/app/settings/_components/ollama-settings-form.tsx similarity index 100% rename from frontend/src/app/settings/components/ollama-settings-form.tsx rename to frontend/app/settings/_components/ollama-settings-form.tsx diff --git a/frontend/src/app/settings/components/openai-settings-dialog.tsx b/frontend/app/settings/_components/openai-settings-dialog.tsx similarity index 98% rename from frontend/src/app/settings/components/openai-settings-dialog.tsx rename to frontend/app/settings/_components/openai-settings-dialog.tsx index bc12db26..9584379b 100644 --- a/frontend/src/app/settings/components/openai-settings-dialog.tsx +++ b/frontend/app/settings/_components/openai-settings-dialog.tsx @@ -6,7 +6,7 @@ import { toast } from "sonner"; import { useUpdateSettingsMutation } from "@/app/api/mutations/useUpdateSettingsMutation"; import { useGetOpenAIModelsQuery } from "@/app/api/queries/useGetModelsQuery"; import type { ProviderHealthResponse } from "@/app/api/queries/useProviderHealthQuery"; -import OpenAILogo from "@/components/logo/openai-logo"; +import OpenAILogo from "@/components/icons/openai-logo"; import { Button } from "@/components/ui/button"; import { Dialog, diff --git a/frontend/src/app/settings/components/openai-settings-form.tsx b/frontend/app/settings/_components/openai-settings-form.tsx similarity index 100% rename from frontend/src/app/settings/components/openai-settings-form.tsx rename to frontend/app/settings/_components/openai-settings-form.tsx diff --git a/frontend/src/app/settings/components/watsonx-settings-dialog.tsx b/frontend/app/settings/_components/watsonx-settings-dialog.tsx similarity index 98% rename from frontend/src/app/settings/components/watsonx-settings-dialog.tsx rename to frontend/app/settings/_components/watsonx-settings-dialog.tsx index 181b98ed..798e5eb9 100644 --- a/frontend/src/app/settings/components/watsonx-settings-dialog.tsx +++ b/frontend/app/settings/_components/watsonx-settings-dialog.tsx @@ -1,4 +1,12 @@ -import IBMLogo from "@/components/logo/ibm-logo"; +import { useQueryClient } from "@tanstack/react-query"; +import { AnimatePresence, motion } from "motion/react"; +import { useState } from "react"; +import { FormProvider, useForm } from "react-hook-form"; +import { toast } from "sonner"; +import { useUpdateSettingsMutation } from "@/app/api/mutations/useUpdateSettingsMutation"; +import { useGetIBMModelsQuery } from "@/app/api/queries/useGetModelsQuery"; +import type { ProviderHealthResponse } from "@/app/api/queries/useProviderHealthQuery"; +import IBMLogo from "@/components/icons/ibm-logo"; import { Button } from "@/components/ui/button"; import { Dialog, @@ -7,18 +15,10 @@ import { DialogHeader, DialogTitle, } from "@/components/ui/dialog"; -import { useState } from "react"; -import { FormProvider, useForm } from "react-hook-form"; -import { toast } from "sonner"; import { WatsonxSettingsForm, type WatsonxSettingsFormData, } from "./watsonx-settings-form"; -import { useGetIBMModelsQuery } from "@/app/api/queries/useGetModelsQuery"; -import { useUpdateSettingsMutation } from "@/app/api/mutations/useUpdateSettingsMutation"; -import { useQueryClient } from "@tanstack/react-query"; -import type { ProviderHealthResponse } from "@/app/api/queries/useProviderHealthQuery"; -import { AnimatePresence, motion } from "motion/react"; const WatsonxSettingsDialog = ({ open, diff --git a/frontend/src/app/settings/components/watsonx-settings-form.tsx b/frontend/app/settings/_components/watsonx-settings-form.tsx similarity index 98% rename from frontend/src/app/settings/components/watsonx-settings-form.tsx rename to frontend/app/settings/_components/watsonx-settings-form.tsx index 27d4a371..c994413b 100644 --- a/frontend/src/app/settings/components/watsonx-settings-form.tsx +++ b/frontend/app/settings/_components/watsonx-settings-form.tsx @@ -1,7 +1,7 @@ import { useFormContext, Controller } from "react-hook-form"; import { LabelWrapper } from "@/components/label-wrapper"; import { Input } from "@/components/ui/input"; -import { ModelSelector } from "@/app/onboarding/components/model-selector"; +import { ModelSelector } from "@/app/onboarding/_components/model-selector"; export interface WatsonxSettingsFormData { endpoint: string; diff --git a/frontend/src/app/settings/helpers/model-helpers.tsx b/frontend/app/settings/_helpers/model-helpers.tsx similarity index 93% rename from frontend/src/app/settings/helpers/model-helpers.tsx rename to frontend/app/settings/_helpers/model-helpers.tsx index 1e26b9db..eabccf29 100644 --- a/frontend/src/app/settings/helpers/model-helpers.tsx +++ b/frontend/app/settings/_helpers/model-helpers.tsx @@ -1,7 +1,7 @@ -import AnthropicLogo from "@/components/logo/anthropic-logo"; -import IBMLogo from "@/components/logo/ibm-logo"; -import OllamaLogo from "@/components/logo/ollama-logo"; -import OpenAILogo from "@/components/logo/openai-logo"; +import AnthropicLogo from "@/components/icons/anthropic-logo"; +import IBMLogo from "@/components/icons/ibm-logo"; +import OllamaLogo from "@/components/icons/ollama-logo"; +import OpenAILogo from "@/components/icons/openai-logo"; export type ModelProvider = "openai" | "anthropic" | "ollama" | "watsonx"; diff --git a/frontend/src/app/settings/helpers/model-select-item.tsx b/frontend/app/settings/_helpers/model-select-item.tsx similarity index 100% rename from frontend/src/app/settings/helpers/model-select-item.tsx rename to frontend/app/settings/_helpers/model-select-item.tsx diff --git a/frontend/src/app/settings/page.tsx b/frontend/app/settings/page.tsx similarity index 99% rename from frontend/src/app/settings/page.tsx rename to frontend/app/settings/page.tsx index f0fef2b7..d859df03 100644 --- a/frontend/src/app/settings/page.tsx +++ b/frontend/app/settings/page.tsx @@ -6,10 +6,10 @@ import { useRouter, useSearchParams } from "next/navigation"; import { Suspense, useCallback, useEffect, useState } from "react"; import { toast } from "sonner"; import { - useGetOpenAIModelsQuery, useGetAnthropicModelsQuery, - useGetOllamaModelsQuery, useGetIBMModelsQuery, + useGetOllamaModelsQuery, + useGetOpenAIModelsQuery, } from "@/app/api/queries/useGetModelsQuery"; import { useGetSettingsQuery } from "@/app/api/queries/useGetSettingsQuery"; import { ConfirmationDialog } from "@/components/confirmation-dialog"; @@ -35,13 +35,13 @@ import { UI_CONSTANTS, } from "@/lib/constants"; import { useDebounce } from "@/lib/debounce"; +import GoogleDriveIcon from "../../components/icons/google-drive-logo"; +import OneDriveIcon from "../../components/icons/one-drive-logo"; +import SharePointIcon from "../../components/icons/share-point-logo"; import { useUpdateSettingsMutation } from "../api/mutations/useUpdateSettingsMutation"; -import { ModelSelector } from "../onboarding/components/model-selector"; -import ModelProviders from "./components/model-providers"; -import { getModelLogo, type ModelProvider } from "./helpers/model-helpers"; -import GoogleDriveIcon from "./icons/google-drive-icon"; -import OneDriveIcon from "./icons/one-drive-icon"; -import SharePointIcon from "./icons/share-point-icon"; +import { ModelSelector } from "../onboarding/_components/model-selector"; +import ModelProviders from "./_components/model-providers"; +import { getModelLogo, type ModelProvider } from "./_helpers/model-helpers"; const { MAX_SYSTEM_PROMPT_CHARS } = UI_CONSTANTS; diff --git a/frontend/src/app/upload/[provider]/page.tsx b/frontend/app/upload/[provider]/page.tsx similarity index 100% rename from frontend/src/app/upload/[provider]/page.tsx rename to frontend/app/upload/[provider]/page.tsx diff --git a/frontend/components.json b/frontend/components.json index 53d2101e..e4c9021f 100644 --- a/frontend/components.json +++ b/frontend/components.json @@ -5,7 +5,7 @@ "tsx": true, "tailwind": { "config": "tailwind.config.ts", - "css": "src/app/globals.css", + "css": "app/globals.css", "baseColor": "neutral", "cssVariables": true, "prefix": "" diff --git a/frontend/src/components/AgGrid/agGridStyles.css b/frontend/components/AgGrid/agGridStyles.css similarity index 100% rename from frontend/src/components/AgGrid/agGridStyles.css rename to frontend/components/AgGrid/agGridStyles.css diff --git a/frontend/src/components/AgGrid/registerAgGridModules.ts b/frontend/components/AgGrid/registerAgGridModules.ts similarity index 100% rename from frontend/src/components/AgGrid/registerAgGridModules.ts rename to frontend/components/AgGrid/registerAgGridModules.ts diff --git a/frontend/src/components/animated-conditional.tsx b/frontend/components/animated-conditional.tsx similarity index 100% rename from frontend/src/components/animated-conditional.tsx rename to frontend/components/animated-conditional.tsx diff --git a/frontend/src/components/chat-renderer.tsx b/frontend/components/chat-renderer.tsx similarity index 97% rename from frontend/src/components/chat-renderer.tsx rename to frontend/components/chat-renderer.tsx index 6e031eb0..6ffab41a 100644 --- a/frontend/src/components/chat-renderer.tsx +++ b/frontend/components/chat-renderer.tsx @@ -8,8 +8,8 @@ import { useGetConversationsQuery, } from "@/app/api/queries/useGetConversationsQuery"; import type { Settings } from "@/app/api/queries/useGetSettingsQuery"; -import { OnboardingContent } from "@/app/onboarding/components/onboarding-content"; -import { ProgressBar } from "@/app/onboarding/components/progress-bar"; +import { OnboardingContent } from "@/app/onboarding/_components/onboarding-content"; +import { ProgressBar } from "@/app/onboarding/_components/progress-bar"; import { AnimatedConditional } from "@/components/animated-conditional"; import { Header } from "@/components/header"; import { Navigation } from "@/components/navigation"; diff --git a/frontend/src/components/cloud-picker/file-item.tsx b/frontend/components/cloud-picker/file-item.tsx similarity index 89% rename from frontend/src/components/cloud-picker/file-item.tsx rename to frontend/components/cloud-picker/file-item.tsx index f06aa92e..617e5443 100644 --- a/frontend/src/components/cloud-picker/file-item.tsx +++ b/frontend/components/cloud-picker/file-item.tsx @@ -1,11 +1,11 @@ "use client"; import { FileText, Folder, Trash2 } from "lucide-react"; -import { CloudFile } from "./types"; -import GoogleDriveIcon from "@/app/settings/icons/google-drive-icon"; -import SharePointIcon from "@/app/settings/icons/share-point-icon"; -import OneDriveIcon from "@/app/settings/icons/one-drive-icon"; +import GoogleDriveIcon from "@/components/icons/google-drive-logo"; +import OneDriveIcon from "@/components/icons/one-drive-logo"; +import SharePointIcon from "@/components/icons/share-point-logo"; import { Button } from "@/components/ui/button"; +import type { CloudFile } from "./types"; interface FileItemProps { provider: string; @@ -43,7 +43,7 @@ const formatFileSize = (bytes?: number) => { const sizes = ["B", "KB", "MB", "GB", "TB"]; if (bytes === 0) return "0 B"; const i = Math.floor(Math.log(bytes) / Math.log(1024)); - return `${(bytes / Math.pow(1024, i)).toFixed(1)} ${sizes[i]}`; + return `${(bytes / 1024 ** i).toFixed(1)} ${sizes[i]}`; }; const getProviderIcon = (provider: string) => { diff --git a/frontend/src/components/cloud-picker/file-list.tsx b/frontend/components/cloud-picker/file-list.tsx similarity index 100% rename from frontend/src/components/cloud-picker/file-list.tsx rename to frontend/components/cloud-picker/file-list.tsx diff --git a/frontend/src/components/cloud-picker/index.ts b/frontend/components/cloud-picker/index.ts similarity index 100% rename from frontend/src/components/cloud-picker/index.ts rename to frontend/components/cloud-picker/index.ts diff --git a/frontend/src/components/cloud-picker/ingest-settings.tsx b/frontend/components/cloud-picker/ingest-settings.tsx similarity index 97% rename from frontend/src/components/cloud-picker/ingest-settings.tsx rename to frontend/components/cloud-picker/ingest-settings.tsx index 449189e3..5583119b 100644 --- a/frontend/src/components/cloud-picker/ingest-settings.tsx +++ b/frontend/components/cloud-picker/ingest-settings.tsx @@ -8,12 +8,12 @@ import { useGetOpenAIModelsQuery, } from "@/app/api/queries/useGetModelsQuery"; import { useGetSettingsQuery } from "@/app/api/queries/useGetSettingsQuery"; -import type { ModelOption } from "@/app/onboarding/components/model-selector"; +import type { ModelOption } from "@/app/onboarding/_components/model-selector"; import { getFallbackModels, type ModelProvider, -} from "@/app/settings/helpers/model-helpers"; -import { ModelSelectItems } from "@/app/settings/helpers/model-select-item"; +} from "@/app/settings/_helpers/model-helpers"; +import { ModelSelectItems } from "@/app/settings/_helpers/model-select-item"; import { LabelWrapper } from "@/components/label-wrapper"; import { Collapsible, diff --git a/frontend/src/components/cloud-picker/picker-header.tsx b/frontend/components/cloud-picker/picker-header.tsx similarity index 100% rename from frontend/src/components/cloud-picker/picker-header.tsx rename to frontend/components/cloud-picker/picker-header.tsx diff --git a/frontend/src/components/cloud-picker/provider-handlers.ts b/frontend/components/cloud-picker/provider-handlers.ts similarity index 100% rename from frontend/src/components/cloud-picker/provider-handlers.ts rename to frontend/components/cloud-picker/provider-handlers.ts diff --git a/frontend/src/components/cloud-picker/types.ts b/frontend/components/cloud-picker/types.ts similarity index 100% rename from frontend/src/components/cloud-picker/types.ts rename to frontend/components/cloud-picker/types.ts diff --git a/frontend/src/components/cloud-picker/unified-cloud-picker.tsx b/frontend/components/cloud-picker/unified-cloud-picker.tsx similarity index 100% rename from frontend/src/components/cloud-picker/unified-cloud-picker.tsx rename to frontend/components/cloud-picker/unified-cloud-picker.tsx diff --git a/frontend/components/confirmation-dialog.tsx b/frontend/components/confirmation-dialog.tsx index 1ff8a370..51d26335 100644 --- a/frontend/components/confirmation-dialog.tsx +++ b/frontend/components/confirmation-dialog.tsx @@ -1,6 +1,6 @@ "use client"; -import React from "react"; +import { ReactNode, useState } from "react"; import { Dialog, DialogContent, @@ -8,77 +8,65 @@ import { DialogFooter, DialogHeader, DialogTitle, -} from "./ui/dialog"; -import { Button } from "./ui/button"; -import { AlertTriangle } from "lucide-react"; + DialogTrigger, +} from "@/components/ui/dialog"; +import { Button } from "@/components/ui/button"; interface ConfirmationDialogProps { - open: boolean; - onOpenChange: (open: boolean) => void; - title?: string; - description?: string; + trigger: ReactNode; + title: string; + description: ReactNode; confirmText?: string; cancelText?: string; - onConfirm: () => void | Promise; - isLoading?: boolean; - variant?: "destructive" | "default"; + onConfirm: (closeDialog: () => void) => void; + onCancel?: () => void; + variant?: "default" | "destructive" | "warning"; + confirmIcon?: ReactNode | null; } -export const DeleteConfirmationDialog: React.FC = ({ - open, - onOpenChange, - title = "Are you sure?", - description = "This action cannot be undone.", - confirmText = "Confirm", +export function ConfirmationDialog({ + trigger, + title, + description, + confirmText = "Continue", cancelText = "Cancel", onConfirm, - isLoading = false, - variant = "destructive", -}) => { - const handleConfirm = async () => { - try { - await onConfirm(); - } finally { - // Only close if not in loading state (let the parent handle this) - if (!isLoading) { - onOpenChange(false); - } - } + onCancel, + variant = "default", + confirmIcon = null, +}: ConfirmationDialogProps) { + const [open, setOpen] = useState(false); + + const handleConfirm = () => { + const closeDialog = () => setOpen(false); + onConfirm(closeDialog); + }; + + const handleCancel = () => { + onCancel?.(); + setOpen(false); }; return ( - - + + {trigger} + -
- {variant === "destructive" && ( - - )} - {title} -
- {description} + {title} + + {description} +
- - -
); -}; +} diff --git a/frontend/components/delete-confirmation-dialog.tsx b/frontend/components/delete-confirmation-dialog.tsx new file mode 100644 index 00000000..c561c97d --- /dev/null +++ b/frontend/components/delete-confirmation-dialog.tsx @@ -0,0 +1,86 @@ +"use client"; + +import React from "react"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, +} from "./ui/dialog"; +import { Button } from "./ui/button"; +import { AlertTriangle } from "lucide-react"; + +interface DeleteConfirmationDialogProps { + open: boolean; + onOpenChange: (open: boolean) => void; + title?: string; + description?: string; + confirmText?: string; + cancelText?: string; + onConfirm: () => void | Promise; + isLoading?: boolean; + variant?: "destructive" | "default"; +} + +export const DeleteConfirmationDialog: React.FC< + DeleteConfirmationDialogProps +> = ({ + open, + onOpenChange, + title = "Are you sure?", + description = "This action cannot be undone.", + confirmText = "Confirm", + cancelText = "Cancel", + onConfirm, + isLoading = false, + variant = "destructive", +}) => { + const handleConfirm = async () => { + try { + await onConfirm(); + } finally { + // Only close if not in loading state (let the parent handle this) + if (!isLoading) { + onOpenChange(false); + } + } + }; + + return ( + + + +
+ {variant === "destructive" && ( + + )} + {title} +
+ {description} +
+ + + + + +
+
+ ); +}; diff --git a/frontend/components/docling-health-banner.tsx b/frontend/components/docling-health-banner.tsx index 9251d40a..e3fd3a55 100644 --- a/frontend/components/docling-health-banner.tsx +++ b/frontend/components/docling-health-banner.tsx @@ -2,6 +2,7 @@ import { AlertTriangle, Copy, ExternalLink } from "lucide-react"; import { useState } from "react"; +import { useDoclingHealthQuery } from "@/app/api/queries/useDoclingHealthQuery"; import { Banner, BannerAction, @@ -18,7 +19,6 @@ import { DialogTitle, } from "@/components/ui/dialog"; import { cn } from "@/lib/utils"; -import { useDoclingHealthQuery } from "@/src/app/api/queries/useDoclingHealthQuery"; interface DoclingHealthBannerProps { className?: string; diff --git a/frontend/src/components/header.tsx b/frontend/components/header.tsx similarity index 97% rename from frontend/src/components/header.tsx rename to frontend/components/header.tsx index 27cda793..2686140b 100644 --- a/frontend/src/components/header.tsx +++ b/frontend/components/header.tsx @@ -1,7 +1,7 @@ "use client"; import { Bell } from "lucide-react"; -import Logo from "@/components/logo/logo"; +import Logo from "@/components/icons/openrag-logo"; import { UserNav } from "@/components/user-nav"; import { useTask } from "@/contexts/task-context"; import { cn } from "@/lib/utils"; diff --git a/frontend/src/components/ui/animated-processing-icon.tsx b/frontend/components/icons/animated-processing-icon.tsx similarity index 99% rename from frontend/src/components/ui/animated-processing-icon.tsx rename to frontend/components/icons/animated-processing-icon.tsx index 230400d8..e121bc17 100644 --- a/frontend/src/components/ui/animated-processing-icon.tsx +++ b/frontend/components/icons/animated-processing-icon.tsx @@ -59,6 +59,7 @@ const AnimatedProcessingIcon = ({ className={className} {...props} > + Animated Processing Icon {/* Inject animation styles into the SVG's shadow */}