Reorganize folders within frontend (#407)
* reorganize folder structure * move folders from merge * fix import issue * run format * update configs
This commit is contained in:
parent
f09698af1c
commit
d47038e097
130 changed files with 327 additions and 844 deletions
|
|
@ -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();
|
||||
|
|
@ -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 +
|
||||
' <span class="inline-block w-1 h-4 bg-primary ml-1 animate-pulse"></span>'
|
||||
: '<span class="text-muted-foreground italic">Thinking<span class="thinking-dots"></span></span>')
|
||||
? content.trim()
|
||||
? content +
|
||||
' <span class="inline-block w-1 h-4 bg-primary ml-1 animate-pulse"></span>'
|
||||
: '<span class="text-muted-foreground italic">Thinking<span class="thinking-dots"></span></span>'
|
||||
: content
|
||||
}
|
||||
/>
|
||||
|
|
@ -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";
|
||||
|
||||
|
|
@ -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[];
|
||||
|
|
@ -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;
|
||||
|
|
@ -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";
|
||||
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 838 B After Width: | Height: | Size: 838 B |
|
|
@ -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) {
|
||||
|
|
@ -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";
|
||||
|
||||
|
|
@ -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({
|
||||
|
|
@ -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({
|
||||
|
|
@ -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
|
||||
|
|
@ -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);
|
||||
|
||||
|
|
@ -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 {
|
||||
|
|
@ -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";
|
||||
|
|
@ -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";
|
||||
|
||||
|
|
@ -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";
|
||||
|
||||
|
|
@ -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
|
||||
|
|
@ -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({
|
||||
|
|
@ -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();
|
||||
|
|
@ -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,
|
||||
|
|
@ -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";
|
||||
|
|
@ -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 {
|
||||
|
|
@ -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,
|
||||
|
|
@ -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,
|
||||
|
|
@ -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,
|
||||
|
|
@ -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;
|
||||
|
|
@ -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";
|
||||
|
||||
|
|
@ -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;
|
||||
|
||||
|
|
@ -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": ""
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
@ -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) => {
|
||||
|
|
@ -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,
|
||||
|
|
@ -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<void>;
|
||||
isLoading?: boolean;
|
||||
variant?: "destructive" | "default";
|
||||
onConfirm: (closeDialog: () => void) => void;
|
||||
onCancel?: () => void;
|
||||
variant?: "default" | "destructive" | "warning";
|
||||
confirmIcon?: ReactNode | null;
|
||||
}
|
||||
|
||||
export const DeleteConfirmationDialog: React.FC<ConfirmationDialogProps> = ({
|
||||
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 (
|
||||
<Dialog open={open} onOpenChange={onOpenChange}>
|
||||
<DialogContent className="sm:max-w-[425px]">
|
||||
<Dialog open={open} onOpenChange={setOpen}>
|
||||
<DialogTrigger asChild>{trigger}</DialogTrigger>
|
||||
<DialogContent>
|
||||
<DialogHeader>
|
||||
<div className="flex items-center gap-3">
|
||||
{variant === "destructive" && (
|
||||
<AlertTriangle className="h-6 w-6 text-destructive" />
|
||||
)}
|
||||
<DialogTitle>{title}</DialogTitle>
|
||||
</div>
|
||||
<DialogDescription>{description}</DialogDescription>
|
||||
<DialogTitle className="mb-4">{title}</DialogTitle>
|
||||
<DialogDescription className="text-left">
|
||||
{description}
|
||||
</DialogDescription>
|
||||
</DialogHeader>
|
||||
|
||||
<DialogFooter>
|
||||
<Button
|
||||
type="button"
|
||||
variant="outline"
|
||||
onClick={() => onOpenChange(false)}
|
||||
disabled={isLoading}
|
||||
>
|
||||
<Button variant="ghost" onClick={handleCancel} size="sm">
|
||||
{cancelText}
|
||||
</Button>
|
||||
<Button
|
||||
type="button"
|
||||
variant={variant}
|
||||
onClick={handleConfirm}
|
||||
loading={isLoading}
|
||||
disabled={isLoading}
|
||||
>
|
||||
<Button variant={variant} onClick={handleConfirm} size="sm">
|
||||
{confirmText}
|
||||
{confirmIcon}
|
||||
</Button>
|
||||
</DialogFooter>
|
||||
</DialogContent>
|
||||
</Dialog>
|
||||
);
|
||||
};
|
||||
}
|
||||
|
|
|
|||
86
frontend/components/delete-confirmation-dialog.tsx
Normal file
86
frontend/components/delete-confirmation-dialog.tsx
Normal file
|
|
@ -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<void>;
|
||||
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 (
|
||||
<Dialog open={open} onOpenChange={onOpenChange}>
|
||||
<DialogContent className="sm:max-w-[425px]">
|
||||
<DialogHeader>
|
||||
<div className="flex items-center gap-3">
|
||||
{variant === "destructive" && (
|
||||
<AlertTriangle className="h-6 w-6 text-destructive" />
|
||||
)}
|
||||
<DialogTitle>{title}</DialogTitle>
|
||||
</div>
|
||||
<DialogDescription>{description}</DialogDescription>
|
||||
</DialogHeader>
|
||||
|
||||
<DialogFooter>
|
||||
<Button
|
||||
type="button"
|
||||
variant="outline"
|
||||
onClick={() => onOpenChange(false)}
|
||||
disabled={isLoading}
|
||||
>
|
||||
{cancelText}
|
||||
</Button>
|
||||
<Button
|
||||
type="button"
|
||||
variant={variant}
|
||||
onClick={handleConfirm}
|
||||
loading={isLoading}
|
||||
disabled={isLoading}
|
||||
>
|
||||
{confirmText}
|
||||
</Button>
|
||||
</DialogFooter>
|
||||
</DialogContent>
|
||||
</Dialog>
|
||||
);
|
||||
};
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
@ -59,6 +59,7 @@ const AnimatedProcessingIcon = ({
|
|||
className={className}
|
||||
{...props}
|
||||
>
|
||||
<title>Animated Processing Icon</title>
|
||||
{/* Inject animation styles into the SVG's shadow */}
|
||||
<style dangerouslySetInnerHTML={{ __html: animationCSS }} />
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
const AwsIcon = ({ className }: { className?: string }) => {
|
||||
const AwsLogo = ({ className }: { className?: string }) => {
|
||||
return (
|
||||
<svg
|
||||
width="16"
|
||||
|
|
@ -8,6 +8,7 @@ const AwsIcon = ({ className }: { className?: string }) => {
|
|||
xmlns="http://www.w3.org/2000/svg"
|
||||
className={className}
|
||||
>
|
||||
<title>AWS Logo</title>
|
||||
<path
|
||||
d="M4.50896 6.82059C4.50896 7.01818 4.53024 7.1784 4.56749 7.29588C4.61006 7.41337 4.66328 7.54154 4.73778 7.68039C4.76438 7.72311 4.77503 7.76584 4.77503 7.80322C4.77503 7.85662 4.7431 7.91003 4.67392 7.96343L4.33867 8.18772C4.29078 8.21977 4.24288 8.23579 4.20031 8.23579C4.1471 8.23579 4.09388 8.20909 4.04067 8.16102C3.96617 8.08092 3.90231 7.99547 3.8491 7.91003C3.79588 7.81924 3.74267 7.71777 3.68413 7.59494C3.26906 8.08626 2.74756 8.33191 2.11963 8.33191C1.67263 8.33191 1.3161 8.20375 1.05535 7.94741C0.794596 7.69107 0.66156 7.34929 0.66156 6.92206C0.66156 6.46813 0.821203 6.09964 1.14581 5.82194C1.47042 5.54424 1.90145 5.40539 2.44956 5.40539C2.63049 5.40539 2.81674 5.42141 3.01363 5.44811C3.21053 5.47482 3.41274 5.51754 3.6256 5.5656V5.17576C3.6256 4.76989 3.54045 4.48685 3.37549 4.3213C3.2052 4.15575 2.91785 4.07564 2.5081 4.07564C2.32185 4.07564 2.13028 4.097 1.93338 4.14506C1.73649 4.19313 1.54492 4.25187 1.35867 4.32664C1.27352 4.36402 1.20967 4.38538 1.17242 4.39606C1.13517 4.40674 1.10856 4.41208 1.08727 4.41208C1.01277 4.41208 0.975524 4.35868 0.975524 4.24653V3.98485C0.975524 3.89941 0.986167 3.83532 1.01277 3.79794C1.03938 3.76056 1.08727 3.72318 1.16177 3.68579C1.34802 3.58967 1.57152 3.50956 1.83227 3.44548C2.09302 3.37605 2.36974 3.34401 2.66242 3.34401C3.29567 3.34401 3.75863 3.4882 4.05663 3.77658C4.34931 4.06496 4.49831 4.50287 4.49831 5.09031V6.82059H4.50896ZM2.34845 7.63233C2.52406 7.63233 2.70499 7.60028 2.89656 7.5362C3.08813 7.47212 3.25842 7.35463 3.4021 7.19442C3.48724 7.09295 3.5511 6.9808 3.58303 6.85263C3.61495 6.72446 3.63624 6.56959 3.63624 6.38802V6.16372C3.48192 6.12634 3.31695 6.0943 3.14667 6.07294C2.97638 6.05158 2.81142 6.0409 2.64645 6.0409C2.28992 6.0409 2.02917 6.11032 1.85356 6.25451C1.67795 6.3987 1.59281 6.60163 1.59281 6.86865C1.59281 7.11965 1.65667 7.30656 1.7897 7.43473C1.91742 7.56824 2.10367 7.63233 2.34845 7.63233ZM6.62156 8.20909C6.52578 8.20909 6.46192 8.19307 6.41935 8.15568C6.37678 8.12364 6.33953 8.04888 6.3076 7.94741L5.05706 3.8193C5.02513 3.71249 5.00917 3.64307 5.00917 3.60569C5.00917 3.52024 5.05174 3.47218 5.13688 3.47218H5.65838C5.75949 3.47218 5.82867 3.4882 5.86592 3.52558C5.90849 3.55762 5.94042 3.63239 5.97235 3.73386L6.86635 7.26918L7.69649 3.73386C7.7231 3.62705 7.75503 3.55762 7.7976 3.52558C7.84017 3.49354 7.91467 3.47218 8.01046 3.47218H8.43617C8.53728 3.47218 8.60646 3.4882 8.64903 3.52558C8.6916 3.55762 8.72885 3.63239 8.75014 3.73386L9.59092 7.3119L10.5115 3.73386C10.5435 3.62705 10.5807 3.55762 10.618 3.52558C10.6605 3.49354 10.7297 3.47218 10.8255 3.47218H11.3204C11.4055 3.47218 11.4534 3.5149 11.4534 3.60569C11.4534 3.63239 11.4481 3.65909 11.4428 3.69113C11.4375 3.72318 11.4268 3.7659 11.4055 3.82464L10.1231 7.95275C10.0911 8.05956 10.0539 8.12898 10.0113 8.16102C9.96874 8.19307 9.89956 8.21443 9.8091 8.21443H9.35146C9.25035 8.21443 9.18117 8.19841 9.1386 8.16102C9.09603 8.12364 9.05878 8.05422 9.03749 7.94741L8.21267 4.50287L7.39317 7.94207C7.36656 8.04888 7.33463 8.1183 7.29206 8.15568C7.24949 8.19307 7.17499 8.20909 7.07921 8.20909H6.62156ZM13.4596 8.35328C13.1829 8.35328 12.9062 8.32123 12.6401 8.25715C12.374 8.19307 12.1665 8.12364 12.0281 8.04353C11.943 7.99547 11.8845 7.94207 11.8632 7.894C11.8419 7.84594 11.8312 7.79254 11.8312 7.74447V7.47212C11.8312 7.35997 11.8738 7.30656 11.9536 7.30656C11.9856 7.30656 12.0175 7.3119 12.0494 7.32259C12.0814 7.33327 12.1292 7.35463 12.1825 7.37599C12.3634 7.45609 12.5603 7.52018 12.7678 7.5629C12.9807 7.60562 13.1882 7.62699 13.4011 7.62699C13.7363 7.62699 13.9971 7.56824 14.178 7.45075C14.3589 7.33327 14.4547 7.16237 14.4547 6.94342C14.4547 6.79389 14.4068 6.67106 14.311 6.56959C14.2152 6.46813 14.0343 6.37734 13.7736 6.29189L13.002 6.05158C12.6135 5.92875 12.3261 5.74718 12.1505 5.50686C11.9749 5.27188 11.8845 5.0102 11.8845 4.73251C11.8845 4.50821 11.9324 4.31062 12.0281 4.13972C12.1239 3.96883 12.2516 3.8193 12.4113 3.70181C12.5709 3.57899 12.7519 3.4882 12.9647 3.42411C13.1776 3.36003 13.4011 3.33333 13.6352 3.33333C13.7523 3.33333 13.8747 3.33867 13.9917 3.35469C14.1141 3.37071 14.2259 3.39207 14.3376 3.41343C14.4441 3.44014 14.5452 3.46684 14.641 3.49888C14.7367 3.53092 14.8112 3.56296 14.8645 3.59501C14.939 3.63773 14.9922 3.68045 15.0241 3.72852C15.056 3.77124 15.072 3.82998 15.072 3.90475V4.15575C15.072 4.26789 15.0294 4.32664 14.9496 4.32664C14.907 4.32664 14.8379 4.30528 14.7474 4.26255C14.4441 4.1237 14.1035 4.05428 13.7257 4.05428C13.4224 4.05428 13.1829 4.10234 13.0179 4.20381C12.853 4.30528 12.7678 4.46015 12.7678 4.6791C12.7678 4.82863 12.821 4.9568 12.9275 5.05827C13.0339 5.15973 13.2308 5.2612 13.5128 5.35199L14.2685 5.5923C14.6516 5.71513 14.9283 5.88603 15.0933 6.10498C15.2582 6.32394 15.3381 6.57493 15.3381 6.85263C15.3381 7.08227 15.2902 7.29054 15.1997 7.47212C15.1039 7.65369 14.9762 7.8139 14.8112 7.94207C14.6463 8.07558 14.4494 8.1717 14.2206 8.24113C13.9811 8.31589 13.731 8.35328 13.4596 8.35328Z"
|
||||
fill="currentColor"
|
||||
|
|
@ -28,4 +29,4 @@ const AwsIcon = ({ className }: { className?: string }) => {
|
|||
);
|
||||
};
|
||||
|
||||
export default AwsIcon;
|
||||
export default AwsLogo;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
const GoogleDriveIcon = ({ className }: { className?: string }) => (
|
||||
const GoogleDriveLogo = ({ className }: { className?: string }) => (
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="18"
|
||||
|
|
@ -7,6 +7,7 @@ const GoogleDriveIcon = ({ className }: { className?: string }) => (
|
|||
fill="none"
|
||||
className={className}
|
||||
>
|
||||
<title>Google Drive Logo</title>
|
||||
<path
|
||||
d="M2.03338 13.2368L2.75732 14.4872C2.90774 14.7504 3.12398 14.9573 3.37783 15.1077L5.9633 10.6325H0.792358C0.792358 10.9239 0.867572 11.2154 1.018 11.4786L2.03338 13.2368Z"
|
||||
fill="#0066DA"
|
||||
|
|
@ -34,4 +35,4 @@ const GoogleDriveIcon = ({ className }: { className?: string }) => (
|
|||
</svg>
|
||||
);
|
||||
|
||||
export default GoogleDriveIcon;
|
||||
export default GoogleDriveLogo;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
const OneDriveIcon = ({ className }: { className?: string }) => (
|
||||
const OneDriveLogo = ({ className }: { className?: string }) => (
|
||||
<svg
|
||||
width="17"
|
||||
height="12"
|
||||
|
|
@ -7,6 +7,7 @@ const OneDriveIcon = ({ className }: { className?: string }) => (
|
|||
xmlns="http://www.w3.org/2000/svg"
|
||||
className={className}
|
||||
>
|
||||
<title>OneDrive Logo</title>
|
||||
<g clip-path="url(#clip0_3016_367)">
|
||||
<path
|
||||
d="M5.2316 2.32803C2.88332 2.3281 1.128 4.25034 0.99585 6.39175C1.07765 6.85315 1.34653 7.7643 1.76759 7.71751C2.29391 7.65902 3.61947 7.71751 4.75008 5.67068C5.57599 4.17546 7.27498 2.328 5.2316 2.32803Z"
|
||||
|
|
@ -162,4 +163,4 @@ const OneDriveIcon = ({ className }: { className?: string }) => (
|
|||
</svg>
|
||||
);
|
||||
|
||||
export default OneDriveIcon;
|
||||
export default OneDriveLogo;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
export default function Logo(props: React.SVGProps<SVGSVGElement>) {
|
||||
export default function OpenragLogo(props: React.SVGProps<SVGSVGElement>) {
|
||||
return (
|
||||
<svg
|
||||
width="50"
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue