add new landing

main
حسین معصومی پور 2024-09-09 04:07:44 +03:30
parent 4fd00bbf82
commit 40f6f69b65
41 changed files with 1889 additions and 4204 deletions

19
components.json 100644
View File

@ -0,0 +1,19 @@
{
"$schema": "https://ui.shadcn.com/schema.json",
"style": "default",
"rsc": false,
"tsx": false,
"tailwind": {
"config": "tailwind.config.js",
"css": "app/globals.css",
"baseColor": "slate",
"cssVariables": false,
"prefix": ""
},
"aliases": {
"components": "@/components",
"utils": "@/lib/utils",
"ui": "@/components/ui",
"magicui": "@/components/magicui"
}
}

View File

@ -9,7 +9,7 @@ import SimpleReactValidator from "simple-react-validator";
import PersianNumber from "plugins/PersianNumber"; import PersianNumber from "plugins/PersianNumber";
import moment from "jalali-moment"; import moment from "jalali-moment";
const ActivityCard = ({ data }) => { const ActivityCardFake = ({ data }) => {
const CTX = useContext(AppContext); const CTX = useContext(AppContext);
const [conditionTask, setConditionTask] = useState(0); const [conditionTask, setConditionTask] = useState(0);
@ -52,7 +52,7 @@ const ActivityCard = ({ data }) => {
return ( return (
<div <div
className={` p-2 overflow-hidden border-b border-gray-200 ${ className={` p-3 overflow-hidden bg-[#11211e] rounded-2xl w-full realtive ${
conditionTask == 3 || conditionTask == 3 ||
conditionTask == 4 || conditionTask == 4 ||
data?.status == 4 || data?.status == 4 ||
@ -62,24 +62,24 @@ const ActivityCard = ({ data }) => {
: "" : ""
}`} }`}
> >
<div className="flex"> <div className="flex pl-3">
<div className="flex"> <div className="flex">
<div className="flex w-fit "> <div className="flex w-fit ">
<div className="relative pr-2 text-[11px] text-primary-500"> <div className="relative text-[11px] text-primary-500">
{data?.scheduleType == 0 {data?.scheduleType == 0
? "روزانه" ? "daily"
: data?.scheduleType == 1 : data?.scheduleType == 1
? "هفتگی" ? "weekly"
: data?.scheduleType == 2 : data?.scheduleType == 2
? "مخصوص" ? "special"
: ""} : ""}
</div> </div>
<div className="w-[2px] h-3 mx-1 bg-primary-200 opacity-75 mt-[2px]"></div> <div className="w-[2px] h-3 mx-1 bg-primary-200 opacity-30 mt-[1px]"></div>
<div className=" w-fit relative text-[11px] text-secondary-800"> <div className=" w-fit relative text-[11px] text-secondary-400">
{data?.shiftTitle} {data?.shiftTitle}
</div> </div>
<div className="w-[2px] h-3 mx-1 bg-primary-200 opacity-75 mt-[2px]"></div> <div className="w-[2px] h-3 mx-1 bg-primary-200 opacity-30 mt-[1px]"></div>
<div className=" w-fit relative text-[11px] text-secondary-800 h-fit"> <div className=" w-fit relative text-[11px] text-secondary-400 h-fit">
{data?.userFullName} {data?.userFullName}
</div> </div>
</div>{" "} </div>{" "}
@ -152,19 +152,19 @@ const ActivityCard = ({ data }) => {
</div> </div>
<div className="w-full"> <div className="w-full">
<h3 <h3
className={`text-sm font-medium tr03 mt-1 ${ className={`text-base font-medium tr03 mx-1 mb-0 ${
conditionTask == 2 || conditionTask == 4 || data?.status == 4 conditionTask == 2 || conditionTask == 4 || data?.status == 4
? "text-red-600" ? "text-red-600"
: "text-secondary-950" : "text-secondary-300 "
} `} } `}
> >
{data?.title}{" "} {data?.title}{" "}
</h3> </h3>
<p <p
className={`mb-0 text-[12px] tr03 ${ className={`mb-0 text-[12px] tr03 mx-1 ${
conditionTask == 2 || conditionTask == 4 || data?.status == 4 conditionTask == 2 || conditionTask == 4 || data?.status == 4
? "text-red-600" ? "text-red-600"
: "" : "text-secondary-800"
}`} }`}
> >
{data?.description}{" "} {data?.description}{" "}
@ -258,7 +258,7 @@ const ActivityCard = ({ data }) => {
> >
<div className=""> <div className="">
<Input <Input
lable="چرا انجام نشد ؟؟؟ " lable=" Why??????? "
id="undoneResone-id" id="undoneResone-id"
name="undoneResone" name="undoneResone"
type={"text"} type={"text"}
@ -275,13 +275,13 @@ const ActivityCard = ({ data }) => {
"required" "required"
)} )}
textarea={true} textarea={true}
theme={0} theme={1}
mt={"2"} mt={"2"}
/> />
</div> </div>
<Buttonbriz <Buttonbriz
title="ثبت فعالیت" title="Activity registration"
color="INFO" color="INFO"
icon="CHECK" icon="CHECK"
buttonEvent={() => handleUndoneResone()} buttonEvent={() => handleUndoneResone()}
@ -292,4 +292,4 @@ const ActivityCard = ({ data }) => {
); );
}; };
export default ActivityCard; export default ActivityCardFake;

View File

@ -0,0 +1,295 @@
"use client";
import AppContext from "@ctx/AppContext";
import Avatar from "boring-avatars";
import BottomFilterActivities from "plugins/BottomSheet/BottomFilterActivities";
import Buttonbriz from "plugins/Buttonbriz/page";
import Input from "plugins/Input/page";
import React, { useContext, useRef, useState } from "react";
import SimpleReactValidator from "simple-react-validator";
import PersianNumber from "plugins/PersianNumber";
import moment from "jalali-moment";
const ActivityCard = ({ data }) => {
const CTX = useContext(AppContext);
const [conditionTask, setConditionTask] = useState(0);
const [undoneResone, setUndoneResone] = useState("");
const validator = useRef(
new SimpleReactValidator({
messages: {
required: "پر کردن این فیلد الزامی میباشد",
},
element: (message) => (
<>
<div className="text-right px-1 ">
<small className="text-red-600 t-ig-small ">{message}</small>
</div>
</>
),
})
);
const handleConditionTaskCircle = () => {
if (data.status != 2 && data.status != 3 && data.status != 4) {
if (conditionTask == 3 || conditionTask == 4) {
return;
} else {
setConditionTask(1);
}
}
};
const handleUndoneResone = () => {
setConditionTask(4);
CTX.UnDoneActivity(data.id, undoneResone);
};
const handleDone = () => {
setConditionTask(3);
CTX.DoneActivity(data.id);
};
return (
<div
className={` p-2 overflow-hidden border-b border-gray-200 ${
conditionTask == 3 ||
conditionTask == 4 ||
data?.status == 4 ||
data?.status == 2 ||
data?.status == 3
? "fuck-click "
: ""
}`}
>
<div className="flex">
<div className="flex">
<div className="flex w-fit ">
<div className="relative pr-2 text-[11px] text-primary-500">
{data?.scheduleType == 0
? "روزانه"
: data?.scheduleType == 1
? "هفتگی"
: data?.scheduleType == 2
? "مخصوص"
: ""}
</div>
<div className="w-[2px] h-3 mx-1 bg-primary-200 opacity-75 mt-[2px]"></div>
<div className=" w-fit relative text-[11px] text-secondary-800">
{data?.shiftTitle}
</div>
<div className="w-[2px] h-3 mx-1 bg-primary-200 opacity-75 mt-[2px]"></div>
<div className=" w-fit relative text-[11px] text-secondary-800 h-fit">
{data?.userFullName}
</div>
</div>{" "}
{data?.doneAt !== "0001-01-01T00:00:00" && (
<>
<div className="w-[2px] h-3 mx-1 bg-primary-200 opacity-75 mt-[2px]"></div>
<div className=" w-fit relative text-[11px] text-primary-600 h-fit ">
<PersianNumber
number={moment(data?.doneAt).locale("fa").format("HH:mm")}
style={"!text-[11px]"}
/>{" "}
</div>
</>
)}
</div>
</div>
<div className="flex mt-3">
<div
className={`w-[40px] h-[35px] border-[2px] rounded-full ml-3 tr03 ${
conditionTask == 1
? "animate-spin-slow duration-700 border-gray-400 border-dashed"
: conditionTask == 2 || conditionTask == 4 || data?.status == 4
? "border-red-600"
: conditionTask == 3 || data?.status == 2 || data?.status == 3
? "border-primary-200"
: "border-gray-500 border-dashed"
}`}
onClick={() => handleConditionTaskCircle()}
>
{conditionTask == 2 || conditionTask == 4 || data?.status == 4 ? (
<svg
width="11"
height="11"
viewBox="0 0 167 168"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="mx-auto mt-[9px] "
>
<path
d="M95.7504 84.0002L164.834 14.9169C166.199 13.3227 166.912 11.2721 166.831 9.1748C166.75 7.0775 165.881 5.08801 164.397 3.60389C162.913 2.11976 160.923 1.25032 158.826 1.16931C156.729 1.0883 154.678 1.80169 153.084 3.16691L84.0004 72.2502L14.9171 3.08358C13.3479 1.51438 11.2196 0.632812 9.00043 0.632812C6.78125 0.632812 4.65296 1.51438 3.08376 3.08358C1.51456 4.65277 0.632996 6.78106 0.632996 9.00024C0.632996 11.2194 1.51456 13.3477 3.08376 14.9169L72.2504 84.0002L3.08376 153.084C2.21141 153.831 1.50291 154.75 1.00272 155.784C0.502522 156.818 0.221437 157.944 0.177108 159.091C0.132779 160.239 0.326158 161.384 0.745113 162.453C1.16407 163.522 1.79955 164.494 2.61168 165.306C3.4238 166.118 4.39503 166.753 5.4644 167.172C6.53378 167.591 7.67821 167.785 8.82587 167.74C9.97353 167.696 11.0996 167.415 12.1335 166.915C13.1674 166.414 14.0867 165.706 14.8338 164.834L84.0004 95.7502L153.084 164.834C154.678 166.199 156.729 166.912 158.826 166.831C160.923 166.75 162.913 165.881 164.397 164.397C165.881 162.912 166.75 160.923 166.831 158.826C166.912 156.728 166.199 154.678 164.834 153.084L95.7504 84.0002Z"
fill="red"
/>
</svg>
) : conditionTask == 3 || data?.status == 2 || data?.status == 3 ? (
<svg
width="25"
height="25"
viewBox="0 0 300 300"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="mx-auto mt-[3px] "
>
<path
d="M57.062 155.087C56.2612 154.132 55.2777 153.345 54.1692 152.774C53.0607 152.203 51.8494 151.859 50.6062 151.762C49.363 151.665 48.113 151.817 46.9292 152.209C45.7455 152.6 44.6518 153.225 43.7122 154.044C42.7727 154.864 42.0061 155.863 41.4574 156.983C40.9087 158.103 40.5889 159.321 40.5167 160.566C40.4445 161.811 40.6214 163.057 41.037 164.233C41.4526 165.409 42.0985 166.49 42.937 167.412L57.062 155.087ZM89.287 206.25L82.2245 212.412C83.1045 213.421 84.19 214.228 85.4082 214.782C86.6264 215.336 87.949 215.622 89.287 215.622C90.6251 215.622 91.9477 215.336 93.1658 214.782C94.384 214.228 95.4696 213.421 96.3495 212.412L89.287 206.25ZM194.562 99.9125C195.401 98.9896 196.046 97.9086 196.462 96.7329C196.878 95.5573 197.055 94.3105 196.982 93.0657C196.91 91.8208 196.59 90.6028 196.042 89.4831C195.493 88.3633 194.726 87.3643 193.787 86.5445C192.847 85.7247 191.754 85.1005 190.57 84.7086C189.386 84.3166 188.136 84.1648 186.893 84.2619C185.65 84.359 184.438 84.7032 183.33 85.2742C182.221 85.8452 181.238 86.6317 180.437 87.5875L194.562 99.9125ZM131.325 143.837C129.749 145.718 128.973 148.142 129.164 150.589C129.355 153.035 130.498 155.309 132.347 156.922C134.196 158.536 136.604 159.36 139.053 159.218C141.503 159.076 143.799 157.979 145.45 156.162L131.325 143.837ZM120.9 184.287C121.738 183.365 122.384 182.284 122.8 181.108C123.215 179.932 123.392 178.686 123.32 177.441C123.248 176.196 122.928 174.978 122.379 173.858C121.83 172.738 121.064 171.739 120.124 170.919C119.185 170.1 118.091 169.475 116.907 169.084C115.724 168.692 114.474 168.54 113.23 168.637C111.987 168.734 110.776 169.078 109.667 169.649C108.559 170.22 107.575 171.007 106.775 171.962L120.9 184.287ZM42.937 167.412L82.2245 212.412L96.3495 200.087L57.062 155.087L42.937 167.412ZM96.3495 212.412L120.9 184.287L106.775 171.962L82.2245 200.087L96.3495 212.412ZM145.45 156.162L170.012 128.037L155.887 115.712L131.325 143.837L145.45 156.162ZM170.012 128.037L194.562 99.9125L180.437 87.5875L155.887 115.712L170.012 128.037Z"
fill="green"
/>
<path
d="M250 94.5371L196.425 150.787M137.5 200L142.862 207.037L169.65 178.912"
stroke="green"
stroke-width="18.75"
stroke-linecap="round"
stroke-linejoin="round"
/>
</svg>
) : (
""
)}
</div>
<div className="w-full">
<h3
className={`text-sm font-medium tr03 mt-1 ${
conditionTask == 2 || conditionTask == 4 || data?.status == 4
? "text-red-600"
: "text-secondary-950"
} `}
>
{data?.title}{" "}
</h3>
<p
className={`mb-0 text-[12px] tr03 ${
conditionTask == 2 || conditionTask == 4 || data?.status == 4
? "text-red-600"
: ""
}`}
>
{data?.description}{" "}
</p>
</div>
</div>
<div
className={`flex justify-between rtl mt-3 tr03 ${
conditionTask == 1
? "relative top-0 h-fit "
: " relative top-[300px] h-0 "
}`}
>
<div
className="w-[35px] h-[35px] rounded-full bg-secondary-950 pt-4"
onClick={() => setConditionTask(0)}
>
<svg
width="14"
height="14"
viewBox="0 0 150 88"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="mx-auto mt-[-5px]"
>
<path
d="M137.5 75L75 12.5L12.5 75"
stroke="white"
stroke-width="25"
stroke-linecap="round"
stroke-linejoin="round"
/>
</svg>
</div>
<div className="flex ">
{" "}
<div
className="w-[35px] h-[35px] rounded-full bg-primary-400 pt-1 mx-2"
onClick={() => handleDone()}
>
<svg
width="25"
height="25"
viewBox="0 0 300 300"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="mx-auto "
>
<path
d="M57.062 155.087C56.2612 154.132 55.2777 153.345 54.1692 152.774C53.0607 152.203 51.8494 151.859 50.6062 151.762C49.363 151.665 48.113 151.817 46.9292 152.209C45.7455 152.6 44.6518 153.225 43.7122 154.044C42.7727 154.864 42.0061 155.863 41.4574 156.983C40.9087 158.103 40.5889 159.321 40.5167 160.566C40.4445 161.811 40.6214 163.057 41.037 164.233C41.4526 165.409 42.0985 166.49 42.937 167.412L57.062 155.087ZM89.287 206.25L82.2245 212.412C83.1045 213.421 84.19 214.228 85.4082 214.782C86.6264 215.336 87.949 215.622 89.287 215.622C90.6251 215.622 91.9477 215.336 93.1658 214.782C94.384 214.228 95.4696 213.421 96.3495 212.412L89.287 206.25ZM194.562 99.9125C195.401 98.9896 196.046 97.9086 196.462 96.7329C196.878 95.5573 197.055 94.3105 196.982 93.0657C196.91 91.8208 196.59 90.6028 196.042 89.4831C195.493 88.3633 194.726 87.3643 193.787 86.5445C192.847 85.7247 191.754 85.1005 190.57 84.7086C189.386 84.3166 188.136 84.1648 186.893 84.2619C185.65 84.359 184.438 84.7032 183.33 85.2742C182.221 85.8452 181.238 86.6317 180.437 87.5875L194.562 99.9125ZM131.325 143.837C129.749 145.718 128.973 148.142 129.164 150.589C129.355 153.035 130.498 155.309 132.347 156.922C134.196 158.536 136.604 159.36 139.053 159.218C141.503 159.076 143.799 157.979 145.45 156.162L131.325 143.837ZM120.9 184.287C121.738 183.365 122.384 182.284 122.8 181.108C123.215 179.932 123.392 178.686 123.32 177.441C123.248 176.196 122.928 174.978 122.379 173.858C121.83 172.738 121.064 171.739 120.124 170.919C119.185 170.1 118.091 169.475 116.907 169.084C115.724 168.692 114.474 168.54 113.23 168.637C111.987 168.734 110.776 169.078 109.667 169.649C108.559 170.22 107.575 171.007 106.775 171.962L120.9 184.287ZM42.937 167.412L82.2245 212.412L96.3495 200.087L57.062 155.087L42.937 167.412ZM96.3495 212.412L120.9 184.287L106.775 171.962L82.2245 200.087L96.3495 212.412ZM145.45 156.162L170.012 128.037L155.887 115.712L131.325 143.837L145.45 156.162ZM170.012 128.037L194.562 99.9125L180.437 87.5875L155.887 115.712L170.012 128.037Z"
fill="#ffffff"
/>
<path
d="M250 94.5371L196.425 150.787M137.5 200L142.862 207.037L169.65 178.912"
stroke="#ffffff"
stroke-width="18.75"
stroke-linecap="round"
stroke-linejoin="round"
/>
</svg>
</div>
<div
className="w-[35px] h-[35px] rounded-full bg-red-600 pt-4"
onClick={() => setConditionTask(2)}
>
<svg
width="12"
height="12"
viewBox="0 0 166 168"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="mx-auto mt-[-4px] "
>
<path
d="M95.7504 84.0002L164.834 14.9169C166.199 13.3227 166.912 11.2721 166.831 9.1748C166.75 7.0775 165.881 5.08801 164.397 3.60389C162.913 2.11976 160.923 1.25032 158.826 1.16931C156.729 1.0883 154.678 1.80169 153.084 3.16691L84.0004 72.2502L14.9171 3.08358C13.3479 1.51438 11.2196 0.632812 9.00043 0.632812C6.78125 0.632812 4.65296 1.51438 3.08376 3.08358C1.51456 4.65277 0.632996 6.78106 0.632996 9.00024C0.632996 11.2194 1.51456 13.3477 3.08376 14.9169L72.2504 84.0002L3.08376 153.084C2.21141 153.831 1.50291 154.75 1.00272 155.784C0.502522 156.818 0.221437 157.944 0.177108 159.091C0.132779 160.239 0.326158 161.384 0.745113 162.453C1.16407 163.522 1.79955 164.494 2.61168 165.306C3.4238 166.118 4.39503 166.753 5.4644 167.172C6.53378 167.591 7.67821 167.785 8.82587 167.74C9.97353 167.696 11.0996 167.415 12.1335 166.915C13.1674 166.414 14.0867 165.706 14.8338 164.834L84.0004 95.7502L153.084 164.834C154.678 166.199 156.729 166.912 158.826 166.831C160.923 166.75 162.913 165.881 164.397 164.397C165.881 162.912 166.75 160.923 166.831 158.826C166.912 156.728 166.199 154.678 164.834 153.084L95.7504 84.0002Z"
fill="white"
/>
</svg>
</div>
</div>
</div>
<div className={``}>
<div
className={`tr03 ${
conditionTask == 2
? "relative h-fit "
: "relative h-0 overflow-hidden "
}`}
>
<div className="">
<Input
lable="چرا انجام نشد ؟؟؟ "
id="undoneResone-id"
name="undoneResone"
type={"text"}
value={undoneResone}
inputEvent={(e) => {
setUndoneResone(e.target.value);
validator.current.showMessageFor("undoneResone");
}}
style="text-right"
validator={true}
validatorData={validator.current.message(
"undoneResone",
undoneResone,
"required"
)}
textarea={true}
theme={0}
mt={"2"}
/>
</div>
<Buttonbriz
title="ثبت فعالیت"
color="INFO"
icon="CHECK"
buttonEvent={() => handleUndoneResone()}
/>
</div>
</div>
</div>
);
};
export default ActivityCard;

View File

@ -1,9 +1,11 @@
import React from "react"; "use client";
import React, { useEffect, useState } from "react";
import { import {
VerticalTimeline, VerticalTimeline,
VerticalTimelineElement, VerticalTimelineElement,
} from "react-vertical-timeline-component"; } from "react-vertical-timeline-component";
import { motion } from "framer-motion"; import { AnimatePresence, motion } from "framer-motion";
import "react-vertical-timeline-component/style.min.css"; import "react-vertical-timeline-component/style.min.css";
@ -11,8 +13,26 @@ import { SectionWrapper } from "src/hoc";
import { textVariant } from "src/utils/motion"; import { textVariant } from "src/utils/motion";
import { styles } from "src/style"; import { styles } from "src/style";
import { experiences } from "src/constans"; import { experiences } from "src/constans";
import { activityFake } from "datacalender";
import ActivityCard from "@comp/TaskPage/ActivityCard/page";
import ActivityCardFake from "@comp/TaskPage/ActivityCard/page";
const ExperienceCard = ({ experience }) => { const ExperienceCard = ({ experience }) => {
const [isMobile, setIsMobile] = useState(false);
useEffect(() => {
// Check window size after the component mounts
const handleResize = () => {
setIsMobile(window.innerWidth < 640);
};
// Run the function initially and also when the window is resized
handleResize();
window.addEventListener("resize", handleResize);
// Clean up event listener on unmount
return () => window.removeEventListener("resize", handleResize);
}, []);
return ( return (
<VerticalTimelineElement <VerticalTimelineElement
contentStyle={{ contentStyle={{
@ -22,10 +42,20 @@ const ExperienceCard = ({ experience }) => {
}} }}
contentArrowStyle={{ borderRight: "7px solid #35685952" }} contentArrowStyle={{ borderRight: "7px solid #35685952" }}
date={experience.date} date={experience.date}
iconStyle={{ background: experience.iconBg }} iconStyle={{
icon={ background: experience.iconBg, // Customize background
<div className="flex justify-center items-center w-full h-full bg-primary-300 rounded-full"></div> color: "#fff", // Customize icon color
} boxShadow: "0 0 0 4px #35685952", // Add shadow or border
display: "flex",
justifyContent: "center",
alignItems: "center",
background: "white",
width: "30px",
height: "30px",
marginLeft: isMobile ? "5px" : "-15px", // Apply margin based on screen width
marginTop: "15px",
opacity: "0.8",
}}
> >
<div> <div>
<h3 className="text-white text-[24px] font-bold">{experience.title}</h3> <h3 className="text-white text-[24px] font-bold">{experience.title}</h3>
@ -52,13 +82,34 @@ const ExperienceCard = ({ experience }) => {
}; };
const Experience = () => { const Experience = () => {
const [number, setNumber] = useState(2001);
const [prevNumber, setPrevNumber] = useState(2001);
useEffect(() => {
const interval = setInterval(() => {
setPrevNumber(number);
setNumber((prev) => prev + 1);
}, 3000);
return () => clearInterval(interval);
}, [number]);
const numberStr = number.toString();
const prevNumberStr = prevNumber.toString();
const fadeVariants = {
initial: { opacity: 0, y: 30, color: "#000000" }, // Dark background when fading in
animate: { opacity: 1, y: 0, color: "#ffffff" }, // White background when fully visible
exit: { opacity: 0, y: -30, color: "#000000" }, // Dark background when fading out
};
return ( return (
<> <>
<motion.div variants={textVariant()}> <motion.div variants={textVariant()}>
<h2 <h2 className="text-white font-black text-[30px] xs:text-[40px] sm:text-[50px] md:text-[60px] xs:leading-[50px] text-center ">
className={`text-white font-black md:text-[60px] sm:text-[50px] xs:text-[40px] text-[30px] text-center`} <span className="text-primary-300 text-[30px] xs:text-[100px] sm:text-[150px] relative top-[5px] sm:top-[10px] font-bold">
> B
User journey road map{" "} </span>
ase logics{" "}
</h2> </h2>
</motion.div> </motion.div>
@ -77,11 +128,55 @@ const Experience = () => {
<h2 <h2
className={`text-white font-bold md:text-[30px] sm:text-[20px] xs:text-[18px] text-[30px] text-center`} className={`text-white font-bold md:text-[30px] sm:text-[20px] xs:text-[18px] text-[30px] text-center`}
> >
" Now, your coffee shop's symphony plays harmoniously with Briz." Number of tasks completed in Briz
</h2> </h2>
<div className="xs:block lg:flex justify-center mt-10">
<div className="lg:w-[400px]">
<ActivityCardFake data={activityFake} />
</div>
<div className="ml-4 mt-7">
<div className="flex xs:justify-center xs:mt-10 lg:mt-0">
{numberStr.split("").map((digit, index) => (
<div key={index} className="relative text-4xl h-12 w-11 ">
<AnimatePresence initial={false}>
{prevNumberStr[index] !== digit && (
<motion.span
key={`${prevNumberStr[index]}-prev`}
className="absolute inset-x-0 text-center text-white !text-[80px] font-bold "
initial="animate"
animate="exit"
exit="initial"
variants={fadeVariants}
transition={{ duration: 0.5 }}
>
{prevNumberStr[index]}
</motion.span>
)}
</AnimatePresence>
<AnimatePresence initial={false}>
<motion.span
key={`${digit}-current`}
className="absolute inset-x-0 text-center text-white !text-[80px] font-bold"
initial="initial"
animate="animate"
exit="exit"
variants={fadeVariants}
transition={{ duration: 0.5 }}
>
{digit}
</motion.span>
</AnimatePresence>
</div>
))}
</div>
<p className="mb-0 text-white font-light text-center">
Activities performed with Briz
</p>
</div>
</div>
</div> </div>
</> </>
); );
}; };
export default SectionWrapper(Experience, "work"); export default SectionWrapper(Experience, "our-solution");

View File

@ -1,46 +1,114 @@
import React from "react"; "use clients";
import React, { useEffect, useState } from "react";
import { motion } from "framer-motion"; import { motion } from "framer-motion";
import { SectionWrapper } from "src/hoc"; import { SectionWrapper } from "src/hoc";
import { fadeIn, textVariant } from "src/utils/motion"; import { fadeIn, textVariant } from "src/utils/motion";
import { styles } from "src/style"; import { styles } from "src/style";
import { testimonials } from "src/constans"; import { testimonials } from "src/constans";
import Image from "next/image";
const FeedbackCard = ({ index, testimonial, title }) => ( import phi from "@img/adjustw.png";
<motion.div import phi1 from "../../src/assets/phi1.png";
variants={fadeIn("", "spring", index * 0.5, 0.75)} import phi2 from "../../src/assets/phi2.png";
className="bg-[#35685952] p-10 rounded-3xl w-full" import phi3 from "../../src/assets/phi3.png";
>
<h3 className="text-white text-[24px] font-bold">{title}</h3>
<div className="mt-3">
<p className="text-white tracking-wider text-[16px] font-light ">
{testimonial}
</p>
</div>
</motion.div>
);
const Feedbacks = () => { const Feedbacks = () => {
const [activeIndex, setActiveIndex] = useState(0);
useEffect(() => {
const interval = setInterval(() => {
setActiveIndex((prevIndex) =>
prevIndex === testimonials.length - 1 ? 0 : prevIndex + 1
);
}, 6000); // 5 seconds interval
return () => clearInterval(interval); // Cleanup interval on component unmount
}, []);
console.log(activeIndex);
return ( return (
<div className={` rounded-[20px]`}> <div className={` rounded-[20px]`}>
<div className={`bg-tertiary rounded-2xl ]`}> <div className={`bg-tertiary rounded-2xl ]`}>
<motion.div variants={textVariant()}> <motion.div variants={textVariant()}>
<h2 <div className="flex">
className={ <div className="w-[120px] mt-[90px]">
"text-white font-black md:text-[60px] sm:text-[50px] xs:text-[40px] text-[30px]" <Image src={phi} />
} </div>
> <span className="text-primary-300 text-[150px] relative top-[60px] !h-fit font-bold">
Platform Description. HI
</h2> </span>
</div>
<p className="mb-0 text-white">
{" "}
Coffee taste always matters the most. With PHI, it will always be
perfect. Phi means the golden ratio. If you brew your coffee with
the golden ratio, it will always taste good. In the Phi section,
there are three boxes that the barista on shift should fill. These
are the main elements for adjusting the daily coffee recipe:
</p>
</motion.div> </motion.div>
</div> </div>
<div <div className={` pb-14 sm:py-16 grid lg:grid-cols-2 xs:grid-cols-1 `}>
className={` pb-14 sm:py-16 grid lg:grid-cols-2 xs:grid-cols-1 gap-7`} <div>
> {testimonials.map((e, index) => (
{testimonials.map((testimonial, index) => ( <motion.div
<FeedbackCard key={testimonial.name} index={index} {...testimonial} /> key={index}
))} variants={fadeIn("", "spring", index * 0.5, 0.75)}
className={` p-5 rounded-3xl w-full tr03 cursor-pointer ${
activeIndex == index ? "bg-[#35685952]" : ""
}`}
onClick={() => setActiveIndex(index)}
>
<h3
className={`text-white font-bold tr03 ${
activeIndex == index ? "text-[24px]" : "opacity-50"
}`}
>
{e.title}
</h3>
{activeIndex == index && (
<div className="mt-3">
<p className="text-white tracking-wider text-[16px] font-light">
{e.testimonial}
</p>
</div>
)}
</motion.div>
))}
</div>
<motion.div variants={fadeIn("", "spring", 1 * 0.5, 0.75)}>
<Image
className="tr03"
src={
activeIndex == 0
? phi1
: activeIndex == 1
? phi2
: activeIndex == 2
? phi3
: phi3
}
/>
</motion.div>
{/*
<div>
<Image src={phi2} />
</div>
<div>
<Image src={phi3} />
</div> */}
</div> </div>
<p className="mb-0 text-white">
{" "}
Your barista enters the daily recipe, which will be recorded in your
database. You can view your adjustment chart see whats happening in
your bar, and check the quality of your coffee serving in your store.
</p>
</div> </div>
); );
}; };

View File

@ -21,8 +21,8 @@ const Footer = () => {
<Link href={`/pricing`}> <Link href={`/pricing`}>
<p className="mb-0 text-gray-400 mx-4">pricing</p> <p className="mb-0 text-gray-400 mx-4">pricing</p>
</Link> </Link>
<Link href={`/#platform`}> <Link href={`/#Phi`}>
<p className="mb-0 text-gray-400 mx-4">platform</p> <p className="mb-0 text-gray-400 mx-4">Phi</p>
</Link> </Link>
<Link href={`/about-us`}> <Link href={`/about-us`}>
<p className="mb-0 text-gray-400 mx-4">about us</p> <p className="mb-0 text-gray-400 mx-4">about us</p>

View File

@ -1,41 +1,41 @@
import { motion } from "framer-motion";
import Link from "next/link"; import Link from "next/link";
import MovingLogos from "./MovingLogos/page"; import MovingLogos from "./MovingLogos/page";
import { motion } from "framer-motion";
import { fadeIn, textVariant } from "src/utils/motion";
const Hero = () => { const Hero = () => {
return ( return (
<section className={`relative w-full h-screen mx-auto`}> <section className="relative w-full h-screen mx-auto">
<div className="flex justify-center lg:pt-[300px] xs:pt-[200px] xs:ml-5 lg:ml-0"> <div className="flex justify-center pt-[200px] lg:pt-[300px] lg:ml-0">
{/* <div className="flex flex-col justify-center items-center"> <div className="ml-1 text-center">
<div className="w-5 h-5 rounded-full bg-primary-100" /> <div className="flex justify-center items-start">
<div className="w-1 h-[200px] violet-gradient" /> <small className="text-[20px] md:text-[60px] lg:text-[80px] mx-2 text-primary-300 xs:hidden lg:block">
</div> */}
<div className=" ml-1 text-center">
<div className="flex w-full justify-center">
<small className="text-[80px] mx-2 mt-[-30px] text-primary-300">
" "
</small> </small>
<h1 <motion.div variants={fadeIn("", "", 0.1, 1)}>
className={`font-black text-white lg:text-[60px] sm:text-[160px] xs:text-[140px] text-[40px] mb-0 space-x-6 text-center `} <h1
style={{ "word-spacing": "10px" }} className="font-black text-white text-[40px] xs:text-[30px] sm:text-[140px] lg:text-[60px] leading-tight mb-0 space-x-6 text-center"
> style={{ wordSpacing: "10px" }}
SIMPLE AND SMOOTH OPERATION >
</h1> SIMPLE AND SMOOTH OPERATION
<small className="text-[80px] mx-2 mt-[-30px] text-primary-300 "> </h1>
</motion.div>
<small className="text-[20px] md:text-[60px] lg:text-[80px] mx-2 text-primary-300 xs:hidden lg:block">
" "
</small> </small>
</div> </div>
<p
className={`text-gray-300 font-medium lg:text-[22px] sm:text-[26px] xs:text-[16px] text-[16px] lg:leading-[24px] text-white-100 text-center w-8/12 mx-auto `} <motion.div variants={fadeIn("", "", 0.1, 1)}>
> <p className="text-gray-300 font-medium text-[14px] xs:text-[16px] sm:text-[22px] lg:text-[24px] leading-[20px] xs:leading-[24px] text-white-100 text-center lg:w-10/12 xs:w-full xs:px-4 mx-auto mt-5">
A task and shift management solution for coffee shops that provides A task and shift management solution for coffee shops that
clear, trackable task management and monitoring of store operations.{" "} provides clear, trackable task management and monitoring of store
</p> operations.
</p>
</motion.div>
<Link href="/app/login"> <Link href="/app/login">
<div className="justify-center flex mt-10"> <div className="flex justify-center mt-10">
<button className="btn btn-primary rounded-full px-20 py-5 text-black text-lg font-bold "> <button className="btn btn-primary rounded-full px-8 sm:px-16 lg:px-20 py-3 sm:py-5 text-black text-sm sm:text-lg font-bold">
Get started Get started
</button> </button>
</div> </div>
@ -43,15 +43,11 @@ const Hero = () => {
</div> </div>
</div> </div>
{/* <ComputersCanvas /> */} <div className="mt-[50px] lg:mt-[200px]">
<p className="opacity-60 text-white font-light text-[14px] xs:text-[16px] sm:text-[20px] lg:text-[22px] leading-[20px] lg:leading-[24px] text-center w-10/12 sm:w-8/12 mx-auto">
<div className="mt-[200px]">
<p
className={`opacity-60 text-white font-light lg:text-[20px] sm:text-[26px] xs:text-[16px] text-[16px] lg:leading-[24px] text-white-100 text-center w-8/12 mx-auto `}
>
Brands that trust us and use BRIZ for their managing. Brands that trust us and use BRIZ for their managing.
</p> </p>
<div className=" p-5 relative overflow-hidden w-10/12 mx-auto opacity-40 fade-mask"> <div className="p-5 relative overflow-hidden w-10/12 mx-auto opacity-40 fade-mask">
<MovingLogos /> <MovingLogos />
</div> </div>
</div> </div>

View File

@ -1,9 +1,9 @@
"use client"; "use client";
import Image from "next/image"; import Image from "next/image";
import logobrand1 from "@img/logo/alp.png"; import logobrand1 from "@img/logo/ros.png";
import logobrand2 from "@img/logo/lam.png"; import logobrand2 from "@img/logo/lam.png";
import logobrand3 from "@img/logo/tuk.png"; import logobrand3 from "@img/logo/tuk.png";
import logobrand4 from "@img/logo/vi.png"; import logobrand4 from "@img/logo/vee.png";
import logobrand5 from "@img/logo/woo.png"; import logobrand5 from "@img/logo/woo.png";
const MovingLogos = () => { const MovingLogos = () => {

View File

@ -83,14 +83,14 @@ const Navbar = () => {
<Image <Image
src={toggle ? close : menu} src={toggle ? close : menu}
alt="menu" alt="menu"
className="w-[28px] h-[28px] object-contain" className="w-[18px] h-[28px] object-contain"
onClick={() => setToggle(!toggle)} onClick={() => setToggle(!toggle)}
/> />
<div <div
className={`${ className={`${
!toggle ? "hidden" : "flex" !toggle ? "hidden" : "flex"
} p-6 bg-white absolute top-20 right-0 mx-4 my-2 min-w-[140px] z-10 rounded-xl`} } p-6 bg-white absolute top-20 right-5 my-2 min-w-[140px] z-10 rounded-xl`}
> >
<ul className="list-none flex justify-end items-start flex-1 flex-col gap-4"> <ul className="list-none flex justify-end items-start flex-1 flex-col gap-4">
{navLinks.map((nav) => ( {navLinks.map((nav) => (

View File

@ -0,0 +1,118 @@
"use clients";
import React, { useEffect, useState } from "react";
import { motion } from "framer-motion";
import { SectionWrapper } from "src/hoc";
import { fadeIn, textVariant } from "src/utils/motion";
import { styles } from "src/style";
import { testimonials } from "src/constans";
import Image from "next/image";
import phi from "@img/adjustw.png";
import phi1 from "../../src/assets/phi1.png";
import phi2 from "../../src/assets/phi2.png";
import phi3 from "../../src/assets/phi3.png";
const Phi = () => {
const [activeIndex, setActiveIndex] = useState(0);
useEffect(() => {
const interval = setInterval(() => {
setActiveIndex((prevIndex) =>
prevIndex === testimonials.length - 1 ? 0 : prevIndex + 1
);
}, 6000); // 5 seconds interval
return () => clearInterval(interval); // Cleanup interval on component unmount
}, []);
console.log(activeIndex);
return (
<div className={` rounded-[20px]`}>
<div className={`bg-tertiary rounded-2xl ]`}>
<motion.div variants={textVariant()}>
<div className="flex">
<div className="xs:w-[100px] lg:w-[120px] mt-[90px]">
<Image src={phi} />
</div>
<span className="text-primary-300 text-[30px] xs:text-[100px] sm:text-[150px] relative top-[5px] sm:top-[10px] font-bold xs:mt-[89px] lg:mt-[52px]">
{" "}
HI
</span>
</div>
<p className="mb-0 text-white xs:mt-0 lg:mt-5">
{" "}
Coffee taste always matters the most. With PHI, it will always be
perfect. Phi means the golden ratio. If you brew your coffee with
the golden ratio, it will always taste good. In the Phi section,
there are three boxes that the barista on shift should fill. These
are the main elements for adjusting the daily coffee recipe:
</p>
</motion.div>
</div>
<div className={` pb-14 sm:py-16 grid lg:grid-cols-2 xs:grid-cols-1 `}>
<div>
{testimonials.map((e, index) => (
<motion.div
key={index}
variants={fadeIn("", "spring", index * 0.5, 0.75)}
className={` p-5 rounded-3xl w-full tr03 cursor-pointer ${
activeIndex == index ? "bg-[#35685952]" : ""
}`}
onClick={() => setActiveIndex(index)}
>
<h3
className={`text-white font-bold tr03 ${
activeIndex == index ? "text-[24px]" : "opacity-50"
}`}
>
{e.title}
</h3>
{activeIndex == index && (
<div className="mt-3">
<p className="text-white tracking-wider text-[16px] font-light">
{e.testimonial}
</p>
</div>
)}
</motion.div>
))}
</div>
<motion.div variants={fadeIn("", "spring", 1 * 0.5, 0.75)}>
<Image
className="tr03"
src={
activeIndex == 0
? phi1
: activeIndex == 1
? phi2
: activeIndex == 2
? phi3
: phi3
}
/>
</motion.div>
{/*
<div>
<Image src={phi2} />
</div>
<div>
<Image src={phi3} />
</div> */}
</div>
<p className="mb-0 text-white">
{" "}
Your barista enters the daily recipe, which will be recorded in your
database. You can view your adjustment chart see whats happening in
your bar, and check the quality of your coffee serving in your store.
</p>
</div>
);
};
export default SectionWrapper(Phi, "Phi");

View File

@ -0,0 +1,868 @@
"use clients";
import React, { useEffect, useState } from "react";
import { motion } from "framer-motion";
import { SectionWrapper } from "src/hoc";
import { fadeIn, textVariant } from "src/utils/motion";
import { styles } from "src/style";
import { stepProducts } from "src/constans";
import Image from "next/image";
import phi from "@img/adjustw.png";
import app from "../../src/assets/app.png";
import Avatar from "boring-avatars";
const StepProduct = ({}) => {
const [activeIndex, setActiveIndex] = useState(1);
return (
<div className={` rounded-[20px]`}>
<div className={`bg-tertiary rounded-2xl ]`}>
<motion.div variants={textVariant()}>
<div
className={`text-white font-black text-[30px] xs:text-[30px] sm:text-[50px] md:text-[60px] xs:leading-[60px] lg:leading-normal flex `}
>
<span className="text-primary-300 text-[30px] xs:text-[100px] sm:text-[150px] relative top-[10px] !h-fit font-bold xs:mt-[49px] lg:mt-0">
E
</span>
<div className="text-left mt-10">
<p className="mb-0">asy to Implement </p>
<p className="mb-0 mt-[-30px]">asy to Use. </p>
</div>
</div>
{/* <p className="mb-0 text-white text-lfet">
{" "}
make your operation simple and smooth
</p> */}
</motion.div>
<div className={` pb-14 grid lg:grid-cols-2 xs:grid-cols-1 gap-7 `}>
<div>
{stepProducts.map((e, index) => (
<motion.div
key={index}
variants={fadeIn("", "spring", index * 0.5, 0.75)}
className={` p-5 rounded-3xl w-full tr03 cursor-pointer ${
activeIndex == index ? "bg-[#35685952]" : ""
}`}
onClick={() => setActiveIndex(index)}
>
<h3
className={`text-white font-bold tr03 ${
activeIndex == index ? "text-[24px]" : "opacity-50"
}`}
>
{e.title}
</h3>
{activeIndex == index && (
<div className="mt-3">
<p className="text-white tracking-wider text-[16px] font-light">
{e.des}
</p>
</div>
)}
</motion.div>
))}
<p className="mb-0 text-white mt-8">
{" "}
Now just set up your shifts for the upcoming week. Assign staff to
each position within each shift and designate a supervisor.
</p>
</div>
<div className=" xs:p-3 lg:p-8 h-fit">
<div className="flex justify-center items-center relative">
<div className="relative z-10">
<Image
src={app}
alt="Phone Mockup"
width={300}
height={600}
className="shadow-xl z-90"
/>
{/* Example screen content inside the mockup */}
<div className="absolute inset-3 flex justify-center items-start mt-10 text-white font-bold z-0">
<div className=" w-11/12 mx-auto">
<div
className={`w-full bg-[#132420] rounded-2xl cursor-pointer ${
activeIndex == 0 ? "pb-3" : ""
}`}
>
<div className="flex" onClick={() => setActiveIndex(0)}>
<div className="flex w-10/12 p-2 py-3">
<div className=" rounded mx-1">
<p className="mb-0 text-center pt-[2px] text-white text-[12px] ">
1 -
</p>
</div>
<div className="pt-[2px] pr-2 ">
<h4 className="text-[12px] font-bold">
Management routines{" "}
</h4>
</div>
</div>
<div className="w-2/12 mt-1">
{activeIndex == 0 ? (
<div className="w-[20px] h-[20px] bg-secondary-50 shadow-sm rounded-lg mt-2 pt-[4px]">
<svg
width="10"
height="10"
viewBox="0 0 16 16"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="mx-auto opacity-70"
>
<path
d="M8 1V15M1 8H15"
stroke="#2B2B2B"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
/>
</svg>
</div>
) : (
<div className="w-[20px] h-[20px] bg-secondary-50 shadow-sm rounded-lg mt-2 pt-[4px]">
<svg
width="10"
height="10"
viewBox="0 0 151 89"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="mx-auto opacity-70"
>
<path
d="M12.9522 13.3506L75.4522 75.8506L137.952 13.3506"
stroke="black"
stroke-width="25"
stroke-linecap="round"
stroke-linejoin="round"
/>
</svg>
</div>
)}
</div>
</div>
<div
className={`flex ${
activeIndex == 0 ? "block" : "hidden"
}`}
>
<div className="bg-primary-800 shadow-sm rounded-full p-1 w-fit flex m-1">
<div className="mx-3">
<p className="mb-0 mt-1 text-[12px] font-medium">
normal
</p>
</div>
<>
<div className="w-[25px] h-[25px] bg-secondary-950 rounded-full">
<svg
width="10"
height="10"
viewBox="0 0 18 18"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="mx-auto mt-[8px]"
>
<g clip-path="url(#clip0_72_994)">
<path
d="M11.4653 2.36397L10.77 3.05922L4.37926 9.44922C3.94651 9.88272 3.72976 10.0995 3.54376 10.338C3.32409 10.6194 3.13573 10.924 2.98201 11.2462C2.85226 11.5192 2.75551 11.8102 2.56201 12.3907L1.74151 14.8515L1.54051 15.453C1.4935 15.5932 1.48652 15.7437 1.52037 15.8877C1.55422 16.0316 1.62755 16.1633 1.73212 16.2679C1.83669 16.3724 1.96835 16.4458 2.1123 16.4796C2.25626 16.5135 2.4068 16.5065 2.54701 16.4595L3.14851 16.2585L5.60926 15.438C6.19051 15.2445 6.48076 15.1477 6.75376 15.018C7.07626 14.8642 7.38076 14.676 7.66201 14.4562C7.90051 14.2702 8.11726 14.0535 8.55001 13.6207L14.9408 7.22997L15.636 6.53472C16.1891 5.98165 16.4998 5.23152 16.4998 4.44935C16.4998 3.66718 16.1891 2.91705 15.636 2.36397C15.0829 1.8109 14.3328 1.50018 13.5506 1.50018C12.7685 1.50018 12.0183 1.8109 11.4653 2.36397Z"
stroke="black"
stroke-width="1.5"
/>
<path
d="M11.4653 2.36397L10.77 3.05922L4.37926 9.44922C3.94651 9.88272 3.72976 10.0995 3.54376 10.338C3.32409 10.6194 3.13573 10.924 2.98201 11.2462C2.85226 11.5192 2.75551 11.8102 2.56201 12.3907L1.74151 14.8515L1.54051 15.453C1.4935 15.5932 1.48652 15.7437 1.52037 15.8877C1.55422 16.0316 1.62755 16.1633 1.73212 16.2679C1.83669 16.3724 1.96835 16.4458 2.1123 16.4796C2.25626 16.5135 2.4068 16.5065 2.54701 16.4595L3.14851 16.2585L5.60926 15.438C6.19051 15.2445 6.48076 15.1477 6.75376 15.018C7.07626 14.8642 7.38076 14.676 7.66201 14.4562C7.90051 14.2702 8.11726 14.0535 8.55001 13.6207L14.9408 7.22997L15.636 6.53472C16.1891 5.98165 16.4998 5.23152 16.4998 4.44935C16.4998 3.66718 16.1891 2.91705 15.636 2.36397C15.0829 1.8109 14.3328 1.50018 13.5506 1.50018C12.7685 1.50018 12.0183 1.8109 11.4653 2.36397Z"
stroke="white"
stroke-width="1.5"
/>
<g opacity="0.5">
<path
d="M10.77white 3.05847C10.77 3.05847 10.857 4.53597 12.1605 5.83947C13.464 7.14297 14.9408 7.22922 14.9408 7.22922M3.14852 16.2585L1.74152 14.85"
stroke="white"
stroke-width="1.5"
/>
<path
d="M10.77 3.05847C10.77 3.05847 10.857 4.53597 12.1605 5.83947C13.464 7.14297 14.9408 7.22922 14.9408 7.22922M3.14852 16.2585L1.74152 14.85"
stroke="white"
stroke-width="1.5"
/>
</g>
</g>
<defs>
<clipPath id="clip0_72_994">
<rect width="18" height="18" fill="white" />
</clipPath>
</defs>
</svg>
</div>
</>
</div>
<div className="bg-primary-800 shadow-sm rounded-full p-1 w-fit flex m-1">
<div className="mx-3">
<p className="mb-0 mt-1 text-[12px] font-medium">
friday
</p>
</div>
<>
<div className="w-[25px] h-[25px] bg-secondary-950 rounded-full">
<svg
width="10"
height="10"
viewBox="0 0 18 18"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="mx-auto mt-[8px]"
>
<g clip-path="url(#clip0_72_994)">
<path
d="M11.4653 2.36397L10.77 3.05922L4.37926 9.44922C3.94651 9.88272 3.72976 10.0995 3.54376 10.338C3.32409 10.6194 3.13573 10.924 2.98201 11.2462C2.85226 11.5192 2.75551 11.8102 2.56201 12.3907L1.74151 14.8515L1.54051 15.453C1.4935 15.5932 1.48652 15.7437 1.52037 15.8877C1.55422 16.0316 1.62755 16.1633 1.73212 16.2679C1.83669 16.3724 1.96835 16.4458 2.1123 16.4796C2.25626 16.5135 2.4068 16.5065 2.54701 16.4595L3.14851 16.2585L5.60926 15.438C6.19051 15.2445 6.48076 15.1477 6.75376 15.018C7.07626 14.8642 7.38076 14.676 7.66201 14.4562C7.90051 14.2702 8.11726 14.0535 8.55001 13.6207L14.9408 7.22997L15.636 6.53472C16.1891 5.98165 16.4998 5.23152 16.4998 4.44935C16.4998 3.66718 16.1891 2.91705 15.636 2.36397C15.0829 1.8109 14.3328 1.50018 13.5506 1.50018C12.7685 1.50018 12.0183 1.8109 11.4653 2.36397Z"
stroke="black"
stroke-width="1.5"
/>
<path
d="M11.4653 2.36397L10.77 3.05922L4.37926 9.44922C3.94651 9.88272 3.72976 10.0995 3.54376 10.338C3.32409 10.6194 3.13573 10.924 2.98201 11.2462C2.85226 11.5192 2.75551 11.8102 2.56201 12.3907L1.74151 14.8515L1.54051 15.453C1.4935 15.5932 1.48652 15.7437 1.52037 15.8877C1.55422 16.0316 1.62755 16.1633 1.73212 16.2679C1.83669 16.3724 1.96835 16.4458 2.1123 16.4796C2.25626 16.5135 2.4068 16.5065 2.54701 16.4595L3.14851 16.2585L5.60926 15.438C6.19051 15.2445 6.48076 15.1477 6.75376 15.018C7.07626 14.8642 7.38076 14.676 7.66201 14.4562C7.90051 14.2702 8.11726 14.0535 8.55001 13.6207L14.9408 7.22997L15.636 6.53472C16.1891 5.98165 16.4998 5.23152 16.4998 4.44935C16.4998 3.66718 16.1891 2.91705 15.636 2.36397C15.0829 1.8109 14.3328 1.50018 13.5506 1.50018C12.7685 1.50018 12.0183 1.8109 11.4653 2.36397Z"
stroke="white"
stroke-width="1.5"
/>
<g opacity="0.5">
<path
d="M10.77white 3.05847C10.77 3.05847 10.857 4.53597 12.1605 5.83947C13.464 7.14297 14.9408 7.22922 14.9408 7.22922M3.14852 16.2585L1.74152 14.85"
stroke="white"
stroke-width="1.5"
/>
<path
d="M10.77 3.05847C10.77 3.05847 10.857 4.53597 12.1605 5.83947C13.464 7.14297 14.9408 7.22922 14.9408 7.22922M3.14852 16.2585L1.74152 14.85"
stroke="white"
stroke-width="1.5"
/>
</g>
</g>
<defs>
<clipPath id="clip0_72_994">
<rect width="18" height="18" fill="white" />
</clipPath>
</defs>
</svg>
</div>
</>
</div>
</div>
</div>
<div
className={`w-full bg-[#132420] rounded-2xl mt-2 cursor-pointer ${
activeIndex == 1 ? "pb-3" : ""
}`}
>
<div className="flex" onClick={() => setActiveIndex(1)}>
<div className="flex w-10/12 p-2 py-3">
<div className=" rounded mx-1">
<p className="mb-0 text-center pt-[2px] text-white text-[12px] ">
2 -
</p>
</div>
<div className="pt-[2px] pr-2 ">
<h4 className="text-[12px] font-bold">
Management sections{" "}
</h4>
</div>
</div>
<div className="w-2/12 mt-1">
{activeIndex == 1 ? (
<div className="w-[20px] h-[20px] bg-secondary-50 shadow-sm rounded-lg mt-2 pt-[4px]">
<svg
width="10"
height="10"
viewBox="0 0 16 16"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="mx-auto opacity-70"
>
<path
d="M8 1V15M1 8H15"
stroke="#2B2B2B"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
/>
</svg>
</div>
) : (
<div className="w-[20px] h-[20px] bg-secondary-50 shadow-sm rounded-lg mt-2 pt-[4px]">
<svg
width="10"
height="10"
viewBox="0 0 151 89"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="mx-auto opacity-70"
>
<path
d="M12.9522 13.3506L75.4522 75.8506L137.952 13.3506"
stroke="black"
stroke-width="25"
stroke-linecap="round"
stroke-linejoin="round"
/>
</svg>
</div>
)}
</div>
</div>
<div
className={`flex ${
activeIndex == 1 ? "block" : "hidden"
}`}
>
<div className="bg-primary-800 shadow-sm rounded-full p-1 w-fit flex m-1">
<div className="mx-3">
<p className="mb-0 mt-1 text-[12px] font-medium">
bar
</p>
</div>
<>
<div className="w-[25px] h-[25px] bg-secondary-950 rounded-full">
<svg
width="10"
height="10"
viewBox="0 0 18 18"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="mx-auto mt-[8px]"
>
<g clip-path="url(#clip0_72_994)">
<path
d="M11.4653 2.36397L10.77 3.05922L4.37926 9.44922C3.94651 9.88272 3.72976 10.0995 3.54376 10.338C3.32409 10.6194 3.13573 10.924 2.98201 11.2462C2.85226 11.5192 2.75551 11.8102 2.56201 12.3907L1.74151 14.8515L1.54051 15.453C1.4935 15.5932 1.48652 15.7437 1.52037 15.8877C1.55422 16.0316 1.62755 16.1633 1.73212 16.2679C1.83669 16.3724 1.96835 16.4458 2.1123 16.4796C2.25626 16.5135 2.4068 16.5065 2.54701 16.4595L3.14851 16.2585L5.60926 15.438C6.19051 15.2445 6.48076 15.1477 6.75376 15.018C7.07626 14.8642 7.38076 14.676 7.66201 14.4562C7.90051 14.2702 8.11726 14.0535 8.55001 13.6207L14.9408 7.22997L15.636 6.53472C16.1891 5.98165 16.4998 5.23152 16.4998 4.44935C16.4998 3.66718 16.1891 2.91705 15.636 2.36397C15.0829 1.8109 14.3328 1.50018 13.5506 1.50018C12.7685 1.50018 12.0183 1.8109 11.4653 2.36397Z"
stroke="black"
stroke-width="1.5"
/>
<path
d="M11.4653 2.36397L10.77 3.05922L4.37926 9.44922C3.94651 9.88272 3.72976 10.0995 3.54376 10.338C3.32409 10.6194 3.13573 10.924 2.98201 11.2462C2.85226 11.5192 2.75551 11.8102 2.56201 12.3907L1.74151 14.8515L1.54051 15.453C1.4935 15.5932 1.48652 15.7437 1.52037 15.8877C1.55422 16.0316 1.62755 16.1633 1.73212 16.2679C1.83669 16.3724 1.96835 16.4458 2.1123 16.4796C2.25626 16.5135 2.4068 16.5065 2.54701 16.4595L3.14851 16.2585L5.60926 15.438C6.19051 15.2445 6.48076 15.1477 6.75376 15.018C7.07626 14.8642 7.38076 14.676 7.66201 14.4562C7.90051 14.2702 8.11726 14.0535 8.55001 13.6207L14.9408 7.22997L15.636 6.53472C16.1891 5.98165 16.4998 5.23152 16.4998 4.44935C16.4998 3.66718 16.1891 2.91705 15.636 2.36397C15.0829 1.8109 14.3328 1.50018 13.5506 1.50018C12.7685 1.50018 12.0183 1.8109 11.4653 2.36397Z"
stroke="white"
stroke-width="1.5"
/>
<g opacity="0.5">
<path
d="M10.77white 3.05847C10.77 3.05847 10.857 4.53597 12.1605 5.83947C13.464 7.14297 14.9408 7.22922 14.9408 7.22922M3.14852 16.2585L1.74152 14.85"
stroke="white"
stroke-width="1.5"
/>
<path
d="M10.77 3.05847C10.77 3.05847 10.857 4.53597 12.1605 5.83947C13.464 7.14297 14.9408 7.22922 14.9408 7.22922M3.14852 16.2585L1.74152 14.85"
stroke="white"
stroke-width="1.5"
/>
</g>
</g>
<defs>
<clipPath id="clip0_72_994">
<rect width="18" height="18" fill="white" />
</clipPath>
</defs>
</svg>
</div>
</>
</div>
<div className="bg-primary-800 shadow-sm rounded-full p-1 w-fit flex m-1">
<div className="mx-3">
<p className="mb-0 mt-1 text-[12px] font-medium">
Italian kitchen
</p>
</div>
<>
<div className="w-[25px] h-[25px] bg-secondary-950 rounded-full">
<svg
width="10"
height="10"
viewBox="0 0 18 18"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="mx-auto mt-[8px]"
>
<g clip-path="url(#clip0_72_994)">
<path
d="M11.4653 2.36397L10.77 3.05922L4.37926 9.44922C3.94651 9.88272 3.72976 10.0995 3.54376 10.338C3.32409 10.6194 3.13573 10.924 2.98201 11.2462C2.85226 11.5192 2.75551 11.8102 2.56201 12.3907L1.74151 14.8515L1.54051 15.453C1.4935 15.5932 1.48652 15.7437 1.52037 15.8877C1.55422 16.0316 1.62755 16.1633 1.73212 16.2679C1.83669 16.3724 1.96835 16.4458 2.1123 16.4796C2.25626 16.5135 2.4068 16.5065 2.54701 16.4595L3.14851 16.2585L5.60926 15.438C6.19051 15.2445 6.48076 15.1477 6.75376 15.018C7.07626 14.8642 7.38076 14.676 7.66201 14.4562C7.90051 14.2702 8.11726 14.0535 8.55001 13.6207L14.9408 7.22997L15.636 6.53472C16.1891 5.98165 16.4998 5.23152 16.4998 4.44935C16.4998 3.66718 16.1891 2.91705 15.636 2.36397C15.0829 1.8109 14.3328 1.50018 13.5506 1.50018C12.7685 1.50018 12.0183 1.8109 11.4653 2.36397Z"
stroke="black"
stroke-width="1.5"
/>
<path
d="M11.4653 2.36397L10.77 3.05922L4.37926 9.44922C3.94651 9.88272 3.72976 10.0995 3.54376 10.338C3.32409 10.6194 3.13573 10.924 2.98201 11.2462C2.85226 11.5192 2.75551 11.8102 2.56201 12.3907L1.74151 14.8515L1.54051 15.453C1.4935 15.5932 1.48652 15.7437 1.52037 15.8877C1.55422 16.0316 1.62755 16.1633 1.73212 16.2679C1.83669 16.3724 1.96835 16.4458 2.1123 16.4796C2.25626 16.5135 2.4068 16.5065 2.54701 16.4595L3.14851 16.2585L5.60926 15.438C6.19051 15.2445 6.48076 15.1477 6.75376 15.018C7.07626 14.8642 7.38076 14.676 7.66201 14.4562C7.90051 14.2702 8.11726 14.0535 8.55001 13.6207L14.9408 7.22997L15.636 6.53472C16.1891 5.98165 16.4998 5.23152 16.4998 4.44935C16.4998 3.66718 16.1891 2.91705 15.636 2.36397C15.0829 1.8109 14.3328 1.50018 13.5506 1.50018C12.7685 1.50018 12.0183 1.8109 11.4653 2.36397Z"
stroke="white"
stroke-width="1.5"
/>
<g opacity="0.5">
<path
d="M10.77white 3.05847C10.77 3.05847 10.857 4.53597 12.1605 5.83947C13.464 7.14297 14.9408 7.22922 14.9408 7.22922M3.14852 16.2585L1.74152 14.85"
stroke="white"
stroke-width="1.5"
/>
<path
d="M10.77 3.05847C10.77 3.05847 10.857 4.53597 12.1605 5.83947C13.464 7.14297 14.9408 7.22922 14.9408 7.22922M3.14852 16.2585L1.74152 14.85"
stroke="white"
stroke-width="1.5"
/>
</g>
</g>
<defs>
<clipPath id="clip0_72_994">
<rect width="18" height="18" fill="white" />
</clipPath>
</defs>
</svg>
</div>
</>
</div>
</div>
</div>
<div
className={`w-full bg-[#132420] rounded-2xl mt-2 cursor-pointer ${
activeIndex == 2 ? "pb-3" : ""
}`}
>
<div className="flex" onClick={() => setActiveIndex(2)}>
<div className="flex w-10/12 p-2 py-3">
<div className=" rounded mx-1">
<p className="mb-0 text-center pt-[2px] text-white text-[12px] ">
3 -
</p>
</div>
<div className="pt-[2px] pr-2 ">
<h4 className="text-[12px] font-bold">
Management positions{" "}
</h4>
</div>
</div>
<div className="w-2/12 mt-1">
{activeIndex == 2 ? (
<div className="w-[20px] h-[20px] bg-secondary-50 shadow-sm rounded-lg mt-2 pt-[4px]">
<svg
width="10"
height="10"
viewBox="0 0 16 16"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="mx-auto opacity-70"
>
<path
d="M8 1V15M1 8H15"
stroke="#2B2B2B"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
/>
</svg>
</div>
) : (
<div className="w-[20px] h-[20px] bg-secondary-50 shadow-sm rounded-lg mt-2 pt-[4px]">
<svg
width="10"
height="10"
viewBox="0 0 151 89"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="mx-auto opacity-70"
>
<path
d="M12.9522 13.3506L75.4522 75.8506L137.952 13.3506"
stroke="black"
stroke-width="25"
stroke-linecap="round"
stroke-linejoin="round"
/>
</svg>
</div>
)}
</div>
</div>
<div
className={`flex ${
activeIndex == 2 ? "block" : "hidden"
}`}
>
<div className="bg-primary-800 shadow-sm rounded-full p-1 w-fit flex m-1">
<div className="mx-3">
<p className="mb-0 mt-1 text-[12px] font-medium">
cashier
</p>
</div>
<>
<div className="w-[25px] h-[25px] bg-secondary-950 rounded-full">
<svg
width="10"
height="10"
viewBox="0 0 18 18"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="mx-auto mt-[8px]"
>
<g clip-path="url(#clip0_72_994)">
<path
d="M11.4653 2.36397L10.77 3.05922L4.37926 9.44922C3.94651 9.88272 3.72976 10.0995 3.54376 10.338C3.32409 10.6194 3.13573 10.924 2.98201 11.2462C2.85226 11.5192 2.75551 11.8102 2.56201 12.3907L1.74151 14.8515L1.54051 15.453C1.4935 15.5932 1.48652 15.7437 1.52037 15.8877C1.55422 16.0316 1.62755 16.1633 1.73212 16.2679C1.83669 16.3724 1.96835 16.4458 2.1123 16.4796C2.25626 16.5135 2.4068 16.5065 2.54701 16.4595L3.14851 16.2585L5.60926 15.438C6.19051 15.2445 6.48076 15.1477 6.75376 15.018C7.07626 14.8642 7.38076 14.676 7.66201 14.4562C7.90051 14.2702 8.11726 14.0535 8.55001 13.6207L14.9408 7.22997L15.636 6.53472C16.1891 5.98165 16.4998 5.23152 16.4998 4.44935C16.4998 3.66718 16.1891 2.91705 15.636 2.36397C15.0829 1.8109 14.3328 1.50018 13.5506 1.50018C12.7685 1.50018 12.0183 1.8109 11.4653 2.36397Z"
stroke="black"
stroke-width="1.5"
/>
<path
d="M11.4653 2.36397L10.77 3.05922L4.37926 9.44922C3.94651 9.88272 3.72976 10.0995 3.54376 10.338C3.32409 10.6194 3.13573 10.924 2.98201 11.2462C2.85226 11.5192 2.75551 11.8102 2.56201 12.3907L1.74151 14.8515L1.54051 15.453C1.4935 15.5932 1.48652 15.7437 1.52037 15.8877C1.55422 16.0316 1.62755 16.1633 1.73212 16.2679C1.83669 16.3724 1.96835 16.4458 2.1123 16.4796C2.25626 16.5135 2.4068 16.5065 2.54701 16.4595L3.14851 16.2585L5.60926 15.438C6.19051 15.2445 6.48076 15.1477 6.75376 15.018C7.07626 14.8642 7.38076 14.676 7.66201 14.4562C7.90051 14.2702 8.11726 14.0535 8.55001 13.6207L14.9408 7.22997L15.636 6.53472C16.1891 5.98165 16.4998 5.23152 16.4998 4.44935C16.4998 3.66718 16.1891 2.91705 15.636 2.36397C15.0829 1.8109 14.3328 1.50018 13.5506 1.50018C12.7685 1.50018 12.0183 1.8109 11.4653 2.36397Z"
stroke="white"
stroke-width="1.5"
/>
<g opacity="0.5">
<path
d="M10.77white 3.05847C10.77 3.05847 10.857 4.53597 12.1605 5.83947C13.464 7.14297 14.9408 7.22922 14.9408 7.22922M3.14852 16.2585L1.74152 14.85"
stroke="white"
stroke-width="1.5"
/>
<path
d="M10.77 3.05847C10.77 3.05847 10.857 4.53597 12.1605 5.83947C13.464 7.14297 14.9408 7.22922 14.9408 7.22922M3.14852 16.2585L1.74152 14.85"
stroke="white"
stroke-width="1.5"
/>
</g>
</g>
<defs>
<clipPath id="clip0_72_994">
<rect width="18" height="18" fill="white" />
</clipPath>
</defs>
</svg>
</div>
</>
</div>
<div className="bg-primary-800 shadow-sm rounded-full p-1 w-fit flex m-1">
<div className="mx-3">
<p className="mb-0 mt-1 text-[12px] font-medium">
barista
</p>
</div>
<>
<div className="w-[25px] h-[25px] bg-secondary-950 rounded-full">
<svg
width="10"
height="10"
viewBox="0 0 18 18"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="mx-auto mt-[8px]"
>
<g clip-path="url(#clip0_72_994)">
<path
d="M11.4653 2.36397L10.77 3.05922L4.37926 9.44922C3.94651 9.88272 3.72976 10.0995 3.54376 10.338C3.32409 10.6194 3.13573 10.924 2.98201 11.2462C2.85226 11.5192 2.75551 11.8102 2.56201 12.3907L1.74151 14.8515L1.54051 15.453C1.4935 15.5932 1.48652 15.7437 1.52037 15.8877C1.55422 16.0316 1.62755 16.1633 1.73212 16.2679C1.83669 16.3724 1.96835 16.4458 2.1123 16.4796C2.25626 16.5135 2.4068 16.5065 2.54701 16.4595L3.14851 16.2585L5.60926 15.438C6.19051 15.2445 6.48076 15.1477 6.75376 15.018C7.07626 14.8642 7.38076 14.676 7.66201 14.4562C7.90051 14.2702 8.11726 14.0535 8.55001 13.6207L14.9408 7.22997L15.636 6.53472C16.1891 5.98165 16.4998 5.23152 16.4998 4.44935C16.4998 3.66718 16.1891 2.91705 15.636 2.36397C15.0829 1.8109 14.3328 1.50018 13.5506 1.50018C12.7685 1.50018 12.0183 1.8109 11.4653 2.36397Z"
stroke="black"
stroke-width="1.5"
/>
<path
d="M11.4653 2.36397L10.77 3.05922L4.37926 9.44922C3.94651 9.88272 3.72976 10.0995 3.54376 10.338C3.32409 10.6194 3.13573 10.924 2.98201 11.2462C2.85226 11.5192 2.75551 11.8102 2.56201 12.3907L1.74151 14.8515L1.54051 15.453C1.4935 15.5932 1.48652 15.7437 1.52037 15.8877C1.55422 16.0316 1.62755 16.1633 1.73212 16.2679C1.83669 16.3724 1.96835 16.4458 2.1123 16.4796C2.25626 16.5135 2.4068 16.5065 2.54701 16.4595L3.14851 16.2585L5.60926 15.438C6.19051 15.2445 6.48076 15.1477 6.75376 15.018C7.07626 14.8642 7.38076 14.676 7.66201 14.4562C7.90051 14.2702 8.11726 14.0535 8.55001 13.6207L14.9408 7.22997L15.636 6.53472C16.1891 5.98165 16.4998 5.23152 16.4998 4.44935C16.4998 3.66718 16.1891 2.91705 15.636 2.36397C15.0829 1.8109 14.3328 1.50018 13.5506 1.50018C12.7685 1.50018 12.0183 1.8109 11.4653 2.36397Z"
stroke="white"
stroke-width="1.5"
/>
<g opacity="0.5">
<path
d="M10.77white 3.05847C10.77 3.05847 10.857 4.53597 12.1605 5.83947C13.464 7.14297 14.9408 7.22922 14.9408 7.22922M3.14852 16.2585L1.74152 14.85"
stroke="white"
stroke-width="1.5"
/>
<path
d="M10.77 3.05847C10.77 3.05847 10.857 4.53597 12.1605 5.83947C13.464 7.14297 14.9408 7.22922 14.9408 7.22922M3.14852 16.2585L1.74152 14.85"
stroke="white"
stroke-width="1.5"
/>
</g>
</g>
<defs>
<clipPath id="clip0_72_994">
<rect width="18" height="18" fill="white" />
</clipPath>
</defs>
</svg>
</div>
</>
</div>
</div>
</div>
<div
className={`w-full bg-[#132420] rounded-2xl mt-2 cursor-pointer ${
activeIndex == 3 ? "pb-3" : ""
}`}
>
<div className="flex" onClick={() => setActiveIndex(3)}>
<div className="flex w-10/12 p-2 py-3">
<div className=" rounded mx-1">
<p className="mb-0 text-center pt-[2px] text-white text-[12px] ">
4 -
</p>
</div>
<div className="pt-[2px] pr-2 ">
<h4 className="text-[12px] font-bold">
Management staff{" "}
</h4>
</div>
</div>
<div className="w-2/12 mt-1">
{activeIndex == 3 ? (
<div className="w-[20px] h-[20px] bg-secondary-50 shadow-sm rounded-lg mt-2 pt-[4px]">
<svg
width="10"
height="10"
viewBox="0 0 16 16"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="mx-auto opacity-70"
>
<path
d="M8 1V15M1 8H15"
stroke="#2B2B2B"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
/>
</svg>
</div>
) : (
<div className="w-[20px] h-[20px] bg-secondary-50 shadow-sm rounded-lg mt-2 pt-[4px]">
<svg
width="10"
height="10"
viewBox="0 0 151 89"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="mx-auto opacity-70"
>
<path
d="M12.9522 13.3506L75.4522 75.8506L137.952 13.3506"
stroke="black"
stroke-width="25"
stroke-linecap="round"
stroke-linejoin="round"
/>
</svg>
</div>
)}
</div>
</div>
<div
className={` ${activeIndex == 3 ? "block" : "hidden"}`}
>
<div className="bg-primary-800 shadow-sm rounded-full p-1 w-[95%] flex m-1">
{" "}
<div className=" rounded-full sahdow-sm ">
<Avatar
size={22}
name={"ali maleki"}
variant="beam"
colors={["#9d9f88", "#83af96", "#b2de93"]}
/>
</div>
<div className="mx-3">
<p className="mb-0 mt-1 text-[12px] font-medium">
ali maleki - barista
</p>
</div>
</div>
<div className="bg-primary-800 shadow-sm rounded-full p-1 w-[95%] flex m-1">
{" "}
<div className=" rounded-full sahdow-sm ">
<Avatar
size={22}
name={"sadaf hedayati"}
variant="beam"
colors={["#9d9f88", "#83af96", "#b2de93"]}
/>
</div>
<div className="mx-3">
<p className="mb-0 mt-1 text-[12px] font-medium">
sadaf hedayati - cashier
</p>
</div>
</div>
</div>
</div>
<div
className={`w-full bg-[#132420] rounded-2xl mt-2 cursor-pointer ${
activeIndex == 4 ? "pb-3" : ""
}`}
>
<div className="flex" onClick={() => setActiveIndex(4)}>
<div className="flex w-10/12 p-2 py-3">
<div className=" rounded mx-1">
<p className="mb-0 text-center pt-[2px] text-white text-[12px] ">
5 -
</p>
</div>
<div className="pt-[2px] pr-2 ">
<h4 className="text-[12px] font-bold">
Management set shifts{" "}
</h4>
</div>
</div>
<div className="w-2/12 mt-1">
{activeIndex == 4 ? (
<div className="w-[20px] h-[20px] bg-secondary-50 shadow-sm rounded-lg mt-2 pt-[4px]">
<svg
width="10"
height="10"
viewBox="0 0 16 16"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="mx-auto opacity-70"
>
<path
d="M8 1V15M1 8H15"
stroke="#2B2B2B"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
/>
</svg>
</div>
) : (
<div className="w-[20px] h-[20px] bg-secondary-50 shadow-sm rounded-lg mt-2 pt-[4px]">
<svg
width="10"
height="10"
viewBox="0 0 151 89"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="mx-auto opacity-70"
>
<path
d="M12.9522 13.3506L75.4522 75.8506L137.952 13.3506"
stroke="black"
stroke-width="25"
stroke-linecap="round"
stroke-linejoin="round"
/>
</svg>
</div>
)}
</div>
</div>
<div
className={` ${activeIndex == 4 ? "block" : "hidden"}`}
>
<div className="bg-primary-800 shadow-sm rounded-full p-1 w-[95%] flex m-1">
<div className="mx-3">
<p className="mb-0 mt-1 text-[12px] font-medium">
morning shift | 07:00-11:59
</p>
</div>
</div>
<div className="bg-primary-800 shadow-sm rounded-full p-1 w-[95%] flex m-1">
<div className="mx-3">
<p className="mb-0 mt-1 text-[12px] font-medium">
Afternoon shift | 02:00-17:59
</p>
</div>
</div>
</div>
</div>
<div
className={`w-full bg-[#132420] rounded-2xl mt-2 cursor-pointer ${
activeIndex == 5 ? "pb-3" : ""
}`}
>
<div className="flex" onClick={() => setActiveIndex(5)}>
<div className="flex w-10/12 p-2 py-3">
<div className=" rounded mx-1">
<p className="mb-0 text-center pt-[2px] text-white text-[12px] ">
6 -
</p>
</div>
<div className="pt-[2px] pr-2 ">
<h4 className="text-[12px] font-bold">
Add collection task{" "}
</h4>
</div>
</div>
<div className="w-2/12 mt-1">
{activeIndex == 5 ? (
<div className="w-[20px] h-[20px] bg-secondary-50 shadow-sm rounded-lg mt-2 pt-[4px]">
<svg
width="10"
height="10"
viewBox="0 0 16 16"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="mx-auto opacity-70"
>
<path
d="M8 1V15M1 8H15"
stroke="#2B2B2B"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
/>
</svg>
</div>
) : (
<div className="w-[20px] h-[20px] bg-secondary-50 shadow-sm rounded-lg mt-2 pt-[4px]">
<svg
width="10"
height="10"
viewBox="0 0 151 89"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="mx-auto opacity-70"
>
<path
d="M12.9522 13.3506L75.4522 75.8506L137.952 13.3506"
stroke="black"
stroke-width="25"
stroke-linecap="round"
stroke-linejoin="round"
/>
</svg>
</div>
)}
</div>
</div>
<div
className={` ${activeIndex == 5 ? "block" : "hidden"}`}
>
<div className="bg-primary-800 shadow-sm rounded-md p-1 w-[95%] flex m-1">
<div className="mx-3">
<p className="mb-0 mt-1 text-[10px] font-medium">
morning shift | barista | daily
</p>
<p className="mb-0 text-sm">
Backwashing the espresso machine
</p>
</div>
</div>
<div className="bg-primary-800 shadow-sm rounded-md p-1 w-[95%] flex m-1">
<div className="mx-3">
<p className="mb-0 mt-1 text-[10px] font-medium">
morning shift | cashier | daily
</p>
<p className="mb-0 text-sm">
Close the morning shift box{" "}
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
);
};
export default SectionWrapper(StepProduct, "product");

View File

@ -0,0 +1,91 @@
import React from "react";
import { Tilt } from "react-tilt";
import { motion } from "framer-motion";
import { fadeIn, textVariant } from "src/utils/motion";
import { services } from "src/constans";
import { styles } from "src/style";
import { SectionWrapper } from "src/hoc";
import Image from "next/image";
import vector1 from "@img/Vector1.png";
const ServiceCard = ({ index, title, icon }) => (
<Tilt className=" w-full mt-5">
<motion.div
variants={fadeIn("right", "spring", index * 0.5, 0.75)}
className="w-full bg-[#35685952] p-[1px] rounded-[20px] shadow-card"
>
<div
options={{
max: 45,
scale: 1,
speed: 450,
}}
className="bg-tertiary rounded-[20px] py-5 px-12 min-h-[180px] flex justify-evenly items-center flex-col"
>
{/* <Image
src={
icon == "int1"
? int1
: icon == "int2"
? int2
: icon == "int3"
? int3
: icon == "int4"
? int4
: int1
}
alt="web-development"
className="w-[150px] h-[150px] object-contain rounded-xl"
/> */}
<h3 className="text-white text-[20px] font-bold text-center">
{title}
</h3>
</div>
</motion.div>
</Tilt>
);
const StressTest = () => {
return (
<div className="xs:mt-20 ">
<motion.div variants={textVariant()}>
<h2 className="text-white font-black text-[30px] xs:text-[40px] sm:text-[50px] md:text-[60px] xs:leading-[50px] ">
<span className="text-primary-300 text-[30px] xs:text-[100px] sm:text-[150px] relative top-[5px] sm:top-[10px] font-bold">
B
</span>
e Part of Our Stress Test{" "}
</h2>
</motion.div>
<motion.p
variants={fadeIn("", "", 0.1, 1)}
className="text-secondary text-[14px] xs:text-[16px] sm:text-[17px] max-w-3xl leading-[20px] sm:leading-[24px] text-white mt-3"
>
Be Part of Our Stress Test and try us as an early adapter
</motion.p>
<motion.div variants={fadeIn("", "", 0.1, 1)}>
<div className="flex flex-col sm:flex-row mt-5 items-center sm:items-start">
<input
type="text"
className="form-control !w-full sm:!w-6/12 mb-4 sm:mb-0"
placeholder="Enter your email"
/>
<button className="btn btn-primary rounded-2xl sm:ml-3 w-full p-4 sm:w-auto">
Subscribe
</button>
</div>
</motion.div>
<div className="mt-10 xs:block lg:flex xs:justify-center lg:justify-start gap-5 sm:gap-10">
{services.map((service, index) => (
<ServiceCard key={service.title} index={index} {...service} />
))}
</div>
</div>
);
};
export default SectionWrapper(StressTest, "StressTest");

View File

@ -1,3 +1,5 @@
import ActivityCard from "@comp/TaskPage/ActivityCard/page";
export const PersianM = (month) => { export const PersianM = (month) => {
switch (month) { switch (month) {
case (month = "1"): case (month = "1"):
@ -398,3 +400,27 @@ export const holidays = {
}, },
], ],
}; };
export const activityFake = {
amount: "0",
amountType: " 0",
description: "Closing the accounts ",
doneAt: "0001-01-01T00:00:00",
hasDisposed: false,
id: "8c3b04cb-a4dc-471b-baa3-a0ce773301fa",
isDisposable: false,
isDone: false,
performanceDescription: "",
scheduleType: 0,
setFor: "2024-09-04T06:00:00",
shiftPlanId: "dfb74c6e-5c27-4c4b-866f-ae66f7320331",
shiftTitle: "morning shift",
status: 0,
title: "Cleaning the southern walls of the hall b",
type: 0,
unDoneReason: "",
userFirstName: "hossein",
userFullName: "hossein masoomi pour",
userId: "27b63e2b-8b36-41a0-b0e1-270a51184f15",
userLastName: "masoomi pour",
};

262
package-lock.json generated
View File

@ -38,7 +38,8 @@
"react-vertical-timeline-component": "^3.6.0", "react-vertical-timeline-component": "^3.6.0",
"simple-react-validator": "^1.6.2", "simple-react-validator": "^1.6.2",
"swiper": "^10.2.0", "swiper": "^10.2.0",
"tailwindcss": "3.3.3" "tailwindcss": "3.3.3",
"tailwindcss-animate": "^1.0.7"
}, },
"devDependencies": { "devDependencies": {
"css-loader": "^6.8.1", "css-loader": "^6.8.1",
@ -2458,26 +2459,6 @@
"resolved": "https://registry.npmjs.org/@types/draco3d/-/draco3d-1.4.9.tgz", "resolved": "https://registry.npmjs.org/@types/draco3d/-/draco3d-1.4.9.tgz",
"integrity": "sha512-4MMUjMQb4yA5fJ4osXx+QxGHt0/ZSy4spT6jL1HM7Tn8OJEC35siqdnpOo+HxPhYjqEFumKfGVF9hJfdyKBIBA==" "integrity": "sha512-4MMUjMQb4yA5fJ4osXx+QxGHt0/ZSy4spT6jL1HM7Tn8OJEC35siqdnpOo+HxPhYjqEFumKfGVF9hJfdyKBIBA=="
}, },
"node_modules/@types/eslint": {
"version": "8.56.5",
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.5.tgz",
"integrity": "sha512-u5/YPJHo1tvkSF2CE0USEkxon82Z5DBy2xR+qfyYNszpX9qcs4sT6uq2kBbj4BXY1+DBGDPnrhMZV3pKWGNukw==",
"dev": true,
"dependencies": {
"@types/estree": "*",
"@types/json-schema": "*"
}
},
"node_modules/@types/eslint-scope": {
"version": "3.7.7",
"resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
"integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
"dev": true,
"dependencies": {
"@types/eslint": "*",
"@types/estree": "*"
}
},
"node_modules/@types/estree": { "node_modules/@types/estree": {
"version": "1.0.5", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
@ -2580,9 +2561,9 @@
} }
}, },
"node_modules/@webassemblyjs/ast": { "node_modules/@webassemblyjs/ast": {
"version": "1.11.6", "version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz",
"integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@webassemblyjs/helper-numbers": "1.11.6", "@webassemblyjs/helper-numbers": "1.11.6",
@ -2602,9 +2583,9 @@
"dev": true "dev": true
}, },
"node_modules/@webassemblyjs/helper-buffer": { "node_modules/@webassemblyjs/helper-buffer": {
"version": "1.11.6", "version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz",
"integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==",
"dev": true "dev": true
}, },
"node_modules/@webassemblyjs/helper-numbers": { "node_modules/@webassemblyjs/helper-numbers": {
@ -2625,15 +2606,15 @@
"dev": true "dev": true
}, },
"node_modules/@webassemblyjs/helper-wasm-section": { "node_modules/@webassemblyjs/helper-wasm-section": {
"version": "1.11.6", "version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz",
"integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@webassemblyjs/ast": "1.11.6", "@webassemblyjs/ast": "1.12.1",
"@webassemblyjs/helper-buffer": "1.11.6", "@webassemblyjs/helper-buffer": "1.12.1",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
"@webassemblyjs/wasm-gen": "1.11.6" "@webassemblyjs/wasm-gen": "1.12.1"
} }
}, },
"node_modules/@webassemblyjs/ieee754": { "node_modules/@webassemblyjs/ieee754": {
@ -2661,28 +2642,28 @@
"dev": true "dev": true
}, },
"node_modules/@webassemblyjs/wasm-edit": { "node_modules/@webassemblyjs/wasm-edit": {
"version": "1.11.6", "version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz",
"integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@webassemblyjs/ast": "1.11.6", "@webassemblyjs/ast": "1.12.1",
"@webassemblyjs/helper-buffer": "1.11.6", "@webassemblyjs/helper-buffer": "1.12.1",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
"@webassemblyjs/helper-wasm-section": "1.11.6", "@webassemblyjs/helper-wasm-section": "1.12.1",
"@webassemblyjs/wasm-gen": "1.11.6", "@webassemblyjs/wasm-gen": "1.12.1",
"@webassemblyjs/wasm-opt": "1.11.6", "@webassemblyjs/wasm-opt": "1.12.1",
"@webassemblyjs/wasm-parser": "1.11.6", "@webassemblyjs/wasm-parser": "1.12.1",
"@webassemblyjs/wast-printer": "1.11.6" "@webassemblyjs/wast-printer": "1.12.1"
} }
}, },
"node_modules/@webassemblyjs/wasm-gen": { "node_modules/@webassemblyjs/wasm-gen": {
"version": "1.11.6", "version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz",
"integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@webassemblyjs/ast": "1.11.6", "@webassemblyjs/ast": "1.12.1",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
"@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/ieee754": "1.11.6",
"@webassemblyjs/leb128": "1.11.6", "@webassemblyjs/leb128": "1.11.6",
@ -2690,24 +2671,24 @@
} }
}, },
"node_modules/@webassemblyjs/wasm-opt": { "node_modules/@webassemblyjs/wasm-opt": {
"version": "1.11.6", "version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz",
"integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@webassemblyjs/ast": "1.11.6", "@webassemblyjs/ast": "1.12.1",
"@webassemblyjs/helper-buffer": "1.11.6", "@webassemblyjs/helper-buffer": "1.12.1",
"@webassemblyjs/wasm-gen": "1.11.6", "@webassemblyjs/wasm-gen": "1.12.1",
"@webassemblyjs/wasm-parser": "1.11.6" "@webassemblyjs/wasm-parser": "1.12.1"
} }
}, },
"node_modules/@webassemblyjs/wasm-parser": { "node_modules/@webassemblyjs/wasm-parser": {
"version": "1.11.6", "version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz",
"integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@webassemblyjs/ast": "1.11.6", "@webassemblyjs/ast": "1.12.1",
"@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-api-error": "1.11.6",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
"@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/ieee754": "1.11.6",
@ -2716,12 +2697,12 @@
} }
}, },
"node_modules/@webassemblyjs/wast-printer": { "node_modules/@webassemblyjs/wast-printer": {
"version": "1.11.6", "version": "1.12.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz",
"integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@webassemblyjs/ast": "1.11.6", "@webassemblyjs/ast": "1.12.1",
"@xtuc/long": "4.2.2" "@xtuc/long": "4.2.2"
} }
}, },
@ -2748,40 +2729,30 @@
"node": ">=0.4.0" "node": ">=0.4.0"
} }
}, },
"node_modules/acorn-import-assertions": { "node_modules/acorn-import-attributes": {
"version": "1.9.0", "version": "1.9.5",
"resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
"integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
"dev": true, "dev": true,
"peerDependencies": { "peerDependencies": {
"acorn": "^8" "acorn": "^8"
} }
}, },
"node_modules/ajv": { "node_modules/ajv": {
"version": "6.12.6", "version": "8.17.1",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
"dependencies": { "dependencies": {
"fast-deep-equal": "^3.1.1", "fast-deep-equal": "^3.1.3",
"fast-json-stable-stringify": "^2.0.0", "fast-uri": "^3.0.1",
"json-schema-traverse": "^0.4.1", "json-schema-traverse": "^1.0.0",
"uri-js": "^4.2.2" "require-from-string": "^2.0.2"
}, },
"funding": { "funding": {
"type": "github", "type": "github",
"url": "https://github.com/sponsors/epoberezkin" "url": "https://github.com/sponsors/epoberezkin"
} }
}, },
"node_modules/ajv-keywords": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
"dev": true,
"peerDependencies": {
"ajv": "^6.9.1"
}
},
"node_modules/ansi-escapes": { "node_modules/ansi-escapes": {
"version": "4.3.2", "version": "4.3.2",
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
@ -3732,9 +3703,9 @@
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
}, },
"node_modules/enhanced-resolve": { "node_modules/enhanced-resolve": {
"version": "5.15.1", "version": "5.17.1",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.1.tgz", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
"integrity": "sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg==", "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"graceful-fs": "^4.2.4", "graceful-fs": "^4.2.4",
@ -3998,6 +3969,11 @@
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
}, },
"node_modules/fast-uri": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
"integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw=="
},
"node_modules/fastq": { "node_modules/fastq": {
"version": "1.17.1", "version": "1.17.1",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
@ -4183,19 +4159,6 @@
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
}, },
"node_modules/fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"hasInstallScript": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
"node_modules/function-bind": { "node_modules/function-bind": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
@ -5005,10 +4968,9 @@
"integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
}, },
"node_modules/json-schema-traverse": { "node_modules/json-schema-traverse": {
"version": "0.4.1", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
"dev": true
}, },
"node_modules/json5": { "node_modules/json5": {
"version": "2.2.3", "version": "2.2.3",
@ -6409,6 +6371,37 @@
"url": "https://opencollective.com/webpack" "url": "https://opencollective.com/webpack"
} }
}, },
"node_modules/schema-utils/node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/schema-utils/node_modules/ajv-keywords": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
"dev": true,
"peerDependencies": {
"ajv": "^6.9.1"
}
},
"node_modules/schema-utils/node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
},
"node_modules/semver": { "node_modules/semver": {
"version": "7.6.0", "version": "7.6.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
@ -6856,6 +6849,14 @@
"node": ">=14.0.0" "node": ">=14.0.0"
} }
}, },
"node_modules/tailwindcss-animate": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz",
"integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==",
"peerDependencies": {
"tailwindcss": ">=3.0.0 || insiders"
}
},
"node_modules/tapable": { "node_modules/tapable": {
"version": "2.2.1", "version": "2.2.1",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
@ -7320,6 +7321,7 @@
"version": "4.4.1", "version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"dev": true,
"dependencies": { "dependencies": {
"punycode": "^2.1.0" "punycode": "^2.1.0"
} }
@ -7425,26 +7427,25 @@
"integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="
}, },
"node_modules/webpack": { "node_modules/webpack": {
"version": "5.90.3", "version": "5.94.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz",
"integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@types/eslint-scope": "^3.7.3",
"@types/estree": "^1.0.5", "@types/estree": "^1.0.5",
"@webassemblyjs/ast": "^1.11.5", "@webassemblyjs/ast": "^1.12.1",
"@webassemblyjs/wasm-edit": "^1.11.5", "@webassemblyjs/wasm-edit": "^1.12.1",
"@webassemblyjs/wasm-parser": "^1.11.5", "@webassemblyjs/wasm-parser": "^1.12.1",
"acorn": "^8.7.1", "acorn": "^8.7.1",
"acorn-import-assertions": "^1.9.0", "acorn-import-attributes": "^1.9.5",
"browserslist": "^4.21.10", "browserslist": "^4.21.10",
"chrome-trace-event": "^1.0.2", "chrome-trace-event": "^1.0.2",
"enhanced-resolve": "^5.15.0", "enhanced-resolve": "^5.17.1",
"es-module-lexer": "^1.2.1", "es-module-lexer": "^1.2.1",
"eslint-scope": "5.1.1", "eslint-scope": "5.1.1",
"events": "^3.2.0", "events": "^3.2.0",
"glob-to-regexp": "^0.4.1", "glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.2.9", "graceful-fs": "^4.2.11",
"json-parse-even-better-errors": "^2.3.1", "json-parse-even-better-errors": "^2.3.1",
"loader-runner": "^4.2.0", "loader-runner": "^4.2.0",
"mime-types": "^2.1.27", "mime-types": "^2.1.27",
@ -7452,7 +7453,7 @@
"schema-utils": "^3.2.0", "schema-utils": "^3.2.0",
"tapable": "^2.1.1", "tapable": "^2.1.1",
"terser-webpack-plugin": "^5.3.10", "terser-webpack-plugin": "^5.3.10",
"watchpack": "^2.4.0", "watchpack": "^2.4.1",
"webpack-sources": "^3.2.3" "webpack-sources": "^3.2.3"
}, },
"bin": { "bin": {
@ -7480,6 +7481,19 @@
"node": ">=10.13.0" "node": ">=10.13.0"
} }
}, },
"node_modules/webpack/node_modules/watchpack": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz",
"integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==",
"dev": true,
"dependencies": {
"glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.1.2"
},
"engines": {
"node": ">=10.13.0"
}
},
"node_modules/whatwg-url": { "node_modules/whatwg-url": {
"version": "7.1.0", "version": "7.1.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
@ -7601,21 +7615,6 @@
"node": ">=16.0.0" "node": ">=16.0.0"
} }
}, },
"node_modules/workbox-build/node_modules/ajv": {
"version": "8.13.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz",
"integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==",
"dependencies": {
"fast-deep-equal": "^3.1.3",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2",
"uri-js": "^4.4.1"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/workbox-build/node_modules/brace-expansion": { "node_modules/workbox-build/node_modules/brace-expansion": {
"version": "1.1.11", "version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@ -7644,11 +7643,6 @@
"url": "https://github.com/sponsors/isaacs" "url": "https://github.com/sponsors/isaacs"
} }
}, },
"node_modules/workbox-build/node_modules/json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
},
"node_modules/workbox-build/node_modules/minimatch": { "node_modules/workbox-build/node_modules/minimatch": {
"version": "3.1.2", "version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",

View File

@ -3,7 +3,7 @@
"version": "0.2.7", "version": "0.2.7",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev -p 8080", "dev": "next dev -p 8000",
"build": "next build", "build": "next build",
"start": "next start", "start": "next start",
"lint": "next lint" "lint": "next lint"
@ -39,7 +39,8 @@
"react-vertical-timeline-component": "^3.6.0", "react-vertical-timeline-component": "^3.6.0",
"simple-react-validator": "^1.6.2", "simple-react-validator": "^1.6.2",
"swiper": "^10.2.0", "swiper": "^10.2.0",
"tailwindcss": "3.3.3" "tailwindcss": "3.3.3",
"tailwindcss-animate": "^1.0.7"
}, },
"devDependencies": { "devDependencies": {
"css-loader": "^6.8.1", "css-loader": "^6.8.1",

View File

@ -0,0 +1 @@
self.fallback=async e=>{let{destination:a,url:n}=e,o={document:"/offline",image:!1,audio:!1,video:!1,font:!1}[a];return o?caches.match(o,{ignoreSearch:!0}):Response.error()};

View File

@ -1,102 +0,0 @@
/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
/******/ (function() { // webpackBootstrap
/******/ "use strict";
/******/ var __webpack_modules__ = ({
/***/ "./node_modules/@ducanh2912/next-pwa/dist/fallback.js":
/*!************************************************************!*\
!*** ./node_modules/@ducanh2912/next-pwa/dist/fallback.js ***!
\************************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\nself.fallback = async (_)=>{\n let { destination: e, url: A } = _, s = {\n document: \"/offline\",\n image: false,\n audio: false,\n video: false,\n font: false\n }[e];\n return s ? caches.match(s, {\n ignoreSearch: !0\n }) : \"\" === e && false && 0 ? 0 : Response.error();\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGR1Y2FuaDI5MTIvbmV4dC1wd2EvZGlzdC9mYWxsYmFjay5qcyIsIm1hcHBpbmdzIjoiO0FBQUE7QUFDQSxVQUFVLHlCQUF5QjtBQUNuQyxrQkFBa0IsVUFBcUM7QUFDdkQsZUFBZSxLQUFrQztBQUNqRCxlQUFlLEtBQWtDO0FBQ2pELGVBQWUsS0FBa0M7QUFDakQsY0FBYyxLQUFpQztBQUMvQyxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUssZ0JBQWdCLEtBQWlDLElBQUksQ0FBd0MsR0FBRyxDQUUvRjtBQUNOIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9AZHVjYW5oMjkxMi9uZXh0LXB3YS9kaXN0L2ZhbGxiYWNrLmpzP2NlNGIiXSwic291cmNlc0NvbnRlbnQiOlsic2VsZi5mYWxsYmFjayA9IGFzeW5jIChfKT0+e1xuICAgIGxldCB7IGRlc3RpbmF0aW9uOiBlLCB1cmw6IEEgfSA9IF8sIHMgPSB7XG4gICAgICAgIGRvY3VtZW50OiBwcm9jZXNzLmVudi5fX1BXQV9GQUxMQkFDS19ET0NVTUVOVF9fLFxuICAgICAgICBpbWFnZTogcHJvY2Vzcy5lbnYuX19QV0FfRkFMTEJBQ0tfSU1BR0VfXyxcbiAgICAgICAgYXVkaW86IHByb2Nlc3MuZW52Ll9fUFdBX0ZBTExCQUNLX0FVRElPX18sXG4gICAgICAgIHZpZGVvOiBwcm9jZXNzLmVudi5fX1BXQV9GQUxMQkFDS19WSURFT19fLFxuICAgICAgICBmb250OiBwcm9jZXNzLmVudi5fX1BXQV9GQUxMQkFDS19GT05UX19cbiAgICB9W2VdO1xuICAgIHJldHVybiBzID8gY2FjaGVzLm1hdGNoKHMsIHtcbiAgICAgICAgaWdub3JlU2VhcmNoOiAhMFxuICAgIH0pIDogXCJcIiA9PT0gZSAmJiBwcm9jZXNzLmVudi5fX1BXQV9GQUxMQkFDS19EQVRBX18gJiYgQS5tYXRjaCgvXFwvX25leHRcXC9kYXRhXFwvLitcXC8uK1xcLmpzb24kL2kpID8gY2FjaGVzLm1hdGNoKHByb2Nlc3MuZW52Ll9fUFdBX0ZBTExCQUNLX0RBVEFfXywge1xuICAgICAgICBpZ25vcmVTZWFyY2g6ICEwXG4gICAgfSkgOiBSZXNwb25zZS5lcnJvcigpO1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@ducanh2912/next-pwa/dist/fallback.js\n"));
/***/ })
/******/ });
/************************************************************************/
/******/ // The require scope
/******/ var __webpack_require__ = {};
/******/
/************************************************************************/
/******/ /* webpack/runtime/make namespace object */
/******/ !function() {
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/ }();
/******/
/******/ /* webpack/runtime/trusted types policy */
/******/ !function() {
/******/ var policy;
/******/ __webpack_require__.tt = function() {
/******/ // Create Trusted Type policy if Trusted Types are available and the policy doesn't exist yet.
/******/ if (policy === undefined) {
/******/ policy = {
/******/ createScript: function(script) { return script; }
/******/ };
/******/ if (typeof trustedTypes !== "undefined" && trustedTypes.createPolicy) {
/******/ policy = trustedTypes.createPolicy("nextjs#bundler", policy);
/******/ }
/******/ }
/******/ return policy;
/******/ };
/******/ }();
/******/
/******/ /* webpack/runtime/trusted types script */
/******/ !function() {
/******/ __webpack_require__.ts = function(script) { return __webpack_require__.tt().createScript(script); };
/******/ }();
/******/
/******/ /* webpack/runtime/react refresh */
/******/ !function() {
/******/ if (__webpack_require__.i) {
/******/ __webpack_require__.i.push(function(options) {
/******/ var originalFactory = options.factory;
/******/ options.factory = function(moduleObject, moduleExports, webpackRequire) {
/******/ var hasRefresh = typeof self !== "undefined" && !!self.$RefreshInterceptModuleExecution$;
/******/ var cleanup = hasRefresh ? self.$RefreshInterceptModuleExecution$(moduleObject.id) : function() {};
/******/ try {
/******/ originalFactory.call(this, moduleObject, moduleExports, webpackRequire);
/******/ } finally {
/******/ cleanup();
/******/ }
/******/ }
/******/ })
/******/ }
/******/ }();
/******/
/******/ /* webpack/runtime/compat */
/******/
/******/
/******/ // noop fns to prevent runtime errors during initialization
/******/ if (typeof self !== "undefined") {
/******/ self.$RefreshReg$ = function () {};
/******/ self.$RefreshSig$ = function () {
/******/ return function (type) {
/******/ return type;
/******/ };
/******/ };
/******/ }
/******/
/************************************************************************/
/******/
/******/ // startup
/******/ // Load entry module and return exports
/******/ // This entry module can't be inlined because the eval-source-map devtool is used.
/******/ var __webpack_exports__ = {};
/******/ __webpack_modules__["./node_modules/@ducanh2912/next-pwa/dist/fallback.js"](0, __webpack_exports__, __webpack_require__);
/******/
/******/ })()
;

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 926 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
self.onmessage=async e=>{switch(e.data.type){case"__START_URL_CACHE__":{let t=e.data.url,a=await fetch(t);if(!a.redirected)return(await caches.open("start-url")).put(t,a);return Promise.resolve()}case"__FRONTEND_NAV_CACHE__":{let t=e.data.url,a=await caches.open("pages");if(await a.match(t,{ignoreSearch:!0}))return;let s=await fetch(t);if(!s.ok)return;if(a.put(t,s.clone()),e.data.shouldCacheAggressively&&s.headers.get("Content-Type")?.includes("text/html"))try{let e=await s.text(),t=[],a=await caches.open("static-style-assets"),r=await caches.open("next-static-js-assets"),c=await caches.open("static-js-assets");for(let[s,r]of e.matchAll(/<link.*?href=['"](.*?)['"].*?>/g))/rel=['"]stylesheet['"]/.test(s)&&t.push(a.match(r).then(e=>e?Promise.resolve():a.add(r)));for(let[,a]of e.matchAll(/<script.*?src=['"](.*?)['"].*?>/g)){let e=/\/_next\/static.+\.js$/i.test(a)?r:c;t.push(e.match(a).then(t=>t?Promise.resolve():e.add(a)))}return await Promise.all(t)}catch{}return Promise.resolve()}default:return Promise.resolve()}};

