diff options
author | Nate Sesti <sestinj@gmail.com> | 2023-07-10 23:22:37 -0700 |
---|---|---|
committer | Nate Sesti <sestinj@gmail.com> | 2023-07-10 23:22:37 -0700 |
commit | 10f5c2beb34e755c1fedf637186bace6b030e44d (patch) | |
tree | 67a28ed86a73b3f89f75b60ca6e03d959d550cfc /extension/react-app | |
parent | c84fdf356dccad9bb41140572b5704ee53807021 (diff) | |
parent | a8795b929bb18f623a64fedcdbb83a790266943b (diff) | |
download | sncontinue-10f5c2beb34e755c1fedf637186bace6b030e44d.tar.gz sncontinue-10f5c2beb34e755c1fedf637186bace6b030e44d.tar.bz2 sncontinue-10f5c2beb34e755c1fedf637186bace6b030e44d.zip |
Merge branch 'main' into faster-load
Diffstat (limited to 'extension/react-app')
-rw-r--r-- | extension/react-app/src/components/Onboarding.tsx | 115 | ||||
-rw-r--r-- | extension/react-app/src/tabs/gui.tsx | 2 |
2 files changed, 117 insertions, 0 deletions
diff --git a/extension/react-app/src/components/Onboarding.tsx b/extension/react-app/src/components/Onboarding.tsx new file mode 100644 index 00000000..061faba5 --- /dev/null +++ b/extension/react-app/src/components/Onboarding.tsx @@ -0,0 +1,115 @@ +import { useSelector } from "react-redux"; +import { RootStore } from "../redux/store"; +import React, { useState, useEffect } from "react"; +import styled from "styled-components"; +import { ArrowLeft, ArrowRight } from "@styled-icons/heroicons-outline"; +import { defaultBorderRadius } from "."; + +const StyledDiv = styled.div` + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: #1e1e1e; + z-index: 200; +`; + +const StyledSpan = styled.span` + padding: 8px; + border-radius: ${defaultBorderRadius}; + &:hover { + background-color: #ffffff33; + } +`; + +const Onboarding = () => { + const [counter, setCounter] = useState(4); + const gifs = ["intro", "explain", "edit", "generate"]; + const topMessages = [ + "Welcome to Continue!", + "Answer coding questions", + "Edit in natural language", + "Generate files from scratch", + ]; + const bottomMessages = [ + "", + "Ask Continue about a part of your code to get another perspective", + "Highlight a section of code and instruct Continue to refactor it", + "Let Continue build the scaffolding of Python scripts, React components, and more", + ]; + + const vscMediaUrl = useSelector( + (state: RootStore) => state.config.vscMediaUrl + ); + + useEffect(() => { + const hasVisited = localStorage.getItem("hasVisited"); + if (hasVisited) { + setCounter(4); + } else { + setCounter(0); + localStorage.setItem("hasVisited", "true"); + } + }, []); + + return ( + <StyledDiv hidden={counter >= 4}> + <div + style={{ + display: "grid", + justifyContent: "center", + alignItems: "center", + height: "100%", + textAlign: "center", + background: `linear-gradient( + 101.79deg, + #12887a66 0%, + #87245c66 32%, + #e1263766 63%, + #ffb21566 100% + )`, + paddingLeft: "16px", + paddingRight: "16px", + }} + > + <h1>{topMessages[counter]}</h1> + <div style={{ display: "flex", justifyContent: "center" }}> + <img + src={`https://github.com/continuedev/continue/blob/main/media/${gifs[counter]}.gif?raw=true`} + alt={topMessages[counter]} + /> + </div> + <p>{bottomMessages[counter]}</p> + <p + style={{ + paddingLeft: "50px", + paddingRight: "50px", + paddingBottom: "50px", + textAlign: "center", + }} + > + <div + style={{ + cursor: "pointer", + }} + > + <StyledSpan + hidden={counter === 0} + onClick={() => setCounter((prev) => Math.max(prev - 1, 0))} + > + <ArrowLeft width="18px" strokeWidth="2px" /> Previous + </StyledSpan> + <span hidden={counter === 0}>{" | "}</span> + <StyledSpan onClick={() => setCounter((prev) => prev + 1)}> + Click to {counter === 3 || "learn how to"} use Continue{" "} + <ArrowRight width="18px" strokeWidth="2px" /> + </StyledSpan> + </div> + </p> + </div> + </StyledDiv> + ); +}; + +export default Onboarding; diff --git a/extension/react-app/src/tabs/gui.tsx b/extension/react-app/src/tabs/gui.tsx index 646aef50..0e60e05c 100644 --- a/extension/react-app/src/tabs/gui.tsx +++ b/extension/react-app/src/tabs/gui.tsx @@ -23,6 +23,7 @@ import { RootStore } from "../redux/store"; import LoadingCover from "../components/LoadingCover"; import { postVscMessage } from "../vscode"; import UserInputContainer from "../components/UserInputContainer"; +import Onboarding from "../components/Onboarding"; const TopGUIDiv = styled.div` overflow: hidden; @@ -267,6 +268,7 @@ function GUI(props: GUIProps) { // const iterations = useSelector(selectIterations); return ( <> + <Onboarding></Onboarding> <LoadingCover hidden={true} message="Downloading local model..." /> <TextDialog showDialog={showFeedbackDialog} |