Binary files /dev/null and b/public/svg/copy/Bold-dark.png differ Binary files /dev/null and b/public/svg/copy/Bold.png differ Binary files /dev/null and b/public/svg/copy/Center-dark.png differ Binary files /dev/null and b/public/svg/copy/Center.png differ Binary files /dev/null and b/public/svg/copy/Italic-dark.png differ Binary files /dev/null and b/public/svg/copy/Italic.png differ Binary files /dev/null and b/public/svg/copy/Left-dark.png differ Binary files /dev/null and b/public/svg/copy/Left.png differ Binary files /dev/null and b/public/svg/copy/Ordered-dark.png differ Binary files /dev/null and b/public/svg/copy/Ordered.png differ Binary files /dev/null and b/public/svg/copy/Redo-dark.png differ Binary files /dev/null and b/public/svg/copy/Redo.png differ Binary files /dev/null and b/public/svg/copy/Right-dark.png differ Binary files /dev/null and b/public/svg/copy/Right.png differ Binary files /dev/null and b/public/svg/copy/Underline-dark.png differ Binary files /dev/null and b/public/svg/copy/Underline.png differ Binary files /dev/null and b/public/svg/copy/Undo-dark.png differ Binary files /dev/null and b/public/svg/copy/Undo.png differ Binary files /dev/null and b/public/svg/copy/Unordered-dark.png differ Binary files /dev/null and b/public/svg/copy/Unordered.png differ @@ -0,0 +1,24 @@ + + + + \ No newline at end of file Binary files /dev/null and b/public/spin-spinning.gif differ @@ -1,15 +0,0 @@ -import { Template } from '@/src/domains/copywrite/proxy/types/template' - -export const emptyTemplate: Template = { - id: 1000, - title: 'Пустой шаблон', - content: '', - keywords: [], - tov: '', - language: '', - theme: '', - resources_urls: [], - picture: '123', - target_audience: '', - description: '', -} @@ -1,6 +0,0 @@ -import { ContentState, EditorState } from 'draft-js' - -export const toEditorState = (text: string) => { - const newContentState = ContentState.createFromText(text) - return EditorState.createWithContent(newContentState) -} @@ -1,13 +0,0 @@ -export interface Template { - id: number - title: string - description: string - picture: string - theme: string - content: string - target_audience: string - resources_urls: string[] - keywords: string[] - tov: string - language: string -} @@ -1,34 +0,0 @@ -import axios from 'axios' - -import { Template } from '@/src/domains/copywrite/proxy/types/template' -import { API_URL } from '@/src/shared/lib/constants' -import { Message } from '@/src/shared/lib/types/model' - -export class CopywriteProxy { - token?: string - - constructor(token: string | undefined) { - this.token = token - } - - static async getGeneration(token?: string): Promise { - const { data } = await axios.get(API_URL + '/copywrite/', { - headers: { Authorization: `Bearer ${token}` }, - }) - return data - } - - static async getTemplates(token?: string): Promise { - const { data } = await axios.get(API_URL + '/copywrite/templates/', { - headers: { Authorization: `Bearer ${token}` }, - }) - return data - } - - static async createTemplates(token?: string): Promise { - const { data } = await axios.post(API_URL + '/copywrite/templates/', { - headers: { Authorization: `Bearer ${token}` }, - }) - return data - } -} @@ -1,30 +0,0 @@ -import React from 'react' -import { Typography } from '@mui/material' - -import { Input, Slider } from '@/src/shared' - -import { FiltersProps } from './types' - -export function Filters({ - strength, - setStrength, - upscale, - setUpscale, - negative_prompt, - num_inference_steps, - guidance_scale, - setGuidanceScale, - setNegative_prompt, - setSteps, -}: FiltersProps) { - return ( - <> - - - - - Запрос для исключения из генерации - - > - ) -} @@ -1,17 +0,0 @@ -import { ChangeEvent } from 'react' - -export interface Setting { - strength: number - upscale: number - negative_prompt: string - num_inference_steps: number - guidance_scale: number -} - -export interface FiltersProps extends Setting { - setStrength: (e: Event, cur: number | number[]) => void - setUpscale: (e: Event, cur: number | number[]) => void - setGuidanceScale: (e: Event, cur: number | number[]) => void - setNegative_prompt: (e: ChangeEvent) => void - setSteps: (e: Event, cur: number | number[]) => void -} @@ -1,36 +0,0 @@ -import React from 'react' -import { Stack, Typography } from '@mui/material' - -import { Input, Slider } from '@/src/shared' -import { SelectUI } from '@/src/shared/ui/select' - -import { Filters } from './types' - -const sizes = [128, 256, 384, 448, 512, 576, 640, 704, 768, 832, 896, 960, 1024] - -export function EpicPhotoFilters({ - guidance_scale, - height, - negative_prompt, - num_inference_steps, - num_outputs, - setGuidance_scale, - setHeight, - setNegative_prompt, - setNum_inference_steps, - setNum_outputs, - setWidth, - width, -}: Filters) { - return ( - <> - - - - - - Запрос для исключения из генерации - - > - ) -} @@ -1,2 +0,0 @@ -export * from './epic-photo-filters' -export * from './types' @@ -1,20 +0,0 @@ -import { ChangeEvent, ChangeEventHandler } from 'react' -import { SelectChangeEvent } from '@mui/material' - -export interface Setting { - num_outputs: number - negative_prompt: string - width: number - height: number - num_inference_steps: number - guidance_scale: number -} - -export interface Filters extends Setting { - setWidth: (e: SelectChangeEvent) => void - setHeight: (e: SelectChangeEvent) => void - setNum_outputs: (e: Event, cur: number | number[]) => void - setNum_inference_steps: (e: Event, cur: number | number[]) => void - setGuidance_scale: (e: Event, cur: number | number[]) => void - setNegative_prompt: (e: ChangeEvent) => void -} @@ -1,2 +0,0 @@ -export * from './kandinsky-filters' -export * from './types' @@ -1,76 +0,0 @@ -import React from 'react' -import { Box, Typography } from '@mui/material' - -import { Input, Slider, SwitchCustom } from '@/src/shared' -import { SelectUI } from '@/src/shared/ui/select' - -import { Filters } from './types' - -export function KandinskyFilters({ - height, - isTranslate, - negativePrompt, - num_outputs, - setHeight, - setNegative_prompt, - setNumber, - setSteps, - setWidth, - steps, - width, - setIsTranslate, -}: Filters) { - return ( - <> - Настройки - - - - - - - - - - - - - - - - Переводить запрос - - - - - - - Запрос для исключения из генерации - - - - > - ) -} @@ -1,20 +0,0 @@ -import { ChangeEvent } from 'react' -import { SelectChangeEvent } from '@mui/material' - -export interface Setting { - steps: number - num_outputs: number - width: number - height: number - isTranslate: boolean - negativePrompt: string -} - -export interface Filters extends Setting { - setWidth: (e: SelectChangeEvent) => void - setHeight: (e: SelectChangeEvent) => void - setSteps: (e: Event, cur: number | number[]) => void - setNumber: (e: Event, cur: number | number[]) => void - setNegative_prompt: (e: ChangeEvent) => void - setIsTranslate: () => void -} @@ -1,33 +0,0 @@ -import React from 'react' -import { Typography } from '@mui/material' - -import { Input, Slider } from '@/src/shared' -import { SelectUI } from '@/src/shared/ui/select' - -import { FiltersProps } from './types' - -const sizes = [384, 512, 576, 640, 704, 768] - -export function Filters({ - height, - negative_prompt, - num_inference_steps, - num_outputs, - setHeight, - setNegative_prompt, - setNumOutputs, - setSteps, - setWidth, - width, -}: FiltersProps) { - return ( - <> - - - - - Запрос для исключения из генерации - - > - ) -} @@ -1,2 +0,0 @@ -export * from './filters' -export * from './types' @@ -1,18 +0,0 @@ -import { ChangeEvent } from 'react' -import { SelectChangeEvent } from '@mui/material' - -export interface Setting { - width: number - height: number - num_outputs: number - negative_prompt: string - num_inference_steps: number -} - -export interface FiltersProps extends Setting { - setWidth: (e: SelectChangeEvent) => void - setHeight: (e: SelectChangeEvent) => void - setNumOutputs: (e: Event, cur: number | number[]) => void - setSteps: (e: Event, cur: number | number[]) => void - setNegative_prompt: (e: ChangeEvent) => void -} @@ -1,12 +0,0 @@ -export const costModel: any = { - 'gpt-3.5-turbo': 0.0017, - 'gpt-3.5-turbo-16k': 0.00255, - 'text-davinci-003': 0.017, - 'text-curie-001': 0.0017, - 'text-babbage-001': 0.000425, - 'text-ada-001': 0.000034, - 'gpt-4': 0.01785, - 'gpt-4-32k': 0.0255, -} - -export const textTooltipCalculating = 'Столько токенов спишется за ваш текущий запрос.' @@ -1,8 +0,0 @@ -const price = { - '1024x1024': 8.5, - '512x512': 7.65, - '256x256': 6.8, -} -export const calculatingDalle = (count: number, quality: '1024x1024' | '512x512' | '256x256') => { - return price[quality] * count -} @@ -1,59 +0,0 @@ -import React from 'react' -import { encoding_for_model } from '@dqbd/tiktoken' - -import { costModel } from '@/src/features/calculation-tokens-gpt/lib/constants' -import { calculatingDalle } from '@/src/features/calculation-tokens-gpt/model/calculating-dalle' -import { ImessageContext } from '@/src/shared/lib/types/types-gpt' -import { TypeModelGPT, typeModels } from '@/src/widgets/filters-gpt/lib/constants' - -const getFullModelTypeName = (name: string): TypeModelGPT => { - return typeModels.filter((el) => el.key === name)[0].value as TypeModelGPT -} - -const getTransformPrice = (price: number, isGpt: boolean = false) => { - if (price === 0) { - return '0' - } - - return price < 1 ? ' < 1' : `${isGpt ? '≈' : ''} ${price.toFixed(2).replace('.', ',')}` -} - -const checkIsAdditional = (model: string, isAdditional?: boolean): any => { - if (model === 'gpt-3.5-turbo') { - return isAdditional ? 'gpt-3.5-turbo-16k' : model - } - - if (model === 'gpt-4') { - return isAdditional ? 'gpt-4-32k' : model - } - - return model -} -export const useCalculating = ( - model: 'gpt' | 'dalle' | 'sd', - count?: number, - quality?: any, - prompt?: string, - gptType?: TypeModelGPT, - isAdditionalCtx?: boolean, - context?: { message: string; uid: string }[] -): string => { - if (model === 'dalle') { - return getTransformPrice(calculatingDalle(count as number, quality)) - } - - // eslint-disable-next-line react-hooks/rules-of-hooks - const modelFullName = React.useMemo(() => getFullModelTypeName(gptType as TypeModelGPT), [gptType]) - - // eslint-disable-next-line react-hooks/rules-of-hooks - const encoding = React.useMemo(() => encoding_for_model(modelFullName), [gptType]) - - const tokens = - context?.length === 0 - ? encoding.encode(prompt as string).length - : encoding.encode((prompt as string) + context?.map((el) => el.message).toString()).length - - const price = prompt ? costModel[checkIsAdditional(modelFullName, isAdditionalCtx)] * tokens + 0.1 : 0 - - return getTransformPrice(price, true) -} @@ -1,89 +0,0 @@ -import React, { memo } from 'react' -import { Box, Tooltip } from '@mui/material' -import Typography from '@mui/material/Typography' -import Image from 'next/image' - -import { useCalculating } from '@/src/features/calculation-tokens-gpt/model/use-calculating' -import TooltipCalculating from '@/src/features/calculation-tokens-gpt/ui/tooltip-calculating' -import { useAppSelector } from '@/src/main/store/store' -import { baseColor } from '@/src/shared/lib/constants/colors' -import { ImessageContext } from '@/src/shared/lib/types/types-gpt' -import { TypeModelGPT } from '@/src/widgets/filters-gpt/lib/constants' - -interface ICalculationTokenProps { - model: 'gpt' | 'sd' | 'dalle' - quality?: string - count?: number - prompt?: string - isAdditional?: boolean - gptType?: TypeModelGPT - context?: { message: string; uid: string }[] -} - -export const Calculation: React.FC = memo(({ prompt, gptType, context, isAdditional, count, quality, model }) => { - const price = useCalculating(model, count, quality, prompt, gptType, isAdditional, context) - - const theme = useAppSelector((state) => state.theme.theme) - - return ( - } - componentsProps={{ - tooltip: { - sx: { - '&.MuiTooltip-tooltip': { - '&.MuiTooltip-tooltipPlacementBottom': { - marginTop: '2px', - }, - '&.MuiTooltip-tooltipPlacementTop': { - marginBottom: '7px', - }, - '&.MuiTooltip-tooltipPlacementLeft': { - marginRight: '24px', - }, - }, - bgcolor: theme === 'light' ? 'white' : '#4B4B4B', - borderRadius: '10px', - '& .MuiTooltip-arrow': { - color: theme === 'light' ? 'white' : '#4B4B4B', - }, - boxShadow: '0px 0px 4px rgba(0, 0, 0, 0.04), 0px 4px 32px rgba(0, 0, 0, 0.16)', - }, - }, - }} - arrow - > - - - - {price} - - - - ) -}) - -Calculation.displayName = 'Calculation' @@ -1,39 +0,0 @@ -import React from 'react' -import { Box } from '@mui/material' -import Typography from '@mui/material/Typography' - -import { textTooltipCalculating } from '@/src/features/calculation-tokens-gpt/lib/constants' -import { useAppSelector } from '@/src/main/store/store' - -const TooltipCalculating = ({ model = 'dalle' }: { model?: 'gpt' | 'dalle' | 'sd' }) => { - const theme = useAppSelector((state) => state.theme.theme) - - return ( - - - {textTooltipCalculating} - - - {model === 'gpt' && ( - - Фактическое значение может немного отличаться - - )} - - ) -} - -export default TooltipCalculating @@ -1 +0,0 @@ -export { Calculation } from './ui/calculation' @@ -37,6 +37,7 @@ export function useChats(model: string): ChatsReturn { const { data } = useSession() useEffect(() => { + ;[][1] if (model && data?.access) { getAllChats(model, data?.access).then((res) => { setChats(res) @@ -8,6 +8,7 @@ interface IProps { setModal: Dispatch> image: string } + export default function FullScreenModal({ modal, setModal, image }: IProps) { const isSvg = image.includes('.svg') @@ -1,6 +1,6 @@ .close_block{ position: absolute; - z-index: 105; + z-index: 110; cursor: pointer; right: 25px; top: 25px; @@ -1,5 +1,5 @@ import React from 'react' -import { Box, Typography } from '@mui/material' +import { Avatar, Box, Typography } from '@mui/material' import Link from 'next/link' import styles from '@/src/shared/styles/chats-bot-pages.module.scss' @@ -10,11 +10,16 @@ export default function Title(props: any) { {' '} - {props.type} •{' '} + {props.linkBack && props.linkBack !== '' ? ( + {props.type} + ) : ( + {props.type} + )} •{' '} - {props.title} + {props.title} + {props.icon && } {props.title} @@ -56,10 +56,3 @@ export const options: Options = { doneLabel: 'Готово', disableInteraction: true, } - -export const responseGPT = - 'Для нахождения минимального элемента в массиве предлагаю написать собственную функцию с использованием функции высшего порядка reduce и стандартного метода Math.min():\n' + - '\n' + - 'const numbers = [-94, 87, 12, 0, -67, 32];\n' + - 'const min = (values) => values.reduce((x, y) => Math.min(x, y));\n' + - 'console.log(min(numbers)); // => -94\n' @@ -1,44 +0,0 @@ -import { createAsyncThunk, createSlice } from '@reduxjs/toolkit' - -import { CopywriteProxy } from '@/src/domains/copywrite/proxy/copywrite-proxy' -import { Template } from '@/src/domains/copywrite/proxy/types/template' -import { Message } from '@/src/shared/lib/types/model' - -export interface Theme { - templates: Template[] | null - generation: Message[] | null -} - -const initialState: Theme = { - templates: null, - generation: null, -} - -export const loadTemplates = createAsyncThunk('copywrite/loadTemplates', async (token?: string): Promise => { - return await CopywriteProxy.getTemplates(token) -}) - -export const loadGeneration = createAsyncThunk('copywrite/loadGeneration', async (token?: string): Promise => { - return await CopywriteProxy.getGeneration(token) -}) - -export const copySlice = createSlice({ - name: 'copySlice', - initialState, - reducers: { - loadTemplates: (state, action) => {}, - }, - extraReducers: (builder) => { - builder - .addCase(loadTemplates.fulfilled, (state, action) => { - state.templates = action.payload - }) - .addCase(loadGeneration.fulfilled, (state, action) => { - state.generation = action.payload - }) - }, -}) - -export const {} = copySlice.actions - -export default copySlice.reducer @@ -0,0 +1,98 @@ +import { createSlice } from '@reduxjs/toolkit' +import { EditorState } from 'draft-js' + +import { CopywriteDefaultVariables, CopywriteOverrideVariables } from '@/src/widgets/copy/api/models' +import { getHtmlText } from '@/src/widgets/copy/lib/getEditorHtml' + +export interface Theme { + output_content: string | null + input_content: string + variables: { [p: string]: string | null }[] + defaultVariables: CopywriteDefaultVariables[] | [] + overridenVariables: CopywriteOverrideVariables[] | [] +} + +const initialState: Theme = { + output_content: null, + input_content: '', + variables: [], + defaultVariables: [], + overridenVariables: [], +} + +export const copyStore = createSlice({ + name: 'copyStore', + initialState, + reducers: { + // OUTPUT CONTENT + setNewOutputContent: (state, action: { payload: string }) => { + state.output_content = action.payload + }, + addOutputContent: (state, action: { payload: string }) => { + state.output_content += action.payload + }, + + // INPUT CONTENT + setTextInputContent: (state, action: { payload: string }) => { + state.input_content = action.payload + }, + setEditorInputContent: (state, action: { payload: EditorState | undefined }) => { + if (action.payload !== undefined) state.output_content = getHtmlText(action.payload) + }, + + // VARIABLES + setAllVariables: (state, action: { payload: { [p: string]: string | null }[] }) => { + state.variables = action.payload + }, + updateVariable: (state, action: { payload: { id: string; value: string | null } }) => { + state.variables = state.variables.map((el) => { + if (el.id === action.payload.id) { + el.value = action.payload.value + } + return el + }) + }, + createVariables: (state) => {}, + + // DEFAULT VARIABLES + setDefaultVariables: (state, action: { payload: CopywriteDefaultVariables[] }) => { + state.defaultVariables = action.payload + }, + updateDefaultVariables: (state, action: { payload: { action: 'add' | 'remove'; variable: CopywriteDefaultVariables } }) => { + if (action.payload.action === 'add') { + state.defaultVariables = [...state.defaultVariables, action.payload.variable] + } + if (action.payload.action === 'remove') { + state.defaultVariables = state.defaultVariables.filter((el) => el.id !== action.payload.variable.id) + } + }, + + // OVERRIDE VARIABLES + setOverrideVariables: (state, action: { payload: CopywriteOverrideVariables[] }) => { + state.overridenVariables = action.payload + }, + updateOverrideVariables: (state, action: { payload: { action: 'add' | 'remove'; variable: CopywriteOverrideVariables } }) => { + if (action.payload.action === 'add') { + state.overridenVariables = [...state.overridenVariables, action.payload.variable] + } + if (action.payload.action === 'remove') { + state.overridenVariables = state.overridenVariables.filter((el) => el.variable !== action.payload.variable.id) + } + }, + }, +}) + +export const { + setNewOutputContent, + addOutputContent, + setTextInputContent, + setEditorInputContent, + updateVariable, + setAllVariables, + updateDefaultVariables, + setDefaultVariables, + setOverrideVariables, + updateOverrideVariables, +} = copyStore.actions + +export default copyStore.reducer @@ -1,72 +0,0 @@ -import { Dispatch, SetStateAction, useEffect, useMemo, useState } from 'react' -import { useRouter } from 'next/router' -import { useSession } from 'next-auth/react' - -import { emptyTemplate } from '@/src/domains/copywrite/lib/constants' -import { Template } from '@/src/domains/copywrite/proxy/types/template' -import { loadGeneration, loadTemplates } from '@/src/features/use-copy/copy-slice' -import { useAppDispatch, useAppSelector } from '@/src/main/store/store' -import { Message } from '@/src/shared/lib/types/model' - -interface UseCopy { - currentTemplate: Template | null - generations: Message[] | null - pickGeneration: Message | null - setPickGeneration: Dispatch> - createEmpty: () => void -} - -export const useCopy = (): UseCopy => { - const [pickGeneration, setPickGeneration] = useState(null) - - const { data } = useSession() - - const { query, push, pathname } = useRouter() - - const templates = useAppSelector((state) => state.copy.templates) - - const generations = useAppSelector((state) => state.copy.generation) - - const dispatch = useAppDispatch() - - const getId = () => { - const id = query['id'] - - if (id) { - return Number(id) - } - } - - const createEmpty = () => { - setPickGeneration({ - content: '', - uid: '123', - created_at: '123', - file: null, - info: null, - from_model: false, - elapsed_time: '12', - is_favourite: false, - is_sent: false, - }) - } - - useEffect(() => { - if (data?.access) { - dispatch(loadTemplates(data.access)) - dispatch(loadGeneration(data.access)) - } - }, [data?.access]) - - const currentTemplate = useMemo(() => { - const id = getId() - const foundTemplate = templates?.find((el) => el.id === id) - if (foundTemplate) { - return foundTemplate - } - - return emptyTemplate - }, [templates]) - - return { currentTemplate, generations, pickGeneration, setPickGeneration, createEmpty } -} @@ -1,166 +0,0 @@ -import { Dispatch, SetStateAction, useEffect, useState } from 'react' -import axios, { AxiosError, AxiosResponse } from 'axios' -import { ContentState, EditorState } from 'draft-js' -import { useSession } from 'next-auth/react' - -import { Template } from '@/src/domains/copywrite/proxy/types/template' -import { loadGeneration } from '@/src/features/use-copy/copy-slice' -import { useAppDispatch } from '@/src/main/store/store' -import { useShowData } from '@/src/shared' -import { API_URL } from '@/src/shared/lib/constants' -import { Message, MessageSend } from '@/src/shared/lib/types/model' - -type Languages = 'ru' | 'en' | 'it' | 'fr' -type LanguagesText = 'Русский' | 'Английский' | 'Итальянский' | 'Французский' - -export const langs: Record = { - Русский: 'ru', - Английский: 'en', - Итальянский: 'it', - Французский: 'fr', -} - -export const languages = { ...langs, Немецкий: 'de' } -export const target_audiences = ['Вся', '18+', '21+', '30+', '14-20', '35-40'] -export const tovs = ['Нейтральный', 'Спокойный', 'Агрессивный', 'Серьезный', 'Провокационный', 'Остроумный', 'Наставнический', 'Дружелюбный'] - -type Setting = Pick - -type UseTemplate = { - text: EditorState - isLoading: boolean - - lang: string - targetAudiences: string - tov: string - theme: string - content: string - keywords: string[] - resource_urls: string[] - - setLang: Dispatch> - setTargetAudiences: Dispatch> - setTov: Dispatch> - setTheme: Dispatch> - setContent: Dispatch> - setKeywords: Dispatch> - setResourceUrls: Dispatch> - - clearSetting: () => void - createText: () => void - onEditorChange: (a: any) => void -} - -export const useTemplate = (currentTemplate: Template | null): UseTemplate => { - const [text, setText] = useState(EditorState.createEmpty()) - - const onEditorChange = (editorState: any) => { - setText(editorState) - } - - const [isLoading, setIsLoading] = useState(false) - - const dispatch = useAppDispatch() - - const { showError } = useShowData() - - const { data: session } = useSession() - - const [lang, setLang] = useState(() => { - const a = Object.entries(languages) - - const b = a.find(([key, value]) => value === currentTemplate?.language) - - if (b) { - return b[0] - } else { - return a[0][0] - } - }) - - const [targetAudiences, setTargetAudiences] = useState(currentTemplate?.target_audience || target_audiences[0]) - - const [tov, setTov] = useState(currentTemplate?.tov || tovs[0]) - - const [theme, setTheme] = useState(currentTemplate?.theme || '') - - const [content, setContent] = useState(currentTemplate?.content || '') - - const [keywords, setKeywords] = useState(currentTemplate?.keywords || []) - - const [resource_urls, setResourceUrls] = useState(currentTemplate?.resources_urls || []) - - const clearSetting = () => { - setLang('Русский') - setTargetAudiences(currentTemplate?.target_audience || target_audiences[0]) - setTov(currentTemplate?.tov || tovs[0]) - setTheme(currentTemplate?.theme || '') - setKeywords(currentTemplate?.keywords || []) - setResourceUrls(currentTemplate?.resources_urls || []) - } - - const createText = async () => { - const dataForSend: MessageSend = { - content: content, - file: null, - info: { - keywords, - language: Object.entries(languages).find(([key, value]) => key === lang)![1], - tov, - resources_urls: resource_urls, - target_audience: targetAudiences, - theme: theme, - }, - } - - if (!session?.access) { - showError('У вас неактивный токен, попробуйте перезайти в аккаунт', true) - return - } - - try { - setIsLoading(true) - const { data } = await axios.post>(API_URL + '/copywrite/', dataForSend, { - withCredentials: true, - headers: { - Authorization: `Bearer ${session?.access}`, - }, - }) - setIsLoading(false) - - const newContentState = ContentState.createFromText(data[0].content) - - setText(EditorState.createWithContent(newContentState)) - dispatch(loadGeneration(session?.access)) - } catch (err: any) { - setIsLoading(false) - return { - error: true, - message: 'Произошла ошибка при выполнении запроса', - details: err as AxiosError, - } - } - } - - return { - tov, - setTov, - lang, - setLang, - clearSetting, - createText, - isLoading, - keywords, - setKeywords, - setResourceUrls, - resource_urls, - setTargetAudiences, - targetAudiences, - setTheme, - text, - onEditorChange, - theme, - setContent, - content, - } -} @@ -4,7 +4,7 @@ import Switch from '@mui/material/Switch' import { setParams } from '@/src/main/store/model-parametres-store' import { useAppDispatch } from '@/src/main/store/store' -import TooltipModelTypes from '@/src/widgets/filters-gpt/ui/tooltip-model-types' +import TooltipModelTypes from '@/src/shared/ui/tooltip-model-types' interface IProps { name: string @@ -8,7 +8,7 @@ import { setParams } from '@/src/main/store/model-parametres-store' import { useAppDispatch } from '@/src/main/store/store' import { InputStyleDark, InputStyleLight } from '@/src/shared' import { useThemeAndDevice } from '@/src/shared/lib/hooks' -import TooltipModelTypes from '@/src/widgets/filters-gpt/ui/tooltip-model-types' +import TooltipModelTypes from '@/src/shared/ui/tooltip-model-types' interface IProps { title: string @@ -21,7 +21,7 @@ interface IProps { setNewParam: (payload: { [p: string]: string | number | number[] | boolean }) => void } -export const InputFilter = ({ filters, item_key, values, title, description, setNewParam }: IProps) => { +export const InputFilter = ({ filters, item_key, values, title, description = '', setNewParam }: IProps) => { const { theme } = useThemeAndDevice() const [value, setValue] = React.useState(values?.default || '') @@ -5,7 +5,7 @@ import { MenuItem, Select, SelectChangeEvent, Stack, Typography } from '@mui/mat import { setParams } from '@/src/main/store/model-parametres-store' import { useAppDispatch, useAppSelector } from '@/src/main/store/store' import { baseColor } from '@/src/shared/lib/constants/colors' -import TooltipModelTypes from '@/src/widgets/filters-gpt/ui/tooltip-model-types' +import TooltipModelTypes from '@/src/shared/ui/tooltip-model-types' interface IProps { selects: { availables: string[]; default: any; end: number; start: number; step: number } @@ -3,7 +3,7 @@ import * as React from 'react' import { setParams } from '@/src/main/store/model-parametres-store' import { useAppDispatch } from '@/src/main/store/store' import { Slider as Sl } from '@/src/shared' -import TooltipModelTypes from '@/src/widgets/filters-gpt/ui/tooltip-model-types' +import TooltipModelTypes from '@/src/shared/ui/tooltip-model-types' interface IProps { title: string @@ -15,10 +15,6 @@ export type CardProps = { } const ChatCard = ({ text, icon, title, uid, slug, accessed_models }: CardProps) => { - useEffect(() => { - console.log(accessed_models) - }, [accessed_models]) - return ( @@ -5,7 +5,7 @@ import { MenuItem, Select, SelectChangeEvent, Stack, Typography } from '@mui/mat import { useAppSelector } from '@/src/main/store/store' import { IModelVersions } from '@/src/shared/api/models/models' import { baseColor } from '@/src/shared/lib/constants/colors' -import TooltipModelTypes from '@/src/widgets/filters-gpt/ui/tooltip-model-types' +import TooltipModelTypes from '@/src/shared/ui/tooltip-model-types' interface ISelect { value: string @@ -86,6 +86,7 @@ function Chat({ modelType={modelType} deleteMessage={deleteMessage} modelTitle={modelTitle} + loading={loading} /> li { + color: var(--new-ui-text-color) !important; + padding: 0 16px 0 12px !important; +} - color: inherit !important; +.rdw-dropdown-optionwrapper > li:hover{ + background-color:var(--new-ui-gray-color) !important +} + +.rdw-dropdownoption-active{ + background: var(--new-ui-gray-color) !important } .rdw-dropdown-optionwrapper:hover { - box-shadow: none; + border: none !important; + box-shadow: none !important; color: inherit !important; } +.rdw-dropdown-carettoclose{ + border-radius: 5px !important; + border-bottom-color: var(--new-ui-gray-color) !important; +} + +.rdw-dropdown-carettoopen{ + border-radius: 5px !important; + border-top-color: var(--new-ui-gray-color) !important; +} + +.rdw-text-align-wrapper{ + margin: 0 !important; +} + +.rdw-list-wrapper{ + margin: 0 !important; +} + +.rdw-history-wrapper{ + margin: 0 !important; +} + +.rdw-block-wrapper{ + margin: 0 !important; +} + .border-bottom-1px-gray { border-bottom: 1px solid #EFF0F2 !important; } @@ -394,7 +454,8 @@ textarea { .smallScroll::-webkit-scrollbar-track { background: initial; - margin: 21px 0; + /*margin: 21px 0;*/ + margin: 5px 0; } .smallScroll::-webkit-scrollbar-thumb { @@ -416,4 +477,83 @@ textarea { transform: rotate(0deg); transition: all; transition-duration: 250ms; +} + + +/*COPY*/ +.toolbarClassName{ + align-items: center; + gap: 15px; +} +.wrapperClassName{ + +} + +.editorClassName{ + border: 1px solid transparent; + transition: border-color 0.3s; + cursor: text; +} + +.editorClassName div:focus{ + outline: none !important; + border-color: transparent !important; +} + +.editorClassName div .public-DraftStyleDefault-block{ + display: inline-block; + padding:0 1px; + margin: 0.5em 0 !important; +} + +.public-DraftEditor-content{ + overflow-y: scroll; + max-height: calc(75vh - 200px) ; + + @media (max-width: 768px) { + max-height: calc(70vh - 200px) ; + } + +} + + +.public-DraftEditor-content::-webkit-scrollbar{ + height: 5px; + width: 2px; +} + +.public-DraftEditor-content::-webkit-scrollbar-track { + background: initial; + margin: 21px 0; +} + +.public-DraftEditor-content::-webkit-scrollbar-thumb { + background-color: rgba(217, 217, 217, 0.49); + border-radius: 5px; +} + +.inline{ + gap:3px; + margin: 0 !important; +} + +.inline-btn{ + width: 12px; + height: 25px !important; + margin: 0 !important; + padding: 0 !important; +} + +.rdw-option-active{ + background: rgba(229, 229, 229, 0.18) !important; + -webkit-box-shadow: inset 0 0 5px #c1c1c1 !important; + -moz-box-shadow: inset 0 0 5px #c1c1c1 !important; + box-shadow: inset 0 0 5px #c1c1c1 !important; + outline: none !important; +} + +.copy-color{ + color:var(--copy-color); + border-color: var(--copy-border); + } \ No newline at end of file @@ -94,7 +94,7 @@ const Page: React.FC = ({ deviceType, deviceOs }) => { const resetParams = () => { if (botParams) { dispatch(setParametres({})) - if (botParams.versions.length !== 0) { + if (botParams.versions?.length !== 0) { setVersion(botParams.versions[0].slug) dispatch( setParametres( @@ -209,7 +209,7 @@ const Page: React.FC = ({ deviceType, deviceOs }) => { /> {desktop && ( - {botParams?.versions && botParams.versions.length !== 0 && ( + {botParams?.versions && botParams.versions?.length !== 0 && ( <> ВЕРСИИ @@ -268,7 +268,7 @@ const Page: React.FC = ({ deviceType, deviceOs }) => { {!desktop && ( - {botParams?.versions && botParams.versions.length !== 0 && ( + {botParams?.versions && botParams.versions?.length !== 0 && ( <> = ({ deviceType }) => { return ( Чат-боты + {bots ? ( bots.map((item, idx) => ( @@ -1,235 +0,0 @@ -import * as React from 'react' -import { useState } from 'react' -import { Stack, Typography } from '@mui/material' -import Box from '@mui/material/Box' -import Button from '@mui/material/Button' -import dynamic from 'next/dynamic' -import Image from 'next/image' -import { getSession } from 'next-auth/react' - -import { toEditorState } from '@/src/domains/copywrite/lib/helper' -import { useCopy } from '@/src/features/use-copy/use-copy' -import { languages, target_audiences, tovs, useTemplate } from '@/src/features/use-copy/use-template' -import { Layout } from '@/src/main/layout' -import { Input, Loader, TooltipCustom } from '@/src/shared' -import { api } from '@/src/shared/api/endpoints' -import { getTypeDevice } from '@/src/shared/lib/helpers' -import { Message } from '@/src/shared/lib/types/model' -import { IDalleProps } from '@/src/shared/lib/types/types-dalle' -import { SelectUI } from '@/src/shared/ui/select' - -import Title from '../../features/title/title' - -import 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css' - -const toolbarOptions = { - options: ['inline', 'blockType', 'list', 'textAlign', 'history'], - inline: { - options: ['bold', 'italic', 'underline'], - }, - blockType: { - options: ['Normal', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'Blockquote'], - }, - fontSize: { - options: [12, 14, 16, 18, 24, 30, 36], - }, - fontFamily: { - options: ['Arial', 'Georgia', 'Impact', 'Tahoma', 'Times New Roman', 'Verdana'], - }, - list: { - options: ['unordered', 'ordered'], - }, - textAlign: { - options: ['left', 'center', 'right'], - }, -} - -export async function getServerSideProps(context: any): Promise<{ props: IDalleProps }> { - const device = getTypeDevice(context) - - const { req } = context - - const session = await getSession({ req }) - - const token = session?.access || null - - const favorites = await api.getFavoritesModel(token, session) - - return { - props: { - device, - token, - favorites, - }, - } -} - -const Create: React.FC = ({ device, token, favorites }) => { - const desktop = device === 'desktop' - - const [showGeneration, setShowGeneration] = useState(false) - - const [isCopy, setIsCopy] = useState(false) - - const copy = (text: string) => { - navigator.clipboard.writeText(text) - setIsCopy(true) - } - - const { currentTemplate, generations, pickGeneration, setPickGeneration, createEmpty } = useCopy() - - const { - tov, - lang, - setLang, - setTov, - setTargetAudiences, - targetAudiences, - setResourceUrls, - resource_urls, - setTheme, - theme, - keywords, - setKeywords, - createText, - text, - clearSetting, - isLoading, - content, - setContent, - onEditorChange, - } = useTemplate(currentTemplate) - - const onSetGeneration = (message: Message) => { - setPickGeneration(message) - onEditorChange(toEditorState(message.content)) - setShowGeneration(false) - } - - const Editor = dynamic(() => import('react-draft-wysiwyg').then((res) => res.Editor), { ssr: false }) - - const EditorWrap = (): JSX.Element | null => { - if (showGeneration) { - if (!generations || generations.length === 0) { - return null - } - - //@ts-ignore - return generations.map((el) => ( - onSetGeneration(el)} - display='flex' - justifyContent='space-between' - className='border-bottom-1px-gray' - sx={{ cursor: 'pointer' }} - padding='10px' - key={el.uid} - > - {el.content.slice(0, 60)}... - - copy(el.content)} src={'/svg/copy.svg'} width={22} height={22} alt={'copy'} /> - - - )) - } - - return ( - - ) - } - - return ( - - - - - - - {!showGeneration && ( - setShowGeneration(true)}> - Мои генерации - - )} - { - onEditorChange(toEditorState('')) - setShowGeneration(false) - }} - > - Пустой шаблон - - - - - - - Настройки генерации - - Ваш запрос - setContent(e.target.value)} /> - - - setTov(e.target.value)} list={tovs} /> - - - setLang(e.target.value)} list={Object.keys(languages)} /> - - - setTargetAudiences(e.target.value)} - list={target_audiences} - /> - - - Тема - setTheme(e.target.value)} /> - - - Ключевые слова (через запятую) - setKeywords(e.target.value.split(','))} /> - - - Ресурсы (ссылки, через запятую) - setResourceUrls(e.target.value.split(','))} /> - - - - Сбросить настройки - - - - {isLoading ? ( - - - - ) : ( - - Сгенерировать - - )} - - - - - ) -} - -export default Create @@ -1,79 +0,0 @@ -import * as React from 'react' -import { useEffect } from 'react' -import { Typography } from '@mui/material' -import Box from '@mui/material/Box' -import { getSession, useSession } from 'next-auth/react' - -import { loadTemplates } from '@/src/features/use-copy/copy-slice' -import { Layout } from '@/src/main/layout' -import { useAppDispatch, useAppSelector } from '@/src/main/store/store' -import { api } from '@/src/shared/api/endpoints' -import { getTypeDevice } from '@/src/shared/lib/helpers' -import { IDalleProps } from '@/src/shared/lib/types/types-dalle' - -import Card from './card' - -export async function getServerSideProps(context: any): Promise<{ props: IDalleProps }> { - const device = getTypeDevice(context) - - const { req } = context - - const session = await getSession({ req }) - - const token = session?.access || null - - const favorites = await api.getFavoritesModel(token, session) - - return { - props: { - device, - token, - favorites, - }, - } -} - -const CopyPage: React.FC = ({ device, token, favorites }) => { - const desktop = device === 'desktop' - - const { data } = useSession() - - const templates = useAppSelector((state) => state.copy.templates) - - const dispatch = useAppDispatch() - - useEffect(() => { - if (data?.access) { - dispatch(loadTemplates(data.access)) - } - }, [data?.access]) - - return ( - - Копирайтинг - - {templates?.map((el) => { - return ( - {}} - link={`/copy/create?id=${el.id}`} - isFavorite={false} - text={el.description} - title={el.title} - uid={el.id.toString()} - companies={''} - /> - ) - })} - - - ) -} - -export default CopyPage @@ -0,0 +1,180 @@ +import * as React from 'react' +import { useEffect, useState } from 'react' +import { useDispatch } from 'react-redux' +import { Box, Stack, Typography } from '@mui/material' +import Image from 'next/image' +import Link from 'next/link' +import { useRouter } from 'next/router' +import { useSession } from 'next-auth/react' + +import Title from '@/src/features/title/title' +import { setTextInputContent } from '@/src/features/use-copy/copy-store' +import { Layout } from '@/src/main/layout' +import { useAppSelector } from '@/src/main/store/store' +import { Error, useShowData } from '@/src/shared' +import { getTypeDevice } from '@/src/shared/lib/helpers' +import { getDeviceOs } from '@/src/shared/lib/helpers/get-type-device' +import { useBeforeUnload } from '@/src/shared/lib/hooks' +import { useChangeRouter } from '@/src/shared/lib/hooks/use-change-router' +import { Device, DeviceOs, IFuncProps } from '@/src/shared/lib/types/entities' +import { MobileSettingsDrawer } from '@/src/shared/ui/mobile-settings-drawer' +import { SettingsBlockMock } from '@/src/shared/ui/mocks/settings-block-mock' +import { CopyEndpoints } from '@/src/widgets/copy/api/copy-endpoints' +import { editorEndpoints } from '@/src/widgets/copy/api/editor-endpoints' +import { DraftRequestBody, EditorCopywrite } from '@/src/widgets/copy/api/models' +import { CopyButton } from '@/src/widgets/copy/ui/buttons/copy-button' +import { MobileButtons } from '@/src/widgets/copy/ui/buttons/mobile-buttons' +import { EditorWrap } from '@/src/widgets/copy/ui/editor-wrap' +import styles from '@/src/widgets/copy/ui/styles/copywrite.module.scss' + +import 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css' + +export async function getServerSideProps(context: any): Promise<{ props: { device: Device; deviceOs: DeviceOs } }> { + const device = getTypeDevice(context) + const deviceOs = getDeviceOs(context) + return { props: { device, deviceOs } } +} + +export default function Index({ device, deviceOs }: IFuncProps) { + const desktop = device === 'desktop' + const theme = useAppSelector((state) => state.theme.theme) + const input_content = useAppSelector((state) => state.copy.input_content) + const [isSettings, setIsSettings] = useState(false) + const [copywrite, setCopywrite] = useState(null) + const { push, query } = useRouter() + const { error, showError } = useShowData() + const { data } = useSession() + const dispatch = useDispatch() + const [isGenerateStart, setIsGenerateStart] = useState(false) + + const settingsHandler = (value: boolean) => { + setIsSettings(value) + } + + const startGenerateHandler = () => { + setIsGenerateStart(true) + if (data?.access && query['uuid'] !== undefined) { + const uuid = query['uuid'] + const req_body = { + input_content: input_content, + } + editorEndpoints.UpdateCopywriteContent(uuid, req_body, data?.access).then(() => { + CopyEndpoints.GenerateResponse(uuid, data?.access).then(() => { + setIsGenerateStart(false) + addQueryParams('resp') + }) + }) + } + } + + async function addNewUuid(uuid: string) { + await push({ + pathname: '/copywriting/editor', + query: { uuid }, + }) + } + + async function addQueryParams(mode: 'query' | 'resp') { + await push({ + pathname: `/copywriting/my/${query['uuid']}`, + query: { mode }, + }) + } + + const createDraftHandler = () => { + let req_body: DraftRequestBody = { + type: 'self', + } + CopyEndpoints.CreateDraft(req_body, 'self', data?.access).then((res) => { + if (res) addNewUuid(res?.id) + }) + } + + const saveEditorValue = (content: string) => { + if (data?.access && query['uuid'] !== undefined) { + const uuid = query['uuid'] + const req_body = { + input_content: content, + } + editorEndpoints.UpdateCopywriteContent(uuid, req_body, data?.access) + } + } + + useEffect(() => { + if (copywrite !== null) { + dispatch(setTextInputContent(copywrite.input_content ?? '')) + } + }, [copywrite]) + + useEffect(() => { + if (query['uuid'] !== undefined) { + if (data?.access) { + CopyEndpoints.GetCopywrite(query['uuid'], 'self', data.access).then((res) => { + if (res !== null) { + setCopywrite(res as EditorCopywrite) + } else { + createDraftHandler() + } + }) + } + } else { + createDraftHandler() + } + }, [query, data?.access]) + + return ( + + + + + + + + + + + + Мои генерации + + + + {/* copyText('123')} />*/} + {/**/} + {/* */} + {/**/} + + + {copywrite && ( + + )} + + + + + Сгенерировать + + + + + {!desktop && } + + + + ) +} @@ -0,0 +1,184 @@ +import * as React from 'react' +import { useEffect, useState } from 'react' +import { Box, Stack } from '@mui/material' +import { useRouter } from 'next/router' +import { useSession } from 'next-auth/react' + +import Title from '@/src/features/title/title' +import { addOutputContent, setDefaultVariables, setNewOutputContent, setOverrideVariables } from '@/src/features/use-copy/copy-store' +import { Layout } from '@/src/main/layout' +import { useAppDispatch } from '@/src/main/store/store' +import { Error, useShowData } from '@/src/shared' +import { getTypeDevice } from '@/src/shared/lib/helpers' +import { getDeviceOs } from '@/src/shared/lib/helpers/get-type-device' +import { Device, DeviceOs, IParams } from '@/src/shared/lib/types/entities' +import { MobileSettingsDrawer } from '@/src/shared/ui/mobile-settings-drawer' +import { SettingsBlockMock } from '@/src/shared/ui/mocks/settings-block-mock' +import { CopyEndpoints } from '@/src/widgets/copy/api/copy-endpoints' +import { editorEndpoints } from '@/src/widgets/copy/api/editor-endpoints' +import { Copywrite, DraftRequestBody, EditorCopywrite, TemplateType } from '@/src/widgets/copy/api/models' +import { CopyButton } from '@/src/widgets/copy/ui/buttons/copy-button' +import { MobileButtons } from '@/src/widgets/copy/ui/buttons/mobile-buttons' +import { GenerationBlock } from '@/src/widgets/copy/ui/generation/generation-block' +import styles from '@/src/widgets/copy/ui/styles/copywrite.module.scss' + +export async function getServerSideProps(context: any): Promise<{ + props: { device: Device; deviceOs: DeviceOs; uuid: string } +}> { + const device = getTypeDevice(context) + const deviceOs = getDeviceOs(context) + const { uuid } = context.params + + return { props: { device, deviceOs, uuid } } +} + +export default function Index({ device, deviceOs, uuid }: IParams) { + const desktop = device === 'desktop' + const [templateType, setTemplateType] = useState('template') + const [editor, setEditor] = useState(null) + const [copywrite, setCopywrite] = useState(null) + const [tab, setTab] = useState<'query' | 'resp' | null>(null) + const [isSettings, setIsSettings] = useState(false) + const dispatch = useAppDispatch() + const { push, query } = useRouter() + const { error, showError } = useShowData() + const { data } = useSession() + + const startGenerateHandler = () => { + if (data?.access) { + CopyEndpoints.GenerateResponse(uuid, data?.access).then(() => addQueryParams('resp')) + } + } + + const settingsHandler = (value: boolean) => { + setIsSettings(value) + } + + const handleChangeTab = async (tab: 'query' | 'resp') => { + setTab(tab) + await addQueryParams(tab) + } + + async function addQueryParams(mode: 'query' | 'resp') { + await push({ + pathname: `/copywriting/my/${uuid}`, + query: { mode }, + }) + } + + async function addNewUuid(uuid: string) { + await push({ + pathname: `/copywriting/my/${uuid}`, + }) + } + + const createDraftHandler = () => { + let req_body: DraftRequestBody = { + type: 'template', + initial: { + template_id: uuid, + }, + } + CopyEndpoints.CreateDraft(req_body, 'template', data?.access).then((res) => { + if (res) addNewUuid(res?.id) + }) + } + + useEffect(() => { + if (query['mode'] !== undefined && tab !== query['mode']) { + handleChangeTab(query['mode'] as 'query' | 'resp') + } + }, [query]) + + useEffect(() => { + if (uuid && data?.access) { + CopyEndpoints.GetCopywrite(uuid, 'template', data.access).then((res) => { + if (res !== null) { + if (res.type === 'template') { + setCopywrite(res as Copywrite) + // @ts-ignore + dispatch(setDefaultVariables(res.template.variables)) + // @ts-ignore + dispatch(setOverrideVariables(res.overriden_variables)) + } else { + setEditor(res as EditorCopywrite) + } + setTemplateType(res.type) + if (res.output_content !== null) { + dispatch(setNewOutputContent(res.output_content)) + } + } else { + createDraftHandler() + } + }) + } + }, [uuid, data?.access]) + + useEffect(() => { + if (editor?.draft || copywrite?.draft) { + const socket = new WebSocket(`${editorEndpoints.webSocket.url}/copywrite/copywrites/${uuid}/`) + + socket.onopen = function (event) { + dispatch(setNewOutputContent('')) + } + + socket.onmessage = function (event) { + const event_data = JSON.parse(event.data).event_data + dispatch(addOutputContent(event_data.chunk)) + + if (event_data.end) { + return socket.close() + } + } + + socket.onerror = function (error) { + showError('Произошла ошибка генерации, перезагрузите страницу') + } + } + }, [copywrite, editor]) + + return ( + + + + + {editor || copywrite ? ( + + ) : ( + <>> + )} + + {!tab && ( + + + + Сгенерировать + + + )} + + + {!desktop && !tab && } + + + ) +} @@ -0,0 +1,75 @@ +import * as React from 'react' +import { useEffect, useState } from 'react' +import { Box } from '@mui/material' +import Link from 'next/link' +import { useSession } from 'next-auth/react' + +import Title from '@/src/features/title/title' +import { Layout } from '@/src/main/layout' +import { useAppSelector } from '@/src/main/store/store' +import { getTypeDevice } from '@/src/shared/lib/helpers' +import { getDeviceOs } from '@/src/shared/lib/helpers/get-type-device' +import { Device, DeviceOs, IFuncProps } from '@/src/shared/lib/types/entities' +import { CopyEndpoints } from '@/src/widgets/copy/api/copy-endpoints' +import { Copywrite, ShortCopywrite } from '@/src/widgets/copy/api/models' +import { MyCopywrite } from '@/src/widgets/copy/ui/my-copywrite' +import styles from '@/src/widgets/copy/ui/styles/copywrite.module.scss' + +export async function getServerSideProps(context: any): Promise<{ props: { device: Device; deviceOs: DeviceOs } }> { + const device = getTypeDevice(context) + const deviceOs = getDeviceOs(context) + return { props: { device, deviceOs } } +} + +export default function Index({ device, deviceOs }: IFuncProps) { + const desktop = device === 'desktop' + const { data } = useSession() + const [copywritesList, setCopywritesList] = useState(null) + + const changeFavouriteHandler = (id: string, favourite: boolean) => { + if (!favourite) { + CopyEndpoints.MarkAsFavourite(id, data?.access).then(() => { + CopyEndpoints.ListCopywrites(data?.access).then((res) => { + if (res) setCopywritesList(res) + }) + }) + } else { + CopyEndpoints.DeleteFavourite(id, data?.access).then(() => { + CopyEndpoints.ListCopywrites(data?.access).then((res) => { + if (res) setCopywritesList(res) + }) + }) + } + } + + useEffect(() => { + if (data?.access) { + CopyEndpoints.ListCopywrites(data?.access).then((res) => { + if (res) setCopywritesList(res) + }) + } + }, [data?.access]) + + return ( + + + + + + + + + + + Создать копирайт + + + + + + ) +} @@ -0,0 +1,111 @@ +import * as React from 'react' +import { useEffect, useState } from 'react' +import { Tab, Tabs } from '@mui/material' +import Box from '@mui/material/Box' +import { useSession } from 'next-auth/react' + +import Title from '@/src/features/title/title' +import { Layout } from '@/src/main/layout' +import { useAppSelector } from '@/src/main/store/store' +import { getTypeDevice } from '@/src/shared/lib/helpers' +import { Device } from '@/src/shared/lib/types/entities' +import { IDalleProps } from '@/src/shared/lib/types/types-dalle' +import { Template, TemplateCategory } from '@/src/widgets/copy/api/models' +import { templatesApi } from '@/src/widgets/copy/api/template-endpoints' +import styles from '@/src/widgets/copy/ui/styles/templates.module.scss' + +import Card from '../../../widgets/copy/ui/card/card' + +export async function getServerSideProps(context: any): Promise<{ props: { device: Device } }> { + const device = getTypeDevice(context) + return { + props: { + device, + }, + } +} + +const Templates: React.FC = ({ device }) => { + const desktop = device === 'desktop' + const { data } = useSession() + const theme = useAppSelector((state) => state.theme.theme) + const [tab, setTab] = useState(null) + const [templateList, setTemplateList] = useState(null) + const [categoriesList, setCategoriesList] = useState(null) + const staticTemplate = templatesApi.staticTemplate + + const handleChangeTab = (e: React.SyntheticEvent, value: string) => { + setTab(value) + } + + useEffect(() => { + if (data?.access) { + templatesApi.ListTemplateCategories(data.access).then((res) => { + setCategoriesList(res) + if (res) setTab(res[0].slug) + }) + } + }, [data?.access]) + + useEffect(() => { + if (data?.access && tab) { + templatesApi.ListTemplates(data.access, tab).then((res) => { + if (res) setTemplateList(res) + }) + } + }, [data?.access, tab]) + + return ( + + + + {categoriesList?.map((el) => ( + + ))} + + + + {templateList?.map((el) => { + return ( + + ) + })} + + + + ) +} + +export default Templates @@ -8,7 +8,6 @@ import { useRouter } from 'next/router' import { useSession } from 'next-auth/react' import { serverSideTranslations } from 'next-i18next/serverSideTranslations' -import { Setting } from '@/src/domains/images-bots/babes/types' import BotParamsMap from '@/src/features/bot-params/bot-params-map' import Title from '@/src/features/title/title' import { ChatSelect } from '@/src/main/components/chat_select' @@ -24,6 +23,8 @@ import { IModel } from '@/src/shared/api/models/models' import { getTypeDevice } from '@/src/shared/lib/helpers' import { getDeviceOs } from '@/src/shared/lib/helpers/get-type-device' import { useShowData } from '@/src/shared/lib/hooks' +import { ArrowDownScroll } from '@/src/shared/ui/icon-components/scroll-down-arrow' +import { Setting } from '@/src/widgets/images/api/types' import { ImageMessagesList } from '@/src/widgets/messages/image-messages-list' export async function getServerSideProps(context: any): Promise<{ props: any }> { @@ -51,10 +52,16 @@ const Images: React.FC = ({ deviceType, deviceOs }) => { const [version, setVersion] = React.useState('') const [modelType, setModelType] = React.useState('') const [params, setParams] = React.useState(false) - const refScroll = useRef(null) const includeParams = useAppSelector((state) => state.params.params) const dispatch = useDispatch() + const { messages, loading, createImage, isComplete, getMessagesPagination } = useModelImages(showError, modelType, deviceType) + + const [chatScrollHeight, setChatScrollHeight] = React.useState(0) + const [scrollBottom, setScrollBottom] = React.useState(0) + const refScrollMobile = useRef() + const [isPaginating, setIsPaginating] = React.useState(false) + React.useEffect(() => { model_api .getBotParams(router.asPath.split('/')[2], data?.access) @@ -79,7 +86,6 @@ const Images: React.FC = ({ deviceType, deviceOs }) => { .catch((err) => {}) }, [data?.access]) - const { messages, loading, createImage, isComplete } = useModelImages(showError, modelType, deviceType) const onLoadImage = (event: React.ChangeEvent) => { if (event.target.files) { setImage(event.target.files[0]) @@ -171,7 +177,7 @@ const Images: React.FC = ({ deviceType, deviceOs }) => { React.useEffect(() => { if (isComplete) { if (!desktop) { - const block = refScroll.current + const block = refScrollMobile.current if (block) { //@ts-ignore block.scrollTop = block.scrollHeight @@ -182,18 +188,55 @@ const Images: React.FC = ({ deviceType, deviceOs }) => { } }, [isComplete]) + const handleMobileScroll = () => { + setScrollBottom(refScrollMobile.current?.scrollHeight - refScrollMobile.current?.scrollTop - refScrollMobile.current?.clientHeight) + + if (refScrollMobile.current && messages?.length !== 0) { + const { scrollTop, scrollHeight, clientHeight } = refScrollMobile.current + if (scrollTop === 0) { + if (getMessagesPagination) { + setIsPaginating(true) + getMessagesPagination(deviceType) + } + } + } + } + + const handleScroll = () => { + if (window.scrollY + window.innerHeight >= document.documentElement.scrollHeight) { + setIsPaginating(true) + getMessagesPagination(deviceType) + } + } + React.useEffect(() => { - if (!desktop && messages !== null) { - const block = refScroll.current + window.addEventListener('scroll', handleScroll) + return () => { + window.removeEventListener('scroll', handleScroll) + } + }, []) - const time = setTimeout(() => { - if (block) { + React.useEffect(() => { + const block = deviceType === 'desktop' ? window : refScrollMobile.current + if (block) { + if (messages != undefined && !isPaginating) { + setChatScrollHeight(block.scrollHeight) + const time = setTimeout(() => { //@ts-ignore - block.scrollTop = block.scrollHeight - } - }, 250) - return () => clearTimeout(time) + block.scrollTo({ + top: block.scrollHeight, + behavior: 'smooth', // добавляем плавную прокрутку + }) + }, 350) + return () => clearTimeout(time) + } else if (messages != undefined && isPaginating) { + //@ts-ignore + block.scrollTop = block.scrollHeight - chatScrollHeight + + setChatScrollHeight(block.scrollHeight) + } } + setIsPaginating(false) }, [messages]) return ( @@ -239,8 +282,32 @@ const Images: React.FC = ({ deviceType, deviceOs }) => { > ) : ( + {scrollBottom > 500 && ( + { + const block = refScrollMobile.current + + block.scrollTo({ + top: block.scrollHeight, + behavior: 'smooth', // добавляем плавную прокрутку + }) + }} + > + + + )} = ({ deviceType, deviceOs }) => { overflowX: 'hidden', }} className={'smallScroll'} + onScroll={handleMobileScroll} > @@ -0,0 +1,17 @@ +import * as Sentry from '@sentry/nextjs' +import Error from 'next/error' + +const CustomErrorComponent = (props) => { + return +} + +CustomErrorComponent.getInitialProps = async (contextData) => { + // In case this is running in a serverless function, await this in order to give ServerError + // time to send the error before the lambda exits + await Sentry.captureUnderscoreErrorException(contextData) + + // This will contain the status code of the response + return Error.getInitialProps(contextData) +} + +export default CustomErrorComponent @@ -194,7 +194,7 @@ const KeyRow = (props: any) => { copy(props.keyValue)} - src={'/svg/copy.svg'} + src={'/svg/copywriting.svg'} width={20} height={20} style={{ cursor: 'pointer' }} @@ -0,0 +1,15 @@ +import * as React from 'react' + +type Props = {} + +export default function ClientError(props: Props) { + return ( + { + throw Error('client error') + }} + > + click me! + + ) +} @@ -0,0 +1,7 @@ +export async function getServerSideProps(context: any): Promise<{ props: any }> { + throw 'server error' +} + +export default function ServerError() { + return +} @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react' +import React, { useCallback, useEffect, useRef, useState } from 'react' import axios, { AxiosError, AxiosResponse } from 'axios' import base64 from 'base64-encode-file' import { useSession } from 'next-auth/react' @@ -23,7 +23,7 @@ const formDataHelper = (file: File, dataForSend: MessageSend): FormData => export const ModelsWithChatsEndpoints = { getData: async (chatUid: string, offset: number, token?: string) => { try { - const { data } = await axios.get(API_URL + `/chats/${chatUid}/messages/?limit=100&offset=${offset}`, { + const { data } = await axios.get(API_URL + `/chats/${chatUid}/messages/?limit=10&offset=${offset}`, { headers: { Authorization: `Bearer ${token}`, }, @@ -77,12 +77,12 @@ export function useModel( setMessages([]) ;(async () => { setLoading(true) - const answer = await ModelsWithChatsEndpoints.getData(currentChat, offset, data?.access) + const answer = await ModelsWithChatsEndpoints.getData(currentChat, 0, data?.access) setLoading(false) if (Array.isArray(answer)) { setMessages(answer.reverse()) - // setOffset((prev) => prev + 10) + setOffset(answer.length) } else { showError('Ошибка загрузки чата') return @@ -100,7 +100,7 @@ export function useModel( if (Array.isArray(answer) && messages != null) { const newMessages = answer.reverse() setMessages([...newMessages, ...messages]) - setOffset((prev) => prev + 10) + setOffset((prev) => prev + answer.length) } else { showError('Ошибка загрузки сообщений') return @@ -192,9 +192,9 @@ export function useModel( } export const ModelsWithImagesEndpoints = { - getData: async (type: string, token?: string) => { + getData: async (type: string, offset: number, token?: string) => { try { - const { data } = await axios.get(API_URL + `/media/image/${type}?limit=100`, { + const { data } = await axios.get(API_URL + `/media/image/${type}?limit=10&offset=${offset}`, { headers: { Authorization: `Bearer ${token}`, }, @@ -242,13 +242,33 @@ export function useModelImages(showError: (message: string) => void, type: st const [isComplete, setIsComplete] = useState(false) + const [offset, setOffset] = useState(0) + const dispatch = useAppDispatch() + const typeRef = useRef(type) + const dataRef = useRef(data) + const messagesRef = useRef(messages) + const offsetRef = useRef(offset) + + useEffect(() => { + typeRef.current = type + }, [type]) + useEffect(() => { + dataRef.current = data + }, [data]) + useEffect(() => { + messagesRef.current = messages + }, [messages]) + useEffect(() => { + offsetRef.current = offset + }, [offset]) + useEffect(() => { if (data?.access && type !== '' && type !== undefined) { ;(async () => { setLoading(true) - const answer = await getData(type, data?.access) + const answer = await getData(type, offset, data?.access) setLoading(false) if ('error' in answer) { showError('Ошибка загрузки чата') @@ -258,14 +278,46 @@ export function useModelImages(showError: (message: string) => void, type: st if (Array.isArray(answer)) { if (device === 'desktop') { setMessages(answer) + setOffset(answer.length) } else { setMessages(answer.reverse()) + setOffset(answer.length) } } })() } }, [data?.access, type]) + const getMessagesPagination = useCallback( + async (device: 'mobile' | 'desktop') => { + // console.log(dataRef.current?.access); + // console.log(typeRef.current); + // console.log(offsetRef.current); + // console.log(messagesRef.current); + + if (dataRef.current?.access && typeRef.current !== '' && typeRef.current !== undefined) { + setLoading(true) + const answer = await getData(typeRef.current, offsetRef.current, dataRef.current?.access) + setLoading(false) + + if (Array.isArray(answer) && messagesRef.current != null && device === 'mobile') { + const newMessages = answer.reverse() + setMessages([...newMessages, ...messagesRef.current]) + setOffset((prev) => prev + answer.length) + } else if (Array.isArray(answer) && messagesRef.current != null && device === 'desktop') { + setMessages([...messagesRef.current, ...answer]) + setOffset((prev) => prev + answer.length) + } else { + console.log('err') + + showError('Ошибка загрузки сообщений') + return + } + } + }, + [data?.access, type, offset, messages] + ) + const createImage = async (dataForSend: MessageSend) => { const { content, file } = dataForSend @@ -301,7 +353,7 @@ export function useModelImages(showError: (message: string) => void, type: st setIsComplete(true) } - return { messages, createImage, loading, isComplete } + return { messages, createImage, loading, isComplete, getMessagesPagination } } export const ModelsMediaApi = { @@ -161,10 +161,8 @@ export const getAllChats = async (model: string, token?: string): Promise void) => { + useEffect(() => { + const handleBeforeUnload = (event: any) => { + handler() + } + + window.addEventListener('beforeunload', handleBeforeUnload) + + return () => { + window.removeEventListener('beforeunload', handleBeforeUnload) + } + }, [handler]) +} @@ -0,0 +1,18 @@ +import { useEffect } from 'react' +import { useRouter } from 'next/router' + +export const useChangeRouter = (handler: () => void) => { + const router = useRouter() + + useEffect(() => { + const handleRouteChange = (url: any) => { + handler() + } + + router.events.on('routeChangeStart', handleRouteChange) + + return () => { + router.events.off('routeChangeStart', handleRouteChange) + } + }, [router]) +} @@ -1,32 +1,6 @@ -export const subMenuTitle = { - color: '#5A5A5A', - fontSize: '19px', - fontWeight: '600px', - lineHeight: '28.5px', -} - export const username = { color: '#7F7DF3', fontSize: '19px', fontWeight: '600px', lineHeight: '28.5px', } -export const subscriptionColumn = { - color: '#868686', - fontSize: '15px', - fontWeight: '600px', - lineHeight: '17.61px', -} -export const subMenuTitleNight = { - color: '#E1E1E1', - fontSize: '19px', - fontWeight: '600px', - lineHeight: '28.5px', -} - -export const subscriptionColumnNight = { - color: '#A6A5A5', - fontSize: '15px', - fontWeight: '600px', - lineHeight: '17.61px', -} @@ -16,3 +16,12 @@ export type Error = { message: string details: string } + +export interface IFuncProps { + device: Device + deviceOs: DeviceOs +} + +export interface IParams extends IFuncProps { + uuid: string +} @@ -13,4 +13,5 @@ export interface IDalleRequest { export interface IDalleProps extends IProps { favorites: any[] | [] + deviceOs?: 'ios' | 'android' } @@ -36,6 +36,10 @@ margin-top: 15px; } .bigTitle { + display: flex; + justify-content: start; + align-items: center; + gap: 10px; @media (max-width:768px) { display: none; overflow: hidden; @@ -0,0 +1,28 @@ +import React from 'react' +import { Menu, MenuProps } from '@mui/material' + +import { useAppSelector } from '@/src/main/store/store' + +export const DropdownMenu: React.FC = ({ children, ...props }) => { + const theme = useAppSelector((state) => state.theme.theme) + + return ( + + {children} + + ) +} @@ -0,0 +1,11 @@ +import * as React from 'react' +import { SVGProps } from 'react' + +export const ArrowDownScroll: React.FC> = ({ ...props }) => { + return ( + + + + + ) +} @@ -6,7 +6,6 @@ import Stack from '@mui/material/Stack' import { TextFieldProps } from '@mui/material/TextField/TextField' import Image from 'next/image' -import { Calculation } from '@/src/features/calculation-tokens-gpt' import { useAppSelector } from '@/src/main/store/store' import { styleInputWithoutBorderFocus } from '@/src/shared/ui/input' @@ -0,0 +1,39 @@ +import React from 'react' +import { RegisterOptions } from 'react-hook-form/dist/types/validator' +import { TextField, Typography } from '@mui/material' +import Box from '@mui/material/Box' +import { TextFieldProps } from '@mui/material/TextField/TextField' + +import { setParams } from '@/src/main/store/model-parametres-store' +import { useAppDispatch } from '@/src/main/store/store' +import { InputStyleDark, InputStyleLight } from '@/src/shared' +import { useThemeAndDevice } from '@/src/shared/lib/hooks' +import TooltipModelTypes from '@/src/shared/ui/tooltip-model-types' + +interface IProps { + title: string +} + +export const InputFilterMock = ({ title }: IProps) => { + const { theme } = useThemeAndDevice() + + return ( + + + + {title} + + + + + + ) +} @@ -0,0 +1,16 @@ +import * as React from 'react' + +import { setParams } from '@/src/main/store/model-parametres-store' +import { useAppDispatch } from '@/src/main/store/store' +import { Slider as Sl } from '@/src/shared' +import TooltipModelTypes from '@/src/shared/ui/tooltip-model-types' + +interface IProps { + title: string +} + +export const RangeFieldMock = ({ title }: IProps) => { + const [range, setRange] = React.useState(10) + + return {}} max={20} min={0} step={2} aria-label='pretto slider' /> +} @@ -0,0 +1,22 @@ +import React from 'react' +import { Typography } from '@mui/material' + +export const ResetParamsMock = () => { + return ( + + Сбросить настройки + + ) +} @@ -0,0 +1,38 @@ +import * as React from 'react' +import { DotLottieReact } from '@lottiefiles/dotlottie-react' +import { Box, Stack, Typography } from '@mui/material' + +import { InputFilterMock } from '@/src/shared/ui/mocks/input-field-mock' +import { RangeFieldMock } from '@/src/shared/ui/mocks/range-field-mock' +import { ResetParamsMock } from '@/src/shared/ui/mocks/reset-params-mock' +import { SwitchFieldMock } from '@/src/shared/ui/mocks/switch-field-mock' +import styles from '@/src/widgets/copy/ui/styles/copywrite.module.scss' + +export const SettingsBlockMock = () => { + return ( + + + + В разработке + + + + + ПАРАМЕТРЫ + + + + + + + + + ) +} @@ -0,0 +1,48 @@ +import React from 'react' +import { FormControlLabel, Typography } from '@mui/material' +import Switch from '@mui/material/Switch' + +import { setParams } from '@/src/main/store/model-parametres-store' +import { useAppDispatch } from '@/src/main/store/store' +import TooltipModelTypes from '@/src/shared/ui/tooltip-model-types' + +interface IProps { + title: string +} + +export const SwitchFieldMock = ({ title }: IProps) => { + return ( + + } + labelPlacement={'start'} + label={ + + {title} + + } + /> + ) +} @@ -0,0 +1,50 @@ +import { Slider, styled } from '@mui/material' + +export const PrettoSlider = styled(Slider)({ + width: '90%', + color: '#EFF0F2', + height: 5, + '& .MuiSlider-track': { + border: 'none', + backgroundColor: '#EFF0F', + }, + '.MuiSlider-rail': { + border: 'none', + backgroundColor: '#EFF0F', + }, + '& .MuiSlider-thumb': { + height: 17, + width: 17, + backgroundColor: '#fff', + border: '2px solid #7F7DF3', + '&:focus, &:hover, &.Mui-active, &.Mui-focusVisible': { + boxShadow: 'inherit', + }, + '&:before': { + display: 'none', + }, + }, +}) +export const PrettoSliderDark = styled(Slider)({ + width: '90%', + + height: 5, + '& .MuiSlider-track': { + border: 'none', + backgroundColor: '#40404E', + }, + '.MuiSlider-rail': { + border: 'none', + backgroundColor: '#40404E', + }, + '& .MuiSlider-thumb': { + height: 17, + width: 17, + backgroundColor: '#373737', + border: '2px solid #7F7DF3', + '&:focus, &:hover, &.Mui-active, &.Mui-focusVisible': {}, + '&:before': { + display: 'none', + }, + }, +}) @@ -3,7 +3,7 @@ import { Typography } from '@mui/material' import Box from '@mui/material/Box' import { useAppSelector } from '@/src/main/store/store' -import { PrettoSlider, PrettoSliderDark } from '@/src/widgets/filters-gpt/ui/filters' +import { PrettoSlider, PrettoSliderDark } from '@/src/shared/ui/slider/slider-styles' export const Slider = ({ value, @@ -0,0 +1,24 @@ +import React from 'react' + +import { DrawerCustom } from '@/src/shared' + +interface IProps { + children: React.ReactNode + desktop: boolean + open: boolean + onClose: (v: boolean) => void +} + +export const MobileSettingsDrawer: React.FC = ({ children, desktop, open, onClose }) => { + return ( + <> + {desktop && children} + + {!desktop && ( + + {children} + + )} + > + ) +} @@ -111,7 +111,7 @@ // // const [modal, setModal] = useState(false) // -// const copy = (text: string) => { +// const copywriting = (text: string) => { // navigator.clipboard.writeText(text) // setIsCopy(true) // setTimeout(() => setIsCopy(false), 3000) @@ -152,16 +152,16 @@ // // // {isCopy ? ( -// +// // ) : ( // // // copy(props.message.content)} -// src={'/svg/copy.svg'} +// onClick={() => copywriting(props.message.content)} +// src={'/svg/copywriting.svg'} // width={22} // height={22} -// alt={'copy'} +// alt={'copywriting'} // /> // // @@ -285,7 +285,7 @@ // const LazyCode = dynamic(() => import('./code')) // const [isCopy, setIsCopy] = useState(false) // -// const copy = (text: string) => { +// const copywriting = (text: string) => { // navigator.clipboard.writeText(text) // setIsCopy(true) // setTimeout(() => setIsCopy(false), 3000) @@ -406,16 +406,16 @@ // }} // > // {isCopy ? ( -// +// // ) : ( // // // copy(props.message.content)} -// src={'/svg/copy.svg'} +// onClick={() => copywriting(props.message.content)} +// src={'/svg/copywriting.svg'} // width={22} // height={22} -// alt={'copy'} +// alt={'copywriting'} // /> // // @@ -0,0 +1,98 @@ +import axios from 'axios' + +import { API_URL } from '@/src/shared/lib/constants' +import { Copywrite, DraftRequestBody, EditorCopywrite, ShortCopywrite, TemplateType } from '@/src/widgets/copy/api/models' + +export const CopyEndpoints = { + GetCopywrite: async (id: string | string[], type: TemplateType, token?: string): Promise => { + try { + const { data } = await axios.get(API_URL + `/api/copywrite/copywrites/${id}/`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }) + if (type == 'self') return data as EditorCopywrite + return data as Copywrite + } catch (err) { + return null + } + }, + + CreateDraft: async (req_body: DraftRequestBody, type: TemplateType, token?: string): Promise => { + try { + const { data } = await axios.post( + API_URL + '/api/copywrite/copywrites/', + { ...req_body }, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ) + if (type == 'self') return data as EditorCopywrite + return data as Copywrite + } catch (err) { + return null + } + }, + + ListCopywrites: async (token?: string, type: 'template' | 'self' = 'template', sort: string = ''): Promise => { + try { + const { data } = await axios.get(API_URL + '/api/copywrite/copywrites/', { + headers: { + Authorization: `Bearer ${token}`, + }, + }) + return data + } catch (err) { + return null + } + }, + + GenerateResponse: async (id: string | string[], token?: string) => { + try { + const { data } = await axios.put( + API_URL + `/api/copywrite/copywrites/${id}/generate/`, + {}, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ) + return data + } catch (err) { + return null + } + }, + + MarkAsFavourite: async (id: string | string[], token?: string) => { + try { + const { data } = await axios.put( + API_URL + `/api/copywrite/copywrites/${id}/favourite`, + {}, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ) + return data + } catch (err) { + return null + } + }, + + DeleteFavourite: async (id: string | string[], token?: string) => { + try { + const { data } = await axios.delete(API_URL + `/api/copywrite/copywrites/${id}/favourite`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }) + return data + } catch (err) { + return null + } + }, +} @@ -0,0 +1,27 @@ +import axios from 'axios' +import process from 'process' + +import { API_URL } from '@/src/shared/lib/constants' + +export const editorEndpoints = { + webSocket: { + url: process.env.NEXT_PUBLIC_WS_API_URL, + }, + + UpdateCopywriteContent: async (id: string | string[], req_body: { input_content: string }, token?: string) => { + try { + const { data } = await axios.patch( + API_URL + `/api/copywrite/copywrites/${id}/`, + { ...req_body }, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ) + return data + } catch (err) { + return null + } + }, +} @@ -0,0 +1,73 @@ +export type TemplateType = 'template' | 'self' + +export type Template = { + id: string + title: string + description: string | null + picture: string | null +} + +export type TemplateCategory = { + title: string + slug: string +} + +export type Copywrite = { + id: string + output_content: string | null + draft: boolean + favourite: boolean + type: TemplateType + template: CopywriteVariableTemplate + overriden_variables: CopywriteOverrideVariables[] +} + +export type EditorCopywrite = { + id: string + type: TemplateType + draft: boolean + favourite: false + label: string | null + input_content: string | null + output_content: string | null +} + +export type ShortCopywrite = { + draft: boolean + favourite: boolean + id: string + label: string | null + template: Template + type: TemplateType +} + +export type CopywriteVariableTemplate = { + id: string + title: string + picture: string | null + variables: CopywriteDefaultVariables[] +} + +export type OverrideVariableResponse = { + variable_id: string + value: string | null +} + +export type DraftRequestBody = { + type: TemplateType + initial?: { template_id: string } +} + +// VARIABLES + +export type CopywriteDefaultVariables = { + id: string //ID ПЕРЕМЕННОЙ В ШАБЛОНЕ + name: string + default_value: {} +} + +export type CopywriteOverrideVariables = { + id: string //ID ПЕРЕМЕННОЙ В ШАБЛОНЕ + variable: string //ID ИЗМЕНЯЕМОЙ ПЕРЕМЕННОЙ + value: string +} @@ -0,0 +1,42 @@ +import axios from 'axios' + +import { API_URL } from '@/src/shared/lib/constants' +import { Template, TemplateCategory } from '@/src/widgets/copy/api/models' + +export const templatesApi = { + staticTemplate: { + id: '0', + picture: '', + title: 'Свой шаблон', + description: 'Создайте собственный шаблон для определенного сценария использования', + }, + + ListTemplates: async (token?: string, category?: string): Promise => { + try { + const { data } = await axios.get( + API_URL + `/api/copywrite/templates/${category !== undefined ? `?category=${category}` : ''}`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ) + return data + } catch (err) { + return null + } + }, + + ListTemplateCategories: async (token?: string): Promise => { + try { + const { data } = await axios.get(API_URL + '/api/copywrite/templates/categories/', { + headers: { + Authorization: `Bearer ${token}`, + }, + }) + return data + } catch (err: any) { + return null + } + }, +} @@ -0,0 +1,57 @@ +import axios from 'axios' + +import { API_URL } from '@/src/shared/lib/constants' +import { OverrideVariableResponse } from '@/src/widgets/copy/api/models' + +export const VariablesEndpoints = { + OverrideVariable: async ( + req_body: OverrideVariableResponse, + copywrite_id: string, + token?: string + ): Promise<{ id: string; variable: string; value: string } | null> => { + try { + const { data } = await axios.post<{ id: string; variable: string; value: string }>( + API_URL + `/api/copywrite/copywrites/${copywrite_id}/variables/`, + { ...req_body }, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ) + return data + } catch (err) { + return null + } + }, + + UpdateVariable: async (id: string, value: string | null, copywrite_id: string, token?: string): Promise<{ value: {} } | null> => { + try { + const { data } = await axios.put<{ value: {} }>( + API_URL + `/api/copywrite/copywrites/${copywrite_id}/variables/${id}/`, + { value: value }, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ) + return data + } catch (err) { + return null + } + }, + + RemoveVariable: async (id: string, copywrite_id: string, token?: string) => { + try { + const { data } = await axios.delete(API_URL + `/api/copywrite/copywrites/${copywrite_id}/variables/${id}/`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }) + return data + } catch (err) { + return null + } + }, +} @@ -0,0 +1,39 @@ +import CustomColorPicker from '@/src/widgets/copy/ui/custom-color-picker' + +export const toolbarOptions = (theme: 'light' | 'dark') => { + return { + options: ['blockType', 'colorPicker', 'inline', 'textAlign', 'list', 'history'], + inline: { + className: 'inline', + options: ['bold', 'italic', 'underline'], + bold: { icon: `/svg/copy/Bold${theme === 'light' ? '-dark' : ''}.png`, className: 'inline-btn' }, + italic: { icon: `/svg/copy/Italic${theme === 'light' ? '-dark' : ''}.png`, className: 'inline-btn' }, + underline: { icon: `/svg/copy/Underline${theme === 'light' ? '-dark' : ''}.png`, className: 'inline-btn' }, + }, + blockType: { + options: ['Normal', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'Blockquote'], + }, + + textAlign: { + options: ['left', 'center', 'right'], + left: { icon: `/svg/copy/Left${theme === 'light' ? '-dark' : ''}.png`, className: 'inline-btn' }, + center: { icon: `/svg/copy/Center${theme === 'light' ? '-dark' : ''}.png`, className: 'inline-btn' }, + right: { icon: `/svg/copy/Right${theme === 'light' ? '-dark' : ''}.png`, className: 'inline-btn' }, + }, + + list: { + options: ['unordered', 'ordered'], + unordered: { icon: `/svg/copy/Unordered${theme === 'light' ? '-dark' : ''}.png`, className: 'inline-btn' }, + ordered: { icon: `/svg/copy/Ordered${theme === 'light' ? '-dark' : ''}.png`, className: 'inline-btn' }, + }, + + colorPicker: { + component: CustomColorPicker, + }, + + history: { + redo: { icon: `/svg/copy/Redo${theme === 'light' ? '-dark' : ''}.png` }, + undo: { icon: `/svg/copy/Undo${theme === 'light' ? '-dark' : ''}.png` }, + }, + } +} @@ -0,0 +1,3 @@ +export const copyText = (text: string) => { + navigator.clipboard.writeText(text) +} @@ -0,0 +1,14 @@ +import { convertToRaw, EditorState } from 'draft-js' +import draftToHtml from 'draftjs-to-html' + +const getTextFromEditor = (editorState: EditorState) => { + const contentState = editorState.getCurrentContent() + const plainText = contentState.getPlainText() + return plainText +} + +export const getHtmlText = (editorState: EditorState) => { + const contentState = editorState.getCurrentContent() + const rawContent = convertToRaw(contentState) + return draftToHtml(rawContent) +} @@ -0,0 +1,33 @@ +.buttonWrapper{ + + display: flex; + align-items: center; + gap: 10px; + flex-direction: row; + + width: 100%; + + .settingButton{ + display: flex; + justify-content: center; + align-items: center; + + padding: 14px; + border: 1px solid var(--air-color); + border-radius: 13px; + } + +} + +.generateButton{ + width: 100%; + padding: 14px; + background-color: var(--air-color); + border-radius: 13px; + cursor: pointer; + + font-size: 15px; + font-weight: 500; + color: white; + text-align: center; +} \ No newline at end of file @@ -0,0 +1,16 @@ +import React from 'react' +import { Box, BoxProps } from '@mui/material' + +import styles from './button-styles.module.scss' + +interface CustomBoxProps extends BoxProps { + children?: React.ReactNode +} + +export const CopyButton: React.FC = ({ children, ...props }) => { + return ( + + {children} + + ) +} @@ -0,0 +1,25 @@ +import React from 'react' +import { Box, Stack } from '@mui/material' + +import { SettingsIcon } from '@/src/widgets/copy/ui/icons/settings-icon' + +import styles from './button-styles.module.scss' + +interface IProps { + settingsHandler: (value: boolean) => void + generateHandler: () => void +} + +export const MobileButtons: React.FC = ({ settingsHandler, generateHandler }) => { + return ( + + + Сгенерировать + + + {/* settingsHandler(true)}>*/} + {/* */} + {/**/} + + ) +} @@ -1,6 +1,6 @@ .card { background-color: var(--new-ui-main-color); - width: 381px; + width: 330px; height: 227px; border-radius: 15px; margin-right: 20px; @@ -9,6 +9,36 @@ cursor: pointer; padding: 30px; box-sizing: border-box; + border: 1px solid var(--new-ui-main-color); + + .colorBox{ + width: 50px; + height: 50px; + border-radius: 100%; + background-color: #313138; + } + + .colorBox[data-theme='light']{ + background-color: #EFF0F2; + } + + &:hover{ + transition: all; + transition-duration: 250ms; + background-color:var(--cards-hover); + border-color: #8280FF; + + .colorBox[data-theme='light']{ + transition-duration: 250ms; + background-color: #E7E7FF; + } + + .colorBox[data-theme='dark']{ + transition-duration: 250ms; + background-color: #222233; + } + + } @media (max-width:768px) { width: 100%; @@ -17,13 +47,14 @@ margin-top: 20px; .title { + font-size: 15px; font-weight: 600; } .text { color: var(--new-ui-gray-color); font-weight: 400; - margin-top: 6px; + margin-top: 10px; font-size: 15px; } } @@ -1,44 +1,32 @@ import React from 'react' import { Avatar, Box, Typography } from '@mui/material' -import Image from 'next/image' import Link from 'next/link' import styles from './card.module.scss' export type CardProps = { + theme: 'dark' | 'light' title: string - icon: string - changeFavorite: (uid: string) => Promise - isFavorite: boolean - text: string + icon: string | null + text: string | null link: string uid: string - companies: string } -const Card = ({ changeFavorite, isFavorite, text, icon, title, link, uid, companies }: CardProps) => { +const Card = ({ text, icon, title, link, theme }: CardProps) => { return ( - - { - e.preventDefault() - changeFavorite(uid) - }} - src={isFavorite ? '/svg/sub_menu/favourite.svg' : '/svg/sub_menu/favourite_off.svg'} - width={25} - height={25} - alt={''} - /> + {icon ? ( + + ) : ( + + )} {title} {text} - - {companies} - @@ -0,0 +1,46 @@ +import React from 'react' +import { Box, MenuItem } from '@mui/material' + +import { DropdownMenu } from '@/src/shared/ui/dropdown-menu/dropdown-menu' + +import styles from './dropdown-menu.module.scss' + +interface IProps { + id?: string + children: React.ReactNode +} + +export const CopyDropdownMenu: React.FC = ({ children, id = 'dropdown-menu' }) => { + const [anchorEl, setAnchorEl] = React.useState(null) + const open = Boolean(anchorEl) + + const handleClick = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget) + } + + const handleClose = () => { + setAnchorEl(null) + } + + return ( + + + {children} + + + + Скачать PDF + + + Скачать DOCX + + + + ) +} @@ -0,0 +1,7 @@ +.menuItem{ + font-size: 15px; + font-weight: 500; + display: flex; + align-items: center; + gap: 10px; +} \ No newline at end of file @@ -0,0 +1,323 @@ +import * as React from 'react' +import { useEffect, useState } from 'react' +import { useDispatch } from 'react-redux' +import { Stack, Tab, Tabs, Typography } from '@mui/material' +import Box from '@mui/material/Box' +import Link from 'next/link' +import { useSession } from 'next-auth/react' + +import { setAllVariables, updateOverrideVariables, updateVariable } from '@/src/features/use-copy/copy-store' +import { useAppSelector } from '@/src/main/store/store' +import { useBeforeUnload } from '@/src/shared/lib/hooks' +import { useChangeRouter } from '@/src/shared/lib/hooks/use-change-router' +import { CopyEndpoints } from '@/src/widgets/copy/api/copy-endpoints' +import { OverrideVariableResponse, TemplateType } from '@/src/widgets/copy/api/models' +import { VariablesEndpoints } from '@/src/widgets/copy/api/variables-endpoints' +import { CopyTextarea } from '@/src/widgets/copy/ui/textarea/copy-textarea' + +import styles from './styles.module.scss' + +interface IProps { + desktop: boolean + handleChangeTab: (tab: 'query' | 'resp') => Promise + tab: 'query' | 'resp' | null + input_content: string | null | undefined + template_type: TemplateType + uuid: string + favourite: boolean | undefined + draft: boolean + isEditor: boolean +} + +export const GenerationBlock = ({ desktop, handleChangeTab, tab, input_content, template_type, uuid, favourite, draft, isEditor }: IProps) => { + const theme = useAppSelector((state) => state.theme.theme) + const copy = useAppSelector((state) => state.copy) + const dispatch = useDispatch() + const [variables, setVariables] = useState() + const { data } = useSession() + const [localFavourite, setLocalFavourite] = useState(false) + + const changeFavouriteHandler = (id: string) => { + if (!localFavourite) { + CopyEndpoints.MarkAsFavourite(id, data?.access) + } else { + CopyEndpoints.DeleteFavourite(id, data?.access) + } + setLocalFavourite(!localFavourite) + } + + const variableHandler = (variable_id: string, value: string | null, name: string) => { + console.log(isEditor, draft) + + if (!isEditor && draft) { + let isDefVar = copy.overridenVariables?.filter((el) => el.variable === variable_id).length === 0 + + if (value === null || value === '') { + if (!isDefVar) { + VariablesEndpoints.RemoveVariable(variable_id, uuid, data?.access).then(() => { + dispatch(updateVariable({ id: variable_id, value: null })) + dispatch(updateOverrideVariables({ action: 'remove', variable: { id: variable_id, variable: variable_id, value: '' } })) + }) + } + return + } + if (isDefVar) { + const req_body: OverrideVariableResponse = { + variable_id: variable_id, + value: value, + } + VariablesEndpoints.OverrideVariable(req_body, uuid, data?.access).then((res) => { + dispatch(updateVariable({ id: variable_id, value: value })) + if (res) dispatch(updateOverrideVariables({ action: 'add', variable: res })) + }) + return + } + if (!isDefVar) { + VariablesEndpoints.UpdateVariable(variable_id, value, uuid, data?.access).then(() => + dispatch(updateVariable({ id: variable_id, value: value })) + ) + return + } + } + } + + const saveVariables = (variables: { [p: string]: string | null }[]) => { + variables.map((el) => { + if (el.id && el.name) { + variableHandler(el.id, el.value, el.name) + } + }) + } + + useEffect(() => { + if (copy.overridenVariables.length === 0) { + setVariables(copy.defaultVariables) + } else { + const new_over_vars: { [p: string]: string } = {} + + for (let i in copy.overridenVariables) { + new_over_vars[copy.overridenVariables[i].variable] = copy.overridenVariables[i].value + } + + const new_def_vars = copy.defaultVariables.map((el) => { + return { + id: el.id, + value: new_over_vars[el.id] ?? el.default_value, + name: el.name, + } + }) + setVariables(new_def_vars) + dispatch(setAllVariables(new_def_vars)) + } + }, [copy.overridenVariables, copy.defaultVariables]) + + useEffect(() => { + if (favourite !== undefined) setLocalFavourite(favourite) + }, [favourite]) + + useBeforeUnload(() => saveVariables(copy.variables)) + useChangeRouter(() => saveVariables(copy.variables)) + + return ( + + + {tab && ( + + + + + + + + Мои генерации + + + + + {desktop && ( + + handleChangeTab('query')} + value={'query'} + label={'Запрос'} + className={styles.tab} + sx={{ color: theme === 'dark' ? '#FFFFFF' : '#8280FF' }} + /> + handleChangeTab('resp')} + value={'resp'} + label={'Копирайт'} + className={styles.tab} + sx={{ color: theme === 'dark' ? '#FFFFFF' : '#8280FF' }} + /> + + )} + + + { + changeFavouriteHandler(uuid) + }} + > + + + {/**/} + {/* */} + {/* */} + {/**/} + {/**/} + {/* */} + {/* */} + {/**/} + + + + + {!desktop && ( + + handleChangeTab('query')} + value={'query'} + label={'Запрос'} + className={styles.tab} + sx={{ color: theme === 'dark' ? '#FFFFFF' : '#8280FF' }} + /> + handleChangeTab('resp')} + value={'resp'} + label={'Копирайт'} + className={styles.tab} + sx={{ color: theme === 'dark' ? '#FFFFFF' : '#8280FF' }} + /> + + )} + + )} + + + {tab === 'resp' && ( + + )} + {tab === 'query' && template_type === 'template' && ( + + {variables?.map((el: any) => ( + + ))} + + )} + {tab === 'query' && template_type === 'self' && ( + + )} + {!tab && ( + + {variables?.map((el: any) => ( + + ))} + + )} + + + + ) +} @@ -0,0 +1,51 @@ +.tabs{ + border: 1px solid #303035; + border-radius: 10px; + min-height: fit-content; +} + +.tab{ + font-size: 14px; + text-transform: none; + border-radius: 10px; + padding: 7px 32px; + min-height: fit-content; +} + +.tab[aria-selected="true"]{ + background-color: #8280FFCC; + color: white !important; +} + +.header{ + display: flex; + justify-content: space-between; + align-items: center; + flex-direction: row; + border-bottom: 1px solid #343437; +} + +.header_wrap{ + padding-bottom: 0; + border-bottom: none; +} + +.wrap{ + width: 100%; + margin-left: 0; + display: flex; + flex-direction: column; + height: fit-content; +} + +@media (max-width: 1080px) { + .header{ + border-bottom: none; + } + + .header_wrap{ + padding-bottom: 30px; + border-bottom: 1px solid #343437; + } + +} \ No newline at end of file @@ -0,0 +1,11 @@ +import * as React from 'react' +import { SVGProps } from 'react' + +export const CopyIcon: React.FC> = ({ ...props }) => { + return ( + + + + + ) +} @@ -0,0 +1,10 @@ +import React, { SVGProps } from 'react' + +export const DownloadIcon: React.FC> = ({ ...props }) => { + return ( + + + + + ) +} @@ -0,0 +1,14 @@ +import React, { SVGProps } from 'react' + +export const SettingsIcon: React.FC> = ({ ...props }) => { + return ( + + + + ) +} @@ -0,0 +1,170 @@ +.mainWrapper{ + width: 97%; + display: flex; + justify-content: flex-start; + align-items: start; + gap: 20px; + + @media (max-width:768px ) { + width: 100%; + } + + .sizeWrapper{ + position: relative; + padding: 30px; + background-color: var(--new-ui-main-color); + border-radius: 15px; + } + + .defaultButton{ + cursor: pointer; + background-color: #8280FF; + border-radius: 13px; + color: white; + padding: 14px 0; + text-align: center; + font-weight: 500; + margin-top: 20px; + font-size: 15px; + } + +} + +.mockWrapper{ + gap: 20px; + + height:85%; + width:100%; + position:relative; + z-index:4; + filter:blur(7px); + user-select: none; +} + +.inDev{ + position:absolute; + z-index:5; + left:0; + right:0; + bottom:25%; + margin:0 auto; + color:var(--air-color); + user-select: none; + font-weight: 700; + font-size: 34px; + text-align: center; + letter-spacing: 2px; + + @media (max-width: 1500px) { + bottom:30%; + font-size: 28px; + } + + @media (max-width: 1300px) { + bottom:35%; + font-size: 20px; + } + +} + +.mockWrapperInDev{ + position:absolute; + z-index:7; + height:85%; + width:100%; + top:0; + left:0 +} + +// MY_COPYWRITE_BLOCK + +.generationText{ + padding-bottom: 30px; + font-size: 16px; + color: #A4AAB5; + font-weight: 600; + letter-spacing: 0.3px; +} + +.generationsWrapper{ + display: flex; + justify-content: start; + gap: 20px; + align-items: start; + padding-right: 10px; + + overflow-y: scroll; + max-height: 55vh; + + .generateWrap{ + display: flex; + justify-content: space-between; + align-items: center; + flex-direction: row; + gap: 15px; + + width: 100%; + cursor: pointer; + stroke: #A4AAB5; + + padding-bottom: 20px; + border-bottom: 1px solid; + + color:var(--copy-color); + border-color: var(--copy-border); + + &:last-child{ + border-bottom: none; + padding-bottom: 0; + } + } + + .generateTitle{ + font-size: 17px; + font-weight: 500; + color: inherit; + } + + .generateIconsWrap{ + display: flex; + align-items: center; + flex-direction: row; + gap: 15px; + } + + .draftText{ + display: flex; + justify-content: start; + align-items: center; + gap: 5px; + + color:#B73262; + font-size: 17px; + font-weight: 500; + } + +} + +.colorBox{ + width: 20px; + height: 20px; + border-radius: 100%; + background-color: #313138; +} +.colorBox[data-theme='light']{ + background-color: #EFF0F2; +} + +.saveBlock{ + color:#A4AAB5; + font-size: 12px; + font-weight: 500; + + position: absolute; + + display: flex; + align-items: center; + justify-content: center; + gap: 5px; + width: 100%; +} \ No newline at end of file @@ -0,0 +1,24 @@ +.tabs{ + border: 1px solid #303035; + border-radius: 13px; + min-height: fit-content; + + .tab{ + font-size: 15px; + text-transform: none; + border-radius: 13px; + padding: 13px 15px; + font-weight: 500; + min-height: fit-content; + color:inherit; + } + + + .tab[aria-selected="true"]{ + background-color: var(--choosen-tab); + color: var(--choosen-tab-color) !important; + } + + +} + @@ -0,0 +1,158 @@ +import { ChangeEvent, useEffect, useState } from 'react' +import { useDispatch } from 'react-redux' +import { Box, Collapse, Stack, TextField, Typography } from '@mui/material' + +import { updateVariable } from '@/src/features/use-copy/copy-store' +import { useAppSelector } from '@/src/main/store/store' + +import styles from './styles.module.scss' + +interface IProps { + format: 'edit' | 'view' + error?: boolean + name?: string + value: any + var_id: string + variableHandler: (variable_id: string, value: string, name: string) => void +} + +export const CopyTextarea = ({ format, name = 'Field', value, var_id, variableHandler, error }: IProps) => { + const theme = useAppSelector((state) => state.theme.theme) + const [isOpen, setIsOpen] = useState(false) + const [inputValue, setInputValue] = useState(value) + const dispatch = useDispatch() + + const setInputValueHandler = (event: ChangeEvent) => { + setInputValue(event.target.value) + dispatch(updateVariable({ id: var_id, value: event.target.value })) + } + + useEffect(() => { + if (inputValue !== value) { + const timeout = setTimeout(() => { + variableHandler(var_id, inputValue, name) + }, 3000) + return () => clearTimeout(timeout) + } + }, [inputValue]) + + return ( + + {format === 'edit' && ( + + + + + ), + }} + variant={'outlined'} + multiline={true} + value={inputValue} + onChange={setInputValueHandler} + className={styles.textarea} + placeholder={name} + sx={{ + '& .MuiOutlinedInput-root': { + borderRadius: '13px', + padding: '0 0 0 15px', + transition: 'all 200ms', + '&:hover fieldset': { + borderColor: 'rgba(130,128,255,0.54)', + transition: 'all 200ms', + }, + '&.Mui-focused fieldset': { + borderColor: '#8280FF', + transition: 'all 200ms', + }, + + '& .MuiOutlinedInput-notchedOutline': { + border: '2px solid', + borderColor: + error && theme === 'dark' + ? '#B73262' + : error && theme === 'light' + ? '#FF76A7' + : theme === 'dark' + ? '#40404E' + : '#EFF0F2', + }, + color: theme === 'dark' ? 'white' : '#2B2B42', + fontSize: '15px', + fontWeight: 'medium', + }, + '& textarea::placeholder': { + color: error && theme === 'dark' ? '#B73262' : error && theme === 'light' ? '#FF76A7' : '', + opacity: error ? '100%' : '30%', + }, + }} + /> + {error && ( + + Ошибка + + )} + + )} + {format === 'view' && ( + + { + setIsOpen(!isOpen) + }} + > + + + + + + {name} + + + + + + + + + {value} + + + )} + + ) +} @@ -0,0 +1,81 @@ +.wrap{ + padding: 1px 1px; + + .textarea_wrap{ + + .textarea{ + width: 100%; + } + + .textarea textarea{ + padding: 15px 10px 15px 15px; + } + + .error_text{ + font-size: 13px; + margin-top: 5px; + } + + } + + .drop_wrap{ + width: 100%; + border-radius: 13px; + border: 2px solid #40404E; + padding: 10px 15px; + + .title_wrap{ + cursor: pointer; + user-select: none; + + display: flex; + justify-content: space-between; + align-items: center; + flex-direction: row; + gap: 10px; + } + + .view_title{ + font-size: 15px; + font-weight: 500; + } + + .view_icon{ + stroke: #A4AAB5; + } + + .color_view_icon{ + stroke: #8280FF; + } + + .open_content{ + margin-top: 10px; + font-size: 15px; + font-weight: 400; + color: #FFFFFF; + } + + .default{ + stroke: #A4AAB5; + transition: all 150ms; + transform: rotate(0deg); + } + + .rotate{ + stroke: #8280FF; + transition: all 150ms; + transform: rotate(-180deg); + } + + } + + .drop_wrap[data-theme='light']{ + border: 2px solid #EFF0F2; + + .open_content{ + color: #2B2B42; + } + + } + +} @@ -0,0 +1,111 @@ +import React, { useState } from 'react' +import { ColorResult, SwatchesPicker } from 'react-color' +import { Box, Stack } from '@mui/material' + +import { useAppSelector } from '@/src/main/store/store' + +interface CustomColorPickerProps { + expanded: boolean + onExpandEvent: () => void + onChange: (style: string, color: string) => void + currentState: { + color?: string + bgColor?: string + } +} + +const CustomColorPicker: React.FC = ({ expanded, onExpandEvent, onChange, currentState }) => { + const [isColor, setIsColor] = useState(false) + const [isHighlight, setIsHighlight] = useState(false) + const theme = useAppSelector((state) => state.theme.theme) + + const theme_color = theme === 'dark' ? 'white' : 'black' + + const handleChangeComplete = (color: ColorResult) => { + onChange('color', color.hex) + } + + const handleBgChangeComplete = (color: ColorResult) => { + onChange('bgcolor', color.hex) + } + + return ( + + setIsColor(!isColor)} + aria-label='custom-color-picker' + sx={{ minWidth: '25px', cursor: 'pointer', position: 'relative' }} + > + setIsColor(!isColor)}> + {isColor && ( + + + + )} + + + + + + + + + + setIsHighlight(!isHighlight)} + aria-label='custom-highlight-picker' + sx={{ minWidth: '25px', cursor: 'pointer', position: 'relative' }} + > + setIsHighlight(!isHighlight)}> + {isHighlight && ( + + + + )} + + + + + + + + + + + ) +} + +export default CustomColorPicker @@ -0,0 +1,77 @@ +import React, { useEffect, useState } from 'react' +import { useDispatch } from 'react-redux' +import { Box } from '@mui/material' +import { EditorState } from 'draft-js' +import { stateFromHTML } from 'draft-js-import-html' +import dynamic from 'next/dynamic' +import { useRouter } from 'next/router' +import { useSession } from 'next-auth/react' + +import { setTextInputContent } from '@/src/features/use-copy/copy-store' +import { useBeforeUnload } from '@/src/shared/lib/hooks' +import { useChangeRouter } from '@/src/shared/lib/hooks/use-change-router' +import { editorEndpoints } from '@/src/widgets/copy/api/editor-endpoints' +import { toolbarOptions } from '@/src/widgets/copy/lib/constants' +import { getHtmlText } from '@/src/widgets/copy/lib/getEditorHtml' +import { SaveBlock } from '@/src/widgets/copy/ui/save-block' + +interface IProps { + theme: 'light' | 'dark' + id: string + contentState: string | null + saveEditorValue: (content: string) => void + isGenerateStart: boolean +} + +export const EditorWrap: React.FC = ({ theme, id, contentState, saveEditorValue, isGenerateStart }) => { + const Editor = dynamic(() => import('react-draft-wysiwyg').then((res) => res.Editor), { ssr: false }) + const [editorState, setEditorState] = useState(() => { + if (contentState) return EditorState.createWithContent(stateFromHTML(contentState)) + if (!contentState) return EditorState.createEmpty() + }) + const dispatch = useDispatch() + const [test, setTest] = useState() + + useEffect(() => { + if (editorState) { + const htmlText = getHtmlText(editorState) + + const timeout = setTimeout(() => { + dispatch(setTextInputContent(htmlText)) + }, 250) + + const saveTimeout = setTimeout(() => { + saveEditorValue(htmlText) + }, 1000) + + return () => { + clearTimeout(timeout) + clearTimeout(saveTimeout) + } + } + }, [editorState]) + + useEffect(() => { + if (isGenerateStart && editorState) { + saveEditorValue(getHtmlText(editorState)) + } + }, [isGenerateStart]) + + useChangeRouter(() => { + if (editorState) saveEditorValue(getHtmlText(editorState)) + }) + + return ( + + + {/*{isSave && }*/} + + ) +} @@ -0,0 +1,46 @@ +import * as React from 'react' +import { Stack, Typography } from '@mui/material' + +import { ShortCopywrite } from '@/src/widgets/copy/api/models' +import { MyGeneration } from '@/src/widgets/copy/ui/my-generation' +import styles from '@/src/widgets/copy/ui/styles/copywrite.module.scss' + +interface IProps { + desktop: boolean + copywritesList: ShortCopywrite[] | null + changeFavouriteHandler: (id: string, favourite: boolean) => void +} + +export const MyCopywrite = ({ desktop, copywritesList, changeFavouriteHandler }: IProps) => { + return ( + <> + ГЕНЕРАЦИИ + + {copywritesList?.map((el) => { + let href = '' + + if (el.type == 'self') { + href = !el.draft ? `my/${el.id}?mode=query` : `editor?uuid=${el.id}` + } + if (el.type == 'template') { + href = !el.draft ? `my/${el.id}?mode=query` : `my/${el.id}` + } + + return ( + + ) + })} + + > + ) +} @@ -0,0 +1,94 @@ +import * as React from 'react' +import { useState } from 'react' +import { Box, Stack, Typography } from '@mui/material' +import Image from 'next/image' +import Link from 'next/link' + +import { useAppSelector } from '@/src/main/store/store' +import { Template, TemplateType } from '@/src/widgets/copy/api/models' +import styles from '@/src/widgets/copy/ui/styles/copywrite.module.scss' + +interface IProps { + href: string + draft: boolean + favourite: boolean + id: string + label: string | null + template: Template + type: TemplateType + changeFavouriteHandler: (id: string, favourite: boolean) => void +} + +export const MyGeneration: React.FC = ({ favourite, id, label, template, type, href, draft, changeFavouriteHandler }) => { + const [localFavourite, setLocalFavourite] = useState(favourite) + const theme = useAppSelector((state) => state.theme.theme) + + return ( + + + + {draft && ( + + Черновик:{' '} + {template && template.picture !== null && ( + + )} + {draft && type === 'self' && }{' '} + {label ? label : type == 'template' ? template.title : 'Свой шаблон'}{' '} + + )} + {!draft && label} + + + + + { + changeFavouriteHandler(id, localFavourite) + setLocalFavourite(!localFavourite) + }} + > + + + {/**/} + {/* */} + {/* */} + {/**/} + {/**/} + {/* */} + {/* */} + {/**/} + + + ) +} @@ -0,0 +1,22 @@ +import React from 'react' +import { Typography, TypographyProps } from '@mui/material' + +import styles from '@/src/widgets/copy/ui/styles/copywrite.module.scss' + +interface CustomTypographyProps extends TypographyProps {} + +export const SaveBlock: React.FC = ({ children, ...props }) => { + return ( + + + + + Автосохранение... + + ) +} @@ -1,84 +0,0 @@ -const descriptionChatGPT = - 'Модели GPT-3.5 могут понимать и генерировать естественный язык или код. Наша самая мощная и экономичная модель серии GPT-3.5 - gpt-3.5-turbo, которая была оптимизирована для чата, но также хорошо работает и для традиционных операций по выполнению заданий.' -const descriptionChatGPT4 = - 'GPT-4 более творческий и совместный, чем когда-либо прежде. Он может генерировать, редактировать и повторять с пользователями творческие и технические задачи письма, такие как сочинение песен, написание сценариев или изучение стиля письма пользователя.\n' + - 'GPT-4 может принимать изображения в качестве входных данных и генерировать подписи, классификации и анализы.\n' + - 'GPT-4 способен обрабатывать более 25 000 слов текста, что позволяет использовать такие варианты использования, как создание длинного контента, расширенные беседы, а также поиск и анализ документов.' - -const advantagesChatGPT = '' - -const descriptionDaVinci = - 'Самая мощная модель в серии GPT-3. Может выполнять любую задачу эффективнее своих предшественников и демонстрировать результат, часто более высокого качества, более развернутый и гораздо более точный. Обрабатывает до 4000 токенов за запрос.' -const advantagesDaVinci = - 'Обрабатывает максимально сложные запросы, выводит причину и следствие в любом виде контента, способен работать с нестандартным подходом, ищет, анализирует и обобщает информацию по запросу, тратит в 10 раз больше токенов, чем модели ChaGPT-35 и Curie.' -const warningDaVinci = 'Тратит в 10 раз больше токенов, чем модели ChatGPT и Curie.' - -const descriptionCurie = 'Очень мощный, при этом быстрее и дешевле, чем text-DaVinci-003.' -const advantagesCurie = 'Способен выполнять языковой перевод, классифицировать и обобщать информацию, соблюдать заданный эмоциональный тон.' - -const descriptionBabbage = 'Способен выполнять простые задачи, очень быстрый и недорогой.' -const advantagesBabbage = 'Способен классифицировать информацию по заданным параметрам и осуществлять семантический поиск.' - -const descriptionAda = 'Способен выполнять простые задачи. В серии GPT-3 является самой быстрой моделью по самой низкой цене.' -const advantagesAda = 'Способен синтаксически анализировать текст, выполнять базовую классификацию, подбирать ключевые слова.' - -export const ParameterTopP = - 'Тор_p - альтернатива температуре. Не\n' + - 'советуем менять top_p и температуру\n' + - 'одновременно. Меняется в интервале от 0\n' + - 'до 1. Более высокие значения дают более\n' + - 'креативные ответы.\n' - -export const ParameterTemperature = - 'Температура влияет на вероятность\n' + - 'случайного ответа: чем выше температура,\n' + - 'тем больше вероятность получить\n' + - 'креативный ответ. Наоборот, при низкой\n' + - 'температуре ответ будет более точным и\n' + - 'предсказуемым. Меняется в интервале от\n' + - '0 до 1. Значение по-умолчанию 0.5.\n' - -export const ParameterPresencePenalty = - 'Максимальное количество токенов для\n' + - 'генерации ответа ботом. Токен это часть\n' + - 'слова или слово целиком. Бот оперирует\n' + - 'токенами, разбивая весь текст на токены.\n' + - '750 слов это в среднем 1000 токенов.' - -export interface ITypeModels { - key: string - value: string - description: string - advantages?: string - warning?: string -} - -export const typeModels: ITypeModels[] = [ - { - key: 'GPT-4o', - value: 'gpt-4o', - description: '', - }, - { - key: 'GPT-4 Turbo Preview', - value: 'gpt-4-turbo-preview', - description: '', - }, - { - key: 'GPT-4 Turbo', - value: 'gpt-4-turbo', - description: '', - }, - { - key: 'GPT-4', - value: 'gpt-4', - description: descriptionChatGPT4, - }, - { - key: 'GPT-3.5', - value: 'gpt-3.5-turbo', - description: descriptionChatGPT, - }, -] - -export type TypeModelGPT = 'gpt-3.5-turbo' | 'text-davinci-003' | 'text-curie-001' | 'text-babbage-001' | 'text-ada-001' @@ -1,48 +0,0 @@ -import React from 'react' -import { Drawer, MenuItem, Slider, Typography } from '@mui/material' -import Stack from '@mui/material/Stack' - -import { useAppSelector } from '@/src/main/store/store' -import { Select } from '@/src/shared' -import { IFiltersChatGPT } from '@/src/widgets/filters-gpt/ui/filters' -import TooltipModelTypes from '@/src/widgets/filters-gpt/ui/tooltip-model-types' - -const FiltersMobile: React.FC = ({ - open, - handleCloseFilters, - parameterTopP, - temperatureModel, - typeModels, - typeModel, - handleChangeTypeModel, - changeTemperature, - changeTopP, - changePresence, - parameterPresence, - resetSettings, -}) => { - const theme = useAppSelector((state) => state.theme.theme) - - return ( - - ) -} - -export default FiltersMobile @@ -1,291 +0,0 @@ -import React, { memo, useMemo } from 'react' -import SettingsSuggestIcon from '@mui/icons-material/SettingsSuggest' -import { Box, Button, MenuItem, Slider, Tooltip, Typography } from '@mui/material' -import { SelectChangeEvent } from '@mui/material/Select' -import Stack from '@mui/material/Stack' -import { styled } from '@mui/material/styles' - -import { TutorialContext } from '@/src/features/tutorial-context/tutorial-context' -import { useAppSelector } from '@/src/main/store/store' -import { Select, Slider as Sl, SwitchCustom, TooltipCustom } from '@/src/shared' -import { ITypeModels, ParameterPresencePenalty, ParameterTemperature, ParameterTopP } from '@/src/widgets/filters-gpt/lib/constants' -import FiltersMobile from '@/src/widgets/filters-gpt/ui/filters-mobile' -import TooltipModelTypes from '@/src/widgets/filters-gpt/ui/tooltip-model-types' - -import 'intro.js/introjs.css' - -interface IFiltersChatGPTMobile { - open?: boolean - handleOpenFilters?: () => void - handleCloseFilters?: () => void -} - -export interface IFiltersChatGPT extends IFiltersChatGPTMobile { - device: 'mobile' | 'desktop' - typeModel: string - typeModels: ITypeModels[] - temperatureModel: number | number[] - parameterTopP: number | number[] - parameterPresence: number | number[] - isAdditional?: boolean - handleChangeTypeModel: (e: SelectChangeEvent) => void - changeTemperature: (e: Event, current: number | number[]) => void - changeTopP: (e: Event, current: number | number[]) => void - changePresence: (e: Event, current: number | number[]) => void - resetSettings: () => void - changeAdditionalCtx?: () => void -} - -export const PrettoSlider = styled(Slider)({ - width: '90%', - color: '#EFF0F2', - height: 5, - '& .MuiSlider-track': { - border: 'none', - backgroundColor: '#EFF0F', - }, - '.MuiSlider-rail': { - border: 'none', - backgroundColor: '#EFF0F', - }, - '& .MuiSlider-thumb': { - height: 17, - width: 17, - backgroundColor: '#fff', - border: '2px solid #7F7DF3', - '&:focus, &:hover, &.Mui-active, &.Mui-focusVisible': { - boxShadow: 'inherit', - }, - '&:before': { - display: 'none', - }, - }, -}) -export const PrettoSliderDark = styled(Slider)({ - width: '90%', - - height: 5, - '& .MuiSlider-track': { - border: 'none', - backgroundColor: '#40404E', - }, - '.MuiSlider-rail': { - border: 'none', - backgroundColor: '#40404E', - }, - '& .MuiSlider-thumb': { - height: 17, - width: 17, - backgroundColor: '#373737', - border: '2px solid #7F7DF3', - '&:focus, &:hover, &.Mui-active, &.Mui-focusVisible': {}, - '&:before': { - display: 'none', - }, - }, -}) - -export const Filters: React.FC = memo( - ({ - device, - parameterPresence, - parameterTopP, - temperatureModel, - typeModels, - typeModel, - handleChangeTypeModel, - changeTemperature, - changeTopP, - changePresence, - resetSettings, - handleCloseFilters, - open, - isAdditional, - changeAdditionalCtx, - }) => { - const desktop = device === 'desktop' - - const theme = useAppSelector((state) => state.theme.theme) - - const [showConfigure, setShowConfigure] = React.useState(false) - - const contextTutorial = React.useContext(TutorialContext) - - typeModels.find((el) => el.key === typeModel)!.value - - const isAdditionalCtx = useMemo(() => { - const value = typeModels.find((el) => el.key === typeModel)!.value - - return value === 'gpt-3.5-turbo' || value === 'gpt-4' ? true : false - }, [typeModel]) - - React.useEffect(() => { - if (contextTutorial?.step === 3) { - setTimeout(() => setShowConfigure(true), 500) - return - } - - setShowConfigure(false) - }, [contextTutorial?.step]) - return ( - <> - {desktop ? ( - - - Настройки - - - - Тип модели - - - - {typeModels.map((model) => { - return ( - - - - {model.key} - - - - ) - })} - - - {isAdditionalCtx && ( - - - Увеличенный контекст - - changeAdditionalCtx!()} /> - - )} - - changeTemperature(e, current)} - max={1} - min={0} - step={0.1} - aria-label='pretto slider' - /> - - - } - style={{ marginTop: '15px' }} - variant='contained' - sx={{ - width: '100%', - backgroundColor: '#7F7DF3', - fontSize: '14px', - ':hover': { backgroundColor: '#7F7DF3' }, - }} - onClick={() => setShowConfigure((prevState) => !prevState)} - > - Настройки - - {showConfigure && ( - <> - - changeTopP(e, current)} - max={1} - min={0} - step={0.1} - aria-label='pretto slider' - /> - - - changePresence(e, current)} - max={2} - min={-2} - step={0.1} - aria-label='pretto slider' - /> - - > - )} - - Сбросить настройки - - - - ) : ( - - )} - > - ) - } -) - -Filters.displayName = 'Filters' @@ -1 +0,0 @@ -export { Filters } from './ui/filters' @@ -1,6 +0,0 @@ -export enum GeneratingModel { - 'stable-diffusion-v1-6', - 'stable-diffusion-xl-1024-v1-0', - 'sd3', - 'sd3-turbo', -} @@ -1,45 +0,0 @@ -import { IProps } from '@/src/shared/lib/types/entities' -import { Styles } from '@/src/widgets/filters-sd/ui/filters' - -export type TImageFormat = '512x512' | '640x384' | '384x640' | '768x512' | '512x768' | '1024x1024' -export type TClipGuidancePresets = 'FAST_BLUE' | 'FAST_GREEN' | 'Без фильтров' | 'SIMPLE' | 'SLOW' | 'SLOWER' | 'SLOWEST' -export type TSamplerTypes = - | 'DDIM' - | 'DDPM' - | 'K_DPMPP_2M' - | 'K_DPMPP_2S_ANCESTRAL' - | 'K_DPM_2' - | 'K_DPM_2_ANCESTRAL' - | 'K_EULER' - | 'K_EULER_ANCESTRAL' - | 'K_HEUN' - | 'K_LMS' - -export type TGeneratingModel = 'stable-diffusion-v1-6' | 'stable-diffusion-xl-1024-v1-0' | 'sd3' | 'sd3-turbo' - -export interface ISDFilters extends IProps { - formatImage: TImageFormat - stepsImage: number | string | Array - numberImages: number | number[] | undefined - sampleType: TSamplerTypes - samplerTypes: TSamplerTypes[] - cfgScale: number | string | Array - clipGuidancePreset: TClipGuidancePresets - clipGuidancePresets: TClipGuidancePresets[] - formatImages: TImageFormat[] - generatingModel: TGeneratingModel - isTranslate: boolean - style: Styles - - changeFormatImage: (e: TImageFormat) => void - changeClipGuidancePreset: (e: TClipGuidancePresets) => void - changeSampleType: (e: TSamplerTypes) => void - changeStepsImage: (e: Event, current: number | number[]) => void - changeNumberImage: (e: Event, current: number | number[]) => void - changeCfgScale: (e: Event, current: number | number[]) => void - changeGeneratingModel: (e: TGeneratingModel) => void - changeIsTranslate: () => void - changeStyle: (e: Styles) => void - - resetSettings: () => void -} @@ -1,202 +0,0 @@ -import React, { useState } from 'react' -import SettingsSuggestIcon from '@mui/icons-material/SettingsSuggest' -import { Box, Button, Drawer, Stack, Typography } from '@mui/material' - -import { useAppSelector } from '@/src/main/store/store' -import { Select, SwitchCustom } from '@/src/shared' -import { Slider } from '@/src/shared' -import { SelectUI } from '@/src/shared/ui/select' -import { PrettoSlider, PrettoSliderDark } from '@/src/widgets/filters-gpt/ui/filters' -import { GeneratingModel } from '@/src/widgets/filters-sd/lib/constants' -import { ISDFilters, TClipGuidancePresets, TGeneratingModel, TImageFormat, TSamplerTypes } from '@/src/widgets/filters-sd/lib/types' -import { Styles,styles } from '@/src/widgets/filters-sd/ui/filters' - -interface ISDFiltersMobile extends ISDFilters { - isOpenDrawer: boolean - onCloseDrawer: () => void -} - -export const FiltersMobile: React.FC = ({ - stepsImage, - numberImages, - formatImage, - cfgScale, - clipGuidancePreset, - sampleType, - formatImages, - changeFormatImage, - changeClipGuidancePreset, - clipGuidancePresets, - samplerTypes, - changeSampleType, - changeStepsImage, - changeNumberImage, - changeCfgScale, - resetSettings, - onCloseDrawer, - isOpenDrawer, - isTranslate, - changeIsTranslate, - style, - changeStyle, - generatingModel, - changeGeneratingModel, -}) => { - const [showConfigure, setShowConfigure] = useState(false) - - const theme = useAppSelector((state) => state.theme.theme) - - return ( - - - - changeFormatImage(e.target.value as TImageFormat)} - list={formatImages} - /> - - - - changeStyle(e.target.value as Styles)} - list={Object.values(styles)} - /> - - - - changeGeneratingModel(e.target.value as TGeneratingModel)} - list={Object.values(GeneratingModel).filter((v) => isNaN(Number(v)))} - /> - - - - changeNumberImage(e, cur)} - max={10} - min={1} - step={1} - /> - - - } - style={{ marginTop: '10px' }} - variant='contained' - sx={{ - width: '90%', - backgroundColor: '#7F7DF3', - fontSize: '14px', - ':hover': { backgroundColor: '#7F7DF3' }, - }} - onClick={() => setShowConfigure((prevState) => !prevState)} - > - {showConfigure ? 'Скрыть ' : 'Показать '} - расширенные настройки - - {showConfigure && ( - <> - - - - Переводить запрос - - - - - - changeClipGuidancePreset(e.target.value as TClipGuidancePresets)} - list={clipGuidancePresets} - /> - - - - changeSampleType(e.target.value as TSamplerTypes)} - list={samplerTypes} - /> - - - changeStepsImage(e, cur)} - max={150} - min={10} - step={1} - /> - - - - changeCfgScale(e, cur)} - max={20} - min={1} - step={1} - /> - - > - )} - - - Сбросить настройки - - - - ) -} @@ -1,169 +0,0 @@ -import React from 'react' -import { Box, Stack, Typography } from '@mui/material' - -import { Slider, SwitchCustom } from '@/src/shared' -import { SelectUI } from '@/src/shared/ui/select' -import { GeneratingModel } from '@/src/widgets/filters-sd/lib/constants' -import { ISDFilters, TClipGuidancePresets, TGeneratingModel, TImageFormat, TSamplerTypes } from '@/src/widgets/filters-sd/lib/types' - -export type Styles = - | null - | '3d-model' - | 'analog-film' - | 'anime' - | 'cinematic' - | 'comic-book' - | 'digital-art' - | 'enhance' - | 'fantasy-art' - | 'isometric' - | 'line-art' - | 'low-poly' - | 'modeling-compound' - | 'neon-punk' - | 'origami' - | 'photographic' - | 'pixel-art' - | 'tile-texture' - -export const styles: Record = { - '3D-модель': '3d-model', - Фильм: 'analog-film', - Аниме: 'anime', - cinematic: 'cinematic', - 'comic-book': 'comic-book', - 'digital-art': 'digital-art', - enhance: 'enhance', - 'Фентези арт': 'fantasy-art', - isometric: 'isometric', - 'line-art': 'line-art', - 'low-poly': 'low-poly', - 'modeling-compound': 'modeling-compound', - 'neon-punk': 'neon-punk', - origami: 'origami', - photographic: 'photographic', - 'pixel-art': 'pixel-art', - 'tile-texture': 'tile-texture', - 'Без стилей': null, -} - -export const FiltersSd: React.FC = ({ - stepsImage, - numberImages, - formatImage, - cfgScale, - clipGuidancePreset, - sampleType, - formatImages, - changeFormatImage, - changeClipGuidancePreset, - clipGuidancePresets, - samplerTypes, - changeSampleType, - changeStepsImage, - changeNumberImage, - changeCfgScale, - resetSettings, - generatingModel, - changeGeneratingModel, - isTranslate, - changeIsTranslate, - style, - changeStyle, -}) => { - return ( - - changeFormatImage(e.target.value as TImageFormat)} - list={formatImages} - /> - - - changeStyle(e.target.value as Styles)} list={Object.values(styles)} /> - - - changeNumberImage(e, cur)} - max={10} - min={1} - step={1} - /> - - changeClipGuidancePreset(e.target.value as TClipGuidancePresets)} - list={clipGuidancePresets} - /> - - - - changeGeneratingModel(e.target.value as TGeneratingModel)} - list={Object.values(GeneratingModel).filter((v) => isNaN(Number(v)))} - /> - - - - changeSampleType(e.target.value as TSamplerTypes)} - list={samplerTypes} - /> - - - changeStepsImage(e, cur)} - max={50} - min={10} - step={1} - /> - - changeCfgScale(e, cur)} - max={20} - min={1} - step={1} - /> - - - - Переводить запрос - - - - - - Сбросить настройки - - - ) -} @@ -1,2 +0,0 @@ -export { FiltersSd } from './ui/filters' -export { FiltersMobile } from './ui/filters-mobile' @@ -0,0 +1,7 @@ +export interface Setting { + strength: number + upscale: number + negative_prompt: string + num_inference_steps: number + guidance_scale: number +} @@ -58,7 +58,8 @@ export function BotMessage(props: any) { : {} return ( - + // + - + ) } @@ -67,7 +67,8 @@ export const UserMessage = React.memo(function UserMessage(props: IMessagesList) {props.message.file && } {!props.message.from_model ? ( - + // + - + ) : ( void onLoadImage?: (event: React.ChangeEvent | null, file?: File) => void + loading: boolean } export const ChatMessagesList: React.FC = memo( - ({ messageResponse, onLoadImage, setResendValue, modelTitle, device, modelType, mode, getMessagesPagination, deleteMessage }) => { + ({ messageResponse, onLoadImage, setResendValue, modelTitle, device, modelType, mode, getMessagesPagination, deleteMessage, loading }) => { const paginationScroll = React.useRef() + const [isPaginating, setIsPaginating] = React.useState(false) + const [chatScrollHeight, setChatScrollHeight] = React.useState(0) + const [scrollBottom, setScrollBottom] = React.useState(0) + const desktop = device === 'desktop' const { status } = useSession() const [isNewMessage, setIsNewMessage] = React.useState(false) React.useEffect(() => { - if (messageResponse != undefined) { - const block = paginationScroll.current + const block = paginationScroll.current + + if (messageResponse != undefined && !isPaginating) { + setChatScrollHeight(paginationScroll.current.scrollHeight) const time = setTimeout(() => { if (block) { //@ts-ignore - block.scrollTop = block.scrollHeight + block.scrollTo({ + top: block.scrollHeight, + behavior: 'smooth', // добавляем плавную прокрутку + }) } }, 250) return () => clearTimeout(time) + } else if (messageResponse != undefined && isPaginating) { + if (block) { + //@ts-ignore + block.scrollTop = block.scrollHeight - chatScrollHeight + setChatScrollHeight(paginationScroll.current.scrollHeight) + } } + setIsPaginating(false) }, [messageResponse]) useEffect(() => { setIsNewMessage(true) }, [messageResponse]) + const handleScroll = () => { + setScrollBottom(paginationScroll.current?.scrollHeight - paginationScroll.current?.scrollTop - paginationScroll.current?.clientHeight) + + if (paginationScroll.current && messageResponse?.length !== 0) { + const { scrollTop, scrollHeight, clientHeight } = paginationScroll.current + if (scrollTop === 0) { + if (getMessagesPagination) { + setIsPaginating(true) + getMessagesPagination() + } + } + } + } + return ( = memo( paddingLeft: desktop ? 1 : 0, }} ref={paginationScroll} + onScroll={handleScroll} > + {scrollBottom > 500 && ( + { + //@ts-ignore + const block = paginationScroll.current + + block.scrollTo({ + top: block.scrollHeight, + behavior: 'smooth', // добавляем плавную прокрутку + }) + }} + > + + + )} + + {loading && ( + + + + )} + {messageResponse?.length === 0 && status === 'authenticated' ? ( <>{desktop && modelType !== 'deepl' && }> ) : ( @@ -93,7 +93,7 @@ export const Referral = ({ device }: IProps) => { > {device === 'mobile' ? url.slice(0, 20) + '...' : url.slice(0, 40) + '...'} = memo(({ messages, device }) => { - const theme = useAppSelector((state) => state.theme.theme) - - const refScroll = useAutoScroll(messages) - - const desktop = device === 'desktop' - - return ( - - {messages?.map((img) => { - return ( - - {desktop && } - - - - - - - - - - - Запрос:{' '} - - {img.question} - - - {img.created_at.slice(10, 16).replace('T', ' ')} - - - - - ) - })} - - ) -}) - -SdMessagesList.displayName = 'SdMessagesList' @@ -1 +0,0 @@ -export { SdMessagesList } from './ui/sd-messages-list' @@ -29,8 +29,8 @@ export const menuListTop = [ export const menuListMiddle = [ { title: 'Чат-боты', link: '/chat-bot', icon: '/svg/side-menu/chat', activeList: ['chat-bot'] }, - { title: 'Изображения', link: '/images', icon: '/svg/side-menu/image', activeList: ['dalle', 'kandinksy', 'stable-diffusion', 'midjourney'] }, - //{ title: 'Копирайтинг', link: '/copy', icon: '/svg/side-menu/copyrating', activeList: ['/create'] }, + { title: 'Изображения', link: '/images', icon: '/svg/side-menu/image', activeList: ['images'] }, + { title: 'Копирайтинг', link: '/copywriting/my', icon: '/svg/side-menu/copyrating', activeList: ['copywriting'] }, // { title: 'Видео', link: '/video', icon: '/svg/side-menu/video', activeList: [] }, // { title: 'Аудио', link: '/audio', icon: '/svg/side-menu/audio', activeList: [] }, // { title: 'Код', link: '/code', icon: '/svg/side-menu/code', activeList: [] }, @@ -0,0 +1,7 @@ +import * as Sentry from '@sentry/nextjs' + +export async function register() { + if (process.env.NEXT_RUNTIME === 'nodejs') { + await import('../sentry.server.config') + } +} @@ -26,4 +26,10 @@ NEXT_PUBLIC_DJANGO_VK_APP_CLIENT_ID=seSpVo2gyb085UwxM9mnVuOyPvCcTuVC1BRQoEpx NEXT_PUBLIC_DJANGO_VK_APP_CLIENT_SECRET=YWv1YXdE69FKN5NZpf583qvU0mq7wbsdrLShBLxn2FsQ7miJxsHlAHwyT9ZD76LzqVcEVctkhWdB54d56FU7Zz3QtBAFP3XnQP2HaVK7e8paxGHfzFCNgyGnavZAXI9p NEXT_PUBLIC_SESSION_TIME=1800 -SESSION_TIME=1800 \ No newline at end of file +SESSION_TIME=1800 + +NEXT_PUBLIC_SENTRY_DSN=https://8ba86ce968074387878775e88a223c0e@sentry.syntex.digital/4 +NEXT_PUBLIC_SENTRY_ORGANIZATION=Syntex +NEXT_PUBLIC_SENTRY_DOMAIN=https://sentry.syntex.digital + +NEXT_PUBLIC_WS_API_URL=ws://devapi.air.fail:8000/rtc @@ -38,3 +38,6 @@ next-env.d.ts /.idea + +# ServerError Config File +.env.sentry-build-plugin @@ -3,7 +3,7 @@ stages: - Deploy default: - image: docker:rc-cli + image: docker:cli before_script: - echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" $CI_REGISTRY --password-stdin @@ -1,17 +1,26 @@ services: - app: - image: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA - build: + frontend: + image: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA + build: context: . dockerfile: Dockerfile - container_name: frontend - restart: unless-stopped - ports: - - '3000:3000' - env_file: - - .env.production + container_name: frontend + restart: unless-stopped + networks: + - infrastructure + - ui + expose: + - "3000" + labels: + - "traefik.enable=true" + - "traefik.docker.network=infrastructure" + - "traefik.http.routers.frontend.rule=Host(`$UI_DOMAIN`)" + - "traefik.http.routers.frontend.entrypoints=web" + env_file: + - .env.production networks: - default: - name: 'air' + infrastructure: external: true + ui: + name: ui \ No newline at end of file @@ -8,9 +8,9 @@ const nextConfig = { asyncWebAssembly: true, layers: true, } - return config }, + reactStrictMode: false, images: { domains: [ @@ -32,3 +32,20 @@ const withBundleAnalyzer = require('@next/bundle-analyzer')({ }) module.exports = withBundleAnalyzer(nextConfig) + +// Injected content via ServerError wizard below + +const { withSentryConfig } = require('@sentry/nextjs') + +module.exports = withSentryConfig(module.exports, { + org: process.env.SENTRY_ORGANIZATION, + sentryUrl: process.env.SENTRY_DOMAIN, + widenClientFileUpload: true, + reactComponentAnnotation: { + enabled: true, + }, + tunnelRoute: '/monitoring', + hideSourceMaps: true, + disableLogger: true, + automaticVercelMonitors: false, +}) @@ -14,13 +14,14 @@ "@emotion/react": "^11.11.0", "@emotion/styled": "^11.11.0", "@fontsource/roboto": "^4.5.8", + "@lottiefiles/dotlottie-react": "^0.12.0", "@mui/icons-material": "^5.11.11", "@mui/material": "^5.11.12", "@mui/styled-engine-sc": "^5.11.11", "@mui/x-date-pickers": "^6.6.0", "@next/bundle-analyzer": "^13.4.3", "@reduxjs/toolkit": "^1.9.5", - "@sentry/nextjs": "^7.59.2", + "@sentry/nextjs": "^8.42.0", "@types/cookie": "^0.5.1", "@types/intro.js": "^5.1.1", "@types/lodash": "^4.14.195", @@ -30,11 +31,14 @@ "@types/react-syntax-highlighter": "^15.5.7", "axios": "^0.24.0", "base64-encode-file": "^1.0.7", + "buffer": "^6.0.3", "chart.js": "^4.4.0", "cookie": "^0.5.0", "cross-env": "^7.0.3", "dayjs": "^1.11.8", "draft-js": "^0.11.7", + "draft-js-import-html": "^1.4.1", + "draftjs-to-html": "^0.9.1", "eslint": "^8.7.0", "eslint-config-next": "13.2.4", "eslint-plugin-prettier": "^4.2.1", @@ -50,6 +54,7 @@ "prettier": "^2.8.8", "react": "18.2.0", "react-chartjs-2": "^5.2.0", + "react-color": "^2.19.3", "react-cookie": "^4.1.1", "react-dom": "18.2.0", "react-draft-wysiwyg": "^1.15.0", @@ -64,9 +69,12 @@ "typescript": "5.1.3" }, "devDependencies": { + "@types/draftjs-to-html": "^0.8.4", "@types/intro.js": "^5.1.1", "@types/lodash": "^4.14.195", + "@types/react-color": "^3.0.13", "@types/react-draft-wysiwyg": "^1.13.8", + "@types/react-lottie": "^1.2.10", "@types/react-syntax-highlighter": "^15.5.7", "eslint-config-prettier": "^8.8.0", "lint-staged": "^13.2.2", @@ -89,7 +97,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -114,7 +121,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz", "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==", - "peer": true, "engines": { "node": ">=6.9.0" } @@ -123,7 +129,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz", "integrity": "sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==", - "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.13", @@ -195,7 +200,6 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", - "peer": true, "dependencies": { "@babel/compat-data": "^7.22.9", "@babel/helper-validator-option": "^7.22.15", @@ -253,7 +257,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", - "peer": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-module-imports": "^7.22.15", @@ -280,7 +283,6 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "peer": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -319,7 +321,6 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", - "peer": true, "engines": { "node": ">=6.9.0" } @@ -328,7 +329,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.4.tgz", "integrity": "sha512-HfcMizYz10cr3h29VqyfGL6ZWIjTwWfvYBMsBVGwpcbhNGe3wQ1ZXZRPzZoAHhd9OqHadHqjQ89iVKINXnbzuw==", - "peer": true, "dependencies": { "@babel/template": "^7.22.15", "@babel/traverse": "^7.23.4", @@ -377,9 +377,10 @@ } }, "node_modules/@babel/runtime": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.4.tgz", - "integrity": "sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -439,15 +440,16 @@ "integrity": "sha512-bhR5k5W+8GLzysjk8zTMVygQZsgvf7W1F0IlL4ZQ5ugjo5rCyiwGM5d8DYriXspytfu98tv59niang3/T+FoDw==" }, "node_modules/@emotion/babel-plugin": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", - "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", + "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.16.7", "@babel/runtime": "^7.18.3", - "@emotion/hash": "^0.9.1", - "@emotion/memoize": "^0.8.1", - "@emotion/serialize": "^1.1.2", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.3.3", "babel-plugin-macros": "^3.1.0", "convert-source-map": "^1.5.0", "escape-string-regexp": "^4.0.0", @@ -459,50 +461,56 @@ "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" }, "node_modules/@emotion/cache": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", - "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", - "dependencies": { - "@emotion/memoize": "^0.8.1", - "@emotion/sheet": "^1.2.2", - "@emotion/utils": "^1.2.1", - "@emotion/weak-memoize": "^0.3.1", + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", "stylis": "4.2.0" } }, "node_modules/@emotion/hash": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", - "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", + "license": "MIT" }, "node_modules/@emotion/is-prop-valid": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", - "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz", + "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==", + "license": "MIT", "dependencies": { - "@emotion/memoize": "^0.8.1" + "@emotion/memoize": "^0.9.0" } }, "node_modules/@emotion/memoize": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", - "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", + "license": "MIT" }, "node_modules/@emotion/react": { - "version": "11.11.1", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz", - "integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==", + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", + "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.11.0", - "@emotion/cache": "^11.11.0", - "@emotion/serialize": "^1.1.2", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@emotion/utils": "^1.2.1", - "@emotion/weak-memoize": "^0.3.1", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", "hoist-non-react-statics": "^3.3.1" }, "peerDependencies": { @@ -515,33 +523,36 @@ } }, "node_modules/@emotion/serialize": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz", - "integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", + "license": "MIT", "dependencies": { - "@emotion/hash": "^0.9.1", - "@emotion/memoize": "^0.8.1", - "@emotion/unitless": "^0.8.1", - "@emotion/utils": "^1.2.1", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", "csstype": "^3.0.2" } }, "node_modules/@emotion/sheet": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", - "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", + "license": "MIT" }, "node_modules/@emotion/styled": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", - "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz", + "integrity": "sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.11.0", - "@emotion/is-prop-valid": "^1.2.1", - "@emotion/serialize": "^1.1.2", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@emotion/utils": "^1.2.1" + "@emotion/babel-plugin": "^11.13.5", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2" }, "peerDependencies": { "@emotion/react": "^11.0.0-rc.0", @@ -559,27 +570,31 @@ "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" }, "node_modules/@emotion/unitless": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", - "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", + "license": "MIT" }, "node_modules/@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", - "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", + "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", + "license": "MIT", "peerDependencies": { "react": ">=16.8.0" } }, "node_modules/@emotion/utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", - "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", + "license": "MIT" }, "node_modules/@emotion/weak-memoize": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", - "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", + "license": "MIT" }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", @@ -738,14 +753,24 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==" }, + "node_modules/@icons/material": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz", + "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==", + "license": "MIT", + "peerDependencies": { + "react": "*" + } + }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -760,22 +785,36 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", "engines": { "node": ">=6.0.0" } }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -786,6 +825,24 @@ "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==" }, + "node_modules/@lottiefiles/dotlottie-react": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-react/-/dotlottie-react-0.12.0.tgz", + "integrity": "sha512-33Tsd67vlotrm43R8oko30Krwyuqb0YdOLra7L5m2mVfrTvDPEDBt8jfjgiveoLJ0jG/FlTLiCPXi/vCaBSXrg==", + "license": "MIT", + "dependencies": { + "@lottiefiles/dotlottie-web": "0.38.2" + }, + "peerDependencies": { + "react": "^17 || ^18 || ^19" + } + }, + "node_modules/@lottiefiles/dotlottie-web": { + "version": "0.38.2", + "resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-web/-/dotlottie-web-0.38.2.tgz", + "integrity": "sha512-01d+UjJ8NG7ZStYQxtb8FPzknzGmauG7gEkcH+wHfSdiSQJY9PoBNVSTB9V6F5hAnmFqOxaocTtd7TIEEnzMnA==", + "license": "MIT" + }, "node_modules/@mui/base": { "version": "5.0.0-beta.24", "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.24.tgz", @@ -818,32 +875,34 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.14.18", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.18.tgz", - "integrity": "sha512-yFpF35fEVDV81nVktu0BE9qn2dD/chs7PsQhlyaV3EnTeZi9RZBuvoEfRym1/jmhJ2tcfeWXiRuHG942mQXJJQ==", + "version": "5.16.12", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.12.tgz", + "integrity": "sha512-rkN+bPpe2Xn8h4ZLqKy5JsZt3nzMyTJ2ySdyLHHf0IL+PrxS46dxOIC1i66R8qi14kJBHfy7Byqv1yUvpwf0iw==", + "license": "MIT", "funding": { "type": "opencollective", - "url": "https://opencollective.com/mui" + "url": "https://opencollective.com/mui-org" } }, "node_modules/@mui/icons-material": { - "version": "5.14.18", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.14.18.tgz", - "integrity": "sha512-o2z49R1G4SdBaxZjbMmkn+2OdT1bKymLvAYaB6pH59obM1CYv/0vAVm6zO31IqhwtYwXv6A7sLIwCGYTaVkcdg==", + "version": "5.16.12", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.16.12.tgz", + "integrity": "sha512-4Ocmbl1uzkWxAdYYARCLySJNqALgrJ+Fdr95FLpKZV7zMZxyoJRdPTO/CgUxjFjlj9Sy2Gi7j3HX4f5HS2GLeQ==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.2" + "@babel/runtime": "^7.23.9" }, "engines": { "node": ">=12.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/mui" + "url": "https://opencollective.com/mui-org" }, "peerDependencies": { "@mui/material": "^5.0.0", - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -852,21 +911,22 @@ } }, "node_modules/@mui/material": { - "version": "5.14.18", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.18.tgz", - "integrity": "sha512-y3UiR/JqrkF5xZR0sIKj6y7xwuEiweh9peiN3Zfjy1gXWXhz5wjlaLdoxFfKIEBUFfeQALxr/Y8avlHH+B9lpQ==", + "version": "5.16.12", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.16.12.tgz", + "integrity": "sha512-+M0UPy0xa9xGo8TV1vp9Mmf85TNUqpk7OoSiw+BaZf3D584S3aqfl+CL+EBTt9t52A97GnCjVNvXTO7hmLqhHw==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.2", - "@mui/base": "5.0.0-beta.24", - "@mui/core-downloads-tracker": "^5.14.18", - "@mui/system": "^5.14.18", - "@mui/types": "^7.2.9", - "@mui/utils": "^5.14.18", - "@types/react-transition-group": "^4.4.8", - "clsx": "^2.0.0", - "csstype": "^3.1.2", + "@babel/runtime": "^7.23.9", + "@mui/core-downloads-tracker": "^5.16.12", + "@mui/system": "^5.16.12", + "@mui/types": "^7.2.15", + "@mui/utils": "^5.16.12", + "@popperjs/core": "^2.11.8", + "@types/react-transition-group": "^4.4.10", + "clsx": "^2.1.0", + "csstype": "^3.1.3", "prop-types": "^15.8.1", - "react-is": "^18.2.0", + "react-is": "^19.0.0", "react-transition-group": "^4.4.5" }, "engines": { @@ -874,14 +934,14 @@ }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/mui" + "url": "https://opencollective.com/mui-org" }, "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@emotion/react": { @@ -895,13 +955,20 @@ } } }, + "node_modules/@mui/material/node_modules/react-is": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.0.0.tgz", + "integrity": "sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==", + "license": "MIT" + }, "node_modules/@mui/private-theming": { - "version": "5.14.18", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.18.tgz", - "integrity": "sha512-WSgjqRlzfHU+2Rou3HlR2Gqfr4rZRsvFgataYO3qQ0/m6gShJN+lhVEvwEiJ9QYyVzMDvNpXZAcqp8Y2Vl+PAw==", + "version": "5.16.12", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.16.12.tgz", + "integrity": "sha512-hhLTSZxsazwZZ4bUAKgFcbsnfCrwizSnJI7/bXf/R9/tZkZBy+bKY05/Au/bIgGKzuZ4KTlKlPn+U/uufEXrNw==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.2", - "@mui/utils": "^5.14.18", + "@babel/runtime": "^7.23.9", + "@mui/utils": "^5.16.12", "prop-types": "^15.8.1" }, "engines": { @@ -909,11 +976,11 @@ }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/mui" + "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -922,13 +989,14 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.14.18", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.14.18.tgz", - "integrity": "sha512-pW8bpmF9uCB5FV2IPk6mfbQCjPI5vGI09NOLhtGXPeph/4xIfC3JdIX0TILU0WcTs3aFQqo6s2+1SFgIB9rCXA==", + "version": "5.16.12", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.16.12.tgz", + "integrity": "sha512-TMf3SN19rkJPh1hQZTjoY8UsJa5qExfr78owwCuEZLjIhsajAYiWmbJzJ8mM3grEWLiP3MziDA4zy4LFNri12Q==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.2", - "@emotion/cache": "^11.11.0", - "csstype": "^3.1.2", + "@babel/runtime": "^7.23.9", + "@emotion/cache": "^11.13.5", + "csstype": "^3.1.3", "prop-types": "^15.8.1" }, "engines": { @@ -936,12 +1004,12 @@ }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/mui" + "url": "https://opencollective.com/mui-org" }, "peerDependencies": { "@emotion/react": "^11.4.1", "@emotion/styled": "^11.3.0", - "react": "^17.0.0 || ^18.0.0" + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@emotion/react": { @@ -956,6 +1024,7 @@ "version": "5.14.12", "resolved": "https://registry.npmjs.org/@mui/styled-engine-sc/-/styled-engine-sc-5.14.12.tgz", "integrity": "sha512-FQ5KDd17OkRurE0ljR4Pddekv1uPSoJxcBqXa9tdoOETGULVCefM5Gd9CRGzT+alNPDyHBoUeEYKulIkDN9ytA==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.1", "csstype": "^3.1.2", @@ -979,17 +1048,18 @@ } }, "node_modules/@mui/system": { - "version": "5.14.18", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.18.tgz", - "integrity": "sha512-hSQQdb3KF72X4EN2hMEiv8EYJZSflfdd1TRaGPoR7CIAG347OxCslpBUwWngYobaxgKvq6xTrlIl+diaactVww==", + "version": "5.16.12", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.16.12.tgz", + "integrity": "sha512-rDsndVl0ug0Ex2rZt8x0WIF3Zc0EMFT2TmRVWP4jzk38aLS6WsxryXAZUQa0BKEnB3vfx1pSP/xa44TdKQ94dg==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.2", - "@mui/private-theming": "^5.14.18", - "@mui/styled-engine": "^5.14.18", - "@mui/types": "^7.2.9", - "@mui/utils": "^5.14.18", - "clsx": "^2.0.0", - "csstype": "^3.1.2", + "@babel/runtime": "^7.23.9", + "@mui/private-theming": "^5.16.12", + "@mui/styled-engine": "^5.16.12", + "@mui/types": "^7.2.15", + "@mui/utils": "^5.16.12", + "clsx": "^2.1.0", + "csstype": "^3.1.3", "prop-types": "^15.8.1" }, "engines": { @@ -997,13 +1067,13 @@ }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/mui" + "url": "https://opencollective.com/mui-org" }, "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@emotion/react": { @@ -1018,11 +1088,12 @@ } }, "node_modules/@mui/types": { - "version": "7.2.9", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.9.tgz", - "integrity": "sha512-k1lN/PolaRZfNsRdAqXtcR71sTnv3z/VCCGPxU8HfdftDkzi335MdJ6scZxvofMAd/K/9EbzCZTFBmlNpQVdCg==", + "version": "7.2.20", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.20.tgz", + "integrity": "sha512-straFHD7L8v05l/N5vcWk+y7eL9JF0C2mtph/y4BPm3gn2Eh61dDwDB65pa8DLss3WJfDXYC7Kx5yjP0EmXpgw==", + "license": "MIT", "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -1031,25 +1102,28 @@ } }, "node_modules/@mui/utils": { - "version": "5.14.18", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.18.tgz", - "integrity": "sha512-HZDRsJtEZ7WMSnrHV9uwScGze4wM/Y+u6pDVo+grUjt5yXzn+wI8QX/JwTHh9YSw/WpnUL80mJJjgCnWj2VrzQ==", + "version": "5.16.12", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.16.12.tgz", + "integrity": "sha512-p3JAq7nA0ur8M/zLnBvR6ZeAjM8mD4LnPdKfsJAYPS26w4eDQjQzl55XvoOmch2MeXhmWaO4Pkvs/xurrISNBw==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.2", - "@types/prop-types": "^15.7.10", + "@babel/runtime": "^7.23.9", + "@mui/types": "^7.2.15", + "@types/prop-types": "^15.7.12", + "clsx": "^2.1.1", "prop-types": "^15.8.1", - "react-is": "^18.2.0" + "react-is": "^19.0.0" }, "engines": { "node": ">=12.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/mui" + "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -1057,6 +1131,12 @@ } } }, + "node_modules/@mui/utils/node_modules/react-is": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.0.0.tgz", + "integrity": "sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==", + "license": "MIT" + }, "node_modules/@mui/x-date-pickers": { "version": "6.18.2", "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-6.18.2.tgz", @@ -1397,248 +1477,1106 @@ "node": ">= 8" } }, - "node_modules/@panva/hkdf": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.1.1.tgz", - "integrity": "sha512-dhPeilub1NuIG0X5Kvhh9lH4iW3ZsHlnzwgwbOlgwQ2wG1IqFzsgHqmKPk3WzsdWAeaxKJxgM0+W433RmN45GA==", - "funding": { - "url": "https://github.com/sponsors/panva" + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@polka/url": { - "version": "1.0.0-next.23", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.23.tgz", - "integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==" - }, - "node_modules/@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" + "node_modules/@opentelemetry/api-logs": { + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.56.0.tgz", + "integrity": "sha512-Wr39+94UNNG3Ei9nv3pHd4AJ63gq5nSemMRpCd8fPwDL9rN3vK26lzxfH27mw16XzOSO+TpyQwBAMaLxaPWG0g==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.3.0" + }, + "engines": { + "node": ">=14" } }, - "node_modules/@reduxjs/toolkit": { - "version": "1.9.7", - "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.7.tgz", - "integrity": "sha512-t7v8ZPxhhKgOKtU+uyJT13lu4vL7az5aFi4IdoDs/eS548edn2M8Ik9h8fxgvMjGoAUVFSt6ZC1P5cWmQ014QQ==", - "dependencies": { - "immer": "^9.0.21", - "redux": "^4.2.1", - "redux-thunk": "^2.4.2", - "reselect": "^4.1.8" + "node_modules/@opentelemetry/context-async-hooks": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.30.0.tgz", + "integrity": "sha512-roCetrG/cz0r/gugQm/jFo75UxblVvHaNSRoR0kSSRSzXFAiIBqFCZuH458BHBNRtRe+0yJdIJ21L9t94bw7+g==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" }, "peerDependencies": { - "react": "^16.9.0 || ^17.0.0 || ^18", - "react-redux": "^7.2.1 || ^8.0.2" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-redux": { - "optional": true - } + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@rollup/plugin-commonjs": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-24.0.0.tgz", - "integrity": "sha512-0w0wyykzdyRRPHOb0cQt14mIBLujfAv6GgP6g8nvg/iBxEm112t3YPPq+Buqe2+imvElTka+bjNlJ/gB56TD8g==", + "node_modules/@opentelemetry/core": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.0.tgz", + "integrity": "sha512-Q/3u/K73KUjTCnFUP97ZY+pBjQ1kPEgjOfXj/bJl8zW7GbXdkw6cwuyZk6ZTXkVgCBsYRYUzx4fvYK1jxdb9MA==", + "license": "Apache-2.0", "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "commondir": "^1.0.1", - "estree-walker": "^2.0.2", - "glob": "^8.0.3", - "is-reference": "1.2.1", - "magic-string": "^0.27.0" + "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=14" }, "peerDependencies": { - "rollup": "^2.68.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@rollup/pluginutils": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.5.tgz", - "integrity": "sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==", + "node_modules/@opentelemetry/instrumentation": { + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.56.0.tgz", + "integrity": "sha512-2KkGBKE+FPXU1F0zKww+stnlUxUTlBvLCiWdP63Z9sqXYeNI/ziNzsxAp4LAdUcTQmXjw1IWgvm5CAb/BHy99w==", + "license": "Apache-2.0", "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" + "@opentelemetry/api-logs": "0.56.0", + "@types/shimmer": "^1.2.0", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { - "node": ">=14.0.0" + "node": ">=14" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.6.0.tgz", - "integrity": "sha512-2/U3GXA6YiPYQDLGwtGlnNgKYBSwCFIHf8Y9LUY5VATHdtbLlU0Y1R3QoBnT0aB4qv/BEiVVsj7LJXoQCgJ2vA==" - }, - "node_modules/@sentry-internal/tracing": { - "version": "7.81.1", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.81.1.tgz", - "integrity": "sha512-E5xm27xrLXL10knH2EWDQsQYh5nb4SxxZzJ3sJwDGG9XGKzBdlp20UUhKqx00wixooVX9uCj3e4Jg8SvNB1hKg==", + "node_modules/@opentelemetry/instrumentation-amqplib": { + "version": "0.45.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.45.0.tgz", + "integrity": "sha512-SlKLsOS65NGMIBG1Lh/hLrMDU9WzTUF25apnV6ZmWZB1bBmUwan7qrwwrTu1cL5LzJWCXOdZPuTaxP7pC9qxnQ==", + "license": "Apache-2.0", "dependencies": { - "@sentry/core": "7.81.1", - "@sentry/types": "7.81.1", - "@sentry/utils": "7.81.1" + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { - "node": ">=8" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@sentry/browser": { - "version": "7.81.1", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.81.1.tgz", - "integrity": "sha512-DNtS7bZEnFPKVoGazKs5wHoWC0FwsOFOOMNeDvEfouUqKKbjO7+RDHbr7H6Bo83zX4qmZWRBf8V+3n3YPIiJFw==", + "node_modules/@opentelemetry/instrumentation-connect": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.42.0.tgz", + "integrity": "sha512-bOoYHBmbnq/jFaLHmXJ55VQ6jrH5fHDMAPjFM0d3JvR0dvIqW7anEoNC33QqYGFYUfVJ50S0d/eoyF61ALqQuA==", + "license": "Apache-2.0", "dependencies": { - "@sentry-internal/tracing": "7.81.1", - "@sentry/core": "7.81.1", - "@sentry/replay": "7.81.1", - "@sentry/types": "7.81.1", - "@sentry/utils": "7.81.1" + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@types/connect": "3.4.36" }, "engines": { - "node": ">=8" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@sentry/cli": { - "version": "1.77.1", - "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-1.77.1.tgz", - "integrity": "sha512-OtJ7U9LeuPUAY/xow9wwcjM9w42IJIpDtClTKI/RliE685vd/OJUIpiAvebHNthDYpQynvwb/0iuF4fonh+CKw==", - "hasInstallScript": true, + "node_modules/@opentelemetry/instrumentation-dataloader": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.15.0.tgz", + "integrity": "sha512-5fP35A2jUPk4SerVcduEkpbRAIoqa2PaP5rWumn01T1uSbavXNccAr3Xvx1N6xFtZxXpLJq4FYqGFnMgDWgVng==", + "license": "Apache-2.0", "dependencies": { - "https-proxy-agent": "^5.0.0", - "mkdirp": "^0.5.5", - "node-fetch": "^2.6.7", - "progress": "^2.0.3", - "proxy-from-env": "^1.1.0", - "which": "^2.0.2" - }, - "bin": { - "sentry-cli": "bin/sentry-cli" + "@opentelemetry/instrumentation": "^0.56.0" }, "engines": { - "node": ">= 8" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@sentry/core": { - "version": "7.81.1", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.81.1.tgz", - "integrity": "sha512-tU37yAmckOGCw/moWKSwekSCWWJP15O6luIq+u7wal22hE88F3Vc5Avo8SeF3upnPR+4ejaOFH+BJTr6bgrs6Q==", + "node_modules/@opentelemetry/instrumentation-express": { + "version": "0.46.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.46.0.tgz", + "integrity": "sha512-BCEClDj/HPq/1xYRAlOr6z+OUnbp2eFp18DSrgyQz4IT9pkdYk8eWHnMi9oZSqlC6J5mQzkFmaW5RrKb1GLQhg==", + "license": "Apache-2.0", "dependencies": { - "@sentry/types": "7.81.1", - "@sentry/utils": "7.81.1" + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { - "node": ">=8" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@sentry/integrations": { - "version": "7.81.1", - "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.81.1.tgz", - "integrity": "sha512-DN5ONn0/LX5HHVPf1EBGHFssIZaZmLgkqUIeMqCNYBpB4DiOrJANnGwTcWKDPphqhdPxjnPv9AGRLaU0PdvvZQ==", + "node_modules/@opentelemetry/instrumentation-fastify": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.43.0.tgz", + "integrity": "sha512-Lmdsg7tYiV+K3/NKVAQfnnLNGmakUOFdB0PhoTh2aXuSyCmyNnnDvhn2MsArAPTZ68wnD5Llh5HtmiuTkf+DyQ==", + "license": "Apache-2.0", "dependencies": { - "@sentry/core": "7.81.1", - "@sentry/types": "7.81.1", - "@sentry/utils": "7.81.1", - "localforage": "^1.8.1" + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { - "node": ">=8" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@sentry/nextjs": { - "version": "7.81.1", - "resolved": "https://registry.npmjs.org/@sentry/nextjs/-/nextjs-7.81.1.tgz", - "integrity": "sha512-Wx0QiZHttf+WJkao4UQ5szOWJVu/pmPdKZKE4FWsJuG+mUu6FviOXgh0T0Iq+NnJrgqzKzGLMN6rIWPzN9PLkg==", - "dependencies": { - "@rollup/plugin-commonjs": "24.0.0", - "@sentry/core": "7.81.1", - "@sentry/integrations": "7.81.1", - "@sentry/node": "7.81.1", - "@sentry/react": "7.81.1", - "@sentry/types": "7.81.1", - "@sentry/utils": "7.81.1", - "@sentry/vercel-edge": "7.81.1", - "@sentry/webpack-plugin": "1.21.0", - "chalk": "3.0.0", - "resolve": "1.22.8", - "rollup": "2.78.0", - "stacktrace-parser": "^0.1.10" + "node_modules/@opentelemetry/instrumentation-fs": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.18.0.tgz", + "integrity": "sha512-kC40y6CEMONm8/MWwoF5GHWIC7gOdF+g3sgsjfwJaUkgD6bdWV+FgG0XApqSbTQndICKzw3RonVk8i7s6mHqhA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.56.0" }, "engines": { - "node": ">=8" + "node": ">=14" }, "peerDependencies": { - "next": "^10.0.8 || ^11.0 || ^12.0 || ^13.0 || ^14.0", - "react": "16.x || 17.x || 18.x", - "webpack": ">= 4.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - } + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@sentry/nextjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@opentelemetry/instrumentation-generic-pool": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.42.0.tgz", + "integrity": "sha512-J4QxqiQ1imtB9ogzsOnHra0g3dmmLAx4JCeoK3o0rFes1OirljNHnO8Hsj4s1jAir8WmWvnEEQO1y8yk6j2tog==", + "license": "Apache-2.0", "dependencies": { - "color-convert": "^2.0.1" + "@opentelemetry/instrumentation": "^0.56.0" }, "engines": { - "node": ">=8" + "node": ">=14" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@sentry/nextjs/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/@opentelemetry/instrumentation-graphql": { + "version": "0.46.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.46.0.tgz", + "integrity": "sha512-tplk0YWINSECcK89PGM7IVtOYenXyoOuhOQlN0X0YrcDUfMS4tZMKkVc0vyhNWYYrexnUHwNry2YNBNugSpjlQ==", + "license": "Apache-2.0", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@opentelemetry/instrumentation": "^0.56.0" }, "engines": { - "node": ">=8" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@sentry/nextjs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@opentelemetry/instrumentation-hapi": { + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.44.0.tgz", + "integrity": "sha512-4HdNIMNXWK1O6nsaQOrACo83QWEVoyNODTdVDbUqtqXiv2peDfD0RAPhSQlSGWLPw3S4d9UoOmrV7s2HYj6T2A==", + "license": "Apache-2.0", "dependencies": { - "color-name": "~1.1.4" + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@sentry/nextjs/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "node_modules/@opentelemetry/instrumentation-http": { + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.56.0.tgz", + "integrity": "sha512-/bWHBUAq8VoATnH9iLk5w8CE9+gj+RgYSUphe7hry472n6fYl7+4PvuScoQMdmSUTprKq/gyr2kOWL6zrC7FkQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.29.0", + "@opentelemetry/instrumentation": "0.56.0", + "@opentelemetry/semantic-conventions": "1.28.0", + "forwarded-parse": "2.1.2", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/core": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.29.0.tgz", + "integrity": "sha512-gmT7vAreXl0DTHD2rVZcw3+l2g84+5XiHIqdBUxXbExymPCvSsGOpiwMmn8nkiJur28STV31wnhIDrzWDPzjfA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/instrumentation-http/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@opentelemetry/instrumentation-ioredis": { + "version": "0.46.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.46.0.tgz", + "integrity": "sha512-sOdsq8oGi29V58p1AkefHvuB3l2ymP1IbxRIX3y4lZesQWKL8fLhBmy8xYjINSQ5gHzWul2yoz7pe7boxhZcqQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-kafkajs": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.6.0.tgz", + "integrity": "sha512-MGQrzqEUAl0tacKJUFpuNHJesyTi51oUzSVizn7FdvJplkRIdS11FukyZBZJEscofSEdk7Ycmg+kNMLi5QHUFg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-knex": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.43.0.tgz", + "integrity": "sha512-mOp0TRQNFFSBj5am0WF67fRO7UZMUmsF3/7HSDja9g3H4pnj+4YNvWWyZn4+q0rGrPtywminAXe0rxtgaGYIqg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-koa": { + "version": "0.46.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.46.0.tgz", + "integrity": "sha512-RcWXMQdJQANnPUaXbHY5G0Fg6gmleZ/ZtZeSsekWPaZmQq12FGk0L1UwodIgs31OlYfviAZ4yTeytoSUkgo5vQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-lru-memoizer": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.43.0.tgz", + "integrity": "sha512-fZc+1eJUV+tFxaB3zkbupiA8SL3vhDUq89HbDNg1asweYrEb9OlHIB+Ot14ZiHUc1qCmmWmZHbPTwa56mVVwzg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.56.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mongodb": { + "version": "0.50.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.50.0.tgz", + "integrity": "sha512-DtwJMjYFXFT5auAvv8aGrBj1h3ciA/dXQom11rxL7B1+Oy3FopSpanvwYxJ+z0qmBrQ1/iMuWELitYqU4LnlkQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mongoose": { + "version": "0.45.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.45.0.tgz", + "integrity": "sha512-zHgNh+A01C5baI2mb5dAGyMC7DWmUpOfwpV8axtC0Hd5Uzqv+oqKgKbVDIVhOaDkPxjgVJwYF9YQZl2pw2qxIA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mysql": { + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.44.0.tgz", + "integrity": "sha512-al7jbXvT/uT1KV8gdNDzaWd5/WXf+mrjrsF0/NtbnqLa0UUFGgQnoK3cyborgny7I+KxWhL8h7YPTf6Zq4nKsg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@types/mysql": "2.15.26" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mysql2": { + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.44.0.tgz", + "integrity": "sha512-e9QY4AGsjGFwmfHd6kBa4yPaQZjAq2FuxMb0BbKlXCAjG+jwqw+sr9xWdJGR60jMsTq52hx3mAlE3dUJ9BipxQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@opentelemetry/sql-common": "^0.40.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-nestjs-core": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.43.0.tgz", + "integrity": "sha512-NEo4RU7HTjiaXk3curqXUvCb9alRiFWxQY//+hvDXwWLlADX2vB6QEmVCeEZrKO+6I/tBrI4vNdAnbCY9ldZVg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-pg": { + "version": "0.49.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.49.0.tgz", + "integrity": "sha512-3alvNNjPXVdAPdY1G7nGRVINbDxRK02+KAugDiEpzw0jFQfU8IzFkSWA4jyU4/GbMxKvHD+XIOEfSjpieSodKw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.26.0", + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "1.27.0", + "@opentelemetry/sql-common": "^0.40.1", + "@types/pg": "8.6.1", + "@types/pg-pool": "2.0.6" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-pg/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz", + "integrity": "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-redis-4": { + "version": "0.45.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.45.0.tgz", + "integrity": "sha512-Sjgym1xn3mdxPRH5CNZtoz+bFd3E3NlGIu7FoYr4YrQouCc9PbnmoBcmSkEdDy5LYgzNildPgsjx9l0EKNjKTQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-tedious": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.17.0.tgz", + "integrity": "sha512-yRBz2409an03uVd1Q2jWMt3SqwZqRFyKoWYYX3hBAtPDazJ4w5L+1VOij71TKwgZxZZNdDBXImTQjii+VeuzLg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@types/tedious": "^4.0.14" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-undici": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.9.0.tgz", + "integrity": "sha512-lxc3cpUZ28CqbrWcUHxGW/ObDpMOYbuxF/ZOzeFZq54P9uJ2Cpa8gcrC9F716mtuiMaekwk8D6n34vg/JtkkxQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.56.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.7.0" + } + }, + "node_modules/@opentelemetry/instrumentation/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@opentelemetry/redis-common": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.36.2.tgz", + "integrity": "sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/resources": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.0.tgz", + "integrity": "sha512-5mGMjL0Uld/99t7/pcd7CuVtJbkARckLVuiOX84nO8RtLtIz0/J6EOHM2TGvPZ6F4K+XjUq13gMx14w80SVCQg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.0", + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.30.0.tgz", + "integrity": "sha512-RKQDaDIkV7PwizmHw+rE/FgfB2a6MBx+AEVVlAHXRG1YYxLiBpPX2KhmoB99R5vA4b72iJrjle68NDWnbrE9Dg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.0", + "@opentelemetry/resources": "1.30.0", + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/sql-common": { + "version": "0.40.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sql-common/-/sql-common-0.40.1.tgz", + "integrity": "sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.1.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0" + } + }, + "node_modules/@panva/hkdf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.1.1.tgz", + "integrity": "sha512-dhPeilub1NuIG0X5Kvhh9lH4iW3ZsHlnzwgwbOlgwQ2wG1IqFzsgHqmKPk3WzsdWAeaxKJxgM0+W433RmN45GA==", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.23", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.23.tgz", + "integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==" + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@prisma/instrumentation": { + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-5.22.0.tgz", + "integrity": "sha512-LxccF392NN37ISGxIurUljZSh1YWnphO34V5a0+T7FVQG2u9bhAXRTJpgmQ3483woVhkraQZFF7cbRrpbw/F4Q==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.8", + "@opentelemetry/instrumentation": "^0.49 || ^0.50 || ^0.51 || ^0.52.0 || ^0.53.0", + "@opentelemetry/sdk-trace-base": "^1.22" + } + }, + "node_modules/@prisma/instrumentation/node_modules/@opentelemetry/api-logs": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz", + "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@prisma/instrumentation/node_modules/@opentelemetry/instrumentation": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz", + "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.53.0", + "@types/shimmer": "^1.2.0", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@prisma/instrumentation/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@reduxjs/toolkit": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.7.tgz", + "integrity": "sha512-t7v8ZPxhhKgOKtU+uyJT13lu4vL7az5aFi4IdoDs/eS548edn2M8Ik9h8fxgvMjGoAUVFSt6ZC1P5cWmQ014QQ==", + "dependencies": { + "immer": "^9.0.21", + "redux": "^4.2.1", + "redux-thunk": "^2.4.2", + "reselect": "^4.1.8" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18", + "react-redux": "^7.2.1 || ^8.0.2" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "28.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.1.tgz", + "integrity": "sha512-+tNWdlWKbpB3WgBN7ijjYkq9X5uhjmcvyjEght4NmH5fAU++zfQzAJ6wumLS+dNcvwEZhKx2Z+skY8m7v0wGSA==", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "fdir": "^6.2.0", + "is-reference": "1.2.1", + "magic-string": "^0.30.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=16.0.0 || 14 >= 14.17" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/fdir": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.2.tgz", + "integrity": "sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==", + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.6.0.tgz", + "integrity": "sha512-2/U3GXA6YiPYQDLGwtGlnNgKYBSwCFIHf8Y9LUY5VATHdtbLlU0Y1R3QoBnT0aB4qv/BEiVVsj7LJXoQCgJ2vA==" + }, + "node_modules/@sentry-internal/browser-utils": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.47.0.tgz", + "integrity": "sha512-vOXzYzHTKkahTLDzWWIA4EiVCQ+Gk+7xGWUlNcR2ZiEPBqYZVb5MjsUozAcc7syrSUy6WicyFjcomZ3rlCVQhg==", + "license": "MIT", + "dependencies": { + "@sentry/core": "8.47.0" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry-internal/feedback": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.47.0.tgz", + "integrity": "sha512-IAiIemTQIalxAOYhUENs9bZ8pMNgJnX3uQSuY7v0gknEqClOGpGkG04X/cxCmtJUj1acZ9ShTGDxoh55a+ggAQ==", + "license": "MIT", + "dependencies": { + "@sentry/core": "8.47.0" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry-internal/replay": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.47.0.tgz", + "integrity": "sha512-G/S40ZBORj0HSMLw/uVC6YDEPN/dqVk901vf4VYfml686DEhJrZesfAfp5SydJumQ0NKZQrdtvny+BWnlI5H1w==", + "license": "MIT", + "dependencies": { + "@sentry-internal/browser-utils": "8.47.0", + "@sentry/core": "8.47.0" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry-internal/replay-canvas": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.47.0.tgz", + "integrity": "sha512-M4W9UGouEeELbGbP3QsXLDVtGiQSZoWJlKwqMWyqdQgZuLoKw0S33+60t6teLVMhuQZR0UI9VJTF5coiXysnnA==", + "license": "MIT", + "dependencies": { + "@sentry-internal/replay": "8.47.0", + "@sentry/core": "8.47.0" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry/babel-plugin-component-annotate": { + "version": "2.22.7", + "resolved": "https://registry.npmjs.org/@sentry/babel-plugin-component-annotate/-/babel-plugin-component-annotate-2.22.7.tgz", + "integrity": "sha512-aa7XKgZMVl6l04NY+3X7BP7yvQ/s8scn8KzQfTLrGRarziTlMGrsCOBQtCNWXOPEbtxAIHpZ9dsrAn5EJSivOQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@sentry/browser": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.47.0.tgz", + "integrity": "sha512-K6BzHisykmbFy/wORtGyfsAlw7ShevLALzu3ReZZZ18dVubO1bjSNjkZQU9MJD5Jcb9oLwkq89n3N9XIBfvdRA==", + "license": "MIT", + "dependencies": { + "@sentry-internal/browser-utils": "8.47.0", + "@sentry-internal/feedback": "8.47.0", + "@sentry-internal/replay": "8.47.0", + "@sentry-internal/replay-canvas": "8.47.0", + "@sentry/core": "8.47.0" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry/bundler-plugin-core": { + "version": "2.22.7", + "resolved": "https://registry.npmjs.org/@sentry/bundler-plugin-core/-/bundler-plugin-core-2.22.7.tgz", + "integrity": "sha512-ouQh5sqcB8vsJ8yTTe0rf+iaUkwmeUlGNFi35IkCFUQlWJ22qS6OfvNjOqFI19e6eGUXks0c/2ieFC4+9wJ+1g==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.18.5", + "@sentry/babel-plugin-component-annotate": "2.22.7", + "@sentry/cli": "2.39.1", + "dotenv": "^16.3.1", + "find-up": "^5.0.0", + "glob": "^9.3.2", + "magic-string": "0.30.8", + "unplugin": "1.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@sentry/bundler-plugin-core/node_modules/magic-string": { + "version": "0.30.8", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", + "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@sentry/cli": { + "version": "2.39.1", + "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-2.39.1.tgz", + "integrity": "sha512-JIb3e9vh0+OmQ0KxmexMXg9oZsR/G7HMwxt5BUIKAXZ9m17Xll4ETXTRnRUBT3sf7EpNGAmlQk1xEmVN9pYZYQ==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.7", + "progress": "^2.0.3", + "proxy-from-env": "^1.1.0", + "which": "^2.0.2" + }, + "bin": { + "sentry-cli": "bin/sentry-cli" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@sentry/cli-darwin": "2.39.1", + "@sentry/cli-linux-arm": "2.39.1", + "@sentry/cli-linux-arm64": "2.39.1", + "@sentry/cli-linux-i686": "2.39.1", + "@sentry/cli-linux-x64": "2.39.1", + "@sentry/cli-win32-i686": "2.39.1", + "@sentry/cli-win32-x64": "2.39.1" + } + }, + "node_modules/@sentry/cli-darwin": { + "version": "2.39.1", + "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-2.39.1.tgz", + "integrity": "sha512-kiNGNSAkg46LNGatfNH5tfsmI/kCAaPA62KQuFZloZiemTNzhy9/6NJP8HZ/GxGs8GDMxic6wNrV9CkVEgFLJQ==", + "license": "BSD-3-Clause", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@sentry/cli-linux-arm": { + "version": "2.39.1", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-2.39.1.tgz", + "integrity": "sha512-DkENbxyRxUrfLnJLXTA4s5UL/GoctU5Cm4ER1eB7XN7p9WsamFJd/yf2KpltkjEyiTuplv0yAbdjl1KX3vKmEQ==", + "cpu": [ + "arm" + ], + "license": "BSD-3-Clause", + "optional": true, + "os": [ + "linux", + "freebsd" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@sentry/cli-linux-arm64": { + "version": "2.39.1", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.39.1.tgz", + "integrity": "sha512-5VbVJDatolDrWOgaffsEM7znjs0cR8bHt9Bq0mStM3tBolgAeSDHE89NgHggfZR+DJ2VWOy4vgCwkObrUD6NQw==", + "cpu": [ + "arm64" + ], + "license": "BSD-3-Clause", + "optional": true, + "os": [ + "linux", + "freebsd" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@sentry/cli-linux-i686": { + "version": "2.39.1", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-2.39.1.tgz", + "integrity": "sha512-pXWVoKXCRrY7N8vc9H7mETiV9ZCz+zSnX65JQCzZxgYrayQPJTc+NPRnZTdYdk5RlAupXaFicBI2GwOCRqVRkg==", + "cpu": [ + "x86", + "ia32" + ], + "license": "BSD-3-Clause", + "optional": true, + "os": [ + "linux", + "freebsd" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@sentry/cli-linux-x64": { + "version": "2.39.1", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-2.39.1.tgz", + "integrity": "sha512-IwayNZy+it7FWG4M9LayyUmG1a/8kT9+/IEm67sT5+7dkMIMcpmHDqL8rWcPojOXuTKaOBBjkVdNMBTXy0mXlA==", + "cpu": [ + "x64" + ], + "license": "BSD-3-Clause", + "optional": true, + "os": [ + "linux", + "freebsd" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@sentry/cli-win32-i686": { + "version": "2.39.1", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-2.39.1.tgz", + "integrity": "sha512-NglnNoqHSmE+Dz/wHeIVRnV2bLMx7tIn3IQ8vXGO5HWA2f8zYJGktbkLq1Lg23PaQmeZLPGlja3gBQfZYSG10Q==", + "cpu": [ + "x86", + "ia32" + ], + "license": "BSD-3-Clause", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@sentry/cli-win32-x64": { + "version": "2.39.1", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-2.39.1.tgz", + "integrity": "sha512-xv0R2CMf/X1Fte3cMWie1NXuHmUyQPDBfCyIt6k6RPFPxAYUgcqgMPznYwVMwWEA1W43PaOkSn3d8ZylsDaETw==", + "cpu": [ + "x64" + ], + "license": "BSD-3-Clause", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@sentry/core": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.47.0.tgz", + "integrity": "sha512-iSEJZMe3DOcqBFZQAqgA3NB2lCWBc4Gv5x/SCri/TVg96wAlss4VrUunSI2Mp0J4jJ5nJcJ2ChqHSBAU48k3FA==", + "license": "MIT", + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry/nextjs": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@sentry/nextjs/-/nextjs-8.47.0.tgz", + "integrity": "sha512-qr++MBYhyAwF25hGq7LAxe3Xehs+w2V4b8mVxilRYFXNkWFazY1ukZcVzq9pKrrt5uTiURTf68e8eVMraHnHEQ==", + "license": "MIT", + "dependencies": { + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/semantic-conventions": "^1.28.0", + "@rollup/plugin-commonjs": "28.0.1", + "@sentry-internal/browser-utils": "8.47.0", + "@sentry/core": "8.47.0", + "@sentry/node": "8.47.0", + "@sentry/opentelemetry": "8.47.0", + "@sentry/react": "8.47.0", + "@sentry/vercel-edge": "8.47.0", + "@sentry/webpack-plugin": "2.22.7", + "chalk": "3.0.0", + "resolve": "1.22.8", + "rollup": "3.29.5", + "stacktrace-parser": "^0.1.10" + }, + "engines": { + "node": ">=14.18" + }, + "peerDependencies": { + "next": "^13.2.0 || ^14.0 || ^15.0.0-rc.0" + } + }, + "node_modules/@sentry/nextjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@sentry/nextjs/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/nextjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@sentry/nextjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@sentry/nextjs/node_modules/has-flag": { @@ -1661,94 +2599,128 @@ } }, "node_modules/@sentry/node": { - "version": "7.81.1", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.81.1.tgz", - "integrity": "sha512-bKS3Mb95bar8AUEZSLKQ/RTSfFXo5sCSPNiBr5dDFuVljDFdkLq6NE3svG5bisrbENqfi0bqWsB4GZ7NHRTPbA==", + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-8.47.0.tgz", + "integrity": "sha512-tMzeU3KkmDi2OVvSu+Ah5pwoi7srsSyc1DovBbRQU96RFf/lOFzGe9JERa1MyDUqqLH95NqnPTNsa4Amb8/Vxg==", + "license": "MIT", "dependencies": { - "@sentry-internal/tracing": "7.81.1", - "@sentry/core": "7.81.1", - "@sentry/types": "7.81.1", - "@sentry/utils": "7.81.1", - "https-proxy-agent": "^5.0.0" + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/context-async-hooks": "^1.29.0", + "@opentelemetry/core": "^1.29.0", + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/instrumentation-amqplib": "^0.45.0", + "@opentelemetry/instrumentation-connect": "0.42.0", + "@opentelemetry/instrumentation-dataloader": "0.15.0", + "@opentelemetry/instrumentation-express": "0.46.0", + "@opentelemetry/instrumentation-fastify": "0.43.0", + "@opentelemetry/instrumentation-fs": "0.18.0", + "@opentelemetry/instrumentation-generic-pool": "0.42.0", + "@opentelemetry/instrumentation-graphql": "0.46.0", + "@opentelemetry/instrumentation-hapi": "0.44.0", + "@opentelemetry/instrumentation-http": "0.56.0", + "@opentelemetry/instrumentation-ioredis": "0.46.0", + "@opentelemetry/instrumentation-kafkajs": "0.6.0", + "@opentelemetry/instrumentation-knex": "0.43.0", + "@opentelemetry/instrumentation-koa": "0.46.0", + "@opentelemetry/instrumentation-lru-memoizer": "0.43.0", + "@opentelemetry/instrumentation-mongodb": "0.50.0", + "@opentelemetry/instrumentation-mongoose": "0.45.0", + "@opentelemetry/instrumentation-mysql": "0.44.0", + "@opentelemetry/instrumentation-mysql2": "0.44.0", + "@opentelemetry/instrumentation-nestjs-core": "0.43.0", + "@opentelemetry/instrumentation-pg": "0.49.0", + "@opentelemetry/instrumentation-redis-4": "0.45.0", + "@opentelemetry/instrumentation-tedious": "0.17.0", + "@opentelemetry/instrumentation-undici": "0.9.0", + "@opentelemetry/resources": "^1.29.0", + "@opentelemetry/sdk-trace-base": "^1.29.0", + "@opentelemetry/semantic-conventions": "^1.28.0", + "@prisma/instrumentation": "5.22.0", + "@sentry/core": "8.47.0", + "@sentry/opentelemetry": "8.47.0", + "import-in-the-middle": "^1.11.2" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry/opentelemetry": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-8.47.0.tgz", + "integrity": "sha512-wunyBIUPeY6Kx3SFhOQqOPs+hyRADO5bztpo8aZ3N3xfzhefSTOdrgUroKvHx1DvoQO6MAlykcuUFps3yfaqmg==", + "license": "MIT", + "dependencies": { + "@sentry/core": "8.47.0" }, "engines": { - "node": ">=8" + "node": ">=14.18" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/core": "^1.29.0", + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/sdk-trace-base": "^1.29.0", + "@opentelemetry/semantic-conventions": "^1.28.0" } }, "node_modules/@sentry/react": { - "version": "7.81.1", - "resolved": "https://registry.npmjs.org/@sentry/react/-/react-7.81.1.tgz", - "integrity": "sha512-kk0plP/mf8KgVLOiImIpp1liYysmh3Un8uXcVAToomSuHZPGanelFAdP0XhY+0HlWU9KIfxTjhMte1iSwQ8pYw==", + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@sentry/react/-/react-8.47.0.tgz", + "integrity": "sha512-SRk2Up+qBTow4rQGiRXViC2i4M5w/tae5w8I/rmX+IxFoPyh8wXERcLAj/8xbbRm8aR+A4i5gNgfFtrYsyFJFA==", + "license": "MIT", "dependencies": { - "@sentry/browser": "7.81.1", - "@sentry/types": "7.81.1", - "@sentry/utils": "7.81.1", + "@sentry/browser": "8.47.0", + "@sentry/core": "8.47.0", "hoist-non-react-statics": "^3.3.2" }, "engines": { - "node": ">=8" + "node": ">=14.18" }, "peerDependencies": { - "react": "15.x || 16.x || 17.x || 18.x" + "react": "^16.14.0 || 17.x || 18.x || 19.x" } }, - "node_modules/@sentry/replay": { - "version": "7.81.1", - "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.81.1.tgz", - "integrity": "sha512-4ueT0C4bYjngN/9p0fEYH10dTMLovHyk9HxJ6zSTgePvGVexhg+cSEHXisoBDwHeRZVnbIvsVM0NA7rmEDXJJw==", + "node_modules/@sentry/vercel-edge": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@sentry/vercel-edge/-/vercel-edge-8.47.0.tgz", + "integrity": "sha512-oEVyoFehBnbao1aKd5OagkA5H2zowMsbgRZRPLFHELCSyoJbpShEM6L33rVvDz9xnkcaahuEO8op9U/4pUj1vA==", + "license": "MIT", "dependencies": { - "@sentry-internal/tracing": "7.81.1", - "@sentry/core": "7.81.1", - "@sentry/types": "7.81.1", - "@sentry/utils": "7.81.1" + "@opentelemetry/api": "^1.9.0", + "@sentry/core": "8.47.0" }, "engines": { - "node": ">=12" - } - }, - "node_modules/@sentry/types": { - "version": "7.81.1", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.81.1.tgz", - "integrity": "sha512-dvJvGyctiaPMIQqa46k56Re5IODWMDxiHJ1UjBs/WYDLrmWFPGrEbyJ8w8CYLhYA+7qqrCyIZmHbWSTRIxstHw==", - "engines": { - "node": ">=8" + "node": ">=14.18" } }, - "node_modules/@sentry/utils": { - "version": "7.81.1", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.81.1.tgz", - "integrity": "sha512-gq+MDXIirHKxNZ+c9/lVvCXd6y2zaZANujwlFggRH2u9SRiPaIXVilLpvMm4uJqmqBMEcY81ArujExtHvkbCqg==", + "node_modules/@sentry/webpack-plugin": { + "version": "2.22.7", + "resolved": "https://registry.npmjs.org/@sentry/webpack-plugin/-/webpack-plugin-2.22.7.tgz", + "integrity": "sha512-j5h5LZHWDlm/FQCCmEghQ9FzYXwfZdlOf3FE/X6rK6lrtx0JCAkq+uhMSasoyP4XYKL4P4vRS6WFSos4jxf/UA==", + "license": "MIT", "dependencies": { - "@sentry/types": "7.81.1" + "@sentry/bundler-plugin-core": "2.22.7", + "unplugin": "1.0.1", + "uuid": "^9.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/vercel-edge": { - "version": "7.81.1", - "resolved": "https://registry.npmjs.org/@sentry/vercel-edge/-/vercel-edge-7.81.1.tgz", - "integrity": "sha512-fO5yV+2rz+024XKvhBSGhUdi502j3S1Vds+fIUJVgpgehpxsx4CQQUA1nQDaqDWEtPCB6LcBupD3XvkhBTS5Mw==", - "dependencies": { - "@sentry-internal/tracing": "7.81.1", - "@sentry/core": "7.81.1", - "@sentry/types": "7.81.1", - "@sentry/utils": "7.81.1" + "node": ">= 14" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "webpack": ">=4.40.0" } }, - "node_modules/@sentry/webpack-plugin": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/@sentry/webpack-plugin/-/webpack-plugin-1.21.0.tgz", - "integrity": "sha512-x0PYIMWcsTauqxgl7vWUY6sANl+XGKtx7DCVnnY7aOIIlIna0jChTAPANTfA2QrK+VK+4I/4JxatCEZBnXh3Og==", - "dependencies": { - "@sentry/cli": "^1.77.1", - "webpack-sources": "^2.0.0 || ^3.0.0" - }, - "engines": { - "node": ">= 8" + "node_modules/@sentry/webpack-plugin/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" } }, "node_modules/@swc/helpers": { @@ -1759,6 +2731,15 @@ "tslib": "^2.4.0" } }, + "node_modules/@types/connect": { + "version": "3.4.36", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", + "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/cookie": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.4.tgz", @@ -1791,10 +2772,43 @@ "node": ">=0.8.0" } }, + "node_modules/@types/draftjs-to-html": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@types/draftjs-to-html/-/draftjs-to-html-0.8.4.tgz", + "integrity": "sha512-5FZcjFoJL57N/IttLCTCNI0krX+181oCl5hf76u3TqPkqBAphHrJAO9ReYesx9138kcObaYmpnWC2Yrqxoqd2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/draft-js": "*" + } + }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "license": "MIT" }, "node_modules/@types/hast": { "version": "2.3.8", @@ -1819,6 +2833,13 @@ "integrity": "sha512-TT1d8ayz07svlBcoqh26sNpQaU6bBpdFcCC+IMZHp46NNX2mYAHAVefM3wCmQSd4UWhhObeMjFByw2IaPKOXlw==", "dev": true }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT", + "peer": true + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -1843,6 +2864,15 @@ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" }, + "node_modules/@types/mysql": { + "version": "2.15.26", + "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.26.tgz", + "integrity": "sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/node": { "version": "18.15.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.2.tgz", @@ -1851,12 +2881,34 @@ "node_modules/@types/parse-json": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" + }, + "node_modules/@types/pg": { + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz", + "integrity": "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" + } + }, + "node_modules/@types/pg-pool": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.6.tgz", + "integrity": "sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==", + "license": "MIT", + "dependencies": { + "@types/pg": "*" + } }, "node_modules/@types/prop-types": { - "version": "15.7.11", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", - "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" + "version": "15.7.14", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", + "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", + "license": "MIT" }, "node_modules/@types/react": { "version": "18.0.28", @@ -1868,6 +2920,19 @@ "csstype": "^3.0.2" } }, + "node_modules/@types/react-color": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@types/react-color/-/react-color-3.0.13.tgz", + "integrity": "sha512-2c/9FZ4ixC5T3JzN0LP5Cke2Mf0MKOP2Eh0NPDPWmuVH3NjPyhEjqNMQpN1Phr5m74egAy+p2lYNAFrX1z9Yrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/reactcss": "*" + }, + "peerDependencies": { + "@types/react": "*" + } + }, "node_modules/@types/react-dom": { "version": "18.0.11", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz", @@ -1886,6 +2951,16 @@ "@types/react": "*" } }, + "node_modules/@types/react-lottie": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@types/react-lottie/-/react-lottie-1.2.10.tgz", + "integrity": "sha512-rCd1p3US4ELKJlqwVnP0h5b24zt5p9OCvKUoNpYExLqwbFZMWEiJ6EGLMmH7nmq5V7KomBIbWO2X/XRFsL0vCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/react-syntax-highlighter": { "version": "15.5.10", "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-15.5.10.tgz", @@ -1896,10 +2971,21 @@ } }, "node_modules/@types/react-transition-group": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.9.tgz", - "integrity": "sha512-ZVNmWumUIh5NhH8aMD9CR2hdW0fNuYInlocZHaZ+dgk/1K49j1w/HoAuK1ki+pgscQrOFRTlXeoURtuzEkV3dg==", - "dependencies": { + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", + "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/reactcss": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@types/reactcss/-/reactcss-1.2.13.tgz", + "integrity": "sha512-gi3S+aUi6kpkF5vdhUsnkwbiSEIU/BEJyD7kBy2SudWBUuKmJk8AQKE0OVcQQeEy40Azh0lV6uynxlikYIJuwg==", + "dev": true, + "license": "MIT", + "peerDependencies": { "@types/react": "*" } }, @@ -1908,6 +2994,21 @@ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" }, + "node_modules/@types/shimmer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz", + "integrity": "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==", + "license": "MIT" + }, + "node_modules/@types/tedious": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.14.tgz", + "integrity": "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/unist": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", @@ -2060,10 +3161,186 @@ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "license": "Apache-2.0", + "peer": true + }, "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -2071,6 +3348,15 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -2091,6 +3377,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", "dependencies": { "debug": "4" }, @@ -2113,6 +3400,58 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT", + "peer": true + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peer": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, "node_modules/ansi-escapes": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", @@ -2351,6 +3690,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.5", "cosmiconfig": "^7.0.0", @@ -2396,6 +3736,26 @@ "integrity": "sha512-5f9xGrLRBPc6OYM+qqAbsdxjGDCdRqYnThwCmSpBGVa9JDbKochGJXyMc9ufZ+RGYJcZuh/Pt/qeroJy7jyORg==", "license": "MIT" }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -2425,9 +3785,9 @@ } }, "node_modules/browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.3.tgz", + "integrity": "sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==", "funding": [ { "type": "opencollective", @@ -2442,12 +3802,12 @@ "url": "https://github.com/sponsors/ai" } ], - "peer": true, + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.13" + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" @@ -2456,6 +3816,37 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT", + "peer": true + }, "node_modules/call-bind": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", @@ -2486,9 +3877,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001564", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001564.tgz", - "integrity": "sha512-DqAOf+rhof+6GVx1y+xzbFPeOumfQnhYzVnZD6LAXijR77yPtm9mfOcqOnT3mpnJiZVT+kwLAFnRlZcIz+c6bg==", + "version": "1.0.30001690", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz", + "integrity": "sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==", "funding": [ { "type": "opencollective", @@ -2502,7 +3893,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/ccount": { "version": "2.0.1", @@ -2609,6 +4001,22 @@ "node": ">= 6" } }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", + "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==", + "license": "MIT" + }, "node_modules/classnames": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", @@ -2651,9 +4059,10 @@ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" }, "node_modules/clsx": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", - "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", "engines": { "node": ">=6" } @@ -2698,7 +4107,8 @@ "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", @@ -2708,8 +4118,7 @@ "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "peer": true + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "node_modules/cookie": { "version": "0.5.0", @@ -2733,6 +4142,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "license": "MIT", "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -2801,9 +4211,10 @@ } }, "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" }, "node_modules/damerau-levenshtein": { "version": "1.0.8", @@ -2933,6 +4344,18 @@ "csstype": "^3.0.2" } }, + "node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/draft-js": { "version": "0.11.7", "resolved": "https://registry.npmjs.org/draft-js/-/draft-js-0.11.7.tgz", @@ -2947,6 +4370,43 @@ "react-dom": ">=0.14.0" } }, + "node_modules/draft-js-import-element": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/draft-js-import-element/-/draft-js-import-element-1.4.0.tgz", + "integrity": "sha512-WmYT5PrCm47lGL5FkH6sRO3TTAcn7qNHsD3igiPqLG/RXrqyKrqN4+wBgbcT2lhna/yfWTRtgzAbQsSJoS1Meg==", + "license": "ISC", + "dependencies": { + "draft-js-utils": "^1.4.0", + "synthetic-dom": "^1.4.0" + }, + "peerDependencies": { + "draft-js": ">=0.10.0", + "immutable": "3.x.x" + } + }, + "node_modules/draft-js-import-html": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/draft-js-import-html/-/draft-js-import-html-1.4.1.tgz", + "integrity": "sha512-KOZmtgxZriCDgg5Smr3Y09TjubvXe7rHPy/2fuLSsL+aSzwUDwH/aHDA/k47U+WfpmL4qgyg4oZhqx9TYJV0tg==", + "license": "ISC", + "dependencies": { + "draft-js-import-element": "^1.4.0" + }, + "peerDependencies": { + "draft-js": ">=0.10.0", + "immutable": "3.x.x" + } + }, + "node_modules/draft-js-utils": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/draft-js-utils/-/draft-js-utils-1.4.1.tgz", + "integrity": "sha512-xE81Y+z/muC5D5z9qWmKfxEW1XyXfsBzSbSBk2JRsoD0yzMGGHQm/0MtuqHl/EUDkaBJJLjJ2EACycoDMY/OOg==", + "license": "ISC", + "peerDependencies": { + "draft-js": ">=0.10.0", + "immutable": "3.x.x" + } + }, "node_modules/draft-js/node_modules/immutable": { "version": "3.7.6", "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz", @@ -2955,6 +4415,12 @@ "node": ">=0.8.0" } }, + "node_modules/draftjs-to-html": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/draftjs-to-html/-/draftjs-to-html-0.9.1.tgz", + "integrity": "sha512-fFstE6+IayaVFBEvaFt/wN8vdj8FsTRzij7dy7LI9QIwf5LgfHFi9zSpvCg+feJ2tbYVqHxUkjcibwpsTpgFVQ==", + "license": "MIT" + }, "node_modules/draftjs-utils": { "version": "0.10.2", "resolved": "https://registry.npmjs.org/draftjs-utils/-/draftjs-utils-0.10.2.tgz", @@ -2976,10 +4442,10 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.594", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.594.tgz", - "integrity": "sha512-xT1HVAu5xFn7bDfkjGQi9dNpMqGchUkebwf1GL7cZN32NSwwlHRPMSDJ1KN6HkS0bWUtndbSQZqvpQftKG2uFQ==", - "peer": true + "version": "1.5.75", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.75.tgz", + "integrity": "sha512-Lf3++DumRE/QmweGjU+ZcKqQ+3bKkU/qjaKYhIJKEOhgIO9Xs6IiAQFkfFoj+RhgDk4LUeNsLo6plExHqSyu6Q==", + "license": "ISC" }, "node_modules/emoji-regex": { "version": "9.2.2", @@ -2998,9 +4464,10 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz", + "integrity": "sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==", + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -3013,6 +4480,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } @@ -3090,6 +4558,13 @@ "safe-array-concat": "^1.0.1" } }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "license": "MIT", + "peer": true + }, "node_modules/es-set-tostringtag": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", @@ -3128,10 +4603,10 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "peer": true, + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", "engines": { "node": ">=6" } @@ -3680,7 +5155,8 @@ "node_modules/estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" }, "node_modules/esutils": { "version": "2.0.3", @@ -3696,6 +5172,16 @@ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", "dev": true }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/execa": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", @@ -3770,6 +5256,13 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, + "node_modules/fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "license": "BSD-3-Clause", + "peer": true + }, "node_modules/fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", @@ -3835,7 +5328,8 @@ "node_modules/find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "license": "MIT" }, "node_modules/find-up": { "version": "5.0.0", @@ -3905,6 +5399,12 @@ "node": ">=0.4.x" } }, + "node_modules/forwarded-parse": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/forwarded-parse/-/forwarded-parse-2.1.2.tgz", + "integrity": "sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==", + "license": "MIT" + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3960,7 +5460,6 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "peer": true, "engines": { "node": ">=6.9.0" } @@ -4018,18 +5517,18 @@ } }, "node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" }, "engines": { - "node": ">=12" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -4046,23 +5545,35 @@ "node": ">=10.13.0" } }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "license": "BSD-2-Clause", + "peer": true + }, "node_modules/glob/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/globals": { @@ -4321,6 +5832,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", "dependencies": { "agent-base": "6", "debug": "4" @@ -4393,6 +5905,26 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/ignore": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", @@ -4401,11 +5933,6 @@ "node": ">= 4" } }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" - }, "node_modules/immer": { "version": "9.0.21", "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", @@ -4416,9 +5943,14 @@ } }, "node_modules/immutable": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", - "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==" + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/import-fresh": { "version": "3.3.0", @@ -4435,6 +5967,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-in-the-middle": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.12.0.tgz", + "integrity": "sha512-yAgSE7GmtRcu4ZUSFX/4v69UGXwugFFSdIQJ14LHPOPPQrWv8Y7O9PHsw8Ovk7bKCLe4sjXMbZFqGFcLHpZ89w==", + "license": "Apache-2.0", + "dependencies": { + "acorn": "^8.8.2", + "acorn-import-attributes": "^1.9.5", + "cjs-module-lexer": "^1.2.2", + "module-details-from-path": "^1.0.3" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -4528,7 +6072,8 @@ "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" }, "node_modules/is-async-function": { "version": "2.0.0", @@ -4766,6 +6311,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "license": "MIT", "dependencies": { "@types/estree": "*" } @@ -4911,6 +6457,47 @@ "set-function-name": "^2.0.1" } }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/jose": { "version": "4.15.4", "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.4.tgz", @@ -4954,7 +6541,8 @@ "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", @@ -4970,7 +6558,6 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "peer": true, "bin": { "json5": "lib/cli.js" }, @@ -5028,14 +6615,6 @@ "node": ">= 0.8.0" } }, - "node_modules/lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", - "dependencies": { - "immediate": "~3.0.5" - } - }, "node_modules/lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", @@ -5048,7 +6627,8 @@ "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" }, "node_modules/linkify-it": { "version": "2.2.0", @@ -5131,12 +6711,14 @@ } } }, - "node_modules/localforage": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", - "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", - "dependencies": { - "lie": "3.1.1" + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.11.5" } }, "node_modules/locate-path": { @@ -5158,6 +6740,12 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "license": "MIT" + }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -5251,20 +6839,17 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "peer": true, "dependencies": { "yallist": "^3.0.2" } }, "node_modules/magic-string": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", - "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" - }, - "engines": { - "node": ">=12" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, "node_modules/markdown-table": { @@ -5276,6 +6861,12 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/material-colors": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", + "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==", + "license": "ISC" + }, "node_modules/mdast-util-definitions": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz", @@ -5493,8 +7084,7 @@ "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "node_modules/merge2": { "version": "1.4.1", @@ -6051,6 +7641,29 @@ "node": ">=8.6" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "peer": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/mimic-fn": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", @@ -6082,17 +7695,21 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" + "node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "license": "ISC", + "engines": { + "node": ">=8" } }, + "node_modules/module-details-from-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", + "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==", + "license": "MIT" + }, "node_modules/mri": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", @@ -6136,6 +7753,13 @@ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT", + "peer": true + }, "node_modules/next": { "version": "13.2.4", "resolved": "https://registry.npmjs.org/next/-/next-13.2.4.tgz", @@ -6273,10 +7897,10 @@ } }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "peer": true + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "license": "MIT" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -6580,6 +8204,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -6622,6 +8247,37 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -6630,10 +8286,42 @@ "node": ">=8" } }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "license": "ISC", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.7.0.tgz", + "integrity": "sha512-hTK/mE36i8fDDhgDFjy6xNOG+LCorxLG3WO17tku+ij6sVHXh1jQUJ8hYAnRhNla4QVD2H8er/FOjc/+EgC6yQ==", + "license": "MIT" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "license": "MIT", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", @@ -6686,6 +8374,45 @@ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/preact": { "version": "10.19.2", "resolved": "https://registry.npmjs.org/preact/-/preact-10.19.2.tgz", @@ -6756,6 +8483,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -6795,7 +8523,8 @@ "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" }, "node_modules/punycode": { "version": "2.3.1", @@ -6824,6 +8553,16 @@ } ] }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/react": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", @@ -6844,6 +8583,24 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/react-color": { + "version": "2.19.3", + "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.19.3.tgz", + "integrity": "sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA==", + "license": "MIT", + "dependencies": { + "@icons/material": "^0.2.4", + "lodash": "^4.17.15", + "lodash-es": "^4.17.15", + "material-colors": "^1.2.1", + "prop-types": "^15.5.10", + "reactcss": "^1.2.0", + "tinycolor2": "^1.4.1" + }, + "peerDependencies": { + "react": "*" + } + }, "node_modules/react-cookie": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/react-cookie/-/react-cookie-4.1.1.tgz", @@ -7026,6 +8783,15 @@ "react-dom": ">=16.6.0" } }, + "node_modules/reactcss": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz", + "integrity": "sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A==", + "license": "MIT", + "dependencies": { + "lodash": "^4.0.1" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -7159,6 +8925,53 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-in-the-middle": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.4.0.tgz", + "integrity": "sha512-X34iHADNbNDfr6OTStIAHWSAvvKQRYgLO6duASaVf7J2VA3lvmNYboAHOuLC2huav1IwgZJtyEcJCKVzFxOSMQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "module-details-from-path": "^1.0.3", + "resolve": "^1.22.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/require-in-the-middle/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/require-in-the-middle/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, "node_modules/reselect": { "version": "4.1.8", "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", @@ -7285,14 +9098,16 @@ } }, "node_modules/rollup": { - "version": "2.78.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.0.tgz", - "integrity": "sha512-4+YfbQC9QEVvKTanHhIAFVUFSRsezvQF8vFOJwtGfb9Bb+r014S+qryr9PSmw8x6sMnPkmFBGAvIFVQxvJxjtg==", + "version": "3.29.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz", + "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==", + "license": "MIT", "bin": { "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=10.0.0" + "node": ">=14.18.0", + "npm": ">=8.0.0" }, "optionalDependencies": { "fsevents": "~2.3.2" @@ -7348,6 +9163,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peer": true + }, "node_modules/safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", @@ -7385,6 +9221,12 @@ "node": ">=14.0.0" } }, + "node_modules/sass/node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "license": "MIT" + }, "node_modules/scheduler": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", @@ -7393,6 +9235,25 @@ "loose-envify": "^1.1.0" } }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -7401,6 +9262,16 @@ "semver": "bin/semver.js" } }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/set-function-length": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", @@ -7457,6 +9328,12 @@ "node": ">=8" } }, + "node_modules/shimmer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==", + "license": "BSD-2-Clause" + }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -7529,6 +9406,7 @@ "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -7541,6 +9419,27 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/space-separated-tokens": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", @@ -7737,6 +9636,7 @@ "version": "5.3.11", "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.11.tgz", "integrity": "sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==", + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.0.0", "@babel/traverse": "^7.4.5", @@ -7816,6 +9716,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/synthetic-dom": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/synthetic-dom/-/synthetic-dom-1.4.0.tgz", + "integrity": "sha512-mHv51ZsmZ+ShT/4s5kg+MGUIhY7Ltq4v03xpN1c8T1Krb5pScsh/lzEjyhrVD0soVDbThbd2e+4dD9vnDG4rhg==", + "license": "ISC" + }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -7824,11 +9730,135 @@ "node": ">=6" } }, + "node_modules/terser": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.37.0.tgz", + "integrity": "sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz", + "integrity": "sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT", + "peer": true + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT", + "peer": true + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, + "node_modules/tinycolor2": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", + "license": "MIT" + }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -8185,10 +10215,22 @@ "node": ">= 0.6" } }, + "node_modules/unplugin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.0.1.tgz", + "integrity": "sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==", + "license": "MIT", + "dependencies": { + "acorn": "^8.8.1", + "chokidar": "^3.5.3", + "webpack-sources": "^3.2.3", + "webpack-virtual-modules": "^0.5.0" + } + }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "funding": [ { "type": "opencollective", @@ -8203,10 +10245,10 @@ "url": "https://github.com/sponsors/ai" } ], - "peer": true, + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" }, "bin": { "update-browserslist-db": "cli.js" @@ -8300,11 +10342,72 @@ "node": ">=0.10.0" } }, + "node_modules/watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "license": "MIT", + "peer": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, + "node_modules/webpack": { + "version": "5.97.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz", + "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, "node_modules/webpack-bundle-analyzer": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.7.0.tgz", @@ -8403,10 +10506,17 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "license": "MIT", "engines": { "node": ">=10.13.0" } }, + "node_modules/webpack-virtual-modules": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz", + "integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==", + "license": "MIT" + }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -8594,13 +10704,13 @@ "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "peer": true + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", "engines": { "node": ">= 6" } @@ -31,13 +31,14 @@ "@emotion/react": "^11.11.0", "@emotion/styled": "^11.11.0", "@fontsource/roboto": "^4.5.8", + "@lottiefiles/dotlottie-react": "^0.12.0", "@mui/icons-material": "^5.11.11", "@mui/material": "^5.11.12", "@mui/styled-engine-sc": "^5.11.11", "@mui/x-date-pickers": "^6.6.0", "@next/bundle-analyzer": "^13.4.3", "@reduxjs/toolkit": "^1.9.5", - "@sentry/nextjs": "^7.59.2", + "@sentry/nextjs": "^8.42.0", "@types/cookie": "^0.5.1", "@types/intro.js": "^5.1.1", "@types/lodash": "^4.14.195", @@ -47,11 +48,14 @@ "@types/react-syntax-highlighter": "^15.5.7", "axios": "^0.24.0", "base64-encode-file": "^1.0.7", + "buffer": "^6.0.3", "chart.js": "^4.4.0", "cookie": "^0.5.0", "cross-env": "^7.0.3", "dayjs": "^1.11.8", "draft-js": "^0.11.7", + "draft-js-import-html": "^1.4.1", + "draftjs-to-html": "^0.9.1", "eslint": "^8.7.0", "eslint-config-next": "13.2.4", "eslint-plugin-prettier": "^4.2.1", @@ -67,6 +71,7 @@ "prettier": "^2.8.8", "react": "18.2.0", "react-chartjs-2": "^5.2.0", + "react-color": "^2.19.3", "react-cookie": "^4.1.1", "react-dom": "18.2.0", "react-draft-wysiwyg": "^1.15.0", @@ -81,9 +86,12 @@ "typescript": "5.1.3" }, "devDependencies": { + "@types/draftjs-to-html": "^0.8.4", "@types/intro.js": "^5.1.1", "@types/lodash": "^4.14.195", + "@types/react-color": "^3.0.13", "@types/react-draft-wysiwyg": "^1.13.8", + "@types/react-lottie": "^1.2.10", "@types/react-syntax-highlighter": "^15.5.7", "eslint-config-prettier": "^8.8.0", "lint-staged": "^13.2.2", @@ -0,0 +1,7 @@ +import * as Sentry from '@sentry/nextjs' +const SENTRY_DSN = process.env.NEXT_PUBLIC_SENTRY_DSN +if (SENTRY_DSN) + Sentry.init({ + dsn: SENTRY_DSN, + integrations: [Sentry.browserTracingIntegration(), Sentry.browserProfilingIntegration(), Sentry.replayIntegration()], + }) @@ -1,11 +0,0 @@ -import * as Sentry from '@sentry/nextjs' - -Sentry.init({ - dsn: 'https://977e4e013d7844c49c1c642cca0dff8f@o4505483299979264.ingest.sentry.io/4505550927691776', - integrations: [new Sentry.BrowserTracing(), new Sentry.Replay()], - // Performance Monitoring - tracesSampleRate: 1.0, // Capture 100% of the transactions, reduce in production! - // Session Replay - replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production. - replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur. -}) @@ -0,0 +1,8 @@ +import * as Sentry from '@sentry/nextjs' +const SENTRY_DSN = process.env.SENTRY_DSN +if (SENTRY_DSN) + Sentry.init({ + dsn: SENTRY_DSN, + integrations: [Sentry.onUncaughtExceptionIntegration(), Sentry.onUnhandledRejectionIntegration()], + includeLocalVariables: true, + })