View File

@ -1,102 +0,0 @@
/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
/******/ (function() { // webpackBootstrap
/******/ "use strict";
/******/ var __webpack_modules__ = ({
/***/ "./node_modules/@ducanh2912/next-pwa/dist/sw-entry-worker.js":
/*!*******************************************************************!*\
!*** ./node_modules/@ducanh2912/next-pwa/dist/sw-entry-worker.js ***!
\*******************************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\nself.onmessage = async (e)=>{\n switch(e.data.type){\n case \"__START_URL_CACHE__\":\n {\n let t = e.data.url, a = await fetch(t);\n if (!a.redirected) return (await caches.open(\"start-url\")).put(t, a);\n return Promise.resolve();\n }\n case \"__FRONTEND_NAV_CACHE__\":\n {\n let t = e.data.url, a = await caches.open(\"pages\");\n if (await a.match(t, {\n ignoreSearch: !0\n })) return;\n let s = await fetch(t);\n if (!s.ok) return;\n if (a.put(t, s.clone()), e.data.shouldCacheAggressively && s.headers.get(\"Content-Type\")?.includes(\"text/html\")) try {\n let e = await s.text(), t = [], a = await caches.open(\"static-style-assets\"), r = await caches.open(\"next-static-js-assets\"), c = await caches.open(\"static-js-assets\");\n for (let [s, r] of e.matchAll(/<link.*?href=['\"](.*?)['\"].*?>/g))/rel=['\"]stylesheet['\"]/.test(s) && t.push(a.match(r).then((e)=>e ? Promise.resolve() : a.add(r)));\n for (let [, a] of e.matchAll(/<script.*?src=['\"](.*?)['\"].*?>/g)){\n let e = /\\/_next\\/static.+\\.js$/i.test(a) ? r : c;\n t.push(e.match(a).then((t)=>t ? Promise.resolve() : e.add(a)));\n }\n return await Promise.all(t);\n } catch {}\n return Promise.resolve();\n }\n default:\n return Promise.resolve();\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGR1Y2FuaDI5MTIvbmV4dC1wd2EvZGlzdC9zdy1lbnRyeS13b3JrZXIuanMiLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQGR1Y2FuaDI5MTIvbmV4dC1wd2EvZGlzdC9zdy1lbnRyeS13b3JrZXIuanM/NmM4NCJdLCJzb3VyY2VzQ29udGVudCI6WyJzZWxmLm9ubWVzc2FnZSA9IGFzeW5jIChlKT0+e1xuICAgIHN3aXRjaChlLmRhdGEudHlwZSl7XG4gICAgICAgIGNhc2UgXCJfX1NUQVJUX1VSTF9DQUNIRV9fXCI6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBlLmRhdGEudXJsLCBhID0gYXdhaXQgZmV0Y2godCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhLnJlZGlyZWN0ZWQpIHJldHVybiAoYXdhaXQgY2FjaGVzLm9wZW4oXCJzdGFydC11cmxcIikpLnB1dCh0LCBhKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJfX0ZST05URU5EX05BVl9DQUNIRV9fXCI6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBlLmRhdGEudXJsLCBhID0gYXdhaXQgY2FjaGVzLm9wZW4oXCJwYWdlc1wiKTtcbiAgICAgICAgICAgICAgICBpZiAoYXdhaXQgYS5tYXRjaCh0LCB7XG4gICAgICAgICAgICAgICAgICAgIGlnbm9yZVNlYXJjaDogITBcbiAgICAgICAgICAgICAgICB9KSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGxldCBzID0gYXdhaXQgZmV0Y2godCk7XG4gICAgICAgICAgICAgICAgaWYgKCFzLm9rKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKGEucHV0KHQsIHMuY2xvbmUoKSksIGUuZGF0YS5zaG91bGRDYWNoZUFnZ3Jlc3NpdmVseSAmJiBzLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpPy5pbmNsdWRlcyhcInRleHQvaHRtbFwiKSkgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSBhd2FpdCBzLnRleHQoKSwgdCA9IFtdLCBhID0gYXdhaXQgY2FjaGVzLm9wZW4oXCJzdGF0aWMtc3R5bGUtYXNzZXRzXCIpLCByID0gYXdhaXQgY2FjaGVzLm9wZW4oXCJuZXh0LXN0YXRpYy1qcy1hc3NldHNcIiksIGMgPSBhd2FpdCBjYWNoZXMub3BlbihcInN0YXRpYy1qcy1hc3NldHNcIik7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IFtzLCByXSBvZiBlLm1hdGNoQWxsKC88bGluay4qP2hyZWY9WydcIl0oLio/KVsnXCJdLio/Pi9nKSkvcmVsPVsnXCJdc3R5bGVzaGVldFsnXCJdLy50ZXN0KHMpICYmIHQucHVzaChhLm1hdGNoKHIpLnRoZW4oKGUpPT5lID8gUHJvbWlzZS5yZXNvbHZlKCkgOiBhLmFkZChyKSkpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBbLCBhXSBvZiBlLm1hdGNoQWxsKC88c2NyaXB0Lio/c3JjPVsnXCJdKC4qPylbJ1wiXS4qPz4vZykpe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSAvXFwvX25leHRcXC9zdGF0aWMuK1xcLmpzJC9pLnRlc3QoYSkgPyByIDogYztcbiAgICAgICAgICAgICAgICAgICAgICAgIHQucHVzaChlLm1hdGNoKGEpLnRoZW4oKHQpPT50ID8gUHJvbWlzZS5yZXNvbHZlKCkgOiBlLmFkZChhKSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbCh0KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoICB7fVxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@ducanh2912/next-pwa/dist/sw-entry-worker.js\n"));
/***/ })
/******/ });
/************************************************************************/
/******/ // The require scope
/******/ var __webpack_require__ = {};
/******/
/************************************************************************/
/******/ /* webpack/runtime/make namespace object */
/******/ !function() {
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/ }();
/******/
/******/ /* webpack/runtime/trusted types policy */
/******/ !function() {
/******/ var policy;
/******/ __webpack_require__.tt = function() {
/******/ // Create Trusted Type policy if Trusted Types are available and the policy doesn't exist yet.
/******/ if (policy === undefined) {
/******/ policy = {
/******/ createScript: function(script) { return script; }
/******/ };
/******/ if (typeof trustedTypes !== "undefined" && trustedTypes.createPolicy) {
/******/ policy = trustedTypes.createPolicy("nextjs#bundler", policy);
/******/ }
/******/ }
/******/ return policy;
/******/ };
/******/ }();
/******/
/******/ /* webpack/runtime/trusted types script */
/******/ !function() {
/******/ __webpack_require__.ts = function(script) { return __webpack_require__.tt().createScript(script); };
/******/ }();
/******/
/******/ /* webpack/runtime/react refresh */
/******/ !function() {
/******/ if (__webpack_require__.i) {
/******/ __webpack_require__.i.push(function(options) {
/******/ var originalFactory = options.factory;
/******/ options.factory = function(moduleObject, moduleExports, webpackRequire) {
/******/ var hasRefresh = typeof self !== "undefined" && !!self.$RefreshInterceptModuleExecution$;
/******/ var cleanup = hasRefresh ? self.$RefreshInterceptModuleExecution$(moduleObject.id) : function() {};
/******/ try {
/******/ originalFactory.call(this, moduleObject, moduleExports, webpackRequire);
/******/ } finally {
/******/ cleanup();
/******/ }
/******/ }
/******/ })
/******/ }
/******/ }();
/******/
/******/ /* webpack/runtime/compat */
/******/
/******/
/******/ // noop fns to prevent runtime errors during initialization
/******/ if (typeof self !== "undefined") {
/******/ self.$RefreshReg$ = function () {};
/******/ self.$RefreshSig$ = function () {
/******/ return function (type) {
/******/ return type;
/******/ };
/******/ };
/******/ }
/******/
/************************************************************************/
/******/
/******/ // startup
/******/ // Load entry module and return exports
/******/ // This entry module can't be inlined because the eval-source-map devtool is used.
/******/ var __webpack_exports__ = {};
/******/ __webpack_modules__["./node_modules/@ducanh2912/next-pwa/dist/sw-entry-worker.js"](0, __webpack_exports__, __webpack_require__);
/******/
/******/ })()
;

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -7,7 +7,6 @@ import AppContext from "@ctx/AppContext";
import Chapar from "plugins/Chapar"; import Chapar from "plugins/Chapar";
import { toast } from "react-toastify"; import { toast } from "react-toastify";
import Avatar from "boring-avatars"; import Avatar from "boring-avatars";
import PersianNumber from "../../../plugins/PersianNumber";
import moment from "jalali-moment"; import moment from "jalali-moment";
import InfiniteScroll from "react-infinite-scroll-component"; import InfiniteScroll from "react-infinite-scroll-component";

