From 41781dbbf567c089026b4e4efb15bccdc192e67a Mon Sep 17 00:00:00 2001 From: Vitalii Yarmus <71256742+Vitalii4as@users.noreply.github.com> Date: Thu, 23 Feb 2023 10:53:00 +0200 Subject: [PATCH 01/19] Readme: * removed outdated info --- README.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index e868d8f..5a57da9 100644 --- a/README.md +++ b/README.md @@ -18,19 +18,13 @@ npm i ``` -2. Configure git hooks (Used to run prettier and linter on commits) - -``` -npx simple-git-hooks -``` - -3. Start backend +2. Start backend ``` npm start -w server ``` -4. Start client +3. Start client ``` npm run dev -w client From 88510b2a8f4d837eb059312b3d175828b37c8f6c Mon Sep 17 00:00:00 2001 From: Vitalii Yarmus Date: Mon, 27 Feb 2023 16:58:37 +0200 Subject: [PATCH 02/19] Reorder: * fix reorder bugs, add task in reorderService on client side --- client/src/components/card-item/card-item.tsx | 82 +++++++++---------- .../components/card-list/components/cards.tsx | 4 +- client/src/pages/Workspace.tsx | 4 +- client/src/services/reorder.service.ts | 17 ++-- server/src/services/reorder.service.ts | 19 +++-- 5 files changed, 62 insertions(+), 64 deletions(-) diff --git a/client/src/components/card-item/card-item.tsx b/client/src/components/card-item/card-item.tsx index 66f74f3..fb257cd 100644 --- a/client/src/components/card-item/card-item.tsx +++ b/client/src/components/card-item/card-item.tsx @@ -1,15 +1,15 @@ -import type { DraggableProvided } from '@hello-pangea/dnd'; -import React from 'react'; +import type { DraggableProvided } from "@hello-pangea/dnd"; +import React from "react"; -import type { Card } from '../../common/types'; -import { CopyButton } from '../primitives/copy-button'; -import { DeleteButton } from '../primitives/delete-button'; -import { Splitter } from '../primitives/styled/splitter'; -import { Text } from '../primitives/text'; -import { Title } from '../primitives/title'; -import { Container } from './styled/container'; -import { Content } from './styled/content'; -import { Footer } from './styled/footer'; +import type { Card } from "../../common/types"; +import { CopyButton } from "../primitives/copy-button"; +import { DeleteButton } from "../primitives/delete-button"; +import { Splitter } from "../primitives/styled/splitter"; +import { Text } from "../primitives/text"; +import { Title } from "../primitives/title"; +import { Container } from "./styled/container"; +import { Content } from "./styled/content"; +import { Footer } from "./styled/footer"; type Props = { card: Card; @@ -17,34 +17,32 @@ type Props = { provided: DraggableProvided; }; -export const CardItem = React.memo( - ({ card, isDragging, provided }: Props) => { - return ( - - - {}} - title={card.name} - fontSize="large" - bold={true} - /> - <Text text={card.description} onChange={() => {}} /> - <Footer> - <DeleteButton onClick={() => {}} /> - <Splitter /> - <CopyButton onClick={() => {}} /> - </Footer> - </Content> - </Container> - ); - }, -); +export const CardItem = ({ card, isDragging, provided }: Props) => { + return ( + <Container + className="card-container" + isDragging={isDragging} + ref={provided.innerRef} + {...provided.draggableProps} + {...provided.dragHandleProps} + data-is-dragging={isDragging} + data-testid={card.id} + aria-label={card.name} + > + <Content> + <Title + onChange={() => {}} + title={card.name} + fontSize="large" + bold={true} + /> + <Text text={card.description} onChange={() => {}} /> + <Footer> + <DeleteButton onClick={() => {}} /> + <Splitter /> + <CopyButton onClick={() => {}} /> + </Footer> + </Content> + </Container> + ); +}; diff --git a/client/src/components/card-list/components/cards.tsx b/client/src/components/card-list/components/cards.tsx index 07db9c6..792fffa 100644 --- a/client/src/components/card-list/components/cards.tsx +++ b/client/src/components/card-list/components/cards.tsx @@ -12,7 +12,7 @@ type Props = { cards: Card[]; }; -const Cards = React.memo(({ cards }: Props) => ( +const Cards = ({ cards }: Props) => ( <React.Fragment> {cards.map((card: Card, index: number) => ( <Draggable key={card.id} draggableId={card.id} index={index}> @@ -30,6 +30,6 @@ const Cards = React.memo(({ cards }: Props) => ( </Draggable> ))} </React.Fragment> -)); +); export { Cards }; diff --git a/client/src/pages/Workspace.tsx b/client/src/pages/Workspace.tsx index 7b14752..2e2baf0 100644 --- a/client/src/pages/Workspace.tsx +++ b/client/src/pages/Workspace.tsx @@ -39,7 +39,9 @@ export const Workspace = () => { const isReorderColumns = result.type === 'COLUMN'; if (isReorderColumns) { - setLists(reorderService.reorder(lists, source.index, destination.index)); + setLists( + reorderService.reorderLists(lists, source.index, destination.index), + ); socket.emit(ListEvent.REORDER, source.index, destination.index); return; diff --git a/client/src/services/reorder.service.ts b/client/src/services/reorder.service.ts index e3396d6..a70c592 100644 --- a/client/src/services/reorder.service.ts +++ b/client/src/services/reorder.service.ts @@ -3,12 +3,11 @@ import type { DraggableLocation } from '@hello-pangea/dnd'; import { Card, List } from '../common/types'; export const reorderService = { - reorder<T>(items: T[], startIndex: number, endIndex: number): T[] { - const result = [...items]; - const [removed] = result.splice(startIndex, 1); - result.splice(endIndex, 0, removed); + reorderLists(items: List[], startIndex: number, endIndex: number): List[] { + const [removed] = items.splice(startIndex, 1); + items.splice(endIndex, 0, removed); - return result; + return items; }, reorderCards( @@ -25,11 +24,9 @@ export const reorderService = { const isMovingInSameList = source.droppableId === destination.droppableId; if (isMovingInSameList) { - const reordered: Card[] = this.reorder( - current, - source.index, - destination.index, - ); + const [removed] = current.splice(source.index, 1); + current.splice(destination.index, 0, removed); + const reordered: Card[] = current; return lists.map((list) => list.id === source.droppableId ? { ...list, cards: reordered } : list, diff --git a/server/src/services/reorder.service.ts b/server/src/services/reorder.service.ts index 7873057..740e8b9 100644 --- a/server/src/services/reorder.service.ts +++ b/server/src/services/reorder.service.ts @@ -23,24 +23,25 @@ export class ReorderService { sourceListId: string; destinationListId: string; }): List[] { - const current: Card[] = - lists.find((list) => list.id === sourceListId)?.cards || []; - const next: Card[] = - lists.find((list) => list.id === destinationListId)?.cards || []; - const target: Card = current[sourceIndex]; + const target: Card = lists.find((list) => list.id === sourceListId) + ?.cards?.[sourceIndex]; + + if (!target) { + return lists; + } const newLists = lists.map((list) => { if (list.id === sourceListId) { - return { + list = { ...list, - cards: this.removeCardFromList(current, sourceIndex), + cards: this.removeCardFromList(list.cards, sourceIndex), }; } if (list.id === destinationListId) { - return { + list = { ...list, - cards: this.addCardToList(next, destinationIndex, target), + cards: this.addCardToList(list.cards, destinationIndex, target), }; } From 87b1c09af6b841a47d8d4525f7b31cc1fee08d29 Mon Sep 17 00:00:00 2001 From: Vitalii Yarmus <vitalii.yarmys@binary-studio.com> Date: Tue, 28 Feb 2023 11:02:58 +0200 Subject: [PATCH 03/19] Server: * fixed tsconfig --- server/tsconfig.json | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/server/tsconfig.json b/server/tsconfig.json index 5d87e24..a9f8d7f 100644 --- a/server/tsconfig.json +++ b/server/tsconfig.json @@ -1,28 +1,16 @@ { "include": [ - "src", - "assets/mockData.ts" + "src/**/*" ], "exclude": [ "node_modules" ], "compilerOptions": { - "target": "esnext", - "lib": [ - "esnext" - ], - "outDir": "build", - "allowJs": false, - "skipLibCheck": true, - "strict": false, - "noEmit": true, - "forceConsistentCasingInFileNames": true, - "esModuleInterop": true, - "module": "commonjs", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true + "noImplicitAny": false, + "noEmitOnError": true, + "removeComments": false, + "sourceMap": true, + "target": "es5", + "outDir": "dist" } } \ No newline at end of file From 89d362e5e42a32c2831c3c4193ecb9f5a453c137 Mon Sep 17 00:00:00 2001 From: Vitalii Yarmus <vitalii.yarmys@binary-studio.com> Date: Tue, 28 Feb 2023 12:35:05 +0200 Subject: [PATCH 04/19] Server: * added export of httpServer for automated tests --- server/src/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/src/index.ts b/server/src/index.ts index 8ea984e..f5cfc6f 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -32,3 +32,5 @@ const onConnection = (socket: Socket): void => { io.on('connection', onConnection); httpServer.listen(PORT, () => console.log('listening on port: ' + PORT)); + +export { httpServer }; From 0d64eaa64d15a86bcb37478e6df1619863bcacd5 Mon Sep 17 00:00:00 2001 From: Vitalii Yarmus <vitalii.yarmys@binary-studio.com> Date: Thu, 2 Mar 2023 00:33:54 +0200 Subject: [PATCH 05/19] Mock data: * fix issue with prototype of cards --- server/src/assets/mockData.ts | 111 +++++++++++++--------------------- 1 file changed, 41 insertions(+), 70 deletions(-) diff --git a/server/src/assets/mockData.ts b/server/src/assets/mockData.ts index 46ff6e9..9f91180 100644 --- a/server/src/assets/mockData.ts +++ b/server/src/assets/mockData.ts @@ -1,71 +1,42 @@ -export const lists = [ - { - id: '66ae2561-5e57-454a-86bc-a3f03f3a1c49', - name: 'To Do', - cards: [ - { - id: 'f974183f-eb60-4e92-acee-9b6e6acda2f1', - name: 'Implement renaming lists', - description: 'Should be possible to change the name of the list', - createAt: new Date(), - }, - { - id: '1d908f48-e429-448b-893e-28dbffe32d46', - name: 'Implement adding cards', - description: 'Should be possible to create cards', - createAt: new Date(), - }, - { - id: 'a9a628ee-4530-439e-aafa-1f31c4278a92', - name: 'Implement removing of cards', - description: 'Should be possible to remove card when button clicked', - createAt: new Date(), - }, - { - id: '45f10f40-be32-425a-945d-f6712d043694', - name: 'Implement changing name of card', - description: 'Should be possible to change the name of card', - createAt: new Date(), - }, - { - id: '8fd23148-114d-48af-87ed-6b3a80f841ed', - name: 'Implement changing description of card', - description: 'Should be possible to change description of card', - createAt: new Date(), - }, - { - id: 'fa3a8843-0333-4e26-9960-02eea90e4f42', - name: 'Implement copy card', - description: - 'Using pattern Prototype implement a possibility to copy card. Id should be new for new card. The name of card should have "copy" suffix', - createAt: new Date(), - }, - { - id: '5bb08acc-9b69-41a3-9149-cdc89f7cba1d', - name: 'Implement logging on server side', - description: - 'Using pattern Observer implement logging with 3 levels: info, warn, error. There should be 2 loggers: first will write only errors into console, second will write all logs into file', - createAt: new Date(), - }, - { - id: 'd4493dab-bd5c-4333-802b-ce0a46d80bd6', - name: 'Implement logging of reorder action', - description: - 'Using pattern Proxy implement logging for the ReorderService (logging proxy). Should be logged each what card/list and when was moved', - createAt: new Date(), - }, - ], - }, - { - id: 'ab5cabe1-5d73-44f8-a8d4-37e25dbf0d07', - name: 'In progress', - cards: [ - { - id: '37470bf2-d11a-4ed3-ac17-0a676dcd469d', - name: 'Implement adding lists', - description: 'Should be possible to create list', - createAt: new Date(), - }, - ], - }, +import { Card } from '../data/models/card'; +import { List } from '../data/models/list'; + +const toDo = new List('To do'); +toDo.cards = [ + new Card( + 'Implement renaming lists', + 'Should be possible to change the name of the list', + ), + new Card('Implement adding cards', 'Should be possible to create cards'), + new Card( + 'Implement removing of cards', + 'Should be possible to remove card when button clicked', + ), + new Card( + 'Implement changing name of card', + 'Should be possible to change the name of card', + ), + new Card( + 'Implement changing description of card', + 'Should be possible to change description of card', + ), + new Card( + 'Implement copy card', + 'Using pattern Prototype implement a possibility to copy card. Id should be new for new card. The name of card should have "copy" suffix', + ), + new Card( + 'Implement logging on server side', + 'Using pattern Observer implement logging with 3 levels: info, warn, error. There should be 2 loggers: first will write only errors into console, second will write all logs into file', + ), + new Card( + 'Implement logging of reorder action', + 'Using pattern Proxy implement logging for the ReorderService (logging proxy). Should be logged each what card/list and when was moved', + ), ]; + +const inProgress = new List('In progress'); +inProgress.cards = [ + new Card('Implement adding lists', 'Should be possible to create list'), +]; + +export const lists = [toDo, inProgress]; From 186fcda8495e73fac501ae6f968431ae68186876 Mon Sep 17 00:00:00 2001 From: Vitalii Yarmus <vitalii.yarmys@binary-studio.com> Date: Thu, 2 Mar 2023 12:07:31 +0200 Subject: [PATCH 06/19] Client: * fixed primitives (text, title) --- client/src/components/primitives/text.tsx | 9 +++++++-- client/src/components/primitives/title.tsx | 4 +++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/client/src/components/primitives/text.tsx b/client/src/components/primitives/text.tsx index 9c8d72e..a32faf9 100644 --- a/client/src/components/primitives/text.tsx +++ b/client/src/components/primitives/text.tsx @@ -1,4 +1,4 @@ -import { ChangeEvent, useState } from 'react'; +import { ChangeEvent, useEffect, useState } from 'react'; import { useComponentVisible } from '../../hooks/useComponentVisible'; import { BasicText } from './styled/basic-text'; @@ -15,6 +15,8 @@ export const Text = ({ onChange, text }: Props) => { useComponentVisible(false); const [value, setValue] = useState(text); + useEffect(() => setValue(text), [text]); + const onEdit = (e: ChangeEvent<HTMLTextAreaElement>) => { setValue(e.target.value); onChange(e.target.value); @@ -31,7 +33,10 @@ export const Text = ({ onChange, text }: Props) => { autoFocus={isComponentVisible} /> ) : ( - <BasicText className="text-content" onClick={() => setIsComponentVisible(true)}> + <BasicText + className="text-content" + onClick={() => setIsComponentVisible(true)} + > {value} </BasicText> )} diff --git a/client/src/components/primitives/title.tsx b/client/src/components/primitives/title.tsx index ae9bac0..ff0e3dd 100644 --- a/client/src/components/primitives/title.tsx +++ b/client/src/components/primitives/title.tsx @@ -1,4 +1,4 @@ -import { ChangeEvent, useState } from 'react'; +import { ChangeEvent, useEffect, useState } from 'react'; import { useComponentVisible } from '../../hooks/useComponentVisible'; import { BasicTitle } from './styled/basic-title'; @@ -18,6 +18,8 @@ export const Title = ({ onChange, title, fontSize, bold, width }: Props) => { useComponentVisible(false); const [value, setValue] = useState(title); + useEffect(() => setValue(title), [title]); + const onEdit = (e: ChangeEvent<HTMLInputElement>) => { setValue(e.target.value); onChange(e.target.value); From cba23a6b98a06ed99a9c25490cfd9dda262faa4a Mon Sep 17 00:00:00 2001 From: Vitalii Yarmus <vitalii.yarmys@binary-studio.com> Date: Sun, 26 Mar 2023 13:07:41 +0300 Subject: [PATCH 07/19] Client: add socket unsubscribe when component unmounts, chnage start command --- README.md | 2 +- client/package.json | 2 +- client/src/pages/Workspace.tsx | 22 +++++++++++++++++----- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 5a57da9..0874c03 100644 --- a/README.md +++ b/README.md @@ -27,5 +27,5 @@ npm start -w server 3. Start client ``` -npm run dev -w client +npm start -w client ``` diff --git a/client/package.json b/client/package.json index ead0977..a2db560 100644 --- a/client/package.json +++ b/client/package.json @@ -6,7 +6,7 @@ "license": "MIT", "type": "module", "scripts": { - "dev": "vite", + "start": "vite", "build": "tsc && vite build", "preview": "vite preview" }, diff --git a/client/src/pages/Workspace.tsx b/client/src/pages/Workspace.tsx index 2e2baf0..c41706d 100644 --- a/client/src/pages/Workspace.tsx +++ b/client/src/pages/Workspace.tsx @@ -22,10 +22,16 @@ export const Workspace = () => { useEffect(() => { socket.emit(ListEvent.GET, (lists: List[]) => setLists(lists)); socket.on(ListEvent.UPDATE, (lists: List[]) => setLists(lists)); + + return () => { + socket.removeAllListeners(ListEvent.UPDATE).close(); + }; }, []); const onDragEnd = (result: DropResult) => { - if (!result.destination) return; + if (!result.destination) { + return; + } const source: DraggableLocation = result.source; const destination: DraggableLocation = result.destination; @@ -34,11 +40,13 @@ export const Workspace = () => { source.droppableId === destination.droppableId && source.index === destination?.index; - if (isNotMoved) return; + if (isNotMoved) { + return; + } - const isReorderColumns = result.type === 'COLUMN'; + const isReorderLists = result.type === 'COLUMN'; - if (isReorderColumns) { + if (isReorderLists) { setLists( reorderService.reorderLists(lists, source.index, destination.index), ); @@ -61,7 +69,11 @@ export const Workspace = () => { <DragDropContext onDragEnd={onDragEnd}> <Droppable droppableId="board" type="COLUMN" direction="horizontal"> {(provided: DroppableProvided) => ( - <Container className="workspace-container" ref={provided.innerRef} {...provided.droppableProps}> + <Container + className="workspace-container" + ref={provided.innerRef} + {...provided.droppableProps} + > {lists.map((list: List, index: number) => ( <Column key={list.id} From 5dc862bcee15edbfea49daf82337e896f819cfce Mon Sep 17 00:00:00 2001 From: Vitalii Yarmus <vitalii.yarmys@binary-studio.com> Date: Sun, 26 Mar 2023 13:09:07 +0300 Subject: [PATCH 08/19] Server: fix setting cards to list without loosing prototype, fix typo, improve reorder function --- server/src/data/models/card.ts | 4 ++-- server/src/data/models/list.ts | 6 ++++++ server/src/handlers/card.handler.ts | 10 ++++------ server/src/services/reorder.service.ts | 24 +++++++++--------------- 4 files changed, 21 insertions(+), 23 deletions(-) diff --git a/server/src/data/models/card.ts b/server/src/data/models/card.ts index 4f4a512..ecb9b2c 100644 --- a/server/src/data/models/card.ts +++ b/server/src/data/models/card.ts @@ -7,12 +7,12 @@ class Card { public description: string; - public createAt: Date; + public createdAt: Date; public constructor(name: string, description: string) { this.name = name; this.description = description; - this.createAt = new Date(); + this.createdAt = new Date(); this.id = randomUUID(); } } diff --git a/server/src/data/models/list.ts b/server/src/data/models/list.ts index bab928b..59bd5f0 100644 --- a/server/src/data/models/list.ts +++ b/server/src/data/models/list.ts @@ -13,6 +13,12 @@ class List { this.name = name; this.id = randomUUID(); } + + setCards(cards: Card[]) { + this.cards = cards; + + return this; + } } export { List }; diff --git a/server/src/handlers/card.handler.ts b/server/src/handlers/card.handler.ts index 95a95f9..3356394 100644 --- a/server/src/handlers/card.handler.ts +++ b/server/src/handlers/card.handler.ts @@ -13,14 +13,12 @@ export class CardHandler extends SocketHandler { public createCard(listId: string, cardName: string): void { const newCard = new Card(cardName, ''); const lists = this.db.getData(); - const list = lists.find((list) => list.id === listId); - if (!list) return; - - const updatedList = { ...list, cards: list.cards.concat(newCard) }; - this.db.setData( - lists.map((list) => (list.id === listId ? updatedList : list)), + const updatedLists = lists.map((list) => + list.id === listId ? list.setCards(list.cards.concat(newCard)) : list, ); + + this.db.setData(updatedLists); this.updateLists(); } diff --git a/server/src/services/reorder.service.ts b/server/src/services/reorder.service.ts index 740e8b9..5d2fc2e 100644 --- a/server/src/services/reorder.service.ts +++ b/server/src/services/reorder.service.ts @@ -3,9 +3,9 @@ import { List } from '../data/models/list'; export class ReorderService { public reorder<T>(items: T[], startIndex: number, endIndex: number): T[] { - const result = [...items]; - const [removed] = result.splice(startIndex, 1); - result.splice(endIndex, 0, removed); + const card = items[startIndex]; + const listWithRemoved = this.remove(items, startIndex); + const result = this.insert(listWithRemoved, endIndex, card); return result; } @@ -32,17 +32,11 @@ export class ReorderService { const newLists = lists.map((list) => { if (list.id === sourceListId) { - list = { - ...list, - cards: this.removeCardFromList(list.cards, sourceIndex), - }; + list.setCards(this.remove(list.cards, sourceIndex)); } if (list.id === destinationListId) { - list = { - ...list, - cards: this.addCardToList(list.cards, destinationIndex, target), - }; + list.setCards(this.insert(list.cards, destinationIndex, target)); } return list; @@ -51,11 +45,11 @@ export class ReorderService { return newLists; } - private removeCardFromList(cards: Card[], index: number): Card[] { - return cards.slice(0, index).concat(cards.slice(index + 1)); + private remove<T>(items: T[], index: number): T[] { + return [...items.slice(0, index), ...items.slice(index + 1)]; } - private addCardToList(cards: Card[], index: number, card: Card): Card[] { - return cards.slice(0, index).concat(card).concat(cards.slice(index)); + private insert<T>(items: T[], index: number, value: T): T[] { + return [...items.slice(0, index), value, ...items.slice(index)]; } } From 8cfbc78af95ed32ea914efb565c70aa1338687a8 Mon Sep 17 00:00:00 2001 From: Oleksandra-Masiuk <99670702+Oleksandra-Masiuk@users.noreply.github.com> Date: Mon, 26 Jun 2023 23:30:23 +0300 Subject: [PATCH 09/19] Updated the wording of the mock data --- server/src/assets/mockData.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/src/assets/mockData.ts b/server/src/assets/mockData.ts index 9f91180..6066d20 100644 --- a/server/src/assets/mockData.ts +++ b/server/src/assets/mockData.ts @@ -14,15 +14,15 @@ toDo.cards = [ ), new Card( 'Implement changing name of card', - 'Should be possible to change the name of card', + 'Should be possible to change the name of the card', ), new Card( 'Implement changing description of card', 'Should be possible to change description of card', ), new Card( - 'Implement copy card', - 'Using pattern Prototype implement a possibility to copy card. Id should be new for new card. The name of card should have "copy" suffix', + 'Implement card copying', + 'Using pattern Prototype implement a possibility to copy card. Id should be new for new card. The name of the card should have "copy" suffix', ), new Card( 'Implement logging on server side', From 4e6f2d7df5a8f683409c242827c2029a496e6d65 Mon Sep 17 00:00:00 2001 From: kalinkaaaa14 <kalinkaaaa14@gmail.com> Date: Mon, 8 Jan 2024 12:01:37 +0200 Subject: [PATCH 10/19] BSA-2024: * task enhancements --- client/package.json | 5 +- client/src/assets/icons/add.svg | 6 + client/src/assets/icons/copy.svg | 6 + client/src/assets/icons/delete.svg | 9 + client/src/common/constants/css.constants.ts | 4 +- client/src/common/constants/index.ts | 2 +- .../src/common/constants/socket.constants.ts | 2 +- client/src/common/enums/card-event.enum.ts | 8 + client/src/common/enums/card.enums.ts | 8 - client/src/common/enums/index.ts | 4 +- client/src/common/enums/list-event.enum.ts | 10 + client/src/common/enums/list.enums.ts | 10 - client/src/common/types/card.type.ts | 2 +- client/src/common/types/icon-name.type.ts | 3 + client/src/common/types/index.ts | 5 +- client/src/common/types/list.type.ts | 9 + client/src/common/types/lits.type.ts | 7 - .../components/card-item/styled/container.tsx | 6 +- .../components/card-item/styled/footer.tsx | 4 +- .../components/card-list/styled/drop-zone.tsx | 4 +- .../card-list/styled/list-wrapper.tsx | 6 +- .../column-creator/styled/container.tsx | 4 +- .../components/column/styled/container.tsx | 4 +- client/src/components/icon/icon.tsx | 25 + client/src/components/icons/add-icon.tsx | 27 - client/src/components/icons/copy-icon.tsx | 20 - client/src/components/icons/delete-icon.tsx | 22 - .../src/components/primitives/add-button.tsx | 6 +- .../src/components/primitives/copy-button.tsx | 8 +- .../components/primitives/creator-input.tsx | 12 +- .../components/primitives/delete-button.tsx | 14 +- .../components/primitives/styled/input.tsx | 12 +- client/src/components/primitives/title.tsx | 18 +- client/src/vite-env.d.ts | 1 + client/tsconfig.json | 4 +- client/vite.config.ts | 9 +- package-lock.json | 1319 ++++++++++++----- server/package.json | 6 +- server/src/assets/mockData.ts | 46 +- server/src/common/enums/card-event.enum.ts | 6 + server/src/common/enums/card.enums.ts | 6 - server/src/common/enums/index.ts | 4 +- server/src/common/enums/list-event.enum.ts | 10 + server/src/common/enums/list.enums.ts | 10 - server/src/index.ts | 26 +- 45 files changed, 1186 insertions(+), 553 deletions(-) create mode 100644 client/src/assets/icons/add.svg create mode 100644 client/src/assets/icons/copy.svg create mode 100644 client/src/assets/icons/delete.svg create mode 100644 client/src/common/enums/card-event.enum.ts delete mode 100644 client/src/common/enums/card.enums.ts create mode 100644 client/src/common/enums/list-event.enum.ts delete mode 100644 client/src/common/enums/list.enums.ts create mode 100644 client/src/common/types/icon-name.type.ts create mode 100644 client/src/common/types/list.type.ts delete mode 100644 client/src/common/types/lits.type.ts create mode 100644 client/src/components/icon/icon.tsx delete mode 100644 client/src/components/icons/add-icon.tsx delete mode 100644 client/src/components/icons/copy-icon.tsx delete mode 100644 client/src/components/icons/delete-icon.tsx create mode 100644 server/src/common/enums/card-event.enum.ts delete mode 100644 server/src/common/enums/card.enums.ts create mode 100644 server/src/common/enums/list-event.enum.ts delete mode 100644 server/src/common/enums/list.enums.ts diff --git a/client/package.json b/client/package.json index a2db560..b700af7 100644 --- a/client/package.json +++ b/client/package.json @@ -16,12 +16,13 @@ "@hello-pangea/dnd": "16.2.0", "react": "16.14.0", "react-dom": "16.14.0", - "socket.io-client": "4.6.0" + "socket.io-client": "4.7.3" }, "devDependencies": { "@types/react": "16.14.35", "@types/react-dom": "18.0.11", "@vitejs/plugin-react": "3.1.0", - "vite": "4.1.1" + "vite": "4.1.1", + "vite-plugin-svgr": "4.2.0" } } diff --git a/client/src/assets/icons/add.svg b/client/src/assets/icons/add.svg new file mode 100644 index 0000000..56fbf84 --- /dev/null +++ b/client/src/assets/icons/add.svg @@ -0,0 +1,6 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" strokeWidth={2} stroke="currentColor" + fill="none" strokeLinecap="round" strokeLinejoin="round"> + <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> + <path d="M12 5l0 14"></path> + <path d="M5 12l14 0"></path> +</svg> diff --git a/client/src/assets/icons/copy.svg b/client/src/assets/icons/copy.svg new file mode 100644 index 0000000..c9aff26 --- /dev/null +++ b/client/src/assets/icons/copy.svg @@ -0,0 +1,6 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" strokeWidth={2} stroke="currentColor" + fill="none" strokeLinecap="round" strokeLinejoin="round"> + <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>{' '} + <path d="M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z"></path>{' '} + <path d="M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2"></path>{' '} +</svg> diff --git a/client/src/assets/icons/delete.svg b/client/src/assets/icons/delete.svg new file mode 100644 index 0000000..4afa0d6 --- /dev/null +++ b/client/src/assets/icons/delete.svg @@ -0,0 +1,9 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" strokeWidth={2} stroke="currentColor" + fill="none" strokeLinecap="round" strokeLinejoin="round"> + <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> + <path d="M4 7l16 0"></path> + <path d="M10 11l0 6"></path> + <path d="M14 11l0 6"></path> + <path d="M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12"></path> + <path d="M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3"></path> +</svg> diff --git a/client/src/common/constants/css.constants.ts b/client/src/common/constants/css.constants.ts index bfc1875..d003737 100644 --- a/client/src/common/constants/css.constants.ts +++ b/client/src/common/constants/css.constants.ts @@ -1,4 +1,4 @@ -const GRID = 8; +const SPACE_IN_PX = 5; const BORDER_RADIUS = 2; -export { BORDER_RADIUS, GRID }; +export { BORDER_RADIUS, SPACE_IN_PX }; diff --git a/client/src/common/constants/index.ts b/client/src/common/constants/index.ts index 747d3ba..46e1784 100644 --- a/client/src/common/constants/index.ts +++ b/client/src/common/constants/index.ts @@ -1,2 +1,2 @@ -export { BORDER_RADIUS, GRID } from './css.constants'; +export { BORDER_RADIUS, SPACE_IN_PX } from './css.constants'; export { SOCKET_URL } from './socket.constants'; diff --git a/client/src/common/constants/socket.constants.ts b/client/src/common/constants/socket.constants.ts index ba3f285..deae6b9 100644 --- a/client/src/common/constants/socket.constants.ts +++ b/client/src/common/constants/socket.constants.ts @@ -1,3 +1,3 @@ -const SOCKET_URL = 'http://localhost:3001'; +const SOCKET_URL = 'http://localhost:3003'; export { SOCKET_URL }; diff --git a/client/src/common/enums/card-event.enum.ts b/client/src/common/enums/card-event.enum.ts new file mode 100644 index 0000000..f81d0da --- /dev/null +++ b/client/src/common/enums/card-event.enum.ts @@ -0,0 +1,8 @@ +const CardEvent = { + CREATE: "card:create", + REORDER: "card:reorder", + RENAME: "card:rename", + CHANGE_DESCRIPTION: "card:change-description", +} as const; + +export { CardEvent }; diff --git a/client/src/common/enums/card.enums.ts b/client/src/common/enums/card.enums.ts deleted file mode 100644 index 8b314dc..0000000 --- a/client/src/common/enums/card.enums.ts +++ /dev/null @@ -1,8 +0,0 @@ -enum CardEvent { - CREATE = 'card:create', - REORDER = 'card:reorder', - RENAME = 'card:rename', - CHANGE_DESCRIPTION = 'card:change-description', -} - -export { CardEvent }; diff --git a/client/src/common/enums/index.ts b/client/src/common/enums/index.ts index 0005dfc..62af7ba 100644 --- a/client/src/common/enums/index.ts +++ b/client/src/common/enums/index.ts @@ -1,2 +1,2 @@ -export { CardEvent } from './card.enums'; -export { ListEvent } from './list.enums'; +export { CardEvent } from "./card-event.enum"; +export { ListEvent } from "./list-event.enum"; diff --git a/client/src/common/enums/list-event.enum.ts b/client/src/common/enums/list-event.enum.ts new file mode 100644 index 0000000..4ea4a63 --- /dev/null +++ b/client/src/common/enums/list-event.enum.ts @@ -0,0 +1,10 @@ +const ListEvent = { + CREATE: "list:create", + GET: "list:get", + REORDER: "list:reorder", + UPDATE: "list:update", + RENAME: "list:rename", + DELETE: "list:delete", +} as const; + +export { ListEvent }; diff --git a/client/src/common/enums/list.enums.ts b/client/src/common/enums/list.enums.ts deleted file mode 100644 index b700819..0000000 --- a/client/src/common/enums/list.enums.ts +++ /dev/null @@ -1,10 +0,0 @@ -enum ListEvent { - CREATE = 'list:create', - GET = 'list:get', - REORDER = 'list:reorder', - UPDATE = 'list:update', - RENAME = 'list:rename', - DELETE = 'list:delete', -} - -export { ListEvent }; diff --git a/client/src/common/types/card.type.ts b/client/src/common/types/card.type.ts index e765914..d43d90c 100644 --- a/client/src/common/types/card.type.ts +++ b/client/src/common/types/card.type.ts @@ -2,7 +2,7 @@ type Card = { id: string; name: string; description: string; - createAt: Date; + createdAt: Date; }; export type { Card }; diff --git a/client/src/common/types/icon-name.type.ts b/client/src/common/types/icon-name.type.ts new file mode 100644 index 0000000..34fb4be --- /dev/null +++ b/client/src/common/types/icon-name.type.ts @@ -0,0 +1,3 @@ +type IconName = "add" | "copy" | "delete"; + +export type { IconName }; diff --git a/client/src/common/types/index.ts b/client/src/common/types/index.ts index 837ecdf..9af5cbc 100644 --- a/client/src/common/types/index.ts +++ b/client/src/common/types/index.ts @@ -1,2 +1,3 @@ -export type { Card } from './card.type'; -export type { List } from './lits.type'; +export type { Card } from "./card.type"; +export type { List } from "./list.type"; +export type { IconName } from "./icon-name.type"; diff --git a/client/src/common/types/list.type.ts b/client/src/common/types/list.type.ts new file mode 100644 index 0000000..1a155cb --- /dev/null +++ b/client/src/common/types/list.type.ts @@ -0,0 +1,9 @@ +import { Card } from "./card.type"; + +type List = { + id: string; + name: string; + cards: Card[]; +}; + +export type { List }; diff --git a/client/src/common/types/lits.type.ts b/client/src/common/types/lits.type.ts deleted file mode 100644 index 945124a..0000000 --- a/client/src/common/types/lits.type.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Card } from './card.type'; - -export type List = { - id: string; - name: string; - cards: Card[]; -}; diff --git a/client/src/components/card-item/styled/container.tsx b/client/src/components/card-item/styled/container.tsx index 83cdf97..1f049c9 100644 --- a/client/src/components/card-item/styled/container.tsx +++ b/client/src/components/card-item/styled/container.tsx @@ -1,7 +1,7 @@ import { colors } from '@atlaskit/theme'; import styled from '@emotion/styled'; -import { BORDER_RADIUS, GRID } from '../../../common/constants'; +import { BORDER_RADIUS, SPACE_IN_PX } from '../../../common/constants'; type Props = { isDragging: boolean; @@ -17,9 +17,9 @@ const Container = styled.a<Props>` box-shadow: ${(props) => props.isDragging ? `2px 2px 1px ${colors.N70}` : 'none'}; box-sizing: border-box; - padding: ${GRID}px; + padding: ${SPACE_IN_PX}px; min-height: 40px; - margin-bottom: ${GRID}px; + margin-bottom: ${SPACE_IN_PX}px; user-select: none; color: ${colors.N900}; diff --git a/client/src/components/card-item/styled/footer.tsx b/client/src/components/card-item/styled/footer.tsx index 87b4b19..b328b50 100644 --- a/client/src/components/card-item/styled/footer.tsx +++ b/client/src/components/card-item/styled/footer.tsx @@ -1,10 +1,10 @@ import styled from '@emotion/styled'; -import { GRID } from '../../../common/constants'; +import { SPACE_IN_PX } from '../../../common/constants'; const Footer = styled.div` display: flex; - margin-top: ${GRID}px; + margin-top: ${SPACE_IN_PX}px; align-items: center; `; diff --git a/client/src/components/card-list/styled/drop-zone.tsx b/client/src/components/card-list/styled/drop-zone.tsx index be1ca7f..bdfd95b 100644 --- a/client/src/components/card-list/styled/drop-zone.tsx +++ b/client/src/components/card-list/styled/drop-zone.tsx @@ -1,10 +1,10 @@ import styled from '@emotion/styled'; -import { GRID } from '../../../common/constants'; +import { SPACE_IN_PX } from '../../../common/constants'; const DropZone = styled.div` min-height: 1px; - padding-bottom: ${GRID}px; + padding-bottom: ${SPACE_IN_PX}px; `; export { DropZone }; diff --git a/client/src/components/card-list/styled/list-wrapper.tsx b/client/src/components/card-list/styled/list-wrapper.tsx index 962b719..93b9a05 100644 --- a/client/src/components/card-list/styled/list-wrapper.tsx +++ b/client/src/components/card-list/styled/list-wrapper.tsx @@ -2,7 +2,7 @@ import { colors } from '@atlaskit/theme'; import styled from '@emotion/styled'; import type { DroppableProvidedProps } from '@hello-pangea/dnd'; -import { GRID } from '../../../common/constants'; +import { SPACE_IN_PX } from '../../../common/constants'; const getBackgroundColor = ( isDraggingOver: boolean, @@ -30,8 +30,8 @@ const ListWrapper = styled.div<Props>` display: flex; flex-direction: column; opacity: inherit; - padding: ${GRID}px; - border: ${GRID}px; + padding: ${SPACE_IN_PX}px; + border: ${SPACE_IN_PX}px; padding-bottom: 0; transition: background-color 0.2s ease, opacity 0.1s ease; user-select: none; diff --git a/client/src/components/column-creator/styled/container.tsx b/client/src/components/column-creator/styled/container.tsx index 5ca1a57..eb567dd 100644 --- a/client/src/components/column-creator/styled/container.tsx +++ b/client/src/components/column-creator/styled/container.tsx @@ -1,9 +1,9 @@ import styled from '@emotion/styled'; -import { GRID } from '../../../common/constants'; +import { SPACE_IN_PX } from '../../../common/constants'; const Container = styled.div` - margin: ${GRID}px; + margin: ${SPACE_IN_PX}px; display: flex; flex-direction: column; `; diff --git a/client/src/components/column/styled/container.tsx b/client/src/components/column/styled/container.tsx index 5ca1a57..eb567dd 100644 --- a/client/src/components/column/styled/container.tsx +++ b/client/src/components/column/styled/container.tsx @@ -1,9 +1,9 @@ import styled from '@emotion/styled'; -import { GRID } from '../../../common/constants'; +import { SPACE_IN_PX } from '../../../common/constants'; const Container = styled.div` - margin: ${GRID}px; + margin: ${SPACE_IN_PX}px; display: flex; flex-direction: column; `; diff --git a/client/src/components/icon/icon.tsx b/client/src/components/icon/icon.tsx new file mode 100644 index 0000000..b8f5008 --- /dev/null +++ b/client/src/components/icon/icon.tsx @@ -0,0 +1,25 @@ +import Add from "../../assets/icons/add.svg?react"; +import Copy from "../../assets/icons/copy.svg?react"; +import Delete from "../../assets/icons/delete.svg?react"; +import { IconName } from "../../common/types"; + +type Props = { + iconName: IconName; +}; + +const iconNameToComponent: Record< + IconName, + React.FunctionComponent<React.SVGProps<SVGSVGElement>> +> = { + add: Add, + copy: Copy, + delete: Delete, +}; + +const Icon: React.FC<Props> = ({ iconName }) => { + const IconComponent = iconNameToComponent[iconName]; + + return <IconComponent />; +}; + +export { Icon }; diff --git a/client/src/components/icons/add-icon.tsx b/client/src/components/icons/add-icon.tsx deleted file mode 100644 index a224915..0000000 --- a/client/src/components/icons/add-icon.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import styled from '@emotion/styled'; - -const Svg = styled.svg` - color: #ffffff; - width: 2em; - height: 2em; -`; - -const AddIcon = () => ( - <Svg - xmlns="http://www.w3.org/2000/svg" - width="24" - height="24" - viewBox="0 0 24 24" - strokeWidth={2} - stroke="currentColor" - fill="none" - strokeLinecap="round" - strokeLinejoin="round" - > - <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> - <path d="M12 5l0 14"></path> - <path d="M5 12l14 0"></path> - </Svg> -); - -export { AddIcon }; diff --git a/client/src/components/icons/copy-icon.tsx b/client/src/components/icons/copy-icon.tsx deleted file mode 100644 index d22db31..0000000 --- a/client/src/components/icons/copy-icon.tsx +++ /dev/null @@ -1,20 +0,0 @@ -const CopyIcon = () => ( - <svg - xmlns="http://www.w3.org/2000/svg" - width="24" - height="24" - viewBox="0 0 24 24" - strokeWidth={2} - stroke="currentColor" - fill="none" - strokeLinecap="round" - strokeLinejoin="round" - > - {' '} - <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>{' '} - <path d="M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z"></path>{' '} - <path d="M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2"></path>{' '} - </svg> -); - -export { CopyIcon }; diff --git a/client/src/components/icons/delete-icon.tsx b/client/src/components/icons/delete-icon.tsx deleted file mode 100644 index 4087fa5..0000000 --- a/client/src/components/icons/delete-icon.tsx +++ /dev/null @@ -1,22 +0,0 @@ -const DeleteIcon = () => ( - <svg - xmlns="http://www.w3.org/2000/svg" - width="24" - height="24" - viewBox="0 0 24 24" - strokeWidth={2} - stroke="currentColor" - fill="none" - strokeLinecap="round" - strokeLinejoin="round" - > - <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> - <path d="M4 7l16 0"></path> - <path d="M10 11l0 6"></path> - <path d="M14 11l0 6"></path> - <path d="M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12"></path> - <path d="M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3"></path> - </svg> -); - -export { DeleteIcon }; diff --git a/client/src/components/primitives/add-button.tsx b/client/src/components/primitives/add-button.tsx index 387aa40..912a9db 100644 --- a/client/src/components/primitives/add-button.tsx +++ b/client/src/components/primitives/add-button.tsx @@ -1,5 +1,5 @@ -import { AddIcon } from '../icons/add-icon'; -import { Button } from './styled/button'; +import { Icon } from "../icon/icon"; +import { Button } from "./styled/button"; type Props = { onClick: () => void; @@ -8,7 +8,7 @@ type Props = { const AddButton = ({ onClick }: Props) => { return ( <Button className="add-btn" onClick={onClick}> - <AddIcon /> + <Icon iconName="add" /> </Button> ); }; diff --git a/client/src/components/primitives/copy-button.tsx b/client/src/components/primitives/copy-button.tsx index f5766a2..df596a9 100644 --- a/client/src/components/primitives/copy-button.tsx +++ b/client/src/components/primitives/copy-button.tsx @@ -1,7 +1,7 @@ -import { colors } from '@atlaskit/theme'; +import { colors } from "@atlaskit/theme"; -import { CopyIcon } from '../icons/copy-icon'; -import { Button } from './styled/button'; +import { Icon } from "../icon/icon"; +import { Button } from "./styled/button"; type Props = { onClick: () => void; @@ -10,7 +10,7 @@ type Props = { const CopyButton = ({ onClick }: Props) => { return ( <Button className="copy-btn" onClick={onClick} color={colors.N30}> - <CopyIcon /> + <Icon iconName="copy" /> </Button> ); }; diff --git a/client/src/components/primitives/creator-input.tsx b/client/src/components/primitives/creator-input.tsx index 614a249..8a63738 100644 --- a/client/src/components/primitives/creator-input.tsx +++ b/client/src/components/primitives/creator-input.tsx @@ -1,19 +1,17 @@ -import React, { useState } from 'react'; +import React, { useState } from "react"; -import { AddIcon } from '../icons/add-icon'; -import { AddButton } from './add-button'; -import { Button } from './styled/button'; -import { Input } from './styled/input'; +import { AddButton } from "./add-button"; +import { Input } from "./styled/input"; type Props = { onSubmit: (value: string) => void; }; const CreatorInput = ({ onSubmit }: Props) => { - const [name, setName] = useState(''); + const [name, setName] = useState(""); const onClick = () => { - setName(''); + setName(""); onSubmit(name); }; diff --git a/client/src/components/primitives/delete-button.tsx b/client/src/components/primitives/delete-button.tsx index 5bba022..106871d 100644 --- a/client/src/components/primitives/delete-button.tsx +++ b/client/src/components/primitives/delete-button.tsx @@ -1,7 +1,7 @@ -import { colors } from '@atlaskit/theme'; +import { colors } from "@atlaskit/theme"; -import { DeleteIcon } from '../icons/delete-icon'; -import { Button } from './styled/button'; +import { Icon } from "../icon/icon"; +import { Button } from "./styled/button"; type Props = { onClick: () => void; @@ -10,8 +10,12 @@ type Props = { const DeleteButton = ({ onClick, color }: Props) => { return ( - <Button className="delete-btn" onClick={onClick} color={color ?? colors.N30}> - <DeleteIcon /> + <Button + className="delete-btn" + onClick={onClick} + color={color ?? colors.N30} + > + <Icon iconName="delete" /> </Button> ); }; diff --git a/client/src/components/primitives/styled/input.tsx b/client/src/components/primitives/styled/input.tsx index 3fff00c..d9248c4 100644 --- a/client/src/components/primitives/styled/input.tsx +++ b/client/src/components/primitives/styled/input.tsx @@ -1,11 +1,11 @@ -import styled from '@emotion/styled'; +import styled from "@emotion/styled"; -import { BORDER_RADIUS } from '../../../common/constants'; +import { BORDER_RADIUS } from "../../../common/constants"; type Props = { - fontSize: 'x-large' | 'large' | 'medium'; + fontSize: "x-large" | "large" | "medium"; width?: number; - bold?: boolean; + isBold?: boolean; }; const Input = styled.input<Props>` @@ -16,9 +16,9 @@ const Input = styled.input<Props>` border-style: none; border-width: 1px; height: 30px; - width: ${({ width }) => (width ? width + 'px' : '250px')}; + width: ${({ width }) => (width ? width + "px" : "250px")}; font-size: ${({ fontSize }) => fontSize}; - font-weight: ${({ bold }) => (bold ? 'bold' : 'normal')}; + font-weight: ${({ isBold }) => (isBold ? "bold" : "normal")}; &:focus { outline: solid 1px #4c9aff; diff --git a/client/src/components/primitives/title.tsx b/client/src/components/primitives/title.tsx index ff0e3dd..55aee19 100644 --- a/client/src/components/primitives/title.tsx +++ b/client/src/components/primitives/title.tsx @@ -1,19 +1,19 @@ -import { ChangeEvent, useEffect, useState } from 'react'; +import { ChangeEvent, useEffect, useState } from "react"; -import { useComponentVisible } from '../../hooks/useComponentVisible'; -import { BasicTitle } from './styled/basic-title'; -import { TitleContainer } from './styled/title-container'; -import { TitleInput } from './styled/title-input'; +import { useComponentVisible } from "../../hooks/useComponentVisible"; +import { BasicTitle } from "./styled/basic-title"; +import { TitleContainer } from "./styled/title-container"; +import { TitleInput } from "./styled/title-input"; type Props = { - fontSize: 'x-large' | 'large' | 'medium'; - bold?: boolean; + fontSize: "x-large" | "large" | "medium"; + isBold?: boolean; title: string; width?: number; onChange: (value: string) => void; }; -export const Title = ({ onChange, title, fontSize, bold, width }: Props) => { +export const Title = ({ onChange, title, fontSize, isBold, width }: Props) => { const { ref, isComponentVisible, setIsComponentVisible } = useComponentVisible(false); const [value, setValue] = useState(title); @@ -34,7 +34,7 @@ export const Title = ({ onChange, title, fontSize, bold, width }: Props) => { onChange={onEdit} onBlur={() => setIsComponentVisible(false)} fontSize={fontSize} - bold={bold} + isBold={isBold} autoFocus={isComponentVisible} width={width ?? 250} /> diff --git a/client/src/vite-env.d.ts b/client/src/vite-env.d.ts index 11f02fe..b1f45c7 100644 --- a/client/src/vite-env.d.ts +++ b/client/src/vite-env.d.ts @@ -1 +1,2 @@ /// <reference types="vite/client" /> +/// <reference types="vite-plugin-svgr/client" /> diff --git a/client/tsconfig.json b/client/tsconfig.json index 69a5175..0ab0da1 100644 --- a/client/tsconfig.json +++ b/client/tsconfig.json @@ -20,7 +20,7 @@ "noEmit": true, "jsx": "react-jsx", "noImplicitAny": true - }, + }, "include": [ "src" ], @@ -29,4 +29,4 @@ "path": "./tsconfig.node.json" } ] -} \ No newline at end of file +} diff --git a/client/vite.config.ts b/client/vite.config.ts index a848594..f5b8df6 100644 --- a/client/vite.config.ts +++ b/client/vite.config.ts @@ -1,11 +1,12 @@ -import { defineConfig } from 'vite'; -import react from '@vitejs/plugin-react'; +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; +import svgr from "vite-plugin-svgr"; // https://vitejs.dev/config/ export default defineConfig({ - plugins: [react()], + plugins: [svgr(), react()], server: { - port: 5173, + port: 5172, strictPort: true, }, }); diff --git a/package-lock.json b/package-lock.json index fb65e80..dd076b5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,13 +30,14 @@ "@hello-pangea/dnd": "16.2.0", "react": "16.14.0", "react-dom": "16.14.0", - "socket.io-client": "4.6.0" + "socket.io-client": "4.7.3" }, "devDependencies": { "@types/react": "16.14.35", "@types/react-dom": "18.0.11", "@vitejs/plugin-react": "3.1.0", - "vite": "4.1.1" + "vite": "4.1.1", + "vite-plugin-svgr": "4.2.0" } }, "node_modules/@ampproject/remapping": { @@ -113,44 +114,45 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz", - "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", - "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", + "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helpers": "^7.20.7", - "@babel/parser": "^7.20.7", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.12", - "@babel/types": "^7.20.7", - "convert-source-map": "^1.7.0", + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.7", + "@babel/parser": "^7.23.6", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -160,13 +162,19 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/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==" + }, "node_modules/@babel/generator": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz", - "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", "dependencies": { - "@babel/types": "^7.20.7", + "@babel/types": "^7.23.6", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { @@ -174,81 +182,78 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", - "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", "lru-cache": "^5.1.1", - "semver": "^6.3.0" + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", - "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.10", - "@babel/types": "^7.20.7" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-plugin-utils": { @@ -260,71 +265,71 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "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==", "dependencies": { - "@babel/types": "^7.20.2" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", - "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.7.tgz", + "integrity": "sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==", "dependencies": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.13", - "@babel/types": "^7.20.7" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -332,9 +337,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.20.15", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz", - "integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", "bin": { "parser": "bin/babel-parser.js" }, @@ -398,32 +403,32 @@ } }, "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz", - "integrity": "sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", + "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.13", - "@babel/types": "^7.20.7", - "debug": "^4.1.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -431,12 +436,12 @@ } }, "node_modules/@babel/types": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", - "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1070,11 +1075,272 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "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/@socket.io/component-emitter": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", + "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", + "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", + "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", + "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", + "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", + "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", + "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", + "dev": true, + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", + "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", + "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", + "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", + "@svgr/babel-plugin-transform-svg-component": "8.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/core": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", + "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^8.1.3", + "snake-case": "^3.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/core/node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", + "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.21.3", + "entities": "^4.4.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", + "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "@svgr/hast-util-to-babel-ast": "8.0.0", + "svg-parser": "^2.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, "node_modules/@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -1105,13 +1371,19 @@ "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" }, "node_modules/@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", "dependencies": { "@types/node": "*" } }, + "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==", + "dev": true + }, "node_modules/@types/hoist-non-react-statics": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", @@ -1263,6 +1535,12 @@ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "node_modules/babel-plugin-macros": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", @@ -1328,9 +1606,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", "funding": [ { "type": "opencollective", @@ -1339,13 +1617,17 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -1370,10 +1652,22 @@ "node": ">=6" } }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/caniuse-lite": { - "version": "1.0.30001453", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001453.tgz", - "integrity": "sha512-R9o/uySW38VViaTrOtwfbFEiBFUh7ST3uIG4OEymIG3/uKdHDO4xk/FaqfUw0d+irSUyFPy3dZszf9VvSTPnsA==", + "version": "1.0.30001576", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz", + "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==", "funding": [ { "type": "opencollective", @@ -1382,6 +1676,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ] }, @@ -1536,15 +1834,25 @@ "node": ">=0.3.1" } }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/electron-to-chromium": { - "version": "1.4.299", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.299.tgz", - "integrity": "sha512-lQ7ijJghH6pCGbfWXr6EY+KYCMaRSjgsY925r1p/TlpSfVM1VjHTcn1gAc15VM4uwti283X6QtjPTXdpoSGiZQ==" + "version": "1.4.623", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.623.tgz", + "integrity": "sha512-lKoz10iCYlP1WtRYdh5MvocQPWVRoI7ysp6qf18bmeBgR8abE6+I2CsfyNKztRDZvhdWc+krKT6wS7Neg8sw3A==" }, "node_modules/engine.io": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.0.tgz", - "integrity": "sha512-OgxY1c/RuCSeO/rTr8DIFXx76IzUUft86R7/P7MMbbkuzeqJoTNw2lmeD91IyGz41QYleIIjWeMJGgug043sfQ==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz", + "integrity": "sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==", "dependencies": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", @@ -1554,33 +1862,45 @@ "cookie": "~0.4.1", "cors": "~2.8.5", "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", + "engine.io-parser": "~5.2.1", "ws": "~8.11.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=10.2.0" } }, "node_modules/engine.io-client": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.4.0.tgz", - "integrity": "sha512-GyKPDyoEha+XZ7iEqam49vz6auPnNJ9ZBfy89f+rMMas8AuiMWOZ9PVzu8xb9ZC6rafUqiGHSCfu22ih66E+1g==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.3.tgz", + "integrity": "sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", + "engine.io-parser": "~5.2.1", "ws": "~8.11.0", "xmlhttprequest-ssl": "~2.0.0" } }, "node_modules/engine.io-parser": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz", - "integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz", + "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==", "engines": { "node": ">=10.0.0" } }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -1645,6 +1965,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "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==", + "dev": true + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -1820,6 +2146,18 @@ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -1863,6 +2201,15 @@ "loose-envify": "cli.js" } }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -1950,10 +2297,20 @@ "node": ">= 0.6" } }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" }, "node_modules/nodemon": { "version": "2.0.20", @@ -2252,9 +2609,9 @@ } }, "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -2280,20 +2637,31 @@ "semver": "bin/semver.js" } }, + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/socket.io": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.0.tgz", - "integrity": "sha512-b65bp6INPk/BMMrIgVvX12x3Q+NqlGqSlTuvKQWt0BUJ3Hyy3JangBl7fEoWZTXbOKlCqNPbQ6MbWgok/km28w==", + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.3.tgz", + "integrity": "sha512-SE+UIQXBQE+GPG2oszWMlsEmWtHVqw/h1VrYJGK5/MC7CH5p58N448HwIrtREcvR4jfdOJAY4ieQfxMr55qbbw==", "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", + "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.4.0", + "engine.io": "~6.5.2", "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.1" + "socket.io-parser": "~4.2.4" }, "engines": { - "node": ">=10.0.0" + "node": ">=10.2.0" } }, "node_modules/socket.io-adapter": { @@ -2305,23 +2673,23 @@ } }, "node_modules/socket.io-client": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.6.0.tgz", - "integrity": "sha512-2XOp18xnGghUICSd5ziUIS4rB0dhr6S8OvAps8y+HhOjFQlqGcf+FIh6fCIsKKZyWFxJeFPrZRNPGsHDTsz1Ug==", + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.3.tgz", + "integrity": "sha512-nU+ywttCyBitXIl9Xe0RSEfek4LneYkJxCeNnKCuhwoH4jGXO1ipIUw/VA/+Vvv2G1MTym11fzFC0SxkrcfXDw==", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", - "engine.io-client": "~6.4.0", - "socket.io-parser": "~4.2.1" + "engine.io-client": "~6.5.2", + "socket.io-parser": "~4.2.4" }, "engines": { "node": ">=10.0.0" } }, "node_modules/socket.io-parser": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.2.tgz", - "integrity": "sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1" @@ -2374,6 +2742,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "dev": true + }, "node_modules/tiny-invariant": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", @@ -2454,6 +2828,12 @@ } } }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, "node_modules/typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", @@ -2474,9 +2854,9 @@ "dev": true }, "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "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==", "funding": [ { "type": "opencollective", @@ -2485,6 +2865,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { @@ -2492,7 +2876,7 @@ "picocolors": "^1.0.0" }, "bin": { - "browserslist-lint": "cli.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" @@ -2577,6 +2961,20 @@ } } }, + "node_modules/vite-plugin-svgr": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-4.2.0.tgz", + "integrity": "sha512-SC7+FfVtNQk7So0XMjrrtLAbEC8qjFPifyD7+fs/E6aaNdVde6umlVVh0QuwDLdOMu7vp5RiGFsB70nj5yo0XA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.5", + "@svgr/core": "^8.1.0", + "@svgr/plugin-jsx": "^8.1.0" + }, + "peerDependencies": { + "vite": "^2.6.0 || 3 || 4 || 5" + } + }, "node_modules/ws": { "version": "8.11.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", @@ -2632,7 +3030,7 @@ "version": "0.0.0", "license": "MIT", "dependencies": { - "socket.io": "4.6.0" + "socket.io": "4.7.3" }, "devDependencies": { "@types/node": "18.13.0", @@ -2704,105 +3102,111 @@ } }, "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "requires": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" } }, "@babel/compat-data": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz", - "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==" + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==" }, "@babel/core": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", - "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", + "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helpers": "^7.20.7", - "@babel/parser": "^7.20.7", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.12", - "@babel/types": "^7.20.7", - "convert-source-map": "^1.7.0", + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.7", + "@babel/parser": "^7.23.6", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "dependencies": { + "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==" + } } }, "@babel/generator": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz", - "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", "requires": { - "@babel/types": "^7.20.7", + "@babel/types": "^7.23.6", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" } }, "@babel/helper-compilation-targets": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", - "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", "lru-cache": "^5.1.1", - "semver": "^6.3.0" + "semver": "^6.3.1" } }, "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==" }, "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" } }, "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.15" } }, "@babel/helper-module-transforms": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", - "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.10", - "@babel/types": "^7.20.7" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" } }, "@babel/helper-plugin-utils": { @@ -2811,60 +3215,60 @@ "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" }, "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "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==", "requires": { - "@babel/types": "^7.20.2" + "@babel/types": "^7.22.5" } }, "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==" }, "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" }, "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==" }, "@babel/helpers": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", - "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.7.tgz", + "integrity": "sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==", "requires": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.13", - "@babel/types": "^7.20.7" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6" } }, "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.20.15", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz", - "integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==" + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==" }, "@babel/plugin-syntax-jsx": { "version": "7.18.6", @@ -2901,39 +3305,39 @@ } }, "@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" } }, "@babel/traverse": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz", - "integrity": "sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", + "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.13", - "@babel/types": "^7.20.7", - "debug": "^4.1.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", - "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } }, @@ -3299,11 +3703,143 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + } + }, "@socket.io/component-emitter": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" }, + "@svgr/babel-plugin-add-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", + "dev": true, + "requires": {} + }, + "@svgr/babel-plugin-remove-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", + "dev": true, + "requires": {} + }, + "@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", + "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", + "dev": true, + "requires": {} + }, + "@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", + "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", + "dev": true, + "requires": {} + }, + "@svgr/babel-plugin-svg-dynamic-title": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", + "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", + "dev": true, + "requires": {} + }, + "@svgr/babel-plugin-svg-em-dimensions": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", + "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", + "dev": true, + "requires": {} + }, + "@svgr/babel-plugin-transform-react-native-svg": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", + "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", + "dev": true, + "requires": {} + }, + "@svgr/babel-plugin-transform-svg-component": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", + "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", + "dev": true, + "requires": {} + }, + "@svgr/babel-preset": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", + "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", + "dev": true, + "requires": { + "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", + "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", + "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", + "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", + "@svgr/babel-plugin-transform-svg-component": "8.0.0" + } + }, + "@svgr/core": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", + "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", + "dev": true, + "requires": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^8.1.3", + "snake-case": "^3.0.4" + }, + "dependencies": { + "cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "requires": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + } + } + } + }, + "@svgr/hast-util-to-babel-ast": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", + "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", + "dev": true, + "requires": { + "@babel/types": "^7.21.3", + "entities": "^4.4.0" + } + }, + "@svgr/plugin-jsx": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", + "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", + "dev": true, + "requires": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "@svgr/hast-util-to-babel-ast": "8.0.0", + "svg-parser": "^2.0.4" + } + }, "@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -3334,13 +3870,19 @@ "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" }, "@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", "requires": { "@types/node": "*" } }, + "@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==", + "dev": true + }, "@types/hoist-non-react-statics": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", @@ -3467,6 +4009,12 @@ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "babel-plugin-macros": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", @@ -3519,14 +4067,14 @@ } }, "browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", "requires": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" } }, "bsa-patterns-client": { @@ -3540,8 +4088,9 @@ "@vitejs/plugin-react": "3.1.0", "react": "16.14.0", "react-dom": "16.14.0", - "socket.io-client": "4.6.0", - "vite": "4.1.1" + "socket.io-client": "4.7.3", + "vite": "4.1.1", + "vite-plugin-svgr": "4.2.0" } }, "bsa-patterns-server": { @@ -3550,7 +4099,7 @@ "@types/node": "18.13.0", "@types/socket.io": "3.0.2", "nodemon": "2.0.20", - "socket.io": "4.6.0", + "socket.io": "4.7.3", "ts-node": "10.9.1" } }, @@ -3559,10 +4108,16 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, "caniuse-lite": { - "version": "1.0.30001453", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001453.tgz", - "integrity": "sha512-R9o/uySW38VViaTrOtwfbFEiBFUh7ST3uIG4OEymIG3/uKdHDO4xk/FaqfUw0d+irSUyFPy3dZszf9VvSTPnsA==" + "version": "1.0.30001576", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz", + "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==" }, "chalk": { "version": "2.4.2", @@ -3680,15 +4235,25 @@ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "electron-to-chromium": { - "version": "1.4.299", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.299.tgz", - "integrity": "sha512-lQ7ijJghH6pCGbfWXr6EY+KYCMaRSjgsY925r1p/TlpSfVM1VjHTcn1gAc15VM4uwti283X6QtjPTXdpoSGiZQ==" + "version": "1.4.623", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.623.tgz", + "integrity": "sha512-lKoz10iCYlP1WtRYdh5MvocQPWVRoI7ysp6qf18bmeBgR8abE6+I2CsfyNKztRDZvhdWc+krKT6wS7Neg8sw3A==" }, "engine.io": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.0.tgz", - "integrity": "sha512-OgxY1c/RuCSeO/rTr8DIFXx76IzUUft86R7/P7MMbbkuzeqJoTNw2lmeD91IyGz41QYleIIjWeMJGgug043sfQ==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz", + "integrity": "sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==", "requires": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", @@ -3698,26 +4263,32 @@ "cookie": "~0.4.1", "cors": "~2.8.5", "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", + "engine.io-parser": "~5.2.1", "ws": "~8.11.0" } }, "engine.io-client": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.4.0.tgz", - "integrity": "sha512-GyKPDyoEha+XZ7iEqam49vz6auPnNJ9ZBfy89f+rMMas8AuiMWOZ9PVzu8xb9ZC6rafUqiGHSCfu22ih66E+1g==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.3.tgz", + "integrity": "sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==", "requires": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", + "engine.io-parser": "~5.2.1", "ws": "~8.11.0", "xmlhttprequest-ssl": "~2.0.0" } }, "engine.io-parser": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz", - "integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz", + "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==" + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true }, "error-ex": { "version": "1.3.2", @@ -3767,6 +4338,12 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, + "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==", + "dev": true + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -3896,6 +4473,15 @@ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -3924,6 +4510,15 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -3990,10 +4585,20 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, "node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" }, "nodemon": { "version": "2.0.20", @@ -4210,9 +4815,9 @@ } }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" }, "simple-update-notifier": { "version": "1.1.0", @@ -4231,17 +4836,28 @@ } } }, + "snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "socket.io": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.0.tgz", - "integrity": "sha512-b65bp6INPk/BMMrIgVvX12x3Q+NqlGqSlTuvKQWt0BUJ3Hyy3JangBl7fEoWZTXbOKlCqNPbQ6MbWgok/km28w==", + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.3.tgz", + "integrity": "sha512-SE+UIQXBQE+GPG2oszWMlsEmWtHVqw/h1VrYJGK5/MC7CH5p58N448HwIrtREcvR4jfdOJAY4ieQfxMr55qbbw==", "requires": { "accepts": "~1.3.4", "base64id": "~2.0.0", + "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.4.0", + "engine.io": "~6.5.2", "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.1" + "socket.io-parser": "~4.2.4" } }, "socket.io-adapter": { @@ -4253,20 +4869,20 @@ } }, "socket.io-client": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.6.0.tgz", - "integrity": "sha512-2XOp18xnGghUICSd5ziUIS4rB0dhr6S8OvAps8y+HhOjFQlqGcf+FIh6fCIsKKZyWFxJeFPrZRNPGsHDTsz1Ug==", + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.3.tgz", + "integrity": "sha512-nU+ywttCyBitXIl9Xe0RSEfek4LneYkJxCeNnKCuhwoH4jGXO1ipIUw/VA/+Vvv2G1MTym11fzFC0SxkrcfXDw==", "requires": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", - "engine.io-client": "~6.4.0", - "socket.io-parser": "~4.2.1" + "engine.io-client": "~6.5.2", + "socket.io-parser": "~4.2.4" } }, "socket.io-parser": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.2.tgz", - "integrity": "sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", "requires": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1" @@ -4301,6 +4917,12 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, + "svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "dev": true + }, "tiny-invariant": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", @@ -4350,6 +4972,12 @@ "yn": "3.1.1" } }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, "typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", @@ -4363,9 +4991,9 @@ "dev": true }, "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "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==", "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -4407,6 +5035,17 @@ "rollup": "^3.10.0" } }, + "vite-plugin-svgr": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-4.2.0.tgz", + "integrity": "sha512-SC7+FfVtNQk7So0XMjrrtLAbEC8qjFPifyD7+fs/E6aaNdVde6umlVVh0QuwDLdOMu7vp5RiGFsB70nj5yo0XA==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.5", + "@svgr/core": "^8.1.0", + "@svgr/plugin-jsx": "^8.1.0" + } + }, "ws": { "version": "8.11.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", diff --git a/server/package.json b/server/package.json index b1e33f9..3a51773 100644 --- a/server/package.json +++ b/server/package.json @@ -7,13 +7,13 @@ }, "author": "Vitalii Yarmus", "license": "MIT", - "dependencies": { - "socket.io": "4.6.0" - }, "devDependencies": { "@types/node": "18.13.0", "@types/socket.io": "3.0.2", "nodemon": "2.0.20", "ts-node": "10.9.1" + }, + "dependencies": { + "socket.io": "4.7.3" } } diff --git a/server/src/assets/mockData.ts b/server/src/assets/mockData.ts index 6066d20..3876b94 100644 --- a/server/src/assets/mockData.ts +++ b/server/src/assets/mockData.ts @@ -1,42 +1,48 @@ -import { Card } from '../data/models/card'; -import { List } from '../data/models/list'; +import { Card } from "../data/models/card"; +import { List } from "../data/models/list"; -const toDo = new List('To do'); +const toDo = new List("To do"); toDo.cards = [ new Card( - 'Implement renaming lists', - 'Should be possible to change the name of the list', + "Implement renaming lists", + "Expected result - possibility to change the name of the list" ), - new Card('Implement adding cards', 'Should be possible to create cards'), new Card( - 'Implement removing of cards', - 'Should be possible to remove card when button clicked', + "Implement adding cards", + "Expected result - possibility to create new cards" ), new Card( - 'Implement changing name of card', - 'Should be possible to change the name of the card', + "Implement removing cards", + "Expected result - possibility to delete the card when button is clicked" ), new Card( - 'Implement changing description of card', - 'Should be possible to change description of card', + "Implement card title renaming", + "Expected result - possibility to change the card title" ), new Card( - 'Implement card copying', - 'Using pattern Prototype implement a possibility to copy card. Id should be new for new card. The name of the card should have "copy" suffix', + "Implement card description renaming", + "Expected result - possibility to change the card description" ), new Card( - 'Implement logging on server side', - 'Using pattern Observer implement logging with 3 levels: info, warn, error. There should be 2 loggers: first will write only errors into console, second will write all logs into file', + "Implement card copying", + 'Expected result - possibility to copy card. Should be implemented using Prototype pattern. Id should be new for a new card. The name of the card should have "copy" suffix' ), new Card( - 'Implement logging of reorder action', - 'Using pattern Proxy implement logging for the ReorderService (logging proxy). Should be logged each what card/list and when was moved', + "Implement logging on server side", + "Expected result - implemented logging with 3 levels: info, warn, error. Should be implemented using Observer pattern. There should be 2 loggers: first will write only errors into console, second will write all logs into file" + ), + new Card( + "Implement logging of reorder action", + "Expected result - implemented logging for the ReorderService (logging proxy). Should be implemented using Proxy pattern. Should be logged for each card/list with the info when it was moved" ), ]; -const inProgress = new List('In progress'); +const inProgress = new List("In progress"); inProgress.cards = [ - new Card('Implement adding lists', 'Should be possible to create list'), + new Card( + "Implement adding lists", + "Expected result - possibility to create a new list" + ), ]; export const lists = [toDo, inProgress]; diff --git a/server/src/common/enums/card-event.enum.ts b/server/src/common/enums/card-event.enum.ts new file mode 100644 index 0000000..89326a4 --- /dev/null +++ b/server/src/common/enums/card-event.enum.ts @@ -0,0 +1,6 @@ +const CardEvent = { + CREATE: "card:create", + REORDER: "card:reorder", +} as const; + +export { CardEvent }; diff --git a/server/src/common/enums/card.enums.ts b/server/src/common/enums/card.enums.ts deleted file mode 100644 index 087a399..0000000 --- a/server/src/common/enums/card.enums.ts +++ /dev/null @@ -1,6 +0,0 @@ -enum CardEvent { - CREATE = 'card:create', - REORDER = 'card:reorder', -} - -export { CardEvent }; diff --git a/server/src/common/enums/index.ts b/server/src/common/enums/index.ts index 0005dfc..62af7ba 100644 --- a/server/src/common/enums/index.ts +++ b/server/src/common/enums/index.ts @@ -1,2 +1,2 @@ -export { CardEvent } from './card.enums'; -export { ListEvent } from './list.enums'; +export { CardEvent } from "./card-event.enum"; +export { ListEvent } from "./list-event.enum"; diff --git a/server/src/common/enums/list-event.enum.ts b/server/src/common/enums/list-event.enum.ts new file mode 100644 index 0000000..3e2aad0 --- /dev/null +++ b/server/src/common/enums/list-event.enum.ts @@ -0,0 +1,10 @@ +const ListEvent = { + GET: "list:get", + REORDER: "list:reorder", + UPDATE: "list:update", + CREATE: "list:create", + RENAME: "list:rename", + DELETE: "list:delete", +} as const; + +export { ListEvent }; diff --git a/server/src/common/enums/list.enums.ts b/server/src/common/enums/list.enums.ts deleted file mode 100644 index dd59fd4..0000000 --- a/server/src/common/enums/list.enums.ts +++ /dev/null @@ -1,10 +0,0 @@ -enum ListEvent { - GET = 'list:get', - REORDER = 'list:reorder', - UPDATE = 'list:update', - CREATE = 'list:create', - RENAME = 'list:rename', - DELETE = 'list:delete', -} - -export { ListEvent }; diff --git a/server/src/index.ts b/server/src/index.ts index f5cfc6f..470982b 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -1,26 +1,26 @@ -import { createServer } from 'http'; -import { Server, Socket } from 'socket.io'; +import { createServer } from "http"; +import { Server, Socket } from "socket.io"; -import { lists } from './assets/mockData'; -import { Database } from './data/database'; -import { CardHandler } from './handlers/card.handler'; -import { ListHandler } from './handlers/list.handler'; -import { ReorderService } from './services/reorder.service'; +import { lists } from "./assets/mockData"; +import { Database } from "./data/database"; +import { CardHandler } from "./handlers/card.handler"; +import { ListHandler } from "./handlers/list.handler"; +import { ReorderService } from "./services/reorder.service"; -const PORT = 3001; +const PORT = 3003; const httpServer = createServer(); const io = new Server(httpServer, { cors: { - origin: '*', - methods: ['GET', 'POST'], + origin: "*", + methods: ["GET", "POST"], }, }); const db = Database.Instance; const reorderService = new ReorderService(); -if (process.env.NODE_ENV !== 'production') { +if (process.env.NODE_ENV !== "production") { db.setData(lists); } @@ -29,8 +29,8 @@ const onConnection = (socket: Socket): void => { new CardHandler(io, db, reorderService).handleConnection(socket); }; -io.on('connection', onConnection); +io.on("connection", onConnection); -httpServer.listen(PORT, () => console.log('listening on port: ' + PORT)); +httpServer.listen(PORT, () => console.log(`Listening on port: ${PORT}`)); export { httpServer }; From c1a4eec176fe98ff5ec8edb07aff6c15202531ce Mon Sep 17 00:00:00 2001 From: kalinkaaaa14 <kalinkaaaa14@gmail.com> Date: Mon, 8 Jan 2024 12:13:24 +0200 Subject: [PATCH 11/19] BSA-2024: - unnecessary space --- client/src/assets/icons/copy.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/assets/icons/copy.svg b/client/src/assets/icons/copy.svg index c9aff26..ac58005 100644 --- a/client/src/assets/icons/copy.svg +++ b/client/src/assets/icons/copy.svg @@ -1,6 +1,6 @@ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" strokeWidth={2} stroke="currentColor" fill="none" strokeLinecap="round" strokeLinejoin="round"> - <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>{' '} + <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> <path d="M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z"></path>{' '} <path d="M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2"></path>{' '} </svg> From fad36770b098854981eb7ff409b10e253f60dd4f Mon Sep 17 00:00:00 2001 From: kalinkaaaa14 <kalinkaaaa14@gmail.com> Date: Mon, 8 Jan 2024 12:14:23 +0200 Subject: [PATCH 12/19] BSA-2024: - unnecessary space --- client/src/assets/icons/copy.svg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/assets/icons/copy.svg b/client/src/assets/icons/copy.svg index ac58005..63c8582 100644 --- a/client/src/assets/icons/copy.svg +++ b/client/src/assets/icons/copy.svg @@ -1,6 +1,6 @@ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" strokeWidth={2} stroke="currentColor" fill="none" strokeLinecap="round" strokeLinejoin="round"> <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> - <path d="M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z"></path>{' '} - <path d="M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2"></path>{' '} + <path d="M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z"></path> + <path d="M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2"></path> </svg> From 51db9e0981fd4f9c8914764fa890604c0b6714b2 Mon Sep 17 00:00:00 2001 From: kalinkaaaa14 <kalinkaaaa14@gmail.com> Date: Mon, 8 Jan 2024 12:54:52 +0200 Subject: [PATCH 13/19] BSA-2024: * fixed imports with single quotes --- client/src/common/types/index.ts | 6 ++--- client/src/common/types/list.type.ts | 2 +- client/src/components/card-item/card-item.tsx | 23 +++++++++---------- client/src/components/column/column.tsx | 2 +- client/src/components/icon/icon.tsx | 8 +++---- .../src/components/primitives/add-button.tsx | 4 ++-- .../src/components/primitives/copy-button.tsx | 6 ++--- .../components/primitives/creator-input.tsx | 10 ++++---- .../components/primitives/delete-button.tsx | 6 ++--- .../components/primitives/styled/input.tsx | 4 ++-- client/src/components/primitives/title.tsx | 10 ++++---- client/tsconfig.json | 2 +- client/vite.config.ts | 6 ++--- server/src/assets/mockData.ts | 4 ++-- server/src/common/enums/index.ts | 4 ++-- server/src/index.ts | 16 ++++++------- 16 files changed, 56 insertions(+), 57 deletions(-) diff --git a/client/src/common/types/index.ts b/client/src/common/types/index.ts index 9af5cbc..394b39e 100644 --- a/client/src/common/types/index.ts +++ b/client/src/common/types/index.ts @@ -1,3 +1,3 @@ -export type { Card } from "./card.type"; -export type { List } from "./list.type"; -export type { IconName } from "./icon-name.type"; +export type { Card } from './card.type'; +export type { List } from './list.type'; +export type { IconName } from './icon-name.type'; diff --git a/client/src/common/types/list.type.ts b/client/src/common/types/list.type.ts index 1a155cb..a0fbf25 100644 --- a/client/src/common/types/list.type.ts +++ b/client/src/common/types/list.type.ts @@ -1,4 +1,4 @@ -import { Card } from "./card.type"; +import { Card } from './card.type'; type List = { id: string; diff --git a/client/src/components/card-item/card-item.tsx b/client/src/components/card-item/card-item.tsx index fb257cd..0a02b9e 100644 --- a/client/src/components/card-item/card-item.tsx +++ b/client/src/components/card-item/card-item.tsx @@ -1,15 +1,14 @@ -import type { DraggableProvided } from "@hello-pangea/dnd"; -import React from "react"; +import type { DraggableProvided } from '@hello-pangea/dnd'; -import type { Card } from "../../common/types"; -import { CopyButton } from "../primitives/copy-button"; -import { DeleteButton } from "../primitives/delete-button"; -import { Splitter } from "../primitives/styled/splitter"; -import { Text } from "../primitives/text"; -import { Title } from "../primitives/title"; -import { Container } from "./styled/container"; -import { Content } from "./styled/content"; -import { Footer } from "./styled/footer"; +import type { Card } from '../../common/types'; +import { CopyButton } from '../primitives/copy-button'; +import { DeleteButton } from '../primitives/delete-button'; +import { Splitter } from '../primitives/styled/splitter'; +import { Text } from '../primitives/text'; +import { Title } from '../primitives/title'; +import { Container } from './styled/container'; +import { Content } from './styled/content'; +import { Footer } from './styled/footer'; type Props = { card: Card; @@ -34,7 +33,7 @@ export const CardItem = ({ card, isDragging, provided }: Props) => { onChange={() => {}} title={card.name} fontSize="large" - bold={true} + isBold /> <Text text={card.description} onChange={() => {}} /> <Footer> diff --git a/client/src/components/column/column.tsx b/client/src/components/column/column.tsx index e1e0b46..509693e 100644 --- a/client/src/components/column/column.tsx +++ b/client/src/components/column/column.tsx @@ -37,7 +37,7 @@ export const Column = ({ listId, listName, cards, index }: Props) => { onChange={() => {}} fontSize="large" width={200} - bold + isBold /> <Splitter /> <DeleteButton color="#FFF0" onClick={() => {}} /> diff --git a/client/src/components/icon/icon.tsx b/client/src/components/icon/icon.tsx index b8f5008..e1f3a4d 100644 --- a/client/src/components/icon/icon.tsx +++ b/client/src/components/icon/icon.tsx @@ -1,7 +1,7 @@ -import Add from "../../assets/icons/add.svg?react"; -import Copy from "../../assets/icons/copy.svg?react"; -import Delete from "../../assets/icons/delete.svg?react"; -import { IconName } from "../../common/types"; +import Add from '../../assets/icons/add.svg?react'; +import Copy from '../../assets/icons/copy.svg?react'; +import Delete from '../../assets/icons/delete.svg?react'; +import { IconName } from '../../common/types'; type Props = { iconName: IconName; diff --git a/client/src/components/primitives/add-button.tsx b/client/src/components/primitives/add-button.tsx index 912a9db..9b6b76e 100644 --- a/client/src/components/primitives/add-button.tsx +++ b/client/src/components/primitives/add-button.tsx @@ -1,5 +1,5 @@ -import { Icon } from "../icon/icon"; -import { Button } from "./styled/button"; +import { Icon } from '../icon/icon'; +import { Button } from './styled/button'; type Props = { onClick: () => void; diff --git a/client/src/components/primitives/copy-button.tsx b/client/src/components/primitives/copy-button.tsx index df596a9..1da9c89 100644 --- a/client/src/components/primitives/copy-button.tsx +++ b/client/src/components/primitives/copy-button.tsx @@ -1,7 +1,7 @@ -import { colors } from "@atlaskit/theme"; +import { colors } from '@atlaskit/theme'; -import { Icon } from "../icon/icon"; -import { Button } from "./styled/button"; +import { Icon } from '../icon/icon'; +import { Button } from './styled/button'; type Props = { onClick: () => void; diff --git a/client/src/components/primitives/creator-input.tsx b/client/src/components/primitives/creator-input.tsx index 8a63738..60b1e65 100644 --- a/client/src/components/primitives/creator-input.tsx +++ b/client/src/components/primitives/creator-input.tsx @@ -1,17 +1,17 @@ -import React, { useState } from "react"; +import React, { useState } from 'react'; -import { AddButton } from "./add-button"; -import { Input } from "./styled/input"; +import { AddButton } from './add-button'; +import { Input } from './styled/input'; type Props = { onSubmit: (value: string) => void; }; const CreatorInput = ({ onSubmit }: Props) => { - const [name, setName] = useState(""); + const [name, setName] = useState(''); const onClick = () => { - setName(""); + setName(''); onSubmit(name); }; diff --git a/client/src/components/primitives/delete-button.tsx b/client/src/components/primitives/delete-button.tsx index 106871d..2ead013 100644 --- a/client/src/components/primitives/delete-button.tsx +++ b/client/src/components/primitives/delete-button.tsx @@ -1,7 +1,7 @@ -import { colors } from "@atlaskit/theme"; +import { colors } from '@atlaskit/theme'; -import { Icon } from "../icon/icon"; -import { Button } from "./styled/button"; +import { Icon } from '../icon/icon'; +import { Button } from './styled/button'; type Props = { onClick: () => void; diff --git a/client/src/components/primitives/styled/input.tsx b/client/src/components/primitives/styled/input.tsx index d9248c4..32b510e 100644 --- a/client/src/components/primitives/styled/input.tsx +++ b/client/src/components/primitives/styled/input.tsx @@ -1,6 +1,6 @@ -import styled from "@emotion/styled"; +import styled from '@emotion/styled'; -import { BORDER_RADIUS } from "../../../common/constants"; +import { BORDER_RADIUS } from '../../../common/constants'; type Props = { fontSize: "x-large" | "large" | "medium"; diff --git a/client/src/components/primitives/title.tsx b/client/src/components/primitives/title.tsx index 55aee19..53a73bf 100644 --- a/client/src/components/primitives/title.tsx +++ b/client/src/components/primitives/title.tsx @@ -1,9 +1,9 @@ -import { ChangeEvent, useEffect, useState } from "react"; +import { ChangeEvent, useEffect, useState } from 'react'; -import { useComponentVisible } from "../../hooks/useComponentVisible"; -import { BasicTitle } from "./styled/basic-title"; -import { TitleContainer } from "./styled/title-container"; -import { TitleInput } from "./styled/title-input"; +import { useComponentVisible } from '../../hooks/useComponentVisible'; +import { BasicTitle } from './styled/basic-title'; +import { TitleContainer } from './styled/title-container'; +import { TitleInput } from './styled/title-input'; type Props = { fontSize: "x-large" | "large" | "medium"; diff --git a/client/tsconfig.json b/client/tsconfig.json index 0ab0da1..8dcef40 100644 --- a/client/tsconfig.json +++ b/client/tsconfig.json @@ -20,7 +20,7 @@ "noEmit": true, "jsx": "react-jsx", "noImplicitAny": true - }, + }, "include": [ "src" ], diff --git a/client/vite.config.ts b/client/vite.config.ts index f5b8df6..f8b2bb5 100644 --- a/client/vite.config.ts +++ b/client/vite.config.ts @@ -1,6 +1,6 @@ -import { defineConfig } from "vite"; -import react from "@vitejs/plugin-react"; -import svgr from "vite-plugin-svgr"; +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; +import svgr from 'vite-plugin-svgr'; // https://vitejs.dev/config/ export default defineConfig({ diff --git a/server/src/assets/mockData.ts b/server/src/assets/mockData.ts index 3876b94..aef2354 100644 --- a/server/src/assets/mockData.ts +++ b/server/src/assets/mockData.ts @@ -1,5 +1,5 @@ -import { Card } from "../data/models/card"; -import { List } from "../data/models/list"; +import { Card } from '../data/models/card'; +import { List } from '../data/models/list'; const toDo = new List("To do"); toDo.cards = [ diff --git a/server/src/common/enums/index.ts b/server/src/common/enums/index.ts index 62af7ba..1d4268d 100644 --- a/server/src/common/enums/index.ts +++ b/server/src/common/enums/index.ts @@ -1,2 +1,2 @@ -export { CardEvent } from "./card-event.enum"; -export { ListEvent } from "./list-event.enum"; +export { CardEvent } from './card-event.enum'; +export { ListEvent } from './list-event.enum'; diff --git a/server/src/index.ts b/server/src/index.ts index 470982b..0591b21 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -1,11 +1,11 @@ -import { createServer } from "http"; -import { Server, Socket } from "socket.io"; - -import { lists } from "./assets/mockData"; -import { Database } from "./data/database"; -import { CardHandler } from "./handlers/card.handler"; -import { ListHandler } from "./handlers/list.handler"; -import { ReorderService } from "./services/reorder.service"; +import { createServer } from 'http'; +import { Server, Socket } from 'socket.io'; + +import { lists } from './assets/mockData'; +import { Database } from './data/database'; +import { CardHandler } from './handlers/card.handler'; +import { ListHandler } from './handlers/list.handler'; +import { ReorderService } from './services/reorder.service'; const PORT = 3003; From ce39e8c174480520e9577031a787bfef6eedab30 Mon Sep 17 00:00:00 2001 From: kalinkaaaa14 <kalinkaaaa14@gmail.com> Date: Mon, 8 Jan 2024 12:57:04 +0200 Subject: [PATCH 14/19] BSA-2024: * fixed imports with single quotes --- client/src/common/enums/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/common/enums/index.ts b/client/src/common/enums/index.ts index 62af7ba..1d4268d 100644 --- a/client/src/common/enums/index.ts +++ b/client/src/common/enums/index.ts @@ -1,2 +1,2 @@ -export { CardEvent } from "./card-event.enum"; -export { ListEvent } from "./list-event.enum"; +export { CardEvent } from './card-event.enum'; +export { ListEvent } from './list-event.enum'; From 8bdce7007371b4b43bee0d3413bd335669b4e2f1 Mon Sep 17 00:00:00 2001 From: kalinkaaaa14 <kalinkaaaa14@gmail.com> Date: Thu, 25 Jul 2024 10:49:25 +0300 Subject: [PATCH 15/19] minor updates on patterns lecture --- client/src/common/constants/constants.ts | 2 ++ client/src/common/constants/css.constant.ts | 4 +++ client/src/common/constants/css.constants.ts | 4 --- client/src/common/constants/index.ts | 2 -- .../src/common/constants/socket.constant.ts | 3 ++ .../src/common/constants/socket.constants.ts | 3 -- .../src/common/enums/{index.ts => enums.ts} | 0 .../src/common/types/{index.ts => types.ts} | 0 client/src/components/card-item/card-item.tsx | 27 ++++++-------- .../components/card-item/styled/container.tsx | 9 ++--- .../components/card-item/styled/footer.tsx | 2 +- client/src/components/card-list/card-list.tsx | 31 +++++----------- .../components/card-list/components/cards.tsx | 12 +++---- .../components/card-list/components/list.tsx | 8 ++--- .../components/card-list/styled/drop-zone.tsx | 2 +- .../card-list/styled/list-wrapper.tsx | 32 +++-------------- .../column-creator/styled/container.tsx | 4 +-- client/src/components/column/column.tsx | 36 +++++++++---------- .../components/column/styled/container.tsx | 6 ++-- .../src/components/column/styled/header.tsx | 14 ++++---- client/src/components/icon/icon.tsx | 8 ++--- .../src/components/primitives/add-button.tsx | 2 +- .../components/primitives/styled/button.tsx | 12 ++++--- .../components/primitives/styled/input.tsx | 6 ++-- .../primitives/styled/text-input.tsx | 4 +-- client/src/context/socket.ts | 8 ++--- client/src/pages/Workspace.tsx | 24 ++++++------- client/src/pages/styled/container.tsx | 2 +- client/src/services/reorder.service.ts | 8 ++--- .../src/assets/{mockData.ts => mock-data.ts} | 4 +-- .../src/common/enums/{index.ts => enums.ts} | 0 server/src/handlers/card.handler.ts | 16 +++++---- server/src/handlers/handlers.ts | 2 ++ server/src/handlers/list.handler.ts | 14 ++++---- server/src/handlers/socket.handler.ts | 8 ++--- server/src/index.ts | 15 ++++---- server/src/services/reorder.service.ts | 8 +++-- server/src/services/services.ts | 1 + 38 files changed, 153 insertions(+), 190 deletions(-) create mode 100644 client/src/common/constants/constants.ts create mode 100644 client/src/common/constants/css.constant.ts delete mode 100644 client/src/common/constants/css.constants.ts delete mode 100644 client/src/common/constants/index.ts create mode 100644 client/src/common/constants/socket.constant.ts delete mode 100644 client/src/common/constants/socket.constants.ts rename client/src/common/enums/{index.ts => enums.ts} (100%) rename client/src/common/types/{index.ts => types.ts} (100%) rename server/src/assets/{mockData.ts => mock-data.ts} (95%) rename server/src/common/enums/{index.ts => enums.ts} (100%) create mode 100644 server/src/handlers/handlers.ts create mode 100644 server/src/services/services.ts diff --git a/client/src/common/constants/constants.ts b/client/src/common/constants/constants.ts new file mode 100644 index 0000000..eb2df45 --- /dev/null +++ b/client/src/common/constants/constants.ts @@ -0,0 +1,2 @@ +export { BORDER_RADIUS, SPACE_IN_PX } from './css.constant'; +export { SOCKET_URL } from './socket.constant'; diff --git a/client/src/common/constants/css.constant.ts b/client/src/common/constants/css.constant.ts new file mode 100644 index 0000000..69453aa --- /dev/null +++ b/client/src/common/constants/css.constant.ts @@ -0,0 +1,4 @@ +const SPACE_IN_PX = 10; +const BORDER_RADIUS = 4; + +export { BORDER_RADIUS, SPACE_IN_PX }; diff --git a/client/src/common/constants/css.constants.ts b/client/src/common/constants/css.constants.ts deleted file mode 100644 index d003737..0000000 --- a/client/src/common/constants/css.constants.ts +++ /dev/null @@ -1,4 +0,0 @@ -const SPACE_IN_PX = 5; -const BORDER_RADIUS = 2; - -export { BORDER_RADIUS, SPACE_IN_PX }; diff --git a/client/src/common/constants/index.ts b/client/src/common/constants/index.ts deleted file mode 100644 index 46e1784..0000000 --- a/client/src/common/constants/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { BORDER_RADIUS, SPACE_IN_PX } from './css.constants'; -export { SOCKET_URL } from './socket.constants'; diff --git a/client/src/common/constants/socket.constant.ts b/client/src/common/constants/socket.constant.ts new file mode 100644 index 0000000..a58ab4b --- /dev/null +++ b/client/src/common/constants/socket.constant.ts @@ -0,0 +1,3 @@ +const SOCKET_URL = 'http://localhost:3005'; + +export { SOCKET_URL }; diff --git a/client/src/common/constants/socket.constants.ts b/client/src/common/constants/socket.constants.ts deleted file mode 100644 index deae6b9..0000000 --- a/client/src/common/constants/socket.constants.ts +++ /dev/null @@ -1,3 +0,0 @@ -const SOCKET_URL = 'http://localhost:3003'; - -export { SOCKET_URL }; diff --git a/client/src/common/enums/index.ts b/client/src/common/enums/enums.ts similarity index 100% rename from client/src/common/enums/index.ts rename to client/src/common/enums/enums.ts diff --git a/client/src/common/types/index.ts b/client/src/common/types/types.ts similarity index 100% rename from client/src/common/types/index.ts rename to client/src/common/types/types.ts diff --git a/client/src/components/card-item/card-item.tsx b/client/src/components/card-item/card-item.tsx index 0a02b9e..99b5e8a 100644 --- a/client/src/components/card-item/card-item.tsx +++ b/client/src/components/card-item/card-item.tsx @@ -1,14 +1,14 @@ -import type { DraggableProvided } from '@hello-pangea/dnd'; +import type { DraggableProvided } from "@hello-pangea/dnd"; -import type { Card } from '../../common/types'; -import { CopyButton } from '../primitives/copy-button'; -import { DeleteButton } from '../primitives/delete-button'; -import { Splitter } from '../primitives/styled/splitter'; -import { Text } from '../primitives/text'; -import { Title } from '../primitives/title'; -import { Container } from './styled/container'; -import { Content } from './styled/content'; -import { Footer } from './styled/footer'; +import { type Card } from "../../common/types/types"; +import { CopyButton } from "../primitives/copy-button"; +import { DeleteButton } from "../primitives/delete-button"; +import { Splitter } from "../primitives/styled/splitter"; +import { Text } from "../primitives/text"; +import { Title } from "../primitives/title"; +import { Container } from "./styled/container"; +import { Content } from "./styled/content"; +import { Footer } from "./styled/footer"; type Props = { card: Card; @@ -29,12 +29,7 @@ export const CardItem = ({ card, isDragging, provided }: Props) => { aria-label={card.name} > <Content> - <Title - onChange={() => {}} - title={card.name} - fontSize="large" - isBold - /> + <Title onChange={() => {}} title={card.name} fontSize="large" isBold /> <Text text={card.description} onChange={() => {}} /> <Footer> <DeleteButton onClick={() => {}} /> diff --git a/client/src/components/card-item/styled/container.tsx b/client/src/components/card-item/styled/container.tsx index 1f049c9..531d1c7 100644 --- a/client/src/components/card-item/styled/container.tsx +++ b/client/src/components/card-item/styled/container.tsx @@ -1,7 +1,7 @@ import { colors } from '@atlaskit/theme'; import styled from '@emotion/styled'; -import { BORDER_RADIUS, SPACE_IN_PX } from '../../../common/constants'; +import { BORDER_RADIUS, SPACE_IN_PX } from '../../../common/constants/constants'; type Props = { isDragging: boolean; @@ -10,12 +10,7 @@ type Props = { const Container = styled.a<Props>` border-radius: ${BORDER_RADIUS}px; border: 2px solid transparent; - border-color: ${({ isDragging }) => - isDragging ? colors.N60A : 'transparent'}; - background-color: ${({ isDragging }) => - isDragging ? colors.Y50 : colors.N0}; - box-shadow: ${(props) => - props.isDragging ? `2px 2px 1px ${colors.N70}` : 'none'}; + background-color: ${colors.N0}; box-sizing: border-box; padding: ${SPACE_IN_PX}px; min-height: 40px; diff --git a/client/src/components/card-item/styled/footer.tsx b/client/src/components/card-item/styled/footer.tsx index b328b50..70f9d4e 100644 --- a/client/src/components/card-item/styled/footer.tsx +++ b/client/src/components/card-item/styled/footer.tsx @@ -1,6 +1,6 @@ import styled from '@emotion/styled'; -import { SPACE_IN_PX } from '../../../common/constants'; +import { SPACE_IN_PX } from '../../../common/constants/constants'; const Footer = styled.div` display: flex; diff --git a/client/src/components/card-list/card-list.tsx b/client/src/components/card-list/card-list.tsx index bfcfd7a..960a525 100644 --- a/client/src/components/card-list/card-list.tsx +++ b/client/src/components/card-list/card-list.tsx @@ -1,35 +1,22 @@ -import type { - DroppableProvided, - DroppableStateSnapshot, -} from '@hello-pangea/dnd'; -import { Droppable } from '@hello-pangea/dnd'; -import { CSSProperties } from 'react'; +import type { DroppableProvided } from "@hello-pangea/dnd"; +import { Droppable } from "@hello-pangea/dnd"; -import type { Card } from '../../common/types'; -import { List } from './components/list'; -import { ListWrapper } from './styled/list-wrapper'; -import { ScrollContainer } from './styled/scroll-container'; +import { type Card } from "../../common/types/types"; +import { List } from "./components/list"; +import { ListWrapper } from "./styled/list-wrapper"; +import { ScrollContainer } from "./styled/scroll-container"; type Props = { listId: string; listType: string; cards: Card[]; - style: CSSProperties; }; -const CardsList = ({ listId, listType, style, cards }: Props) => { +const CardsList = ({ listId, listType, cards }: Props) => { return ( <Droppable droppableId={listId} type={listType}> - {( - dropProvided: DroppableProvided, - dropSnapshot: DroppableStateSnapshot, - ) => ( - <ListWrapper - style={style} - isDraggingOver={dropSnapshot.isDraggingOver} - isDraggingFrom={Boolean(dropSnapshot.draggingFromThisWith)} - {...dropProvided.droppableProps} - > + {(dropProvided: DroppableProvided) => ( + <ListWrapper {...dropProvided.droppableProps}> <ScrollContainer> <List cards={cards} dropProvided={dropProvided} /> </ScrollContainer> diff --git a/client/src/components/card-list/components/cards.tsx b/client/src/components/card-list/components/cards.tsx index 792fffa..0cfe30c 100644 --- a/client/src/components/card-list/components/cards.tsx +++ b/client/src/components/card-list/components/cards.tsx @@ -1,12 +1,12 @@ import type { DraggableProvided, DraggableStateSnapshot, -} from '@hello-pangea/dnd'; -import { Draggable } from '@hello-pangea/dnd'; -import React from 'react'; +} from "@hello-pangea/dnd"; +import { Draggable } from "@hello-pangea/dnd"; +import React from "react"; -import { Card } from '../../../common/types'; -import { CardItem } from '../../card-item/card-item'; +import { type Card } from "../../../common/types/types"; +import { CardItem } from "../../card-item/card-item"; type Props = { cards: Card[]; @@ -18,7 +18,7 @@ const Cards = ({ cards }: Props) => ( <Draggable key={card.id} draggableId={card.id} index={index}> {( dragProvided: DraggableProvided, - dragSnapshot: DraggableStateSnapshot, + dragSnapshot: DraggableStateSnapshot ) => ( <CardItem key={card.id} diff --git a/client/src/components/card-list/components/list.tsx b/client/src/components/card-list/components/list.tsx index 7f2c96e..cb3d37e 100644 --- a/client/src/components/card-list/components/list.tsx +++ b/client/src/components/card-list/components/list.tsx @@ -1,8 +1,8 @@ -import { DroppableProvided } from '@hello-pangea/dnd'; +import { DroppableProvided } from "@hello-pangea/dnd"; -import { Card } from '../../../common/types'; -import { DropZone } from '../styled/drop-zone'; -import { Cards } from './cards'; +import { type Card } from "../../../common/types/types"; +import { DropZone } from "../styled/drop-zone"; +import { Cards } from "./cards"; type Props = { dropProvided: DroppableProvided; diff --git a/client/src/components/card-list/styled/drop-zone.tsx b/client/src/components/card-list/styled/drop-zone.tsx index bdfd95b..d71fdcb 100644 --- a/client/src/components/card-list/styled/drop-zone.tsx +++ b/client/src/components/card-list/styled/drop-zone.tsx @@ -1,6 +1,6 @@ import styled from '@emotion/styled'; -import { SPACE_IN_PX } from '../../../common/constants'; +import { SPACE_IN_PX } from '../../../common/constants/constants'; const DropZone = styled.div` min-height: 1px; diff --git a/client/src/components/card-list/styled/list-wrapper.tsx b/client/src/components/card-list/styled/list-wrapper.tsx index 93b9a05..c62555e 100644 --- a/client/src/components/card-list/styled/list-wrapper.tsx +++ b/client/src/components/card-list/styled/list-wrapper.tsx @@ -1,32 +1,10 @@ -import { colors } from '@atlaskit/theme'; -import styled from '@emotion/styled'; -import type { DroppableProvidedProps } from '@hello-pangea/dnd'; +import { colors } from "@atlaskit/theme"; +import styled from "@emotion/styled"; -import { SPACE_IN_PX } from '../../../common/constants'; +import { SPACE_IN_PX } from "../../../common/constants/constants"; -const getBackgroundColor = ( - isDraggingOver: boolean, - isDraggingFrom: boolean, -): string => { - if (isDraggingOver) { - return colors.R50; - } - - if (isDraggingFrom) { - return colors.T50; - } - - return colors.N30; -}; - -type Props = DroppableProvidedProps & { - isDraggingOver: boolean; - isDraggingFrom: boolean; -}; - -const ListWrapper = styled.div<Props>` - background-color: ${(props) => - getBackgroundColor(props.isDraggingOver, props.isDraggingFrom)}; +const ListWrapper = styled.div` + background-color: ${colors.N30} display: flex; flex-direction: column; opacity: inherit; diff --git a/client/src/components/column-creator/styled/container.tsx b/client/src/components/column-creator/styled/container.tsx index eb567dd..d988650 100644 --- a/client/src/components/column-creator/styled/container.tsx +++ b/client/src/components/column-creator/styled/container.tsx @@ -1,6 +1,6 @@ -import styled from '@emotion/styled'; +import styled from "@emotion/styled"; -import { SPACE_IN_PX } from '../../../common/constants'; +import { SPACE_IN_PX } from "../../../common/constants/constants"; const Container = styled.div` margin: ${SPACE_IN_PX}px; diff --git a/client/src/components/column/column.tsx b/client/src/components/column/column.tsx index 509693e..d8da7d6 100644 --- a/client/src/components/column/column.tsx +++ b/client/src/components/column/column.tsx @@ -1,18 +1,17 @@ -import { colors } from '@atlaskit/theme'; import type { DraggableProvided, DraggableStateSnapshot, -} from '@hello-pangea/dnd'; -import { Draggable } from '@hello-pangea/dnd'; +} from "@hello-pangea/dnd"; +import { Draggable } from "@hello-pangea/dnd"; -import type { Card } from '../../common/types'; -import { CardsList } from '../card-list/card-list'; -import { DeleteButton } from '../primitives/delete-button'; -import { Splitter } from '../primitives/styled/splitter'; -import { Title } from '../primitives/title'; -import { Footer } from './components/footer'; -import { Container } from './styled/container'; -import { Header } from './styled/header'; +import { type Card } from "../../common/types/types"; +import { CardsList } from "../card-list/card-list"; +import { DeleteButton } from "../primitives/delete-button"; +import { Splitter } from "../primitives/styled/splitter"; +import { Title } from "../primitives/title"; +import { Footer } from "./components/footer"; +import { Container } from "./styled/container"; +import { Header } from "./styled/header"; type Props = { listId: string; @@ -25,7 +24,11 @@ export const Column = ({ listId, listName, cards, index }: Props) => { return ( <Draggable draggableId={listId} index={index}> {(provided: DraggableProvided, snapshot: DraggableStateSnapshot) => ( - <Container className="column-container" ref={provided.innerRef} {...provided.draggableProps}> + <Container + className="column-container" + ref={provided.innerRef} + {...provided.draggableProps} + > <Header className="column-header" isDragging={snapshot.isDragging} @@ -42,14 +45,7 @@ export const Column = ({ listId, listName, cards, index }: Props) => { <Splitter /> <DeleteButton color="#FFF0" onClick={() => {}} /> </Header> - <CardsList - listId={listId} - listType="CARD" - style={{ - backgroundColor: snapshot.isDragging ? colors.G50 : '', - }} - cards={cards} - /> + <CardsList listId={listId} listType="CARD" cards={cards} /> <Footer onCreateCard={() => {}} /> </Container> )} diff --git a/client/src/components/column/styled/container.tsx b/client/src/components/column/styled/container.tsx index eb567dd..c655ca4 100644 --- a/client/src/components/column/styled/container.tsx +++ b/client/src/components/column/styled/container.tsx @@ -1,11 +1,13 @@ -import styled from '@emotion/styled'; +import { colors } from "@atlaskit/theme"; +import styled from "@emotion/styled"; -import { SPACE_IN_PX } from '../../../common/constants'; +import { SPACE_IN_PX } from "../../../common/constants/constants"; const Container = styled.div` margin: ${SPACE_IN_PX}px; display: flex; flex-direction: column; + background-color: ${colors.N20}; `; export { Container }; diff --git a/client/src/components/column/styled/header.tsx b/client/src/components/column/styled/header.tsx index 74911cc..baf5e99 100644 --- a/client/src/components/column/styled/header.tsx +++ b/client/src/components/column/styled/header.tsx @@ -1,8 +1,8 @@ -import { colors } from '@atlaskit/theme'; -import styled from '@emotion/styled'; -import { DraggableProvidedDragHandleProps } from '@hello-pangea/dnd'; +import { colors } from "@atlaskit/theme"; +import styled from "@emotion/styled"; +import { DraggableProvidedDragHandleProps } from "@hello-pangea/dnd"; -import { BORDER_RADIUS } from '../../../common/constants'; +import { BORDER_RADIUS } from "../../../common/constants/constants"; type Props = (DraggableProvidedDragHandleProps | object) & { isDragging: boolean; @@ -15,12 +15,14 @@ const Header = styled.div<Props>` border-top-left-radius: ${BORDER_RADIUS}px; border-top-right-radius: ${BORDER_RADIUS}px; background-color: ${({ isDragging }) => - isDragging ? colors.G50 : colors.N30}; + isDragging ? colors.R100 : colors.R75}; transition: background-color 0.2s ease; height: 85px; + border-top-left-radius: 6px; + border-top-right-radius: 6px; &:hover { - background-color: ${colors.G50}; + background-color: ${colors.R100}; } `; diff --git a/client/src/components/icon/icon.tsx b/client/src/components/icon/icon.tsx index e1f3a4d..f6e74c6 100644 --- a/client/src/components/icon/icon.tsx +++ b/client/src/components/icon/icon.tsx @@ -1,7 +1,7 @@ -import Add from '../../assets/icons/add.svg?react'; -import Copy from '../../assets/icons/copy.svg?react'; -import Delete from '../../assets/icons/delete.svg?react'; -import { IconName } from '../../common/types'; +import Add from "../../assets/icons/add.svg?react"; +import Copy from "../../assets/icons/copy.svg?react"; +import Delete from "../../assets/icons/delete.svg?react"; +import { type IconName } from "../../common/types/types"; type Props = { iconName: IconName; diff --git a/client/src/components/primitives/add-button.tsx b/client/src/components/primitives/add-button.tsx index 9b6b76e..d5872c8 100644 --- a/client/src/components/primitives/add-button.tsx +++ b/client/src/components/primitives/add-button.tsx @@ -7,7 +7,7 @@ type Props = { const AddButton = ({ onClick }: Props) => { return ( - <Button className="add-btn" onClick={onClick}> + <Button className="add-btn" onClick={onClick} color='transparent'> <Icon iconName="add" /> </Button> ); diff --git a/client/src/components/primitives/styled/button.tsx b/client/src/components/primitives/styled/button.tsx index 2f4d074..85d0685 100644 --- a/client/src/components/primitives/styled/button.tsx +++ b/client/src/components/primitives/styled/button.tsx @@ -1,19 +1,21 @@ -import { colors } from '@atlaskit/theme'; -import styled from '@emotion/styled'; +import { colors } from "@atlaskit/theme"; +import styled from "@emotion/styled"; -import { BORDER_RADIUS } from '../../../common/constants'; +import { BORDER_RADIUS } from "../../../common/constants/constants"; const Button = styled.button` - background-color: ${({ color }) => color || colors.B100}; + background-color: ${({ color }) => color}; border-radius: ${BORDER_RADIUS}px; width: 20%; display: flex; justify-content: center; align-items: center; padding: 0.1em; + border: none; + &:hover, &:focus { - outline: solid 1px #4c9aff; + outline: none; } `; diff --git a/client/src/components/primitives/styled/input.tsx b/client/src/components/primitives/styled/input.tsx index 32b510e..1c99ed6 100644 --- a/client/src/components/primitives/styled/input.tsx +++ b/client/src/components/primitives/styled/input.tsx @@ -1,7 +1,5 @@ import styled from '@emotion/styled'; -import { BORDER_RADIUS } from '../../../common/constants'; - type Props = { fontSize: "x-large" | "large" | "medium"; width?: number; @@ -9,7 +7,7 @@ type Props = { }; const Input = styled.input<Props>` - border-radius: ${BORDER_RADIUS}px; + border-radius: 2px; animation-duration: 0.01s; animation-name: mui-auto-fill-cancel; border-color: rgba(0, 0, 0, 0.87); @@ -21,7 +19,7 @@ const Input = styled.input<Props>` font-weight: ${({ isBold }) => (isBold ? "bold" : "normal")}; &:focus { - outline: solid 1px #4c9aff; + outline: none; } `; diff --git a/client/src/components/primitives/styled/text-input.tsx b/client/src/components/primitives/styled/text-input.tsx index 846c5e1..bfcbf5b 100644 --- a/client/src/components/primitives/styled/text-input.tsx +++ b/client/src/components/primitives/styled/text-input.tsx @@ -1,6 +1,6 @@ -import styled from '@emotion/styled'; +import styled from "@emotion/styled"; -import { BORDER_RADIUS } from '../../../common/constants'; +import { BORDER_RADIUS } from "../../../common/constants/constants"; const TextInput = styled.textarea` border-radius: ${BORDER_RADIUS}px; diff --git a/client/src/context/socket.ts b/client/src/context/socket.ts index 299fe0c..7e284de 100644 --- a/client/src/context/socket.ts +++ b/client/src/context/socket.ts @@ -1,8 +1,8 @@ -import React from 'react'; -import type { Socket } from 'socket.io-client'; -import io from 'socket.io-client'; +import React from "react"; +import type { Socket } from "socket.io-client"; +import io from "socket.io-client"; -import { SOCKET_URL } from '../common/constants'; +import { SOCKET_URL } from "../common/constants/constants"; const socket = io(SOCKET_URL); const SocketContext = React.createContext<Socket>(socket); diff --git a/client/src/pages/Workspace.tsx b/client/src/pages/Workspace.tsx index c41706d..d5f957d 100644 --- a/client/src/pages/Workspace.tsx +++ b/client/src/pages/Workspace.tsx @@ -2,17 +2,17 @@ import type { DraggableLocation, DroppableProvided, DropResult, -} from '@hello-pangea/dnd'; -import { DragDropContext, Droppable } from '@hello-pangea/dnd'; -import React, { useContext, useEffect, useState } from 'react'; +} from "@hello-pangea/dnd"; +import { DragDropContext, Droppable } from "@hello-pangea/dnd"; +import React, { useContext, useEffect, useState } from "react"; -import { CardEvent, ListEvent } from '../common/enums'; -import type { List } from '../common/types'; -import { Column } from '../components/column/column'; -import { ColumnCreator } from '../components/column-creator/column-creator'; -import { SocketContext } from '../context/socket'; -import { reorderService } from '../services/reorder.service'; -import { Container } from './styled/container'; +import { CardEvent, ListEvent } from "../common/enums/enums"; +import { type List } from "../common/types/types"; +import { Column } from "../components/column/column"; +import { ColumnCreator } from "../components/column-creator/column-creator"; +import { SocketContext } from "../context/socket"; +import { reorderService } from "../services/reorder.service"; +import { Container } from "./styled/container"; export const Workspace = () => { const [lists, setLists] = useState<List[]>([]); @@ -44,11 +44,11 @@ export const Workspace = () => { return; } - const isReorderLists = result.type === 'COLUMN'; + const isReorderLists = result.type === "COLUMN"; if (isReorderLists) { setLists( - reorderService.reorderLists(lists, source.index, destination.index), + reorderService.reorderLists(lists, source.index, destination.index) ); socket.emit(ListEvent.REORDER, source.index, destination.index); diff --git a/client/src/pages/styled/container.tsx b/client/src/pages/styled/container.tsx index 2473700..8ebf7bb 100644 --- a/client/src/pages/styled/container.tsx +++ b/client/src/pages/styled/container.tsx @@ -2,7 +2,7 @@ import { colors } from '@atlaskit/theme'; import styled from '@emotion/styled'; const Container = styled.div` - background-color: ${colors.B100}; + background-color: ${colors.N0}; min-height: 100vh; min-width: 100vw; display: inline-flex; diff --git a/client/src/services/reorder.service.ts b/client/src/services/reorder.service.ts index a70c592..a2bcb23 100644 --- a/client/src/services/reorder.service.ts +++ b/client/src/services/reorder.service.ts @@ -1,6 +1,6 @@ -import type { DraggableLocation } from '@hello-pangea/dnd'; +import type { DraggableLocation } from "@hello-pangea/dnd"; -import { Card, List } from '../common/types'; +import { type Card, type List } from "../common/types/types"; export const reorderService = { reorderLists(items: List[], startIndex: number, endIndex: number): List[] { @@ -13,7 +13,7 @@ export const reorderService = { reorderCards( lists: List[], source: DraggableLocation, - destination: DraggableLocation, + destination: DraggableLocation ): List[] { const current: Card[] = lists.find((list) => list.id === source.droppableId)?.cards || []; @@ -29,7 +29,7 @@ export const reorderService = { const reordered: Card[] = current; return lists.map((list) => - list.id === source.droppableId ? { ...list, cards: reordered } : list, + list.id === source.droppableId ? { ...list, cards: reordered } : list ); } diff --git a/server/src/assets/mockData.ts b/server/src/assets/mock-data.ts similarity index 95% rename from server/src/assets/mockData.ts rename to server/src/assets/mock-data.ts index aef2354..d36cfe8 100644 --- a/server/src/assets/mockData.ts +++ b/server/src/assets/mock-data.ts @@ -1,7 +1,7 @@ import { Card } from '../data/models/card'; import { List } from '../data/models/list'; -const toDo = new List("To do"); +const toDo = new List("To Do"); toDo.cards = [ new Card( "Implement renaming lists", @@ -37,7 +37,7 @@ toDo.cards = [ ), ]; -const inProgress = new List("In progress"); +const inProgress = new List("In Progress"); inProgress.cards = [ new Card( "Implement adding lists", diff --git a/server/src/common/enums/index.ts b/server/src/common/enums/enums.ts similarity index 100% rename from server/src/common/enums/index.ts rename to server/src/common/enums/enums.ts diff --git a/server/src/handlers/card.handler.ts b/server/src/handlers/card.handler.ts index 3356394..cf2b6fd 100644 --- a/server/src/handlers/card.handler.ts +++ b/server/src/handlers/card.handler.ts @@ -1,21 +1,21 @@ -import type { Socket } from 'socket.io'; +import type { Socket } from "socket.io"; -import { CardEvent } from '../common/enums'; -import { Card } from '../data/models/card'; -import { SocketHandler } from './socket.handler'; +import { CardEvent } from "../common/enums/enums"; +import { Card } from "../data/models/card"; +import { SocketHandler } from "./socket.handler"; -export class CardHandler extends SocketHandler { +class CardHandler extends SocketHandler { public handleConnection(socket: Socket): void { socket.on(CardEvent.CREATE, this.createCard.bind(this)); socket.on(CardEvent.REORDER, this.reorderCards.bind(this)); } public createCard(listId: string, cardName: string): void { - const newCard = new Card(cardName, ''); + const newCard = new Card(cardName, ""); const lists = this.db.getData(); const updatedLists = lists.map((list) => - list.id === listId ? list.setCards(list.cards.concat(newCard)) : list, + list.id === listId ? list.setCards(list.cards.concat(newCard)) : list ); this.db.setData(updatedLists); @@ -45,3 +45,5 @@ export class CardHandler extends SocketHandler { this.updateLists(); } } + +export { CardHandler }; diff --git a/server/src/handlers/handlers.ts b/server/src/handlers/handlers.ts new file mode 100644 index 0000000..f97f6a8 --- /dev/null +++ b/server/src/handlers/handlers.ts @@ -0,0 +1,2 @@ +export { CardHandler } from "./card.handler"; +export { ListHandler } from "./list.handler"; diff --git a/server/src/handlers/list.handler.ts b/server/src/handlers/list.handler.ts index 6db019b..b1a0e0c 100644 --- a/server/src/handlers/list.handler.ts +++ b/server/src/handlers/list.handler.ts @@ -1,10 +1,10 @@ -import type { Socket } from 'socket.io'; +import type { Socket } from "socket.io"; -import { ListEvent } from '../common/enums'; -import { List } from '../data/models/list'; -import { SocketHandler } from './socket.handler'; +import { ListEvent } from "../common/enums/enums"; +import { List } from "../data/models/list"; +import { SocketHandler } from "./socket.handler"; -export class ListHandler extends SocketHandler { +class ListHandler extends SocketHandler { public handleConnection(socket: Socket): void { socket.on(ListEvent.CREATE, this.createList.bind(this)); socket.on(ListEvent.GET, this.getLists.bind(this)); @@ -20,7 +20,7 @@ export class ListHandler extends SocketHandler { const reorderedLists = this.reorderService.reorder( lists, sourceIndex, - destinationIndex, + destinationIndex ); this.db.setData(reorderedLists); this.updateLists(); @@ -33,3 +33,5 @@ export class ListHandler extends SocketHandler { this.updateLists(); } } + +export { ListHandler }; diff --git a/server/src/handlers/socket.handler.ts b/server/src/handlers/socket.handler.ts index 5d8b985..466e781 100644 --- a/server/src/handlers/socket.handler.ts +++ b/server/src/handlers/socket.handler.ts @@ -1,8 +1,8 @@ -import { Server, Socket } from 'socket.io'; +import { Server, Socket } from "socket.io"; -import { ListEvent } from '../common/enums'; -import { Database } from '../data/database'; -import { ReorderService } from '../services/reorder.service'; +import { ListEvent } from "../common/enums/enums"; +import { Database } from "../data/database"; +import { ReorderService } from "../services/reorder.service"; abstract class SocketHandler { protected db: Database; diff --git a/server/src/index.ts b/server/src/index.ts index 0591b21..99a89f8 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -1,13 +1,12 @@ -import { createServer } from 'http'; -import { Server, Socket } from 'socket.io'; +import { createServer } from "http"; +import { Server, Socket } from "socket.io"; -import { lists } from './assets/mockData'; -import { Database } from './data/database'; -import { CardHandler } from './handlers/card.handler'; -import { ListHandler } from './handlers/list.handler'; -import { ReorderService } from './services/reorder.service'; +import { lists } from "./assets/mock-data"; +import { Database } from "./data/database"; +import { CardHandler, ListHandler } from "./handlers/handlers"; +import { ReorderService } from "./services/reorder.service"; -const PORT = 3003; +const PORT = 3005; const httpServer = createServer(); const io = new Server(httpServer, { diff --git a/server/src/services/reorder.service.ts b/server/src/services/reorder.service.ts index 5d2fc2e..a0d7db3 100644 --- a/server/src/services/reorder.service.ts +++ b/server/src/services/reorder.service.ts @@ -1,7 +1,7 @@ -import { Card } from '../data/models/card'; -import { List } from '../data/models/list'; +import { Card } from "../data/models/card"; +import { List } from "../data/models/list"; -export class ReorderService { +class ReorderService { public reorder<T>(items: T[], startIndex: number, endIndex: number): T[] { const card = items[startIndex]; const listWithRemoved = this.remove(items, startIndex); @@ -53,3 +53,5 @@ export class ReorderService { return [...items.slice(0, index), value, ...items.slice(index)]; } } + +export { ReorderService }; diff --git a/server/src/services/services.ts b/server/src/services/services.ts new file mode 100644 index 0000000..e1d8a07 --- /dev/null +++ b/server/src/services/services.ts @@ -0,0 +1 @@ +export { ReorderService } from "./reorder.service"; From 220e109a959d6fb0363d034ccdd0b0d369f5cb06 Mon Sep 17 00:00:00 2001 From: Ilya <ilyaafon5@gmail.com> Date: Fri, 20 Jun 2025 14:17:51 +0300 Subject: [PATCH 16/19] Replace atlaskit/theme with emotion/react --- client/package.json | 2 +- .../components/card-item/styled/container.tsx | 9 +- .../card-list/styled/list-wrapper.tsx | 3 +- .../components/column/styled/container.tsx | 3 +- .../src/components/column/styled/header.tsx | 7 +- .../src/components/primitives/copy-button.tsx | 6 +- .../components/primitives/delete-button.tsx | 6 +- .../components/primitives/styled/button.tsx | 1 - client/src/main.tsx | 5 +- client/src/pages/styled/container.tsx | 3 +- client/src/theme/ThemeProvider.tsx | 15 + client/src/theme/theme.ts | 30 + package-lock.json | 528 +++++++++--------- 13 files changed, 326 insertions(+), 292 deletions(-) create mode 100644 client/src/theme/ThemeProvider.tsx create mode 100644 client/src/theme/theme.ts diff --git a/client/package.json b/client/package.json index b700af7..fdf9372 100644 --- a/client/package.json +++ b/client/package.json @@ -11,7 +11,7 @@ "preview": "vite preview" }, "dependencies": { - "@atlaskit/theme": "12.2.8", + "@emotion/react": "^11.14.0", "@emotion/styled": "11.10.5", "@hello-pangea/dnd": "16.2.0", "react": "16.14.0", diff --git a/client/src/components/card-item/styled/container.tsx b/client/src/components/card-item/styled/container.tsx index 531d1c7..763a912 100644 --- a/client/src/components/card-item/styled/container.tsx +++ b/client/src/components/card-item/styled/container.tsx @@ -1,4 +1,3 @@ -import { colors } from '@atlaskit/theme'; import styled from '@emotion/styled'; import { BORDER_RADIUS, SPACE_IN_PX } from '../../../common/constants/constants'; @@ -10,24 +9,24 @@ type Props = { const Container = styled.a<Props>` border-radius: ${BORDER_RADIUS}px; border: 2px solid transparent; - background-color: ${colors.N0}; + background-color: ${({ theme }) => theme.colors.N0}; box-sizing: border-box; padding: ${SPACE_IN_PX}px; min-height: 40px; margin-bottom: ${SPACE_IN_PX}px; user-select: none; - color: ${colors.N900}; + color: ${({ theme }) => theme.colors.N900}; &:hover, &:active { - color: ${colors.N900}; + color: ${({ theme }) => theme.colors.N900}; text-decoration: none; } &:focus { outline: none; - border-color: ${colors.N400A}; + border-color: ${({ theme }) => theme.colors.N400A}; box-shadow: none; } diff --git a/client/src/components/card-list/styled/list-wrapper.tsx b/client/src/components/card-list/styled/list-wrapper.tsx index c62555e..4609b0c 100644 --- a/client/src/components/card-list/styled/list-wrapper.tsx +++ b/client/src/components/card-list/styled/list-wrapper.tsx @@ -1,10 +1,9 @@ -import { colors } from "@atlaskit/theme"; import styled from "@emotion/styled"; import { SPACE_IN_PX } from "../../../common/constants/constants"; const ListWrapper = styled.div` - background-color: ${colors.N30} + background-color: ${({ theme }) => theme.colors.N30} display: flex; flex-direction: column; opacity: inherit; diff --git a/client/src/components/column/styled/container.tsx b/client/src/components/column/styled/container.tsx index c655ca4..d3786d0 100644 --- a/client/src/components/column/styled/container.tsx +++ b/client/src/components/column/styled/container.tsx @@ -1,4 +1,3 @@ -import { colors } from "@atlaskit/theme"; import styled from "@emotion/styled"; import { SPACE_IN_PX } from "../../../common/constants/constants"; @@ -7,7 +6,7 @@ const Container = styled.div` margin: ${SPACE_IN_PX}px; display: flex; flex-direction: column; - background-color: ${colors.N20}; + background-color: ${({ theme }) => theme.colors.N20}; `; export { Container }; diff --git a/client/src/components/column/styled/header.tsx b/client/src/components/column/styled/header.tsx index baf5e99..dd350b0 100644 --- a/client/src/components/column/styled/header.tsx +++ b/client/src/components/column/styled/header.tsx @@ -1,4 +1,3 @@ -import { colors } from "@atlaskit/theme"; import styled from "@emotion/styled"; import { DraggableProvidedDragHandleProps } from "@hello-pangea/dnd"; @@ -14,15 +13,15 @@ const Header = styled.div<Props>` justify-content: center; border-top-left-radius: ${BORDER_RADIUS}px; border-top-right-radius: ${BORDER_RADIUS}px; - background-color: ${({ isDragging }) => - isDragging ? colors.R100 : colors.R75}; + background-color: ${({ isDragging, theme }) => + isDragging ? theme.colors.R100 : theme.colors.R75}; transition: background-color 0.2s ease; height: 85px; border-top-left-radius: 6px; border-top-right-radius: 6px; &:hover { - background-color: ${colors.R100}; + background-color: ${({ theme }) => theme.colors.R100}; } `; diff --git a/client/src/components/primitives/copy-button.tsx b/client/src/components/primitives/copy-button.tsx index 1da9c89..f51181a 100644 --- a/client/src/components/primitives/copy-button.tsx +++ b/client/src/components/primitives/copy-button.tsx @@ -1,4 +1,4 @@ -import { colors } from '@atlaskit/theme'; +import { useTheme } from '@emotion/react'; import { Icon } from '../icon/icon'; import { Button } from './styled/button'; @@ -8,8 +8,10 @@ type Props = { }; const CopyButton = ({ onClick }: Props) => { + const theme = useTheme(); + return ( - <Button className="copy-btn" onClick={onClick} color={colors.N30}> + <Button className="copy-btn" onClick={onClick} color={theme.colors.N30}> <Icon iconName="copy" /> </Button> ); diff --git a/client/src/components/primitives/delete-button.tsx b/client/src/components/primitives/delete-button.tsx index 2ead013..3025767 100644 --- a/client/src/components/primitives/delete-button.tsx +++ b/client/src/components/primitives/delete-button.tsx @@ -1,4 +1,4 @@ -import { colors } from '@atlaskit/theme'; +import { useTheme } from '@emotion/react'; import { Icon } from '../icon/icon'; import { Button } from './styled/button'; @@ -9,11 +9,13 @@ type Props = { }; const DeleteButton = ({ onClick, color }: Props) => { + const theme = useTheme(); + return ( <Button className="delete-btn" onClick={onClick} - color={color ?? colors.N30} + color={color ?? theme.colors.N30} > <Icon iconName="delete" /> </Button> diff --git a/client/src/components/primitives/styled/button.tsx b/client/src/components/primitives/styled/button.tsx index 85d0685..1fbc177 100644 --- a/client/src/components/primitives/styled/button.tsx +++ b/client/src/components/primitives/styled/button.tsx @@ -1,4 +1,3 @@ -import { colors } from "@atlaskit/theme"; import styled from "@emotion/styled"; import { BORDER_RADIUS } from "../../../common/constants/constants"; diff --git a/client/src/main.tsx b/client/src/main.tsx index 2a060e5..2f7a3cb 100644 --- a/client/src/main.tsx +++ b/client/src/main.tsx @@ -4,10 +4,13 @@ import React from 'react'; import ReactDOM from 'react-dom'; import { App } from './App'; +import { ThemeProvider } from './theme/ThemeProvider'; ReactDOM.render( <React.StrictMode> - <App /> + <ThemeProvider> + <App /> + </ThemeProvider> </React.StrictMode>, document.getElementById('root'), ); diff --git a/client/src/pages/styled/container.tsx b/client/src/pages/styled/container.tsx index 8ebf7bb..00866dd 100644 --- a/client/src/pages/styled/container.tsx +++ b/client/src/pages/styled/container.tsx @@ -1,8 +1,7 @@ -import { colors } from '@atlaskit/theme'; import styled from '@emotion/styled'; const Container = styled.div` - background-color: ${colors.N0}; + background-color: ${({ theme }) => theme.colors.N0}; min-height: 100vh; min-width: 100vw; display: inline-flex; diff --git a/client/src/theme/ThemeProvider.tsx b/client/src/theme/ThemeProvider.tsx new file mode 100644 index 0000000..a3d6c1d --- /dev/null +++ b/client/src/theme/ThemeProvider.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { ThemeProvider as EmotionThemeProvider } from '@emotion/react'; +import { theme } from './theme'; + +interface ThemeProviderProps { + children: React.ReactNode; +} + +export const ThemeProvider: React.FC<ThemeProviderProps> = ({ children }) => { + return ( + <EmotionThemeProvider theme={theme}> + {children} + </EmotionThemeProvider> + ); +}; diff --git a/client/src/theme/theme.ts b/client/src/theme/theme.ts new file mode 100644 index 0000000..f435553 --- /dev/null +++ b/client/src/theme/theme.ts @@ -0,0 +1,30 @@ +export const theme = { + colors: { + // Neutral colors - Darker, more substantial grays + N0: '#FFFFFF', // Pure white + N20: '#E2E8F0', // Medium-light gray with more presence + N30: '#CBD5E1', // Noticeably darker gray for better definition + N400A: 'rgba(71, 85, 105, 0.4)', // Darker gray with stronger alpha + N900: '#1E293B', // Deep slate gray for strong contrast + + // Red colors + R75: '#FECACA', // Saturated light red/pink + R100: '#EF4444', // Bold, vibrant red + }, +}; + +export type Theme = typeof theme; + +declare module '@emotion/react' { + export interface Theme { + colors: { + N0: string; + N20: string; + N30: string; + N400A: string; + N900: string; + R75: string; + R100: string; + }; + } +} diff --git a/package-lock.json b/package-lock.json index dd076b5..284255d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,7 @@ "version": "0.0.0", "license": "MIT", "dependencies": { - "@atlaskit/theme": "12.2.8", + "@emotion/react": "^11.14.0", "@emotion/styled": "11.10.5", "@hello-pangea/dnd": "16.2.0", "react": "16.14.0", @@ -44,6 +44,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "devOptional": true, "dependencies": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -56,6 +57,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "devOptional": true, "dependencies": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -64,55 +66,6 @@ "node": ">=6.0.0" } }, - "node_modules/@atlaskit/codemod-utils": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@atlaskit/codemod-utils/-/codemod-utils-4.1.3.tgz", - "integrity": "sha512-KQ4e5DGPth2UskAsrFE3kmeVWJST2BgXABGExXnnO1LbnIPNBP/cnemVN1Pzw2JELMXyHTCeUZAoHxVcAYtD0g==", - "dependencies": { - "@babel/runtime": "^7.0.0" - } - }, - "node_modules/@atlaskit/ds-lib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.1.2.tgz", - "integrity": "sha512-fBqL2QmBYrbYSE/SUGdcTipmBFZe1p7faZeJRpq6kzhKui7vLaDeiusvLAbDSjjiHVXUK6SCAEU9jnBwq1T19w==", - "dependencies": { - "@babel/runtime": "^7.0.0", - "bind-event-listener": "^2.1.1" - }, - "peerDependencies": { - "react": "^16.8.0" - } - }, - "node_modules/@atlaskit/theme": { - "version": "12.2.8", - "resolved": "https://registry.npmjs.org/@atlaskit/theme/-/theme-12.2.8.tgz", - "integrity": "sha512-Y+ugqribyjqUdIPHOWjj4jqWXIt8ruZADaxz0qqvwmGz0MbOJ7Vi9VO9TCtMGOldJm38IbualFLh95HAqSmzOg==", - "dependencies": { - "@atlaskit/codemod-utils": "^4.1.0", - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/tokens": "^1.1.0", - "@babel/runtime": "^7.0.0" - }, - "peerDependencies": { - "react": "^16.8.0" - } - }, - "node_modules/@atlaskit/tokens": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.1.0.tgz", - "integrity": "sha512-EOxcNV1VNr1o90eEIOTUfBzcsxiaWB2JDf8ytdFiI20BoeKbWkfJqeP6V3CkcmN9IwQ5M5fjK5PBq1FlAxDRXg==", - "dependencies": { - "@atlaskit/ds-lib": "^2.1.0", - "@babel/runtime": "^7.0.0", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0", - "bind-event-listener": "^2.1.1" - }, - "peerDependencies": { - "react": "^16.8.0" - } - }, "node_modules/@babel/code-frame": { "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", @@ -129,6 +82,7 @@ "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "devOptional": true, "engines": { "node": ">=6.9.0" } @@ -137,6 +91,7 @@ "version": "7.23.7", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", + "devOptional": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.23.5", @@ -165,12 +120,14 @@ "node_modules/@babel/core/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==" + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "devOptional": true }, "node_modules/@babel/generator": { "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "devOptional": true, "dependencies": { "@babel/types": "^7.23.6", "@jridgewell/gen-mapping": "^0.3.2", @@ -185,6 +142,7 @@ "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "devOptional": true, "dependencies": { "@babel/compat-data": "^7.23.5", "@babel/helper-validator-option": "^7.23.5", @@ -200,6 +158,7 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "devOptional": true, "engines": { "node": ">=6.9.0" } @@ -208,6 +167,7 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "devOptional": true, "dependencies": { "@babel/template": "^7.22.15", "@babel/types": "^7.23.0" @@ -220,6 +180,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "devOptional": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -242,6 +203,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "devOptional": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-module-imports": "^7.22.15", @@ -260,6 +222,7 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -268,6 +231,7 @@ "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==", + "devOptional": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -279,6 +243,7 @@ "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "devOptional": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -306,6 +271,7 @@ "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "devOptional": true, "engines": { "node": ">=6.9.0" } @@ -314,6 +280,7 @@ "version": "7.23.7", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.7.tgz", "integrity": "sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==", + "devOptional": true, "dependencies": { "@babel/template": "^7.22.15", "@babel/traverse": "^7.23.7", @@ -340,6 +307,7 @@ "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "devOptional": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -347,20 +315,6 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-transform-react-jsx-self": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", @@ -406,6 +360,7 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "devOptional": true, "dependencies": { "@babel/code-frame": "^7.22.13", "@babel/parser": "^7.22.15", @@ -419,6 +374,7 @@ "version": "7.23.7", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", + "devOptional": true, "dependencies": { "@babel/code-frame": "^7.23.5", "@babel/generator": "^7.23.6", @@ -471,44 +427,54 @@ } }, "node_modules/@emotion/babel-plugin": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz", - "integrity": "sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA==", + "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/plugin-syntax-jsx": "^7.17.12", "@babel/runtime": "^7.18.3", - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/serialize": "^1.1.1", + "@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", "find-root": "^1.1.0", "source-map": "^0.5.7", - "stylis": "4.1.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "stylis": "4.2.0" } }, + "node_modules/@emotion/babel-plugin/node_modules/@emotion/memoize": { + "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/cache": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.5.tgz", - "integrity": "sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==", - "peer": true, + "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.8.0", - "@emotion/sheet": "^1.2.1", - "@emotion/utils": "^1.2.0", - "@emotion/weak-memoize": "^0.3.0", - "stylis": "4.1.3" + "@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": { + "node_modules/@emotion/cache/node_modules/@emotion/memoize": { "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", - "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" + "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/hash": { + "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.0", @@ -524,50 +490,53 @@ "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" }, "node_modules/@emotion/react": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.5.tgz", - "integrity": "sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A==", - "peer": true, + "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.10.5", - "@emotion/cache": "^11.10.5", - "@emotion/serialize": "^1.1.1", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@emotion/utils": "^1.2.0", - "@emotion/weak-memoize": "^0.3.0", + "@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": { - "@babel/core": "^7.0.0", "react": ">=16.8.0" }, "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, "@types/react": { "optional": true } } }, "node_modules/@emotion/serialize": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz", - "integrity": "sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==", + "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.0", - "@emotion/memoize": "^0.8.0", - "@emotion/unitless": "^0.8.0", - "@emotion/utils": "^1.2.0", + "@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/serialize/node_modules/@emotion/memoize": { + "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/sheet": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.1.tgz", - "integrity": "sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==", - "peer": true + "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.10.5", @@ -596,28 +565,31 @@ } }, "node_modules/@emotion/unitless": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", - "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + "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.0", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", - "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", + "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.0", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", - "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" + "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.0", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz", - "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==", - "peer": true + "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/@esbuild/android-arm": { "version": "0.16.17", @@ -1036,6 +1008,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "devOptional": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -1049,6 +1022,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "devOptional": true, "engines": { "node": ">=6.0.0" } @@ -1057,6 +1031,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "devOptional": true, "engines": { "node": ">=6.0.0" } @@ -1064,12 +1039,14 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "devOptional": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.17", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "devOptional": true, "dependencies": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" @@ -1578,11 +1555,6 @@ "node": ">=8" } }, - "node_modules/bind-event-listener": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bind-event-listener/-/bind-event-listener-2.1.1.tgz", - "integrity": "sha512-O+a5c0D2se/u2VlBJmPRn45IB6R4mYMh1ok3dWxrIZ2pmLqzggBhb875mbq73508ylzofc0+hT9W41x4Y2s8lg==" - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1609,6 +1581,7 @@ "version": "4.22.2", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "devOptional": true, "funding": [ { "type": "opencollective", @@ -1668,6 +1641,7 @@ "version": "1.0.30001576", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz", "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==", + "devOptional": true, "funding": [ { "type": "opencollective", @@ -1847,7 +1821,8 @@ "node_modules/electron-to-chromium": { "version": "1.4.623", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.623.tgz", - "integrity": "sha512-lKoz10iCYlP1WtRYdh5MvocQPWVRoI7ysp6qf18bmeBgR8abE6+I2CsfyNKztRDZvhdWc+krKT6wS7Neg8sw3A==" + "integrity": "sha512-lKoz10iCYlP1WtRYdh5MvocQPWVRoI7ysp6qf18bmeBgR8abE6+I2CsfyNKztRDZvhdWc+krKT6wS7Neg8sw3A==", + "devOptional": true }, "node_modules/engine.io": { "version": "6.5.4", @@ -1950,6 +1925,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "devOptional": true, "engines": { "node": ">=6" } @@ -2011,6 +1987,7 @@ "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==", + "devOptional": true, "engines": { "node": ">=6.9.0" } @@ -2031,6 +2008,7 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "devOptional": true, "engines": { "node": ">=4" } @@ -2162,6 +2140,7 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "devOptional": true, "bin": { "jsesc": "bin/jsesc" }, @@ -2178,6 +2157,7 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "devOptional": true, "bin": { "json5": "lib/cli.js" }, @@ -2214,6 +2194,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "devOptional": true, "dependencies": { "yallist": "^3.0.2" } @@ -2310,7 +2291,8 @@ "node_modules/node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "devOptional": true }, "node_modules/nodemon": { "version": "2.0.20", @@ -2434,7 +2416,8 @@ "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "devOptional": true }, "node_modules/picomatch": { "version": "2.3.1", @@ -2612,6 +2595,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "devOptional": true, "bin": { "semver": "bin/semver.js" } @@ -2716,9 +2700,10 @@ } }, "node_modules/stylis": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", - "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", + "license": "MIT" }, "node_modules/supports-color": { "version": "5.5.0", @@ -2857,6 +2842,7 @@ "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==", + "devOptional": true, "funding": [ { "type": "opencollective", @@ -3006,7 +2992,8 @@ "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "devOptional": true }, "node_modules/yaml": { "version": "1.10.2", @@ -3045,6 +3032,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "devOptional": true, "requires": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -3054,6 +3042,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "devOptional": true, "requires": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -3061,46 +3050,6 @@ } } }, - "@atlaskit/codemod-utils": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@atlaskit/codemod-utils/-/codemod-utils-4.1.3.tgz", - "integrity": "sha512-KQ4e5DGPth2UskAsrFE3kmeVWJST2BgXABGExXnnO1LbnIPNBP/cnemVN1Pzw2JELMXyHTCeUZAoHxVcAYtD0g==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@atlaskit/ds-lib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.1.2.tgz", - "integrity": "sha512-fBqL2QmBYrbYSE/SUGdcTipmBFZe1p7faZeJRpq6kzhKui7vLaDeiusvLAbDSjjiHVXUK6SCAEU9jnBwq1T19w==", - "requires": { - "@babel/runtime": "^7.0.0", - "bind-event-listener": "^2.1.1" - } - }, - "@atlaskit/theme": { - "version": "12.2.8", - "resolved": "https://registry.npmjs.org/@atlaskit/theme/-/theme-12.2.8.tgz", - "integrity": "sha512-Y+ugqribyjqUdIPHOWjj4jqWXIt8ruZADaxz0qqvwmGz0MbOJ7Vi9VO9TCtMGOldJm38IbualFLh95HAqSmzOg==", - "requires": { - "@atlaskit/codemod-utils": "^4.1.0", - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/tokens": "^1.1.0", - "@babel/runtime": "^7.0.0" - } - }, - "@atlaskit/tokens": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.1.0.tgz", - "integrity": "sha512-EOxcNV1VNr1o90eEIOTUfBzcsxiaWB2JDf8ytdFiI20BoeKbWkfJqeP6V3CkcmN9IwQ5M5fjK5PBq1FlAxDRXg==", - "requires": { - "@atlaskit/ds-lib": "^2.1.0", - "@babel/runtime": "^7.0.0", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0", - "bind-event-listener": "^2.1.1" - } - }, "@babel/code-frame": { "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", @@ -3113,12 +3062,14 @@ "@babel/compat-data": { "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==" + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "devOptional": true }, "@babel/core": { "version": "7.23.7", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", + "devOptional": true, "requires": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.23.5", @@ -3140,7 +3091,8 @@ "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==" + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "devOptional": true } } }, @@ -3148,6 +3100,7 @@ "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "devOptional": true, "requires": { "@babel/types": "^7.23.6", "@jridgewell/gen-mapping": "^0.3.2", @@ -3159,6 +3112,7 @@ "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "devOptional": true, "requires": { "@babel/compat-data": "^7.23.5", "@babel/helper-validator-option": "^7.23.5", @@ -3170,12 +3124,14 @@ "@babel/helper-environment-visitor": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==" + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "devOptional": true }, "@babel/helper-function-name": { "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "devOptional": true, "requires": { "@babel/template": "^7.22.15", "@babel/types": "^7.23.0" @@ -3185,6 +3141,7 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "devOptional": true, "requires": { "@babel/types": "^7.22.5" } @@ -3201,6 +3158,7 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "devOptional": true, "requires": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-module-imports": "^7.22.15", @@ -3212,12 +3170,14 @@ "@babel/helper-plugin-utils": { "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true }, "@babel/helper-simple-access": { "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==", + "devOptional": true, "requires": { "@babel/types": "^7.22.5" } @@ -3226,6 +3186,7 @@ "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "devOptional": true, "requires": { "@babel/types": "^7.22.5" } @@ -3243,12 +3204,14 @@ "@babel/helper-validator-option": { "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==" + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "devOptional": true }, "@babel/helpers": { "version": "7.23.7", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.7.tgz", "integrity": "sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==", + "devOptional": true, "requires": { "@babel/template": "^7.22.15", "@babel/traverse": "^7.23.7", @@ -3268,15 +3231,8 @@ "@babel/parser": { "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", - "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==" - }, - "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "devOptional": true }, "@babel/plugin-transform-react-jsx-self": { "version": "7.18.6", @@ -3308,6 +3264,7 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "devOptional": true, "requires": { "@babel/code-frame": "^7.22.13", "@babel/parser": "^7.22.15", @@ -3318,6 +3275,7 @@ "version": "7.23.7", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", + "devOptional": true, "requires": { "@babel/code-frame": "^7.23.5", "@babel/generator": "^7.23.6", @@ -3363,41 +3321,53 @@ } }, "@emotion/babel-plugin": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz", - "integrity": "sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA==", + "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==", "requires": { "@babel/helper-module-imports": "^7.16.7", - "@babel/plugin-syntax-jsx": "^7.17.12", "@babel/runtime": "^7.18.3", - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/serialize": "^1.1.1", + "@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", "find-root": "^1.1.0", "source-map": "^0.5.7", - "stylis": "4.1.3" + "stylis": "4.2.0" + }, + "dependencies": { + "@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==" + } } }, "@emotion/cache": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.5.tgz", - "integrity": "sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==", - "peer": true, + "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==", "requires": { - "@emotion/memoize": "^0.8.0", - "@emotion/sheet": "^1.2.1", - "@emotion/utils": "^1.2.0", - "@emotion/weak-memoize": "^0.3.0", - "stylis": "4.1.3" + "@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" + }, + "dependencies": { + "@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==" + } } }, "@emotion/hash": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", - "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==" }, "@emotion/is-prop-valid": { "version": "1.2.0", @@ -3413,38 +3383,43 @@ "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" }, "@emotion/react": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.5.tgz", - "integrity": "sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A==", - "peer": true, + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", + "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", "requires": { "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.5", - "@emotion/cache": "^11.10.5", - "@emotion/serialize": "^1.1.1", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@emotion/utils": "^1.2.0", - "@emotion/weak-memoize": "^0.3.0", + "@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" } }, "@emotion/serialize": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz", - "integrity": "sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", "requires": { - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/unitless": "^0.8.0", - "@emotion/utils": "^1.2.0", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", "csstype": "^3.0.2" + }, + "dependencies": { + "@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==" + } } }, "@emotion/sheet": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.1.tgz", - "integrity": "sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==", - "peer": true + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==" }, "@emotion/styled": { "version": "11.10.5", @@ -3460,26 +3435,25 @@ } }, "@emotion/unitless": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", - "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==" }, "@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", - "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", + "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==", "requires": {} }, "@emotion/utils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", - "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==" }, "@emotion/weak-memoize": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz", - "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==", - "peer": true + "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==" }, "@esbuild/android-arm": { "version": "0.16.17", @@ -3673,6 +3647,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "devOptional": true, "requires": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -3682,22 +3657,26 @@ "@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "devOptional": true }, "@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==" + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "devOptional": true }, "@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "devOptional": true }, "@jridgewell/trace-mapping": { "version": "0.3.17", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "devOptional": true, "requires": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" @@ -4042,11 +4021,6 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, - "bind-event-listener": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bind-event-listener/-/bind-event-listener-2.1.1.tgz", - "integrity": "sha512-O+a5c0D2se/u2VlBJmPRn45IB6R4mYMh1ok3dWxrIZ2pmLqzggBhb875mbq73508ylzofc0+hT9W41x4Y2s8lg==" - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -4070,6 +4044,7 @@ "version": "4.22.2", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "devOptional": true, "requires": { "caniuse-lite": "^1.0.30001565", "electron-to-chromium": "^1.4.601", @@ -4080,7 +4055,7 @@ "bsa-patterns-client": { "version": "file:client", "requires": { - "@atlaskit/theme": "12.2.8", + "@emotion/react": "^11.14.0", "@emotion/styled": "11.10.5", "@hello-pangea/dnd": "16.2.0", "@types/react": "16.14.35", @@ -4117,7 +4092,8 @@ "caniuse-lite": { "version": "1.0.30001576", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz", - "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==" + "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==", + "devOptional": true }, "chalk": { "version": "2.4.2", @@ -4248,7 +4224,8 @@ "electron-to-chromium": { "version": "1.4.623", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.623.tgz", - "integrity": "sha512-lKoz10iCYlP1WtRYdh5MvocQPWVRoI7ysp6qf18bmeBgR8abE6+I2CsfyNKztRDZvhdWc+krKT6wS7Neg8sw3A==" + "integrity": "sha512-lKoz10iCYlP1WtRYdh5MvocQPWVRoI7ysp6qf18bmeBgR8abE6+I2CsfyNKztRDZvhdWc+krKT6wS7Neg8sw3A==", + "devOptional": true }, "engine.io": { "version": "6.5.4", @@ -4331,7 +4308,8 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "devOptional": true }, "escape-string-regexp": { "version": "4.0.0", @@ -4373,7 +4351,8 @@ "gensync": { "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==" + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "devOptional": true }, "glob-parent": { "version": "5.1.2", @@ -4387,7 +4366,8 @@ "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "devOptional": true }, "has": { "version": "1.0.3", @@ -4485,7 +4465,8 @@ "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "devOptional": true }, "json-parse-even-better-errors": { "version": "2.3.1", @@ -4495,7 +4476,8 @@ "json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "devOptional": true }, "lines-and-columns": { "version": "1.2.4", @@ -4523,6 +4505,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "devOptional": true, "requires": { "yallist": "^3.0.2" } @@ -4598,7 +4581,8 @@ "node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "devOptional": true }, "nodemon": { "version": "2.0.20", @@ -4687,7 +4671,8 @@ "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "devOptional": true }, "picomatch": { "version": "2.3.1", @@ -4817,7 +4802,8 @@ "semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "devOptional": true }, "simple-update-notifier": { "version": "1.1.0", @@ -4900,9 +4886,9 @@ "dev": true }, "stylis": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", - "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" }, "supports-color": { "version": "5.5.0", @@ -4994,6 +4980,7 @@ "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==", + "devOptional": true, "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -5060,7 +5047,8 @@ "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "devOptional": true }, "yaml": { "version": "1.10.2", From d8925e8638b635b4599d923fbfcc2eb142106a43 Mon Sep 17 00:00:00 2001 From: Ilya <ilyaafon5@gmail.com> Date: Wed, 25 Jun 2025 20:42:32 +0300 Subject: [PATCH 17/19] Improve colors --- client/src/theme/theme.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/client/src/theme/theme.ts b/client/src/theme/theme.ts index f435553..4056e1b 100644 --- a/client/src/theme/theme.ts +++ b/client/src/theme/theme.ts @@ -1,15 +1,15 @@ export const theme = { colors: { - // Neutral colors - Darker, more substantial grays + // Neutral colors - Darker colors for better white text visibility N0: '#FFFFFF', // Pure white N20: '#E2E8F0', // Medium-light gray with more presence - N30: '#CBD5E1', // Noticeably darker gray for better definition - N400A: 'rgba(71, 85, 105, 0.4)', // Darker gray with stronger alpha - N900: '#1E293B', // Deep slate gray for strong contrast + N30: '#64748B', // Medium-dark gray + N400A: 'rgba(30, 41, 59, 0.7)', // Much darker gray with higher opacity + N900: '#0F172A', // Very dark slate for maximum contrast - // Red colors - R75: '#FECACA', // Saturated light red/pink - R100: '#EF4444', // Bold, vibrant red + // Red colors - Darker reds for better white text visibility + R75: '#DC2626', // Dark red ensuring white text is clearly visible + R100: '#B91C1C', // Very dark red for maximum contrast with white text }, }; From c7fe5a8c774151e6b647661b44db5cb1a46dac07 Mon Sep 17 00:00:00 2001 From: Ilya <ilyaafon5@gmail.com> Date: Wed, 25 Jun 2025 20:55:34 +0300 Subject: [PATCH 18/19] Fix add button color --- client/src/components/primitives/add-button.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/src/components/primitives/add-button.tsx b/client/src/components/primitives/add-button.tsx index d5872c8..bc60a3c 100644 --- a/client/src/components/primitives/add-button.tsx +++ b/client/src/components/primitives/add-button.tsx @@ -1,5 +1,6 @@ import { Icon } from '../icon/icon'; import { Button } from './styled/button'; +import {theme} from "../../theme/theme"; type Props = { onClick: () => void; @@ -7,7 +8,7 @@ type Props = { const AddButton = ({ onClick }: Props) => { return ( - <Button className="add-btn" onClick={onClick} color='transparent'> + <Button className="add-btn" onClick={onClick} color={theme.colors.N30}> <Icon iconName="add" /> </Button> ); From ab9dfbaf6287fa6bdabbfeab6a3e1cebc6164254 Mon Sep 17 00:00:00 2001 From: Ilya <ilyaafon5@gmail.com> Date: Wed, 25 Jun 2025 21:12:39 +0300 Subject: [PATCH 19/19] Randomize stuff --- client/src/common/constants/css.constant.ts | 4 +-- .../components/card-item/styled/container.tsx | 2 +- .../card-list/styled/list-wrapper.tsx | 2 +- .../card-list/styled/scroll-container.tsx | 2 +- .../styled/column-creator-container.tsx | 2 +- .../column/styled/footer-container.tsx | 2 +- .../src/components/column/styled/header.tsx | 2 +- .../primitives/styled/basic-title.tsx | 2 +- .../components/primitives/styled/button.tsx | 2 +- .../components/primitives/styled/input.tsx | 4 +-- .../components/primitives/styled/splitter.tsx | 2 +- .../primitives/styled/text-input.tsx | 2 +- .../primitives/styled/title-input.tsx | 2 +- client/src/services/reorder.service.ts | 22 ++++++------ server/src/assets/mock-data.ts | 36 +++++++++---------- server/src/handlers/card.handler.ts | 8 ++--- server/src/handlers/list.handler.ts | 8 ++--- server/src/services/reorder.service.ts | 10 +++--- 18 files changed, 55 insertions(+), 59 deletions(-) diff --git a/client/src/common/constants/css.constant.ts b/client/src/common/constants/css.constant.ts index 69453aa..3d9e5f2 100644 --- a/client/src/common/constants/css.constant.ts +++ b/client/src/common/constants/css.constant.ts @@ -1,4 +1,4 @@ -const SPACE_IN_PX = 10; -const BORDER_RADIUS = 4; +const SPACE_IN_PX = 12; +const BORDER_RADIUS = 6; export { BORDER_RADIUS, SPACE_IN_PX }; diff --git a/client/src/components/card-item/styled/container.tsx b/client/src/components/card-item/styled/container.tsx index 763a912..9dedbd2 100644 --- a/client/src/components/card-item/styled/container.tsx +++ b/client/src/components/card-item/styled/container.tsx @@ -12,7 +12,7 @@ const Container = styled.a<Props>` background-color: ${({ theme }) => theme.colors.N0}; box-sizing: border-box; padding: ${SPACE_IN_PX}px; - min-height: 40px; + min-height: 45px; margin-bottom: ${SPACE_IN_PX}px; user-select: none; diff --git a/client/src/components/card-list/styled/list-wrapper.tsx b/client/src/components/card-list/styled/list-wrapper.tsx index 4609b0c..b765d15 100644 --- a/client/src/components/card-list/styled/list-wrapper.tsx +++ b/client/src/components/card-list/styled/list-wrapper.tsx @@ -12,7 +12,7 @@ const ListWrapper = styled.div` padding-bottom: 0; transition: background-color 0.2s ease, opacity 0.1s ease; user-select: none; - width: 300px; + width: 320px; `; export { ListWrapper }; diff --git a/client/src/components/card-list/styled/scroll-container.tsx b/client/src/components/card-list/styled/scroll-container.tsx index 80f1b40..c5d77cf 100644 --- a/client/src/components/card-list/styled/scroll-container.tsx +++ b/client/src/components/card-list/styled/scroll-container.tsx @@ -3,7 +3,7 @@ import styled from '@emotion/styled'; const ScrollContainer = styled.div` overflow-x: hidden; overflow-y: auto; - max-height: 80vh; + max-height: 75vh; `; export { ScrollContainer }; diff --git a/client/src/components/column-creator/styled/column-creator-container.tsx b/client/src/components/column-creator/styled/column-creator-container.tsx index 4bc4f35..57ae827 100644 --- a/client/src/components/column-creator/styled/column-creator-container.tsx +++ b/client/src/components/column-creator/styled/column-creator-container.tsx @@ -4,7 +4,7 @@ const ColumnCreatorContainer = styled.div` display: flex; justify-content: space-between; background-color: #ebecf0; - height: 30px; + height: 32px; padding: 8px; `; diff --git a/client/src/components/column/styled/footer-container.tsx b/client/src/components/column/styled/footer-container.tsx index 464d572..6458e92 100644 --- a/client/src/components/column/styled/footer-container.tsx +++ b/client/src/components/column/styled/footer-container.tsx @@ -4,7 +4,7 @@ const FooterContainer = styled.div` display: flex; justify-content: space-between; background-color: #ebecf0; - height: 30px; + height: 32px; padding: 8px; `; diff --git a/client/src/components/column/styled/header.tsx b/client/src/components/column/styled/header.tsx index dd350b0..7391405 100644 --- a/client/src/components/column/styled/header.tsx +++ b/client/src/components/column/styled/header.tsx @@ -16,7 +16,7 @@ const Header = styled.div<Props>` background-color: ${({ isDragging, theme }) => isDragging ? theme.colors.R100 : theme.colors.R75}; transition: background-color 0.2s ease; - height: 85px; + height: 90px; border-top-left-radius: 6px; border-top-right-radius: 6px; diff --git a/client/src/components/primitives/styled/basic-title.tsx b/client/src/components/primitives/styled/basic-title.tsx index 445593d..d770c82 100644 --- a/client/src/components/primitives/styled/basic-title.tsx +++ b/client/src/components/primitives/styled/basic-title.tsx @@ -6,7 +6,7 @@ const BasicTitle = styled.h3` flex-grow: 1; user-select: none; position: relative; - margin: 0.6em 0; + margin: 0.7em 0; &:focus { outline: 2px solid #998dd9; diff --git a/client/src/components/primitives/styled/button.tsx b/client/src/components/primitives/styled/button.tsx index 1fbc177..8c2554b 100644 --- a/client/src/components/primitives/styled/button.tsx +++ b/client/src/components/primitives/styled/button.tsx @@ -5,7 +5,7 @@ import { BORDER_RADIUS } from "../../../common/constants/constants"; const Button = styled.button` background-color: ${({ color }) => color}; border-radius: ${BORDER_RADIUS}px; - width: 20%; + width: 22%; display: flex; justify-content: center; align-items: center; diff --git a/client/src/components/primitives/styled/input.tsx b/client/src/components/primitives/styled/input.tsx index 1c99ed6..cd54a49 100644 --- a/client/src/components/primitives/styled/input.tsx +++ b/client/src/components/primitives/styled/input.tsx @@ -7,13 +7,13 @@ type Props = { }; const Input = styled.input<Props>` - border-radius: 2px; + border-radius: 3px; animation-duration: 0.01s; animation-name: mui-auto-fill-cancel; border-color: rgba(0, 0, 0, 0.87); border-style: none; border-width: 1px; - height: 30px; + height: 32px; width: ${({ width }) => (width ? width + "px" : "250px")}; font-size: ${({ fontSize }) => fontSize}; font-weight: ${({ isBold }) => (isBold ? "bold" : "normal")}; diff --git a/client/src/components/primitives/styled/splitter.tsx b/client/src/components/primitives/styled/splitter.tsx index 019c823..2d441e1 100644 --- a/client/src/components/primitives/styled/splitter.tsx +++ b/client/src/components/primitives/styled/splitter.tsx @@ -1,7 +1,7 @@ import styled from '@emotion/styled'; const Splitter = styled.div` - margin-right: 5px; + margin-right: 8px; `; export { Splitter }; diff --git a/client/src/components/primitives/styled/text-input.tsx b/client/src/components/primitives/styled/text-input.tsx index bfcbf5b..d63a617 100644 --- a/client/src/components/primitives/styled/text-input.tsx +++ b/client/src/components/primitives/styled/text-input.tsx @@ -9,7 +9,7 @@ const TextInput = styled.textarea` border-color: rgba(0, 0, 0, 0.87); border-style: none; border-width: 1px; - height: 50px; + height: 55px; width: 100%; font-family: inherit; resize: vertical; diff --git a/client/src/components/primitives/styled/title-input.tsx b/client/src/components/primitives/styled/title-input.tsx index b476633..78831c8 100644 --- a/client/src/components/primitives/styled/title-input.tsx +++ b/client/src/components/primitives/styled/title-input.tsx @@ -3,7 +3,7 @@ import styled from '@emotion/styled'; import { Input } from './input'; const TitleInput = styled(Input)` - margin: 0.6em 0; + margin: 0.7em 0; `; export { TitleInput }; diff --git a/client/src/services/reorder.service.ts b/client/src/services/reorder.service.ts index a2bcb23..9315c33 100644 --- a/client/src/services/reorder.service.ts +++ b/client/src/services/reorder.service.ts @@ -4,8 +4,8 @@ import { type Card, type List } from "../common/types/types"; export const reorderService = { reorderLists(items: List[], startIndex: number, endIndex: number): List[] { - const [removed] = items.splice(startIndex, 1); - items.splice(endIndex, 0, removed); + const [removedItem] = items.splice(startIndex, 1); + items.splice(endIndex, 0, removedItem); return items; }, @@ -15,21 +15,21 @@ export const reorderService = { source: DraggableLocation, destination: DraggableLocation ): List[] { - const current: Card[] = + const currentCards: Card[] = lists.find((list) => list.id === source.droppableId)?.cards || []; - const next: Card[] = + const nextCards: Card[] = lists.find((list) => list.id === destination.droppableId)?.cards || []; - const target: Card = current[source.index]; + const targetCard: Card = currentCards[source.index]; const isMovingInSameList = source.droppableId === destination.droppableId; if (isMovingInSameList) { - const [removed] = current.splice(source.index, 1); - current.splice(destination.index, 0, removed); - const reordered: Card[] = current; + const [removedCard] = currentCards.splice(source.index, 1); + currentCards.splice(destination.index, 0, removedCard); + const reorderedCards: Card[] = currentCards; return lists.map((list) => - list.id === source.droppableId ? { ...list, cards: reordered } : list + list.id === source.droppableId ? { ...list, cards: reorderedCards } : list ); } @@ -37,14 +37,14 @@ export const reorderService = { if (list.id === source.droppableId) { return { ...list, - cards: this.removeCardFromList(current, source.index), + cards: this.removeCardFromList(currentCards, source.index), }; } if (list.id === destination.droppableId) { return { ...list, - cards: this.addCardToList(next, destination.index, target), + cards: this.addCardToList(nextCards, destination.index, targetCard), }; } diff --git a/server/src/assets/mock-data.ts b/server/src/assets/mock-data.ts index d36cfe8..2e4ad73 100644 --- a/server/src/assets/mock-data.ts +++ b/server/src/assets/mock-data.ts @@ -1,19 +1,16 @@ import { Card } from '../data/models/card'; import { List } from '../data/models/list'; -const toDo = new List("To Do"); -toDo.cards = [ - new Card( - "Implement renaming lists", - "Expected result - possibility to change the name of the list" - ), - new Card( - "Implement adding cards", - "Expected result - possibility to create new cards" - ), - new Card( - "Implement removing cards", - "Expected result - possibility to delete the card when button is clicked" +const toDo = new List("Backlog"); +toDo.cards = [ new Card( + "Implement list renaming functionality", + "Expected result - ability to modify the list name" + ), new Card( + "Implement card creation feature", + "Expected result - ability to add new cards to lists" + ), new Card( + "Implement card deletion functionality", + "Expected result - ability to remove cards when delete button is pressed" ), new Card( "Implement card title renaming", @@ -22,10 +19,9 @@ toDo.cards = [ new Card( "Implement card description renaming", "Expected result - possibility to change the card description" - ), - new Card( - "Implement card copying", - 'Expected result - possibility to copy card. Should be implemented using Prototype pattern. Id should be new for a new card. The name of the card should have "copy" suffix' + ), new Card( + "Implement task duplication feature", + 'Expected result - ability to duplicate cards. Should be implemented using Prototype pattern. New ID should be generated for copied card. The card name should include "duplicate" suffix' ), new Card( "Implement logging on server side", @@ -37,11 +33,11 @@ toDo.cards = [ ), ]; -const inProgress = new List("In Progress"); +const inProgress = new List("Development"); inProgress.cards = [ new Card( - "Implement adding lists", - "Expected result - possibility to create a new list" + "Implement list creation functionality", + "Expected result - ability to add new lists to the board" ), ]; diff --git a/server/src/handlers/card.handler.ts b/server/src/handlers/card.handler.ts index cf2b6fd..9997c7b 100644 --- a/server/src/handlers/card.handler.ts +++ b/server/src/handlers/card.handler.ts @@ -12,9 +12,9 @@ class CardHandler extends SocketHandler { public createCard(listId: string, cardName: string): void { const newCard = new Card(cardName, ""); - const lists = this.db.getData(); + const allLists = this.db.getData(); - const updatedLists = lists.map((list) => + const updatedLists = allLists.map((list) => list.id === listId ? list.setCards(list.cards.concat(newCard)) : list ); @@ -33,9 +33,9 @@ class CardHandler extends SocketHandler { sourceListId: string; destinationListId: string; }): void { - const lists = this.db.getData(); + const allLists = this.db.getData(); const reordered = this.reorderService.reorderCards({ - lists, + lists: allLists, sourceIndex, destinationIndex, sourceListId, diff --git a/server/src/handlers/list.handler.ts b/server/src/handlers/list.handler.ts index b1a0e0c..afa11d3 100644 --- a/server/src/handlers/list.handler.ts +++ b/server/src/handlers/list.handler.ts @@ -16,9 +16,9 @@ class ListHandler extends SocketHandler { } private reorderLists(sourceIndex: number, destinationIndex: number): void { - const lists = this.db.getData(); + const allLists = this.db.getData(); const reorderedLists = this.reorderService.reorder( - lists, + allLists, sourceIndex, destinationIndex ); @@ -27,9 +27,9 @@ class ListHandler extends SocketHandler { } private createList(name: string): void { - const lists = this.db.getData(); + const allLists = this.db.getData(); const newList = new List(name); - this.db.setData(lists.concat(newList)); + this.db.setData(allLists.concat(newList)); this.updateLists(); } } diff --git a/server/src/services/reorder.service.ts b/server/src/services/reorder.service.ts index a0d7db3..691ccb6 100644 --- a/server/src/services/reorder.service.ts +++ b/server/src/services/reorder.service.ts @@ -3,9 +3,9 @@ import { List } from "../data/models/list"; class ReorderService { public reorder<T>(items: T[], startIndex: number, endIndex: number): T[] { - const card = items[startIndex]; + const element = items[startIndex]; const listWithRemoved = this.remove(items, startIndex); - const result = this.insert(listWithRemoved, endIndex, card); + const result = this.insert(listWithRemoved, endIndex, element); return result; } @@ -23,10 +23,10 @@ class ReorderService { sourceListId: string; destinationListId: string; }): List[] { - const target: Card = lists.find((list) => list.id === sourceListId) + const targetCard: Card = lists.find((list) => list.id === sourceListId) ?.cards?.[sourceIndex]; - if (!target) { + if (!targetCard) { return lists; } @@ -36,7 +36,7 @@ class ReorderService { } if (list.id === destinationListId) { - list.setCards(this.insert(list.cards, destinationIndex, target)); + list.setCards(this.insert(list.cards, destinationIndex, targetCard)); } return list;