diff --git a/package.json b/package.json index fdf8130..7012868 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/src/App.tsx b/src/App.tsx index d51005f..dfd72aa 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -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() { - + ); } diff --git a/src/assets/react.svg b/src/assets/react.svg deleted file mode 100644 index 6c87de9..0000000 --- a/src/assets/react.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/components/Button.tsx b/src/components/Button.tsx new file mode 100644 index 0000000..be233d0 --- /dev/null +++ b/src/components/Button.tsx @@ -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 ( + + ); +} + +export default Button; diff --git a/src/components/Checkbox.tsx b/src/components/Checkbox.tsx new file mode 100644 index 0000000..b3a1b80 --- /dev/null +++ b/src/components/Checkbox.tsx @@ -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 ( +
+ +
+ ); +}; + +export default Checkbox; diff --git a/src/components/EmployeeItem/EmployeeItem.tsx b/src/components/EmployeeItem/EmployeeItem.tsx deleted file mode 100644 index aa6196f..0000000 --- a/src/components/EmployeeItem/EmployeeItem.tsx +++ /dev/null @@ -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 ( -
- {name} -
-
{name}
-
- • {label} -
-
-
- ); -}; - -export default EmployeeItem; diff --git a/src/components/Link.tsx b/src/components/Link.tsx new file mode 100644 index 0000000..2ded0aa --- /dev/null +++ b/src/components/Link.tsx @@ -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 ( + + ); +}; + +export default Link; diff --git a/src/components/SafetySetting/SafetySetting.tsx b/src/components/SafetySetting/SafetySetting.tsx deleted file mode 100644 index d9a174a..0000000 --- a/src/components/SafetySetting/SafetySetting.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import styles from "./styles.module.css"; - -const SafetySetting = () => { - return ( -
-
- Безопасность -
-
-
- - -
-
- - - -
- -
-
- ); -}; - -export default SafetySetting; diff --git a/src/components/UserSettingNotification/UserSettingNotification.tsx b/src/components/UserSettingNotification/UserSettingNotification.tsx deleted file mode 100644 index 7db7aea..0000000 --- a/src/components/UserSettingNotification/UserSettingNotification.tsx +++ /dev/null @@ -1,85 +0,0 @@ -const UserSettingNotification = () => { - return ( -
-
-
- Уведомления в браузере -
-
- - -
-
-
-
- Уведомления по email -
-
-
- - -
-
-
Виды уведомлений
-
-
- - -
-
- - -
-
-
-
-
-
- ); -}; - -export default UserSettingNotification; diff --git a/src/components/CompanyInfoItem/CompanyInfoItem.tsx b/src/components/modals/CompanyInfoModal/CompanyInfoItem/CompanyInfoItem.tsx similarity index 51% rename from src/components/CompanyInfoItem/CompanyInfoItem.tsx rename to src/components/modals/CompanyInfoModal/CompanyInfoItem/CompanyInfoItem.tsx index 18ae9cf..b218580 100644 --- a/src/components/CompanyInfoItem/CompanyInfoItem.tsx +++ b/src/components/modals/CompanyInfoModal/CompanyInfoItem/CompanyInfoItem.tsx @@ -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 ( -
+
{label}
{title}
- - - +
); }; diff --git a/src/components/CompanyInfoList/CompanyInfoList.tsx b/src/components/modals/CompanyInfoModal/CompanyInfoList/CompanyInfoList.tsx similarity index 84% rename from src/components/CompanyInfoList/CompanyInfoList.tsx rename to src/components/modals/CompanyInfoModal/CompanyInfoList/CompanyInfoList.tsx index bf0ae30..6dc0e1e 100644 --- a/src/components/CompanyInfoList/CompanyInfoList.tsx +++ b/src/components/modals/CompanyInfoModal/CompanyInfoList/CompanyInfoList.tsx @@ -1,4 +1,4 @@ -import ICompanyInfoItem from "../../types/companyInfoItem"; +import ICompanyInfoItem from "../../../../types/companyInfoItem"; import CompanyInfoItem from "../CompanyInfoItem/CompanyInfoItem"; interface CompanyInfoListProps { diff --git a/src/components/CompanyInfoModal/CompanyInfoModal.tsx b/src/components/modals/CompanyInfoModal/CompanyInfoModal.tsx similarity index 79% rename from src/components/CompanyInfoModal/CompanyInfoModal.tsx rename to src/components/modals/CompanyInfoModal/CompanyInfoModal.tsx index 7030545..3e2c53c 100644 --- a/src/components/CompanyInfoModal/CompanyInfoModal.tsx +++ b/src/components/modals/CompanyInfoModal/CompanyInfoModal.tsx @@ -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 = () => {
- +
@@ -98,7 +98,10 @@ const CompanyInfo = () => {
{tab === "Сотрудники" && ( - +
+ +
)} {tab === "Проекты" && } diff --git a/src/components/modals/CompanyInfoModal/EmployeeItem/EmployeeItem.tsx b/src/components/modals/CompanyInfoModal/EmployeeItem/EmployeeItem.tsx new file mode 100644 index 0000000..30545c3 --- /dev/null +++ b/src/components/modals/CompanyInfoModal/EmployeeItem/EmployeeItem.tsx @@ -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 ( +
+ {name} +
+
+
{name}
+
+
+ {label} +
+
+ +
+
+ ); +}; + +export default EmployeeItem; diff --git a/src/components/EmployeesList/EmployeesList.tsx b/src/components/modals/CompanyInfoModal/EmployeesList/EmployeesList.tsx similarity index 75% rename from src/components/EmployeesList/EmployeesList.tsx rename to src/components/modals/CompanyInfoModal/EmployeesList/EmployeesList.tsx index 38ae284..132c0e3 100644 --- a/src/components/EmployeesList/EmployeesList.tsx +++ b/src/components/modals/CompanyInfoModal/EmployeesList/EmployeesList.tsx @@ -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 ( -
+
{employees.map((item) => ( ))} diff --git a/src/components/ProjectList/ProjectList.tsx b/src/components/modals/CompanyInfoModal/ProjectList/ProjectList.tsx similarity index 90% rename from src/components/ProjectList/ProjectList.tsx rename to src/components/modals/CompanyInfoModal/ProjectList/ProjectList.tsx index ab2f43d..8b87078 100644 --- a/src/components/ProjectList/ProjectList.tsx +++ b/src/components/modals/CompanyInfoModal/ProjectList/ProjectList.tsx @@ -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" > {item.title} -
{item.title}
+
+ {item.title} +
{selectedProjectIds.includes(item.id) ? (
@@ -73,12 +76,10 @@ const ProjectList = ({ projectItems }: ProjectProps) => {
{item.applicationVersion}
- + /> ) : ( <> diff --git a/src/components/NotificationItem/NotificationItem.tsx b/src/components/modals/NotificationModal/NotificationItem/NotificationItem.tsx similarity index 80% rename from src/components/NotificationItem/NotificationItem.tsx rename to src/components/modals/NotificationModal/NotificationItem/NotificationItem.tsx index 15d849f..0f03220 100644 --- a/src/components/NotificationItem/NotificationItem.tsx +++ b/src/components/modals/NotificationModal/NotificationItem/NotificationItem.tsx @@ -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 (
@@ -73,13 +74,9 @@ const NotificationItem = ({ notification }: NotificationItemProps) => {
{date}
{notification.type === "Employee" ? ( - + ) : ( - + )}
diff --git a/src/components/NotificationList/NotificationList.tsx b/src/components/modals/NotificationModal/NotificationList/NotificationList.tsx similarity index 80% rename from src/components/NotificationList/NotificationList.tsx rename to src/components/modals/NotificationModal/NotificationList/NotificationList.tsx index 13d2520..0a03783 100644 --- a/src/components/NotificationList/NotificationList.tsx +++ b/src/components/modals/NotificationModal/NotificationList/NotificationList.tsx @@ -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 ( -
+
{notifications.map((notification) => { return ( diff --git a/src/components/NotificationModal/NotificationModal.tsx b/src/components/modals/NotificationModal/NotificationModal.tsx similarity index 75% rename from src/components/NotificationModal/NotificationModal.tsx rename to src/components/modals/NotificationModal/NotificationModal.tsx index 37f6bb4..7b2bb5b 100644 --- a/src/components/NotificationModal/NotificationModal.tsx +++ b/src/components/modals/NotificationModal/NotificationModal.tsx @@ -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 ( -
+
Уведомления
@@ -57,13 +58,12 @@ const NotificationModal = () => {
-
- + />
); diff --git a/src/components/UserPanel/UserPanel.tsx b/src/components/modals/UserPanelModal/UserPanelModal.tsx similarity index 88% rename from src/components/UserPanel/UserPanel.tsx rename to src/components/modals/UserPanelModal/UserPanelModal.tsx index ffbbd4a..d6b7fac 100644 --- a/src/components/UserPanel/UserPanel.tsx +++ b/src/components/modals/UserPanelModal/UserPanelModal.tsx @@ -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 (
@@ -85,4 +85,4 @@ const UserPanel = () => { ); }; -export default UserPanel; +export default UserPanelModal; diff --git a/src/components/ProfileSetting/ProfileSetting.tsx b/src/components/modals/UserSettingModal/ProfileSetting/ProfileSetting.tsx similarity index 84% rename from src/components/ProfileSetting/ProfileSetting.tsx rename to src/components/modals/UserSettingModal/ProfileSetting/ProfileSetting.tsx index c609840..66351d2 100644 --- a/src/components/ProfileSetting/ProfileSetting.tsx +++ b/src/components/modals/UserSettingModal/ProfileSetting/ProfileSetting.tsx @@ -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"; @@ -9,7 +9,7 @@ interface IProfileSettingProps { const ProfileSetting = ({ profile }: IProfileSettingProps) => { return ( -
+
diff --git a/src/components/modals/UserSettingModal/SafetySetting/SafetySetting.tsx b/src/components/modals/UserSettingModal/SafetySetting/SafetySetting.tsx new file mode 100644 index 0000000..5319eb6 --- /dev/null +++ b/src/components/modals/UserSettingModal/SafetySetting/SafetySetting.tsx @@ -0,0 +1,39 @@ +import Button from "../../../Button"; +import styles from "./styles.module.css"; + +const SafetySetting = () => { + return ( +
+
+ Безопасность +
+
+
+
+ +
+
+ +
+
+
+
+ ); +}; + +export default SafetySetting; diff --git a/src/components/SafetySetting/styles.module.css b/src/components/modals/UserSettingModal/SafetySetting/styles.module.css similarity index 64% rename from src/components/SafetySetting/styles.module.css rename to src/components/modals/UserSettingModal/SafetySetting/styles.module.css index 1ee5629..605abe4 100644 --- a/src/components/SafetySetting/styles.module.css +++ b/src/components/modals/UserSettingModal/SafetySetting/styles.module.css @@ -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; } diff --git a/src/components/ThemeSetting/ThemeSetting.tsx b/src/components/modals/UserSettingModal/ThemeSetting/ThemeSetting.tsx similarity index 84% rename from src/components/ThemeSetting/ThemeSetting.tsx rename to src/components/modals/UserSettingModal/ThemeSetting/ThemeSetting.tsx index 753ae87..5cb8fb0 100644 --- a/src/components/ThemeSetting/ThemeSetting.tsx +++ b/src/components/modals/UserSettingModal/ThemeSetting/ThemeSetting.tsx @@ -5,13 +5,14 @@ const ThemeSetting = () => {
Тема
- @@ -31,7 +33,8 @@ const ThemeSetting = () => { type="radio" className={styles.modernRadio} value="2" - name="a" + name="theme" + hidden /> diff --git a/src/components/ThemeSetting/styles.module.css b/src/components/modals/UserSettingModal/ThemeSetting/styles.module.css similarity index 100% rename from src/components/ThemeSetting/styles.module.css rename to src/components/modals/UserSettingModal/ThemeSetting/styles.module.css diff --git a/src/components/UserInfoSetting/UserInfoSetting.tsx b/src/components/modals/UserSettingModal/UserInfoSetting/UserInfoSetting.tsx similarity index 85% rename from src/components/UserInfoSetting/UserInfoSetting.tsx rename to src/components/modals/UserSettingModal/UserInfoSetting/UserInfoSetting.tsx index cebf2ac..71fcd8e 100644 --- a/src/components/UserInfoSetting/UserInfoSetting.tsx +++ b/src/components/modals/UserSettingModal/UserInfoSetting/UserInfoSetting.tsx @@ -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) => {
- +
); diff --git a/src/components/UserSettingModal/UserSettingModal.tsx b/src/components/modals/UserSettingModal/UserSettingModal.tsx similarity index 82% rename from src/components/UserSettingModal/UserSettingModal.tsx rename to src/components/modals/UserSettingModal/UserSettingModal.tsx index c74dda7..ae0950d 100644 --- a/src/components/UserSettingModal/UserSettingModal.tsx +++ b/src/components/modals/UserSettingModal/UserSettingModal.tsx @@ -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: "Профиль" | "Уведомления") { diff --git a/src/components/modals/UserSettingModal/UserSettingNotification/UserSettingNotification.tsx b/src/components/modals/UserSettingModal/UserSettingNotification/UserSettingNotification.tsx new file mode 100644 index 0000000..2295df4 --- /dev/null +++ b/src/components/modals/UserSettingModal/UserSettingNotification/UserSettingNotification.tsx @@ -0,0 +1,31 @@ +import Checkbox from "../../../Checkbox"; + +const UserSettingNotification = () => { + return ( +
+
+
+ Уведомления в браузере +
+ +
+
+
+ Уведомления по email +
+
+ +
+
Виды уведомлений
+
+ + +
+
+
+
+
+ ); +}; + +export default UserSettingNotification; diff --git a/src/icons/CheckboxIcon.tsx b/src/icons/CheckboxIcon.tsx new file mode 100644 index 0000000..5b6dcc3 --- /dev/null +++ b/src/icons/CheckboxIcon.tsx @@ -0,0 +1,21 @@ +const CheckboxIcon = (): JSX.Element => { + return ( + + + + ); +}; + +export default CheckboxIcon; diff --git a/src/icons/Company/Company.tsx b/src/icons/Company.tsx similarity index 100% rename from src/icons/Company/Company.tsx rename to src/icons/Company.tsx diff --git a/src/icons/CopyIcon/CopyIcon.tsx b/src/icons/CopyIcon.tsx similarity index 100% rename from src/icons/CopyIcon/CopyIcon.tsx rename to src/icons/CopyIcon.tsx diff --git a/src/icons/CrossIcon/CrossIcon.tsx b/src/icons/CrossIcon.tsx similarity index 100% rename from src/icons/CrossIcon/CrossIcon.tsx rename to src/icons/CrossIcon.tsx diff --git a/src/icons/CrossIcon/test.json b/src/icons/CrossIcon/test.json deleted file mode 100644 index c0b4989..0000000 --- a/src/icons/CrossIcon/test.json +++ /dev/null @@ -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" } -} diff --git a/src/icons/Exit/Exit.tsx b/src/icons/Exit.tsx similarity index 100% rename from src/icons/Exit/Exit.tsx rename to src/icons/Exit.tsx diff --git a/src/icons/IconWrapper/IconWrapper.tsx b/src/icons/IconWrapper.tsx similarity index 70% rename from src/icons/IconWrapper/IconWrapper.tsx rename to src/icons/IconWrapper.tsx index 32948cc..1392ef0 100644 --- a/src/icons/IconWrapper/IconWrapper.tsx +++ b/src/icons/IconWrapper.tsx @@ -6,7 +6,10 @@ interface IconProps { const IconWrapper = ({ children, className, onClick }: IconProps) => { return ( -
+
{children}
); diff --git a/src/icons/IsNotificationReadIcon/IsNotificationReadIcon.tsx b/src/icons/IsNotificationReadIcon.tsx similarity index 100% rename from src/icons/IsNotificationReadIcon/IsNotificationReadIcon.tsx rename to src/icons/IsNotificationReadIcon.tsx diff --git a/src/icons/MoreIcon.tsx b/src/icons/MoreIcon.tsx new file mode 100644 index 0000000..ec25d90 --- /dev/null +++ b/src/icons/MoreIcon.tsx @@ -0,0 +1,17 @@ +function MoreIcon() { + return ( + + + + + + ); +} + +export default MoreIcon; diff --git a/src/icons/Notification/Notification.tsx b/src/icons/Notification.tsx similarity index 100% rename from src/icons/Notification/Notification.tsx rename to src/icons/Notification.tsx diff --git a/src/icons/Setting/Setting.tsx b/src/icons/Setting.tsx similarity index 100% rename from src/icons/Setting/Setting.tsx rename to src/icons/Setting.tsx diff --git a/src/icons/SystemNotificationIcon/SystemNotificationIcon.tsx b/src/icons/SystemNotificationIcon.tsx similarity index 100% rename from src/icons/SystemNotificationIcon/SystemNotificationIcon.tsx rename to src/icons/SystemNotificationIcon.tsx diff --git a/yarn.lock b/yarn.lock index 74906be..1165bfd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -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==