reza added (Delivery mothods && QR)

temp
Reza_ashrafi 3 years ago
parent fb80e688ab
commit 7e551c5a50
  1. 1
      package.json
  2. 13
      src/assets/icons/express.svg
  3. 8
      src/assets/icons/pishtaz.svg
  4. 3
      src/assets/images/laptop.svg
  5. 6
      src/components/Input/index.js
  6. 13
      src/components/Radio/index.js
  7. 58
      src/components/Radio/index.scss
  8. 2
      src/redux/reducers/public.js
  9. 59
      src/router.js
  10. 61
      src/views/DeliveryForm/Address/index.js
  11. 36
      src/views/DeliveryForm/PaymentMethod/index.js
  12. 53
      src/views/DeliveryForm/TransportDate/index.js
  13. 62
      src/views/DeliveryForm/TransportMethod/index.js
  14. 140
      src/views/DeliveryForm/index.js
  15. 18
      src/views/QR/Content/index.js
  16. 67
      src/views/QR/Scan/index.js
  17. 19
      src/views/QR/index.js
  18. 2
      src/views/ShoppingCart/index.js
  19. 21
      src/views/Videos/index.js
  20. 19
      tailwind.config.js
  21. 34
      yarn.lock

@ -16,6 +16,7 @@
"react": "^17.0.2", "react": "^17.0.2",
"react-dom": "^17.0.2", "react-dom": "^17.0.2",
"react-modern-drawer": "^1.0.1", "react-modern-drawer": "^1.0.1",
"react-qr-reader": "^2.2.1",
"react-redux": "^7.2.6", "react-redux": "^7.2.6",
"react-router-dom": "^6.0.2", "react-router-dom": "^6.0.2",
"react-scripts": "4.0.3", "react-scripts": "4.0.3",

@ -0,0 +1,13 @@
<svg id="vuesax_linear_group" data-name="vuesax/linear/group" xmlns="http://www.w3.org/2000/svg" width="38.684" height="38.684" viewBox="0 0 38.684 38.684">
<g id="group">
<path id="Vector" d="M15.3,19.342h1.612a3.233,3.233,0,0,0,3.224-3.224V0H5.625A6.441,6.441,0,0,0,0,3.3" transform="translate(4.046 3.224)" fill="none" stroke="#196ec0" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"/>
<path id="Vector-2" data-name="Vector" d="M0,19.342a4.829,4.829,0,0,0,4.835,4.835H6.447a3.224,3.224,0,0,1,6.447,0h6.447a3.224,3.224,0,0,1,6.447,0H27.4a4.829,4.829,0,0,0,4.835-4.835V14.506H27.4a1.617,1.617,0,0,1-1.612-1.612V8.059A1.617,1.617,0,0,1,27.4,6.447H29.48L26.724,1.628A3.25,3.25,0,0,0,23.919,0H20.954V11.283a3.233,3.233,0,0,1-3.224,3.224H16.118" transform="translate(3.224 8.059)" fill="none" stroke="#196ec0" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"/>
<path id="Vector-3" data-name="Vector" d="M6.447,3.224A3.224,3.224,0,1,1,3.224,0,3.224,3.224,0,0,1,6.447,3.224Z" transform="translate(9.671 29.013)" fill="none" stroke="#196ec0" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"/>
<path id="Vector-4" data-name="Vector" d="M6.447,3.224A3.224,3.224,0,1,1,3.224,0,3.224,3.224,0,0,1,6.447,3.224Z" transform="translate(22.565 29.013)" fill="none" stroke="#196ec0" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"/>
<path id="Vector-5" data-name="Vector" d="M6.447,4.835V8.059H1.612A1.617,1.617,0,0,1,0,6.447V1.612A1.617,1.617,0,0,1,1.612,0H3.691Z" transform="translate(29.013 14.506)" fill="none" stroke="#196ec0" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"/>
<path id="Vector-6" data-name="Vector" d="M0,0H9.671" transform="translate(3.224 12.895)" fill="none" stroke="#196ec0" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"/>
<path id="Vector-7" data-name="Vector" d="M0,0H6.447" transform="translate(3.224 17.73)" fill="none" stroke="#196ec0" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"/>
<path id="Vector-8" data-name="Vector" d="M0,0H3.224" transform="translate(3.224 22.565)" fill="none" stroke="#196ec0" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"/>
<path id="Vector-9" data-name="Vector" d="M0,0H38.684V38.684H0Z" fill="none" opacity="0"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 78 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 309 KiB