View File

@ -8,6 +8,9 @@ import {
Navbar, Navbar,
} from "@comp/landingComponents"; } from "@comp/landingComponents";
import Footer from "@comp/landingComponents/Footer/page"; import Footer from "@comp/landingComponents/Footer/page";
import Phi from "@comp/landingComponents/Phi";
import StepProduct from "@comp/landingComponents/StepProduct";
import StressTest from "@comp/landingComponents/StressTest";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
export default function Home() { export default function Home() {
@ -23,10 +26,13 @@ export default function Home() {
<Navbar /> <Navbar />
<Hero /> <Hero />
</div> </div>
<About /> {/* <About /> */}
<StressTest />
<Experience /> <Experience />
<Feedbacks /> {/* <Feedbacks /> */}
<Phi />
<StepProduct/>
<Footer /> <Footer />
</div> </div>

BIN
src/assets/app.png 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 358 KiB

BIN
src/assets/phi1.png 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

BIN
src/assets/phi2.png 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

BIN
src/assets/phi3.png 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

View File

@ -7,16 +7,16 @@ export const navLinks = [
{ {
id: "product", id: "product",
title: "product", title: "product",
go: false,
},
{
id: "pricing",
title: "pricing",
go: true, go: true,
}, },
{ {
id: "Pricing", id: "about-us",
title: "Pricing", title: "about us",
go: true,
},
{
id: "contact-us",
title: "contact us",
go: true, go: true,
}, },
]; ];
@ -38,52 +38,34 @@ const services = [
const experiences = [ const experiences = [
{ {
title: "setup routine Modes", title: "Insert tasks and assign",
date: "step 1", date: "Insert tasks ",
points: ["Insert tasks and assign them to positions in the store"],
},
{
title: "Create a clear shift plan",
date: "clear shift plan ",
points: [ points: [
"Begin your journey with Briz by customizing Collection Routines to suit your unique business needs. Whether it's for the bustling holiday season, a reflective Ramadan, or your standard daily operations, simply activate the desired mode. Save various modes to maintain a recorded task list for each routine, ensuring a streamlined and efficient approach to every aspect of your business.", "Create a clear shift plan for each week and assign a supervisor to each shift.",
], ],
}, },
{ {
title: "setup each section", title: "activity assigned to a specific person",
date: "step 2", date: "specific ",
points: [ points: [
"Continue shaping your unique coffee shop experience by defining each distinct area within your establishment with Briz. Set up sections like the bar, kitchen, and seating area in our system. This process not only helps in organizing physical spaces but also assists in assigning tasks, managing resources, and streamlining operations for each specific zone.", "After shift planning, each task becomes an activity assigned to a specific person.",
], ],
}, },
{ {
title: "setup stuff positions", title: "real time ",
date: "step 3", date: "Track in system",
points: [ points: ["Track the operation routine in the system in real time."],
"Define roles such as Barista, Waiter, Cashier, and more within our system to clarify responsibilities and streamline workflow. This organization allows you to manage schedules, assign tasks, and track performance more effectively. Empower your staff with clear definitions and watch as your service flourishes with precision and care.",
],
}, },
{ {
title: "define staff ", title: "confirms completion",
date: "step 4", date: "completion ",
points: [ points: [
"Define your team in the app by entering each staff member's name, contact number, and specific access levels.", "After closing the shift, your supervisor checks all the tasks, confirms completion, and rates the staff.",
],
},
{
title: "setup shift forms",
date: "step 5",
points: [
"establish and manage shift patterns to ensure your coffee shop operates smoothly around the clock. Whether it's the early birds in the morning shift, the rush-hour warriors of the afternoon, or the night owls keeping the evening vibe alive, our system allows you to customize and control shift timings. Define morning, afternoon, and night shifts, or any other custom intervals that fit your unique business rhythm. By organizing and adapting shift schedules, you'll maintain a consistent, quality service any time of day, all while keeping your team well-rested and ready to excel.",
],
},
{
title: "insert tasks ",
date: "step 6",
points: [
"Progress further with Briz by inserting and customizing tasks that keep your coffee shop humming. Whether they are daily grind duties, weekly deep cleans, or special event preparations, our system allows you to define tasks as daily, weekly, or on a custom schedule. Assign these tasks to positions rather than individuals, such as assigning cleaning duties to the closing Barista or inventory checks to the morning Manager. This method ensures that responsibilities are clear and consistent, regardless of personnel changes. Once you've planned your shifts for each week, each staff member assigned to a position will automatically inherit the tasks associated with it, ensuring a smooth operation and an evenly distributed workload.",
],
},
{
title: "Weekly Shift Planning",
date: "step 7",
points: [
"Each week, take the time to strategically assign staff to their specific positions for each day, considering their strengths, preferences, and the needs of your coffee shop. As you place each staff member in their role, they are automatically assigned the tasks linked to their position for that shift.",
], ],
}, },
]; ];
@ -91,22 +73,55 @@ const experiences = [
const testimonials = [ const testimonials = [
{ {
testimonial: testimonial:
"Comprehensive Oversight: A Panoramic View for Owners and Supervisors", " This refers to the precise amount of ground coffee used for each brew. Adjusting the BCG ensures consistency in the flavor profile and strength of the coffee, playing a key role in achieving the perfect cup.",
title: "holistic view ", title: "Basic Coffee Gram (BCG) ",
}, },
{ {
testimonial: testimonial:
"Strategic Shift Scheduling: Mastering the Art of Staff Allocation", "This measures the final weight of the extracted coffee after brewing. OEG helps monitor the efficiency of the brewing process and determines the yield of the coffee, crucial for maintaining the desired taste and texture.",
title: "Weekly Shift Planning", title: "Output Extract Grammage (OEG)",
}, },
{ {
testimonial: "Performance Insights: Supervisor-Driven Staff Ratings", testimonial:
title: "rating by supervisor", "This is the total time taken to brew the coffee from start to finish. The ET influences the balance of flavors in the coffee, as shorter times can result in under-extracted coffee while longer times may lead to over-extraction, both impacting the final taste.",
}, title: " Extraction Time (ET)",
{
testimonial: "Validation Excellence: Supervisor Task Confirmation",
title: "verify by supervisor ",
}, },
]; ];
export { services, experiences, testimonials }; const stepProducts = [
{
des: "You can fully customize and define your operation system. In the first step, set up your routines. Each system can have different settings for specific times of the year.",
title: "setup your routine ",
img: "1",
},
{
des: "Define your sections to gain better insights into your operations. You can create unlimited sections.",
title: "setup your sections",
img: "2",
},
{
des: "Positions play a crucial role in our platform. Tasks are assigned to positions, so please add and manage them carefully",
title: " setup your positions",
img: "3",
},
{
des: "You need to set up your staff information. They will log in when they enter your complex.",
title: " setup staff information",
img: "4",
},
{
des: "You need to establish your shift logic, defining start and end times for each day of the week.",
title: " setup your shifts logic",
img: "5",
},
{
des: "Set up all your tasks at this stage, assigning them to shifts and positions. Ensure their reproducibility in three modes: daily tasks, weekly tasks on specific days, and monthly tasks on particular days.",
title: "insert all of your tasks",
img: "6",
},
];
export { services, experiences, testimonials, stepProducts };

View File

@ -539,3 +539,7 @@ body {
transparent transparent
); );
} }
.vertical-timeline.vertical-timeline--two-columns:before {
opacity: 0.1; /* Set the opacity to 0.5 */
}