├── .eslintrc.json ├── public ├── og.png ├── logo.png ├── pop.mp3 ├── click.mp3 ├── favicon.ico └── Screenshot_2023-07-08_002659-removebg-preview.png ├── jsconfig.json ├── postcss.config.js ├── next.config.js ├── src ├── pages │ ├── api │ │ └── hello.js │ ├── _app.js │ ├── prompts │ │ └── [slug].js │ ├── index.js.bak │ ├── _document.js │ └── [[...slug]].js ├── components │ ├── Toast.js │ ├── Banner.js │ ├── Pagination.js │ ├── Search.js │ ├── Card.js │ ├── Header.js │ ├── Footer.js │ ├── Card2.js │ └── AnimatedBG.js └── styles │ └── globals.css ├── .gitignore ├── tailwind.config.js ├── package.json ├── CONTRIBUTING ├── CODE_OF_CONDUCT.md ├── LICENSE └── README.md /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /public/og.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VishwaGauravIn/lit-prompts/HEAD/public/og.png -------------------------------------------------------------------------------- /public/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VishwaGauravIn/lit-prompts/HEAD/public/logo.png -------------------------------------------------------------------------------- /public/pop.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VishwaGauravIn/lit-prompts/HEAD/public/pop.mp3 -------------------------------------------------------------------------------- /public/click.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VishwaGauravIn/lit-prompts/HEAD/public/click.mp3 -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VishwaGauravIn/lit-prompts/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "paths": { 4 | "@/*": ["./src/*"] 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | reactStrictMode: true, 4 | } 5 | 6 | module.exports = nextConfig 7 | -------------------------------------------------------------------------------- /public/Screenshot_2023-07-08_002659-removebg-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VishwaGauravIn/lit-prompts/HEAD/public/Screenshot_2023-07-08_002659-removebg-preview.png -------------------------------------------------------------------------------- /src/pages/api/hello.js: -------------------------------------------------------------------------------- 1 | // Next.js API route support: https://nextjs.org/docs/api-routes/introduction 2 | 3 | export default function handler(req, res) { 4 | res.status(200).json({ name: 'aye vedya' }) 5 | } 6 | -------------------------------------------------------------------------------- /src/pages/_app.js: -------------------------------------------------------------------------------- 1 | import "@/styles/globals.css"; 2 | import "react-toastify/dist/ReactToastify.css"; 3 | 4 | export default function App({ Component, pageProps }) { 5 | return ; 6 | } 7 | -------------------------------------------------------------------------------- /src/components/Toast.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { ToastContainer } from "react-toastify"; 3 | 4 | export default function Toast() { 5 | return ( 6 | 18 | ); 19 | } 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | 27 | # local env files 28 | .env*.local 29 | 30 | # vercel 31 | .vercel 32 | 33 | # typescript 34 | *.tsbuildinfo 35 | next-env.d.ts 36 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: [ 4 | './src/pages/**/*.{js,ts,jsx,tsx,mdx}', 5 | './src/components/**/*.{js,ts,jsx,tsx,mdx}', 6 | './src/app/**/*.{js,ts,jsx,tsx,mdx}', 7 | ], 8 | theme: { 9 | extend: { 10 | backgroundImage: { 11 | 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))', 12 | 'gradient-conic': 13 | 'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))', 14 | }, 15 | }, 16 | }, 17 | plugins: [], 18 | } 19 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lit-prompts", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "autoprefixer": "10.4.14", 13 | "eslint": "8.44.0", 14 | "eslint-config-next": "13.4.8", 15 | "next": "13.4.8", 16 | "postcss": "8.4.24", 17 | "react": "18.2.0", 18 | "react-dom": "18.2.0", 19 | "react-icons": "^4.10.1", 20 | "react-responsive-masonry": "^2.1.7", 21 | "react-toastify": "^9.1.3", 22 | "react-tooltip": "^5.18.0", 23 | "tailwindcss": "3.3.2" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/components/Banner.js: -------------------------------------------------------------------------------- 1 | export default function Banner() { 2 | return ( 3 | <> 4 |
5 |
6 | 11 | Click Here to Share us on Twitter 📣 12 | 13 |
14 |
15 | 16 | ); 17 | } 18 | -------------------------------------------------------------------------------- /CONTRIBUTING: -------------------------------------------------------------------------------- 1 | ## 💛 How to Contribute 2 | You can contribute in 3 ways: 3 | - **Adding a prompt:** 4 | For adding a new prompt, you can add the new prompt in the ```src/data/prompts.js``` file in the following format: [PROMPT SHOULD BE GOOD IN QUALITY] 5 | ```js 6 | { 7 | act: "Salesperson", 8 | prompt: 9 | "I want you to act as a salesperson. Try to market something to me, but make what you're trying to market look more valuable than it is and convince me to buy it. Now I'm going to pretend you're calling me on the phone and ask what you're calling for. Hello, what did you call for?", 10 | index: 136, 11 | }, 12 | ``` 13 | - **Improving the website:** 14 | Our website is built on NextJS and TailwindCSS so if you wish to contribute to the UI or functionality of the website, you can just fork this repository and make your changes and then raise a pull request. 15 | - **Noticing issues / bugs / new feature to add:** 16 | You just have to create an issue. 17 | -------------------------------------------------------------------------------- /src/pages/prompts/[slug].js: -------------------------------------------------------------------------------- 1 | import Card2 from "@/components/Card2"; 2 | import Footer from "@/components/Footer"; 3 | import Header from "@/components/Header"; 4 | import { prompts } from "@/data/prompts"; 5 | import Head from "next/head"; 6 | import { useRouter } from "next/router"; 7 | import React from "react"; 8 | 9 | export default function Prompts() { 10 | const { isReady, query } = useRouter(); 11 | let card; 12 | if (isReady) { 13 | if (parseInt(query.slug) > 0 && parseInt(query.slug) <= prompts.length) { 14 | let data = prompts[parseInt(query.slug) - 1]; 15 | console.log(data); 16 | card = ( 17 | 23 | ); 24 | } 25 | } 26 | return ( 27 | <> 28 | 29 | Lit Prompts : Best AI prompts 🔥 30 | 31 |
32 |
33 |
{isReady && card}
34 |
35 |
36 | 37 | ); 38 | } 39 | -------------------------------------------------------------------------------- /src/pages/index.js.bak: -------------------------------------------------------------------------------- 1 | import AnimatedBG from "@/components/AnimatedBG"; 2 | import Card from "@/components/Card"; 3 | import Card2 from "@/components/Card2"; 4 | import { prompts } from "@/data/prompts"; 5 | import { Open_Sans } from "next/font/google"; 6 | import Masonry, { ResponsiveMasonry } from "react-responsive-masonry"; 7 | 8 | const customFont = Open_Sans({ subsets: ["latin"] }); 9 | 10 | export default function Home() { 11 | const paginateArray = (array, pageNumber, pageSize) => { 12 | const page = array.slice( 13 | (pageNumber - 1) * pageSize, 14 | pageNumber * pageSize 15 | ); 16 | return page; 17 | }; 18 | return ( 19 | <> 20 |
23 | 27 | 28 | {paginateArray(prompts, 1, 10).map((prompt, i) => ( 29 | 35 | ))} 36 | 37 | 38 |
39 | 40 | ); 41 | } -------------------------------------------------------------------------------- /src/components/Pagination.js: -------------------------------------------------------------------------------- 1 | import { useRouter } from "next/router"; 2 | import React from "react"; 3 | import { BsCaretLeftFill, BsCaretRightFill } from "react-icons/bs"; 4 | 5 | export default function Pagination({ pageNumber, maxPageNumber, muted }) { 6 | const router = useRouter(); 7 | function prev() { 8 | // double checking to avoid inspect element hackers, lol 9 | if (pageNumber > 1) { 10 | router.push(`/${pageNumber - 1}`).then(() => window.scrollTo(0, 0)); 11 | } 12 | playClick(); 13 | } 14 | function next() { 15 | if (pageNumber < maxPageNumber) { 16 | router.push(`/${pageNumber + 1}`).then(() => window.scrollTo(0, 0)); 17 | playClick(); 18 | } 19 | } 20 | function playClick() { 21 | if (!muted) { 22 | document.getElementById("clickAudio").play(); 23 | } 24 | } 25 | return ( 26 |
27 | {/* Previous Button */} 28 | 36 | 37 | # 38 | {pageNumber}/{maxPageNumber} 39 | 40 | {/* Next Button */} 41 | 49 |
51 | ); 52 | } 53 | -------------------------------------------------------------------------------- /src/components/Search.js: -------------------------------------------------------------------------------- 1 | import { prompts } from "@/data/prompts"; 2 | import Link from "next/link"; 3 | import React, { useState } from "react"; 4 | import { BsSearch } from "react-icons/bs"; 5 | 6 | export default function Search() { 7 | const [searchResults, setSearchResults] = useState([]); 8 | function searchFun(e) { 9 | e.preventDefault(); 10 | let searchTerm = e.target.value; 11 | let tempArr = []; 12 | // checking for the searchTerm in each prompt 13 | prompts.forEach((prompt, index) => { 14 | // Here we are checking if the search term is not empty after removing the spaces and if the prompt contains the search term 15 | if ( 16 | searchTerm.replaceAll(" ", "").length !== 0 && 17 | prompt.act.toLowerCase().includes(searchTerm.toLowerCase()) 18 | ) { 19 | // pushing the prompt to the tempArr (to avoid mutating the state and re-rendering the component) 20 | tempArr.push({ 21 | act: prompt.act, 22 | href: `/prompts/${prompt.index}`, 23 | }); 24 | } 25 | }); 26 | // setting the searchResults state to the tempArr 27 | setSearchResults(tempArr); 28 | } 29 | return ( 30 |
31 |
32 | { 38 | searchFun(e); 39 | }} 40 | placeholder="Search..." 41 | className="ring ring-zinc-800 outline-none bg-transparent h-10 sm:h-12 w-48 group-focus-within:w-[90vw] sm:group-focus-within:w-96 rounded-full px-4 transition-all ease-in-out" 42 | /> 43 | 44 |
45 | {searchResults.length !== 0 && ( 46 |
47 | {searchResults.map((result, i) => ( 48 | 49 | {result.act} 50 |
51 | 52 | ))} 53 |
54 | )} 55 |
56 | ); 57 | } 58 | -------------------------------------------------------------------------------- /src/styles/globals.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css2?family=Fredericka+the+Great&display=swap"); 2 | 3 | @tailwind base; 4 | @tailwind components; 5 | @tailwind utilities; 6 | 7 | html { 8 | scroll-behavior: smooth; 9 | } 10 | 11 | body { 12 | scroll-behavior: smooth; 13 | } 14 | 15 | /* Card design was inspired by capturemytweet card */ 16 | .card { 17 | border: 2px solid rgba(18, 18, 18, 0.9); 18 | background: rgba(18, 18, 18, 0.8); 19 | background-image: linear-gradient( 20 | 90deg, 21 | rgba(18, 18, 18, 0.9) 0%, 22 | rgba(18, 18, 18, 0.4) 74% 23 | ); 24 | /* box-shadow: 00px 0px 40px -6px rgba(18, 18, 18, 0.2); */ 25 | } 26 | 27 | .grad1 { 28 | background-image: linear-gradient(135deg, #fff29d 10%, #fbe450 100%); 29 | color: #121212; 30 | } 31 | 32 | .grad2 { 33 | background-image: linear-gradient(135deg, #abdcff 10%, #0396ff 100%); 34 | color: #121212; 35 | } 36 | 37 | .grad3 { 38 | background-image: linear-gradient(135deg, #ffffff 10%, #b8bfc4 100%); 39 | } 40 | 41 | .grad4 { 42 | background-image: linear-gradient(135deg, #ddbcfe 10%, #bdb9e9 100%); 43 | } 44 | 45 | .grad5 { 46 | background-image: linear-gradient(135deg, #90f7ec 10%, #32ccbc 100%); 47 | } 48 | 49 | .grad6 { 50 | background-image: linear-gradient(135deg, #fff6b7 10%, #f87594 100%); 51 | } 52 | 53 | .grad7 { 54 | background-image: linear-gradient(135deg, #bafcd8 10%, #74bd95 100%); 55 | } 56 | 57 | .grad8 { 58 | background-image: linear-gradient(135deg, #e2b0ff 10%, #9f44d3 100%); 59 | } 60 | 61 | .grad9 { 62 | background-image: linear-gradient(135deg, #ffc0fc 10%, #eeb4e4 100%); 63 | } 64 | 65 | @keyframes marquee { 66 | 0% { 67 | left: 0; 68 | } 69 | 50% { 70 | left: -50%; 71 | } 72 | 100% { 73 | left: 0; 74 | } 75 | } 76 | 77 | @keyframes marquee2 { 78 | 0% { 79 | left: -50%; 80 | } 81 | 50% { 82 | left: 0%; 83 | } 84 | 100% { 85 | left: -50%; 86 | } 87 | } 88 | 89 | .marquee { 90 | width: 100%; 91 | color: #000000; 92 | font-size: 4rem; 93 | position: relative; 94 | white-space: nowrap; 95 | animation: marquee 60s linear infinite; 96 | will-change: transform; 97 | font-family: "Fredericka the Great", cursive; 98 | opacity: 0.2; 99 | } 100 | 101 | .marquee:nth-child(odd) { 102 | animation: marquee2 60s linear infinite; 103 | } 104 | 105 | /* Hide scrollbar */ 106 | .hide-scrollbar::-webkit-scrollbar { 107 | display: none; 108 | } 109 | 110 | .fade-appear { 111 | animation: fadein 0.2s; 112 | } 113 | 114 | @keyframes fadein { 115 | from { 116 | opacity: 0; 117 | } 118 | to { 119 | opacity: 1; 120 | } 121 | } 122 | 123 | @media (min-width: 768px) { 124 | .logo-black { 125 | @apply saturate-0 filter invert; 126 | } 127 | } 128 | -------------------------------------------------------------------------------- /src/components/Card.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { 3 | BsWhatsapp, 4 | BsClipboard, 5 | BsBookmarkHeart, 6 | BsLink45Deg, 7 | } from "react-icons/bs"; 8 | 9 | export default function Card({ key, index, act, prompt, fullSize }) { 10 | const colorClass = `grad${Math.floor(Math.random() * 9) + 1}`; 11 | return ( 12 |
17 |

