Merge branch 'main' of https://github.com/janhq/jan into framework

This commit is contained in:
0xSage 2024-01-08 15:07:43 +08:00
commit 358bc98137
3 changed files with 54 additions and 13 deletions

View File

@ -36,7 +36,7 @@ Our life-long mission is to **eliminate work - so human can focus on creation, i
### Ideal Customer ### Ideal Customer
Our ideal customer is an AI enthusiast or business who has experienced some limitations with OpenAI, and is keen to find open source alternatives. Our ideal customer is an AI enthusiast or business who has experienced some limitations with current AI solutions and is keen to find open source alternatives.
### Problems ### Problems
@ -53,7 +53,7 @@ _Privacy_
- Data protection (e.g. personal data or company data) - Data protection (e.g. personal data or company data)
- Privacy (e.g. nsfw) - Privacy (e.g. nsfw)
_Customizability_ _Customisability_
- Tinkerability (e.g. ability to change model, experiment) - Tinkerability (e.g. ability to change model, experiment)
- Niche Models (e.g. fine-tuned, domain-specific models that outperform OpenAI) - Niche Models (e.g. fine-tuned, domain-specific models that outperform OpenAI)
@ -85,10 +85,11 @@ Jan is a startup with an open source business model. We believe in the need for
### Build in Public ### Build in Public
We use Github to build in public, and welcome anyone to join in. We use GitHub to build in public and welcome anyone to join in.
- [Jan's Kanban](https://github.com/orgs/janhq/projects/5) - [Jan's Kanban](https://github.com/orgs/janhq/projects/5)
- [Jan's Roadmap](https://github.com/orgs/janhq/projects/5/views/29) - [Jan's Roadmap](https://github.com/orgs/janhq/projects/5/views/29)
- [Jan's Newsletter](https://newsletter.jan.ai)
### Bootstrapped ### Bootstrapped
@ -98,7 +99,7 @@ We appreciate any business that can balance growth with cashflow/profitability.
### Remote Team ### Remote Team
Jan has a fully-remote team. We are mainly based in the Asia timezone. We use [Discord](https://discord.gg/af6SaTdzpx) and [Github](https://github.com/janhq) to work. Jan has a fully-remote team. We are mainly based in the APAC timezone. We use [Discord](https://discord.gg/af6SaTdzpx) and [Github](https://github.com/janhq) to work.
## Contact ## Contact
@ -109,6 +110,7 @@ Drop us a message in our [Discord](https://discord.gg/af6SaTdzpx) and we'll get
- `#general`: for general discussion - `#general`: for general discussion
- `#jan-dev`: for Jan-related questions - `#jan-dev`: for Jan-related questions
- `#nitro-dev`: for Nitro-related questions - `#nitro-dev`: for Nitro-related questions
- '#bd-inquiries': for enterprise license queries
### Careers ### Careers

View File

@ -1,20 +1,22 @@
import { useState } from 'react' import { useState } from 'react'
import { getUserSpace, joinPath, openFileExplorer } from '@janhq/core' import { getUserSpace, joinPath, openFileExplorer } from '@janhq/core'
import { useAtomValue, useSetAtom } from 'jotai' import { useAtom, useAtomValue } from 'jotai'
import { import {
PanelLeftIcon,
PenSquareIcon, PenSquareIcon,
PanelRightIcon,
MoreVerticalIcon, MoreVerticalIcon,
FolderOpenIcon, FolderOpenIcon,
Code2Icon, Code2Icon,
PanelLeftCloseIcon,
PanelRightCloseIcon,
} from 'lucide-react' } from 'lucide-react'
import { twMerge } from 'tailwind-merge' import { twMerge } from 'tailwind-merge'
import CommandSearch from '@/containers/Layout/TopBar/CommandSearch' import CommandSearch from '@/containers/Layout/TopBar/CommandSearch'
import { showLeftSideBarAtom } from '@/containers/Providers/KeyListener'
import { MainViewState } from '@/constants/screens' import { MainViewState } from '@/constants/screens'
import { useClickOutside } from '@/hooks/useClickOutside' import { useClickOutside } from '@/hooks/useClickOutside'
@ -31,7 +33,8 @@ const TopBar = () => {
const { mainViewState } = useMainViewState() const { mainViewState } = useMainViewState()
const { requestCreateNewThread } = useCreateNewThread() const { requestCreateNewThread } = useCreateNewThread()
const { assistants } = useGetAssistants() const { assistants } = useGetAssistants()
const setShowRightSideBar = useSetAtom(showRightSideBarAtom) const [showRightSideBar, setShowRightSideBar] = useAtom(showRightSideBarAtom)
const [showLeftSideBar, setShowLeftSideBar] = useAtom(showLeftSideBarAtom)
const showing = useAtomValue(showRightSideBarAtom) const showing = useAtomValue(showRightSideBarAtom)
const threadStates = useAtomValue(threadStatesAtom) const threadStates = useAtomValue(threadStatesAtom)
const [more, setMore] = useState(false) const [more, setMore] = useState(false)
@ -105,10 +108,16 @@ const TopBar = () => {
<div className="relative w-full"> <div className="relative w-full">
<div className="absolute left-16 h-full w-60 border-r border-border"> <div className="absolute left-16 h-full w-60 border-r border-border">
<div className="flex h-full w-full items-center justify-between"> <div className="flex h-full w-full items-center justify-between">
<div className="cursor-pointer"> <div
<PanelLeftIcon className="unset-drag cursor-pointer"
onClick={() => setShowLeftSideBar((show) => !show)}
>
<PanelRightCloseIcon
size={20} size={20}
className="invisible text-muted-foreground" className={twMerge(
'ml-4 text-muted-foreground',
showLeftSideBar && 'rotate-180'
)}
/> />
</div> </div>
<div <div
@ -196,7 +205,13 @@ const TopBar = () => {
className="unset-drag absolute right-4 cursor-pointer" className="unset-drag absolute right-4 cursor-pointer"
onClick={() => setShowRightSideBar((show) => !show)} onClick={() => setShowRightSideBar((show) => !show)}
> >
<PanelRightIcon size={20} className="text-muted-foreground" /> <PanelLeftCloseIcon
size={20}
className={twMerge(
'text-muted-foreground',
showRightSideBar && 'rotate-180'
)}
/>
</div> </div>
</div> </div>
)} )}

View File

@ -149,7 +149,7 @@ const Advanced = () => {
</p> </p>
</div> </div>
<Modal> <Modal>
<ModalTrigger> <ModalTrigger asChild>
<Button size="sm" themes="secondary"> <Button size="sm" themes="secondary">
Show Show
</Button> </Button>
@ -207,6 +207,30 @@ const Advanced = () => {
</div> </div>
</div> </div>
</div> </div>
<div className="flex w-full gap-4 border-b border-border pb-2">
<div className="w-1/2">
<div className="py-2">
<ShortCut menu="B" />
</div>
</div>
<div className="w-full">
<div className="py-2">
<p>Toggle collapsible left panel</p>
</div>
</div>
</div>
<div className="flex w-full gap-4 border-b border-border pb-2">
<div className="w-1/2">
<div className="py-2">
<ShortCut menu="," />
</div>
</div>
<div className="w-full">
<div className="py-2">
<p>Navigate to setting page</p>
</div>
</div>
</div>
<div className="flex w-full gap-4 border-b border-border pb-2"> <div className="flex w-full gap-4 border-b border-border pb-2">
<div className="w-1/2"> <div className="w-1/2">
<div className="py-2"> <div className="py-2">