feature - added contact section UI

This commit is contained in:
James Wyndham 2024-02-16 06:32:53 +08:00
parent 48abe80662
commit 8fb705b9f0
35 changed files with 762 additions and 71 deletions

View File

@ -52,7 +52,7 @@ const PostPage = (props: any) => {
<div className="relative bg-grey-950 w-full h-max z-40 py-24 px-6 flex justify-center pointer-events-none"> <div className="relative bg-grey-950 w-full h-max z-40 py-24 px-6 flex justify-center pointer-events-none">
<div className="p-8 bg-gray-100 dark:bg-pink-900 w-full max-w-[700px] rounded-xl z-50 relative pointer-events-auto"> <div className="p-8 bg-gray-100 dark:bg-pink-900 w-full max-w-[700px] rounded-xl z-50 relative pointer-events-auto">
<div className="flex justify-between w-full"> <div className="flex justify-between w-full">
<Link href="/blogs" className="text-pink-default"> <Link href="/blogs" className="text-primary">
Back to Blogs Back to Blogs
</Link> </Link>
<div className="flex justify-end pb-2 select-none"> <div className="flex justify-end pb-2 select-none">

View File

@ -10,7 +10,11 @@ export default function BlogsPage() {
.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()) .sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime())
.map((post) => <BlogCard key={post.slug} {...post} />); .map((post) => <BlogCard key={post.slug} {...post} />);
return ( return (
<main id="content" role="main" className="h-full flex-grow flex flex-col"> <main
id="content"
role="main"
className="h-full flex-grow flex flex-col bg-white dark:bg-black"
>
{/* Page sections */} {/* Page sections */}
<PageHeader <PageHeader
title="Blogs" title="Blogs"
@ -18,8 +22,8 @@ export default function BlogsPage() {
<> <>
{" "} {" "}
<h2 className="text-black dark:text-white font-bold text-2xl lg:text-3xl text-center max-w-5xl mx-auto px-6"> <h2 className="text-black dark:text-white font-bold text-2xl lg:text-3xl text-center max-w-5xl mx-auto px-6">
Find case studies and information for how Sign365 is giving Join us for the journey as we make great food. Learn and grow
businesses superpowers together
</h2> </h2>
</> </>
} }

View File

@ -0,0 +1,17 @@
import Footer from "@/components/Footer";
import Spacer from "@/components/Utilities/Spacer";
import FormLeftDescriptionRightContactUs from "@/sections/ContactUs/FormLeftDescriptionRightContactUs";
import React from "react";
const page = () => {
return (
<div className="flex flex-col h-full w-full bg-white dark:bg-black">
<Spacer className="pt-28" />
<FormLeftDescriptionRightContactUs />
<Footer />
<Spacer className="pt-16" />
</div>
);
};
export default page;

View File

@ -29,16 +29,16 @@ export default function PricingPage() {
<main <main
id="content" id="content"
role="main" role="main"
className="h-full flex flex-col min-h-screen mx-auto w-screen overflow-hidden" className="h-full flex flex-col min-h-screen mx-auto w-screen overflow-hidden bg-white dark:bg-black"
> >
<PageHeader <PageHeader
title="Pricing" title="Pricing"
subtitle={ subtitle={
<> <>
{" "} {" "}
<h2 className="h3 text-primary-content content text-center max-w-6xl mx-auto px-6"> <h2 className="h3 text-base-content content text-center max-w-6xl mx-auto px-6">
Select a subscription plan for your team or try advanced Are you ready for fresh South West produce to be delivered to your
functionality for free. door?
</h2> </h2>
</> </>
} }
@ -109,7 +109,7 @@ function PriceCard({
<div className="flex flex-col h-full"> <div className="flex flex-col h-full">
<div className="mb-12 relative"> <div className="mb-12 relative">
{false && ( {false && (
<p className="absolute top-[-10px] left-[50%] -translate-x-1/2 font-architects-daughter text-xl text-pink-default text-center"> <p className="absolute top-[-10px] left-[50%] -translate-x-1/2 font-architects-daughter text-xl text-primary text-center">
Popular Popular
</p> </p>
)} )}
@ -150,7 +150,7 @@ function PriceCard({
onClick={() => onClick={() =>
submitForm(isAnnual ? product.yearlyPrice : product.monthlyPrice) submitForm(isAnnual ? product.yearlyPrice : product.monthlyPrice)
} }
className=" mx-auto flex text-sm font-semibold py-2 px-20 m-2 text-white bg-gradient-to-r from-pink-default to-purple-default rounded-full mb-4 cursor-pointer group-hover:animate-bounce" className=" mx-auto flex text-sm font-semibold py-2 px-20 m-2 text-white bg-gradient-to-r from-primary to-secondary rounded-full mb-4 cursor-pointer group-hover:animate-bounce"
> >
Try it! Try it!
</button> </button>
@ -178,14 +178,14 @@ function PriceToggle({
/> />
<span <span
className={`flex items-center space-x-[6px] rounded py-2 px-[18px] text-sm font-medium ${ className={`flex items-center space-x-[6px] rounded py-2 px-[18px] text-sm font-medium ${
!isAnnual ? "text-white bg-pink-550" : "text-body-color" !isAnnual ? "text-white bg-secondary" : "text-body-color"
}`} }`}
> >
Monthly Billing Monthly Billing
</span> </span>
<span <span
className={`flex items-center space-x-[6px] rounded py-2 px-[18px] text-sm font-medium ${ className={`flex items-center space-x-[6px] rounded py-2 px-[18px] text-sm font-medium ${
isAnnual ? "text-white bg-pink-550" : "text-body-color" isAnnual ? "text-white bg-secondary" : "text-body-color"
}`} }`}
> >
Yearly Billing Yearly Billing

View File

@ -10,7 +10,7 @@ import React from "react";
import { import {
CenterAllignedWithVideoHero, CenterAllignedWithVideoHero,
WaitingListWithImageHero, WaitingListWithImageHero,
} from "@/sections/HeroSections"; } from "@/sections/Hero";
import PageWrapper from "@/components/Utilities/PageWrapper"; import PageWrapper from "@/components/Utilities/PageWrapper";
import Footer from "@/components/Footer"; import Footer from "@/components/Footer";

View File

@ -9,16 +9,16 @@ export const Button = ({ status, text }: ButtonProps) => {
const className = (() => { const className = (() => {
switch (status) { switch (status) {
case ModalStatus.Loading: case ModalStatus.Loading:
return "btn text-purple-default bg-white hover:bg-white shadow disabled:text-white disabled:shadow-none"; return "btn text-primary bg-white hover:bg-white shadow disabled:text-white disabled:shadow-none";
case ModalStatus.Success: case ModalStatus.Success:
return "btn text-purple-default bg-white hover:bg-white shadow disabled:text-white disabled:shadow-none"; return "btn text-primary bg-white hover:bg-white shadow disabled:text-white disabled:shadow-none";
case ModalStatus.Default: case ModalStatus.Default:
return "btn text-purple-default bg-white hover:bg-white shadow"; return "btn text-primary bg-white hover:bg-white shadow";
default: default:
return "btn text-purple-default bg-white hover:bg-white shadow"; return "btn text-primary bg-white hover:bg-white shadow";
} }
})(); })();
return ( return (

View File

@ -1,24 +1,25 @@
"use client";
import React from "react"; import React from "react";
import Logo from "./Logo"; import Icon from "./icon";
function Footer() { function Footer() {
return ( return (
<footer> <footer>
<div className="py-12 md:py-1 bg-base-100"> <div className="py-12 md:py-1">
<div className="max-w-6xl mx-auto px-4 sm:px-6" data-aos="fade-up"> <div className="max-w-6xl mx-auto px-4 sm:px-6" data-aos="fade-up">
{/* Bottom area */} {/* Bottom area */}
<div className="flex items-center justify-center"> <div className="flex items-center justify-center">
{/* Social links */} {/* Social links */}
<ul className="flex md:order-1 md:mb-0 justify-center"> <ul className="flex md:order-1 md:mb-0 justify-center">
<li> <li>
<Logo label="YouTube" /> <Icon name="LeafThree24Filled" size="xlarge" />
</li> </li>
</ul> </ul>
</div> </div>
{/* Copyrights note */} {/* Copyrights note */}
<div className="text-gray-400 text-xs text-center dark:text-white mt-2"> <div className="text-gray-400 text-xs text-center dark:text-white mt-2">
&copy; 2024 Sign365. &copy; 2024 Bethel Farms
</div> </div>
</div> </div>
</div> </div>

View File

@ -36,7 +36,7 @@ export const GetStartedSectionButton = ({
) : ( ) : (
<button <button
onClick={() => router.push("/pricing")} onClick={() => router.push("/pricing")}
className="px-10 py-2 text-base capitalize !rounded-3xl text-white bg-gradient-to-r from-pink-default to-purple-default hover:bg-gray-900 w-full sm:w-auto" className="px-10 py-2 text-base capitalize !rounded-3xl text-white bg-gradient-to-r from-primary to-secondary hover:bg-gray-900 w-full sm:w-auto"
> >
Upgrade Upgrade
</button> </button>

View File

@ -1,6 +1,7 @@
import React from "react"; import React from "react";
import logo from "@/images/icon.svg"; import logo from "@/images/icon.svg";
import Image from "next/image"; import Image from "next/image";
import Icon from "./icon";
interface LogoProps { interface LogoProps {
label?: string; label?: string;
@ -19,7 +20,7 @@ function Logo({ label, className }: LogoProps) {
target={label !== undefined ? "_blank" : ""} target={label !== undefined ? "_blank" : ""}
> >
{/* <Image className="absolute hover:rotate-[360deg] transition duration-1000 ease-in-out" src={logoArrow} alt="Logo"/> */} {/* <Image className="absolute hover:rotate-[360deg] transition duration-1000 ease-in-out" src={logoArrow} alt="Logo"/> */}
<Image src={logo} alt="Logo" priority={true} /> <Icon name="LeafThree24Filled" size="xlarge" />
{label !== undefined ? ( {label !== undefined ? (
<span className="invisible absolute left-[50%] top-[-40px] translate-x-[-50%] p-1 rounded-lg font-bold bg-gray-800 text-fuchsia-400 group-hover:visible"> <span className="invisible absolute left-[50%] top-[-40px] translate-x-[-50%] p-1 rounded-lg font-bold bg-gray-800 text-fuchsia-400 group-hover:visible">
{label} {label}

View File

@ -0,0 +1,29 @@
import React from "react";
const Modal = () => {
return (
<>
{/* You can open the modal using document.getElementById('ID').showModal() method */}
<button
className="btn"
onClick={() => document.getElementById("my_modal_4").showModal()}
>
open modal
</button>
<dialog id="my_modal_4" className="modal">
<div className="modal-box w-11/12 max-w-5xl">
<h3 className="font-bold text-lg">Hello!</h3>
<p className="py-4">Click the button below to close</p>
<div className="modal-action">
<form method="dialog">
{/* if there is a button, it will close the modal */}
<button className="btn">Close</button>
</form>
</div>
</div>
</dialog>
</>
);
};
export default Modal;

View File

@ -49,7 +49,9 @@ function Navigation({ isUserLoggedIn }: { isUserLoggedIn: boolean }) {
</Link> </Link>
</li> </li>
<li> <li>
<a href="https://climate.stripe.com/r7FSQz">Climate</a> <Link href="/contact" onClick={handleClick}>
Contact
</Link>
</li> </li>
{isUserLoggedIn ? ( {isUserLoggedIn ? (
<li> <li>
@ -81,7 +83,7 @@ function Navigation({ isUserLoggedIn }: { isUserLoggedIn: boolean }) {
<Link href="/blogs">Blogs</Link> <Link href="/blogs">Blogs</Link>
</li> </li>
<li> <li>
<a href="https://climate.stripe.com/r7FSQz">Climate</a> <Link href="/contact">Contact</Link>
</li> </li>
{isUserLoggedIn ? ( {isUserLoggedIn ? (
<li> <li>

View File

@ -1,4 +1,4 @@
import { WaitingListWithImageHero } from "@/sections/HeroSections"; import { WaitingListWithImageHero } from "@/sections/Hero";
import React from "react"; import React from "react";
function PageWrapper({ children }: { children: React.ReactNode }) { function PageWrapper({ children }: { children: React.ReactNode }) {

View File

@ -0,0 +1,43 @@
import React from "react";
import * as FluentIcons from "@fluentui/react-icons";
import { IconProps, iconSize } from "./types";
import IconContainer from "./IconContainer";
function Icon({
color,
size = "small",
isActive = true,
name,
nestedComponent,
style,
}: IconProps) {
const fluentIcons = Object.assign(
{},
...Object.keys(FluentIcons).map((name) => {
return {
[name]: (
<IconContainer
color={color}
size={size}
isActive={isActive}
nestedComponent={nestedComponent}
style={style}
>
{React.createElement(FluentIcons[name], {
color: isActive ? color ?? undefined : undefined,
style: { width: iconSize[size], height: iconSize[size] },
})}
</IconContainer>
),
};
})
);
const icon = {
...fluentIcons,
};
return icon[name];
}
export default Icon;

View File

@ -0,0 +1,61 @@
import { IconContainerProps, Orientation, iconSize } from "./types";
function IconContainer({
children,
color,
size = "small",
isActive,
nestedComponent,
style,
}: IconContainerProps) {
const orientationStyle = {
[Orientation.BottomLeft]: {
bottom: `calc(-${iconSize[size]}/9)`,
left: `calc(-${iconSize[size]}/9)`,
},
[Orientation.BottomRight]: {
bottom: `calc(-${iconSize[size]}/9)`,
right: `calc(-${iconSize[size]}/9)`,
},
[Orientation.TopLeft]: {
top: `calc(-${iconSize[size]}/9)`,
left: `calc(-${iconSize[size]}/9)`,
},
[Orientation.TopRight]: {
top: `calc(-${iconSize[size]}/9)`,
right: `calc(-${iconSize[size]}/9)`,
},
};
return (
<div
style={{
position: "relative",
zIndex: 10,
width: iconSize[size],
height: iconSize[size],
...style,
}}
>
{children}
{nestedComponent?.node && (
<div
color={isActive ? color ?? undefined : undefined}
style={{
width: `calc(${iconSize[size]}/1.75)`,
height: `calc(${iconSize[size]}/1.75)`,
position: "absolute",
zIndex: 20,
background: nestedComponent?.options?.orientation ?? undefined,
...orientationStyle[
nestedComponent?.options?.orientation ?? Orientation.BottomRight
],
}}
>
{nestedComponent?.node ? nestedComponent.node : <></>}
</div>
)}
</div>
);
}
export default IconContainer;

View File

@ -0,0 +1,2 @@
import Icon from "./Icon";
export default Icon;

View File

@ -0,0 +1,100 @@
import { ReactNode } from "react";
import * as FluentIcons from "@fluentui/react-icons";
export type IconProps = {
color?: string;
size?:
| "small"
| "medium"
| "large"
| "xlarge"
| "xxlarge"
| "xxxlarge"
| "xxxxlarge";
isActive?: boolean;
name: IconName;
nestedComponent?: NestedComponent;
style?: React.CSSProperties;
};
export type IconContainerProps = {
children: ReactNode;
color?: string;
size?:
| "small"
| "medium"
| "large"
| "xlarge"
| "xxlarge"
| "xxxlarge"
| "xxxxlarge";
isActive?: boolean;
nestedComponent?: NestedComponent;
style?: React.CSSProperties
}
type FluentIconNames = keyof typeof FluentIcons;
const fluentIconNames = Object.keys(FluentIcons) as FluentIconNames[];
export type IconName = typeof fluentIconNames[number];
export type NestedComponent = {
node: ReactNode;
options?: {
orientation?: Orientation;
backgroundColor?: string;
};
};
export const enum Orientation {
BottomLeft = "BottomLeft",
BottomRight = "BottomRight",
TopLeft = "TopLeft",
TopRight = "TopRight",
}
export const sizeScale = {
size: {
size_0: '0rem',
size_0_5: '0.25rem',
size_1: '0.5rem', /* 8px Base */
size_2: '1.0rem',
size_3: '1.5rem',
size_4: '2.0rem',
size_5: '2.5rem',
size_6: '3.0rem',
size_7: '3.5rem',
size_8: '4.0rem',
size_9: '4.5rem',
size_10: '5.0rem',
size_11: '5.5rem',
size_12: '6.0rem',
size_13: '6.5rem',
size_14: '7.0rem',
size_15: '7.5rem',
size_16: '8.0rem',
size_17: '8.5rem',
size_18: '9.0rem',
size_19: '9.5rem',
size_20: '10.0rem',
size_21: '10.5rem',
size_22: '11.0rem',
size_23: '11.5rem',
size_24: '12.0rem',
size_25: '12.5rem',
size_26: '13.0rem',
size_27: '13.5rem',
size_28: '14.0rem',
size_29: '14.5rem',
size_30: '15.0rem',
},
};
export const iconSize = {
small: sizeScale.size.size_2,
medium: sizeScale.size.size_3,
large: sizeScale.size.size_4,
xlarge: sizeScale.size.size_5,
xxlarge: sizeScale.size.size_6,
xxxlarge: sizeScale.size.size_7,
xxxxlarge: sizeScale.size.size_8,
};

View File

@ -1,4 +1,4 @@
<svg width="32" height="32" viewBox="0 0 48 53" fill="none" <svg style="" width="32" height="32" viewBox="0 0 48 53" fill="none"
xmlns="http://www.w3.org/2000/svg"> xmlns="http://www.w3.org/2000/svg">
<path d="M7.02016 0.785715C6.73423 0.785715 6.43516 0.881586 6.21659 1.10016L0.836158 6.48059C0.399015 6.91773 0.399015 7.61565 0.836158 8.05279L5.13352 12.3152C5.22826 12.4728 5.36023 12.6048 5.51784 12.6995L11.8067 19.0233C11.9665 18.3502 12.3249 17.7404 12.8548 17.2764L13.0295 17.1017L12.156 16.2282L15.9643 12.42L17.0823 13.573L18.7593 12.0706L12.4355 5.74688C12.3949 5.68413 12.3481 5.62561 12.2958 5.5722L12.191 5.50234C12.1376 5.45003 12.079 5.40321 12.0163 5.36258L7.7888 1.10016C7.57023 0.881586 7.3061 0.785715 7.02016 0.785715ZM40.9798 0.785715C40.6938 0.785715 40.4297 0.881586 40.2112 1.10016L35.809 5.50233C35.6842 5.58503 35.5772 5.69196 35.4945 5.81677L29.2407 12.0707L30.9177 13.573L32.0357 12.42L35.8439 16.2283L34.9705 17.1017L35.1452 17.2764C35.6762 17.7415 36.0334 18.3502 36.1933 19.0233L42.4472 12.7345C42.6048 12.6397 42.7367 12.5078 42.8315 12.3502L47.1638 8.0528C47.6009 7.61566 47.6009 6.91774 47.1638 6.4806L41.7834 1.10016C41.5648 0.881586 41.2657 0.785715 40.9798 0.785715ZM7.02016 3.47593L9.88507 6.37578L6.11178 10.1491L3.21193 7.28416L7.02016 3.47593ZM40.9798 3.47593L44.788 7.28416L41.8882 10.1491L38.1149 6.37578L40.9798 3.47593ZM11.4922 7.94798L14.3571 10.8478L10.5838 14.6211L7.68398 11.7562L11.4922 7.94798ZM36.5077 7.94798L40.316 11.7562L37.4161 14.6211L33.6428 10.8478L36.5077 7.94798ZM24 10.8478C23.7372 10.8478 23.477 10.9428 23.2663 11.1273L14.6366 18.6739H33.3633L24.7337 11.1273C24.5229 10.9429 24.2627 10.8478 24 10.8478ZM13.868 20.9099L11.7018 51.0264C11.6795 51.3361 11.805 51.638 12.0163 51.8649C12.2276 52.0919 12.509 52.2143 12.8199 52.2143H35.1801C35.4898 52.2143 35.7735 52.0918 35.9837 51.8649C36.195 51.6379 36.3205 51.3361 36.2981 51.0264L34.132 20.9099L13.868 20.9099ZM22.882 26.5H25.118V29.854H22.882V26.5ZM10.9332 30.3781L0.836158 40.4752C0.399015 40.9123 0.399015 41.6102 0.836158 42.0474L6.21659 47.4278C6.4346 47.6458 6.73395 47.7422 7.02016 47.7422C7.30638 47.7422 7.57078 47.6458 7.7888 47.4278L9.88507 45.3315L10.3043 39.3921L7.68398 36.7717L10.5838 33.9068L10.6886 33.9767L10.9332 30.3781ZM37.0667 30.3781L37.3113 33.9767L37.4162 33.9068L40.316 36.7718L37.6957 39.3921L38.1149 45.3315L40.2112 47.4278C40.4292 47.6447 40.6936 47.7423 40.9798 47.7423C41.266 47.7423 41.5654 47.6458 41.7834 47.4278L47.1638 42.0474C47.601 41.6102 47.601 40.9123 47.1638 40.4752L37.0667 30.3781ZM6.11178 38.3789L9.88507 42.1522L7.02016 45.052L3.21193 41.2438L6.11178 38.3789ZM41.8882 38.3789L44.788 41.2438L40.9798 45.052L38.1149 42.1522L41.8882 38.3789ZM24 41.0342C25.8525 41.0342 27.354 42.5357 27.354 44.3882V49.9783H20.6459V44.3882C20.6459 42.5357 22.1474 41.0342 24 41.0342Z" fill="#fff"/> <path d="M7.02016 0.785715C6.73423 0.785715 6.43516 0.881586 6.21659 1.10016L0.836158 6.48059C0.399015 6.91773 0.399015 7.61565 0.836158 8.05279L5.13352 12.3152C5.22826 12.4728 5.36023 12.6048 5.51784 12.6995L11.8067 19.0233C11.9665 18.3502 12.3249 17.7404 12.8548 17.2764L13.0295 17.1017L12.156 16.2282L15.9643 12.42L17.0823 13.573L18.7593 12.0706L12.4355 5.74688C12.3949 5.68413 12.3481 5.62561 12.2958 5.5722L12.191 5.50234C12.1376 5.45003 12.079 5.40321 12.0163 5.36258L7.7888 1.10016C7.57023 0.881586 7.3061 0.785715 7.02016 0.785715ZM40.9798 0.785715C40.6938 0.785715 40.4297 0.881586 40.2112 1.10016L35.809 5.50233C35.6842 5.58503 35.5772 5.69196 35.4945 5.81677L29.2407 12.0707L30.9177 13.573L32.0357 12.42L35.8439 16.2283L34.9705 17.1017L35.1452 17.2764C35.6762 17.7415 36.0334 18.3502 36.1933 19.0233L42.4472 12.7345C42.6048 12.6397 42.7367 12.5078 42.8315 12.3502L47.1638 8.0528C47.6009 7.61566 47.6009 6.91774 47.1638 6.4806L41.7834 1.10016C41.5648 0.881586 41.2657 0.785715 40.9798 0.785715ZM7.02016 3.47593L9.88507 6.37578L6.11178 10.1491L3.21193 7.28416L7.02016 3.47593ZM40.9798 3.47593L44.788 7.28416L41.8882 10.1491L38.1149 6.37578L40.9798 3.47593ZM11.4922 7.94798L14.3571 10.8478L10.5838 14.6211L7.68398 11.7562L11.4922 7.94798ZM36.5077 7.94798L40.316 11.7562L37.4161 14.6211L33.6428 10.8478L36.5077 7.94798ZM24 10.8478C23.7372 10.8478 23.477 10.9428 23.2663 11.1273L14.6366 18.6739H33.3633L24.7337 11.1273C24.5229 10.9429 24.2627 10.8478 24 10.8478ZM13.868 20.9099L11.7018 51.0264C11.6795 51.3361 11.805 51.638 12.0163 51.8649C12.2276 52.0919 12.509 52.2143 12.8199 52.2143H35.1801C35.4898 52.2143 35.7735 52.0918 35.9837 51.8649C36.195 51.6379 36.3205 51.3361 36.2981 51.0264L34.132 20.9099L13.868 20.9099ZM22.882 26.5H25.118V29.854H22.882V26.5ZM10.9332 30.3781L0.836158 40.4752C0.399015 40.9123 0.399015 41.6102 0.836158 42.0474L6.21659 47.4278C6.4346 47.6458 6.73395 47.7422 7.02016 47.7422C7.30638 47.7422 7.57078 47.6458 7.7888 47.4278L9.88507 45.3315L10.3043 39.3921L7.68398 36.7717L10.5838 33.9068L10.6886 33.9767L10.9332 30.3781ZM37.0667 30.3781L37.3113 33.9767L37.4162 33.9068L40.316 36.7718L37.6957 39.3921L38.1149 45.3315L40.2112 47.4278C40.4292 47.6447 40.6936 47.7423 40.9798 47.7423C41.266 47.7423 41.5654 47.6458 41.7834 47.4278L47.1638 42.0474C47.601 41.6102 47.601 40.9123 47.1638 40.4752L37.0667 30.3781ZM6.11178 38.3789L9.88507 42.1522L7.02016 45.052L3.21193 41.2438L6.11178 38.3789ZM41.8882 38.3789L44.788 41.2438L40.9798 45.052L38.1149 42.1522L41.8882 38.3789ZM24 41.0342C25.8525 41.0342 27.354 42.5357 27.354 44.3882V49.9783H20.6459V44.3882C20.6459 42.5357 22.1474 41.0342 24 41.0342Z" fill="currentColor"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -1,13 +1,14 @@
{ {
"name": "sign365website", "name": "fastpocket",
"version": "0.1.0", "version": "0.1.0",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "sign365website", "name": "fastpocket",
"version": "0.1.0", "version": "0.1.0",
"dependencies": { "dependencies": {
"@fluentui/react-icons": "^2.0.227",
"@hookform/resolvers": "^3.2.0", "@hookform/resolvers": "^3.2.0",
"@netlify/functions": "^2.1.0", "@netlify/functions": "^2.1.0",
"@next/third-parties": "^14.1.0", "@next/third-parties": "^14.1.0",
@ -608,6 +609,11 @@
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@emotion/hash": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz",
"integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ=="
},
"node_modules/@emotion/is-prop-valid": { "node_modules/@emotion/is-prop-valid": {
"version": "1.2.1", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz",
@ -683,6 +689,51 @@
"node": "^12.22.0 || ^14.17.0 || >=16.0.0" "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
} }
}, },
"node_modules/@fluentui/react-icons": {
"version": "2.0.227",
"resolved": "https://registry.npmjs.org/@fluentui/react-icons/-/react-icons-2.0.227.tgz",
"integrity": "sha512-KcuzBJvf1LL1YW7XBg7Y4RoCpFMUU2br9BPqwN5gZDKALHQF9RdHPtwdGTzxKsHacOTpHnNDQrbDW+NvxiEMVQ==",
"dependencies": {
"@griffel/react": "^1.0.0",
"tslib": "^2.1.0"
},
"peerDependencies": {
"react": ">=16.8.0 <19.0.0"
}
},
"node_modules/@griffel/core": {
"version": "1.15.2",
"resolved": "https://registry.npmjs.org/@griffel/core/-/core-1.15.2.tgz",
"integrity": "sha512-RlsIXoSS3gaYykUgxFpwKAs/DV9cRUKp3CW1kt3iPAtsDTWn/o+8bT1jvBws/tMM2GBu/Uc0EkaIzUPqD7uA+Q==",
"dependencies": {
"@emotion/hash": "^0.9.0",
"@griffel/style-types": "^1.0.3",
"csstype": "^3.1.3",
"rtl-css-js": "^1.16.1",
"stylis": "^4.2.0",
"tslib": "^2.1.0"
}
},
"node_modules/@griffel/react": {
"version": "1.5.20",
"resolved": "https://registry.npmjs.org/@griffel/react/-/react-1.5.20.tgz",
"integrity": "sha512-1P2yaPctENFSCwyPIYXBmgpNH68c0lc/jwSzPij1QATHDK1AASKuSeq6hW108I67RKjhRyHCcALshdZ3GcQXSg==",
"dependencies": {
"@griffel/core": "^1.15.2",
"tslib": "^2.1.0"
},
"peerDependencies": {
"react": ">=16.8.0 <19.0.0"
}
},
"node_modules/@griffel/style-types": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@griffel/style-types/-/style-types-1.0.3.tgz",
"integrity": "sha512-AzbbYV/EobNIBtfMtyu2edFin895gjVxtu1nsRhTETUAIb0/LCZoue3Jd/kFLuPwe95rv5WRUBiQpVwJsrrFcw==",
"dependencies": {
"csstype": "^3.1.3"
}
},
"node_modules/@hookform/resolvers": { "node_modules/@hookform/resolvers": {
"version": "3.3.2", "version": "3.3.2",
"license": "MIT", "license": "MIT",
@ -2440,8 +2491,9 @@
} }
}, },
"node_modules/csstype": { "node_modules/csstype": {
"version": "3.1.2", "version": "3.1.3",
"license": "MIT" "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
}, },
"node_modules/daisyui": { "node_modules/daisyui": {
"version": "3.9.4", "version": "3.9.4",
@ -5174,6 +5226,14 @@
"url": "https://github.com/sponsors/isaacs" "url": "https://github.com/sponsors/isaacs"
} }
}, },
"node_modules/rtl-css-js": {
"version": "1.16.1",
"resolved": "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.16.1.tgz",
"integrity": "sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==",
"dependencies": {
"@babel/runtime": "^7.1.2"
}
},
"node_modules/run-parallel": { "node_modules/run-parallel": {
"version": "1.2.0", "version": "1.2.0",
"funding": [ "funding": [
@ -5675,6 +5735,11 @@
} }
} }
}, },
"node_modules/stylis": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.1.tgz",
"integrity": "sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ=="
},
"node_modules/sucrase": { "node_modules/sucrase": {
"version": "3.34.0", "version": "3.34.0",
"license": "MIT", "license": "MIT",
@ -6745,6 +6810,11 @@
"to-fast-properties": "^2.0.0" "to-fast-properties": "^2.0.0"
} }
}, },
"@emotion/hash": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz",
"integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ=="
},
"@emotion/is-prop-valid": { "@emotion/is-prop-valid": {
"version": "1.2.1", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz",
@ -6798,6 +6868,45 @@
"@eslint/js": { "@eslint/js": {
"version": "8.54.0" "version": "8.54.0"
}, },
"@fluentui/react-icons": {
"version": "2.0.227",
"resolved": "https://registry.npmjs.org/@fluentui/react-icons/-/react-icons-2.0.227.tgz",
"integrity": "sha512-KcuzBJvf1LL1YW7XBg7Y4RoCpFMUU2br9BPqwN5gZDKALHQF9RdHPtwdGTzxKsHacOTpHnNDQrbDW+NvxiEMVQ==",
"requires": {
"@griffel/react": "^1.0.0",
"tslib": "^2.1.0"
}
},
"@griffel/core": {
"version": "1.15.2",
"resolved": "https://registry.npmjs.org/@griffel/core/-/core-1.15.2.tgz",
"integrity": "sha512-RlsIXoSS3gaYykUgxFpwKAs/DV9cRUKp3CW1kt3iPAtsDTWn/o+8bT1jvBws/tMM2GBu/Uc0EkaIzUPqD7uA+Q==",
"requires": {
"@emotion/hash": "^0.9.0",
"@griffel/style-types": "^1.0.3",
"csstype": "^3.1.3",
"rtl-css-js": "^1.16.1",
"stylis": "^4.2.0",
"tslib": "^2.1.0"
}
},
"@griffel/react": {
"version": "1.5.20",
"resolved": "https://registry.npmjs.org/@griffel/react/-/react-1.5.20.tgz",
"integrity": "sha512-1P2yaPctENFSCwyPIYXBmgpNH68c0lc/jwSzPij1QATHDK1AASKuSeq6hW108I67RKjhRyHCcALshdZ3GcQXSg==",
"requires": {
"@griffel/core": "^1.15.2",
"tslib": "^2.1.0"
}
},
"@griffel/style-types": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@griffel/style-types/-/style-types-1.0.3.tgz",
"integrity": "sha512-AzbbYV/EobNIBtfMtyu2edFin895gjVxtu1nsRhTETUAIb0/LCZoue3Jd/kFLuPwe95rv5WRUBiQpVwJsrrFcw==",
"requires": {
"csstype": "^3.1.3"
}
},
"@hookform/resolvers": { "@hookform/resolvers": {
"version": "3.3.2", "version": "3.3.2",
"requires": {} "requires": {}
@ -7716,7 +7825,9 @@
"version": "3.0.0" "version": "3.0.0"
}, },
"csstype": { "csstype": {
"version": "3.1.2" "version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
}, },
"daisyui": { "daisyui": {
"version": "3.9.4", "version": "3.9.4",
@ -9312,6 +9423,14 @@
} }
} }
}, },
"rtl-css-js": {
"version": "1.16.1",
"resolved": "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.16.1.tgz",
"integrity": "sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==",
"requires": {
"@babel/runtime": "^7.1.2"
}
},
"run-parallel": { "run-parallel": {
"version": "1.2.0", "version": "1.2.0",
"requires": { "requires": {
@ -9605,6 +9724,11 @@
"client-only": "0.0.1" "client-only": "0.0.1"
} }
}, },
"stylis": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.1.tgz",
"integrity": "sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ=="
},
"sucrase": { "sucrase": {
"version": "3.34.0", "version": "3.34.0",
"requires": { "requires": {

View File

@ -9,6 +9,7 @@
"lint": "next lint" "lint": "next lint"
}, },
"dependencies": { "dependencies": {
"@fluentui/react-icons": "^2.0.227",
"@hookform/resolvers": "^3.2.0", "@hookform/resolvers": "^3.2.0",
"@netlify/functions": "^2.1.0", "@netlify/functions": "^2.1.0",
"@next/third-parties": "^14.1.0", "@next/third-parties": "^14.1.0",

View File

@ -166,7 +166,7 @@ function AccountContent({ user }: ManageSubscriptionProps) {
</p> </p>
<button <button
onClick={() => router.push("/pricing")} onClick={() => router.push("/pricing")}
className="px-10 py-2 text-base capitalize !rounded-3xl text-white bg-gradient-to-r from-pink-default to-purple-default hover:bg-gray-900 w-full sm:w-auto" className="px-10 py-2 text-base capitalize !rounded-3xl text-white bg-gradient-to-r from-primary to-secondary hover:bg-gray-900 w-full sm:w-auto"
> >
Upgrade Upgrade
</button> </button>

View File

@ -22,7 +22,7 @@ function BlogContent({ post }: BlogContentProps) {
<p className="text-black dark:text-slate-200">{post.data.date}</p> <p className="text-black dark:text-slate-200">{post.data.date}</p>
</div> </div>
<article className="prose prose-img:rounded-xl max-w-none prose-p:text-black dark:prose-p:text-white prose-a:text-pink-default prose-h2:text-black dark:prose-h2:text-white prose-li:text-black dark:prose-li:text-white prose-strong:text-black dark:prose-strong:text-white prose-blockquote:pr-2 prose-blockquote:font-normal"> <article className="prose prose-img:rounded-xl max-w-none prose-p:text-black dark:prose-p:text-white prose-a:text-primary prose-h2:text-black dark:prose-h2:text-white prose-li:text-black dark:prose-li:text-white prose-strong:text-black dark:prose-strong:text-white prose-blockquote:pr-2 prose-blockquote:font-normal">
<div className="h-full w-full"> <div className="h-full w-full">
<Image <Image
priority priority

View File

@ -0,0 +1,304 @@
import React from "react";
const FormLeftDescriptionRightContactUs = () => {
return (
<>
{/* Contact Us */}
<div className="max-w-[85rem] px-4 py-10 sm:px-6 lg:px-8 lg:py-14 mx-auto">
<div className="max-w-2xl lg:max-w-5xl mx-auto">
<div className="text-center">
<h1 className="text-3xl font-bold text-gray-800 sm:text-4xl dark:text-white">
Contact us
</h1>
<p className="mt-1 text-gray-600 dark:text-gray-400">
We&apos;d love to talk about how we can help you.
</p>
</div>
<div className="mt-12 grid items-center lg:grid-cols-2 gap-6 lg:gap-16">
{/* Card */}
<div className="flex flex-col border rounded-xl p-4 sm:p-6 lg:p-8 dark:border-gray-700">
<h2 className="mb-8 text-xl font-semibold text-gray-800 dark:text-gray-200">
Fill in the form
</h2>
<form>
<div className="grid gap-4">
{/* Grid */}
<div className="grid grid-cols-1 sm:grid-cols-2 gap-4">
<div>
<label
htmlFor="hs-firstname-contacts-1"
className="sr-only"
>
First Name
</label>
<input
type="text"
name="hs-firstname-contacts-1"
id="hs-firstname-contacts-1"
className="py-3 px-4 block w-full border-gray-200 rounded-lg text-sm focus:border-blue-500 focus:ring-blue-500 disabled:opacity-50 disabled:pointer-events-none dark:bg-slate-900 dark:border-gray-700 dark:text-gray-400 dark:focus:ring-gray-600"
placeholder="First Name"
/>
</div>
<div>
<label
htmlFor="hs-lastname-contacts-1"
className="sr-only"
>
Last Name
</label>
<input
type="text"
name="hs-lastname-contacts-1"
id="hs-lastname-contacts-1"
className="py-3 px-4 block w-full border-gray-200 rounded-lg text-sm focus:border-blue-500 focus:ring-blue-500 disabled:opacity-50 disabled:pointer-events-none dark:bg-slate-900 dark:border-gray-700 dark:text-gray-400 dark:focus:ring-gray-600"
placeholder="Last Name"
/>
</div>
</div>
{/* End Grid */}
<div>
<label htmlFor="hs-email-contacts-1" className="sr-only">
Email
</label>
<input
type="email"
name="hs-email-contacts-1"
id="hs-email-contacts-1"
autoComplete="email"
className="py-3 px-4 block w-full border-gray-200 rounded-lg text-sm focus:border-blue-500 focus:ring-blue-500 disabled:opacity-50 disabled:pointer-events-none dark:bg-slate-900 dark:border-gray-700 dark:text-gray-400 dark:focus:ring-gray-600"
placeholder="Email"
/>
</div>
<div>
<label htmlFor="hs-phone-number-1" className="sr-only">
Phone Number
</label>
<input
type="text"
name="hs-phone-number-1"
id="hs-phone-number-1"
className="py-3 px-4 block w-full border-gray-200 rounded-lg text-sm focus:border-blue-500 focus:ring-blue-500 disabled:opacity-50 disabled:pointer-events-none dark:bg-slate-900 dark:border-gray-700 dark:text-gray-400 dark:focus:ring-gray-600"
placeholder="Phone Number"
/>
</div>
<div>
<label htmlFor="hs-about-contacts-1" className="sr-only">
Details
</label>
<textarea
id="hs-about-contacts-1"
name="hs-about-contacts-1"
rows={4}
className="py-3 px-4 block w-full border-gray-200 rounded-lg text-sm focus:border-blue-500 focus:ring-blue-500 disabled:opacity-50 disabled:pointer-events-none dark:bg-slate-900 dark:border-gray-700 dark:text-gray-400 dark:focus:ring-gray-600"
placeholder="Details"
defaultValue={""}
/>
</div>
</div>
{/* End Grid */}
<div className="mt-4 grid">
<button
type="submit"
className="w-full py-3 px-4 inline-flex justify-center items-center gap-x-2 text-sm font-semibold rounded-lg border border-transparent bg-blue-600 text-white hover:bg-blue-700 disabled:opacity-50 disabled:pointer-events-none dark:focus:outline-none dark:focus:ring-1 dark:focus:ring-gray-600"
>
Send inquiry
</button>
</div>
<div className="mt-3 text-center">
<p className="text-sm text-gray-500">
We&apos;ll get back to you in 1-2 business days.
</p>
</div>
</form>
</div>
{/* End Card */}
<div className="divide-y divide-gray-200 dark:divide-gray-800">
{/* Icon Block */}
<div className="flex gap-x-7 py-6">
<svg
className="flex-shrink-0 size-6 mt-1.5 text-gray-800 dark:text-gray-200"
xmlns="http://www.w3.org/2000/svg"
width={24}
height={24}
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
strokeWidth={2}
strokeLinecap="round"
strokeLinejoin="round"
>
<circle cx={12} cy={12} r={10} />
<path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3" />
<path d="M12 17h.01" />
</svg>
<div className="grow">
<h3 className="font-semibold text-gray-800 dark:text-gray-200">
Knowledgebase
</h3>
<p className="mt-1 text-sm text-gray-500">
We&apos;re here to help with any questions or code.
</p>
<a
className="mt-2 inline-flex items-center gap-x-2 text-sm font-medium text-gray-600 hover:text-gray-800 dark:text-gray-400 dark:hover:text-gray-200 dark:focus:outline-none dark:focus:ring-1 dark:focus:ring-gray-600"
href="#"
>
Contact support
<svg
className="flex-shrink-0 size-2.5 transition ease-in-out group-hover:translate-x-1"
width={16}
height={16}
viewBox="0 0 16 16"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M0.975821 6.92249C0.43689 6.92249 -3.50468e-07 7.34222 -3.27835e-07 7.85999C-3.05203e-07 8.37775 0.43689 8.79749 0.975821 8.79749L12.7694 8.79748L7.60447 13.7596C7.22339 14.1257 7.22339 14.7193 7.60447 15.0854C7.98555 15.4515 8.60341 15.4515 8.98449 15.0854L15.6427 8.68862C16.1191 8.23098 16.1191 7.48899 15.6427 7.03134L8.98449 0.634573C8.60341 0.268455 7.98555 0.268456 7.60447 0.634573C7.22339 1.00069 7.22339 1.59428 7.60447 1.9604L12.7694 6.92248L0.975821 6.92249Z"
fill="currentColor"
/>
</svg>
</a>
</div>
</div>
{/* End Icon Block */}
{/* Icon Block */}
<div className="flex gap-x-7 py-6">
<svg
className="flex-shrink-0 size-6 mt-1.5 text-gray-800 dark:text-gray-200"
xmlns="http://www.w3.org/2000/svg"
width={24}
height={24}
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
strokeWidth={2}
strokeLinecap="round"
strokeLinejoin="round"
>
<path d="M14 9a2 2 0 0 1-2 2H6l-4 4V4c0-1.1.9-2 2-2h8a2 2 0 0 1 2 2v5Z" />
<path d="M18 9h2a2 2 0 0 1 2 2v11l-4-4h-6a2 2 0 0 1-2-2v-1" />
</svg>
<div className="grow">
<h3 className="font-semibold text-gray-800 dark:text-gray-200">
FAQ
</h3>
<p className="mt-1 text-sm text-gray-500">
Search our FAQ for answers to anything you might ask.
</p>
<a
className="mt-2 inline-flex items-center gap-x-2 text-sm font-medium text-gray-600 hover:text-gray-800 dark:text-gray-400 dark:hover:text-gray-200 dark:focus:outline-none dark:focus:ring-1 dark:focus:ring-gray-600"
href="#"
>
Visit FAQ
<svg
className="flex-shrink-0 size-2.5 transition ease-in-out group-hover:translate-x-1"
width={16}
height={16}
viewBox="0 0 16 16"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M0.975821 6.92249C0.43689 6.92249 -3.50468e-07 7.34222 -3.27835e-07 7.85999C-3.05203e-07 8.37775 0.43689 8.79749 0.975821 8.79749L12.7694 8.79748L7.60447 13.7596C7.22339 14.1257 7.22339 14.7193 7.60447 15.0854C7.98555 15.4515 8.60341 15.4515 8.98449 15.0854L15.6427 8.68862C16.1191 8.23098 16.1191 7.48899 15.6427 7.03134L8.98449 0.634573C8.60341 0.268455 7.98555 0.268456 7.60447 0.634573C7.22339 1.00069 7.22339 1.59428 7.60447 1.9604L12.7694 6.92248L0.975821 6.92249Z"
fill="currentColor"
/>
</svg>
</a>
</div>
</div>
{/* End Icon Block */}
{/* Icon Block */}
<div className=" flex gap-x-7 py-6">
<svg
className="flex-shrink-0 size-6 mt-1.5 text-gray-800 dark:text-gray-200"
xmlns="http://www.w3.org/2000/svg"
width={24}
height={24}
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
strokeWidth={2}
strokeLinecap="round"
strokeLinejoin="round"
>
<path d="m7 11 2-2-2-2" />
<path d="M11 13h4" />
<rect width={18} height={18} x={3} y={3} rx={2} ry={2} />
</svg>
<div className="grow">
<h3 className="font-semibold text-gray-800 dark:text-gray-200">
Developer APIs
</h3>
<p className="mt-1 text-sm text-gray-500">
Check out our development quickstart guide.
</p>
<a
className="mt-2 inline-flex items-center gap-x-2 text-sm font-medium text-gray-600 hover:text-gray-800 dark:text-gray-400 dark:hover:text-gray-200 dark:focus:outline-none dark:focus:ring-1 dark:focus:ring-gray-600"
href="#"
>
Contact sales
<svg
className="flex-shrink-0 size-2.5 transition ease-in-out group-hover:translate-x-1"
width={16}
height={16}
viewBox="0 0 16 16"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M0.975821 6.92249C0.43689 6.92249 -3.50468e-07 7.34222 -3.27835e-07 7.85999C-3.05203e-07 8.37775 0.43689 8.79749 0.975821 8.79749L12.7694 8.79748L7.60447 13.7596C7.22339 14.1257 7.22339 14.7193 7.60447 15.0854C7.98555 15.4515 8.60341 15.4515 8.98449 15.0854L15.6427 8.68862C16.1191 8.23098 16.1191 7.48899 15.6427 7.03134L8.98449 0.634573C8.60341 0.268455 7.98555 0.268456 7.60447 0.634573C7.22339 1.00069 7.22339 1.59428 7.60447 1.9604L12.7694 6.92248L0.975821 6.92249Z"
fill="currentColor"
/>
</svg>
</a>
</div>
</div>
{/* End Icon Block */}
{/* Icon Block */}
<div className=" flex gap-x-7 py-6">
<svg
className="flex-shrink-0 size-6 mt-1.5 text-gray-800 dark:text-gray-200"
xmlns="http://www.w3.org/2000/svg"
width={24}
height={24}
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
strokeWidth={2}
strokeLinecap="round"
strokeLinejoin="round"
>
<path d="M21.2 8.4c.5.38.8.97.8 1.6v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V10a2 2 0 0 1 .8-1.6l8-6a2 2 0 0 1 2.4 0l8 6Z" />
<path d="m22 10-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 10" />
</svg>
<div className="grow">
<h3 className="font-semibold text-gray-800 dark:text-gray-200">
Contact us by email
</h3>
<p className="mt-1 text-sm text-gray-500">
If you wish to write us an email instead please use
</p>
<a
className="mt-2 inline-flex items-center gap-x-2 text-sm font-medium text-gray-600 hover:text-gray-800 dark:text-gray-400 dark:hover:text-gray-200 dark:focus:outline-none dark:focus:ring-1 dark:focus:ring-gray-600"
href="#"
>
example@site.com
</a>
</div>
</div>
{/* End Icon Block */}
</div>
</div>
</div>
</div>
{/* End Contact Us */}
</>
);
};
export default FormLeftDescriptionRightContactUs;

View File

@ -24,7 +24,7 @@ const FeaturesZigzag = () => {
<div className="max-w-4xl mx-auto text-center pb-12 md:pb-16 group"> <div className="max-w-4xl mx-auto text-center pb-12 md:pb-16 group">
<button <button
onClick={tryItOnClick} onClick={tryItOnClick}
className="inline-flex text-lg font-semibold py-2 px-[7rem] m-2 text-white bg-gradient-to-r from-pink-default to-purple-default rounded-full mb-4 cursor-pointer group-hover:animate-bounce" className="inline-flex text-lg font-semibold py-2 px-[7rem] m-2 text-white bg-gradient-to-r from-primary to-secondary rounded-full mb-4 cursor-pointer group-hover:animate-bounce"
> >
Try it! Try it!
</button> </button>

View File

@ -1,4 +1,5 @@
import Logo from "@/components/Logo"; import Logo from "@/components/Logo";
import Icon from "@/components/icon";
import React from "react"; import React from "react";
const WaitingListWithImageHero = () => { const WaitingListWithImageHero = () => {
@ -12,8 +13,8 @@ const WaitingListWithImageHero = () => {
> >
<div className="h-screen w-full bg-clip flex items-center justify-center"> <div className="h-screen w-full bg-clip flex items-center justify-center">
<div className="text-center py-8 px-4 sm:px-6 lg:px-8"> <div className="text-center py-8 px-4 sm:px-6 lg:px-8">
<h1 className="text-3xl text-primary-content sm:text-4xl whitespace-nowrap flex flex-row justify-center pb-6"> <h1 className="text-3xl text-primary-content sm:text-4xl whitespace-nowrap flex flex-row justify-center pb-6 gap-x-3">
<Logo className="w-10 flex" /> <Icon name="LeafThree24Filled" size="xlarge" />
Bethel Farms Bethel Farms
</h1> </h1>
<h2 className="text-2xl text-primary-content sm:text-4xl"> <h2 className="text-2xl text-primary-content sm:text-4xl">
@ -37,7 +38,7 @@ const WaitingListWithImageHero = () => {
/> />
<div className="absolute inset-y-0 start-0 flex items-center pointer-events-none z-20 ps-4"> <div className="absolute inset-y-0 start-0 flex items-center pointer-events-none z-20 ps-4">
<svg <svg
className="flex-shrink-0 size-4 text-gray-400" className="flex-shrink-0 size-4 text-primary-content dark:text-white"
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
width={24} width={24}
height={24} height={24}
@ -70,7 +71,7 @@ const WaitingListWithImageHero = () => {
/> />
<div className="absolute inset-y-0 start-0 flex items-center pointer-events-none z-20 ps-4"> <div className="absolute inset-y-0 start-0 flex items-center pointer-events-none z-20 ps-4">
<svg <svg
className="flex-shrink-0 size-4 text-gray-400" className="flex-shrink-0 size-4 text-primary-content dark:text-white"
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
width={24} width={24}
height={24} height={24}

View File

@ -37,7 +37,7 @@ function HeroHome() {
Your Offline Digital Forms Simplified. Your Offline Digital Forms Simplified.
</h1> </h1>
<p <p
className="text-lg font-semibold pb-12 mb-8 md:text-4xl text-transparent bg-clip-text bg-gradient-to-r from-pink-default to-purple-default w-[fit-content] mx-auto" className="text-lg font-semibold pb-12 mb-8 md:text-4xl text-transparent bg-clip-text bg-gradient-to-r from-primary to-secondary w-[fit-content] mx-auto"
data-aos="fade-up" data-aos="fade-up"
data-aos-delay="200" data-aos-delay="200"
> >
@ -47,7 +47,7 @@ function HeroHome() {
<div data-aos="fade-up" data-aos-delay="400"> <div data-aos="fade-up" data-aos-delay="400">
<button <button
onClick={bookDemoOnClick} onClick={bookDemoOnClick}
className="btn text-base capitalize rounded text-white bg-pink-550 hover:bg-pink-700 w-full mb-4 sm:w-auto sm:mb-0" className="btn text-base capitalize rounded text-white bg-secondary hover:bg-pink-700 w-full mb-4 sm:w-auto sm:mb-0"
> >
Book Demo Book Demo
</button> </button>

View File

@ -5,7 +5,7 @@ function LoadingModal() {
<div className="flex flex-col items-center pl-5 pr-5 text-center md:text-xl"> <div className="flex flex-col items-center pl-5 pr-5 text-center md:text-xl">
<svg <svg
aria-hidden="true" aria-hidden="true"
className="w-8 h-8 mr-2 text-gray-200 animate-spin dark:text-gray-600 fill-pink-default" className="w-8 h-8 mr-2 text-gray-200 animate-spin dark:text-gray-600 fill-primary"
viewBox="0 0 100 101" viewBox="0 0 100 101"
fill="none" fill="none"
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"

View File

@ -38,7 +38,7 @@ function ModalLearnMore() {
</div> </div>
<div className={status === "default" ? "block" : "hidden"}> <div className={status === "default" ? "block" : "hidden"}>
<div <div
className="w-[100%] bg-gradient-to-r from-pink-default to-purple-default px-6 pt-2 pb-6" className="w-[100%] bg-gradient-to-r from-primary to-secondary px-6 pt-2 pb-6"
data-aos="fade-up" data-aos="fade-up"
> >
<h3 className="h3 text-white pt-4 pb-2 text-lg md:text-3xl pt-6"> <h3 className="h3 text-white pt-4 pb-2 text-lg md:text-3xl pt-6">

View File

@ -47,7 +47,7 @@ function ModalSignIn() {
</div> </div>
<div className={status === ModalStatus.Default ? "block" : "hidden"}> <div className={status === ModalStatus.Default ? "block" : "hidden"}>
<div <div
className="w-[100%] bg-gradient-to-r from-pink-default to-purple-default px-6 pt-2 pb-6" className="w-[100%] bg-gradient-to-r from-primary to-secondary px-6 pt-2 pb-6"
data-aos="fade-up" data-aos="fade-up"
> >
<h3 className="h3 text-white pt-4 pb-2 text-lg md:text-3xl pt-6"> <h3 className="h3 text-white pt-4 pb-2 text-lg md:text-3xl pt-6">

View File

@ -1,4 +1,5 @@
"use client"; "use client";
// TODO: Needs a complete rework to use the DaisyUI component
import React, { useRef, useState } from "react"; import React, { useRef, useState } from "react";
import xButton from "@/images/icon-x.svg"; import xButton from "@/images/icon-x.svg";
@ -32,7 +33,7 @@ function ModalSignUp() {
onChange={whenModalOpens} onChange={whenModalOpens}
/> />
<label htmlFor="sign-up-modal" className="modal cursor-pointer"> <label htmlFor="sign-up-modal" className="modal cursor-pointer">
<label className="modal-box relative bg-gray-850 max-w-full md:max-w-[550px] py-4 px-3 md:p-6"> <label className="modal-box relative bg-gray-100 dark:bg-gray-850 max-w-full md:max-w-[550px] py-4 px-3 md:p-6">
<div className="flex justify-end pb-2 select-none"> <div className="flex justify-end pb-2 select-none">
<label <label
onClick={handleCloseModal} onClick={handleCloseModal}
@ -48,7 +49,7 @@ function ModalSignUp() {
</div> </div>
<div className={status === ModalStatus.Default ? "block" : "hidden"}> <div className={status === ModalStatus.Default ? "block" : "hidden"}>
<div <div
className="w-[100%] bg-gradient-to-r from-pink-default to-purple-default px-6 pt-2 pb-6" className="w-[100%] bg-gradient-to-r from-primary to-secondary px-6 pt-2 pb-6"
data-aos="fade-up" data-aos="fade-up"
> >
<h3 className="h3 text-white pt-4 pb-2 text-lg md:text-3xl pt-6"> <h3 className="h3 text-white pt-4 pb-2 text-lg md:text-3xl pt-6">

View File

@ -125,7 +125,7 @@ const ModalSignUpForm = forwardRef<FormRefMethods, ModalSignUpFormProps>(
error.message error.message
); );
} }
throw error; // This will allow your .catch block outside this function to capture the error throw error; // This will allow .catch block outside this function to capture the error
} }
}; };
@ -141,7 +141,7 @@ const ModalSignUpForm = forwardRef<FormRefMethods, ModalSignUpFormProps>(
error.message error.message
); );
} }
throw error; // This will allow your .catch block outside this function to capture the error throw error; // This will allow .catch block outside this function to capture the error
} }
}; };
useImperativeHandle(ref, () => ({ useImperativeHandle(ref, () => ({
@ -160,9 +160,9 @@ const ModalSignUpForm = forwardRef<FormRefMethods, ModalSignUpFormProps>(
{...register("email")} {...register("email")}
type="text" type="text"
id="SignUpEmail" id="SignUpEmail"
className="w-full appearance-none bg-transparent border border-white rounded-sm px-4 mr-2 text-white placeholder-white" className="w-full appearance-none bg-transparent border rounded-sm px-4 mr-2 text-black placeholder-black border-black dark:text-white dark:placeholder-white dark:border-white"
placeholder="Your best email…" placeholder="Email…"
aria-label="Your best email…" aria-label="Email…"
autoComplete="on" autoComplete="on"
/> />
<label <label
@ -177,9 +177,9 @@ const ModalSignUpForm = forwardRef<FormRefMethods, ModalSignUpFormProps>(
{...register("first_name")} {...register("first_name")}
id="SignUpFirstName" id="SignUpFirstName"
type="text" type="text"
className="w-full appearance-none bg-transparent border border-white rounded-sm px-4 mr-2 text-white placeholder-white" className="w-full appearance-none bg-transparent border rounded-sm px-4 mr-2 text-black placeholder-black border-black dark:text-white dark:placeholder-white dark:border-white"
placeholder="Your First Name…" placeholder="First Name…"
aria-label="Your First Name…" aria-label="First Name…"
autoComplete="on" autoComplete="on"
/> />
<label <label
@ -194,9 +194,9 @@ const ModalSignUpForm = forwardRef<FormRefMethods, ModalSignUpFormProps>(
{...register("last_name")} {...register("last_name")}
id="SignUpLastName" id="SignUpLastName"
type="text" type="text"
className="w-full appearance-none bg-transparent border border-white rounded-sm px-4 mr-2 text-white placeholder-white" className="w-full appearance-none bg-transparent border rounded-sm px-4 mr-2 text-black placeholder-black border-black dark:text-white dark:placeholder-white dark:border-white"
placeholder="Your Last Name…" placeholder="Last Name…"
aria-label="Your Last Name…" aria-label="Last Name…"
/> />
<label <label
htmlFor="SignUpLastName" htmlFor="SignUpLastName"
@ -211,9 +211,9 @@ const ModalSignUpForm = forwardRef<FormRefMethods, ModalSignUpFormProps>(
{...register("phone_number")} {...register("phone_number")}
id="SignUpPhoneNumber" id="SignUpPhoneNumber"
type="text" type="text"
className="w-full appearance-none bg-transparent border border-white rounded-sm px-4 mr-2 text-white placeholder-white" className="w-full appearance-none bg-transparent border rounded-sm px-4 mr-2 text-black placeholder-black border-black dark:text-white dark:placeholder-white dark:border-white"
placeholder="Your Phone Number…" placeholder="Phone Number…"
aria-label="Your Phone Number…" aria-label="Phone Number…"
/> />
<label <label
htmlFor="SignUpPhoneNumber" htmlFor="SignUpPhoneNumber"
@ -227,9 +227,9 @@ const ModalSignUpForm = forwardRef<FormRefMethods, ModalSignUpFormProps>(
{...register("organisation")} {...register("organisation")}
id="SignUpOrganisation" id="SignUpOrganisation"
type="text" type="text"
className="w-full appearance-none bg-transparent border border-white rounded-sm px-4 mr-2 text-white placeholder-white" className="w-full appearance-none bg-transparent border rounded-sm px-4 mr-2 text-black placeholder-black border-black dark:text-white dark:placeholder-white dark:border-white"
placeholder="Your Organisation…" placeholder="Organisation…"
aria-label="Your Organisation…" aria-label="Organisation…"
/> />
<label <label
htmlFor="SignUpOrganisation" htmlFor="SignUpOrganisation"
@ -243,10 +243,10 @@ const ModalSignUpForm = forwardRef<FormRefMethods, ModalSignUpFormProps>(
{...register("company_size")} {...register("company_size")}
id="SignUpCompanySize" id="SignUpCompanySize"
defaultValue={""} defaultValue={""}
className="w-full appearance-none bg-transparent border border-white rounded-sm px-4 mr-2 text-white placeholder-white" className="w-full appearance-none bg-transparent border rounded-sm px-4 mr-2 text-black placeholder-black border-black dark:text-white dark:placeholder-white dark:border-white"
> >
<option className="bg-gray-850" value={""} disabled> <option className="bg-gray-850" value={""} disabled>
Your Company Size Company Size
</option> </option>
{companySizeList.map((companySizeOption, i) => { {companySizeList.map((companySizeOption, i) => {
return ( return (
@ -272,8 +272,8 @@ const ModalSignUpForm = forwardRef<FormRefMethods, ModalSignUpFormProps>(
{...register("password")} {...register("password")}
id="SignUpPwd" id="SignUpPwd"
type="password" type="password"
className="w-full appearance-none bg-transparent border border-white rounded-sm px-4 mr-2 text-white placeholder-white" className="w-full appearance-none bg-transparent border rounded-sm px-4 mr-2 text-black placeholder-black border-black dark:text-white dark:placeholder-white dark:border-white"
placeholder="Your Password..." placeholder="Password..."
aria-label="Password" aria-label="Password"
/> />
<label <label
@ -288,8 +288,8 @@ const ModalSignUpForm = forwardRef<FormRefMethods, ModalSignUpFormProps>(
{...register("passwordConfirmation")} {...register("passwordConfirmation")}
id="SignUpPwdConfirm" id="SignUpPwdConfirm"
type="password" type="password"
className="w-full appearance-none bg-transparent border border-white rounded-sm px-4 mr-2 text-white placeholder-white" className="w-full appearance-none bg-transparent border rounded-sm px-4 mr-2 text-black placeholder-black border-black dark:text-white dark:placeholder-white dark:border-white"
placeholder="Your Confirmed Password..." placeholder="Confirmed Password..."
aria-label="Confirmed Password" aria-label="Confirmed Password"
/> />
<label <label

View File

@ -8,7 +8,7 @@ function Newsletter() {
<div className="max-w-6xl mx-auto px-4 sm:px-6"> <div className="max-w-6xl mx-auto px-4 sm:px-6">
{/* CTA box */} {/* CTA box */}
<div <div
className="relative bg-gradient-to-r from-pink-default to-purple-default py-10 px-8 md:py-16 md:px-12" className="relative bg-gradient-to-r from-primary to-secondary py-10 px-8 md:py-16 md:px-12"
data-aos="fade-up" data-aos="fade-up"
> >
<div className="relative flex flex-col lg:flex-row justify-between items-center"> <div className="relative flex flex-col lg:flex-row justify-between items-center">