18 | # 19 | {index} 20 |

21 | 22 |
23 | {act} 24 |
25 | 26 | 27 |
30 | {prompt} 31 |
32 |
33 |
36 | 40 | 43 | navigator.clipboard.writeText( 44 | "https://litprompts.itsvg.in/#" + index 45 | ) 46 | } 47 | className="w-7 h-7 opacity-90 hover:opacity-100 ease-in-out transition-all active:scale-90 cursor-pointer duration-100 stroke-[0.2]" 48 | /> 49 | 54 | 58 | 59 | 63 |
64 |
65 | ); 66 | } 67 | -------------------------------------------------------------------------------- /src/pages/_document.js: -------------------------------------------------------------------------------- 1 | import AnimatedBG from "@/components/AnimatedBG"; 2 | import Banner from "@/components/Banner"; 3 | import { Html, Head, Main, NextScript } from "next/document"; 4 | 5 | export default function Document() { 6 | return ( 7 | 8 | 9 | 10 | 14 | 15 | 19 | 20 | 21 | 22 | 26 | 30 | 31 | 32 | 36 | 40 | 44 | {/* Google Analytics */} 45 | 68 | 69 | 70 | 71 |
72 | 73 | 74 | 75 | 76 | ); 77 | } 78 | -------------------------------------------------------------------------------- /src/pages/[[...slug]].js: -------------------------------------------------------------------------------- 1 | import Card2 from "@/components/Card2"; 2 | import Footer from "@/components/Footer"; 3 | import Header from "@/components/Header"; 4 | import Pagination from "@/components/Pagination"; 5 | import { prompts } from "@/data/prompts"; 6 | import { Open_Sans } from "next/font/google"; 7 | import Head from "next/head"; 8 | import { useRouter } from "next/router"; 9 | import { useEffect, useState } from "react"; 10 | import Masonry, { ResponsiveMasonry } from "react-responsive-masonry"; 11 | 12 | const customFont = Open_Sans({ subsets: ["latin"] }); 13 | 14 | export default function Home({ data, pageNumber, maxPageNumber }) { 15 | const { isReady, router } = useRouter(); 16 | const [muted, setMuted] = useState(false); 17 | if (isReady && router) { 18 | router.push(`/${pageNumber}`); 19 | } 20 | // Applying fade-appear animation on page change for smooth transition [not a good practice, but works for now] 21 | useEffect(() => { 22 | if (isReady) { 23 | document.getElementById("masonry").classList.add("fade-appear"); 24 | setTimeout(() => { 25 | document.getElementById("masonry").classList.remove("fade-appear"); 26 | }, 200); 27 | } 28 | }, [pageNumber]); 29 | return ( 30 | <> 31 | 32 | Lit Prompts : Best AI prompts 🔥 33 | 34 |
37 |
38 |
39 | 43 | 44 | {data.map((prompt, i) => ( 45 | 51 | ))} 52 | 53 | 54 |
55 | 60 |
61 |
62 | 63 | ); 64 | } 65 | 66 | // function to paginate the array 67 | const paginateArray = (array, pageNumber, pageSize) => { 68 | const page = array.slice((pageNumber - 1) * pageSize, pageNumber * pageSize); 69 | return page; 70 | }; 71 | 72 | export const getServerSideProps = async (pageContext) => { 73 | // just change the pageSize to change the number of prompts per page 74 | const pageSize = 9; 75 | const maxPageNumber = Math.ceil(prompts.length / pageSize); 76 | // default props : redirecting to page 1 if page number is invalid 77 | const defaultProps = { 78 | redirect: { 79 | permanent: false, 80 | destination: "/1", 81 | }, 82 | props: {}, 83 | }; 84 | // using try-catch for error handling 85 | try { 86 | const pageNumber = pageContext.query.slug; 87 | if (pageNumber > 0 && pageNumber <= maxPageNumber) { 88 | return { 89 | props: { 90 | data: paginateArray(prompts, pageNumber, [pageSize]), 91 | pageNumber: pageNumber, 92 | maxPageNumber: maxPageNumber, 93 | }, 94 | }; 95 | } else { 96 | return defaultProps; 97 | } 98 | } catch { 99 | return defaultProps; 100 | } 101 | }; 102 | -------------------------------------------------------------------------------- /src/components/Header.js: -------------------------------------------------------------------------------- 1 | import React, { useEffect } from "react"; 2 | import { BsBookmarkHeart, BsGithub } from "react-icons/bs"; 3 | import { HiVolumeOff, HiVolumeUp } from "react-icons/hi"; 4 | import Search from "./Search"; 5 | import { Tooltip } from "react-tooltip"; 6 | import Link from "next/link"; 7 | 8 | export default function Header({ searchBarvisible, muted, setMuted }) { 9 | useEffect(() => { 10 | window.addEventListener("scroll", () => { 11 | let scrollYval = scrollY; 12 | if (scrollYval > 50) { 13 | document.getElementById("navbar").style.backgroundColor = 14 | "rgb(18, 18, 18, 0.9)"; 15 | document.getElementById("navbar").style.backdropFilter = "blur(12px)"; 16 | document.getElementById("logo").classList.remove("logo-black"); 17 | } else { 18 | document.getElementById("navbar").style.backgroundColor = "transparent"; 19 | document.getElementById("navbar").style.backdropFilter = "blur(0px)"; 20 | document.getElementById("logo").classList.add("logo-black"); 21 | } 22 | }); 23 | }, []); 24 | return ( 25 | 78 | ); 79 | } 80 | -------------------------------------------------------------------------------- /src/components/Footer.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { BsGithub, BsInstagram, BsLinkedin, BsTwitter } from "react-icons/bs"; 3 | 4 | export default function Footer() { 5 | return ( 6 |
7 |
8 | {/* Twitter */} 9 | 15 | 16 | 17 | {/* GitHub */} 18 | 24 | 25 | 26 | {/* LinkedIn */} 27 | 33 | 34 | 35 | {/* Instagram */} 36 | 42 | 43 | 44 |
45 | {/* mail to */} 46 | 69 | 79 |
80 | ); 81 | } 82 | -------------------------------------------------------------------------------- /src/components/Card2.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { 3 | BsWhatsapp, 4 | BsClipboard, 5 | BsBookmarkHeart, 6 | BsLink45Deg, 7 | } from "react-icons/bs"; 8 | import { Tooltip } from "react-tooltip"; 9 | import Toast from "./Toast"; 10 | import { toast } from "react-toastify"; 11 | 12 | export default function Card2({ index, act, prompt, fullSize }) { 13 | function copyLink() { 14 | navigator.clipboard.writeText(window.location.origin + "/prompts/" + index); 15 | toast.success("Link copied to clipboard!"); 16 | playPop(); 17 | } 18 | function playPop() { 19 | document.getElementById("popAudio").play(); 20 | } 21 | 22 | return ( 23 | <> 24 |
29 |
30 |

31 | {act} 32 |

33 |

34 | #{index} 35 |

36 |
37 |
38 |

{prompt}

39 |
40 | {/* Tools */} 41 |
42 | {/* Copy Prompt */} 43 |
46 | navigator.clipboard.writeText(prompt) & 47 | toast.success("Prompt copied to clipboard!") & 48 | playPop() 49 | } 50 | data-tooltip-id="tooltip" 51 | data-tooltip-content="Copy Prompt" 52 | data-tooltip-delay-show={1000} 53 | > 54 | 55 |
56 | {/* Copy Link */} 57 |
copyLink()} 60 | data-tooltip-id="tooltip" 61 | data-tooltip-content="Copy Link" 62 | data-tooltip-delay-show={1000} 63 | > 64 | 65 |
66 | {/* Share on WhatsApp */} 67 | 75 | 76 | 77 | {/* Save prompt */} 78 | {/*
84 | 85 |
*/} 86 |
87 | 88 |
89 | 90 |