fix fonts, system prompt and manifest.
This commit is contained in:
parent
2a7c062ac4
commit
c8acff752d
@ -167,11 +167,13 @@ const groupPrompts = {
|
|||||||
- Specify the year or "latest" in queries to fetch recent information.
|
- Specify the year or "latest" in queries to fetch recent information.
|
||||||
|
|
||||||
#### Retrieve Tool:
|
#### Retrieve Tool:
|
||||||
- Use this for extracting information from specific URLs, categorized as "normal" or "news."
|
- Use this for extracting information from specific URLs provided.
|
||||||
- Do not use this tool for general web searches.
|
- Do not use this tool for general web searches.
|
||||||
|
|
||||||
#### Weather Data:
|
#### Weather Data:
|
||||||
- Provide only the current day's weather in 3-hour intervals. Avoid forecasts for subsequent days.
|
- Run the tool with the location and date parameters directly no need to plan in the thinking canvas.
|
||||||
|
- When you get the weather data, talk about the weather conditions and what to wear or do in that weather.
|
||||||
|
- Answer in paragraphs and no need of citations for this tool.
|
||||||
|
|
||||||
#### Programming Tool:
|
#### Programming Tool:
|
||||||
- Use this Python-only sandbox for calculations, data analysis, or visualizations.
|
- Use this Python-only sandbox for calculations, data analysis, or visualizations.
|
||||||
@ -185,7 +187,8 @@ const groupPrompts = {
|
|||||||
- Only use the text_translate tool for user-requested translations.
|
- Only use the text_translate tool for user-requested translations.
|
||||||
|
|
||||||
#### Stock Charts:
|
#### Stock Charts:
|
||||||
- Assume stock names from user queries. Use 'yfinance' and include installation commands.
|
- Assume stock names from user queries. Use the programming tool with Python code including 'yfinance'.
|
||||||
|
- Once the response is ready, talk about the stock's performance and trends, and then finish with the stock chart like this .
|
||||||
|
|
||||||
#### Image Search:
|
#### Image Search:
|
||||||
- Analyze image details to determine tool parameters.
|
- Analyze image details to determine tool parameters.
|
||||||
@ -196,9 +199,9 @@ const groupPrompts = {
|
|||||||
|
|
||||||
### Prohibited Actions:
|
### Prohibited Actions:
|
||||||
- Never write your thoughts or preamble before running a tool.
|
- Never write your thoughts or preamble before running a tool.
|
||||||
- Avoid running the same tool twice with identical parameters.
|
- Avoid running the same tool twice with same parameters.
|
||||||
- Do not include images in responses unless explicitly allowed (e.g., plots from the programming tool).
|
- Do not include images in responses unless explicitly allowed (e.g., plots from the programming tool).
|
||||||
- Avoid GUI-based Python code.
|
- Avoid running GUI-based Python code in the programming tool.
|
||||||
- Do not run 'web_search' for stock queries.
|
- Do not run 'web_search' for stock queries.
|
||||||
|
|
||||||
### Citations Rules:
|
### Citations Rules:
|
||||||
|
|||||||
@ -5,8 +5,6 @@
|
|||||||
|
|
||||||
:root {
|
:root {
|
||||||
--font-serif: "Instrument Serif", serif;
|
--font-serif: "Instrument Serif", serif;
|
||||||
--font-sans: "Inter", sans-serif;
|
|
||||||
--font-mono: "IBM Plex Mono", monospace;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
|
|||||||
@ -3,9 +3,10 @@ import 'katex/dist/katex.min.css';
|
|||||||
import 'mapbox-gl/dist/mapbox-gl.css';
|
import 'mapbox-gl/dist/mapbox-gl.css';
|
||||||
import { Metadata, Viewport } from "next";
|
import { Metadata, Viewport } from "next";
|
||||||
import { Toaster } from "sonner";
|
import { Toaster } from "sonner";
|
||||||
import { Inter, Instrument_Serif, IBM_Plex_Mono } from 'next/font/google';
|
import { Instrument_Serif } from 'next/font/google';
|
||||||
import { Analytics } from "@vercel/analytics/react";
|
import { Analytics } from "@vercel/analytics/react";
|
||||||
import { Providers } from './providers'
|
import { Providers } from './providers'
|
||||||
|
import { GeistSans } from 'geist/font/sans';
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
metadataBase: new URL("https://mplx.run"),
|
metadataBase: new URL("https://mplx.run"),
|
||||||
@ -33,19 +34,12 @@ export const viewport: Viewport = {
|
|||||||
minimumScale: 1,
|
minimumScale: 1,
|
||||||
maximumScale: 1,
|
maximumScale: 1,
|
||||||
userScalable: false,
|
userScalable: false,
|
||||||
|
themeColor: [
|
||||||
|
{ media: "(prefers-color-scheme: dark)", color: "#000" },
|
||||||
|
{ media: "(prefers-color-scheme: light)", color: "#fff" },
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
const inter = Inter({
|
|
||||||
weight: "variable",
|
|
||||||
subsets: ["latin"],
|
|
||||||
})
|
|
||||||
|
|
||||||
const plexMono = IBM_Plex_Mono({
|
|
||||||
weight: "400",
|
|
||||||
subsets: ["latin"],
|
|
||||||
variable: "--font-mono"
|
|
||||||
})
|
|
||||||
|
|
||||||
const instrumentSerif = Instrument_Serif({
|
const instrumentSerif = Instrument_Serif({
|
||||||
weight: "400",
|
weight: "400",
|
||||||
subsets: ["latin"],
|
subsets: ["latin"],
|
||||||
@ -59,7 +53,7 @@ export default function RootLayout({
|
|||||||
}>) {
|
}>) {
|
||||||
return (
|
return (
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<body className={`${inter.className} ${instrumentSerif.className} ${plexMono.className}`}>
|
<body className={` ${GeistSans.className} ${instrumentSerif.className}`}>
|
||||||
<Providers>
|
<Providers>
|
||||||
<Toaster position="top-center" richColors />
|
<Toaster position="top-center" richColors />
|
||||||
{children}
|
{children}
|
||||||
|
|||||||
@ -1,25 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "MiniPerplx - AI-powered Search Engine",
|
|
||||||
"short_name": "MiniPerplx",
|
|
||||||
"description": "A minimalistic AI-powered search engine that helps you find information on the internet using advanced AI models like GPT-4, Claude, and Grok",
|
|
||||||
"start_url": "/search",
|
|
||||||
"display": "standalone",
|
|
||||||
"background_color": "#ffffff",
|
|
||||||
"theme_color": "#000000",
|
|
||||||
"categories": ["search", "ai", "productivity"],
|
|
||||||
"icons" : [
|
|
||||||
{
|
|
||||||
"src": "/favicon.ico",
|
|
||||||
"sizes": "any",
|
|
||||||
"type": "image/x-icon"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"screenshots": [
|
|
||||||
{
|
|
||||||
"src": "/app/opengraph-image.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "1200x630",
|
|
||||||
"form_factor": "wide"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
26
app/manifest.ts
Normal file
26
app/manifest.ts
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
import type { MetadataRoute } from 'next'
|
||||||
|
|
||||||
|
export default function manifest(): MetadataRoute.Manifest {
|
||||||
|
return {
|
||||||
|
name: "MiniPerplx - AI-powered Search Engine",
|
||||||
|
short_name: "MiniPerplx",
|
||||||
|
description: "A minimalistic AI-powered search engine that helps you find information on the internet using advanced AI models like GPT-4, Claude, and Grok",
|
||||||
|
start_url: "/",
|
||||||
|
display: "standalone",
|
||||||
|
categories: ["search", "ai", "productivity"],
|
||||||
|
icons: [
|
||||||
|
{
|
||||||
|
src: "/favicon.ico",
|
||||||
|
sizes: "any",
|
||||||
|
type: "image/x-icon"
|
||||||
|
},
|
||||||
|
],
|
||||||
|
screenshots: [
|
||||||
|
{
|
||||||
|
src: "/opengraph-image.png",
|
||||||
|
type: "image/png",
|
||||||
|
sizes: "1200x630",
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
54
app/page.tsx
54
app/page.tsx
@ -132,7 +132,7 @@ import { vs } from 'react-syntax-highlighter/dist/cjs/styles/prism';
|
|||||||
import { useMediaQuery } from '@/hooks/use-media-query';
|
import { useMediaQuery } from '@/hooks/use-media-query';
|
||||||
import TMDBResult from '@/components/movie-info';
|
import TMDBResult from '@/components/movie-info';
|
||||||
import TrendingResults from '@/components/trending-tv-movies-results';
|
import TrendingResults from '@/components/trending-tv-movies-results';
|
||||||
|
import { GeistMono } from 'geist/font/mono';
|
||||||
|
|
||||||
export const maxDuration = 60;
|
export const maxDuration = 60;
|
||||||
|
|
||||||
@ -1083,8 +1083,8 @@ Grok 2 models are now available for you to try out.
|
|||||||
if (toolInvocation.toolName === 'thinking_canvas') {
|
if (toolInvocation.toolName === 'thinking_canvas') {
|
||||||
return (
|
return (
|
||||||
<Card className="my-2 border border-neutral-200 dark:border-neutral-800 shadow-none rounded-xl overflow-hidden">
|
<Card className="my-2 border border-neutral-200 dark:border-neutral-800 shadow-none rounded-xl overflow-hidden">
|
||||||
<details className="group marker:content-none" open>
|
<details className="group [&>summary::-webkit-details-marker]:hidden [&>summary]:list-none" open>
|
||||||
<summary className="bg-neutral-50 hover:bg-neutral-100 dark:bg-neutral-900 dark:hover:bg-neutral-800 border-b border-neutral-200 dark:border-neutral-800 cursor-pointer select-none list-none">
|
<summary className="bg-neutral-50 hover:bg-neutral-100 dark:bg-neutral-900 dark:hover:bg-neutral-800 border-b border-neutral-200 dark:border-neutral-800 cursor-pointer select-none">
|
||||||
<CardHeader className="py-2 px-4 flex flex-row items-center justify-between">
|
<CardHeader className="py-2 px-4 flex flex-row items-center justify-between">
|
||||||
<div className="flex items-center gap-3">
|
<div className="flex items-center gap-3">
|
||||||
<div className="h-8 w-8 rounded-md border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-950 flex items-center justify-center">
|
<div className="h-8 w-8 rounded-md border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-950 flex items-center justify-center">
|
||||||
@ -2141,7 +2141,7 @@ Grok 2 models are now available for you to try out.
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="overflow-x-auto">
|
<div className={`overflow-x-auto ${GeistMono.className}`}>
|
||||||
<SyntaxHighlighter
|
<SyntaxHighlighter
|
||||||
language={language || 'text'}
|
language={language || 'text'}
|
||||||
style={theme === 'dark' ? atomDark : vs}
|
style={theme === 'dark' ? atomDark : vs}
|
||||||
@ -2318,7 +2318,7 @@ Grok 2 models are now available for you to try out.
|
|||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="markdown-body dark:text-neutral-200">
|
<div className="markdown-body dark:text-neutral-200 font-sans">
|
||||||
<Marked renderer={renderer}>{content}</Marked>
|
<Marked renderer={renderer}>{content}</Marked>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
@ -2393,7 +2393,7 @@ Grok 2 models are now available for you to try out.
|
|||||||
|
|
||||||
const Navbar: React.FC<NavbarProps> = () => {
|
const Navbar: React.FC<NavbarProps> = () => {
|
||||||
return (
|
return (
|
||||||
<div className="fixed top-0 left-0 right-0 z-[60] flex justify-between items-center p-4 bg-white dark:bg-neutral-950">
|
<div className="fixed top-0 left-0 right-0 z-[60] flex justify-between items-center p-4 bg-white dark:bg-neutral-950 font-sans">
|
||||||
<Link href="/new">
|
<Link href="/new">
|
||||||
<Button
|
<Button
|
||||||
type="button"
|
type="button"
|
||||||
@ -2591,12 +2591,12 @@ Grok 2 models are now available for you to try out.
|
|||||||
), [trendingQueries]);
|
), [trendingQueries]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-col font-sans items-center justify-center p-2 sm:p-4 bg-background text-foreground transition-all duration-500">
|
<div className="flex flex-col !font-sans items-center justify-center p-2 sm:p-4 bg-background text-foreground transition-all duration-500">
|
||||||
<Navbar />
|
<Navbar />
|
||||||
|
|
||||||
<div className={`w-full max-w-[90%] sm:max-w-2xl space-y-6 p-0 ${hasSubmitted ? 'mt-16 sm:mt-20' : 'mt-[20vh] sm:mt-[25vh]'}`}>
|
<div className={`w-full max-w-[90%] !font-sans sm:max-w-2xl space-y-6 p-0 ${hasSubmitted ? 'mt-16 sm:mt-20' : 'mt-[20vh] sm:mt-[25vh]'}`}>
|
||||||
{!hasSubmitted && (
|
{!hasSubmitted && (
|
||||||
<div className="text-center">
|
<div className="text-center !font-sans">
|
||||||
<Badge
|
<Badge
|
||||||
onClick={() => setOpenChangelog(true)}
|
onClick={() => setOpenChangelog(true)}
|
||||||
className="cursor-pointer gap-1 mb-2 bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200"
|
className="cursor-pointer gap-1 mb-2 bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200"
|
||||||
@ -2604,10 +2604,7 @@ Grok 2 models are now available for you to try out.
|
|||||||
>
|
>
|
||||||
<Flame size={14} /> What's new
|
<Flame size={14} /> What's new
|
||||||
</Badge>
|
</Badge>
|
||||||
<h1 className="text-4xl sm:text-6xl mb-1 text-neutral-800 dark:text-neutral-100 font-serif">MiniPerplx</h1>
|
<h1 className="text-4xl sm:text-6xl mb-3 text-neutral-800 dark:text-neutral-100 font-serif">MiniPerplx</h1>
|
||||||
<h2 className='text-xl sm:text-2xl font-serif text-balance text-center mb-2 text-neutral-600 dark:text-neutral-400'>
|
|
||||||
In search for minimalism and simplicity
|
|
||||||
</h2>
|
|
||||||
<div className="flex flex-row items-center gap-1 justify-center text-center mx-auto !p-0 !m-0">
|
<div className="flex flex-row items-center gap-1 justify-center text-center mx-auto !p-0 !m-0">
|
||||||
<span className="text-base text-neutral-500 dark:text-neutral-400">
|
<span className="text-base text-neutral-500 dark:text-neutral-400">
|
||||||
Powered by
|
Powered by
|
||||||
@ -2691,7 +2688,7 @@ Grok 2 models are now available for you to try out.
|
|||||||
transition={{ duration: 0.5 }}
|
transition={{ duration: 0.5 }}
|
||||||
className="flex items-start space-x-2 mb-4"
|
className="flex items-start space-x-2 mb-4"
|
||||||
>
|
>
|
||||||
<User2 className="size-5 sm:size-6 text-primary flex-shrink-0 mt-1" />
|
<User2 className="size-5 text-primary flex-shrink-0 mt-1" />
|
||||||
<div className="flex-grow min-w-0">
|
<div className="flex-grow min-w-0">
|
||||||
{isEditingMessage && editingMessageIndex === index ? (
|
{isEditingMessage && editingMessageIndex === index ? (
|
||||||
<form onSubmit={handleMessageUpdate} className="flex items-center space-x-2">
|
<form onSubmit={handleMessageUpdate} className="flex items-center space-x-2">
|
||||||
@ -2720,7 +2717,7 @@ Grok 2 models are now available for you to try out.
|
|||||||
</form>
|
</form>
|
||||||
) : (
|
) : (
|
||||||
<div>
|
<div>
|
||||||
<p className="text-xl sm:text-2xl font-medium font-serif break-words text-neutral-800 dark:text-neutral-200">
|
<p className="text-xl font-medium font-sans break-words text-neutral-800 dark:text-neutral-200">
|
||||||
{message.content}
|
{message.content}
|
||||||
</p>
|
</p>
|
||||||
<div className='flex flex-row gap-2'>
|
<div className='flex flex-row gap-2'>
|
||||||
@ -2796,7 +2793,7 @@ Grok 2 models are now available for you to try out.
|
|||||||
<Button
|
<Button
|
||||||
key={index}
|
key={index}
|
||||||
variant="ghost"
|
variant="ghost"
|
||||||
className="w-fit font-light rounded-2xl p-1 justify-start text-left h-auto py-2 px-4 bg-neutral-100 dark:bg-neutral-800 text-neutral-900 dark:text-neutral-100 hover:bg-neutral-200 dark:hover:bg-neutral-700 whitespace-normal"
|
className="w-fit font-medium rounded-2xl p-1 justify-start text-left h-auto py-2 px-4 bg-neutral-100 dark:bg-neutral-800 text-neutral-900 dark:text-neutral-100 hover:bg-neutral-200 dark:hover:bg-neutral-700 whitespace-normal"
|
||||||
onClick={() => handleSuggestedQuestionClick(question)}
|
onClick={() => handleSuggestedQuestionClick(question)}
|
||||||
>
|
>
|
||||||
{question}
|
{question}
|
||||||
@ -2884,15 +2881,22 @@ Grok 2 models are now available for you to try out.
|
|||||||
}
|
}
|
||||||
|
|
||||||
const LoadingFallback = () => (
|
const LoadingFallback = () => (
|
||||||
<div className="flex flex-col items-center justify-center min-h-screen bg-white dark:bg-neutral-900 text-neutral-900 dark:text-neutral-100">
|
<div className="flex flex-col items-center justify-center min-h-screen bg-gradient-to-br from-white to-neutral-100 dark:from-neutral-900 dark:to-black">
|
||||||
<div className="text-center space-y-4">
|
<div className="backdrop-blur-xl bg-white/30 dark:bg-neutral-900/30 p-8 rounded-2xl border border-neutral-200/20 dark:border-neutral-700/20 shadow-xl">
|
||||||
<h1 className="text-4xl sm:text-6xl mb-1 text-neutral-800 dark:text-neutral-100 font-serif animate-pulse">
|
<div className="text-center space-y-6">
|
||||||
MiniPerplx
|
<h1 className="text-4xl sm:text-6xl font-bold bg-clip-text text-transparent bg-gradient-to-r from-neutral-900 to-neutral-600 dark:from-white dark:to-neutral-400">
|
||||||
</h1>
|
MiniPerplx
|
||||||
<p className="text-xl sm:text-2xl font-serif text-neutral-600 dark:text-neutral-400 animate-pulse">
|
</h1>
|
||||||
Loading your minimalist AI experience...
|
<p className="text-base sm:text-lg text-neutral-600 dark:text-neutral-400">
|
||||||
</p>
|
Loading your minimalist AI experience
|
||||||
<Loader2 className="w-10 h-10 text-primary mx-auto animate-spin" />
|
<span className="animate-pulse">...</span>
|
||||||
|
</p>
|
||||||
|
<div className="relative">
|
||||||
|
<div className="h-1 w-32 mx-auto bg-neutral-200 dark:bg-neutral-800 rounded-full overflow-hidden">
|
||||||
|
<div className="h-full bg-primary w-1/2 animate-[loader_1s_ease-in-out_infinite] rounded-full" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -64,7 +64,7 @@ export function InstallPrompt() {
|
|||||||
switch (platform) {
|
switch (platform) {
|
||||||
case 'ios':
|
case 'ios':
|
||||||
return (
|
return (
|
||||||
<p className="text-lg text-neutral-600 dark:text-neutral-400">
|
<p className="text-neutral-600 dark:text-neutral-400">
|
||||||
Tap <Share className="inline h-4 w-4 mx-1" /> and then{" "}
|
Tap <Share className="inline h-4 w-4 mx-1" /> and then{" "}
|
||||||
<span className="whitespace-nowrap">
|
<span className="whitespace-nowrap">
|
||||||
“Add to Home Screen” <Plus className="inline h-4 w-4 ml-1" />
|
“Add to Home Screen” <Plus className="inline h-4 w-4 ml-1" />
|
||||||
@ -73,13 +73,13 @@ export function InstallPrompt() {
|
|||||||
);
|
);
|
||||||
case 'android':
|
case 'android':
|
||||||
return (
|
return (
|
||||||
<p className="text-lg text-neutral-600 dark:text-neutral-400">
|
<p className="text-neutral-600 dark:text-neutral-400">
|
||||||
Tap the menu <span className="font-bold">⋮</span> and select “Install app”
|
Tap the menu <span className="font-bold">⋮</span> and select “Install app”
|
||||||
</p>
|
</p>
|
||||||
);
|
);
|
||||||
default:
|
default:
|
||||||
return (
|
return (
|
||||||
<p className="text-lg text-neutral-600 dark:text-neutral-400">
|
<p className="text-neutral-600 dark:text-neutral-400">
|
||||||
Install our app for a better experience <Download className="inline h-4 w-4 ml-1" />
|
Install our app for a better experience <Download className="inline h-4 w-4 ml-1" />
|
||||||
</p>
|
</p>
|
||||||
);
|
);
|
||||||
@ -98,7 +98,7 @@ export function InstallPrompt() {
|
|||||||
<Card className="p-4 bg-white dark:bg-neutral-900 border border-neutral-200 dark:border-neutral-800 shadow-lg">
|
<Card className="p-4 bg-white dark:bg-neutral-900 border border-neutral-200 dark:border-neutral-800 shadow-lg">
|
||||||
<div className="flex items-start justify-between">
|
<div className="flex items-start justify-between">
|
||||||
<div className="space-y-2">
|
<div className="space-y-2">
|
||||||
<h3 className="font-medium text-2xl text-neutral-900 dark:text-neutral-100">
|
<h3 className="font-medium text-xl text-neutral-900 dark:text-neutral-100">
|
||||||
Install MiniPerplx
|
Install MiniPerplx
|
||||||
</h3>
|
</h3>
|
||||||
{getInstructions()}
|
{getInstructions()}
|
||||||
|
|||||||
@ -559,7 +559,7 @@ const GroupSelector = ({ selectedGroup, onGroupSelect }: GroupSelectorProps) =>
|
|||||||
align="start"
|
align="start"
|
||||||
sideOffset={8}
|
sideOffset={8}
|
||||||
className={cn(
|
className={cn(
|
||||||
"w-[400px] font-sans z-[60] -ml-2 mt-1",
|
"w-[420px] font-sans z-[60] -ml-2 mt-1",
|
||||||
"border border-neutral-200 dark:border-neutral-800",
|
"border border-neutral-200 dark:border-neutral-800",
|
||||||
"bg-white dark:bg-neutral-900",
|
"bg-white dark:bg-neutral-900",
|
||||||
"shadow-lg rounded-lg"
|
"shadow-lg rounded-lg"
|
||||||
@ -629,12 +629,10 @@ const FormComponent: React.FC<FormComponentProps> = ({
|
|||||||
|
|
||||||
const handleGroupSelect = useCallback((group: SearchGroup) => {
|
const handleGroupSelect = useCallback((group: SearchGroup) => {
|
||||||
setSelectedGroup(group.id);
|
setSelectedGroup(group.id);
|
||||||
setInput('');
|
|
||||||
resetSuggestedQuestions();
|
resetSuggestedQuestions();
|
||||||
inputRef.current?.focus();
|
inputRef.current?.focus();
|
||||||
}, [setSelectedGroup, setInput, resetSuggestedQuestions, inputRef]);
|
}, [setSelectedGroup, resetSuggestedQuestions, inputRef]);
|
||||||
|
|
||||||
// Keep existing file upload and form submission logic...
|
|
||||||
const uploadFile = async (file: File): Promise<Attachment> => {
|
const uploadFile = async (file: File): Promise<Attachment> => {
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
formData.append('file', file);
|
formData.append('file', file);
|
||||||
@ -736,7 +734,7 @@ const FormComponent: React.FC<FormComponentProps> = ({
|
|||||||
return (
|
return (
|
||||||
|
|
||||||
<div className={cn(
|
<div className={cn(
|
||||||
"relative w-full flex flex-col gap-2 rounded-lg transition-all duration-300",
|
"relative w-full flex flex-col gap-2 rounded-lg transition-all duration-300 !font-sans",
|
||||||
hasSubmitted ?? "z-[51]",
|
hasSubmitted ?? "z-[51]",
|
||||||
attachments.length > 0 || uploadQueue.length > 0
|
attachments.length > 0 || uploadQueue.length > 0
|
||||||
? "bg-gray-100/70 dark:bg-neutral-800 p-1"
|
? "bg-gray-100/70 dark:bg-neutral-800 p-1"
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
/** @type {import('next').NextConfig} */
|
/** @type {import('next').NextConfig} */
|
||||||
const nextConfig = {
|
const nextConfig = {
|
||||||
|
transpilePackages: ["geist"],
|
||||||
async headers() {
|
async headers() {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
|
|||||||
@ -51,6 +51,7 @@
|
|||||||
"embla-carousel-react": "^8.3.0",
|
"embla-carousel-react": "^8.3.0",
|
||||||
"exa-js": "^1.3.3",
|
"exa-js": "^1.3.3",
|
||||||
"framer-motion": "^11.3.19",
|
"framer-motion": "^11.3.19",
|
||||||
|
"geist": "^1.3.1",
|
||||||
"google-auth-library": "^9.14.1",
|
"google-auth-library": "^9.14.1",
|
||||||
"highlight.js": "^11.10.0",
|
"highlight.js": "^11.10.0",
|
||||||
"katex": "^0.16.11",
|
"katex": "^0.16.11",
|
||||||
@ -59,7 +60,7 @@
|
|||||||
"mapbox-gl": "^3.7.0",
|
"mapbox-gl": "^3.7.0",
|
||||||
"marked-react": "^2.0.0",
|
"marked-react": "^2.0.0",
|
||||||
"motion": "^11.13.5",
|
"motion": "^11.13.5",
|
||||||
"next": "^14.2.20",
|
"next": "^14.2.21",
|
||||||
"next-themes": "^0.3.0",
|
"next-themes": "^0.3.0",
|
||||||
"openai": "^4.56.0",
|
"openai": "^4.56.0",
|
||||||
"posthog-js": "^1.202.2",
|
"posthog-js": "^1.202.2",
|
||||||
|
|||||||
@ -88,7 +88,7 @@ dependencies:
|
|||||||
version: 1.34.2
|
version: 1.34.2
|
||||||
'@vercel/analytics':
|
'@vercel/analytics':
|
||||||
specifier: ^1.3.1
|
specifier: ^1.3.1
|
||||||
version: 1.3.1(next@14.2.20)(react@18.3.1)
|
version: 1.3.1(next@14.2.21)(react@18.3.1)
|
||||||
'@vercel/blob':
|
'@vercel/blob':
|
||||||
specifier: ^0.23.4
|
specifier: ^0.23.4
|
||||||
version: 0.23.4
|
version: 0.23.4
|
||||||
@ -131,6 +131,9 @@ dependencies:
|
|||||||
framer-motion:
|
framer-motion:
|
||||||
specifier: ^11.3.19
|
specifier: ^11.3.19
|
||||||
version: 11.11.2(react-dom@18.3.1)(react@18.3.1)
|
version: 11.11.2(react-dom@18.3.1)(react@18.3.1)
|
||||||
|
geist:
|
||||||
|
specifier: ^1.3.1
|
||||||
|
version: 1.3.1(next@14.2.21)
|
||||||
google-auth-library:
|
google-auth-library:
|
||||||
specifier: ^9.14.1
|
specifier: ^9.14.1
|
||||||
version: 9.14.1
|
version: 9.14.1
|
||||||
@ -156,8 +159,8 @@ dependencies:
|
|||||||
specifier: ^11.13.5
|
specifier: ^11.13.5
|
||||||
version: 11.13.5(react-dom@18.3.1)(react@18.3.1)
|
version: 11.13.5(react-dom@18.3.1)(react@18.3.1)
|
||||||
next:
|
next:
|
||||||
specifier: ^14.2.20
|
specifier: ^14.2.21
|
||||||
version: 14.2.20(react-dom@18.3.1)(react@18.3.1)
|
version: 14.2.21(react-dom@18.3.1)(react@18.3.1)
|
||||||
next-themes:
|
next-themes:
|
||||||
specifier: ^0.3.0
|
specifier: ^0.3.0
|
||||||
version: 0.3.0(react-dom@18.3.1)(react@18.3.1)
|
version: 0.3.0(react-dom@18.3.1)(react@18.3.1)
|
||||||
@ -629,8 +632,8 @@ packages:
|
|||||||
- ws
|
- ws
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@next/env@14.2.20:
|
/@next/env@14.2.21:
|
||||||
resolution: {integrity: sha512-JfDpuOCB0UBKlEgEy/H6qcBSzHimn/YWjUHzKl1jMeUO+QVRdzmTTl8gFJaNO87c8DXmVKhFCtwxQ9acqB3+Pw==}
|
resolution: {integrity: sha512-lXcwcJd5oR01tggjWJ6SrNNYFGuOOMB9c251wUNkjCpkoXOPkDeF/15c3mnVlBqrW4JJXb2kVxDFhC4GduJt2A==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@next/eslint-plugin-next@14.2.5:
|
/@next/eslint-plugin-next@14.2.5:
|
||||||
@ -639,8 +642,8 @@ packages:
|
|||||||
glob: 10.3.10
|
glob: 10.3.10
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@next/swc-darwin-arm64@14.2.20:
|
/@next/swc-darwin-arm64@14.2.21:
|
||||||
resolution: {integrity: sha512-WDfq7bmROa5cIlk6ZNonNdVhKmbCv38XteVFYsxea1vDJt3SnYGgxLGMTXQNfs5OkFvAhmfKKrwe7Y0Hs+rWOg==}
|
resolution: {integrity: sha512-HwEjcKsXtvszXz5q5Z7wCtrHeTTDSTgAbocz45PHMUjU3fBYInfvhR+ZhavDRUYLonm53aHZbB09QtJVJj8T7g==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
@ -648,8 +651,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@next/swc-darwin-x64@14.2.20:
|
/@next/swc-darwin-x64@14.2.21:
|
||||||
resolution: {integrity: sha512-XIQlC+NAmJPfa2hruLvr1H1QJJeqOTDV+v7tl/jIdoFvqhoihvSNykLU/G6NMgoeo+e/H7p/VeWSOvMUHKtTIg==}
|
resolution: {integrity: sha512-TSAA2ROgNzm4FhKbTbyJOBrsREOMVdDIltZ6aZiKvCi/v0UwFmwigBGeqXDA97TFMpR3LNNpw52CbVelkoQBxA==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
@ -657,8 +660,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@next/swc-linux-arm64-gnu@14.2.20:
|
/@next/swc-linux-arm64-gnu@14.2.21:
|
||||||
resolution: {integrity: sha512-pnzBrHTPXIMm5QX3QC8XeMkpVuoAYOmyfsO4VlPn+0NrHraNuWjdhe+3xLq01xR++iCvX+uoeZmJDKcOxI201Q==}
|
resolution: {integrity: sha512-0Dqjn0pEUz3JG+AImpnMMW/m8hRtl1GQCNbO66V1yp6RswSTiKmnHf3pTX6xMdJYSemf3O4Q9ykiL0jymu0TuA==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
@ -666,8 +669,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@next/swc-linux-arm64-musl@14.2.20:
|
/@next/swc-linux-arm64-musl@14.2.21:
|
||||||
resolution: {integrity: sha512-WhJJAFpi6yqmUx1momewSdcm/iRXFQS0HU2qlUGlGE/+98eu7JWLD5AAaP/tkK1mudS/rH2f9E3WCEF2iYDydQ==}
|
resolution: {integrity: sha512-Ggfw5qnMXldscVntwnjfaQs5GbBbjioV4B4loP+bjqNEb42fzZlAaK+ldL0jm2CTJga9LynBMhekNfV8W4+HBw==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
@ -675,8 +678,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@next/swc-linux-x64-gnu@14.2.20:
|
/@next/swc-linux-x64-gnu@14.2.21:
|
||||||
resolution: {integrity: sha512-ao5HCbw9+iG1Kxm8XsGa3X174Ahn17mSYBQlY6VGsdsYDAbz/ZP13wSLfvlYoIDn1Ger6uYA+yt/3Y9KTIupRg==}
|
resolution: {integrity: sha512-uokj0lubN1WoSa5KKdThVPRffGyiWlm/vCc/cMkWOQHw69Qt0X1o3b2PyLLx8ANqlefILZh1EdfLRz9gVpG6tg==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
@ -684,8 +687,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@next/swc-linux-x64-musl@14.2.20:
|
/@next/swc-linux-x64-musl@14.2.21:
|
||||||
resolution: {integrity: sha512-CXm/kpnltKTT7945np6Td3w7shj/92TMRPyI/VvveFe8+YE+/YOJ5hyAWK5rpx711XO1jBCgXl211TWaxOtkaA==}
|
resolution: {integrity: sha512-iAEBPzWNbciah4+0yI4s7Pce6BIoxTQ0AGCkxn/UBuzJFkYyJt71MadYQkjPqCQCJAFQ26sYh7MOKdU+VQFgPg==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
@ -693,8 +696,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@next/swc-win32-arm64-msvc@14.2.20:
|
/@next/swc-win32-arm64-msvc@14.2.21:
|
||||||
resolution: {integrity: sha512-upJn2HGQgKNDbXVfIgmqT2BN8f3z/mX8ddoyi1I565FHbfowVK5pnMEwauvLvaJf4iijvuKq3kw/b6E9oIVRWA==}
|
resolution: {integrity: sha512-plykgB3vL2hB4Z32W3ktsfqyuyGAPxqwiyrAi2Mr8LlEUhNn9VgkiAl5hODSBpzIfWweX3er1f5uNpGDygfQVQ==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
@ -702,8 +705,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@next/swc-win32-ia32-msvc@14.2.20:
|
/@next/swc-win32-ia32-msvc@14.2.21:
|
||||||
resolution: {integrity: sha512-igQW/JWciTGJwj3G1ipalD2V20Xfx3ywQy17IV0ciOUBbFhNfyU1DILWsTi32c8KmqgIDviUEulW/yPb2FF90w==}
|
resolution: {integrity: sha512-w5bacz4Vxqrh06BjWgua3Yf7EMDb8iMcVhNrNx8KnJXt8t+Uu0Zg4JHLDL/T7DkTCEEfKXO/Er1fcfWxn2xfPA==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [ia32]
|
cpu: [ia32]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
@ -711,8 +714,8 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@next/swc-win32-x64-msvc@14.2.20:
|
/@next/swc-win32-x64-msvc@14.2.21:
|
||||||
resolution: {integrity: sha512-AFmqeLW6LtxeFTuoB+MXFeM5fm5052i3MU6xD0WzJDOwku6SkZaxb1bxjBaRC8uNqTRTSPl0yMFtjNowIVI67w==}
|
resolution: {integrity: sha512-sT6+llIkzpsexGYZq8cjjthRyRGe5cJVhqh12FmlbxHqna6zsDDK8UNaV7g41T6atFHCJUPeLb3uyAwrBwy0NA==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
@ -1953,7 +1956,7 @@ packages:
|
|||||||
crypto-js: 4.2.0
|
crypto-js: 4.2.0
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@vercel/analytics@1.3.1(next@14.2.20)(react@18.3.1):
|
/@vercel/analytics@1.3.1(next@14.2.21)(react@18.3.1):
|
||||||
resolution: {integrity: sha512-xhSlYgAuJ6Q4WQGkzYTLmXwhYl39sWjoMA3nHxfkvG+WdBT25c563a7QhwwKivEOZtPJXifYHR1m2ihoisbWyA==}
|
resolution: {integrity: sha512-xhSlYgAuJ6Q4WQGkzYTLmXwhYl39sWjoMA3nHxfkvG+WdBT25c563a7QhwwKivEOZtPJXifYHR1m2ihoisbWyA==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
next: '>= 13'
|
next: '>= 13'
|
||||||
@ -1964,7 +1967,7 @@ packages:
|
|||||||
react:
|
react:
|
||||||
optional: true
|
optional: true
|
||||||
dependencies:
|
dependencies:
|
||||||
next: 14.2.20(react-dom@18.3.1)(react@18.3.1)
|
next: 14.2.21(react-dom@18.3.1)(react@18.3.1)
|
||||||
react: 18.3.1
|
react: 18.3.1
|
||||||
server-only: 0.0.1
|
server-only: 0.0.1
|
||||||
dev: false
|
dev: false
|
||||||
@ -3590,6 +3593,14 @@ packages:
|
|||||||
- supports-color
|
- supports-color
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/geist@1.3.1(next@14.2.21):
|
||||||
|
resolution: {integrity: sha512-Q4gC1pBVPN+D579pBaz0TRRnGA4p9UK6elDY/xizXdFk/g4EKR5g0I+4p/Kj6gM0SajDBZ/0FvDV9ey9ud7BWw==}
|
||||||
|
peerDependencies:
|
||||||
|
next: '>=13.2.0'
|
||||||
|
dependencies:
|
||||||
|
next: 14.2.21(react-dom@18.3.1)(react@18.3.1)
|
||||||
|
dev: false
|
||||||
|
|
||||||
/geojson-vt@4.0.2:
|
/geojson-vt@4.0.2:
|
||||||
resolution: {integrity: sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A==}
|
resolution: {integrity: sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A==}
|
||||||
dev: false
|
dev: false
|
||||||
@ -5104,8 +5115,8 @@ packages:
|
|||||||
react-dom: 18.3.1(react@18.3.1)
|
react-dom: 18.3.1(react@18.3.1)
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/next@14.2.20(react-dom@18.3.1)(react@18.3.1):
|
/next@14.2.21(react-dom@18.3.1)(react@18.3.1):
|
||||||
resolution: {integrity: sha512-yPvIiWsiyVYqJlSQxwmzMIReXn5HxFNq4+tlVQ812N1FbvhmE+fDpIAD7bcS2mGYQwPJ5vAsQouyme2eKsxaug==}
|
resolution: {integrity: sha512-rZmLwucLHr3/zfDMYbJXbw0ZeoBpirxkXuvsJbk7UPorvPYZhP7vq7aHbKnU7dQNCYIimRrbB2pp3xmf+wsYUg==}
|
||||||
engines: {node: '>=18.17.0'}
|
engines: {node: '>=18.17.0'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@ -5122,7 +5133,7 @@ packages:
|
|||||||
sass:
|
sass:
|
||||||
optional: true
|
optional: true
|
||||||
dependencies:
|
dependencies:
|
||||||
'@next/env': 14.2.20
|
'@next/env': 14.2.21
|
||||||
'@swc/helpers': 0.5.5
|
'@swc/helpers': 0.5.5
|
||||||
busboy: 1.6.0
|
busboy: 1.6.0
|
||||||
caniuse-lite: 1.0.30001667
|
caniuse-lite: 1.0.30001667
|
||||||
@ -5132,15 +5143,15 @@ packages:
|
|||||||
react-dom: 18.3.1(react@18.3.1)
|
react-dom: 18.3.1(react@18.3.1)
|
||||||
styled-jsx: 5.1.1(react@18.3.1)
|
styled-jsx: 5.1.1(react@18.3.1)
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@next/swc-darwin-arm64': 14.2.20
|
'@next/swc-darwin-arm64': 14.2.21
|
||||||
'@next/swc-darwin-x64': 14.2.20
|
'@next/swc-darwin-x64': 14.2.21
|
||||||
'@next/swc-linux-arm64-gnu': 14.2.20
|
'@next/swc-linux-arm64-gnu': 14.2.21
|
||||||
'@next/swc-linux-arm64-musl': 14.2.20
|
'@next/swc-linux-arm64-musl': 14.2.21
|
||||||
'@next/swc-linux-x64-gnu': 14.2.20
|
'@next/swc-linux-x64-gnu': 14.2.21
|
||||||
'@next/swc-linux-x64-musl': 14.2.20
|
'@next/swc-linux-x64-musl': 14.2.21
|
||||||
'@next/swc-win32-arm64-msvc': 14.2.20
|
'@next/swc-win32-arm64-msvc': 14.2.21
|
||||||
'@next/swc-win32-ia32-msvc': 14.2.20
|
'@next/swc-win32-ia32-msvc': 14.2.21
|
||||||
'@next/swc-win32-x64-msvc': 14.2.20
|
'@next/swc-win32-x64-msvc': 14.2.21
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@babel/core'
|
- '@babel/core'
|
||||||
- babel-plugin-macros
|
- babel-plugin-macros
|
||||||
|
|||||||
@ -23,9 +23,9 @@ const config = {
|
|||||||
'screen-small': '100svh',
|
'screen-small': '100svh',
|
||||||
},
|
},
|
||||||
fontFamily: {
|
fontFamily: {
|
||||||
sans: ['Inter', 'sans-serif'],
|
sans: ['var(--font-geist-sans)'],
|
||||||
serif: ['var(--font-serif)', 'serif'],
|
serif: ['var(--font-serif)'],
|
||||||
mono: ['var(--font-mono)', 'monospace'],
|
mono: ['var(--font-geist-mono)'],
|
||||||
},
|
},
|
||||||
colors: {
|
colors: {
|
||||||
border: "hsl(var(--border))",
|
border: "hsl(var(--border))",
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user