diff options
Diffstat (limited to 'extension/react-app/src/components')
-rw-r--r-- | extension/react-app/src/components/Onboarding.tsx | 115 |
1 files changed, 115 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; |