diff --git a/.devcontainer/docker-compose.yaml b/.devcontainer/docker-compose.yaml index 98fe18c4..79a156b1 100644 --- a/.devcontainer/docker-compose.yaml +++ b/.devcontainer/docker-compose.yaml @@ -7,13 +7,11 @@ services: dockerfile: Dockerfile.backend volumes: - ..:/workspace:z - command: cargo run --manifest-path /workspace/backend/Cargo.toml --release -p pin_packing serve --database-url postgres://postgres:password@postgres/pin_packing + command: sleep infinity environment: OPA_URL: http://opa:8181 DATABASE_URL: postgres://postgres:password@postgres RABBITMQ_URL: amqp://rabbitmq:password@rabbitmq - ports: - - "8080:80" frontend: image: docker.io/library/node:20.6.0-bookworm diff --git a/.gitignore b/.gitignore index 6ccbcb55..31281df2 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,3 @@ # Developer Tooling .vscode - -# Generated Schema -pin_packing.graphql \ No newline at end of file diff --git a/frontend/package.json b/frontend/package.json index 7468b944..5ac80468 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -59,9 +59,7 @@ "build": "node scripts/build.js", "test": "node scripts/test.js", "format": "prettier --write **/*.js", - "eslint-lint": "node scripts/lint.js", - "compile": "graphql-codegen", - "watch": "graphql-codegen -w" + "eslint-lint": "node scripts/lint.js" }, "eslintConfig": { "extends": [ @@ -92,9 +90,7 @@ "graphql": "^16.3.0", "http-proxy-middleware": "^2.0.6", "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-helmet": "^6.1.0", - "react-toggle-dark-mode": "^1.1.1" + "react-dom": "^18.2.0" }, "jest": { "roots": [ diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index d2be215a..23bc1588 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,10 +1,10 @@ -/* eslint-disable no-template-curly-in-string */ -import { useQuery } from "@apollo/client"; +import { useMutation, useQuery } from "@apollo/client"; import { gql } from './__generated__/gql'; import React from "react"; import { theme } from "@diamondlightsource/ui-components" -import { ChakraProvider, Alert, AlertIcon, AlertTitle, AlertDescription, Button, HStack } from "@chakra-ui/react"; +import { ChakraProvider, Alert, AlertIcon, AlertTitle, AlertDescription, Button, HStack, Select } from "@chakra-ui/react"; import { PaginationTable } from "./components/PaginationTable"; +import { PinStatus } from "./__generated__/graphql"; const GET_INFO = gql(` query pinInfo ($after: String) { @@ -27,6 +27,98 @@ query pinInfo ($after: String) { } `); +const UPDATE_PIN_STATUS = gql(` + mutation updatePinStatus($barcode: String!, $status: PinStatus!) { + updateLibraryPinStatus(barcode: $barcode, status: $status) { + barcode + status + } + } + `); + +const PIN_FRAGMENT = gql(` +fragment pin on LibraryPin { + barcode, + status +} +`) + + +const LIBRARY_PINS_FRAGMENT = gql(` +fragment pinPage on LibraryPinConnection { + edges { + cursor + node { + ...pin + loopSize, + } + } +} + +`) + +export interface UpdatePinStatusProps { + item: Record +} + +const UpdatePinStatus = ({item }: UpdatePinStatusProps) => { + + const [status, setStatus] = React.useState(item['status']); + + const handleStatusChange = (event) => { + setStatus(event.target.value); + }; + const [ + updateLibraryPinStatus, + { error: mutationError } + ] = useMutation(UPDATE_PIN_STATUS, { + + update(cache, {data: {updateLibraryPinStatus}}) { + + cache.writeFragment({ + fragment: PIN_FRAGMENT, + data: updateLibraryPinStatus, + fragmentName: "pin", + }); + + const libraryPins = cache.readFragment({ + id: "barcode", + fragment: LIBRARY_PINS_FRAGMENT, + fragmentName: 'pinPage' + }); + if (libraryPins) { + const newEdges = [...libraryPins.edges, updateLibraryPinStatus] + cache.writeFragment({ + id: "barcode", + fragment: LIBRARY_PINS_FRAGMENT, + fragmentName: 'pinPage', + data: { ...libraryPins, edges: newEdges } + }); + } + } + }) + + return ( +
+
{ + e.preventDefault(); + updateLibraryPinStatus({ variables: { barcode: item['barcode'], status: status } }); + + ; + }} + > + + +
+ {mutationError &&

Error :( Please try again

} +
+ ) + } + // Displays libraryPins query in table component. The table can load more data if required function DisplayPinInfo(): React.JSX.Element { const { loading, error, data, fetchMore } = useQuery( @@ -35,10 +127,7 @@ function DisplayPinInfo(): React.JSX.Element { notifyOnNetworkStatusChange: true, }); - const { toggleColorMode } = useColorMode() - var loadingRows = loading ? 2 : 0 - const bgColour = useColorModeValue('white', 'black') if (error) return ( @@ -104,7 +193,7 @@ function DisplayPinInfo(): React.JSX.Element { rowVariant={"diamondStriped"} /> - - - {mutationLoading &&

