Merge branch 'main' of https://github.com/janhq/jan into framework
This commit is contained in:
commit
358bc98137
@ -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
|
||||||
|
|
||||||
|
|||||||
@ -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>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@ -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">
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user