added custom checkbox, custom button, custom link, fixes
This commit is contained in:
+4
-1
@@ -10,10 +10,13 @@
|
||||
"preview": "vite preview"
|
||||
},
|
||||
"dependencies": {
|
||||
"@uidotdev/usehooks": "^2.4.1",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0"
|
||||
"react-dom": "^18.2.0",
|
||||
"react-use-clipboard": "^1.0.9"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/date-fns": "^2.6.0",
|
||||
"@types/react": "^18.2.37",
|
||||
"@types/react-dom": "^18.2.15",
|
||||
"@typescript-eslint/eslint-plugin": "^6.10.0",
|
||||
|
||||
+5
-5
@@ -1,7 +1,7 @@
|
||||
import CompanyInfoModal from "./components/CompanyInfoModal/CompanyInfoModal";
|
||||
import NotificationModal from "./components/NotificationModal/NotificationModal";
|
||||
import UserSettingModal from "./components/UserSettingModal/UserSettingModal";
|
||||
import UserPanel from "./components/UserPanel/UserPanel";
|
||||
import CompanyInfoModal from "./components/modals/CompanyInfoModal/CompanyInfoModal";
|
||||
import NotificationModal from "./components/modals/NotificationModal/NotificationModal";
|
||||
import UserSettingModal from "./components/modals/UserSettingModal/UserSettingModal";
|
||||
import UserPanelModal from "./components/modals/UserPanelModal/UserPanelModal";
|
||||
|
||||
import "./App.css";
|
||||
|
||||
@@ -11,7 +11,7 @@ function App() {
|
||||
<CompanyInfoModal />
|
||||
<NotificationModal />
|
||||
<UserSettingModal />
|
||||
<UserPanel />
|
||||
<UserPanelModal />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="35.93" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 228"><path fill="#00D8FF" d="M210.483 73.824a171.49 171.49 0 0 0-8.24-2.597c.465-1.9.893-3.777 1.273-5.621c6.238-30.281 2.16-54.676-11.769-62.708c-13.355-7.7-35.196.329-57.254 19.526a171.23 171.23 0 0 0-6.375 5.848a155.866 155.866 0 0 0-4.241-3.917C100.759 3.829 77.587-4.822 63.673 3.233C50.33 10.957 46.379 33.89 51.995 62.588a170.974 170.974 0 0 0 1.892 8.48c-3.28.932-6.445 1.924-9.474 2.98C17.309 83.498 0 98.307 0 113.668c0 15.865 18.582 31.778 46.812 41.427a145.52 145.52 0 0 0 6.921 2.165a167.467 167.467 0 0 0-2.01 9.138c-5.354 28.2-1.173 50.591 12.134 58.266c13.744 7.926 36.812-.22 59.273-19.855a145.567 145.567 0 0 0 5.342-4.923a168.064 168.064 0 0 0 6.92 6.314c21.758 18.722 43.246 26.282 56.54 18.586c13.731-7.949 18.194-32.003 12.4-61.268a145.016 145.016 0 0 0-1.535-6.842c1.62-.48 3.21-.974 4.76-1.488c29.348-9.723 48.443-25.443 48.443-41.52c0-15.417-17.868-30.326-45.517-39.844Zm-6.365 70.984c-1.4.463-2.836.91-4.3 1.345c-3.24-10.257-7.612-21.163-12.963-32.432c5.106-11 9.31-21.767 12.459-31.957c2.619.758 5.16 1.557 7.61 2.4c23.69 8.156 38.14 20.213 38.14 29.504c0 9.896-15.606 22.743-40.946 31.14Zm-10.514 20.834c2.562 12.94 2.927 24.64 1.23 33.787c-1.524 8.219-4.59 13.698-8.382 15.893c-8.067 4.67-25.32-1.4-43.927-17.412a156.726 156.726 0 0 1-6.437-5.87c7.214-7.889 14.423-17.06 21.459-27.246c12.376-1.098 24.068-2.894 34.671-5.345a134.17 134.17 0 0 1 1.386 6.193ZM87.276 214.515c-7.882 2.783-14.16 2.863-17.955.675c-8.075-4.657-11.432-22.636-6.853-46.752a156.923 156.923 0 0 1 1.869-8.499c10.486 2.32 22.093 3.988 34.498 4.994c7.084 9.967 14.501 19.128 21.976 27.15a134.668 134.668 0 0 1-4.877 4.492c-9.933 8.682-19.886 14.842-28.658 17.94ZM50.35 144.747c-12.483-4.267-22.792-9.812-29.858-15.863c-6.35-5.437-9.555-10.836-9.555-15.216c0-9.322 13.897-21.212 37.076-29.293c2.813-.98 5.757-1.905 8.812-2.773c3.204 10.42 7.406 21.315 12.477 32.332c-5.137 11.18-9.399 22.249-12.634 32.792a134.718 134.718 0 0 1-6.318-1.979Zm12.378-84.26c-4.811-24.587-1.616-43.134 6.425-47.789c8.564-4.958 27.502 2.111 47.463 19.835a144.318 144.318 0 0 1 3.841 3.545c-7.438 7.987-14.787 17.08-21.808 26.988c-12.04 1.116-23.565 2.908-34.161 5.309a160.342 160.342 0 0 1-1.76-7.887Zm110.427 27.268a347.8 347.8 0 0 0-7.785-12.803c8.168 1.033 15.994 2.404 23.343 4.08c-2.206 7.072-4.956 14.465-8.193 22.045a381.151 381.151 0 0 0-7.365-13.322Zm-45.032-43.861c5.044 5.465 10.096 11.566 15.065 18.186a322.04 322.04 0 0 0-30.257-.006c4.974-6.559 10.069-12.652 15.192-18.18ZM82.802 87.83a323.167 323.167 0 0 0-7.227 13.238c-3.184-7.553-5.909-14.98-8.134-22.152c7.304-1.634 15.093-2.97 23.209-3.984a321.524 321.524 0 0 0-7.848 12.897Zm8.081 65.352c-8.385-.936-16.291-2.203-23.593-3.793c2.26-7.3 5.045-14.885 8.298-22.6a321.187 321.187 0 0 0 7.257 13.246c2.594 4.48 5.28 8.868 8.038 13.147Zm37.542 31.03c-5.184-5.592-10.354-11.779-15.403-18.433c4.902.192 9.899.29 14.978.29c5.218 0 10.376-.117 15.453-.343c-4.985 6.774-10.018 12.97-15.028 18.486Zm52.198-57.817c3.422 7.8 6.306 15.345 8.596 22.52c-7.422 1.694-15.436 3.058-23.88 4.071a382.417 382.417 0 0 0 7.859-13.026a347.403 347.403 0 0 0 7.425-13.565Zm-16.898 8.101a358.557 358.557 0 0 1-12.281 19.815a329.4 329.4 0 0 1-23.444.823c-7.967 0-15.716-.248-23.178-.732a310.202 310.202 0 0 1-12.513-19.846h.001a307.41 307.41 0 0 1-10.923-20.627a310.278 310.278 0 0 1 10.89-20.637l-.001.001a307.318 307.318 0 0 1 12.413-19.761c7.613-.576 15.42-.876 23.31-.876H128c7.926 0 15.743.303 23.354.883a329.357 329.357 0 0 1 12.335 19.695a358.489 358.489 0 0 1 11.036 20.54a329.472 329.472 0 0 1-11 20.722Zm22.56-122.124c8.572 4.944 11.906 24.881 6.52 51.026c-.344 1.668-.73 3.367-1.15 5.09c-10.622-2.452-22.155-4.275-34.23-5.408c-7.034-10.017-14.323-19.124-21.64-27.008a160.789 160.789 0 0 1 5.888-5.4c18.9-16.447 36.564-22.941 44.612-18.3ZM128 90.808c12.625 0 22.86 10.235 22.86 22.86s-10.235 22.86-22.86 22.86s-22.86-10.235-22.86-22.86s10.235-22.86 22.86-22.86Z"></path></svg>
|
||||
|
Before Width: | Height: | Size: 4.0 KiB |
@@ -0,0 +1,63 @@
|
||||
interface ButtonProps {
|
||||
text?: string;
|
||||
icon?: React.ReactNode;
|
||||
type?: "primary" | "secondary" | "tertiary" | "disabled";
|
||||
width?: "full" | "fit";
|
||||
disabled?: boolean;
|
||||
onClick?: () => void;
|
||||
}
|
||||
|
||||
function Button({
|
||||
text,
|
||||
icon,
|
||||
type = "primary",
|
||||
width = "fit",
|
||||
disabled,
|
||||
onClick,
|
||||
}: ButtonProps) {
|
||||
if (disabled) {
|
||||
type = "disabled";
|
||||
}
|
||||
|
||||
const onlyIcon = !!icon && !text;
|
||||
|
||||
const padding = () => {
|
||||
if (onlyIcon) {
|
||||
return "p-1";
|
||||
} else if (icon) {
|
||||
return "pl-2 py-1 pr-4";
|
||||
} else {
|
||||
return "px-4 py-2";
|
||||
}
|
||||
};
|
||||
|
||||
const types = () => {
|
||||
switch (type) {
|
||||
case "primary":
|
||||
return "text-white bg-[#49A1F5] hover:bg-[#4190DB]";
|
||||
case "secondary":
|
||||
return "text-[#77828C] bg-[#F0F1F2] hover:bg-[#E6ECF2] active:bg-[#49A1F5] active:text-white";
|
||||
case "tertiary":
|
||||
return "text-[#77828C] bg-transparent hover:text-[#4C5359] hover:bg-[#E6ECF2] active:text-white active:bg-[#49A1F5]";
|
||||
case "disabled":
|
||||
return "text-[##CCCCCC]";
|
||||
default:
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<button
|
||||
disabled={disabled}
|
||||
className={`transition-colors flex items-center justify-center gap-1 rounded-lg ${padding()} ${types()} w-${width}`}
|
||||
onClick={onClick}
|
||||
>
|
||||
{icon}
|
||||
{!onlyIcon && (
|
||||
<span className="text-xs font-semibold leading-[130%]">{text}</span>
|
||||
)}
|
||||
</button>
|
||||
);
|
||||
}
|
||||
|
||||
export default Button;
|
||||
@@ -0,0 +1,62 @@
|
||||
import IconWrapper from "../icons/IconWrapper";
|
||||
import CheckboxIcon from "../icons/CheckboxIcon";
|
||||
import { useEffect, useState } from "react";
|
||||
|
||||
interface CheckboxProps {
|
||||
text?: string;
|
||||
onClick?: () => void;
|
||||
isDisabled?: boolean;
|
||||
}
|
||||
|
||||
const Checkbox = ({ text, isDisabled = false }: CheckboxProps): JSX.Element => {
|
||||
const [isSelected, setIsSelected] = useState(true);
|
||||
const [checkboxState, setCheckboxState] = useState(
|
||||
"border-[#49A1F5] hover:border-[#4190DB] active:border-[#49A1F5] bg-[#49A1F5] hover:bg-[#4190DB] active:bg-[#49A1F5]"
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
if (isDisabled) {
|
||||
setCheckboxState("border-[#CCCCCC]");
|
||||
if (isSelected) {
|
||||
setCheckboxState("bg-[#CCCCCC]");
|
||||
}
|
||||
} else if (isSelected) {
|
||||
setCheckboxState(
|
||||
"border-[#49A1F5] hover:border-[#4190DB] active:border-[#49A1F5] bg-[#49A1F5] hover:bg-[#4190DB] active:bg-[#49A1F5]"
|
||||
);
|
||||
} else {
|
||||
setCheckboxState(
|
||||
"border-[#DAE0E5] hover:border-[#C4DDF5] active:border-[#49A1F5] bg-white hover:bg-[#E6ECF2] active:bg-[#49A1F5]"
|
||||
);
|
||||
}
|
||||
}, [isDisabled, isSelected]);
|
||||
|
||||
const handleOnClick = () => {
|
||||
setIsSelected((prev) => !prev);
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="flex items-center">
|
||||
<label className="cursor-pointer flex select-none gap-1 text-[12px]">
|
||||
<input
|
||||
type="checkbox"
|
||||
className="cursor-pointer hidden "
|
||||
hidden
|
||||
onClick={handleOnClick}
|
||||
/>
|
||||
<div
|
||||
className={`w-[18px] h-[18px] border-2 rounded-sm flex flex-col self-center align-middle text-white hover:text-[#C4DDF5] active:text-[#F2F2F2] ${checkboxState} `}
|
||||
>
|
||||
{isSelected && (
|
||||
<IconWrapper className={`flex items-center justify-center `}>
|
||||
<CheckboxIcon />
|
||||
</IconWrapper>
|
||||
)}
|
||||
</div>
|
||||
{text}
|
||||
</label>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default Checkbox;
|
||||
@@ -1,29 +0,0 @@
|
||||
import ICompanyEmployee from "../../types/companyEmployee";
|
||||
|
||||
interface EmployeeItemProps {
|
||||
employee: ICompanyEmployee;
|
||||
}
|
||||
|
||||
const EmployeeItem = ({ employee }: EmployeeItemProps) => {
|
||||
const { image, id, name, status } = employee;
|
||||
const statusColor = {
|
||||
online: { color: "text-[#49A1F5]", label: "В сети" },
|
||||
offline: { color: "text-[#27AE60]", label: "Не в сети" },
|
||||
atDemo: { color: "text-[#EB5757]", label: "На демонстрации" },
|
||||
};
|
||||
const { color, label } = statusColor[status];
|
||||
|
||||
return (
|
||||
<div className="flex gap-2" key={id}>
|
||||
<img src={image} alt={name} className="rounder-full w-8 h-8" />
|
||||
<div className="flex flex-col">
|
||||
<div className="h-5 text-sm ">{name}</div>
|
||||
<div className={`h-3 text-[10px] font-semibold leading-3 ${color}`}>
|
||||
• {label}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default EmployeeItem;
|
||||
@@ -0,0 +1,25 @@
|
||||
interface LinkProps {
|
||||
text: string;
|
||||
isDisabled?: boolean;
|
||||
onClick?: () => void;
|
||||
}
|
||||
|
||||
const Link = ({
|
||||
text,
|
||||
isDisabled = false,
|
||||
onClick,
|
||||
}: LinkProps): JSX.Element => {
|
||||
const linkState = isDisabled
|
||||
? "text-[#CCCCCC] cursor-not-allowed"
|
||||
: "text-[#49A1F5] hover:text-[#4190DB] active:text-[#49A1F5] cursor-pointer";
|
||||
return (
|
||||
<button
|
||||
onClick={onClick}
|
||||
className={`text-left outline-none text-[#49A1F5] text-[12px] ${linkState}`}
|
||||
>
|
||||
{text}
|
||||
</button>
|
||||
);
|
||||
};
|
||||
|
||||
export default Link;
|
||||
@@ -1,41 +0,0 @@
|
||||
import styles from "./styles.module.css";
|
||||
|
||||
const SafetySetting = () => {
|
||||
return (
|
||||
<div className="flex gap-6 p-6">
|
||||
<div className="text-[12px] font-semibold font-[#111C26]">
|
||||
Безопасность
|
||||
</div>
|
||||
<div className="flex flex-col w-full gap-3">
|
||||
<div className={styles.inputGroup}>
|
||||
<label htmlFor="inputName" className={styles.label}>
|
||||
Старый пароль
|
||||
</label>
|
||||
<input
|
||||
type="password"
|
||||
className={styles.inputArea}
|
||||
placeholder="placeholder"
|
||||
id="inputName"
|
||||
/>
|
||||
</div>
|
||||
<div className={styles.inputGroup}>
|
||||
<label htmlFor="inputName" className={styles.label}>
|
||||
Новый пароль
|
||||
</label>
|
||||
<input
|
||||
placeholder="placeholder"
|
||||
type="password"
|
||||
className={styles.inputArea}
|
||||
id="inputEmail"
|
||||
/>
|
||||
<label htmlFor="inputEmail" className={styles.label}></label>
|
||||
</div>
|
||||
<button className="py-2 px-4 bg-[#F0F1F2] w-fit rounded-[8px] text-[#77828C] font-semibold leading-[130%] text-[12px] h-8 cursor-pointer select-none outline-none">
|
||||
Изменить
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default SafetySetting;
|
||||
@@ -1,85 +0,0 @@
|
||||
const UserSettingNotification = () => {
|
||||
return (
|
||||
<div className="flex flex-col ">
|
||||
<div className="flex p-6 gap-4 border-b">
|
||||
<div className="text-[#111C26] text-[12px] font-semibold w-[88px] leading-[130%]">
|
||||
Уведомления в браузере
|
||||
</div>
|
||||
<div className="flex align-middle gap-1">
|
||||
<input
|
||||
defaultChecked
|
||||
type="checkbox"
|
||||
id="browserNotification"
|
||||
name="scales"
|
||||
className="cursor-pointer"
|
||||
/>
|
||||
<label
|
||||
htmlFor="browserNotification"
|
||||
className="text-[12px] self-center"
|
||||
>
|
||||
Разрешить уведомления в окне браузера
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex p-6 gap-4">
|
||||
<div className="text-[#111C26] text-[12px] font-semibold w-[88px] leading-[130%]">
|
||||
Уведомления по email
|
||||
</div>
|
||||
<div className="flex flex-col gap-6">
|
||||
<div className="flex align-middle gap-1">
|
||||
<input
|
||||
defaultChecked
|
||||
type="checkbox"
|
||||
id="emailNotificatino"
|
||||
name="scales"
|
||||
className="cursor-pointer"
|
||||
/>
|
||||
<label
|
||||
htmlFor="emailNotificatino"
|
||||
className="text-[12px] self-center"
|
||||
>
|
||||
Отправлять уведомления на почтовый адрес
|
||||
</label>
|
||||
</div>
|
||||
<div className="flex flex-col align-middle gap-3">
|
||||
<div className="font-semibold text-[12px]">Виды уведомлений</div>
|
||||
<div className="flex flex-col gap-2">
|
||||
<div className="flex align-middle gap-1">
|
||||
<input
|
||||
defaultChecked
|
||||
type="checkbox"
|
||||
id="emailNotificatino"
|
||||
name="scales"
|
||||
className="cursor-pointer"
|
||||
/>
|
||||
<label
|
||||
htmlFor="emailNotificatino"
|
||||
className="text-[12px] self-center"
|
||||
>
|
||||
Новые сообщения
|
||||
</label>
|
||||
</div>
|
||||
<div className="flex align-middle gap-1">
|
||||
<input
|
||||
defaultChecked
|
||||
type="checkbox"
|
||||
id="emailNotificatino"
|
||||
name="scales"
|
||||
className="cursor-pointer"
|
||||
/>
|
||||
<label
|
||||
htmlFor="emailNotificatino"
|
||||
className="text-[12px] self-center"
|
||||
>
|
||||
Системные уведомления
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default UserSettingNotification;
|
||||
+8
-11
@@ -1,6 +1,7 @@
|
||||
import CopyIcon from "../../icons/CopyIcon/CopyIcon";
|
||||
import IconWrapper from "../../icons/IconWrapper/IconWrapper";
|
||||
import ICompanyInfoItem from "../../types/companyInfoItem";
|
||||
import { useCopyToClipboard } from "@uidotdev/usehooks";
|
||||
import CopyIcon from "../../../../icons/CopyIcon";
|
||||
import ICompanyInfoItem from "../../../../types/companyInfoItem";
|
||||
import Button from "../../../Button";
|
||||
|
||||
interface CompanyInfoItemProps {
|
||||
companyInfoItem: ICompanyInfoItem;
|
||||
@@ -8,23 +9,19 @@ interface CompanyInfoItemProps {
|
||||
|
||||
const CompanyInfoItem = ({ companyInfoItem }: CompanyInfoItemProps) => {
|
||||
const { label, title } = companyInfoItem;
|
||||
const [, copyToClipBoard] = useCopyToClipboard();
|
||||
|
||||
function handleOnCopyClick(): void {
|
||||
navigator.clipboard.writeText(title);
|
||||
copyToClipBoard(title);
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="flex w-[100%] justify-between">
|
||||
<div className="flex w-full justify-between">
|
||||
<div className="flex flex-col gap-1">
|
||||
<div className="text-[#77828C] text-[12px]">{label}</div>
|
||||
<div className="text-[14px]">{title}</div>
|
||||
</div>
|
||||
<IconWrapper
|
||||
className="self-center text-[#77828C] cursor-pointer"
|
||||
onClick={handleOnCopyClick}
|
||||
>
|
||||
<CopyIcon />
|
||||
</IconWrapper>
|
||||
<Button icon={<CopyIcon />} type="tertiary" onClick={handleOnCopyClick} />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
import ICompanyInfoItem from "../../types/companyInfoItem";
|
||||
import ICompanyInfoItem from "../../../../types/companyInfoItem";
|
||||
import CompanyInfoItem from "../CompanyInfoItem/CompanyInfoItem";
|
||||
|
||||
interface CompanyInfoListProps {
|
||||
+14
-11
@@ -1,12 +1,14 @@
|
||||
import { useState } from "react";
|
||||
import IconWrapper from "../../icons/IconWrapper/IconWrapper";
|
||||
import CrossIcon from "../../icons/CrossIcon/CrossIcon";
|
||||
import EmployeesList from "../EmployeesList/EmployeesList";
|
||||
import ICompanyEmployee from "../../types/companyEmployee";
|
||||
import ICompanyInfoItem from "../../types/companyInfoItem";
|
||||
import CompanyInfoList from "../CompanyInfoList/CompanyInfoList";
|
||||
import ProjectList from "../ProjectList/ProjectList";
|
||||
import IProjectItem from "../../types/projectItem";
|
||||
import IconWrapper from "../../../icons/IconWrapper";
|
||||
import CrossIcon from "../../../icons/CrossIcon";
|
||||
import EmployeesList from "./EmployeesList/EmployeesList";
|
||||
import ICompanyEmployee from "../../../types/companyEmployee";
|
||||
import ICompanyInfoItem from "../../../types/companyInfoItem";
|
||||
import CompanyInfoList from "./CompanyInfoList/CompanyInfoList";
|
||||
import ProjectList from "./ProjectList/ProjectList";
|
||||
import IProjectItem from "../../../types/projectItem";
|
||||
import Button from "../../Button";
|
||||
import Link from "../../Link";
|
||||
|
||||
const companyEmployeeItems: ICompanyEmployee[] = [
|
||||
{
|
||||
@@ -77,9 +79,7 @@ const CompanyInfo = () => {
|
||||
<div className="w-[88px] h-[88px] bg-[#D9D9D9] rounded-full"></div>
|
||||
<div className="w-[260px] flex flex-col gap-4">
|
||||
<CompanyInfoList companyInfoItems={companyInfoItems} />
|
||||
<button className="text-left outline-none text-[#49A1F5] text-[12px]">
|
||||
Сообщить о проблеме
|
||||
</button>
|
||||
<Link text="Сообщить о проблеме" />
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex flex-col w-full">
|
||||
@@ -98,7 +98,10 @@ const CompanyInfo = () => {
|
||||
</button>
|
||||
</div>
|
||||
{tab === "Сотрудники" && (
|
||||
<div className="border-b p-4 pt-0 ">
|
||||
<EmployeesList employees={companyEmployeeItems} />
|
||||
<Button text="Добавить" width="full" type="secondary" />
|
||||
</div>
|
||||
)}
|
||||
{tab === "Проекты" && <ProjectList projectItems={projectItems} />}
|
||||
</div>
|
||||
@@ -0,0 +1,50 @@
|
||||
import MoreIcon from "../../../../icons/MoreIcon";
|
||||
import ICompanyEmployee from "../../../../types/companyEmployee";
|
||||
import Button from "../../../Button";
|
||||
|
||||
interface EmployeeItemProps {
|
||||
employee: ICompanyEmployee;
|
||||
}
|
||||
|
||||
const EmployeeItem = ({ employee }: EmployeeItemProps) => {
|
||||
const { image, id, name, status } = employee;
|
||||
const statusColor = {
|
||||
online: {
|
||||
label: "В сети",
|
||||
color: "text-[#49A1F5]",
|
||||
background: "bg-[#49A1F5]",
|
||||
},
|
||||
offline: {
|
||||
label: "Не в сети",
|
||||
color: "text-[#27AE60]",
|
||||
background: "bg-[#27AE60]",
|
||||
},
|
||||
atDemo: {
|
||||
label: "На демонстрации",
|
||||
color: "text-[#EB5757]",
|
||||
background: "bg-[#EB5757]",
|
||||
},
|
||||
};
|
||||
const { label, color, background } = statusColor[status];
|
||||
|
||||
return (
|
||||
<div className="flex gap-2" key={id}>
|
||||
<img src={image} alt={name} className="rounder-full w-8 h-8" />
|
||||
<div className="flex justify-between w-full">
|
||||
<div>
|
||||
<div className="h-5 text-sm ">{name}</div>
|
||||
<div
|
||||
className={`h-3 text-[10px] font-semibold leading-3 flex gap-1 items-center ${color}`}
|
||||
>
|
||||
<div className={`w-1.5 h-1.5 rounded-full ${background}`}></div>
|
||||
{label}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<Button type="tertiary" icon={<MoreIcon />} />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default EmployeeItem;
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
import ICompanyEmployee from "../../types/companyEmployee";
|
||||
import ICompanyEmployee from "../../../../types/companyEmployee";
|
||||
import EmployeeItem from "../EmployeeItem/EmployeeItem";
|
||||
|
||||
interface EmployeesListProps {
|
||||
@@ -7,7 +7,7 @@ interface EmployeesListProps {
|
||||
|
||||
const EmployeesList = ({ employees }: EmployeesListProps) => {
|
||||
return (
|
||||
<div className="flex flex-col p-4 gap-2 ">
|
||||
<div className="flex flex-col py-4 gap-2">
|
||||
{employees.map((item) => (
|
||||
<EmployeeItem employee={item} key={item.id} />
|
||||
))}
|
||||
+8
-7
@@ -1,6 +1,7 @@
|
||||
import { useState } from "react";
|
||||
import IProjectItem from "../../types/projectItem";
|
||||
import { format, parseISO } from "date-fns";
|
||||
import IProjectItem from "../../../../types/projectItem";
|
||||
import Link from "../../../Link";
|
||||
|
||||
interface ProjectProps {
|
||||
projectItems: IProjectItem[];
|
||||
@@ -44,7 +45,9 @@ const ProjectList = ({ projectItems }: ProjectProps) => {
|
||||
className="flex gap-2 cursor-pointer select-none"
|
||||
>
|
||||
<img src={item.image} alt={item.title} className="w-8 h-8" />
|
||||
<div className="text-[12px] font-semibold">{item.title}</div>
|
||||
<div className="text-[12px] font-semibold self-center">
|
||||
{item.title}
|
||||
</div>
|
||||
</div>
|
||||
{selectedProjectIds.includes(item.id) ? (
|
||||
<div className="flex flex-col gap-2">
|
||||
@@ -73,12 +76,10 @@ const ProjectList = ({ projectItems }: ProjectProps) => {
|
||||
<div className="text-[#000]">{item.applicationVersion}</div>
|
||||
</div>
|
||||
</div>
|
||||
<button
|
||||
className="text-left outline-none text-[#49A1F5] text-[12px]"
|
||||
<Link
|
||||
text="Сообщить о проблеме"
|
||||
onClick={handleReportProblemClick}
|
||||
>
|
||||
Сообщить о проблеме
|
||||
</button>
|
||||
/>
|
||||
</div>
|
||||
) : (
|
||||
<></>
|
||||
+8
-11
@@ -1,9 +1,10 @@
|
||||
import { format, parseISO } from "date-fns";
|
||||
import { useState } from "react";
|
||||
import INotification from "../../types/notification";
|
||||
import IconWrapper from "../../icons/IconWrapper/IconWrapper";
|
||||
import IsNotificationReadIcon from "../../icons/IsNotificationReadIcon/IsNotificationReadIcon";
|
||||
import SystemNotificationIcon from "../../icons/SystemNotificationIcon/SystemNotificationIcon";
|
||||
import INotification from "../../../../types/notification";
|
||||
import IconWrapper from "../../../../icons/IconWrapper";
|
||||
import IsNotificationReadIcon from "../../../../icons/IsNotificationReadIcon";
|
||||
import SystemNotificationIcon from "../../../../icons/SystemNotificationIcon";
|
||||
import Link from "../../../Link";
|
||||
|
||||
interface NotificationItemProps {
|
||||
notification: INotification;
|
||||
@@ -34,7 +35,7 @@ const NotificationItem = ({ notification }: NotificationItemProps) => {
|
||||
|
||||
return (
|
||||
<div
|
||||
className="flex py-4 border-b border-b-[#DAE0E5] gap-2 cursor-pointer select-none"
|
||||
className="flex py-4 border-b border-b-[#DAE0E5] gap-2 cursor-pointer select-none first:pt-0"
|
||||
key={notification.id}
|
||||
onClick={handleOnNotificationClick(notification.id)}
|
||||
>
|
||||
@@ -73,13 +74,9 @@ const NotificationItem = ({ notification }: NotificationItemProps) => {
|
||||
<div className="flex justify-between">
|
||||
<div className="text-[12px] text-[#77828C]">{date}</div>
|
||||
{notification.type === "Employee" ? (
|
||||
<button className="outline-none text-[#49A1F5] text-[12px]">
|
||||
открыть чат
|
||||
</button>
|
||||
<Link text="открыть чат" />
|
||||
) : (
|
||||
<button className="outline-none text-[#49A1F5] text-[12px]">
|
||||
действие
|
||||
</button>
|
||||
<Link text="действие" />
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
import INotification from "../../types/notification";
|
||||
import INotification from "../../../../types/notification";
|
||||
import NotificationItem from "../NotificationItem/NotificationItem";
|
||||
|
||||
interface NotificationListProps {
|
||||
@@ -7,7 +7,7 @@ interface NotificationListProps {
|
||||
|
||||
const NotificationList = ({ notifications }: NotificationListProps) => {
|
||||
return (
|
||||
<div className="bg-white rounded-[8px] p-6 pt-0">
|
||||
<div className="bg-white rounded-[8px] p-6">
|
||||
{notifications.map((notification) => {
|
||||
return (
|
||||
<NotificationItem notification={notification} key={notification.id} />
|
||||
+11
-11
@@ -1,8 +1,9 @@
|
||||
import { useState } from "react";
|
||||
import CrossIcon from "../../icons/CrossIcon/CrossIcon";
|
||||
import IconWrapper from "../../icons/IconWrapper/IconWrapper";
|
||||
import INotification from "../../types/notification";
|
||||
import NotificationList from "../NotificationList/NotificationList";
|
||||
import CrossIcon from "../../../icons/CrossIcon";
|
||||
import IconWrapper from "../../../icons/IconWrapper";
|
||||
import INotification from "../../../types/notification";
|
||||
import NotificationList from "./NotificationList/NotificationList";
|
||||
import Button from "../../Button";
|
||||
|
||||
const notificationData: INotification[] = [
|
||||
{
|
||||
@@ -47,7 +48,7 @@ const NotificationModal = () => {
|
||||
setNotifications(updatedNotification);
|
||||
};
|
||||
return (
|
||||
<div className="bg-white w-[448px] h-[496px] m-auto rounded-[8px]">
|
||||
<div className="bg-white w-[448px] m-auto rounded-[8px]">
|
||||
<div className="p-4 flex justify-between border-b border-b-[#DAE0E5]">
|
||||
<div className="font-semibold text-sm">Уведомления</div>
|
||||
<IconWrapper className="w-[11.3px] h-[11.3px] cursor-pointer text-[#77828C] self-center">
|
||||
@@ -57,13 +58,12 @@ const NotificationModal = () => {
|
||||
<div className="h-[392px] border-b border-b-[#DAE0E5] overflow-y-auto">
|
||||
<NotificationList notifications={notifications} />
|
||||
</div>
|
||||
<div className="h-[50px] flex flex-col px-6 justify-center">
|
||||
<button
|
||||
className="py-2 px-4 bg-[#F0F1F2] w-fit rounded-[8px] text-[#77828C] font-semibold leading-[130%] text-[12px] h-8 cursor-pointer select-none outline-none"
|
||||
<div className="flex flex-col px-6 py-3 justify-center">
|
||||
<Button
|
||||
type="secondary"
|
||||
text="Отметить все как прочитанное"
|
||||
onClick={handleMarkAsRead}
|
||||
>
|
||||
Отметить всё как прочитанное
|
||||
</button>
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
+8
-8
@@ -1,11 +1,11 @@
|
||||
import IconWrapper from "../../icons/IconWrapper/IconWrapper";
|
||||
import currentProfile from "../../mock/currentUser";
|
||||
import Notification from "../../icons/Notification/Notification";
|
||||
import Setting from "../../icons/Setting/Setting";
|
||||
import Company from "../../icons/Company/Company";
|
||||
import Exit from "../../icons/Exit/Exit";
|
||||
import IconWrapper from "../../../icons/IconWrapper";
|
||||
import currentProfile from "../../../mock/currentUser";
|
||||
import Notification from "../../../icons/Notification";
|
||||
import Setting from "../../../icons/Setting";
|
||||
import Company from "../../../icons/Company";
|
||||
import Exit from "../../../icons/Exit";
|
||||
|
||||
const UserPanel = () => {
|
||||
const UserPanelModal = () => {
|
||||
return (
|
||||
<div className="m-auto">
|
||||
<div className="relative left-[10px] w-0 h-0 border border-x-[6px] border-b-[6px] border-transparent border-b-white"></div>
|
||||
@@ -85,4 +85,4 @@ const UserPanel = () => {
|
||||
);
|
||||
};
|
||||
|
||||
export default UserPanel;
|
||||
export default UserPanelModal;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
import IProfile from "../../types/profile";
|
||||
import IProfile from "../../../../types/profile";
|
||||
import SafetySetting from "../SafetySetting/SafetySetting";
|
||||
import ThemeSetting from "../ThemeSetting/ThemeSetting";
|
||||
import UserInfoSetting from "../UserInfoSetting/UserInfoSetting";
|
||||
@@ -0,0 +1,39 @@
|
||||
import Button from "../../../Button";
|
||||
import styles from "./styles.module.css";
|
||||
|
||||
const SafetySetting = () => {
|
||||
return (
|
||||
<div className="flex gap-6 p-6">
|
||||
<div className="text-[12px] font-semibold font-[#111C26]">
|
||||
Безопасность
|
||||
</div>
|
||||
<div className="flex flex-col w-full gap-6">
|
||||
<div className="flex flex-col gap-3">
|
||||
<div className={styles.inputGroup}>
|
||||
<label className={styles.label}>
|
||||
Старый пароль
|
||||
<input
|
||||
placeholder="placeholder"
|
||||
type="password"
|
||||
className={styles.inputArea}
|
||||
/>
|
||||
</label>
|
||||
</div>
|
||||
<div className={styles.inputGroup}>
|
||||
<label className={styles.label}>
|
||||
Новый пароль
|
||||
<input
|
||||
placeholder="placeholder"
|
||||
type="password"
|
||||
className={styles.inputArea}
|
||||
/>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<Button text="Изменить" type="secondary" />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default SafetySetting;
|
||||
+2
-2
@@ -5,9 +5,9 @@
|
||||
}
|
||||
|
||||
.inputGroup .inputArea {
|
||||
@apply outline-none border-2 border-[#dadce0] py-[10px] px-3 h-[44px] text-sm rounded-[8px];
|
||||
@apply outline-none border-2 border-[#dadce0] py-[10px] px-3 h-[44px] text-sm rounded-[8px] w-full;
|
||||
}
|
||||
|
||||
.inputGroup .label {
|
||||
@apply text-[#8d8d8d] bg-white text-[12px];
|
||||
@apply text-[#8d8d8d] bg-white text-[12px] flex flex-col gap-1;
|
||||
}
|
||||
+7
-4
@@ -5,13 +5,14 @@ const ThemeSetting = () => {
|
||||
<div className="flex gap-6 p-6 border-b border-b-[#DAE0E5]">
|
||||
<div className="text-[12px] font-semibold font-[#111C26]">Тема</div>
|
||||
<div className={styles.checkboxWrapper}>
|
||||
<label>
|
||||
<label className="w-fit`">
|
||||
Светлая
|
||||
<input
|
||||
type="radio"
|
||||
className={styles.modernRadio}
|
||||
value="1"
|
||||
name="a"
|
||||
name="theme"
|
||||
hidden
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
@@ -21,7 +22,8 @@ const ThemeSetting = () => {
|
||||
type="radio"
|
||||
className={styles.modernRadio}
|
||||
value="2"
|
||||
name="a"
|
||||
name="theme"
|
||||
hidden
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
@@ -31,7 +33,8 @@ const ThemeSetting = () => {
|
||||
type="radio"
|
||||
className={styles.modernRadio}
|
||||
value="2"
|
||||
name="a"
|
||||
name="theme"
|
||||
hidden
|
||||
/>
|
||||
<span></span>
|
||||
</label>
|
||||
+8
-7
@@ -1,15 +1,18 @@
|
||||
import CopyIcon from "../../icons/CopyIcon/CopyIcon";
|
||||
import IconWrapper from "../../icons/IconWrapper/IconWrapper";
|
||||
import IProfile from "../../types/profile";
|
||||
import { useCopyToClipboard } from "@uidotdev/usehooks";
|
||||
import CopyIcon from "../../../../icons/CopyIcon";
|
||||
import IconWrapper from "../../../../icons/IconWrapper";
|
||||
import IProfile from "../../../../types/profile";
|
||||
import Button from "../../../Button";
|
||||
|
||||
interface UserInfoSettingProps {
|
||||
profile: IProfile;
|
||||
}
|
||||
|
||||
const UserInfoSetting = ({ profile }: UserInfoSettingProps) => {
|
||||
const [, copyToClipBoard] = useCopyToClipboard();
|
||||
function handleOnCopyClick(value: string) {
|
||||
return () => {
|
||||
navigator.clipboard.writeText(value);
|
||||
copyToClipBoard(value);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -67,9 +70,7 @@ const UserInfoSetting = ({ profile }: UserInfoSettingProps) => {
|
||||
<CopyIcon />
|
||||
</IconWrapper>
|
||||
</div>
|
||||
<button className="outline-none w-fit py-2 px-4 text-[12px] text-[#77828C]">
|
||||
Выйти из аккаунта
|
||||
</button>
|
||||
<Button text="Выйти из аккаунта" type="tertiary" />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
+6
-6
@@ -1,13 +1,13 @@
|
||||
import { useState } from "react";
|
||||
import CrossIcon from "../../icons/CrossIcon/CrossIcon";
|
||||
import IconWrapper from "../../icons/IconWrapper/IconWrapper";
|
||||
import ProfileSetting from "../ProfileSetting/ProfileSetting";
|
||||
import currentProfile from "../../mock/currentUser";
|
||||
import UserSettingNotification from "../UserSettingNotification/UserSettingNotification";
|
||||
import CrossIcon from "../../../icons/CrossIcon";
|
||||
import IconWrapper from "../../../icons/IconWrapper";
|
||||
import ProfileSetting from "./ProfileSetting/ProfileSetting";
|
||||
import currentProfile from "../../../mock/currentUser";
|
||||
import UserSettingNotification from "./UserSettingNotification/UserSettingNotification";
|
||||
|
||||
const UserSettingModal = () => {
|
||||
const [currentTab, setCurrentTab] = useState<"Профиль" | "Уведомления">(
|
||||
"Уведомления"
|
||||
"Профиль"
|
||||
);
|
||||
|
||||
function handleOnTabClick(tab: "Профиль" | "Уведомления") {
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
import Checkbox from "../../../Checkbox";
|
||||
|
||||
const UserSettingNotification = () => {
|
||||
return (
|
||||
<div className="flex flex-col ">
|
||||
<div className="flex p-6 gap-4 border-b">
|
||||
<div className="text-[#111C26] text-[12px] font-semibold w-[88px] leading-[130%]">
|
||||
Уведомления в браузере
|
||||
</div>
|
||||
<Checkbox text="Разрешить уведомления в окне браузера" />
|
||||
</div>
|
||||
<div className="flex p-6 gap-4">
|
||||
<div className="text-[#111C26] text-[12px] font-semibold w-[88px] leading-[130%]">
|
||||
Уведомления по email
|
||||
</div>
|
||||
<div className="flex flex-col gap-6">
|
||||
<Checkbox text="Отправлять уведомления на почтовый адрес" />
|
||||
<div className="flex flex-col align-middle gap-3">
|
||||
<div className="font-semibold text-[12px]">Виды уведомлений</div>
|
||||
<div className="flex flex-col gap-2">
|
||||
<Checkbox text="Новые сообщения" />
|
||||
<Checkbox text="Системные уведомления" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default UserSettingNotification;
|
||||
@@ -0,0 +1,21 @@
|
||||
const CheckboxIcon = (): JSX.Element => {
|
||||
return (
|
||||
<svg
|
||||
width="12"
|
||||
height="9"
|
||||
viewBox="0 0 12 9"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<path
|
||||
d="M1.5 5.2L4.07143 8L10.5 1"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
};
|
||||
|
||||
export default CheckboxIcon;
|
||||
@@ -1,16 +0,0 @@
|
||||
{
|
||||
"test": {
|
||||
"text": "test",
|
||||
"text3": "test",
|
||||
"text2": "test",
|
||||
"text5": "test",
|
||||
"text6": "test",
|
||||
"text7": "test",
|
||||
"text8": "test",
|
||||
"text9": "test",
|
||||
"text10": "test",
|
||||
"text11": "test",
|
||||
"text12": "test"
|
||||
},
|
||||
"test2": { "test1": "sssssssssssssssssssssssssssss" }
|
||||
}
|
||||
@@ -6,7 +6,10 @@ interface IconProps {
|
||||
|
||||
const IconWrapper = ({ children, className, onClick }: IconProps) => {
|
||||
return (
|
||||
<div className={`w-4 h-4 p-auto ${className}`} onClick={onClick}>
|
||||
<div
|
||||
className={`w-4 h-4 p-auto ${className ? className : ""}`}
|
||||
onClick={onClick}
|
||||
>
|
||||
{children}
|
||||
</div>
|
||||
);
|
||||
@@ -0,0 +1,17 @@
|
||||
function MoreIcon() {
|
||||
return (
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<circle cx="5" cy="12" r="1.5" fill="currentColor" />
|
||||
<circle cx="12" cy="12" r="1.5" fill="currentColor" />
|
||||
<circle cx="19" cy="12" r="1.5" fill="currentColor" />
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
|
||||
export default MoreIcon;
|
||||
@@ -12,6 +12,118 @@
|
||||
resolved "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz"
|
||||
integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==
|
||||
|
||||
"@babel/runtime@^7.21.0":
|
||||
version "7.23.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.5.tgz#11edb98f8aeec529b82b211028177679144242db"
|
||||
integrity sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==
|
||||
dependencies:
|
||||
regenerator-runtime "^0.14.0"
|
||||
|
||||
"@esbuild/android-arm64@0.19.8":
|
||||
version "0.19.8"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.8.tgz#fb7130103835b6d43ea499c3f30cfb2b2ed58456"
|
||||
integrity sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA==
|
||||
|
||||
"@esbuild/android-arm@0.19.8":
|
||||
version "0.19.8"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.8.tgz#b46e4d9e984e6d6db6c4224d72c86b7757e35bcb"
|
||||
integrity sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA==
|
||||
|
||||
"@esbuild/android-x64@0.19.8":
|
||||
version "0.19.8"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.8.tgz#a13db9441b5a4f4e4fec4a6f8ffacfea07888db7"
|
||||
integrity sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A==
|
||||
|
||||
"@esbuild/darwin-arm64@0.19.8":
|
||||
version "0.19.8"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.8.tgz#49f5718d36541f40dd62bfdf84da9c65168a0fc2"
|
||||
integrity sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw==
|
||||
|
||||
"@esbuild/darwin-x64@0.19.8":
|
||||
version "0.19.8"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.8.tgz#75c5c88371eea4bfc1f9ecfd0e75104c74a481ac"
|
||||
integrity sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q==
|
||||
|
||||
"@esbuild/freebsd-arm64@0.19.8":
|
||||
version "0.19.8"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.8.tgz#9d7259fea4fd2b5f7437b52b542816e89d7c8575"
|
||||
integrity sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw==
|
||||
|
||||
"@esbuild/freebsd-x64@0.19.8":
|
||||
version "0.19.8"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.8.tgz#abac03e1c4c7c75ee8add6d76ec592f46dbb39e3"
|
||||
integrity sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg==
|
||||
|
||||
"@esbuild/linux-arm64@0.19.8":
|
||||
version "0.19.8"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.8.tgz#c577932cf4feeaa43cb9cec27b89cbe0df7d9098"
|
||||
integrity sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ==
|
||||
|
||||
"@esbuild/linux-arm@0.19.8":
|
||||
version "0.19.8"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.8.tgz#d6014d8b98b5cbc96b95dad3d14d75bb364fdc0f"
|
||||
integrity sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ==
|
||||
|
||||
"@esbuild/linux-ia32@0.19.8":
|
||||
version "0.19.8"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.8.tgz#2379a0554307d19ac4a6cdc15b08f0ea28e7a40d"
|
||||
integrity sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ==
|
||||
|
||||
"@esbuild/linux-loong64@0.19.8":
|
||||
version "0.19.8"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.8.tgz#e2a5bbffe15748b49356a6cd7b2d5bf60c5a7123"
|
||||
integrity sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ==
|
||||
|
||||
"@esbuild/linux-mips64el@0.19.8":
|
||||
version "0.19.8"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.8.tgz#1359331e6f6214f26f4b08db9b9df661c57cfa24"
|
||||
integrity sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q==
|
||||
|
||||
"@esbuild/linux-ppc64@0.19.8":
|
||||
version "0.19.8"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.8.tgz#9ba436addc1646dc89dae48c62d3e951ffe70951"
|
||||
integrity sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg==
|
||||
|
||||
"@esbuild/linux-riscv64@0.19.8":
|
||||
version "0.19.8"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.8.tgz#fbcf0c3a0b20f40b5fc31c3b7695f0769f9de66b"
|
||||
integrity sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg==
|
||||
|
||||
"@esbuild/linux-s390x@0.19.8":
|
||||
version "0.19.8"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.8.tgz#989e8a05f7792d139d5564ffa7ff898ac6f20a4a"
|
||||
integrity sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg==
|
||||
|
||||
"@esbuild/linux-x64@0.19.8":
|
||||
version "0.19.8"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.8.tgz#b187295393a59323397fe5ff51e769ec4e72212b"
|
||||
integrity sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg==
|
||||
|
||||
"@esbuild/netbsd-x64@0.19.8":
|
||||
version "0.19.8"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.8.tgz#c1ec0e24ea82313cb1c7bae176bd5acd5bde7137"
|
||||
integrity sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw==
|
||||
|
||||
"@esbuild/openbsd-x64@0.19.8":
|
||||
version "0.19.8"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.8.tgz#0c5b696ac66c6d70cf9ee17073a581a28af9e18d"
|
||||
integrity sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ==
|
||||
|
||||
"@esbuild/sunos-x64@0.19.8":
|
||||
version "0.19.8"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.8.tgz#2a697e1f77926ff09fcc457d8f29916d6cd48fb1"
|
||||
integrity sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w==
|
||||
|
||||
"@esbuild/win32-arm64@0.19.8":
|
||||
version "0.19.8"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.8.tgz#ec029e62a2fca8c071842ecb1bc5c2dd20b066f1"
|
||||
integrity sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg==
|
||||
|
||||
"@esbuild/win32-ia32@0.19.8":
|
||||
version "0.19.8"
|
||||
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.8.tgz#cbb9a3146bde64dc15543e48afe418c7a3214851"
|
||||
integrity sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw==
|
||||
|
||||
"@esbuild/win32-x64@0.19.8":
|
||||
version "0.19.8"
|
||||
resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.8.tgz"
|
||||
@@ -108,7 +220,7 @@
|
||||
"@nodelib/fs.stat" "2.0.5"
|
||||
run-parallel "^1.1.9"
|
||||
|
||||
"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5":
|
||||
"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
|
||||
version "2.0.5"
|
||||
resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
|
||||
integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
|
||||
@@ -121,11 +233,106 @@
|
||||
"@nodelib/fs.scandir" "2.1.5"
|
||||
fastq "^1.6.0"
|
||||
|
||||
"@rollup/rollup-android-arm-eabi@4.6.1":
|
||||
version "4.6.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.6.1.tgz#0ea289f68ff248b50fea5716ca9f65f7d4dba3ae"
|
||||
integrity sha512-0WQ0ouLejaUCRsL93GD4uft3rOmB8qoQMU05Kb8CmMtMBe7XUDLAltxVZI1q6byNqEtU7N1ZX1Vw5lIpgulLQA==
|
||||
|
||||
"@rollup/rollup-android-arm64@4.6.1":
|
||||
version "4.6.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.6.1.tgz#27c8c67fc5de574874085a1b480ac65b3e18378e"
|
||||
integrity sha512-1TKm25Rn20vr5aTGGZqo6E4mzPicCUD79k17EgTLAsXc1zysyi4xXKACfUbwyANEPAEIxkzwue6JZ+stYzWUTA==
|
||||
|
||||
"@rollup/rollup-darwin-arm64@4.6.1":
|
||||
version "4.6.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.6.1.tgz#c5735c042980c85495411af7183dd20294763bd8"
|
||||
integrity sha512-cEXJQY/ZqMACb+nxzDeX9IPLAg7S94xouJJCNVE5BJM8JUEP4HeTF+ti3cmxWeSJo+5D+o8Tc0UAWUkfENdeyw==
|
||||
|
||||
"@rollup/rollup-darwin-x64@4.6.1":
|
||||
version "4.6.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.6.1.tgz#af844bd54abb73ca3c9cf89a31eec17861d1375d"
|
||||
integrity sha512-LoSU9Xu56isrkV2jLldcKspJ7sSXmZWkAxg7sW/RfF7GS4F5/v4EiqKSMCFbZtDu2Nc1gxxFdQdKwkKS4rwxNg==
|
||||
|
||||
"@rollup/rollup-linux-arm-gnueabihf@4.6.1":
|
||||
version "4.6.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.6.1.tgz#5e972f63c441eaf859551039b3f18db9b035977d"
|
||||
integrity sha512-EfI3hzYAy5vFNDqpXsNxXcgRDcFHUWSx5nnRSCKwXuQlI5J9dD84g2Usw81n3FLBNsGCegKGwwTVsSKK9cooSQ==
|
||||
|
||||
"@rollup/rollup-linux-arm64-gnu@4.6.1":
|
||||
version "4.6.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.6.1.tgz#f4cfbc71e3b6fdb395b28b1472414e181515c72d"
|
||||
integrity sha512-9lhc4UZstsegbNLhH0Zu6TqvDfmhGzuCWtcTFXY10VjLLUe4Mr0Ye2L3rrtHaDd/J5+tFMEuo5LTCSCMXWfUKw==
|
||||
|
||||
"@rollup/rollup-linux-arm64-musl@4.6.1":
|
||||
version "4.6.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.6.1.tgz#6a94c691830dc29bf708de7c640f494996130893"
|
||||
integrity sha512-FfoOK1yP5ksX3wwZ4Zk1NgyGHZyuRhf99j64I5oEmirV8EFT7+OhUZEnP+x17lcP/QHJNWGsoJwrz4PJ9fBEXw==
|
||||
|
||||
"@rollup/rollup-linux-x64-gnu@4.6.1":
|
||||
version "4.6.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.6.1.tgz#f07bae3f7dc532d9ea5ab36c9071db329f9a1efb"
|
||||
integrity sha512-DNGZvZDO5YF7jN5fX8ZqmGLjZEXIJRdJEdTFMhiyXqyXubBa0WVLDWSNlQ5JR2PNgDbEV1VQowhVRUh+74D+RA==
|
||||
|
||||
"@rollup/rollup-linux-x64-musl@4.6.1":
|
||||
version "4.6.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.6.1.tgz#357a34fdbf410af88ce48bd802bea6462bb9a8bc"
|
||||
integrity sha512-RkJVNVRM+piYy87HrKmhbexCHg3A6Z6MU0W9GHnJwBQNBeyhCJG9KDce4SAMdicQnpURggSvtbGo9xAWOfSvIQ==
|
||||
|
||||
"@rollup/rollup-win32-arm64-msvc@4.6.1":
|
||||
version "4.6.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.6.1.tgz#b6e97fd38281667e35297033393cd1101f4a31be"
|
||||
integrity sha512-v2FVT6xfnnmTe3W9bJXl6r5KwJglMK/iRlkKiIFfO6ysKs0rDgz7Cwwf3tjldxQUrHL9INT/1r4VA0n9L/F1vQ==
|
||||
|
||||
"@rollup/rollup-win32-ia32-msvc@4.6.1":
|
||||
version "4.6.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.6.1.tgz#a95db026c640c8128bfd38546d85342f2329beaf"
|
||||
integrity sha512-YEeOjxRyEjqcWphH9dyLbzgkF8wZSKAKUkldRY6dgNR5oKs2LZazqGB41cWJ4Iqqcy9/zqYgmzBkRoVz3Q9MLw==
|
||||
|
||||
"@rollup/rollup-win32-x64-msvc@4.6.1":
|
||||
version "4.6.1"
|
||||
resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.6.1.tgz"
|
||||
integrity sha512-0zfTlFAIhgz8V2G8STq8toAjsYYA6eci1hnXuyOTUFnymrtJwnS6uGKiv3v5UrPZkBlamLvrLV2iiaeqCKzb0A==
|
||||
|
||||
"@swc/core-darwin-arm64@1.3.100":
|
||||
version "1.3.100"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.100.tgz#f582c5bbc9c49506f728fc1d14dff33c2cc226d5"
|
||||
integrity sha512-XVWFsKe6ei+SsDbwmsuRkYck1SXRpO60Hioa4hoLwR8fxbA9eVp6enZtMxzVVMBi8ej5seZ4HZQeAWepbukiBw==
|
||||
|
||||
"@swc/core-darwin-x64@1.3.100":
|
||||
version "1.3.100"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.100.tgz#d84f5c0bb4603c252884d011a698ed7c634b1505"
|
||||
integrity sha512-KF/MXrnH1nakm1wbt4XV8FS7kvqD9TGmVxeJ0U4bbvxXMvzeYUurzg3AJUTXYmXDhH/VXOYJE5N5RkwZZPs5iA==
|
||||
|
||||
"@swc/core-linux-arm64-gnu@1.3.100":
|
||||
version "1.3.100"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.100.tgz#1ed4b92b373882d8f338c4e0a0aa64cdaa6106f1"
|
||||
integrity sha512-p8hikNnAEJrw5vHCtKiFT4hdlQxk1V7vqPmvUDgL/qe2menQDK/i12tbz7/3BEQ4UqUPnvwpmVn2d19RdEMNxw==
|
||||
|
||||
"@swc/core-linux-arm64-musl@1.3.100":
|
||||
version "1.3.100"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.100.tgz#9db560f7459e42e65ec02670d6a8316e7c850cfc"
|
||||
integrity sha512-BWx/0EeY89WC4q3AaIaBSGfQxkYxIlS3mX19dwy2FWJs/O+fMvF9oLk/CyJPOZzbp+1DjGeeoGFuDYpiNO91JA==
|
||||
|
||||
"@swc/core-linux-x64-gnu@1.3.100":
|
||||
version "1.3.100"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.100.tgz#228826ea48879bf1e73683fbef4373e3e762e424"
|
||||
integrity sha512-XUdGu3dxAkjsahLYnm8WijPfKebo+jHgHphDxaW0ovI6sTdmEGFDew7QzKZRlbYL2jRkUuuKuDGvD6lO5frmhA==
|
||||
|
||||
"@swc/core-linux-x64-musl@1.3.100":
|
||||
version "1.3.100"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.100.tgz#09a234dbbf625d071ecb663680e997a62d230d49"
|
||||
integrity sha512-PhoXKf+f0OaNW/GCuXjJ0/KfK9EJX7z2gko+7nVnEA0p3aaPtbP6cq1Ubbl6CMoPL+Ci3gZ7nYumDqXNc3CtLQ==
|
||||
|
||||
"@swc/core-win32-arm64-msvc@1.3.100":
|
||||
version "1.3.100"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.100.tgz#add1c82884c10a9054ed6a48f884097aa85c6d2b"
|
||||
integrity sha512-PwLADZN6F9cXn4Jw52FeP/MCLVHm8vwouZZSOoOScDtihjY495SSjdPnlosMaRSR4wJQssGwiD/4MbpgQPqbAw==
|
||||
|
||||
"@swc/core-win32-ia32-msvc@1.3.100":
|
||||
version "1.3.100"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.100.tgz#e0b6c5ae7f3250adeeb88dae83558d3f45148c56"
|
||||
integrity sha512-0f6nicKSLlDKlyPRl2JEmkpBV4aeDfRQg6n8mPqgL7bliZIcDahG0ej+HxgNjZfS3e0yjDxsNRa6sAqWU2Z60A==
|
||||
|
||||
"@swc/core-win32-x64-msvc@1.3.100":
|
||||
version "1.3.100"
|
||||
resolved "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.100.tgz"
|
||||
@@ -159,6 +366,13 @@
|
||||
resolved "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz"
|
||||
integrity sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==
|
||||
|
||||
"@types/date-fns@^2.6.0":
|
||||
version "2.6.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/date-fns/-/date-fns-2.6.0.tgz#b062ca46562002909be0c63a6467ed173136acc1"
|
||||
integrity sha512-9DSw2ZRzV0Tmpa6PHHJbMcZn79HHus+BBBohcOaDzkK/G3zMjDUDYjJIWBFLbkh+1+/IOS0A59BpQfdr37hASg==
|
||||
dependencies:
|
||||
date-fns "*"
|
||||
|
||||
"@types/json-schema@^7.0.12":
|
||||
version "7.0.15"
|
||||
resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz"
|
||||
@@ -212,7 +426,7 @@
|
||||
semver "^7.5.4"
|
||||
ts-api-utils "^1.0.1"
|
||||
|
||||
"@typescript-eslint/parser@^6.0.0 || ^6.0.0-alpha", "@typescript-eslint/parser@^6.10.0":
|
||||
"@typescript-eslint/parser@^6.10.0":
|
||||
version "6.13.1"
|
||||
resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.13.1.tgz"
|
||||
integrity sha512-fs2XOhWCzRhqMmQf0eicLa/CWSaYss2feXsy7xBD/pLyWke/jCIVc2s1ikEAtSW7ina1HNhv7kONoEfVNEcdDQ==
|
||||
@@ -280,6 +494,11 @@
|
||||
"@typescript-eslint/types" "6.13.1"
|
||||
eslint-visitor-keys "^3.4.1"
|
||||
|
||||
"@uidotdev/usehooks@^2.4.1":
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@uidotdev/usehooks/-/usehooks-2.4.1.tgz#4b733eaeae09a7be143c6c9ca158b56cc1ea75bf"
|
||||
integrity sha512-1I+RwWyS+kdv3Mv0Vmc+p0dPYH0DTRAo04HLyXReYBL9AeseDWUJyi4THuksBJcu9F0Pih69Ak150VDnqbVnXg==
|
||||
|
||||
"@ungap/structured-clone@^1.2.0":
|
||||
version "1.2.0"
|
||||
resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz"
|
||||
@@ -297,7 +516,7 @@ acorn-jsx@^5.3.2:
|
||||
resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
|
||||
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
|
||||
|
||||
"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.9.0:
|
||||
acorn@^8.9.0:
|
||||
version "8.11.2"
|
||||
resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz"
|
||||
integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==
|
||||
@@ -389,7 +608,7 @@ braces@^3.0.2, braces@~3.0.2:
|
||||
dependencies:
|
||||
fill-range "^7.0.1"
|
||||
|
||||
browserslist@^4.21.10, "browserslist@>= 4.21.0":
|
||||
browserslist@^4.21.10:
|
||||
version "4.22.2"
|
||||
resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz"
|
||||
integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==
|
||||
@@ -459,6 +678,13 @@ concat-map@0.0.1:
|
||||
resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
|
||||
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
|
||||
|
||||
copy-to-clipboard@^3.3.1:
|
||||
version "3.3.3"
|
||||
resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0"
|
||||
integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==
|
||||
dependencies:
|
||||
toggle-selection "^1.0.6"
|
||||
|
||||
cross-spawn@^7.0.2:
|
||||
version "7.0.3"
|
||||
resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz"
|
||||
@@ -478,6 +704,13 @@ csstype@^3.0.2:
|
||||
resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz"
|
||||
integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
|
||||
|
||||
date-fns@*:
|
||||
version "2.30.0"
|
||||
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0"
|
||||
integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.21.0"
|
||||
|
||||
debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
|
||||
version "4.3.4"
|
||||
resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"
|
||||
@@ -580,7 +813,7 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4
|
||||
resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz"
|
||||
integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
|
||||
|
||||
"eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0", eslint@^8.53.0, eslint@>=7:
|
||||
eslint@^8.53.0:
|
||||
version "8.55.0"
|
||||
resolved "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz"
|
||||
integrity sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==
|
||||
@@ -736,12 +969,17 @@ fs.realpath@^1.0.0:
|
||||
resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
|
||||
integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
|
||||
|
||||
fsevents@~2.3.2, fsevents@~2.3.3:
|
||||
version "2.3.3"
|
||||
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
|
||||
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
|
||||
|
||||
function-bind@^1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz"
|
||||
integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
|
||||
|
||||
glob-parent@^5.1.2:
|
||||
glob-parent@^5.1.2, glob-parent@~5.1.2:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
|
||||
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
|
||||
@@ -755,12 +993,17 @@ glob-parent@^6.0.2:
|
||||
dependencies:
|
||||
is-glob "^4.0.3"
|
||||
|
||||
glob-parent@~5.1.2:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
|
||||
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
|
||||
glob@7.1.6:
|
||||
version "7.1.6"
|
||||
resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz"
|
||||
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
|
||||
dependencies:
|
||||
is-glob "^4.0.1"
|
||||
fs.realpath "^1.0.0"
|
||||
inflight "^1.0.4"
|
||||
inherits "2"
|
||||
minimatch "^3.0.4"
|
||||
once "^1.3.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
glob@^7.1.3:
|
||||
version "7.2.3"
|
||||
@@ -774,18 +1017,6 @@ glob@^7.1.3:
|
||||
once "^1.3.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
glob@7.1.6:
|
||||
version "7.1.6"
|
||||
resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz"
|
||||
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
|
||||
dependencies:
|
||||
fs.realpath "^1.0.0"
|
||||
inflight "^1.0.4"
|
||||
inherits "2"
|
||||
minimatch "^3.0.4"
|
||||
once "^1.3.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
globals@^13.19.0:
|
||||
version "13.23.0"
|
||||
resolved "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz"
|
||||
@@ -1180,7 +1411,7 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0:
|
||||
resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz"
|
||||
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
|
||||
|
||||
postcss@^8.0.0, postcss@^8.1.0, postcss@^8.2.14, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.31, postcss@^8.4.32, postcss@>=8.0.9:
|
||||
postcss@^8.4.23, postcss@^8.4.31, postcss@^8.4.32:
|
||||
version "8.4.32"
|
||||
resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz"
|
||||
integrity sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==
|
||||
@@ -1212,6 +1443,13 @@ react-dom@^18.2.0:
|
||||
loose-envify "^1.1.0"
|
||||
scheduler "^0.23.0"
|
||||
|
||||
react-use-clipboard@^1.0.9:
|
||||
version "1.0.9"
|
||||
resolved "https://registry.yarnpkg.com/react-use-clipboard/-/react-use-clipboard-1.0.9.tgz#d34d4d04500f77c606795d3756fc587ec93db8d2"
|
||||
integrity sha512-OcMzc14usXhqQnAkvzmhCXAbW5WBT2LSgscVh2vKHXZfg72jFsSOsEearqdeC/nUj8YxEfLnziqe7AE7YkWFwA==
|
||||
dependencies:
|
||||
copy-to-clipboard "^3.3.1"
|
||||
|
||||
react@^18.2.0:
|
||||
version "18.2.0"
|
||||
resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz"
|
||||
@@ -1233,6 +1471,11 @@ readdirp@~3.6.0:
|
||||
dependencies:
|
||||
picomatch "^2.2.1"
|
||||
|
||||
regenerator-runtime@^0.14.0:
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45"
|
||||
integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==
|
||||
|
||||
resolve-from@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz"
|
||||
@@ -1412,6 +1655,11 @@ to-regex-range@^5.0.1:
|
||||
dependencies:
|
||||
is-number "^7.0.0"
|
||||
|
||||
toggle-selection@^1.0.6:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32"
|
||||
integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==
|
||||
|
||||
ts-api-utils@^1.0.1:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz"
|
||||
@@ -1434,7 +1682,7 @@ type-fest@^0.20.2:
|
||||
resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz"
|
||||
integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
|
||||
|
||||
typescript@^5.2.2, typescript@>=4.2.0:
|
||||
typescript@^5.2.2:
|
||||
version "5.3.2"
|
||||
resolved "https://registry.npmjs.org/typescript/-/typescript-5.3.2.tgz"
|
||||
integrity sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==
|
||||
@@ -1459,7 +1707,7 @@ util-deprecate@^1.0.2:
|
||||
resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
|
||||
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
|
||||
|
||||
"vite@^4 || ^5", vite@^5.0.0:
|
||||
vite@^5.0.0:
|
||||
version "5.0.4"
|
||||
resolved "https://registry.npmjs.org/vite/-/vite-5.0.4.tgz"
|
||||
integrity sha512-RzAr8LSvM8lmhB4tQ5OPcBhpjOZRZjuxv9zO5UcxeoY2bd3kP3Ticd40Qma9/BqZ8JS96Ll/jeBX9u+LJZrhVg==
|
||||
|
||||
Reference in New Issue
Block a user