Faisal Amir 852ea84cd8
epic: Jan with new UI/UX (#4964)
* chore: initial new FE setup

* chore: update namespace text-left-panel foreground variable

* chore: enable dynamic mainview color

* chore: remove greetings new chat

* chore: fix chat input style

* chore: simplify hook useAppearance

* chore: enable internationalization

* chore: prepare vn locale

* chore: keyboardshortcut layout

* chore: update keyboard shortcut exclude pathname

* chore: update state active setting route

* chore: fix update theme by system

* chore: handle dynamic primary color

* chore: fix left panel navigation active state and styled item privacy analytic

* chore: reorder general setting being a first

* chore: add function reset appearance

* chore: update scrollbar

* chore: update delete thread with dialog confirmation

* chore: update state dialog inside dropdown menu

* chore: wip thread detail or chat page

* chore: wip model dropdown

* chore: prepare model dropdown select

* chore: update model providers setting

* chore: show provider on model dropdown based isActive toogle

* chore: update layout model provider

* chore: update state active on storage

* chore: update gap of item dropdown model

* chore: update select model base on id

* chore: update edit model capabilities

* chore: add dialog to add model

* chore: update sheet for model setting

* chore: add sheet setting each model

* chore: make dynamic syntax highlight

* chore: fix menu setting appearance theme

* chore: markdown render support emoji

* chore: markdown support latex

* chore: change codeblock default theme

* chore: update ui codeblock

* chore: custom render link taget new window

* chore: fix copy button codeblock

* chore: update accent and desctructive color

* chore: setup user chat message

* chore: prepare some page settings

* chore: simple list extension and prepare mcp, local api, and hardware

* chore: mcp-serve

* chore: MCP server UI

* chore: update local api server config

* chore: adjust chat input

* chore: update local api server log

* chore: prepare hub page

* chore: remove help page

* chore: update mock

* chore: prepare http proxy setting UI

* chore: adjust local api server and title every action

* fix: chore FE package (#4962)

* fix: update command which referred to non-existent web app

* fix: added commented out macos platform for now

* fix: remove the platform name as macos

* fix: remove unnecessary line for platform name in HeaderPage component

* fix: update dev script to specify port 3000 for Vite

* feat: model providers and chat completion

* enhancement: threads performance

* fix: thread content update

* chore: clean up threads

* fix: performance issue with streaming and state loop

* fix: streaming

* fix: react markdow

* feat: extension manager

* chore: add nodePolyfills include path

* chore: improve performance avoid unhandle rejection

* chore: update pre margin bottom

* chore: swith thread should be deafult scroll to bottom

* chore: wip scroll to bottom

* chore: add model loader

* chore: add platform utils

* feat: threads functionality

* chore: setup toaster

* chore: persist threads deletion

* fix: create thread with new message

* chore: create new thread should change route path

* chore: navigate after delet dialog thread

* chore: thread favorites and orders

* chore: dismiss deleting modal on delete

* chore: remove undefined properties

* chore: remove deprecated run step

* chore: fix delete thread

* chore: create empty thread content on started streaming

* chore: correct messages store key

* chore: stuck at generating state

* chore: preapre chat toolbar

* chore: introduce in-memory app state

* chore: update extensions migration logic

* chore: remove redundant extensions migration gate

* chore: message toolbar user and assistant

* chore: add logo gemini

* feat: remote providers with model capabilities

* chore: maintain provider settings

* chore: move speed token into chat input

* chore: temp harcoded model loader

* chore: make chat text selectable and truncate model list

* chore: update shortcut UI

* Feat/implement threads (#4977)

* chore: add fuse.js library for enhanced search functionality

* feat: implement thread filtering with Fuse.js for improved search capabilities

* fix: update the fuseOptions

* feat: add search functionality to LeftPanel and refactor thread retrieval logic

* refactor: optimize thread filtering and improve search functionality in LeftPanel

* fix: more edits

* refactor: remove duplicate import of useAppState in StreamingContent component

* chore: update navigate after delete all thread

* chore: pass prop speedToken from new chat input

* chore: persist provider general settings

* chore: styling search left panel

* chore: cleanup margin

* chore: update size icon

* chore: improve chat input

* chore: imprve list markdown

* chore: animate border

* feat: local model provider work

* chore: persist manually added model

* chore: prepare download management ui and show version on general setting

* chore: improve pre tag

* chore: remove buton install extension and improve light theme download

* chore: add missing hardware information handler

* chore: cleanup small ui

* chore: update default provider settings

* fix: missing fs commands

* chore: correct provider models

* chore: prepare delete model

* chore: handle thinking block

* chore: fix conditional message toolbar

* chore: pophover download select none

* enhancement: add prune mode

* chore: model settings

* chore: bump engine version tauri

* chore: update style thinking

* chore: add indicator and toogle mcp server

* chore: wip hub

* chore: update model settings

* chore: mvp hub

* chore: add function rename title

* chore: update function delete message

* chore: update rename title

* chore: update model settings

* chore: persist MCP configs

* refactor: clean up utils

* chore: add tools to completion request

* chore: clean up

* chore: ignore assets

---------

Co-authored-by: Ivan Leo <ivanleomk@gmail.com>
Co-authored-by: Louis <louis@jan.ai>
2025-05-15 19:38:59 +07:00

10 lines
9.6 KiB
XML

<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<path d="M0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8Z" fill="url(#pattern0_3197_5)"/>
<defs>
<pattern id="pattern0_3197_5" patternContentUnits="objectBoundingBox" width="1" height="1">
<use xlink:href="#image0_3197_5" transform="scale(0.0025)"/>
</pattern>
<image id="image0_3197_5" width="400" height="400" xlink:href="data:image/jpeg;base64,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IQIwsDo5li69hbkChojBgIPHpDfiAnj3loCCiIiRpavXcwQIRAYxUepP8pACcBGQYyDGQYyDGQYyDGQYyDLQP/islLQC63kcZT9E8wzC8pKBm7GLWjZo2aNmjZo2aNmjZo2aMGAE1vIWzdheBDMyDB4pEyLpeViJ/peXsoPsk+JaOQvA2UBAZeiojIul5WEdVpbiBtgREHJYdpaRqqVNHLfK8DM2gnzKyZGh6eR6RmNgREEL4dYLSU0APraSguHgkNEhAjCwGjlWjr2lpACSAAyYpjQ2s4+mkPQ+CQoKIwYEHx7y/EBPHvLQEFEREje1eq5UkUZhG643XG64T6oGRr6muHCjdcbrjdcbrhVAahkjiWoGKxuuN1xuuKYoVTP4x//aAAwDAQACAAMAAAAQ9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999995e9p9v9s19999999999999999788/+u+8W9999999999999999e808Y988c9999999999999996f898v978uV99999999999999u8r9888t98R9999999999999918V938/8AfvONffffffffffffe/PFfbvP1qt/NPfffffffffffRPPPPPPPEvf/OffffffffffffnvEMsstPKdbPPlffffffffffavKnfffav/ADe3373333333333379b33331X930/8A+999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999//EACMRAQACAgEDBQEBAAAAAAAAAAERQQAQITBRcSAxQHDwYYH/2gAIAQMBAT8Q+uJjhGePClu/vjxAIR8KV7vG0qTDEXgsrxEjqFbOPg8Ir0Si9cIvXOb+AKqsRK6kFnv/ALqEwZK9znSAKwSF9eEG9QphIrx2Vaje5xqc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"/>
</defs>
</svg>