Bug fixes ()

* fix black text for custom messages text

* fix file upload icon being stretched

* center github, docs, and discord icons in sidebar

* fix chat container being cut off on right side and tighter spacing between message

* fix default chat container being cut off on right side

* on create new workspace, take user to the workspace they just created instead of the home page

* add border to chat container and click outside user menu to close

* fix borders around all chat and settings containers to be consistent

* fix padding for default messages

* fix spacing between workspace items in sidebar

* fix margin around right side of chat, default, and settings containers to be the same as the left sidebar

---------

Co-authored-by: timothycarambat <rambat1010@gmail.com>
This commit is contained in:
Sean Hatfield 2023-11-27 13:09:55 -08:00 committed by GitHub
parent 55d319b527
commit ca8bf52cce
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
25 changed files with 87 additions and 61 deletions
frontend/src
components
ChatBubble
DefaultChat
Modals
MangeWorkspace/Documents/UploadFile/FileUploadProgress
NewWorkspace.jsx
SettingsSidebar
Sidebar
ActiveWorkspaces
index.jsx
UserMenu
WorkspaceChat
ChatContainer
ChatHistory
HistoricalMessage
PromptReply
index.jsx
LoadingChat
index.css
pages
Admin
Invitations
System
Users
Workspaces
GeneralSettings
ApiKeys
Appearance
Chats
EmbeddingPreference
ExportImport
LLMPreference
Security
VectorDatabase

View file

