From 04238de655992556cfa48b659470b06a22e89d83 Mon Sep 17 00:00:00 2001 From: shuaisguo Date: Fri, 31 Mar 2023 11:55:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=85=B3=E9=97=AD?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=BF=AB=E6=8D=B7=E9=94=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/home.tsx | 28 +++++++++++++++++++++------- package.json | 13 +++++++------ yarn.lock | 19 ++++++++++++------- 3 files changed, 40 insertions(+), 20 deletions(-) diff --git a/app/components/home.tsx b/app/components/home.tsx index da65b1d63..cecd5c104 100644 --- a/app/components/home.tsx +++ b/app/components/home.tsx @@ -2,6 +2,7 @@ import { useState, useRef, useEffect, useLayoutEffect } from "react"; import { useDebouncedCallback } from "use-debounce"; +import { useHotkeys } from "react-hotkeys-hook"; import { IconButton } from "./button"; import styles from "./home.module.scss"; @@ -102,7 +103,7 @@ export function ChatList() { state.currentSessionIndex, state.selectSession, state.removeSession, - ] + ], ); return ( @@ -196,7 +197,7 @@ export function Chat(props: { setPromptHints(promptStore.search(text)); }, 100, - { leading: true, trailing: true } + { leading: true, trailing: true }, ); const onPromptSelect = (prompt: Prompt) => { @@ -210,7 +211,7 @@ export function Chat(props: { if (!dom) return; const paddingBottomNum: number = parseInt( window.getComputedStyle(dom).paddingBottom, - 10 + 10, ); dom.scrollTop = dom.scrollHeight - dom.offsetHeight + paddingBottomNum; }; @@ -300,7 +301,7 @@ export function Chat(props: { preview: true, }, ] - : [] + : [], ) .concat( userInput.length > 0 @@ -312,7 +313,7 @@ export function Chat(props: { preview: true, }, ] - : [] + : [], ); // auto scroll @@ -340,7 +341,7 @@ export function Chat(props: { const newTopic = prompt(Locale.Chat.Rename, session.topic); if (newTopic && newTopic !== session.topic) { chatStore.updateCurrentSession( - (session) => (session.topic = newTopic!) + (session) => (session.topic = newTopic!), ); } }} @@ -586,7 +587,7 @@ export function Home() { state.newSession, state.currentSessionIndex, state.removeSession, - ] + ], ); const loading = !useHasHydrated(); const [showSideBar, setShowSideBar] = useState(true); @@ -597,6 +598,19 @@ export function Home() { useSwitchTheme(); + useHotkeys( + "esc", + () => { + if (openSettings) { + setOpenSettings(false); + } + }, + { + enableOnFormTags: ["input", "select", "textarea"], + }, + [openSettings], + ); + if (loading) { return ; } diff --git a/package.json b/package.json index eb17000ed..ea6cad22d 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "private": false, "license": "Anti 996", "scripts": { - "dev": "yarn fetch && next dev", + "dev": "yarn fetch && npx next dev", "build": "yarn fetch && next build", "start": "next start", "lint": "next lint", @@ -22,20 +22,21 @@ "openai": "^3.2.1", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-hotkeys-hook": "^4.3.8", "react-markdown": "^8.0.5", - "remark-breaks": "^3.0.2", "rehype-katex": "^6.0.2", "rehype-prism-plus": "^1.5.1", + "remark-breaks": "^3.0.2", "remark-gfm": "^3.0.1", "remark-math": "^5.1.1", - "sass": "^1.59.2", + "sass": "^1.60.0", "spark-md5": "^3.0.2", "use-debounce": "^9.0.3", "zustand": "^4.3.6" }, "devDependencies": { - "@types/node": "^18.14.6", - "@types/react": "^18.0.28", + "@types/node": "18.15.11", + "@types/react": "18.0.31", "@types/react-dom": "^18.0.11", "@types/react-katex": "^3.0.0", "@types/spark-md5": "^3.0.2", @@ -47,6 +48,6 @@ "husky": "^8.0.0", "lint-staged": "^13.2.0", "prettier": "^2.8.7", - "typescript": "4.9.5" + "typescript": "5.0.2" } } diff --git a/yarn.lock b/yarn.lock index 9f98a244d..2c42b0ee2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1355,7 +1355,7 @@ resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== -"@types/node@^18.14.6": +"@types/node@18.15.11": version "18.15.11" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.11.tgz#b3b790f09cb1696cffcec605de025b088fa4225f" integrity sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q== @@ -1389,7 +1389,7 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^18.0.28": +"@types/react@*", "@types/react@18.0.31": version "18.0.31" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.31.tgz#a69ef8dd7bfa849734d258c793a8fe343a338205" integrity sha512-EEG67of7DsvRDU6BLLI0p+k1GojDLz9+lZsnCpCRTa/lOokvyPBvp8S5x+A24hME3yyQuIipcP70KJ6H7Qupww== @@ -4257,6 +4257,11 @@ react-dom@^18.2.0: loose-envify "^1.1.0" scheduler "^0.23.0" +react-hotkeys-hook@^4.3.8: + version "4.3.8" + resolved "https://registry.yarnpkg.com/react-hotkeys-hook/-/react-hotkeys-hook-4.3.8.tgz#75fa18e7edb393c2d308a59378932c6badf94b80" + integrity sha512-RmrIQ3M259c84MnYVEAQsmHkD6s7XUgLG0rW6S7qjt1Lh7q+SPIz5b6obVU8OJw1Utsj1mUCj6twtBPaK/ytww== + react-is@^16.13.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" @@ -4526,7 +4531,7 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" -sass@^1.59.2: +sass@^1.60.0: version "1.60.0" resolved "https://registry.yarnpkg.com/sass/-/sass-1.60.0.tgz#657f0c23a302ac494b09a5ba8497b739fb5b5a81" integrity sha512-updbwW6fNb5gGm8qMXzVO7V4sWf7LMXnMly/JEyfbfERbVH46Fn6q02BX7/eHTdKpE7d+oTkMMQpFWNUMfFbgQ== @@ -4898,10 +4903,10 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" -typescript@4.9.5: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +typescript@5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.2.tgz#891e1a90c5189d8506af64b9ef929fca99ba1ee5" + integrity sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw== unbox-primitive@^1.0.2: version "1.0.2"