Loading...

} - {mutationError &&

Error :( Please try again

} - - ) -} - -export { UpdatePinStatus } \ No newline at end of file diff --git a/frontend/src/styles/colours.tsx b/frontend/src/styles/colours.tsx deleted file mode 100644 index f8c40280..00000000 --- a/frontend/src/styles/colours.tsx +++ /dev/null @@ -1,20 +0,0 @@ -const colours = { - diamond: { - 50: { default: "#FBFBFB", _dark: "#525151" }, - 75: "#F7F7F7", - 100: { default: "#E7ECEF", _dark: "#383838" }, - 200: { default: "#CBD5E0", _dark: "#030303" }, - 300: "#39435E", - 400: "#9BBBFA", - 500: "#fcd021", - 600: "#385BBD", - 700: "#1040A1", - 800: "#001d55" - }, - }; - - const fillColours = ["#ff5733", "#19D3FF", "#FF9B40", "#FF2677", "#FF9B40"]; - - const getFillColour = (j: number) => fillColours[j % fillColours.length]; - - export { colours, getFillColour }; \ No newline at end of file diff --git a/frontend/src/styles/components.tsx b/frontend/src/styles/components.tsx deleted file mode 100644 index 8f8cccf5..00000000 --- a/frontend/src/styles/components.tsx +++ /dev/null @@ -1,325 +0,0 @@ -import { - defineStyleConfig, - defineStyle, - createMultiStyleConfigHelpers, - UseToastOptions, - } from "@chakra-ui/react"; - import { - cardAnatomy, - tabsAnatomy, - inputAnatomy, - numberInputAnatomy, - selectAnatomy, - } from "@chakra-ui/anatomy"; - - const baseToast: UseToastOptions = { - id: "main-toast", - status: "success", - duration: 6000, - isClosable: true, - }; - - const baseInput = { - field: { - bg: "white", - border: "solid 1px", - borderColor: "diamond.200", - borderRadius: 0, - }, - }; - - const Accordion = defineStyleConfig({ - baseStyle: { - container: { - border: "1px solid var(--chakra-colors-diamond-100)", - }, - }, - }); - - const Text = defineStyleConfig({ - variants: { - infoGroupText: { - wordBreak: "break-all", - display: "inline", - fontSize: "xs", - }, - }, - }); - - const Checkbox = defineStyleConfig({ - sizes: { - sm: { - control: { - height: "16px", - width: "16px", - }, - icon: { - height: "16px", - fontSize: "10px", - }, - label: { - fontSize: "14px", - height: "16px", - }, - }, - }, - baseStyle: { - control: { - borderColor: "diamond.600", - backgroundColor: "#FFF", - _checked: { - backgroundColor: "diamond.600", - borderColor: "diamond.600", - }, - }, - }, - }); - - const Table = defineStyleConfig({ - variants: { - diamondStriped: { - tbody: { - tr: { - _odd: { - bg: "diamond.100", - }, - _even: { - bg: "diamond.50", - }, - _hover: { - bg: "diamond.200", - }, - - }, - } - } - }, - }); - - const CardHeader = defineStyleConfig({ - baseStyle: { - p: "10px !important", - h: "10%", - }, - }); - - const CardBody = defineStyleConfig({ - baseStyle: { - p: 2, - h: "90%", - }, - }); - - const { definePartsStyle, defineMultiStyleConfig } = createMultiStyleConfigHelpers( - cardAnatomy.keys, - ); - - const baseCardStyle = definePartsStyle({ - container: { - p: 1, - borderWidth: "1px", - borderRadius: "lg", - borderColor: "diamond.200", - _hover: { - borderColor: "diamond.400", - cursor: "pointer", - }, - _selected: { - bg: "diamond.100", - fontWeight: "600", - borderBottomWidth: "3px", - }, - }, - header: { - p: 2, - cursor: "pointer", - _hover: { - color: "diamond.300", - }, - }, - body: { - px: 2, - height: "90%", - }, - }); - - const Card = defineMultiStyleConfig({ - baseStyle: baseCardStyle, - defaultProps: { variant: "outline" }, - }); - - const Button = defineStyleConfig({ - defaultProps: { - variant: "default", - }, - baseStyle: { - borderBottom: "2px solid rgba(0,0,0,0.2)", - }, - variants: { - default: { - color: "diamond.50", - bg: "diamond.600", - _hover: { - bgImage: "linear-gradient(rgb(0 0 0/30%) 0 0)", - _disabled: { - bg: "diamond.600", - }, - }, - }, - pgSelected: { - bg: "diamond.600", - color: "diamond.50", - cursor: "default", - }, - pgNotSelected: { - bg: "gray.200", - color: "charcoal", - fontSize: "sm", - _hover: { - bg: "diamond.200", - }, - }, - onBlue: { - color: "diamond.500", - borderColor: "diamond.500", - border: "1px solid", - fontSize: "sm", - _hover: { - color: "diamond.300", - bg: "diamond.500", - }, - }, - }, - }); - - const notFound = defineStyle({ - textAlign: "center", - color: "diamond.300", - }); - - const Heading = defineStyleConfig({ - variants: { - collection: { - fontSize: 20, - py: "4px", - }, - notFound, - notFoundSubtitle: { - ...notFound, - fontWeight: 200, - fontSize: 20, - paddingBottom: 10, - }, - }, - }); - - const { definePartsStyle: defineInputStyle, defineMultiStyleConfig: defineInputConfig } = - createMultiStyleConfigHelpers(inputAnatomy.keys); - - const hiContrastInput = defineInputStyle({ - field: { - borderWidth: "1px", - borderColor: "diamond.800", - borderRadius: 0, - _invalid: { - borderColor: "red.500", - }, - }, - }); - - const baseInputStyle = defineInputStyle({ - ...baseInput, - addon: { - border: "solid 1px", - borderColor: "diamond.200", - background: "diamond.100", - }, - }); - - const Input = defineInputConfig({ - baseStyle: baseInputStyle, - variants: { "hi-contrast": hiContrastInput, default: baseInputStyle }, - defaultProps: { variant: "default" }, - }); - - const { defineMultiStyleConfig: defineNumberInputConfig } = createMultiStyleConfigHelpers( - numberInputAnatomy.keys, - ); - - const NumberInput = defineNumberInputConfig({ - defaultProps: { variant: "default" }, - variants: { default: baseInput }, - }); - - const { defineMultiStyleConfig: defineSelectConfig } = createMultiStyleConfigHelpers( - selectAnatomy.keys, - ); - - const Select = defineSelectConfig({ - defaultProps: { variant: "default" }, - variants: { default: baseInput, "hi-contrast": hiContrastInput }, - }); - - const { definePartsStyle: defineTabsStyle, defineMultiStyleConfig: defineTabsConfig } = - createMultiStyleConfigHelpers(tabsAnatomy.keys); - - const baseTabsStyle = defineTabsStyle({ - tab: { - border: "1px solid", - borderColor: "diamond.200", - bg: "diamond.75", - borderBottom: "none", - _selected: { - bg: "diamond.50", - color: "diamond.700", - borderColor: "inherit", - borderBottom: "none", - borderTopColor: "diamond.700", - mb: "-2px", - }, - }, - tablist: { - borderBottom: "none", - }, - tabpanel: { - p: "2", - bg: "diamond.50", - border: "1px solid", - borderColor: "inherit", - }, - }); - - const Tabs = defineTabsConfig({ - baseStyle: baseTabsStyle, - defaultProps: { variant: "none" }, - }); - - const Code = defineStyleConfig({ - baseStyle: { - backgroundColor: "diamond.100", - color: "diamond.800", - }, - }); - - const Textarea = defineStyleConfig({ - variants: { "hi-contrast": hiContrastInput.field }, - }); - - export { - Accordion, - Button, - Table, - Text, - Heading, - Card, - CardHeader, - CardBody, - Tabs, - baseToast, - Checkbox, - Code, - Input, - Textarea, - NumberInput, - Select, - }; \ No newline at end of file diff --git a/frontend/src/styles/theme.tsx b/frontend/src/styles/theme.tsx deleted file mode 100644 index 748731bb..00000000 --- a/frontend/src/styles/theme.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { ThemeConfig, extendTheme } from "@chakra-ui/react"; -import { colours } from "./colours"; -import { - Accordion, - Button, - Checkbox, - Heading, - Table, - Card, - Tabs, - Code, - Text, - Input, - Textarea, - NumberInput, - Select, -} from "./components"; - -const config: ThemeConfig = { - initialColorMode: 'light', - useSystemColorMode: false, -} - -export const theme = extendTheme({ - semanticTokens: { colors: colours }, - components: { - Accordion, - Checkbox, - Button, - Text, - Heading, - Table, - Card, - Tabs, - Code, - Input, - Textarea, - NumberInput, - Select, - }, - breakpoints: { - sm: "30em", - md: "48em", - lg: "62em", - xl: "80em", - "2xl": "150em", - }, - config -}); \ No newline at end of file diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 42f38012..37e3af5e 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -85,15 +85,23 @@ "@babel/highlight" "^7.23.4" chalk "^2.4.2" +"@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== + dependencies: + "@babel/highlight" "^7.23.4" + chalk "^2.4.2" + "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.3": version "7.23.3" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.3.tgz#3febd552541e62b5e883a25eb3effd7c7379db11" integrity sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ== -"@babel/core@^7.11.1", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.14.0", "@babel/core@^7.16.0", "@babel/core@^7.21.3", "@babel/core@^7.22.9", "@babel/core@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.5.tgz#6e23f2acbcb77ad283c5ed141f824fd9f70101c7" - integrity sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g== +"@babel/core@^7.11.1", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.21.3", "@babel/core@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.3.tgz#5ec09c8803b91f51cc887dedc2654a35852849c9" + integrity sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.23.5" @@ -151,6 +159,16 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" +"@babel/generator@^7.23.0", "@babel/generator@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.5.tgz#17d0a1ea6b62f351d281350a5f80b87a810c4755" + integrity sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA== + dependencies: + "@babel/types" "^7.23.5" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" @@ -245,7 +263,7 @@ dependencies: "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.23.3": +"@babel/helper-module-transforms@^7.23.0", "@babel/helper-module-transforms@^7.23.3": version "7.23.3" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== @@ -354,6 +372,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.5.tgz#37dee97c4752af148e1d38c34b856b2507660563" integrity sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ== +"@babel/parser@^7.23.0", "@babel/parser@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.5.tgz#37dee97c4752af148e1d38c34b856b2507660563" + integrity sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ== + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": version "7.23.3" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" @@ -1221,7 +1244,32 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.16.8", "@babel/types@^7.18.13", "@babel/types@^7.20.7", "@babel/types@^7.21.3", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.23.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4": +"@babel/traverse@^7.23.2": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.5.tgz#f546bf9aba9ef2b042c0e00d245990c15508e7ec" + integrity sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.5" + "@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.5" + "@babel/types" "^7.23.5" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.16.8", "@babel/types@^7.18.13", "@babel/types@^7.20.7", "@babel/types@^7.21.3", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.3", "@babel/types@^7.23.4", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.4.tgz#7206a1810fc512a7f7f7d4dace4cb4c1c9dbfb8e" + integrity sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ== + dependencies: + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" + +"@babel/types@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.5.tgz#48d730a00c95109fa4393352705954d74fb5b602" integrity sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w== @@ -1433,6 +1481,13 @@ dependencies: "@chakra-ui/shared-utils" "2.0.5" +"@chakra-ui/icons@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/icons/-/icons-2.1.1.tgz#58ff0f9e703f2f4f89debd600ce4e438f43f9c9a" + integrity sha512-3p30hdo4LlRZTT5CwoAJq3G9fHI0wDc0pBaMHj4SUn0yomO+RcDRlzhdXqdr5cVnzax44sqXJVnf3oQG0eI+4g== + dependencies: + "@chakra-ui/icon" "3.2.0" + "@chakra-ui/image@2.1.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@chakra-ui/image/-/image-2.1.0.tgz#6c205f1ca148e3bf58345b0b5d4eb3d959eb9f87" @@ -2994,85 +3049,6 @@ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== -"@react-spring/animated@~9.7.3": - version "9.7.3" - resolved "https://registry.yarnpkg.com/@react-spring/animated/-/animated-9.7.3.tgz#4211b1a6d48da0ff474a125e93c0f460ff816e0f" - integrity sha512-5CWeNJt9pNgyvuSzQH+uy2pvTg8Y4/OisoscZIR8/ZNLIOI+CatFBhGZpDGTF/OzdNFsAoGk3wiUYTwoJ0YIvw== - dependencies: - "@react-spring/shared" "~9.7.3" - "@react-spring/types" "~9.7.3" - -"@react-spring/core@~9.7.3": - version "9.7.3" - resolved "https://registry.yarnpkg.com/@react-spring/core/-/core-9.7.3.tgz#60056bcb397f2c4f371c6c9a5f882db77ae90095" - integrity sha512-IqFdPVf3ZOC1Cx7+M0cXf4odNLxDC+n7IN3MDcVCTIOSBfqEcBebSv+vlY5AhM0zw05PDbjKrNmBpzv/AqpjnQ== - dependencies: - "@react-spring/animated" "~9.7.3" - "@react-spring/shared" "~9.7.3" - "@react-spring/types" "~9.7.3" - -"@react-spring/konva@~9.7.3": - version "9.7.3" - resolved "https://registry.yarnpkg.com/@react-spring/konva/-/konva-9.7.3.tgz#16bd29dd4860a99e960a72987c8bcfc828b22119" - integrity sha512-R9sY6SiPGYqz1383P5qppg5z57YfChVknOC1UxxaGxpw+WiZa8fZ4zmZobslrw+os3/+HAXZv8O+EvU/nQpf7g== - dependencies: - "@react-spring/animated" "~9.7.3" - "@react-spring/core" "~9.7.3" - "@react-spring/shared" "~9.7.3" - "@react-spring/types" "~9.7.3" - -"@react-spring/native@~9.7.3": - version "9.7.3" - resolved "https://registry.yarnpkg.com/@react-spring/native/-/native-9.7.3.tgz#ee38d7c23482cfb4916c9b3c021de2995a4f553a" - integrity sha512-4mpxX3FuEBCUT6ae2fjhxcJW6bhr2FBwFf274eXB7n+U30Gdg8Wo2qYwcUnmiAA0S3dvP8vLTazx3+CYWFShnA== - dependencies: - "@react-spring/animated" "~9.7.3" - "@react-spring/core" "~9.7.3" - "@react-spring/shared" "~9.7.3" - "@react-spring/types" "~9.7.3" - -"@react-spring/shared@~9.7.3": - version "9.7.3" - resolved "https://registry.yarnpkg.com/@react-spring/shared/-/shared-9.7.3.tgz#4cf29797847c689912aec4e62e34c99a4d5d9e53" - integrity sha512-NEopD+9S5xYyQ0pGtioacLhL2luflh6HACSSDUZOwLHoxA5eku1UPuqcJqjwSD6luKjjLfiLOspxo43FUHKKSA== - dependencies: - "@react-spring/types" "~9.7.3" - -"@react-spring/three@~9.7.3": - version "9.7.3" - resolved "https://registry.yarnpkg.com/@react-spring/three/-/three-9.7.3.tgz#4358a0c4640efe2972c4f7d0f7cd4efe927471c1" - integrity sha512-Q1p512CqUlmMK8UMBF/Rj79qndhOWq4XUTayxMP9S892jiXzWQuj+xC3Xvm59DP/D4JXusXpxxqfgoH+hmOktA== - dependencies: - "@react-spring/animated" "~9.7.3" - "@react-spring/core" "~9.7.3" - "@react-spring/shared" "~9.7.3" - "@react-spring/types" "~9.7.3" - -"@react-spring/types@~9.7.3": - version "9.7.3" - resolved "https://registry.yarnpkg.com/@react-spring/types/-/types-9.7.3.tgz#ea78fd447cbc2612c1f5d55852e3c331e8172a0b" - integrity sha512-Kpx/fQ/ZFX31OtlqVEFfgaD1ACzul4NksrvIgYfIFq9JpDHFwQkMVZ10tbo0FU/grje4rcL4EIrjekl3kYwgWw== - -"@react-spring/web@~9.7.3": - version "9.7.3" - resolved "https://registry.yarnpkg.com/@react-spring/web/-/web-9.7.3.tgz#d9f4e17fec259f1d65495a19502ada4f5b57fa3d" - integrity sha512-BXt6BpS9aJL/QdVqEIX9YoUy8CE6TJrU0mNCqSoxdXlIeNcEBWOfIyE6B14ENNsyQKS3wOWkiJfco0tCr/9tUg== - dependencies: - "@react-spring/animated" "~9.7.3" - "@react-spring/core" "~9.7.3" - "@react-spring/shared" "~9.7.3" - "@react-spring/types" "~9.7.3" - -"@react-spring/zdog@~9.7.3": - version "9.7.3" - resolved "https://registry.yarnpkg.com/@react-spring/zdog/-/zdog-9.7.3.tgz#8ccc7316f6d3460ed244d9e3f60de9b4c4a848ac" - integrity sha512-L+yK/1PvNi9n8cldiJ309k4LdxcPkeWE0W18l1zrP1IBIyd5NB5EPA8DMsGr9gtNnnIujtEzZk+4JIOjT8u/tw== - dependencies: - "@react-spring/animated" "~9.7.3" - "@react-spring/core" "~9.7.3" - "@react-spring/shared" "~9.7.3" - "@react-spring/types" "~9.7.3" - "@repeaterjs/repeater@^3.0.4": version "3.0.5" resolved "https://registry.yarnpkg.com/@repeaterjs/repeater/-/repeater-3.0.5.tgz#b77571685410217a548a9c753aa3cdfc215bfc78" @@ -3566,11 +3542,6 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== -"@types/json-stable-stringify@^1.0.32": - version "1.0.36" - resolved "https://registry.yarnpkg.com/@types/json-stable-stringify/-/json-stable-stringify-1.0.36.tgz#fe6c6001a69ff8160a772da08779448a333c7ddd" - integrity sha512-b7bq23s4fgBB76n34m2b3RBf6M369B0Z9uRR8aHTMd8kZISRkmDEpPD8hhpYvDFzr3bJCPES96cm3Q6qRNDbQw== - "@types/json-stable-stringify@^1.0.32": version "1.0.35" resolved "https://registry.yarnpkg.com/@types/json-stable-stringify/-/json-stable-stringify-1.0.35.tgz#9cea8628b50a093ae00a7e73de49676f2f9ade27" @@ -4566,11 +4537,6 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - async@^3.2.3: version "3.2.5" resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" @@ -5009,15 +4975,6 @@ capital-case@^1.0.4: tslib "^2.0.3" upper-case-first "^2.0.2" -capital-case@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669" - integrity sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - upper-case-first "^2.0.2" - case-sensitive-paths-webpack-plugin@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" @@ -9877,7 +9834,7 @@ react-error-overlay@^6.0.11: resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== -react-fast-compare@3.2.2, react-fast-compare@^3.1.1: +react-fast-compare@3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49" integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== @@ -9894,16 +9851,6 @@ react-focus-lock@^2.9.4: use-callback-ref "^1.3.0" use-sidecar "^1.1.2" -react-helmet@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-6.1.0.tgz#a750d5165cb13cf213e44747502652e794468726" - integrity sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw== - dependencies: - object-assign "^4.1.1" - prop-types "^15.7.2" - react-fast-compare "^3.1.1" - react-side-effect "^2.1.0" - react-icons@^4.11.0: version "4.12.0" resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.12.0.tgz#54806159a966961bfd5cdb26e492f4dafd6a8d78" @@ -9948,23 +9895,6 @@ react-remove-scroll@^2.5.6: use-callback-ref "^1.3.0" use-sidecar "^1.1.2" -react-side-effect@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.2.tgz#dc6345b9e8f9906dc2eeb68700b615e0b4fe752a" - integrity sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw== - -react-spring@^9.0.0-rc.3: - version "9.7.3" - resolved "https://registry.yarnpkg.com/react-spring/-/react-spring-9.7.3.tgz#3211dea4c4d7c5b541260af5100261b87becb5d5" - integrity sha512-oTxDpFV5gzq7jQX6+bU0SVq+vX8VnuuT5c8Zwn6CpDErOPvCmV+DRkPiEBtaL3Ozgzwiy5yFx83N0h303j/r3A== - dependencies: - "@react-spring/core" "~9.7.3" - "@react-spring/konva" "~9.7.3" - "@react-spring/native" "~9.7.3" - "@react-spring/three" "~9.7.3" - "@react-spring/web" "~9.7.3" - "@react-spring/zdog" "~9.7.3" - react-style-singleton@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.1.tgz#f99e420492b2d8f34d38308ff660b60d0b1205b4" @@ -9974,13 +9904,6 @@ react-style-singleton@^2.2.1: invariant "^2.2.4" tslib "^2.0.0" -react-toggle-dark-mode@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/react-toggle-dark-mode/-/react-toggle-dark-mode-1.1.1.tgz#ca738d4c7cd613f5091fe08e5c174d091ef5d2f3" - integrity sha512-25dH8tvQucpW9c024WQ6gXLxJ6Irc5iTFgAIKuwCUUfbbahyVd1OKEq5TqExzoPHoORIXlQKYXV/+fuyclr6FQ== - dependencies: - react-spring "^9.0.0-rc.3" - react-use-measure@^2.0.4: version "2.1.1" resolved "https://registry.yarnpkg.com/react-use-measure/-/react-use-measure-2.1.1.tgz#5824537f4ee01c9469c45d5f7a8446177c6cc4ba" @@ -10603,32 +10526,6 @@ snake-case@^3.0.4: dot-case "^3.0.4" tslib "^2.0.3" -slice-ansi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" - integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -snake-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" - integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - sockjs@^0.3.24: version "0.3.24" resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" @@ -11368,13 +11265,6 @@ unixify@^1.0.0: dependencies: normalize-path "^2.1.1" -unixify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unixify/-/unixify-1.0.0.tgz#3a641c8c2ffbce4da683a5c70f03a462940c2090" - integrity sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg== - dependencies: - normalize-path "^2.1.1" - unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"