From 4a26f3e9a67afbf86f4b4cf5c0d6ac82336dc2a7 Mon Sep 17 00:00:00 2001 From: Brad Adams Date: Tue, 15 Aug 2023 14:39:56 +0200 Subject: [PATCH 1/2] fix: email line-breaks --- src/server/google-ai/generate-email.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/server/google-ai/generate-email.ts b/src/server/google-ai/generate-email.ts index f423719..3d7ef64 100644 --- a/src/server/google-ai/generate-email.ts +++ b/src/server/google-ai/generate-email.ts @@ -30,7 +30,7 @@ export async function generateAISuggestedEmail( ) { const promptEmailBody = `Role: E-commerce customer care expert analyzing product reviews and outputting a result as a string. -Task: Based on the input provided, generate a suggested email body response to the customer. Only provide information based on data you are provided with, don't invent or assume any facts, and don't include any placeholders. The email signature should be "Sincerely, the ildecimo team". +Task: Based on the input provided, generate a suggested email body response to the customer. Only provide information based on data you are provided with, don't invent or assume any facts, and don't include any placeholders. The email signature must be "Sincerely, the ildecimo team". Input Format: @@ -43,12 +43,12 @@ Input Format: Output Format: string Input Data: -- "Review Title:" ${options.title}, -- "Review Description": ${options.text}, -- "Review Rating": ${options.rating}, -- "Customer Name": ${options.customer}, +- "Review Title:" ${options.title} +- "Review Description": ${options.text} +- "Review Rating": ${options.rating} +- "Customer Name": ${options.customer} - "Email Type": ${options.emailType} - `; +`; const promptEmailSubject = ( emailBody: string @@ -104,7 +104,7 @@ Input Data: if (outputEmailBody) { const parsedOutput = generateEmailOutputSchema.safeParse({ subject: outputEmailSubject, - body: outputEmailBody, + body: outputEmailBody.replaceAll('\n', '%0D%0A'), }); if (!parsedOutput.success) { From a257998c861bf4299e1cd4300c172beb9e03420b Mon Sep 17 00:00:00 2001 From: Maksym Dmukhovskyy Date: Tue, 15 Aug 2023 18:13:00 +0400 Subject: [PATCH 2/2] init home page --- package-lock.json | 16 ++ package.json | 3 +- public/images/logo.webp | Bin 0 -> 22602 bytes public/images/partner-logo.png | Bin 0 -> 17709 bytes src/components/HomePage.tsx | 46 +++-- src/components/HomePage/Dropdown.tsx | 52 +++++ src/components/HomePage/Footer.tsx | 50 +++++ src/components/HomePage/Header.tsx | 66 +++++++ src/components/HomePage/Logo.tsx | 16 ++ src/components/HomePage/MobileMenu.tsx | 101 ++++++++++ src/styles/additional-styles/range-slider.css | 57 ++++++ src/styles/additional-styles/theme.css | 181 ++++++++++++++++++ .../additional-styles/toggle-switch.css | 28 +++ .../additional-styles/utility-patterns.css | 79 ++++++++ src/styles/home.css | 5 + 15 files changed, 680 insertions(+), 20 deletions(-) create mode 100644 public/images/logo.webp create mode 100644 public/images/partner-logo.png create mode 100644 src/components/HomePage/Dropdown.tsx create mode 100644 src/components/HomePage/Footer.tsx create mode 100644 src/components/HomePage/Header.tsx create mode 100644 src/components/HomePage/Logo.tsx create mode 100644 src/components/HomePage/MobileMenu.tsx create mode 100644 src/styles/additional-styles/range-slider.css create mode 100644 src/styles/additional-styles/theme.css create mode 100644 src/styles/additional-styles/toggle-switch.css create mode 100644 src/styles/additional-styles/utility-patterns.css create mode 100644 src/styles/home.css diff --git a/package-lock.json b/package-lock.json index e3bf638..7ec18af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "@bigcommerce/big-design-icons": "^0.23.2", "@bigcommerce/big-design-theme": "^0.19.2", "@google-ai/generativelanguage": "^0.2.1", + "@headlessui/react": "^1.7.16", "@heroicons/react": "^2.0.18", "@t3-oss/env-nextjs": "^0.3.1", "@types/jsonwebtoken": "^9.0.2", @@ -1257,6 +1258,21 @@ "node": ">=6" } }, + "node_modules/@headlessui/react": { + "version": "1.7.16", + "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.7.16.tgz", + "integrity": "sha512-2MphIAZdSUacZBT6EXk8AJkj+EuvaaJbtCyHTJrPsz8inhzCl7qeNPI1uk1AUvCgWylVtdN8cVVmnhUDPxPy3g==", + "dependencies": { + "client-only": "^0.0.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^16 || ^17 || ^18", + "react-dom": "^16 || ^17 || ^18" + } + }, "node_modules/@heroicons/react": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/@heroicons/react/-/react-2.0.18.tgz", diff --git a/package.json b/package.json index 8ebf766..ffbf193 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "@bigcommerce/big-design-icons": "^0.23.2", "@bigcommerce/big-design-theme": "^0.19.2", "@google-ai/generativelanguage": "^0.2.1", + "@headlessui/react": "^1.7.16", "@heroicons/react": "^2.0.18", "@t3-oss/env-nextjs": "^0.3.1", "@types/jsonwebtoken": "^9.0.2", @@ -78,4 +79,4 @@ "tls": false, "child_process": false } -} \ No newline at end of file +} diff --git a/public/images/logo.webp b/public/images/logo.webp new file mode 100644 index 0000000000000000000000000000000000000000..08cf51c87da06efe45a0b688c05137a3465575fc GIT binary patch literal 22602 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 H67atO()O#7 literal 0 HcmV?d00001 diff --git a/src/components/HomePage.tsx b/src/components/HomePage.tsx index 0085457..e512596 100644 --- a/src/components/HomePage.tsx +++ b/src/components/HomePage.tsx @@ -1,26 +1,34 @@ 'use client'; -import { Flex } from '@bigcommerce/big-design'; -import { NextLink } from '~/components/NextLink'; +import '~/styles/home.css'; + +import Footer from '~/components/HomePage/Footer'; +import Header from '~/components/HomePage/Header'; export const HomePage = () => { return ( - -

Home Page TBD

- - - Accessing the products page for the first time without visiting the - product review through the app extension will result in access token - error. - -
- All Products -
-
+
+
+
+
+
+ {/* Hero content */} +
+ {/* Section header */} +
+

+ Welcome to +
+ + REVIEW PULSE + +

+
+
+
+
+
+
+
); }; diff --git a/src/components/HomePage/Dropdown.tsx b/src/components/HomePage/Dropdown.tsx new file mode 100644 index 0000000..9ff32db --- /dev/null +++ b/src/components/HomePage/Dropdown.tsx @@ -0,0 +1,52 @@ +"use client"; + +import { useState } from "react"; +import { Transition } from "@headlessui/react"; + +type DropdownProps = { + children: React.ReactNode; + title: string; +}; + +export default function Dropdown({ children, title }: DropdownProps) { + const [dropdownOpen, setDropdownOpen] = useState(false); + + return ( +
  • setDropdownOpen(true)} + onMouseLeave={() => setDropdownOpen(false)} + onFocus={() => setDropdownOpen(true)} + onBlur={() => setDropdownOpen(false)} + > + e.preventDefault()} + > + {title} + + + + + + {children} + +
  • + ); +} diff --git a/src/components/HomePage/Footer.tsx b/src/components/HomePage/Footer.tsx new file mode 100644 index 0000000..2fdddd9 --- /dev/null +++ b/src/components/HomePage/Footer.tsx @@ -0,0 +1,50 @@ +import Image from 'next/image'; +import Link from 'next/link'; + +import Logo from '~/components/HomePage/Logo'; + +export default function Footer() { + return ( +
    +
    + {/* Top area: Blocks */} +
    + {/* 1st block */} +
    +
    + +
    +
    + Review Pulse +
    + + ildecimo.com + +
    +
    + BigCommerce Partner +
    +
    +
    +
    + + {/* Bottom area */} +
    + {/* Copyrights note */} +
    + © ildecimo.com All rights reserved +
    +
    +
    +
    + ); +} diff --git a/src/components/HomePage/Header.tsx b/src/components/HomePage/Header.tsx new file mode 100644 index 0000000..f20652e --- /dev/null +++ b/src/components/HomePage/Header.tsx @@ -0,0 +1,66 @@ +'use client'; +import Link from 'next/link'; + +import { useEffect, useState } from 'react'; +import Logo from '~/components/HomePage/Logo'; +import MobileMenu from '~/components/HomePage/MobileMenu'; + +export default function Header() { + const [top, setTop] = useState(true); + + // detect whether user has scrolled the page down by 10px + const scrollHandler = () => { + window.pageYOffset > 10 ? setTop(false) : setTop(true); + }; + + useEffect(() => { + scrollHandler(); + window.addEventListener('scroll', scrollHandler); + return () => window.removeEventListener('scroll', scrollHandler); + }, [top]); + + return ( +
    +
    +
    + {/* Site branding */} +
    + +
    + + {/* Desktop navigation */} + + + +
    +
    +
    + ); +} diff --git a/src/components/HomePage/Logo.tsx b/src/components/HomePage/Logo.tsx new file mode 100644 index 0000000..a689c11 --- /dev/null +++ b/src/components/HomePage/Logo.tsx @@ -0,0 +1,16 @@ +import Image from 'next/image'; +import Link from 'next/link'; + +export default function Logo() { + return ( + + Review Pulse + + ); +} diff --git a/src/components/HomePage/MobileMenu.tsx b/src/components/HomePage/MobileMenu.tsx new file mode 100644 index 0000000..91cb2d3 --- /dev/null +++ b/src/components/HomePage/MobileMenu.tsx @@ -0,0 +1,101 @@ +'use client'; + +import { Transition } from '@headlessui/react'; +import Link from 'next/link'; +import { useEffect, useRef, useState } from 'react'; + +export default function MobileMenu() { + const [mobileNavOpen, setMobileNavOpen] = useState(false); + + const trigger = useRef(null); + const mobileNav = useRef(null); + + // close the mobile menu on click outside + useEffect(() => { + const clickHandler = ({ target }: { target: EventTarget | null }): void => { + if (!mobileNav.current || !trigger.current) return; + if ( + !mobileNavOpen || + mobileNav.current.contains(target as Node) || + trigger.current.contains(target as Node) + ) + return; + setMobileNavOpen(false); + }; + document.addEventListener('click', clickHandler); + return () => document.removeEventListener('click', clickHandler); + }); + + // close the mobile menu if the esc key is pressed + useEffect(() => { + const keyHandler = ({ keyCode }: { keyCode: number }): void => { + if (!mobileNavOpen || keyCode !== 27) return; + setMobileNavOpen(false); + }; + document.addEventListener('keydown', keyHandler); + return () => document.removeEventListener('keydown', keyHandler); + }); + + return ( +
    + {/* Hamburger button */} + + + {/*Mobile navigation */} +
    + +
      +
    • + setMobileNavOpen(false)} + target="_blank" + > + Info Page + + + + +
    • +
    +
    +
    +
    + ); +} diff --git a/src/styles/additional-styles/range-slider.css b/src/styles/additional-styles/range-slider.css new file mode 100644 index 0000000..6a10824 --- /dev/null +++ b/src/styles/additional-styles/range-slider.css @@ -0,0 +1,57 @@ +/* Range slider */ +:root { + --range-thumb-size: 36px; +} + +input[type=range] { + appearance: none; + background: #ccc; + border-radius: 3px; + height: 6px; + margin-top: (--range-thumb-size - 6px) * 0.5; + margin-bottom: (--range-thumb-size - 6px) * 0.5; + --thumb-size: #{--range-thumb-size}; +} + +input[type=range]::-webkit-slider-thumb { + appearance: none; + -webkit-appearance: none; + background-color: #000; + background-image: url("data:image/svg+xml,%3Csvg width='12' height='8' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8 .5v7L12 4zM0 4l4 3.5v-7z' fill='%23FFF' fill-rule='nonzero'/%3E%3C/svg%3E"); + background-position: center; + background-repeat: no-repeat; + border: 0; + border-radius: 50%; + cursor: pointer; + height: --range-thumb-size; + width: --range-thumb-size; +} + +input[type=range]::-moz-range-thumb { + background-color: #000; + background-image: url("data:image/svg+xml,%3Csvg width='12' height='8' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8 .5v7L12 4zM0 4l4 3.5v-7z' fill='%23FFF' fill-rule='nonzero'/%3E%3C/svg%3E"); + background-position: center; + background-repeat: no-repeat; + border: 0; + border: none; + border-radius: 50%; + cursor: pointer; + height: --range-thumb-size; + width: --range-thumb-size; +} + +input[type=range]::-ms-thumb { + background-color: #000; + background-image: url("data:image/svg+xml,%3Csvg width='12' height='8' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8 .5v7L12 4zM0 4l4 3.5v-7z' fill='%23FFF' fill-rule='nonzero'/%3E%3C/svg%3E"); + background-position: center; + background-repeat: no-repeat; + border: 0; + border-radius: 50%; + cursor: pointer; + height: --range-thumb-size; + width: --range-thumb-size; +} + +input[type=range]::-moz-focus-outer { + border: 0; +} \ No newline at end of file diff --git a/src/styles/additional-styles/theme.css b/src/styles/additional-styles/theme.css new file mode 100644 index 0000000..bba8017 --- /dev/null +++ b/src/styles/additional-styles/theme.css @@ -0,0 +1,181 @@ +html { + scroll-behavior: smooth; +} + +.form-input:focus, +.form-textarea:focus, +.form-multiselect:focus, +.form-select:focus, +.form-checkbox:focus, +.form-radio:focus { + @apply ring-0; +} + +/* Hamburger button */ +.hamburger svg>*:nth-child(1), +.hamburger svg>*:nth-child(2), +.hamburger svg>*:nth-child(3) { + transform-origin: center; + transform: rotate(0deg); +} + +.hamburger svg>*:nth-child(1) { + transition: y 0.1s 0.25s ease-in, transform 0.22s cubic-bezier(0.55, 0.055, 0.675, 0.19), opacity 0.1s ease-in; +} + +.hamburger svg>*:nth-child(2) { + transition: transform 0.22s cubic-bezier(0.55, 0.055, 0.675, 0.19); +} + +.hamburger svg>*:nth-child(3) { + transition: y 0.1s 0.25s ease-in, transform 0.22s cubic-bezier(0.55, 0.055, 0.675, 0.19), width 0.1s 0.25s ease-in; +} + +.hamburger.active svg>*:nth-child(1) { + opacity: 0; + y: 11; + transform: rotate(225deg); + transition: y 0.1s ease-out, transform 0.22s 0.12s cubic-bezier(0.215, 0.61, 0.355, 1), opacity 0.1s 0.12s ease-out; +} + +.hamburger.active svg>*:nth-child(2) { + transform: rotate(225deg); + transition: transform 0.22s 0.12s cubic-bezier(0.215, 0.61, 0.355, 1); +} + +.hamburger.active svg>*:nth-child(3) { + y: 11; + transform: rotate(135deg); + transition: y 0.1s ease-out, transform 0.22s 0.12s cubic-bezier(0.215, 0.61, 0.355, 1), width 0.1s ease-out; +} + +/* Pulsing animation */ +@keyframes pulseLoop { + 0% { opacity: .15; transform: scale(1) translateZ(0); } + 30% { opacity: .15; } + 60% { opacity: 0; } + 80% { opacity: 0; transform: scale(1.8) translateZ(0); } +} +@keyframes pulseMiniLoop { + 0% { opacity: 0; transform: scale(1) translateZ(0); } + 30% { opacity: .3; } + 50% { opacity: .3; } + 80% { opacity: 0; transform: scale(3) translateZ(0); } +} +.pulse { + transform: scale(1); + opacity: 0; + transform-origin: center; + animation: pulseLoop 10000ms linear infinite; +} +.pulse-mini { + animation: pulseMiniLoop 6000ms linear infinite; +} +.pulse-1 { + animation-delay: -3000ms; +} +.pulse-2 { + animation-delay: -6000ms; +} + +/* Animations delay */ +.animation-delay-500 { + animation-delay: 500ms !important; +} + +.animation-delay-1000 { + animation-delay: 1000ms !important; +} + +.translate-z-0 { + transform: translateZ(0); +} + +/* Custom AOS animations */ +[data-aos="zoom-y-out"] { + transform: scaleX(1.03); + opacity: 0; + transition-property: transform, opacity; +} + +@media screen { + html:not(.no-js) body [data-aos=fade-up] { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + html:not(.no-js) body [data-aos=fade-down] { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + html:not(.no-js) body [data-aos=fade-right] { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + html:not(.no-js) body [data-aos=fade-left] { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } + + html:not(.no-js) body [data-aos=fade-up-right] { + -webkit-transform: translate3d(-10px, 10px, 0); + transform: translate3d(-10px, 10px, 0); + } + + html:not(.no-js) body [data-aos=fade-up-left] { + -webkit-transform: translate3d(10px, 10px, 0); + transform: translate3d(10px, 10px, 0); + } + + html:not(.no-js) body [data-aos=fade-down-right] { + -webkit-transform: translate3d(-10px, -10px, 0); + transform: translate3d(-10px, -10px, 0); + } + + html:not(.no-js) body [data-aos=fade-down-left] { + -webkit-transform: translate3d(10px, -10px, 0); + transform: translate3d(10px, -10px, 0); + } + + html:not(.no-js) body [data-aos=zoom-in-up] { + -webkit-transform: translate3d(0, 10px, 0) scale(.6); + transform: translate3d(0, 10px, 0) scale(.6); + } + + html:not(.no-js) body [data-aos=zoom-in-down] { + -webkit-transform: translate3d(0, -10px, 0) scale(.6); + transform: translate3d(0, -10px, 0) scale(.6); + } + + html:not(.no-js) body [data-aos=zoom-in-right] { + -webkit-transform: translate3d(-10px, 0, 0) scale(.6); + transform: translate3d(-10px, 0, 0) scale(.6); + } + + html:not(.no-js) body [data-aos=zoom-in-left] { + -webkit-transform: translate3d(10px, 0, 0) scale(.6); + transform: translate3d(10px, 0, 0) scale(.6); + } + + html:not(.no-js) body [data-aos=zoom-out-up] { + -webkit-transform: translate3d(0, 10px, 0) scale(1.2); + transform: translate3d(0, 10px, 0) scale(1.2); + } + + html:not(.no-js) body [data-aos=zoom-out-down] { + -webkit-transform: translate3d(0, -10px, 0) scale(1.2); + transform: translate3d(0, -10px, 0) scale(1.2); + } + + html:not(.no-js) body [data-aos=zoom-out-right] { + -webkit-transform: translate3d(-10px, 0, 0) scale(1.2); + transform: translate3d(-10px, 0, 0) scale(1.2); + } + + html:not(.no-js) body [data-aos=zoom-out-left] { + -webkit-transform: translate3d(10px, 0, 0) scale(1.2); + transform: translate3d(10px, 0, 0) scale(1.2); + } +} \ No newline at end of file diff --git a/src/styles/additional-styles/toggle-switch.css b/src/styles/additional-styles/toggle-switch.css new file mode 100644 index 0000000..5d52d9d --- /dev/null +++ b/src/styles/additional-styles/toggle-switch.css @@ -0,0 +1,28 @@ +/* Switch element */ +.form-switch { + @apply relative select-none; + width: 68px; +} + +.form-switch label { + @apply block overflow-hidden cursor-pointer rounded; + height: 38px; +} + +.form-switch label>span:first-child { + @apply absolute block rounded shadow; + width: 30px; + height: 30px; + top: 4px; + left: 4px; + right: 50%; + transition: all .15s ease-out; +} + +.form-switch input[type="checkbox"]:checked+label { + @apply bg-blue-600; +} + +.form-switch input[type="checkbox"]:checked+label>span:first-child { + left: 34px; +} diff --git a/src/styles/additional-styles/utility-patterns.css b/src/styles/additional-styles/utility-patterns.css new file mode 100644 index 0000000..383a338 --- /dev/null +++ b/src/styles/additional-styles/utility-patterns.css @@ -0,0 +1,79 @@ +/* Typography */ +.h1 { + @apply text-4xl font-extrabold leading-tight tracking-tighter; +} + +.h2 { + @apply text-3xl font-extrabold leading-tight tracking-tighter; +} + +.h3 { + @apply text-3xl font-bold leading-tight; +} + +.h4 { + @apply text-2xl font-bold leading-snug tracking-tight; +} + +@screen md { + .h1 { + @apply text-5xl; + } + + .h2 { + @apply text-4xl; + } +} + +/* Buttons */ +.btn, +.btn-sm { + @apply font-medium inline-flex items-center justify-center border border-transparent rounded leading-snug transition duration-150 ease-in-out; +} + +.btn { + @apply px-8 py-3 shadow-lg; +} + +.btn-sm { + @apply px-4 py-2 shadow; +} + +/* Forms */ +.form-input, +.form-textarea, +.form-multiselect, +.form-select, +.form-checkbox, +.form-radio { + @apply bg-white border border-gray-300 focus:border-gray-500; +} + +.form-input, +.form-textarea, +.form-multiselect, +.form-select, +.form-checkbox { + @apply rounded; +} + +.form-input, +.form-textarea, +.form-multiselect, +.form-select { + @apply py-3 px-4; +} + +.form-input, +.form-textarea { + @apply placeholder-gray-500; +} + +.form-select { + @apply pr-10; +} + +.form-checkbox, +.form-radio { + @apply text-gray-800 rounded-sm; +} \ No newline at end of file diff --git a/src/styles/home.css b/src/styles/home.css new file mode 100644 index 0000000..4e9ec51 --- /dev/null +++ b/src/styles/home.css @@ -0,0 +1,5 @@ +/* Additional styles */ +@import 'additional-styles/utility-patterns.css'; +@import 'additional-styles/range-slider.css'; +@import 'additional-styles/toggle-switch.css'; +@import 'additional-styles/theme.css'; \ No newline at end of file