@ -13,7 +13,7 @@ export default function ChatBubble({ message, type, popMsg }) {
return ( return (
<div className={`flex justify-center items-end w-full ${backgroundColor}`}> <div className={`flex justify-center items-end w-full ${backgroundColor}`}>
<div <div
className={`py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`} className={`py-8 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`}
> >
<div className="flex gap-x-5"> <div className="flex gap-x-5">
<Jazzicon <Jazzicon

View file

@ -45,7 +45,7 @@ export default function DefaultChatContainer() {
className={`flex justify-center items-end w-full ${AI_BACKGROUND_COLOR} md:mt-0 mt-[40px]`} className={`flex justify-center items-end w-full ${AI_BACKGROUND_COLOR} md:mt-0 mt-[40px]`}
> >
<div <div
className={`py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`} className={`pt-10 pb-6 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`}
> >
<div className="flex gap-x-5"> <div className="flex gap-x-5">
<Jazzicon size={36} user={{ uid: "system" }} role={"assistant"} /> <Jazzicon size={36} user={{ uid: "system" }} role={"assistant"} />
@ -69,7 +69,7 @@ export default function DefaultChatContainer() {
className={`flex justify-center items-end w-full ${AI_BACKGROUND_COLOR}`} className={`flex justify-center items-end w-full ${AI_BACKGROUND_COLOR}`}
> >
<div <div
className={`py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`} className={`pb-4 pt-2 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`}
> >
<div className="flex gap-x-5"> <div className="flex gap-x-5">
<Jazzicon size={36} user={{ uid: "system" }} role={"assistant"} /> <Jazzicon size={36} user={{ uid: "system" }} role={"assistant"} />
@ -92,7 +92,7 @@ export default function DefaultChatContainer() {
className={`flex justify-center items-end w-full ${AI_BACKGROUND_COLOR}`} className={`flex justify-center items-end w-full ${AI_BACKGROUND_COLOR}`}
> >
<div <div
className={`py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`} className={`pt-2 pb-6 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`}
> >
<div className="flex gap-x-5"> <div className="flex gap-x-5">
<Jazzicon size={36} user={{ uid: "system" }} role={"assistant"} /> <Jazzicon size={36} user={{ uid: "system" }} role={"assistant"} />
@ -126,7 +126,7 @@ export default function DefaultChatContainer() {
className={`flex justify-center items-end w-full ${USER_BACKGROUND_COLOR}`} className={`flex justify-center items-end w-full ${USER_BACKGROUND_COLOR}`}
> >
<div <div
className={`py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`} className={`py-6 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`}
> >
<div className="flex gap-x-5"> <div className="flex gap-x-5">
<Jazzicon <Jazzicon
@ -150,7 +150,7 @@ export default function DefaultChatContainer() {
className={`flex justify-center items-end w-full ${AI_BACKGROUND_COLOR}`} className={`flex justify-center items-end w-full ${AI_BACKGROUND_COLOR}`}
> >
<div <div
className={`py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`} className={`py-6 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`}
> >
<div className="flex gap-x-5"> <div className="flex gap-x-5">
<Jazzicon size={36} user={{ uid: "system" }} role={"assistant"} /> <Jazzicon size={36} user={{ uid: "system" }} role={"assistant"} />
@ -185,7 +185,7 @@ export default function DefaultChatContainer() {
className={`flex justify-center items-end w-full ${USER_BACKGROUND_COLOR}`} className={`flex justify-center items-end w-full ${USER_BACKGROUND_COLOR}`}
> >
<div <div
className={`py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`} className={`py-6 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`}
> >
<div className="flex gap-x-5"> <div className="flex gap-x-5">
<Jazzicon <Jazzicon
@ -210,7 +210,7 @@ export default function DefaultChatContainer() {
className={`flex justify-center items-end w-full ${AI_BACKGROUND_COLOR}`} className={`flex justify-center items-end w-full ${AI_BACKGROUND_COLOR}`}
> >
<div <div
className={`py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`} className={`py-6 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`}
> >
<div className="flex gap-x-5"> <div className="flex gap-x-5">
<Jazzicon size={36} user={{ uid: "system" }} role={"assistant"} /> <Jazzicon size={36} user={{ uid: "system" }} role={"assistant"} />
@ -248,7 +248,7 @@ export default function DefaultChatContainer() {
className={`flex justify-center items-end w-full ${USER_BACKGROUND_COLOR}`} className={`flex justify-center items-end w-full ${USER_BACKGROUND_COLOR}`}
> >
<div <div
className={`py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`} className={`py-6 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`}
> >
<div className="flex gap-x-5"> <div className="flex gap-x-5">
<Jazzicon <Jazzicon
@ -272,7 +272,7 @@ export default function DefaultChatContainer() {
className={`flex justify-center items-end w-full ${AI_BACKGROUND_COLOR}`} className={`flex justify-center items-end w-full ${AI_BACKGROUND_COLOR}`}
> >
<div <div
className={`py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`} className={`py-6 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`}
> >
<div className="flex gap-x-5"> <div className="flex gap-x-5">
<Jazzicon size={36} user={{ uid: "system" }} role={"assistant"} /> <Jazzicon size={36} user={{ uid: "system" }} role={"assistant"} />
@ -335,7 +335,7 @@ export default function DefaultChatContainer() {
return ( return (
<div <div
style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }} style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient w-full md:min-w-[82%] h-full overflow-y-scroll" className="transition-all duration-500 relative md:ml-[2px] md:mr-[16px] md:my-[16px] md:rounded-[26px] bg-main-gradient w-full h-full overflow-y-scroll border-4 border-accent"
> >
{isMobile && <SidebarMobileHeader />} {isMobile && <SidebarMobileHeader />}
{fetchedMessages.length === 0 {fetchedMessages.length === 0

View file

@ -45,7 +45,7 @@ function FileUploadProgressComponent({
if (rejected) { if (rejected) {
return ( return (
<div className="h-14 px-2 py-2 flex items-center gap-x-4 rounded-lg bg-white/5 border border-white/40"> <div className="h-14 px-2 py-2 flex items-center gap-x-4 rounded-lg bg-white/5 border border-white/40">
<div className="w-6 h-6"> <div className="w-6 h-6 flex-shrink-0">
<XCircle className="w-6 h-6 stroke-white bg-red-500 rounded-full p-1 w-full h-full" /> <XCircle className="w-6 h-6 stroke-white bg-red-500 rounded-full p-1 w-full h-full" />
</div> </div>
<div className="flex flex-col"> <div className="flex flex-col">

View file

@ -1,6 +1,7 @@
import React, { useRef, useState } from "react"; import React, { useRef, useState } from "react";
import { X } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react";
import Workspace from "../../models/workspace"; import Workspace from "../../models/workspace";
import paths from "../../utils/paths";
const noop = () => false; const noop = () => false;
export default function NewWorkspaceModal({ hideModal = noop }) { export default function NewWorkspaceModal({ hideModal = noop }) {
@ -13,7 +14,9 @@ export default function NewWorkspaceModal({ hideModal = noop }) {
const form = new FormData(formEl.current); const form = new FormData(formEl.current);
for (var [key, value] of form.entries()) data[key] = value; for (var [key, value] of form.entries()) data[key] = value;
const { workspace, message } = await Workspace.new(data); const { workspace, message } = await Workspace.new(data);
if (!!workspace) window.location.reload(); if (!!workspace){
window.location.href = paths.workspace.chat(workspace.slug);
}
setError(message); setError(message);
}; };
@ -26,7 +29,7 @@ export default function NewWorkspaceModal({ hideModal = noop }) {
<div className="relative w-[500px] max-h-full"> <div className="relative w-[500px] max-h-full">
<div className="relative bg-modal-gradient rounded-lg shadow-md border-2 border-accent"> <div className="relative bg-modal-gradient rounded-lg shadow-md border-2 border-accent">
<div className="flex items-start justify-between p-4 border-b rounded-t border-white/10"> <div className="flex items-start justify-between p-4 border-b rounded-t border-white/10">
<h3 className="text-xl font-semibold text-gray-900 dark:text-white"> <h3 className="text-xl font-semibold text-white">
New Workspace New Workspace
</h3> </h3>
<button <button
@ -43,7 +46,7 @@ export default function NewWorkspaceModal({ hideModal = noop }) {
<div> <div>
<label <label
htmlFor="name" htmlFor="name"
className="block mb-2 text-sm font-medium text-gray-900 dark:text-white" className="block mb-2 text-sm font-medium text-white"
> >
Workspace Name Workspace Name
</label> </label>
@ -58,7 +61,7 @@ export default function NewWorkspaceModal({ hideModal = noop }) {
/> />
</div> </div>
{error && ( {error && (
<p className="text-red-600 dark:text-red-400 text-sm"> <p className="text-red-400 text-sm">
Error: {error} Error: {error}
</p> </p>
)} )}

View file

@ -167,9 +167,9 @@ export default function SettingsSidebar() {
className="h-5 w-5 stroke-slate-200 group-hover:stroke-slate-200" className="h-5 w-5 stroke-slate-200 group-hover:stroke-slate-200"
/> />
</a> </a>
<button className="invisible transition-all duration-300 p-2 rounded-full text-white bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"> {/* <button className="invisible transition-all duration-300 p-2 rounded-full text-white bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border">
<DotsThree className="h-5 w-5 group-hover:stroke-slate-200" /> <DotsThree className="h-5 w-5 group-hover:stroke-slate-200" />
</button> </button> */}
</div> </div>
</div> </div>
</div> </div>

View file

@ -57,7 +57,7 @@ export default function ActiveWorkspaces() {
href={isActive ? null : paths.workspace.chat(workspace.slug)} href={isActive ? null : paths.workspace.chat(workspace.slug)}
className={` className={`
transition-all duration-[200ms] transition-all duration-[200ms]
flex flex-grow w-[75%] gap-x-2 py-[9px] px-[12px] rounded-lg text-slate-200 justify-start items-center border flex flex-grow w-[75%] gap-x-2 py-[6px] px-[12px] rounded-lg text-slate-200 justify-start items-center border
hover:bg-workspace-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 hover:bg-workspace-item-selected-gradient hover:border-slate-100 hover:border-opacity-50
${ ${
isActive isActive

View file

@ -54,12 +54,12 @@ export default function Sidebar() {
{/* Primary Body */} {/* Primary Body */}
<div className="flex-grow flex flex-col"> <div className="flex-grow flex flex-col">
<div className="flex flex-col gap-y-4 pb-8 overflow-y-scroll no-scroll"> <div className="flex flex-col gap-y-2 pb-8 overflow-y-scroll no-scroll">
<div className="flex gap-x-2 items-center justify-between"> <div className="flex gap-x-2 items-center justify-between">
{(!user || user?.role !== "default") && ( {(!user || user?.role !== "default") && (
<button <button
onClick={showNewWsModal} onClick={showNewWsModal}
className="flex flex-grow w-[75%] h-[44px] gap-x-2 py-[5px] px-4 bg-white rounded-lg text-sidebar justify-center items-center hover:bg-opacity-80 transition-all duration-300" className="flex flex-grow w-[75%] h-[44px] gap-x-2 py-[5px] px-4 mb-2 bg-white rounded-lg text-sidebar justify-center items-center hover:bg-opacity-80 transition-all duration-300"
> >
<Plus className="h-5 w-5" /> <Plus className="h-5 w-5" />
<p className="text-sidebar text-sm font-semibold"> <p className="text-sidebar text-sm font-semibold">
@ -114,9 +114,9 @@ export default function Sidebar() {
className="h-5 w-5 stroke-slate-200 group-hover:stroke-slate-200" className="h-5 w-5 stroke-slate-200 group-hover:stroke-slate-200"
/> />
</a> </a>
<button className="invisible transition-all duration-300 p-2 rounded-full text-white bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"> {/* <button className="invisible transition-all duration-300 p-2 rounded-full text-white bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border">
<DotsThree className="h-5 w-5 group-hover:stroke-slate-200" /> <DotsThree className="h-5 w-5 group-hover:stroke-slate-200" />
</button> </button> */}
</div> </div>
</div> </div>
</div> </div>

View file

@ -1,9 +1,9 @@
import { useState } from "react"; import React, { useState, useEffect, useRef } from 'react';
import { isMobile } from "react-device-detect"; import { isMobile } from 'react-device-detect';
import paths from "../../utils/paths"; import paths from '../../utils/paths';
import { AUTH_TIMESTAMP, AUTH_TOKEN, AUTH_USER } from "../../utils/constants"; import { AUTH_TIMESTAMP, AUTH_TOKEN, AUTH_USER } from '../../utils/constants';
import { Person, SignOut } from "@phosphor-icons/react"; import { Person, SignOut } from '@phosphor-icons/react';
import { userFromStorage } from "../../utils/request"; import { userFromStorage } from '../../utils/request';
export default function UserMenu({ children }) { export default function UserMenu({ children }) {
if (isMobile) return <>{children}</>; if (isMobile) return <>{children}</>;
@ -20,33 +20,56 @@ function useLoginMode() {
const user = !!window.localStorage.getItem(AUTH_USER); const user = !!window.localStorage.getItem(AUTH_USER);
const token = !!window.localStorage.getItem(AUTH_TOKEN); const token = !!window.localStorage.getItem(AUTH_TOKEN);
if (user && token) return "multi"; if (user && token) return 'multi';
if (!user && token) return "single"; if (!user && token) return 'single';
return null; return null;
} }
function userDisplay() { function userDisplay() {
const user = userFromStorage(); const user = userFromStorage();
return user?.username?.slice(0, 2) || "AA"; return user?.username?.slice(0, 2) || 'AA';
} }
function UserButton() { function UserButton() {
const [showMenu, setShowMenu] = useState(false); const [showMenu, setShowMenu] = useState(false);
const mode = useLoginMode(); const mode = useLoginMode();
const menuRef = useRef();
const buttonRef = useRef();
const handleClose = (event) => {
if (
menuRef.current &&
!menuRef.current.contains(event.target) &&
!buttonRef.current.contains(event.target)
) {
setShowMenu(false);
}
};
useEffect(() => {
if (showMenu) {
document.addEventListener('mousedown', handleClose);
}
return () => document.removeEventListener('mousedown', handleClose);
}, [showMenu]);
if (mode === null) return null; if (mode === null) return null;
return ( return (
<div className="absolute top-9 right-10 w-fit h-fit z-99"> <div className="absolute top-9 right-10 w-fit h-fit z-99">
<button <button
ref={buttonRef}
onClick={() => setShowMenu(!showMenu)} onClick={() => setShowMenu(!showMenu)}
type="button" type="button"
className="uppercase transition-all duration-300 w-[35px] h-[35px] text-base font-semibold rounded-full flex items-center bg-sidebar-button hover:bg-menu-item-selected-gradient justify-center text-white p-2 hover:border-slate-100 hover:border-opacity-50 border-transparent border" className="uppercase transition-all duration-300 w-[35px] h-[35px] text-base font-semibold rounded-full flex items-center bg-sidebar-button hover:bg-menu-item-selected-gradient justify-center text-white p-2 hover:border-slate-100 hover:border-opacity-50 border-transparent border"
> >
{mode === "multi" ? userDisplay() : <Person size={14} />} {mode === 'multi' ? userDisplay() : <Person size={14} />}
</button> </button>
{showMenu && ( {showMenu && (
<div className="w-fit rounded-lg absolute top-12 right-0 bg-sidebar p-4 flex items-center-justify-center"> <div
ref={menuRef}
className="w-fit rounded-lg absolute top-12 right-0 bg-sidebar p-4 flex items-center-justify-center"
>
<div className="flex flex-col gap-y-2"> <div className="flex flex-col gap-y-2">
<a <a
href={paths.mailToMintplex()} href={paths.mailToMintplex()}

View file

@ -24,7 +24,7 @@ const HistoricalMessage = forwardRef(
}`} }`}
> >
<div <div
className={`py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`} className={`py-8 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`}
> >
<div className="flex gap-x-5"> <div className="flex gap-x-5">
<Jazzicon <Jazzicon

View file

@ -19,7 +19,7 @@ const PromptReply = forwardRef(
ref={ref} ref={ref}
className={`flex justify-center items-end w-full ${assistantBackgroundColor}`} className={`flex justify-center items-end w-full ${assistantBackgroundColor}`}
> >
<div className="py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col"> <div className="py-8 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col">
<div className="flex gap-x-5"> <div className="flex gap-x-5">
<Jazzicon <Jazzicon
size={36} size={36}
@ -38,7 +38,7 @@ const PromptReply = forwardRef(
<div <div
className={`flex justify-center items-end w-full ${assistantBackgroundColor}`} className={`flex justify-center items-end w-full ${assistantBackgroundColor}`}
> >
<div className="py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col"> <div className="py-8 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col">
<div className="flex gap-x-5"> <div className="flex gap-x-5">
<Jazzicon <Jazzicon
size={36} size={36}
@ -64,7 +64,7 @@ const PromptReply = forwardRef(
ref={ref} ref={ref}
className={`flex justify-center items-end w-full ${assistantBackgroundColor}`} className={`flex justify-center items-end w-full ${assistantBackgroundColor}`}
> >
<div className="py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col"> <div className="py-8 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col">
<div className="flex gap-x-5"> <div className="flex gap-x-5">
<Jazzicon <Jazzicon
size={36} size={36}

View file

@ -85,7 +85,7 @@ export default function ChatContainer({ workspace, knownHistory = [] }) {
return ( return (
<div <div
style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }} style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient w-full md:min-w-[82%] h-full overflow-y-scroll" className="transition-all duration-500 relative md:ml-[2px] md:mr-[16px] md:my-[16px] md:rounded-[26px] bg-main-gradient w-full h-full overflow-y-scroll border-4 border-accent"
> >
{isMobile && <SidebarMobileHeader />} {isMobile && <SidebarMobileHeader />}
<div className="flex flex-col h-full w-full md:mt-0 mt-[40px]"> <div className="flex flex-col h-full w-full md:mt-0 mt-[40px]">

View file

@ -8,7 +8,7 @@ export default function LoadingChat() {
return ( return (
<div <div
style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }} style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient w-full md:min-w-[82%] p-[18px] h-full overflow-y-scroll" className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient w-full h-full overflow-y-scroll"
> >
<Skeleton.default <Skeleton.default
height="100px" height="100px"

View file

@ -378,4 +378,4 @@ dialog::backdrop {
100% { 100% {
opacity: 0; opacity: 0;
} }
} }

View file

@ -17,7 +17,7 @@ export default function AdminInvites() {
{!isMobile && <Sidebar />} {!isMobile && <Sidebar />}
<div <div
style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }} style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll" className="transition-all duration-500 relative md:ml-[2px] md:mr-[16px] md:my-[16px] md:rounded-[26px] bg-main-gradient w-full h-full overflow-y-scroll border-4 border-accent"
> >
{isMobile && <SidebarMobileHeader />} {isMobile && <SidebarMobileHeader />}
<div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16"> <div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16">

View file

@ -45,7 +45,7 @@ export default function AdminSystem() {
{!isMobile && <Sidebar />} {!isMobile && <Sidebar />}
<div <div
style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }} style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll" className="transition-all duration-500 relative md:ml-[2px] md:mr-[16px] md:my-[16px] md:rounded-[26px] bg-main-gradient w-full h-full overflow-y-scroll border-4 border-accent"
> >
{isMobile && <SidebarMobileHeader />} {isMobile && <SidebarMobileHeader />}
<form <form

View file

@ -17,7 +17,7 @@ export default function AdminUsers() {
{!isMobile && <Sidebar />} {!isMobile && <Sidebar />}
<div <div
style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }} style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll" className="transition-all duration-500 relative md:ml-[2px] md:mr-[16px] md:my-[16px] md:rounded-[26px] bg-main-gradient w-full h-full overflow-y-scroll border-4 border-accent"
> >
{isMobile && <SidebarMobileHeader />} {isMobile && <SidebarMobileHeader />}
<div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16"> <div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16">

View file

@ -17,7 +17,7 @@ export default function AdminWorkspaces() {
{!isMobile && <Sidebar />} {!isMobile && <Sidebar />}
<div <div
style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }} style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll" className="transition-all duration-500 relative md:ml-[2px] md:mr-[16px] md:my-[16px] md:rounded-[26px] bg-main-gradient w-full h-full overflow-y-scroll border-4 border-accent"
> >
{isMobile && <SidebarMobileHeader />} {isMobile && <SidebarMobileHeader />}
<div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16"> <div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16">

View file

@ -19,7 +19,7 @@ export default function AdminApiKeys() {
{!isMobile && <Sidebar />} {!isMobile && <Sidebar />}
<div <div
style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }} style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll" className="transition-all duration-500 relative md:ml-[2px] md:mr-[16px] md:my-[16px] md:rounded-[26px] bg-main-gradient w-full h-full overflow-y-scroll border-4 border-accent"
> >
{isMobile && <SidebarMobileHeader />} {isMobile && <SidebarMobileHeader />}
<div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16"> <div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16">

View file

@ -113,7 +113,7 @@ export default function Appearance() {
{!isMobile && <Sidebar />} {!isMobile && <Sidebar />}
<div <div
style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }} style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll" className="transition-all duration-500 relative md:ml-[2px] md:mr-[16px] md:my-[16px] md:rounded-[26px] bg-main-gradient w-full h-full overflow-y-scroll border-4 border-accent"
> >
{isMobile && <SidebarMobileHeader />} {isMobile && <SidebarMobileHeader />}
<div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16"> <div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16">
@ -184,7 +184,7 @@ export default function Appearance() {
</div> </div>
<div className="mb-6"> <div className="mb-6">
<div className="flex flex-col gap-y-2"> <div className="flex flex-col gap-y-2">
<h2 className="leading-tight font-medium text-black dark:text-white"> <h2 className="leading-tight font-medium text-white">
Custom Messages Custom Messages
</h2> </h2>
<p className="text-sm font-base text-white/60"> <p className="text-sm font-base text-white/60">
@ -238,7 +238,7 @@ export default function Appearance() {
{hasChanges && ( {hasChanges && (
<div className="flex justify-center py-6"> <div className="flex justify-center py-6">
<button <button
className="ml-4 cursor-pointer text-gray-500 bg-white hover:bg-gray-100 focus:ring-4 focus:outline-none focus:ring-blue-300 rounded-lg border border-gray-200 text-sm font-medium px-5 py-2.5 hover:text-gray-900 focus:z-10 dark:bg-gray-700 dark:text-gray-300 dark:border-gray-500 dark:hover:text-white dark:hover:bg-gray-600 dark:focus:ring-gray-600" className="transition-all duration-300 border border-slate-200 px-4 py-2 rounded-lg text-white text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800 focus:ring-gray-800"
onClick={handleMessageSave} onClick={handleMessageSave}
> >
Save Messages Save Messages

View file

@ -37,7 +37,7 @@ export default function WorkspaceChats() {
{!isMobile && <Sidebar />} {!isMobile && <Sidebar />}
<div <div
style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }} style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll" className="transition-all duration-500 relative md:ml-[2px] md:mr-[16px] md:my-[16px] md:rounded-[26px] bg-main-gradient w-full h-full overflow-y-scroll border-4 border-accent"
> >
{isMobile && <SidebarMobileHeader />} {isMobile && <SidebarMobileHeader />}
<div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16"> <div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16">

View file

@ -83,7 +83,7 @@ export default function GeneralEmbeddingPreference() {
{loading ? ( {loading ? (
<div <div
style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }} style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll animate-pulse" className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient p-[18px] h-full overflow-y-scroll animate-pulse border-4 border-accent"
> >
<div className="w-full h-full flex justify-center items-center"> <div className="w-full h-full flex justify-center items-center">
<PreLoader /> <PreLoader />
@ -92,7 +92,7 @@ export default function GeneralEmbeddingPreference() {
) : ( ) : (
<div <div
style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }} style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll" className="transition-all duration-500 relative md:ml-[2px] md:mr-[16px] md:my-[16px] md:rounded-[26px] bg-main-gradient w-full h-full overflow-y-scroll border-4 border-accent"
> >
{isMobile && <SidebarMobileHeader />} {isMobile && <SidebarMobileHeader />}
<form <form

View file

@ -20,7 +20,7 @@ export default function GeneralExportImport() {
{!isMobile && <Sidebar />} {!isMobile && <Sidebar />}
<div <div
style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }} style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll" className="transition-all duration-500 relative md:ml-[2px] md:mr-[16px] md:my-[16px] md:rounded-[26px] bg-main-gradient w-full h-full overflow-y-scroll border-4 border-accent"
> >
{isMobile && <SidebarMobileHeader />} {isMobile && <SidebarMobileHeader />}
<div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16"> <div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16">
@ -55,7 +55,7 @@ export default function GeneralExportImport() {
{!isMobile && <Sidebar />} {!isMobile && <Sidebar />}
<div <div
style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }} style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll" className="transition-all duration-500 relative md:ml-[2px] md:mr-[16px] md:my-[16px] md:rounded-[26px] bg-main-gradient w-full h-full overflow-y-scroll border-4 border-accent"
> >
{isMobile && <SidebarMobileHeader />} {isMobile && <SidebarMobileHeader />}
<div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16"> <div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16">

View file

@ -62,7 +62,7 @@ export default function GeneralLLMPreference() {
{loading ? ( {loading ? (
<div <div
style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }} style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll animate-pulse" className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient p-[18px] h-full overflow-y-scroll animate-pulse border-4 border-accent"
> >
<div className="w-full h-full flex justify-center items-center"> <div className="w-full h-full flex justify-center items-center">
<PreLoader /> <PreLoader />
@ -71,7 +71,7 @@ export default function GeneralLLMPreference() {
) : ( ) : (
<div <div
style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }} style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll" className="transition-all duration-500 relative md:ml-[2px] md:mr-[16px] md:my-[16px] md:rounded-[26px] bg-main-gradient w-full h-full overflow-y-scroll border-4 border-accent"
> >
{isMobile && <SidebarMobileHeader />} {isMobile && <SidebarMobileHeader />}
<form <form

View file

@ -19,7 +19,7 @@ export default function GeneralSecurity() {
{!isMobile && <Sidebar />} {!isMobile && <Sidebar />}
<div <div
style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }} style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll" className="transition-all duration-500 relative md:ml-[2px] md:mr-[16px] md:my-[16px] md:rounded-[26px] bg-main-gradient w-full h-full overflow-y-scroll border-4 border-accent"
> >
{isMobile && <SidebarMobileHeader />} {isMobile && <SidebarMobileHeader />}
<MultiUserMode /> <MultiUserMode />
@ -78,7 +78,7 @@ function MultiUserMode() {
if (loading) { if (loading) {
return ( return (
<div className="h-1/2 transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] md:min-w-[82%] p-[18px] h-full overflow-y-scroll"> <div className="h-1/2 transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] p-[18px] h-full overflow-y-scroll">
<div className="w-full h-full flex justify-center items-center"> <div className="w-full h-full flex justify-center items-center">
<PreLoader /> <PreLoader />
</div> </div>
@ -242,7 +242,7 @@ function PasswordProtection() {
if (loading) { if (loading) {
return ( return (
<div className="h-1/2 transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] md:min-w-[82%] p-[18px] h-full overflow-y-scroll"> <div className="h-1/2 transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] p-[18px] h-full overflow-y-scroll">
<div className="w-full h-full flex justify-center items-center"> <div className="w-full h-full flex justify-center items-center">
<PreLoader /> <PreLoader />
</div> </div>

View file

@ -78,7 +78,7 @@ export default function GeneralVectorDatabase() {
{loading ? ( {loading ? (
<div <div
style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }} style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll animate-pulse" className="transition-all duration-500 relative md:ml-[2px] md:mr-[16px] md:my-[16px] md:rounded-[26px] bg-main-gradient w-full h-full overflow-y-scroll border-4 border-accent animate-pulse"
> >
<div className="w-full h-full flex justify-center items-center"> <div className="w-full h-full flex justify-center items-center">
<PreLoader /> <PreLoader />
@ -87,7 +87,7 @@ export default function GeneralVectorDatabase() {
) : ( ) : (
<div <div
style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }} style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll" className="transition-all duration-500 relative md:ml-[2px] md:mr-[16px] md:my-[16px] md:rounded-[26px] bg-main-gradient w-full h-full overflow-y-scroll border-4 border-accent"
> >
{isMobile && <SidebarMobileHeader />} {isMobile && <SidebarMobileHeader />}
<form <form