@ -47,14 +47,14 @@ export default function Input(props) {
return ( return (
<div <div
className={_.join( className={_.join(
["input flex flex-col relative my-2", langDetector(lang, "fa", "en")], ["input flex flex-col relative my-2 dark:bg-opacity-10", langDetector(lang, "fa", "en")],
" " " "
)} )}
> >
<label <label
className={_.join( className={_.join(
[ [
"absolute top-1/2 transform -translate-y-1/2 text-gray-500 bg-white px-2 text-xs transition-all duration-300", "absolute top-1/2 transform -translate-y-1/2 text-gray-500 dark:text-white px-2 text-xs transition-all duration-300",
langDetector(lang, "right-2", "left-2"), langDetector(lang, "right-2", "left-2"),
inputStatusHandler( inputStatusHandler(
value, value,
@ -76,7 +76,7 @@ export default function Input(props) {
inputMode={inputMode} inputMode={inputMode}
className={_.join( className={_.join(
[ [
`flex-1 border border-gray-400 rounded-md outline-none py-3 px-4 text-sm ${align}`, `flex-1 border border-gray-400 dark:bg-opacity-10 bg-transparent rounded-md outline-none py-3 px-4 text-sm ${align}`,
inputStatusHandler( inputStatusHandler(
value, value,
focusToggle, focusToggle,

@ -0,0 +1,13 @@
import React from "react";
import "./index.scss";
export default function Radio(props) {
return (
<div className="radio flex items-center">
<input id="radio-1" name={props.name} type="radio" />
<label htmlFor="radio-1" className="radio-label text-xs">
{/* {props.label} */}
</label>
</div>
);
}

@ -0,0 +1,58 @@
$color1: #f4f4f4;
$color2: #3197EE;
.radio {
input[type="radio"] {
position: absolute;
opacity: 0;
+ .radio-label {
&:before {
content: '';
background: $color1;
border-radius: 100%;
border: 1px solid darken($color1, 25%);
display: inline-block;
width: 1.4em;
height: 1.4em;
position: relative;
vertical-align: top;
margin-left: 0.5em;
cursor: pointer;
text-align: center;
transition: all 250ms ease;
}
}
&:checked {
+ .radio-label {
&:before {
background-color: $color2;
box-shadow: inset 0 0 0 4px $color1;
}
}
}
&:focus {
+ .radio-label {
&:before {
outline: none;
border-color: $color2;
}
}
}
&:disabled {
+ .radio-label {
&:before {
box-shadow: inset 0 0 0 4px $color1;
border-color: darken($color1, 25%);
background: darken($color1, 25%);
}
}
}
+ .radio-label {
&:empty {
&:before {
margin-right: 0;
}
}
}
}
}

@ -1,7 +1,7 @@
import location from "../../utils/location"; import location from "../../utils/location";
const initialState = { const initialState = {
isDark: localStorage.getItem("isDark") || true, isDark: localStorage.getItem("isDark") || false,
homeData: [], homeData: [],
newProducts: [], newProducts: [],
levels: [], levels: [],

@ -11,6 +11,9 @@ import Auth from "./views/Auth";
import Products from "./views/Products"; import Products from "./views/Products";
import Product from "./views/Product"; import Product from "./views/Product";
import ShoppingCart from "./views/ShoppingCart"; import ShoppingCart from "./views/ShoppingCart";
import DeliveryForm from "./views/DeliveryForm";
import Videos from "./views/Videos";
import QR from "./views/QR";
// import VideoTube from "./views/Home/VideoTube"; // import VideoTube from "./views/Home/VideoTube";
function Router({ isDark, isLogin, headerOptions }) { function Router({ isDark, isLogin, headerOptions }) {
@ -73,6 +76,23 @@ function Router({ isDark, isLogin, headerOptions }) {
exact exact
element={<Products headerOptions={{ shown: false }} />} element={<Products headerOptions={{ shown: false }} />}
/> />
<Route
path="/products/:id"
exact
element={
<Product
headerOptions={{
shown: true,
logo: false,
hamburgerMenu: false,
title: false,
back: true,
menu: true,
bookmark: true,
}}
/>
}
/>
<Route <Route
path="/cart" path="/cart"
exact exact
@ -87,22 +107,47 @@ function Router({ isDark, isLogin, headerOptions }) {
} }
/> />
<Route <Route
path="/products/:id" path="/cart/delivery-form"
exact exact
element={ element={
<Product <DeliveryForm
headerOptions={{ headerOptions={{
shown: true, shown: true,
logo: false, title: "سبد خرید",
hamburgerMenu: false,
title: false,
back: true, back: true,
menu: true,
bookmark: true,
}} }}
/> />
} }
/> />
<Route
path="/videos"
exact
element={
<Videos
headerOptions={{
logo: true,
hamburgerMenu: true,
qr: true,
title: false,
back: false,
shown: true,
menu: false,
}}
/>
}
/>
<Route
path="/scan"
exact
element={
<QR
headerOptions={{
shown : 'false'
}}
page="scan"
/>
}
/>
<Route <Route
path="*" path="*"
element={ element={

@ -0,0 +1,61 @@
import React, { useState } from "react";
import { connect } from "react-redux";
import Button from "../../../components/Button";
import Radio from "../../../components/Radio";
function Address({ addresses, isDark }) {
const [activeAddress, setActiveAddress] = useState(addresses[0]);
const Location = ({ address }) => {
return (
<button
className={`flex flex-row border-2 border-solid items-center w-full px-3 py-4 rounded-md mt-4 transition-all duration-500 dark:bg-opacity-5 ${
activeAddress === address
? "bg-blueFD border-blueC0"
: "bg-grayF9 border-gray45"
}`}
>
<Radio />
<div className="flex flex-1 flex-col mr-3">
<li className="text-right text-xs text-blue52 dark:text-white leading-4">
آدرس:&nbsp;{address.address}
</li>
<li className="text-right text-xs text-blue52 dark:text-white mt-1.5">
نام تحویل گیرنده:&nbsp;{address.receiver}
</li>
<li className="text-right text-xs text-blue52 dark:text-white mt-1.5">
کد پستی:&nbsp;{address.postalCode}
</li>
<li className="text-right text-xs text-blue52 dark:text-white mt-1.5">
شماره تماس:&nbsp;{address.cellphone}
</li>
</div>
</button>
);
};
return (
<section className="mt-2">
<strong className="font-medium dark:text-white">انتخاب آدرس</strong>
<ul className="list-none p-0 m-0 flex flex-col">
{addresses.map((address, index) => (
<Location address={address} key={index} />
))}
</ul>
<div className="w-full flex flex-row justify-between items-center mt-4">
<Button
title="یک آدرس جدید اضافه کنید +"
backgroundColor="bg-grayF9 dark:bg-blueC0 dark:bg-opacity-30"
border={{ color: isDark ? '#DBDBDB22' : "#DBDBDB", width: "1px" }}
bgOpacity="bg-opacity-100"
width="100%"
color={isDark ? "text-white" : "text-gray70"}
/>
</div>
</section>
);
}
const mapStateToProps = (state) => ({
isDark: state.publicApi.isDark,
});
export default connect(mapStateToProps)(Address);

@ -0,0 +1,36 @@
import React, { useState } from "react";
import { connect } from "react-redux";
function PaymentMethods({ paymentMethods, isDark }) {
const [activeMethod, setActiveMactiveMethod] = useState(paymentMethods[0]);
const Method = ({ method }) => {
return (
<button
className={`flex flex-col border border-solid items-center w-full px-2.5 py-3.5 rounded-md mt-4 relative transition-all duration-500 dark:text-white ${
activeMethod === method
? "bg-blueFD border-blueC0 text-blueC0 bg-opacity-5"
: "bg-grayF9 border-grayDB text-gray70 bg-opacity-5"
}`}
onClick={() => setActiveMactiveMethod(method)}
>
{method.name}
</button>
);
};
return (
<section className="mt-8">
<strong className="font-medium dark:text-white">انتخاب شیوه پرداخت</strong>
<ul className="list-none p-0 m-0 flex flex-row justify-between flex-wrap">
{paymentMethods.map((method, index) => (
<Method method={method} key={index} />
))}
</ul>
</section>
);
}
const mapStateToProps = (state) => ({
isDark: state.publicApi.isDark,
});
export default connect(mapStateToProps)(PaymentMethods);

@ -0,0 +1,53 @@
import React, { useState } from "react";
import { connect } from "react-redux";
import Button from "../../../components/Button";
import Radio from "../../../components/Radio";
function TransportDate({ transportDate, isDark }) {
const [activeDate, setActiveDate] = useState(transportDate?.times[0]);
const Time = ({ time }) => {
return (
<button
className={`flex flex-col border border-solid items-center flex-1 mx-1 px-2 py-3 rounded-md mt-4 relative transition-all duration-500 ${
activeDate === time
? "bg-blueFD border-blueC0 dark:bg-opacity-5"
: "bg-grayF9 border-grayDB dark:bg-opacity-5"
}`}
onClick={() => setActiveDate(time)}
>
<strong
className={`text-sm transition-all duration-500 dark:text-white ${
activeDate === time ? "text-blueC0" : "text-blue52"
}`}
>
{time.time}
</strong>
{time.status === "completed" && (
<span
className={`text-xs transition-all duration-500 dark:text-white ${
activeDate === time ? "text-blueC0" : "text-blue52"
}`}
>
تکمیل ظرفیت
</span>
)}
</button>
);
};
return (
<section className="mt-8">
<strong className="font-medium dark:text-white">زمان ارسال را انتخاب کنید</strong>
<ul className="list-none p-0 m-0 flex flex-row justify-between flex-wrap">
{transportDate.times.map((time, index) => (
<Time time={time} key={index} />
))}
</ul>
</section>
);
}
const mapStateToProps = (state) => ({
isDark: state.publicApi.isDark,
});
export default connect(mapStateToProps)(TransportDate);

@ -0,0 +1,62 @@
import React, { useState } from "react";
import { connect } from "react-redux";
import Button from "../../../components/Button";
import Radio from "../../../components/Radio";
function TransportMethod({ transportMethods, isDark }) {
const [activeMethod, setActiveMethod] = useState(transportMethods[0]);
const Method = ({ method }) => {
return (
<button
className={`flex flex-col border border-solid items-center w-full px-2 py-3 rounded-md mt-4 relative transition-all duration-500 ${
activeMethod === method
? "bg-blueFD border-blueC0 dark:bg-opacity-5"
: "bg-grayF9 border-grayDB dark:bg-opacity-5"
}`}
onClick={() => setActiveMethod(method)}
>
<strong
className={`text-sm transition-all duration-500 ${
activeMethod === method
? "text-blueC0 dark:text-white"
: "text-blue52 dark:text-white"
}`}
>
{method.name}
</strong>
<span
className={`text-xs transition-all duration-500 ${
activeMethod === method
? "text-blueC0 dark:text-white"
: "text-blue52 dark:text-white"
}`}
>
هزینه ارسال &nbsp; {method.cost}
</span>
<img
src={method.icon}
alt={method.name}
className="w-7 absolute left-3 top-1/2 transform -translate-y-1/2"
/>
</button>
);
};
return (
<section className="mt-8">
<strong className="font-medium dark:text-white">
لطفا یک روش ارسال انتخاب کنید
</strong>
<ul className="list-none p-0 m-0 flex flex-col">
{transportMethods.map((method, index) => (
<Method method={method} key={index} />
))}
</ul>
</section>
);
}
const mapStateToProps = (state) => ({
isDark: state.publicApi.isDark,
});
export default connect(mapStateToProps)(TransportMethod);

@ -0,0 +1,140 @@
import React, { useEffect } from "react";
import { connect } from "react-redux";
import { publicApi, userFactor } from "../../redux/actions";
import Address from "./Address";
import TransportMethod from "./TransportMethod";
import TransportDate from "./TransportDate";
import PaymentMethods from "./PaymentMethod";
//assets
import ExpressIcon from "../../assets/icons/express.svg";
import PishtazIcon from "../../assets/icons/pishtaz.svg";
const PriceStatus = ({ name, value, type, isDark }) => {
return (
<div className="w-full flex flex-row justify-between py-2">
<strong className="font-light text-sm dark:text-white">{name}</strong>
<span
className="font-bold text-sm dark:text-white"
style={{
color: !isDark ? (type === "error" ? "#F1420D" : "#246E8A") : "",
}}
>
{value + " " + "تومان"}
</span>
</div>
);
};
export const DeliveryForm = ({
setHeaderOptions,
headerOptions,
form,
factorInfo,
getFactorInfo,
userId,
isDark,
}) => {
useEffect(() => {
setHeaderOptions(headerOptions);
getFactorInfo({ userId });
setHeaderOptions(headerOptions);
}, []);
return (
<div className="w-full flex flex-col px-4 pb-10">
<Address addresses={form.addresses} />
<TransportMethod transportMethods={form.transportMethods} />
<TransportDate transportDate={form.transportDate} />
<div className="flex flex-col w-full border-t py-2 border-gray-300 border-b mt-6">
<PriceStatus
name="مبلغ سبد خرید"
value={factorInfo?.sumPrice}
type="normal"
isDark={isDark}
/>
<PriceStatus
name="هزینه ارسال"
value={factorInfo?.transportPrice}
type="normal"
isDark={isDark}
/>
<PriceStatus
name="میزان تخفیف"
value={factorInfo?.offPrice}
type="error"
isDark={isDark}
/>
<PriceStatus
name="مالیات بر ارزش افزوده"
value={factorInfo?.sumPrice * 0.009}
type="error"
isDark={isDark}
/>
</div>
<PaymentMethods paymentMethods={form.paymentMethods} />
</div>
);
};
const mapStateToProps = (state) => ({
factorInfo: state.userFactor.info,
userId: state.user.status.id,
isDark: state.publicApi.isDark,
});
const mapDispatchToProps = {
setHeaderOptions: publicApi.setHeaderOptions,
getFactorInfo: userFactor.info,
};
export default connect(mapStateToProps, mapDispatchToProps)(DeliveryForm);
DeliveryForm.defaultProps = {
form: {
addresses: [
{
address:
" تهران میدان احمد آباد خیابان شریعتی بعد از میدان فجر بن بست شکوفه پلاک 4 زنگ 12",
receiver: "احمد نام آور",
postalCode: "54352432",
cellphone: "09123456789",
},
],
transportMethods: [
{
name: "ارسال اکسپرس مخصوص شهر تهران",
cost: "25.000",
icon: ExpressIcon,
},
{
name: "ارسال با پست پیشتاز",
cost: "25.000",
icon: PishtazIcon,
},
],
transportDate: {
day: new Date(),
times: [
{
time: "ساعت 9 تا 12",
status: "completed",
},
{
time: "ساعت 12 تا 15",
status: "free",
},
{
time: "ساعت 15 تا 18",
status: "free",
},
],
},
paymentMethods: [
{
name: "پرداخت آنلاین با کلیه کارتهای عضو شبکه شتاب",
},
{
name: "پرداخت در محل",
},
],
},
};

@ -0,0 +1,18 @@
import React, { useEffect } from "react";
import { connect } from "react-redux";
import { publicApi } from "../../../redux/actions";
export const Content = ({ headerOptions, setHeaderOptions, setPage }) => {
useEffect(() => {
setHeaderOptions(headerOptions);
});
return <div></div>;
};
const mapStateToProps = (state) => ({});
const mapDispatchToProps = {
setHeaderOptions: publicApi.setHeaderOptions,
};
export default connect(mapStateToProps, mapDispatchToProps)(Content);

@ -0,0 +1,67 @@
import React, { useState, useEffect } from "react";
import { connect } from "react-redux";
import { publicApi } from "../../../redux/actions";
import { useNavigate } from "react-router-dom";
import Scanner from "react-qr-reader";
import laptopImage from "../../../assets/images/laptop.svg";
const facingMode = ["environment", "user"];
export const Scan = ({ headerOptions, setHeaderOptions, setPage }) => {
const navigation = useNavigate();
const [result, setResult] = useState("");
const handleScan = (data) => {
setResult(data);
};
const handleError = (err) => {
console.error(err);
};
useEffect(() => {
setHeaderOptions(headerOptions);
});
return (
<div
className="w-full h-screen bg-transparent px-0 transform -translate-y-16"
style={{ backgroundImage: `url(${laptopImage})` }}
>
{!result && (
<div className="w-full h-full flex flex-col justify-center bg-gray50 items-center px-6 bg-opacity-70 backdrop-filter backdrop-blur-sm">
<div className="rounded-3xl overflow-hidden w-full">
<Scanner
delay={300}
onError={handleError}
onScan={handleScan}
style={{ width: "100%" }}
facingMode={facingMode[1]}
/>
</div>
<strong className="mt-4 text-white text-xl">
اسکن کد QR فعالسازی کتاب
</strong>
<p className="text-sm text-white text-center mt-2 font-medium">
کد کیو آر روی کارت فعالسازی را با دوربین گوشی اسکن کنید تا محتوای
دیجیتال مربوط به کتاب برای شما فعال شود
</p>
<button
onClick={() => navigation(-1)}
className="py-3 mt-16 w-2/5 rounded-3xl border-2 border-solid border-blueB9 text-white text-lg font-semibold"
>
بازگشت
</button>
</div>
)}
</div>
);
};
const mapStateToProps = (state) => ({});
const mapDispatchToProps = {
setHeaderOptions: publicApi.setHeaderOptions,
};
export default connect(mapStateToProps, mapDispatchToProps)(Scan);

@ -0,0 +1,19 @@
import React, { useState } from "react";
import Scan from "./Scan";
import Content from "./Content";
function QR({ headerOptions, page }) {
const [currentPage, setCurrentPage] = useState(page);
return (
<>
{page === "scan" && (
<Scan headerOptions={headerOptions} setPage={setCurrentPage} />
)}
{page === "content" && (
<Content headerOptions={headerOptions} setPage={setCurrentPage} />
)}
</>
);
}
export default QR;

@ -15,7 +15,7 @@ const PriceStatus = ({ name, value, type, isDark }) => {
<div className="w-full flex flex-row justify-between py-2"> <div className="w-full flex flex-row justify-between py-2">
<strong className="font-light text-sm dark:text-white">{name}</strong> <strong className="font-light text-sm dark:text-white">{name}</strong>
<span <span
className="font-bold text-xs dark:text-white" className="font-bold text-sm dark:text-white"
style={{ style={{
color: !isDark ? (type === "error" ? "#F1420D" : "#246E8A") : "", color: !isDark ? (type === "error" ? "#F1420D" : "#246E8A") : "",
}} }}

@ -0,0 +1,21 @@
import React, { useState, useEffect, useCallback } from "react";
import { Link } from "react-router-dom";
import { connect } from "react-redux";
import { book, publicApi } from "../../redux/actions";
const Videos = ({ }) => {
return (
<></>
);
};
const mapStateToProps = (state) => ({
});
const mapDispatchToProps = {
};
export default connect(mapStateToProps, mapDispatchToProps)(Videos);

@ -10,6 +10,7 @@ module.exports = {
blueEB: "#2B8DEB", blueEB: "#2B8DEB",
blueFF: "#E8FCFF", blueFF: "#E8FCFF",
blueFF1: "#E9F0FF", blueFF1: "#E9F0FF",
blueFD: "#F6F9FD",
redFF: "#FFE6E6", redFF: "#FFE6E6",
redFF1: "#FF2020", redFF1: "#FF2020",
yellow2: "#FDFFDA", yellow2: "#FDFFDA",
@ -18,9 +19,10 @@ module.exports = {
orange1: "#FF6600", orange1: "#FF6600",
green1: "#00FF80", green1: "#00FF80",
gray20: "#202020", gray20: "#202020",
gray2077 : "#20202077", gray2077: "#20202077",
gray2C: "#2C2C2C", gray2C: "#2C2C2C",
gray36: "#363636", gray36: "#363636",
gray50: "#505050",
grayDB: "#DBDBDB", grayDB: "#DBDBDB",
grayE3: "#E3E3E3", grayE3: "#E3E3E3",
grayEE: "#EEEEEE", grayEE: "#EEEEEE",
@ -33,27 +35,28 @@ module.exports = {
blueE8: "#2E81E8", blueE8: "#2E81E8",
blue52: "#132F52", blue52: "#132F52",
blue5F: "#05335F", blue5F: "#05335F",
blueB9 : "#86A0B9", blueB9: "#86A0B9",
green71: "#067182", green71: "#067182",
greenBA: "#06BACE", greenBA: "#06BACE",
red5F: "#5F1A05", red5F: "#5F1A05",
yellow1: "#5F5F05", yellow1: "#5F5F05",
gray1: "#333333", gray1: "#333333",
gray70 : "#707070", gray70: "#707070",
grayDB : '#DBDBDB' grayDB: "#DBDBDB",
}), }),
borderColor: (theme) => ({ borderColor: (theme) => ({
...theme("colors"), ...theme("colors"),
blueC0: "#196EC0", blueC0: "#196EC0",
blueFE: "#C1E0FE", blueFE: "#C1E0FE",
blueB9: '#86A0B9',
grayDB: "#DBDBDB", grayDB: "#DBDBDB",
gray45 : '#454545' gray45: "#454545",
}), }),
fill: (theme) => ({ fill: (theme) => ({
...theme("colors"), ...theme("colors"),
blueC0 : '#196EC0', blueC0: "#196EC0",
grayDF : '#DFDFDF', grayDF: "#DFDFDF",
greenBA : '#06BACE' greenBA: "#06BACE",
}), }),
extend: { extend: {
borderRadius: { borderRadius: {

@ -7045,6 +7045,11 @@ jsonfile@^6.0.1:
optionalDependencies: optionalDependencies:
graceful-fs "^4.1.6" graceful-fs "^4.1.6"
jsqr@^1.2.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/jsqr/-/jsqr-1.4.0.tgz#8efb8d0a7cc6863cb6d95116b9069123ce9eb2d1"
integrity sha512-dxLob7q65Xg2DvstYkRpkYtmKm2sPJ9oFhrhmudT1dZvNFFTlroai3AWSpLey/w5vMcLBXRgOJsbXpdN9HzU/A==
"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.2.1: "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.2.1:
version "3.2.1" version "3.2.1"
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz#720b97bfe7d901b927d87c3773637ae8ea48781b" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz#720b97bfe7d901b927d87c3773637ae8ea48781b"
@ -9427,6 +9432,15 @@ react-modern-drawer@^1.0.1:
resolved "https://registry.yarnpkg.com/react-modern-drawer/-/react-modern-drawer-1.0.1.tgz#a400c551216b3dffadf93e80f7cc313d30434d13" resolved "https://registry.yarnpkg.com/react-modern-drawer/-/react-modern-drawer-1.0.1.tgz#a400c551216b3dffadf93e80f7cc313d30434d13"
integrity sha512-Stswd8ETIRTGLJl7aFtu92kXb+7UCPn2mzTvpGWsE1kMXco3dK+PZyw/4NGGwDpesZvwPsz3PFlO1BuVqBZpCg== integrity sha512-Stswd8ETIRTGLJl7aFtu92kXb+7UCPn2mzTvpGWsE1kMXco3dK+PZyw/4NGGwDpesZvwPsz3PFlO1BuVqBZpCg==
react-qr-reader@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/react-qr-reader/-/react-qr-reader-2.2.1.tgz#dc89046d1c1a1da837a683dd970de5926817d55b"
integrity sha512-EL5JEj53u2yAOgtpAKAVBzD/SiKWn0Bl7AZy6ZrSf1lub7xHwtaXe6XSx36Wbhl1VMGmvmrwYMRwO1aSCT2fwA==
dependencies:
jsqr "^1.2.0"
prop-types "^15.7.2"
webrtc-adapter "^7.2.1"
react-redux@^7.2.6: react-redux@^7.2.6:
version "7.2.6" version "7.2.6"
resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.6.tgz#49633a24fe552b5f9caf58feb8a138936ddfe9aa" resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.6.tgz#49633a24fe552b5f9caf58feb8a138936ddfe9aa"
@ -9962,6 +9976,13 @@ rsvp@^4.8.4:
resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"
integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==
rtcpeerconnection-shim@^1.2.15:
version "1.2.15"
resolved "https://registry.yarnpkg.com/rtcpeerconnection-shim/-/rtcpeerconnection-shim-1.2.15.tgz#e7cc189a81b435324c4949aa3dfb51888684b243"
integrity sha512-C6DxhXt7bssQ1nHb154lqeL0SXz5Dx4RczXZu2Aa/L1NJFnEVDxFwCBo3fqtuljhHIGceg5JKBV4XJ0gW5JKyw==
dependencies:
sdp "^2.6.0"
run-async@^2.4.0: run-async@^2.4.0:
version "2.4.1" version "2.4.1"
resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
@ -10102,6 +10123,11 @@ screenfull@^5.0.0:
resolved "https://registry.yarnpkg.com/screenfull/-/screenfull-5.2.0.tgz#6533d524d30621fc1283b9692146f3f13a93d1ba" resolved "https://registry.yarnpkg.com/screenfull/-/screenfull-5.2.0.tgz#6533d524d30621fc1283b9692146f3f13a93d1ba"
integrity sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA== integrity sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==
sdp@^2.12.0, sdp@^2.6.0:
version "2.12.0"
resolved "https://registry.yarnpkg.com/sdp/-/sdp-2.12.0.tgz#338a106af7560c86e4523f858349680350d53b22"
integrity sha512-jhXqQAQVM+8Xj5EjJGVweuEzgtGWb3tmEEpl3CLP3cStInSbVHSg0QWOGQzNq8pSID4JkpeV2mPqlMDLrm0/Vw==
select-hose@^2.0.0: select-hose@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
@ -11625,6 +11651,14 @@ webpack@4.44.2:
watchpack "^1.7.4" watchpack "^1.7.4"
webpack-sources "^1.4.1" webpack-sources "^1.4.1"
webrtc-adapter@^7.2.1:
version "7.7.1"
resolved "https://registry.yarnpkg.com/webrtc-adapter/-/webrtc-adapter-7.7.1.tgz#b2c227a6144983b35057df67bd984a7d4bfd17f1"
integrity sha512-TbrbBmiQBL9n0/5bvDdORc6ZfRY/Z7JnEj+EYOD1ghseZdpJ+nF2yx14k3LgQKc7JZnG7HAcL+zHnY25So9d7A==
dependencies:
rtcpeerconnection-shim "^1.2.15"
sdp "^2.12.0"
websocket-driver@>=0.5.1, websocket-driver@^0.7.4: websocket-driver@>=0.5.1, websocket-driver@^0.7.4:
version "0.7.4" version "0.7.4"
resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760"

Loading…
Cancel
Save