diff --git a/packages/devtools/client/.vscode/settings.json b/packages/devtools/client/.vscode/settings.json new file mode 100644 index 000000000000..5633c879fb64 --- /dev/null +++ b/packages/devtools/client/.vscode/settings.json @@ -0,0 +1,9 @@ +{ + "cssVariables.lookupFiles": [ + "./node_modules/@radix-ui/themes/styles.css", + "./src/**/*.css", + "./src/**/*.scss", + "./src/**/*.sass", + "./src/**/*.less" + ] +} diff --git a/packages/devtools/client/modern.config.ts b/packages/devtools/client/modern.config.ts index 5d3dcd01eeac..93e0d16523bd 100644 --- a/packages/devtools/client/modern.config.ts +++ b/packages/devtools/client/modern.config.ts @@ -14,14 +14,21 @@ export default defineConfig<'rspack'>({ port: 8780, }, source: { - preEntry: [require.resolve('modern-normalize/modern-normalize.css')], + preEntry: [ + require.resolve('modern-normalize/modern-normalize.css'), + './src/styles/theme.scss', + ], globalVars: { 'process.env.PKG_VERSION': version, }, }, output: { assetPrefix: ROUTE_BASENAME, - enableCssModuleTSDeclaration: true, + }, + tools: { + postcss: (config, { addPlugins }) => { + addPlugins(require('postcss-custom-media')); + }, }, plugins: [appTools({ bundler: 'experimental-rspack' })], }); diff --git a/packages/devtools/client/package.json b/packages/devtools/client/package.json index accd824c346d..b783d50c85f3 100644 --- a/packages/devtools/client/package.json +++ b/packages/devtools/client/package.json @@ -16,42 +16,46 @@ "node": ">=14.0.0" }, "devDependencies": { - "birpc": "0.2.13", - "@emotion/react": "^11.11.1", - "@emotion/styled": "^11.11.0", + "@modern-js-app/eslint-config": "workspace:*", + "@modern-js/app-tools": "workspace:*", + "@modern-js/builder-rspack-provider": "workspace:*", + "@modern-js/builder-shared": "workspace:*", "@modern-js/devtools-kit": "workspace:*", + "@modern-js/eslint-config": "workspace:*", + "@modern-js/plugin-proxy": "workspace:*", "@modern-js/runtime": "workspace:*", + "@modern-js/tsconfig": "workspace:*", "@modern-js/types": "workspace:*", "@radix-ui/react-collapsible": "^1.0.3", "@radix-ui/react-icons": "^1.3.0", - "@radix-ui/react-popover": "^1.0.6", + "@radix-ui/react-popover": "^1.0.7", "@radix-ui/react-tabs": "^1.0.4", - "@radix-ui/themes": "^1.1.2", + "@radix-ui/themes": "^2.0.0", + "@types/jest": "~29.2.4", + "@types/lodash": "^4.14.196", + "@types/node": "~16.11.7", + "@types/react": "~18.0.26", + "@types/react-dom": "~18.0.10", + "birpc": "0.2.13", + "clsx": "^1.2.1", "lodash": "^4.17.21", "p-defer": "3.0.0", + "postcss-custom-media": "^10.0.1", "react": "~18.2.0", "react-base16-styling": "^0.9.1", "react-dom": "~18.2.0", + "react-icons": "^4.11.0", "react-json-tree": "^0.18.0", "react-json-view": "^1.21.3", "react-use": "^17.4.0", - "suspend-react": "^0.1.3", - "ufo": "^1.2.0", - "valtio": "^1.11.1", - "@modern-js-app/eslint-config": "workspace:*", - "@modern-js/app-tools": "workspace:*", - "@modern-js/builder-shared": "workspace:*", - "@modern-js/builder-rspack-provider": "workspace:*", - "@modern-js/eslint-config": "workspace:*", - "@modern-js/plugin-proxy": "workspace:*", - "@modern-js/tsconfig": "workspace:*", - "@types/jest": "~29.2.4", - "@types/lodash": "^4.14.196", - "@types/node": "~16.11.7", - "@types/react": "~18.0.26", - "@types/react-dom": "~18.0.10", "rimraf": "~3.0.2", + "suspend-react": "^0.1.3", "type-fest": "^4.1.0", - "typescript": "~5.0.4" + "typescript": "~5.0.4", + "ufo": "^1.2.0", + "valtio": "^1.11.1" + }, + "dependencies": { + "thumbhash": "^0.1.1" } } diff --git a/packages/devtools/client/src/components/Breadcrumbs.module.scss b/packages/devtools/client/src/components/Breadcrumbs.module.scss new file mode 100644 index 000000000000..65f635197ec2 --- /dev/null +++ b/packages/devtools/client/src/components/Breadcrumbs.module.scss @@ -0,0 +1,9 @@ +.link { + color: var(--gray-10); +} + +.connector { + width: var(--font-size-2); + height: var(--font-size-2); + color: var(--gray-6); +} diff --git a/packages/devtools/client/src/components/Breadcrumbs.tsx b/packages/devtools/client/src/components/Breadcrumbs.tsx index f46d72b6579e..45fcad85465b 100644 --- a/packages/devtools/client/src/components/Breadcrumbs.tsx +++ b/packages/devtools/client/src/components/Breadcrumbs.tsx @@ -1,43 +1,56 @@ -import React from 'react'; -import styled from '@emotion/styled'; -import { Button, Flex } from '@radix-ui/themes'; +import React, { ReactNode } from 'react'; +import _ from 'lodash'; +import { Flex } from '@radix-ui/themes'; import { ChevronRightIcon } from '@radix-ui/react-icons'; -import type { ButtonProps } from '@radix-ui/themes/dist/cjs/components/button'; +import type { FlexProps } from '@radix-ui/themes/dist/cjs/components/flex'; +import { useMatches } from '@modern-js/runtime/router'; +import styles from './Breadcrumbs.module.scss'; +import { Link } from './Link'; -export type BreadcrumbButtonProps = ButtonProps & - React.RefAttributes; +export type BreadcrumbProps = FlexProps & React.RefAttributes; -export const BreadcrumbButton: React.FC = props => { - return + + + Powered by {toolsPackage}@{toolsPackageVer} + + + + + + - - {numFrameworkPlugin} framework plugins + Visit our website + + + + {parseURL(store.announcement.fallback).host} + + + + + + + + + + + + + {store.framework.context.plugins.length} + + + Framework Plugins + + + + + - - {store.framework.context.plugins.length} builder plugins + + {(store.compileTimeCost / 1000).toFixed(2)}s + + + Compiled in {bundlerPackage}@{bundlerPackageVer} - - - - }> - {store.framework.context.serverRoutes.length} Endpoints - - + + + + + + + Use + + Shift + {isMacOS ? 'Opt' : 'Alt'} + D + + to open DevTools + ); }; export default Page; - -interface IndicatorProps extends React.PropsWithChildren { - title?: string; - icon: React.ReactElement; -} - -const Indicator: React.FC = ({ title, icon, children }) => { - return ( - - - - {icon} - - {title ?? children} - - - {title && {children}} - - - ); -}; - -const Description = styled(Text)({ - fontSize: 'var(--font-size-1)', - color: 'var(--gray-7)', -}); - -const LogoHeading = styled.img({ - width: '10rem', -}); - -const LogoImage = styled.img({ - width: '2rem', - height: '2rem', - objectFit: 'contain', -}); diff --git a/packages/devtools/client/src/routes/pages/BaseRoute.tsx b/packages/devtools/client/src/routes/pages/BaseRoute.tsx deleted file mode 100644 index fac45014c31b..000000000000 --- a/packages/devtools/client/src/routes/pages/BaseRoute.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import React, { useContext, useState } from 'react'; -import type { ServerRoute as IServerRoute } from '@modern-js/types'; -import * as Collapsible from '@radix-ui/react-collapsible'; -import { Box, Card, Text } from '@radix-ui/themes'; -import { CaretSortIcon } from '@radix-ui/react-icons'; -import { parseURL } from 'ufo'; -import styled from '@emotion/styled'; -import { MatchUrlContext } from './MatchUrl'; - -export interface BaseRouteProps extends React.PropsWithChildren { - badge: React.ReactElement; - route: IServerRoute; - title: string; - open?: boolean; - onOpenChange?: (open: boolean) => void; -} - -export const BaseRoute: React.FC = ({ - badge, - route, - title, - children, - open, - onOpenChange, -}) => { - const url = useContext(MatchUrlContext); - const [_open, _setOpen] = useState(false); - const isMatching = Boolean(url); - const { pathname } = parseURL(url); - const isMatched = - pathname === route.urlPath || pathname.startsWith(`${route.urlPath}/`); - const isOpen = isMatched || (open ?? _open); - - return ( - - - - {badge} - - {title} - - - - - - - {children} - - - ); -}; - -const Container = styled(Card)({ - backgroundColor: '#181818', -}); - -const CollapsibleTrigger = styled(Collapsible.Trigger)({ - all: 'unset', - width: '100%', - display: 'flex', - gap: 'var(--space-2)', - alignItems: 'center', -}); - -const CollapsibleContent = styled(Collapsible.Content)({ - paddingTop: 'var(--space-2)', -}); - -const UrlText = styled(Text)({ - color: 'var(--gray-12)', - fontSize: 'var(--font-size-2)', - transition: 'color 200ms', - '&[data-miss-matched="true"]': { - color: 'var(--gray-10)', - }, -}); - -const CollapsedMark = styled(Box)<{ open?: boolean }>(props => ({ - backgroundColor: props.open ? 'var(--gray-4)' : 'transparent', - height: 'var(--font-size-5)', - width: 'var(--font-size-5)', - borderRadius: 'var(--radius-2)', - display: 'flex', - justifyContent: 'center', - alignItems: 'center', - transition: 'background-color 100ms', -})); diff --git a/packages/devtools/client/src/routes/pages/EntryRoute/ClientRouteStats/index.ts b/packages/devtools/client/src/routes/pages/EntryRoute/ClientRouteStats/index.ts deleted file mode 100644 index 4dbc78ebd1c4..000000000000 --- a/packages/devtools/client/src/routes/pages/EntryRoute/ClientRouteStats/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './ClientRouteStats'; diff --git a/packages/devtools/client/src/routes/pages/EntryRoute/EntryRoute.tsx b/packages/devtools/client/src/routes/pages/EntryRoute/EntryRoute.tsx deleted file mode 100644 index d1a1cafd84e5..000000000000 --- a/packages/devtools/client/src/routes/pages/EntryRoute/EntryRoute.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; -import { Badge, Flex, Box } from '@radix-ui/themes'; -import { ServerRoute } from '@modern-js/types'; -import { BaseRoute } from '../BaseRoute'; -import { EntryStats } from './EntryStats'; -import { ClientRouteStats } from './ClientRouteStats'; - -export interface EntryRouteProps { - route: ServerRoute; -} - -const EntryRoute: React.FC = ({ route }) => { - return ( - - - - - - - - - ); -}; - -export default EntryRoute; - -const badge = Entry; diff --git a/packages/devtools/client/src/routes/pages/EntryRoute/index.ts b/packages/devtools/client/src/routes/pages/EntryRoute/index.ts deleted file mode 100644 index 4fb5e28ea1f8..000000000000 --- a/packages/devtools/client/src/routes/pages/EntryRoute/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './EntryRoute'; diff --git a/packages/devtools/client/src/routes/pages/MatchUrl.tsx b/packages/devtools/client/src/routes/pages/MatchUrl.tsx deleted file mode 100644 index 8aa564d303e5..000000000000 --- a/packages/devtools/client/src/routes/pages/MatchUrl.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import { createContext } from 'react'; - -export const MatchUrlContext = createContext(''); diff --git a/packages/devtools/client/src/routes/pages/layout.config.ts b/packages/devtools/client/src/routes/pages/layout.config.ts new file mode 100644 index 000000000000..8ac5d6ebe059 --- /dev/null +++ b/packages/devtools/client/src/routes/pages/layout.config.ts @@ -0,0 +1,5 @@ +export const handle = { + breadcrumb: { + title: 'Pages', + }, +}; diff --git a/packages/devtools/client/src/routes/pages/layout.module.scss b/packages/devtools/client/src/routes/pages/layout.module.scss new file mode 100644 index 000000000000..ad00e6524fa5 --- /dev/null +++ b/packages/devtools/client/src/routes/pages/layout.module.scss @@ -0,0 +1,3 @@ +.container { + max-width: 40rem; +} \ No newline at end of file diff --git a/packages/devtools/client/src/routes/pages/layout.tsx b/packages/devtools/client/src/routes/pages/layout.tsx new file mode 100644 index 000000000000..8b7c134c0e74 --- /dev/null +++ b/packages/devtools/client/src/routes/pages/layout.tsx @@ -0,0 +1,11 @@ +import { Outlet } from '@modern-js/runtime/router'; +import { Box } from '@radix-ui/themes'; +import styles from './layout.module.scss'; + +export default function Layout() { + return ( + + + + ); +} diff --git a/packages/devtools/client/src/routes/pages/page.module.scss b/packages/devtools/client/src/routes/pages/page.module.scss new file mode 100644 index 000000000000..18f397337f57 --- /dev/null +++ b/packages/devtools/client/src/routes/pages/page.module.scss @@ -0,0 +1,9 @@ +.input { + position: fixed; + padding-top: var(--breadcrumb-height); + padding-bottom: 10px; + top: 0; + left: var(--navigator-width); + right: 0; + background-image: linear-gradient(to bottom, var(--gray-2), 95%, transparent); +} diff --git a/packages/devtools/client/src/routes/pages/page.tsx b/packages/devtools/client/src/routes/pages/page.tsx index 1468f7811f84..4fe28392083d 100644 --- a/packages/devtools/client/src/routes/pages/page.tsx +++ b/packages/devtools/client/src/routes/pages/page.tsx @@ -1,62 +1,73 @@ -import styled from '@emotion/styled'; -import { Box, Text, TextField } from '@radix-ui/themes'; +import { Box, Flex, TextField } from '@radix-ui/themes'; import React, { useState } from 'react'; import { useSnapshot } from 'valtio'; -import { MatchUrlContext } from './MatchUrl'; -import { ServerRoute } from './ServerRoute'; +import { parseURL, withTrailingSlash } from 'ufo'; +import { HiOutlineArrowsRightLeft } from 'react-icons/hi2'; +import styles from './page.module.scss'; import { useStore } from '@/stores'; +import { + MatchServerRouteValue, + MatchUrlContext, +} from '@/components/ServerRoute/Context'; +import { ServerRoute } from '@/components/ServerRoute/Route'; const Page: React.FC = () => { const $store = useStore(); const store = useSnapshot($store); const { serverRoutes } = store.framework.context; - const [testingUrl, setTestingUrl] = useState(''); + const [matchContext, setMatchContext] = useState({ + url: '', + }); + const handleUrlInput = (url: string) => { + const { pathname } = parseURL(url); + const matched = serverRoutes.find( + route => + pathname === route.urlPath || + pathname.startsWith(withTrailingSlash(route.urlPath)), + ); + setMatchContext({ url, matched }); + }; return ( - - - - - - test: - - setTestingUrl(e.target.value)} - type="search" - autoComplete="false" - autoCapitalize="false" - autoCorrect="false" - /> - + + + {serverRoutes.map(route => ( + + ))} + + + + + + + handleUrlInput(e.target.value)} + type="url" + autoComplete="false" + autoCapitalize="false" + autoCorrect="false" + /> + + - - - - {serverRoutes.map(route => ( - - ))} - - - + ); }; export default Page; - -const Container = styled(Box)({ - display: 'flex', - flexDirection: 'column', - height: '100%', -}); - -const RoutesContainer = styled(Box)({ - display: 'flex', - flex: '0', - flexDirection: 'column', - alignItems: 'stretch', - gap: 'var(--space-2)', - justifyContent: 'space-between', -}); diff --git a/packages/devtools/client/src/stores/index.tsx b/packages/devtools/client/src/stores/index.tsx index 9008010da24f..d7461ad46912 100644 --- a/packages/devtools/client/src/stores/index.tsx +++ b/packages/devtools/client/src/stores/index.tsx @@ -95,6 +95,10 @@ export const StoreContextProvider: FC<{ children: ReactElement }> = ({ name: deferred.clientDefinition.promise.then(def => def.name), packages: deferred.clientDefinition.promise.then(def => def.packages), assets: deferred.clientDefinition.promise.then(def => def.assets), + announcement: deferred.clientDefinition.promise.then( + def => def.announcement, + ), + breadcrumb: [], })); useAsync(async () => { diff --git a/packages/devtools/client/src/styles/breakpoints.scss b/packages/devtools/client/src/styles/breakpoints.scss new file mode 100644 index 000000000000..0757a56dff67 --- /dev/null +++ b/packages/devtools/client/src/styles/breakpoints.scss @@ -0,0 +1,5 @@ +@custom-media --xs (min-width: 520px); +@custom-media --sm (min-width: 768px); +@custom-media --md (min-width: 1024px); +@custom-media --lg (min-width: 1280px); +@custom-media --xl (min-width: 1640px); diff --git a/packages/devtools/client/src/styles/theme.scss b/packages/devtools/client/src/styles/theme.scss new file mode 100644 index 000000000000..27713af91bd1 --- /dev/null +++ b/packages/devtools/client/src/styles/theme.scss @@ -0,0 +1,6 @@ +@import '@radix-ui/themes/styles.css'; +@import './breakpoints.scss'; + +button { + cursor: pointer; +} \ No newline at end of file diff --git a/packages/devtools/client/src/types/index.ts b/packages/devtools/client/src/types/index.ts index c53efdfafb42..b178e3b38275 100644 --- a/packages/devtools/client/src/types/index.ts +++ b/packages/devtools/client/src/types/index.ts @@ -12,9 +12,14 @@ import type { TransformedFrameworkConfig, } from '@modern-js/devtools-kit'; import { FrameworkConfig } from '@modern-js/devtools-kit'; -import { ReactElement } from 'react'; +import { ReactElement, ReactNode } from 'react'; import { Promisable } from 'type-fest'; +export interface BreadcrumbItem { + title: ReactNode; + to: string; +} + export interface StoreContextValue { dataSource: string; framework: { @@ -45,6 +50,11 @@ export interface StoreContextValue { name: Promise; packages: Promise; assets: Promise; + breadcrumb: BreadcrumbItem[]; + announcement: Promise<{ + src: string; + fallback: string; + }>; } export interface BuiltinTabView { diff --git a/packages/devtools/kit/package.json b/packages/devtools/kit/package.json index cffb5661d9cd..9c9226ba2f97 100644 --- a/packages/devtools/kit/package.json +++ b/packages/devtools/kit/package.json @@ -17,21 +17,34 @@ ], "version": "2.36.0", "jsnext:source": "./src/index.ts", - "types": "./src/index.ts", + "types": "./dist/index.d.ts", "main": "./dist/index.js", "exports": { ".": { "jsnext:source": "./src/index.ts", + "types": "./dist/index.d.ts", "default": "./dist/index.js" }, + "./runtime": { + "jsnext:source": "./src/runtime/index.ts", + "types": "./dist/runtime/index.d.ts", + "default": "./dist/runtime/index.js" + }, "./package.json": { "default": "./package.json" } }, + "typesVersions": { + "*": { + "runtime": [ + "./dist/runtime/index.d.ts" + ] + } + }, "scripts": { "prepublishOnly": "only-allow-pnpm", "new": "modern-lib new", - "dev": "SKIP_DTS=true modern-lib build --watch", + "dev": "modern-lib build --watch", "build": "modern-lib build", "test": "jest --passWithNoTests" }, @@ -39,6 +52,7 @@ "@geist-ui/core": "^2.3.8", "@modern-js/types": "workspace:*", "@modern-js/utils": "workspace:*", + "@radix-ui/themes": "^2.0.0", "ufo": "^1.2.0", "ws": "8.13.0" }, diff --git a/packages/devtools/kit/src/client.ts b/packages/devtools/kit/src/client.ts index e53c5f761282..da5a2b2ad893 100644 --- a/packages/devtools/kit/src/client.ts +++ b/packages/devtools/kit/src/client.ts @@ -32,12 +32,21 @@ export class AssetDefinition { logo: string = logo; } +export class AnnouncementDefinition { + src: string = + 'https://raw.githubusercontent.com/web-infra-dev/modern.js/main/ANNOUNCEMENT.md'; + + fallback: string = 'https://modernjs.dev/'; +} + export class ClientDefinition { name: NameDefinition = new NameDefinition(); packages: PackageDefinition = new PackageDefinition(); assets: AssetDefinition = new AssetDefinition(); + + announcement: AnnouncementDefinition = new AnnouncementDefinition(); } export interface IframeTabView { diff --git a/packages/devtools/mount/modern.config.ts b/packages/devtools/mount/modern.config.ts index c1c04ae6f4fb..5fee5db647cd 100644 --- a/packages/devtools/mount/modern.config.ts +++ b/packages/devtools/mount/modern.config.ts @@ -13,6 +13,10 @@ export default defineConfig<'rspack'>({ disableMount: true, }, }, + preEntry: [ + require.resolve('modern-normalize/modern-normalize.css'), + require.resolve('@radix-ui/themes/styles.css'), + ], globalVars: { 'process.env.VERSION': packageMeta.version, 'process.env.DEVTOOLS_MARK': DEVTOOLS_MARK, @@ -23,7 +27,6 @@ export default defineConfig<'rspack'>({ legalComments: 'linked', disableCssExtract: true, disableFilenameHash: true, - enableCssModuleTSDeclaration: true, distPath: { js: './', }, diff --git a/packages/devtools/mount/package.json b/packages/devtools/mount/package.json index 1fee48acf847..ea5d9377c44c 100644 --- a/packages/devtools/mount/package.json +++ b/packages/devtools/mount/package.json @@ -16,8 +16,10 @@ "engines": { "node": ">=14.0.0" }, - "dependencies": {}, + "dependencies": { + }, "devDependencies": { + "modern-normalize": "^2.0.0", "@modern-js-app/eslint-config": "workspace:*", "@modern-js/app-tools": "workspace:*", "@modern-js/builder-rspack-provider": "workspace:*", @@ -25,14 +27,14 @@ "@modern-js/eslint-config": "workspace:*", "@modern-js/runtime": "workspace:*", "@modern-js/tsconfig": "workspace:*", - "@radix-ui/themes": "^1.1.2", + "@radix-ui/themes": "^2.0.0", "@stitches/react": "^1.2.8", "@types/jest": "~29.2.4", - "lodash-es": "^4.17.21", "@types/lodash-es": "^4.17.9", "@types/node": "~16.11.7", "@types/react": "~18.0.26", "@types/react-dom": "~18.0.10", + "lodash-es": "^4.17.21", "nanoid": "3.3.4", "react": "~18.2.0", "react-dom": "~18.2.0", diff --git a/packages/devtools/mount/src/components/Devtools/Action.module.scss b/packages/devtools/mount/src/components/Devtools/Action.module.scss index e0f67a1dfc9a..09987a469a70 100644 --- a/packages/devtools/mount/src/components/Devtools/Action.module.scss +++ b/packages/devtools/mount/src/components/Devtools/Action.module.scss @@ -19,16 +19,13 @@ right: 10px; width: max-content; height: max-content; - padding: 0.25rem 0.5rem; - font-size: 0.75rem; display: flex; - gap: 0.25rem; - border: 1px solid #011c64; - background: linear-gradient(to bottom, #212121, #1e1e1e, #212121); - box-shadow: 0 0 3px #011c64; - color: #b8b9bb; + border: none; + background-color: var(--gray-2); + box-shadow: var(--shadow-5); border-radius: 999px; - align-items: center; + cursor: pointer; + touch-action: none; } .fab :global(*) { @@ -40,4 +37,11 @@ width: 1.5rem; height: 1.5rem; object-fit: contain; -} \ No newline at end of file +} + +.heading { + width: 3.25rem; + height: 1rem; + color: var(--gray-a10); + margin: 0 var(--space-2); +} diff --git a/packages/devtools/mount/src/components/Devtools/Action.module.scss.d.ts b/packages/devtools/mount/src/components/Devtools/Action.module.scss.d.ts deleted file mode 100644 index 393606ce4692..000000000000 --- a/packages/devtools/mount/src/components/Devtools/Action.module.scss.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -// This file is automatically generated. -// Please do not change this file! -interface CssExports { - container: string; - fab: string; - logo: string; -} -export const cssExports: CssExports; -export default cssExports; diff --git a/packages/devtools/mount/src/components/Devtools/Action.tsx b/packages/devtools/mount/src/components/Devtools/Action.tsx index ee151e5f7f74..2e94a43e45ba 100644 --- a/packages/devtools/mount/src/components/Devtools/Action.tsx +++ b/packages/devtools/mount/src/components/Devtools/Action.tsx @@ -1,10 +1,12 @@ import { ROUTE_BASENAME, SetupClientOptions } from '@modern-js/devtools-kit'; -import React from 'react'; -import { useToggle } from 'react-use'; +import React, { useState } from 'react'; +import { useEvent, useToggle } from 'react-use'; +import { Flex, Theme } from '@radix-ui/themes'; import { parseURL, stringifyParsedURL, withQuery } from 'ufo'; import Visible from '../Visible'; import styles from './Action.module.scss'; -import FrameBox from './FrameBox'; +import { FrameBox } from './FrameBox'; +import { ReactComponent as DevToolsIcon } from './heading.svg'; import { useStickyDraggable } from '@/utils/draggable'; const parseDataSource = (url: string) => { @@ -31,25 +33,44 @@ const DevtoolsAction: React.FC = props => { const draggable = useStickyDraggable({ clamp: true }); + const [appearance, setAppearance] = useState<'light' | 'dark'>(() => { + const ret = + localStorage.getItem('__modern_js_devtools_appearance') ?? 'light'; + localStorage.setItem('__modern_js_devtools_appearance', ret); + return ret as any; + }); + useEvent('storage', (e: StorageEvent) => { + if (e.key === '__modern_js_devtools_appearance') { + setAppearance((e.newValue as any) || undefined); + } + }); + + useEvent('keydown', (e: KeyboardEvent) => { + e.shiftKey && e.altKey && e.code === 'KeyD' && toggleDevtools(); + }); + return ( - <> +
toggleDevtools(false)} style={{ pointerEvents: draggable.isDragging ? 'none' : 'auto' }} />
- - + + + +
); }; diff --git a/packages/devtools/mount/src/components/Devtools/FrameBox.module.scss b/packages/devtools/mount/src/components/Devtools/FrameBox.module.scss index 35ff1a027e44..5ea490e969a1 100644 --- a/packages/devtools/mount/src/components/Devtools/FrameBox.module.scss +++ b/packages/devtools/mount/src/components/Devtools/FrameBox.module.scss @@ -1,12 +1,25 @@ .container { - border-radius: 0.75rem; overflow: hidden; - position: relative; - width: 40rem; - height: 30rem; - background-color: white; - border: 1px solid #082577; - box-shadow: 0 0 5px #082577; + box-shadow: var(--shadow-5); + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + @media (min-width: 520px) { + position: relative; + height: 35rem; + width: 50rem; + border-radius: 0.75rem; + } +} + +.close-button { + position: absolute; + right: 10px; + top: 10px; + color: var(--gray-8); + cursor: pointer; } .frame { @@ -16,7 +29,7 @@ } .backdrop { - background-color: #090909; + background-color: var(--gray-2); position: absolute; top: 0; bottom: 0; diff --git a/packages/devtools/mount/src/components/Devtools/FrameBox.module.scss.d.ts b/packages/devtools/mount/src/components/Devtools/FrameBox.module.scss.d.ts deleted file mode 100644 index 4da089f82aeb..000000000000 --- a/packages/devtools/mount/src/components/Devtools/FrameBox.module.scss.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -// This file is automatically generated. -// Please do not change this file! -interface CssExports { - backdrop: string; - container: string; - frame: string; - loading: string; - rotate: string; -} -export const cssExports: CssExports; -export default cssExports; diff --git a/packages/devtools/mount/src/components/Devtools/FrameBox.tsx b/packages/devtools/mount/src/components/Devtools/FrameBox.tsx index bc3bf990a3f3..fd3e3f7f8f83 100644 --- a/packages/devtools/mount/src/components/Devtools/FrameBox.tsx +++ b/packages/devtools/mount/src/components/Devtools/FrameBox.tsx @@ -1,34 +1,38 @@ import React, { useState } from 'react'; +import { Box } from '@radix-ui/themes'; +import type { BoxProps } from '@radix-ui/themes/dist/cjs/components/box'; import { LoaderIcon } from '../LoadingIcon'; import styles from './FrameBox.module.scss'; +import { ReactComponent as XMarkIcon } from './xmark.svg'; -export interface FrameBoxProps extends React.HTMLAttributes { +export interface FrameBoxProps + extends BoxProps, + React.RefAttributes { src?: string; + onClose?: () => void; } -const FrameBox: React.FC = ({ src, ...props }) => { +export const FrameBox: React.FC = ({ + src, + onClose, + ...props +}) => { const [showFrame, setShowFrame] = useState(false); - const handleFrameMount = (el: HTMLIFrameElement | null) => { - const handleLoad = () => setShowFrame(true); - el?.addEventListener('load', handleLoad, { once: true }); - }; - return ( -
+ + + onClose?.()} />
- -
+ ); }; - -export default FrameBox; diff --git a/packages/devtools/mount/src/components/Devtools/heading.svg b/packages/devtools/mount/src/components/Devtools/heading.svg new file mode 100644 index 000000000000..f6a6bea50701 --- /dev/null +++ b/packages/devtools/mount/src/components/Devtools/heading.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/devtools/mount/src/components/Devtools/xmark.svg b/packages/devtools/mount/src/components/Devtools/xmark.svg new file mode 100644 index 000000000000..b4726edd484a --- /dev/null +++ b/packages/devtools/mount/src/components/Devtools/xmark.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/devtools/mount/src/utils/draggable.ts b/packages/devtools/mount/src/utils/draggable.ts index ad0e4d8d516d..5691c3f5bc1c 100644 --- a/packages/devtools/mount/src/utils/draggable.ts +++ b/packages/devtools/mount/src/utils/draggable.ts @@ -77,7 +77,8 @@ export const useStickyDraggable = (options?: StickyDraggableOptions) => { }); }; - const handleMouseMove = (e: MouseEvent) => { + const handleMouseMove = (raw: MouseEvent | TouchEvent) => { + const e = 'touches' in raw ? raw.touches[0] : raw; if (!state?.moveable) { return; } @@ -117,15 +118,24 @@ export const useStickyDraggable = (options?: StickyDraggableOptions) => { useEvent('blur', handleRelease); useEvent('mouseup', handleRelease); + useEvent('touchend', handleRelease); useEvent('mousemove', handleMouseMove); + useEvent('touchmove', handleMouseMove); - const onMouseDown = (e: React.MouseEvent) => { + const onMouseDown = ( + raw: React.MouseEvent | React.TouchEvent, + ) => { + const e = 'touches' in raw ? raw.touches[0] : raw; + const el = raw.currentTarget; + const rect = el.getBoundingClientRect(); + const offsetX = e.clientX - rect.left; + const offsetY = e.clientY - rect.top; setState({ - el: e.currentTarget, + el, clickable: true, moveable: true, - offsetX: e.nativeEvent.offsetX, - offsetY: e.nativeEvent.offsetY, + offsetX, + offsetY, startX: e.clientX, startY: e.clientY, }); @@ -139,6 +149,7 @@ export const useStickyDraggable = (options?: StickyDraggableOptions) => { isDragging: Boolean(state), props: { onMouseDown, + onTouchStart: onMouseDown, onClickCapture, }, }; diff --git a/packages/devtools/plugin/src/rpc/index.ts b/packages/devtools/plugin/src/rpc/index.ts index ed4610042f21..8f61a0cdb221 100644 --- a/packages/devtools/plugin/src/rpc/index.ts +++ b/packages/devtools/plugin/src/rpc/index.ts @@ -1,15 +1,12 @@ import _ from '@modern-js/utils/lodash'; import { - NameDefinition, + ClientDefinition, type BuilderConfig, type BundlerConfig, - type ClientDefinition, type ClientFunctions, type FileSystemRoutes, type NormalizedBuilderConfig, type ServerFunctions, - PackageDefinition, - AssetDefinition, } from '@modern-js/devtools-kit'; import type { JsonValue, PartialDeep } from 'type-fest'; import { createBirpc, BirpcOptions } from 'birpc'; @@ -136,11 +133,7 @@ export const setupClientConnection = async ( return deferred.compileTimeCost.promise; }, async getClientDefinition() { - const ret: ClientDefinition = { - name: new NameDefinition(), - packages: new PackageDefinition(), - assets: new AssetDefinition(), - }; + const ret = new ClientDefinition(); Object.assign(ret.name, def.name); Object.assign(ret.packages, def.packages); Object.assign(ret.assets, def.assets); diff --git a/packages/devtools/plugin/src/runtime.ts b/packages/devtools/plugin/src/runtime.ts index dc90b79fa07c..985e27e5c9ce 100644 --- a/packages/devtools/plugin/src/runtime.ts +++ b/packages/devtools/plugin/src/runtime.ts @@ -2,6 +2,11 @@ import type { SetupClientOptions } from '@modern-js/devtools-kit'; import { mountDevTools } from '@modern-js/devtools-mount'; import { parseQuery } from 'ufo'; -const opts = parseQuery(__resourceQuery); - -mountDevTools(opts as SetupClientOptions); +try { + const opts = parseQuery(__resourceQuery); + mountDevTools(opts as SetupClientOptions); +} catch (err: unknown) { + const e = new Error('Failed to execute mount point of DevTools.'); + e.cause = err; + console.error(e); +} diff --git a/packages/devtools/plugin/src/utils/module.ts b/packages/devtools/plugin/src/utils/module.ts index dfc9eb84afff..13e5d2aa07a2 100644 --- a/packages/devtools/plugin/src/utils/module.ts +++ b/packages/devtools/plugin/src/utils/module.ts @@ -10,7 +10,6 @@ export const getRequire = (): NodeRequire => { const issuer = new Error().stack ?.split('\n')[2] .match(/\s*at .+? \((.*)\)$/)?.[1]; - console.log('issuer: ', issuer); if (issuer && path.isAbsolute(issuer)) { // eslint-disable-next-line node/no-unsupported-features/node-builtins return module.createRequire(issuer); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7c67066a51ba..c4cfa5577942 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1397,13 +1397,11 @@ importers: version: 5.0.4 packages/devtools/client: + dependencies: + thumbhash: + specifier: ^0.1.1 + version: 0.1.1 devDependencies: - '@emotion/react': - specifier: ^11.11.1 - version: 11.11.1(@types/react@18.0.21)(react@18.2.0) - '@emotion/styled': - specifier: ^11.11.0 - version: 11.11.0(@emotion/react@11.11.1)(@types/react@18.0.21)(react@18.2.0) '@modern-js-app/eslint-config': specifier: workspace:* version: link:../../review/eslint-config-app @@ -1441,14 +1439,14 @@ importers: specifier: ^1.3.0 version: 1.3.0(react@18.2.0) '@radix-ui/react-popover': - specifier: ^1.0.6 - version: 1.0.6(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + specifier: ^1.0.7 + version: 1.0.7(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-tabs': specifier: ^1.0.4 version: 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/themes': - specifier: ^1.1.2 - version: 1.1.2(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + specifier: ^2.0.0 + version: 2.0.0(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@types/jest': specifier: ~29.2.4 version: 29.2.6 @@ -1467,12 +1465,18 @@ importers: birpc: specifier: 0.2.13 version: 0.2.13 + clsx: + specifier: ^1.2.1 + version: 1.2.1 lodash: specifier: ^4.17.21 version: 4.17.21 p-defer: specifier: 3.0.0 version: 3.0.0 + postcss-custom-media: + specifier: ^10.0.1 + version: 10.0.2(postcss@8.4.31) react: specifier: ~18.2.0 version: 18.2.0 @@ -1482,6 +1486,9 @@ importers: react-dom: specifier: ~18.2.0 version: 18.2.0(react@18.2.0) + react-icons: + specifier: ^4.11.0 + version: 4.11.0(react@18.2.0) react-json-tree: specifier: ^0.18.0 version: 0.18.0(@types/react@18.0.21)(react@18.2.0) @@ -1521,6 +1528,9 @@ importers: '@modern-js/utils': specifier: workspace:* version: link:../../toolkit/utils + '@radix-ui/themes': + specifier: ^2.0.0 + version: 2.0.0(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) ufo: specifier: ^1.2.0 version: 1.3.0 @@ -1592,8 +1602,8 @@ importers: specifier: workspace:* version: link:../../review/tsconfig '@radix-ui/themes': - specifier: ^1.1.2 - version: 1.1.2(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + specifier: ^2.0.0 + version: 2.0.0(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@stitches/react': specifier: ^1.2.8 version: 1.2.8(react@18.2.0) @@ -1615,6 +1625,9 @@ importers: lodash-es: specifier: ^4.17.21 version: 4.17.21 + modern-normalize: + specifier: ^2.0.0 + version: 2.0.0 nanoid: specifier: 3.3.4 version: 3.3.4 @@ -10620,6 +10633,17 @@ packages: '@csstools/css-tokenizer': 2.1.1 dev: true + /@csstools/cascade-layer-name-parser@1.0.5(@csstools/css-parser-algorithms@2.3.2)(@csstools/css-tokenizer@2.2.1): + resolution: {integrity: sha512-v/5ODKNBMfBl0us/WQjlfsvSlYxfZLhNMVIsuCPib2ulTwGKYbKJbwqw671+qH9Y4wvWVnu7LBChvml/wBKjFg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-parser-algorithms': ^2.3.2 + '@csstools/css-tokenizer': ^2.2.1 + dependencies: + '@csstools/css-parser-algorithms': 2.3.2(@csstools/css-tokenizer@2.2.1) + '@csstools/css-tokenizer': 2.2.1 + dev: true + /@csstools/css-parser-algorithms@2.1.1(@csstools/css-tokenizer@2.1.1): resolution: {integrity: sha512-viRnRh02AgO4mwIQb2xQNJju0i+Fh9roNgmbR5xEuG7J3TGgxjnE95HnBLgsFJOJOksvcfxOUCgODcft6Y07cA==} engines: {node: ^14 || ^16 || >=18} @@ -10629,11 +10653,36 @@ packages: '@csstools/css-tokenizer': 2.1.1 dev: true + /@csstools/css-parser-algorithms@2.3.2(@csstools/css-tokenizer@2.2.1): + resolution: {integrity: sha512-sLYGdAdEY2x7TSw9FtmdaTrh2wFtRJO5VMbBrA8tEqEod7GEggFmxTSK9XqExib3yMuYNcvcTdCZIP6ukdjAIA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-tokenizer': ^2.2.1 + dependencies: + '@csstools/css-tokenizer': 2.2.1 + dev: true + /@csstools/css-tokenizer@2.1.1: resolution: {integrity: sha512-GbrTj2Z8MCTUv+52GE0RbFGM527xuXZ0Xa5g0Z+YN573uveS4G0qi6WNOMyz3yrFM/jaILTTwJ0+umx81EzqfA==} engines: {node: ^14 || ^16 || >=18} dev: true + /@csstools/css-tokenizer@2.2.1: + resolution: {integrity: sha512-Zmsf2f/CaEPWEVgw29odOj+WEVoiJy9s9NOv5GgNY9mZ1CZ7394By6wONrONrTsnNDv6F9hR02nvFihrGVGHBg==} + engines: {node: ^14 || ^16 || >=18} + dev: true + + /@csstools/media-query-list-parser@2.1.5(@csstools/css-parser-algorithms@2.3.2)(@csstools/css-tokenizer@2.2.1): + resolution: {integrity: sha512-IxVBdYzR8pYe89JiyXQuYk4aVVoCPhMJkz6ElRwlVysjwURTsTk/bmY/z4FfeRE+CRBMlykPwXEVUg8lThv7AQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-parser-algorithms': ^2.3.2 + '@csstools/css-tokenizer': ^2.2.1 + dependencies: + '@csstools/css-parser-algorithms': 2.3.2(@csstools/css-tokenizer@2.2.1) + '@csstools/css-tokenizer': 2.2.1 + dev: true + /@csstools/selector-specificity@3.0.0(postcss-selector-parser@6.0.13): resolution: {integrity: sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==} engines: {node: ^14 || ^16 || >=18} @@ -10651,40 +10700,10 @@ packages: resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} - /@emotion/babel-plugin@11.11.0: - resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} - dependencies: - '@babel/helper-module-imports': 7.22.15 - '@babel/runtime': 7.23.2 - '@emotion/hash': 0.9.1 - '@emotion/memoize': 0.8.1 - '@emotion/serialize': 1.1.2 - babel-plugin-macros: 3.1.0 - convert-source-map: 1.8.0 - escape-string-regexp: 4.0.0 - find-root: 1.1.0 - source-map: 0.5.7 - stylis: 4.2.0 - dev: true - - /@emotion/cache@11.11.0: - resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==} - dependencies: - '@emotion/memoize': 0.8.1 - '@emotion/sheet': 1.2.2 - '@emotion/utils': 1.2.1 - '@emotion/weak-memoize': 0.3.1 - stylis: 4.2.0 - dev: true - /@emotion/hash@0.8.0: resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} dev: false - /@emotion/hash@0.9.1: - resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} - dev: true - /@emotion/is-prop-valid@1.2.1: resolution: {integrity: sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==} dependencies: @@ -10693,88 +10712,12 @@ packages: /@emotion/memoize@0.8.1: resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} - /@emotion/react@11.11.1(@types/react@18.0.21)(react@18.2.0): - resolution: {integrity: sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==} - peerDependencies: - '@types/react': '*' - react: '>=16.8.0' - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.23.2 - '@emotion/babel-plugin': 11.11.0 - '@emotion/cache': 11.11.0 - '@emotion/serialize': 1.1.2 - '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) - '@emotion/utils': 1.2.1 - '@emotion/weak-memoize': 0.3.1 - '@types/react': 18.0.21 - hoist-non-react-statics: 3.3.2 - react: 18.2.0 - dev: true - - /@emotion/serialize@1.1.2: - resolution: {integrity: sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==} - dependencies: - '@emotion/hash': 0.9.1 - '@emotion/memoize': 0.8.1 - '@emotion/unitless': 0.8.1 - '@emotion/utils': 1.2.1 - csstype: 3.1.2 - dev: true - - /@emotion/sheet@1.2.2: - resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} - dev: true - - /@emotion/styled@11.11.0(@emotion/react@11.11.1)(@types/react@18.0.21)(react@18.2.0): - resolution: {integrity: sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==} - peerDependencies: - '@emotion/react': ^11.0.0-rc.0 - '@types/react': '*' - react: '>=16.8.0' - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.23.2 - '@emotion/babel-plugin': 11.11.0 - '@emotion/is-prop-valid': 1.2.1 - '@emotion/react': 11.11.1(@types/react@18.0.21)(react@18.2.0) - '@emotion/serialize': 1.1.2 - '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) - '@emotion/utils': 1.2.1 - '@types/react': 18.0.21 - react: 18.2.0 - dev: true - /@emotion/stylis@0.8.5: resolution: {integrity: sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==} /@emotion/unitless@0.7.5: resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} - /@emotion/unitless@0.8.1: - resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} - dev: true - - /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0): - resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} - peerDependencies: - react: '>=16.8.0' - dependencies: - react: 18.2.0 - dev: true - - /@emotion/utils@1.2.1: - resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} - dev: true - - /@emotion/weak-memoize@0.3.1: - resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} - dev: true - /@esbuild-kit/cjs-loader@2.4.2: resolution: {integrity: sha512-BDXFbYOJzT/NBEtp71cvsrGPwGAMGRB/349rwKuoxNSiKjPraNNnlK6MIIabViCjqZugu6j+xeMDlEkWdHHJSg==} dependencies: @@ -11218,14 +11161,12 @@ packages: resolution: {integrity: sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ==} dependencies: '@floating-ui/utils': 0.1.2 - dev: true /@floating-ui/dom@1.5.2: resolution: {integrity: sha512-6ArmenS6qJEWmwzczWyhvrXRdI/rI78poBcW0h/456+onlabit+2G+QxHx5xTOX60NBJQXjsCLFbW2CmsXpUog==} dependencies: '@floating-ui/core': 1.4.1 '@floating-ui/utils': 0.1.2 - dev: true /@floating-ui/react-dom@2.0.2(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ==} @@ -11236,11 +11177,9 @@ packages: '@floating-ui/dom': 1.5.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@floating-ui/utils@0.1.2: resolution: {integrity: sha512-ou3elfqG/hZsbmF4bxeJhPHIf3G2pm0ujc39hYEZrfVqt7Vk/Zji6CXc3W0pmYM8BW1g40U+akTl9DKZhFhInQ==} - dev: true /@formatjs/ecma402-abstract@1.4.0: resolution: {integrity: sha512-Mv027hcLFjE45K8UJ8PjRpdDGfR0aManEFj1KzoN8zXNveHGEygpZGfFf/FTTMl+QEVSrPAUlyxaCApvmv47AQ==} @@ -12753,21 +12692,18 @@ packages: - supports-color dev: true - /@radix-ui/colors@2.1.0: - resolution: {integrity: sha512-gcBnxjS2u2c6thQz/9K1+Pt2ZYcm5WKU4SLi0emYkRmYbVUw+37rlc5wgLtYOsSsRP9nxVtbJJYj6WVO7UUmZg==} - dev: true + /@radix-ui/colors@3.0.0: + resolution: {integrity: sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg==} /@radix-ui/number@1.0.1: resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} dependencies: '@babel/runtime': 7.23.2 - dev: true /@radix-ui/primitive@1.0.1: resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} dependencies: '@babel/runtime': 7.23.2 - dev: true /@radix-ui/react-accessible-icon@1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-duVGKeWPSUILr/MdlPxV+GeULTc2rS1aihGdQ3N2qCUPMgxYLxvAsHJM3mCVLF8d5eK+ympmB22mb1F3a5biNw==} @@ -12788,10 +12724,9 @@ packages: '@types/react-dom': 18.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true - /@radix-ui/react-alert-dialog@1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-jbfBCRlKYlhbitueOAv7z74PXYeIQmWpKwm3jllsdkw7fGWNkxqP3v0nY9WmOzcPqpQuoorNtvViBgL46n5gVg==} + /@radix-ui/react-alert-dialog@1.0.5(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-OrVIOcZL0tl6xibeuGt5/+UxoT2N27KCFOPjFyfXMnchxSHZ/OW7cCX2nGlIYJrbHK/fczPcFzAwvNBB6XBNMA==} peerDependencies: '@types/react': ^18 '@types/react-dom': ^18 @@ -12807,14 +12742,13 @@ packages: '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.21)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.0.21)(react@18.2.0) - '@radix-ui/react-dialog': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-slot': 1.0.2(@types/react@18.0.21)(react@18.2.0) '@types/react': 18.0.21 '@types/react-dom': 18.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} @@ -12835,7 +12769,6 @@ packages: '@types/react-dom': 18.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@radix-ui/react-aspect-ratio@1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-fXR5kbMan9oQqMuacfzlGG/SQMcmMlZ4wrvpckv8SgUulD0MMpspxJrxg/Gp/ISV3JfV1AeSWTYK9GvxA4ySwA==} @@ -12856,10 +12789,9 @@ packages: '@types/react-dom': 18.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true - /@radix-ui/react-avatar@1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-9ToF7YNex3Ste45LrAeTlKtONI9yVRt/zOS158iilIkW5K/Apeyb/TUQlcEFTEFvWr8Kzdi2ZYrm1/suiXPajQ==} + /@radix-ui/react-avatar@1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-kVK2K7ZD3wwj3qhle0ElXhOjbezIgyl2hVvgwfIdexL3rN6zJmy5AqqIf+D31lxVppdzV8CjAfZ6PklkmInZLw==} peerDependencies: '@types/react': ^18 '@types/react-dom': ^18 @@ -12880,7 +12812,6 @@ packages: '@types/react-dom': 18.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@radix-ui/react-checkbox@1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-CBuGQa52aAYnADZVt/KBQzXrwx6TqnlwtcIPGtVt5JkkzQwMOLJjPukimhfKEr4GQNd43C+djUh5Ikopj8pSLg==} @@ -12908,7 +12839,6 @@ packages: '@types/react-dom': 18.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==} @@ -12960,7 +12890,6 @@ packages: '@types/react-dom': 18.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@radix-ui/react-compose-refs@1.0.1(@types/react@18.0.21)(react@18.2.0): resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} @@ -12974,10 +12903,9 @@ packages: '@babel/runtime': 7.23.2 '@types/react': 18.0.21 react: 18.2.0 - dev: true - /@radix-ui/react-context-menu@2.1.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-HVHLUtZOBiR2Fh5l07qQ9y0IgX4dGZF0S9Gwdk4CVA+DL9afSphvFNa4nRiw6RNgb6quwLV4dLPF/gFDvNaOcQ==} + /@radix-ui/react-context-menu@2.1.5(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-R5XaDj06Xul1KGb+WP8qiOh7tKJNz2durpLBXAGZjSVtctcRFCuEvy2gtMwRJGePwQQE5nV77gs4FwRi8T+r2g==} peerDependencies: '@types/react': ^18 '@types/react-dom': ^18 @@ -12992,7 +12920,7 @@ packages: '@babel/runtime': 7.23.2 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-context': 1.0.1(@types/react@18.0.21)(react@18.2.0) - '@radix-ui/react-menu': 2.0.5(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-menu': 2.0.6(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.21)(react@18.2.0) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.21)(react@18.2.0) @@ -13000,7 +12928,6 @@ packages: '@types/react-dom': 18.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@radix-ui/react-context@1.0.1(@types/react@18.0.21)(react@18.2.0): resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} @@ -13014,10 +12941,9 @@ packages: '@babel/runtime': 7.23.2 '@types/react': 18.0.21 react: 18.2.0 - dev: true - /@radix-ui/react-dialog@1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-hJtRy/jPULGQZceSAP2Re6/4NpKo8im6V8P2hUqZsdFiSL8l35kYsw3qbRI6Ay5mQd2+wlLqje770eq+RJ3yZg==} + /@radix-ui/react-dialog@1.0.5(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==} peerDependencies: '@types/react': ^18 '@types/react-dom': ^18 @@ -13033,11 +12959,11 @@ packages: '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.21)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.0.21)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.0.21)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-id': 1.0.1(@types/react@18.0.21)(react@18.2.0) - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-slot': 1.0.2(@types/react@18.0.21)(react@18.2.0) @@ -13048,7 +12974,6 @@ packages: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-remove-scroll: 2.5.5(@types/react@18.0.21)(react@18.2.0) - dev: true /@radix-ui/react-direction@1.0.1(@types/react@18.0.21)(react@18.2.0): resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} @@ -13062,10 +12987,9 @@ packages: '@babel/runtime': 7.23.2 '@types/react': 18.0.21 react: 18.2.0 - dev: true - /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} + /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} peerDependencies: '@types/react': ^18 '@types/react-dom': ^18 @@ -13087,10 +13011,9 @@ packages: '@types/react-dom': 18.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true - /@radix-ui/react-dropdown-menu@2.0.5(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-xdOrZzOTocqqkCkYo8yRPCib5OkTkqN7lqNCdxwPOdE466DOaNl4N8PkUIlsXthQvW5Wwkd+aEmWpfWlBoDPEw==} + /@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==} peerDependencies: '@types/react': ^18 '@types/react-dom': ^18 @@ -13107,14 +13030,13 @@ packages: '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.21)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.0.21)(react@18.2.0) '@radix-ui/react-id': 1.0.1(@types/react@18.0.21)(react@18.2.0) - '@radix-ui/react-menu': 2.0.5(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-menu': 2.0.6(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.21)(react@18.2.0) '@types/react': 18.0.21 '@types/react-dom': 18.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@radix-ui/react-focus-guards@1.0.1(@types/react@18.0.21)(react@18.2.0): resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} @@ -13128,10 +13050,9 @@ packages: '@babel/runtime': 7.23.2 '@types/react': 18.0.21 react: 18.2.0 - dev: true - /@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==} + /@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==} peerDependencies: '@types/react': ^18 '@types/react-dom': ^18 @@ -13151,7 +13072,6 @@ packages: '@types/react-dom': 18.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@radix-ui/react-form@0.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-kgE+Z/haV6fxE5WqIXj05KkaXa3OkZASoTDy25yX2EIp/x0c54rOH/vFr5nOZTg7n7T1z8bSyXmiVIFP9bbhPQ==} @@ -13177,10 +13097,9 @@ packages: '@types/react-dom': 18.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true - /@radix-ui/react-hover-card@1.0.6(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-2K3ToJuMk9wjwBOa+jdg2oPma+AmLdcEyTNsG/iC4BDVG3E0/mGCjbY8PEDSLxJcUi+nJi2QII+ec/4kWd88DA==} + /@radix-ui/react-hover-card@1.0.7(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-OcUN2FU0YpmajD/qkph3XzMcK/NmSk9hGWnjV68p6QiZMgILugusgQwnLSDs3oFSJYGKf3Y49zgFedhGh04k9A==} peerDependencies: '@types/react': ^18 '@types/react-dom': ^18 @@ -13196,9 +13115,9 @@ packages: '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.21)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.0.21)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.21)(react@18.2.0) @@ -13206,7 +13125,6 @@ packages: '@types/react-dom': 18.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@radix-ui/react-icons@1.3.0(react@18.2.0): resolution: {integrity: sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==} @@ -13229,7 +13147,6 @@ packages: '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.21)(react@18.2.0) '@types/react': 18.0.21 react: 18.2.0 - dev: true /@radix-ui/react-label@2.0.2(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==} @@ -13250,10 +13167,9 @@ packages: '@types/react-dom': 18.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true - /@radix-ui/react-menu@2.0.5(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Gw4f9pwdH+w5w+49k0gLjN0PfRDHvxmAgG16AbyJZ7zhwZ6PBHKtWohvnSwfusfnK3L68dpBREHpVkj8wEM7ZA==} + /@radix-ui/react-menu@2.0.6(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA==} peerDependencies: '@types/react': ^18 '@types/react-dom': ^18 @@ -13271,12 +13187,12 @@ packages: '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.21)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.0.21)(react@18.2.0) '@radix-ui/react-direction': 1.0.1(@types/react@18.0.21)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.0.21)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-id': 1.0.1(@types/react@18.0.21)(react@18.2.0) - '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) @@ -13288,10 +13204,9 @@ packages: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-remove-scroll: 2.5.5(@types/react@18.0.21)(react@18.2.0) - dev: true - /@radix-ui/react-popover@1.0.6(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-cZ4defGpkZ0qTRtlIBzJLSzL6ht7ofhhW4i1+pkemjV1IKXm0wgCRnee154qlV6r9Ttunmh2TNZhMfV2bavUyA==} + /@radix-ui/react-popover@1.0.7(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-shtvVnlsxT6faMnK/a7n0wptwBD23xc1Z5mdrtKLwVEfsEMXodS0r5s0/g5P0hX//EKYZS2sxUjqfzlg52ZSnQ==} peerDependencies: '@types/react': ^18 '@types/react-dom': ^18 @@ -13307,12 +13222,12 @@ packages: '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.21)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.0.21)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.0.21)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-id': 1.0.1(@types/react@18.0.21)(react@18.2.0) - '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-slot': 1.0.2(@types/react@18.0.21)(react@18.2.0) @@ -13323,10 +13238,9 @@ packages: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-remove-scroll: 2.5.5(@types/react@18.0.21)(react@18.2.0) - dev: true - /@radix-ui/react-popper@1.1.2(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} + /@radix-ui/react-popper@1.1.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==} peerDependencies: '@types/react': ^18 '@types/react-dom': ^18 @@ -13353,10 +13267,9 @@ packages: '@types/react-dom': 18.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true - /@radix-ui/react-portal@1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==} + /@radix-ui/react-portal@1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} peerDependencies: '@types/react': ^18 '@types/react-dom': ^18 @@ -13374,7 +13287,6 @@ packages: '@types/react-dom': 18.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@radix-ui/react-presence@1.0.1(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} @@ -13396,7 +13308,6 @@ packages: '@types/react-dom': 18.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} @@ -13417,7 +13328,6 @@ packages: '@types/react-dom': 18.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@radix-ui/react-radio-group@1.1.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-x+yELayyefNeKeTx4fjK6j99Fs6c4qKm3aY38G3swQVTN6xMpsrbigC0uHs2L//g8q4qR7qOcww8430jJmi2ag==} @@ -13447,7 +13357,6 @@ packages: '@types/react-dom': 18.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} @@ -13476,10 +13385,9 @@ packages: '@types/react-dom': 18.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true - /@radix-ui/react-scroll-area@1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-OIClwBkwPG+FKvC4OMTRaa/3cfD069nkKFFL/TQzRzaO42Ce5ivKU9VMKgT7UU6UIkjcQqKBrDOIzWtPGw6e6w==} + /@radix-ui/react-scroll-area@1.0.5(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-b6PAgH4GQf9QEn8zbT2XUHpW5z8BzqEc7Kl11TwDrvuTrxlkcjTD5qa/bxgKr+nmuXKu4L/W5UZ4mlP/VG/5Gw==} peerDependencies: '@types/react': ^18 '@types/react-dom': ^18 @@ -13505,10 +13413,9 @@ packages: '@types/react-dom': 18.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true - /@radix-ui/react-select@1.2.2(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw==} + /@radix-ui/react-select@2.0.0(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-RH5b7af4oHtkcHS7pG6Sgv5rk5Wxa7XI8W5gvB1N/yiuDGZxko1ynvOiVhFM7Cis2A8zxF9bTOUVbRDzPepe6w==} peerDependencies: '@types/react': ^18 '@types/react-dom': ^18 @@ -13527,12 +13434,12 @@ packages: '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.21)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.0.21)(react@18.2.0) '@radix-ui/react-direction': 1.0.1(@types/react@18.0.21)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.0.21)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-id': 1.0.1(@types/react@18.0.21)(react@18.2.0) - '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-slot': 1.0.2(@types/react@18.0.21)(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.21)(react@18.2.0) @@ -13546,7 +13453,6 @@ packages: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-remove-scroll: 2.5.5(@types/react@18.0.21)(react@18.2.0) - dev: true /@radix-ui/react-separator@1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==} @@ -13567,7 +13473,6 @@ packages: '@types/react-dom': 18.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@radix-ui/react-slider@1.1.2(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-NKs15MJylfzVsCagVSWKhGGLNR1W9qWs+HtgbmjjVUB3B9+lb3PYoXxVju3kOrpf0VKyVCtZp+iTwVoqpa1Chw==} @@ -13598,7 +13503,6 @@ packages: '@types/react-dom': 18.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@radix-ui/react-slot@1.0.2(@types/react@18.0.21)(react@18.2.0): resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} @@ -13613,7 +13517,6 @@ packages: '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.21)(react@18.2.0) '@types/react': 18.0.21 react: 18.2.0 - dev: true /@radix-ui/react-switch@1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-mxm87F88HyHztsI7N+ZUmEoARGkC22YVW5CaC+Byc+HRpuvCrOBPTAnXgf+tZ/7i0Sg/eOePGdMhUKhPaQEqow==} @@ -13640,7 +13543,6 @@ packages: '@types/react-dom': 18.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@radix-ui/react-tabs@1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==} @@ -13668,10 +13570,9 @@ packages: '@types/react-dom': 18.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true - /@radix-ui/react-tooltip@1.0.6(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-DmNFOiwEc2UDigsYj6clJENma58OelxD24O4IODoZ+3sQc3Zb+L8w1EP+y9laTuKCLAysPw4fD6/v0j4KNV8rg==} + /@radix-ui/react-tooltip@1.0.7(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw==} peerDependencies: '@types/react': ^18 '@types/react-dom': ^18 @@ -13687,10 +13588,10 @@ packages: '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.21)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.0.21)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-id': 1.0.1(@types/react@18.0.21)(react@18.2.0) - '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-slot': 1.0.2(@types/react@18.0.21)(react@18.2.0) @@ -13700,7 +13601,6 @@ packages: '@types/react-dom': 18.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.0.21)(react@18.2.0): resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} @@ -13714,7 +13614,6 @@ packages: '@babel/runtime': 7.23.2 '@types/react': 18.0.21 react: 18.2.0 - dev: true /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.0.21)(react@18.2.0): resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} @@ -13729,7 +13628,6 @@ packages: '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.21)(react@18.2.0) '@types/react': 18.0.21 react: 18.2.0 - dev: true /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.0.21)(react@18.2.0): resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} @@ -13744,7 +13642,6 @@ packages: '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.21)(react@18.2.0) '@types/react': 18.0.21 react: 18.2.0 - dev: true /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.0.21)(react@18.2.0): resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} @@ -13758,7 +13655,6 @@ packages: '@babel/runtime': 7.23.2 '@types/react': 18.0.21 react: 18.2.0 - dev: true /@radix-ui/react-use-previous@1.0.1(@types/react@18.0.21)(react@18.2.0): resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} @@ -13772,7 +13668,6 @@ packages: '@babel/runtime': 7.23.2 '@types/react': 18.0.21 react: 18.2.0 - dev: true /@radix-ui/react-use-rect@1.0.1(@types/react@18.0.21)(react@18.2.0): resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} @@ -13787,7 +13682,6 @@ packages: '@radix-ui/rect': 1.0.1 '@types/react': 18.0.21 react: 18.2.0 - dev: true /@radix-ui/react-use-size@1.0.1(@types/react@18.0.21)(react@18.2.0): resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} @@ -13802,7 +13696,6 @@ packages: '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.21)(react@18.2.0) '@types/react': 18.0.21 react: 18.2.0 - dev: true /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} @@ -13823,16 +13716,14 @@ packages: '@types/react-dom': 18.0.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@radix-ui/rect@1.0.1: resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} dependencies: '@babel/runtime': 7.23.2 - dev: true - /@radix-ui/themes@1.1.2(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-VnNeanSxHQurSgwQe5Z3zNZP5SrwhRY+RW97FPZe7TOJGpa+rpDHLDR9vourSsEGxsgrtTXHJaoII1pyIXDi8A==} + /@radix-ui/themes@2.0.0(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-XIJkXLzIOerrmk24wpyYnPnHC+z4KdH4uFGKBcMqKSSAly9GuBDWpscdxaEja1AvOJJChpmONsD768M/GOVpfg==} peerDependencies: '@types/react': ^18 '@types/react-dom': ^18 @@ -13844,37 +13735,37 @@ packages: '@types/react-dom': optional: true dependencies: - '@radix-ui/colors': 2.1.0 + '@radix-ui/colors': 3.0.0 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-accessible-icon': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-alert-dialog': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-alert-dialog': 1.0.5(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-aspect-ratio': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-avatar': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-avatar': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-checkbox': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-context-menu': 2.1.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-dialog': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-context-menu': 2.1.5(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-direction': 1.0.1(@types/react@18.0.21)(react@18.2.0) - '@radix-ui/react-dropdown-menu': 2.0.5(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dropdown-menu': 2.0.6(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-form': 0.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-hover-card': 1.0.6(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-popover': 1.0.6(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-hover-card': 1.0.7(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-popover': 1.0.7(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-radio-group': 1.1.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-scroll-area': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-select': 1.2.2(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-scroll-area': 1.0.5(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-select': 2.0.0(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-separator': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-slider': 1.1.2(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-slot': 1.0.2(@types/react@18.0.21)(react@18.2.0) '@radix-ui/react-switch': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-tabs': 1.0.4(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-tooltip': 1.0.6(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-tooltip': 1.0.7(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.21)(react@18.2.0) '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.0.6)(@types/react@18.0.21)(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.0.21 '@types/react-dom': 18.0.6 classnames: 2.3.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@rc-component/context@1.3.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-6QdaCJ7Wn5UZLJs15IEfqy4Ru3OaL5ctqpQYWd5rlfV9wwzrzdt6+kgAQZV/qdB0MUPN4nhyBfRembQCIvBf+w==} @@ -18363,7 +18254,6 @@ packages: engines: {node: '>=10'} dependencies: tslib: 2.4.0 - dev: true /aria-query@5.0.0: resolution: {integrity: sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==} @@ -18817,6 +18707,7 @@ packages: '@babel/runtime': 7.23.2 cosmiconfig: 7.0.1 resolve: 1.22.4 + dev: false /babel-plugin-named-exports-order@0.0.2: resolution: {integrity: sha512-OgOYHOLoRK+/mvXU9imKHlG6GkPLYrUCvFXG/CM93R/aNNO8pOOF4aS+S8CCHMDQoNSeiOYEZb/G6RwL95Jktw==} @@ -22807,10 +22698,6 @@ packages: - supports-color dev: true - /find-root@1.1.0: - resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} - dev: true - /find-up@1.1.2: resolution: {integrity: sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==} engines: {node: '>=0.10.0'} @@ -23324,7 +23211,6 @@ packages: /get-nonce@1.0.1: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} - dev: true /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} @@ -27536,6 +27422,11 @@ packages: engines: {node: '>=6'} dev: false + /modern-normalize@2.0.0: + resolution: {integrity: sha512-CxBoEVKh5U4DH3XuNbc5ONLF6dQBc8dSc7pdZ1957FGbIO5JBqGqqchhET9dTexri8/pk9xBL6+5ceOtCIp1QA==} + engines: {node: '>=6'} + dev: true + /moment@2.29.3: resolution: {integrity: sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==} @@ -28867,6 +28758,19 @@ packages: postcss-value-parser: 4.2.0 dev: false + /postcss-custom-media@10.0.2(postcss@8.4.31): + resolution: {integrity: sha512-zcEFNRmDm2fZvTPdI1pIW3W//UruMcLosmMiCdpQnrCsTRzWlKQPYMa1ud9auL0BmrryKK1+JjIGn19K0UjO/w==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/cascade-layer-name-parser': 1.0.5(@csstools/css-parser-algorithms@2.3.2)(@csstools/css-tokenizer@2.2.1) + '@csstools/css-parser-algorithms': 2.3.2(@csstools/css-tokenizer@2.2.1) + '@csstools/css-tokenizer': 2.2.1 + '@csstools/media-query-list-parser': 2.1.5(@csstools/css-parser-algorithms@2.3.2)(@csstools/css-tokenizer@2.2.1) + postcss: 8.4.31 + dev: true + /postcss-custom-properties@13.1.5(postcss@8.4.31): resolution: {integrity: sha512-98DXk81zTGqMVkGANysMHbGIg3voH383DYo3/+c+Abzay3nao+vM/f4Jgzsakk9S7BDsEw5DiW7sFy5G4W2wLA==} engines: {node: ^14 || ^16 || >=18} @@ -31039,6 +30943,14 @@ packages: react-side-effect: 2.1.2(react@18.2.0) dev: false + /react-icons@4.11.0(react@18.2.0): + resolution: {integrity: sha512-V+4khzYcE5EBk/BvcuYRq6V/osf11ODUM2J8hg2FDSswRrGvqiYUYPRy4OdrWaQOBj4NcpJfmHZLNaD+VH0TyA==} + peerDependencies: + react: '*' + dependencies: + react: 18.2.0 + dev: true + /react-inspector@5.1.1(react@18.2.0): resolution: {integrity: sha512-GURDaYzoLbW8pMGXwYPDBIv6nqei4kK7LPRZ9q9HCZF54wqXz/dnylBp/kfE9XmekBhHvLDdcYeyIwSrvtOiWg==} peerDependencies: @@ -31130,7 +31042,6 @@ packages: react: 18.2.0 react-style-singleton: 2.2.1(@types/react@18.0.21)(react@18.2.0) tslib: 2.4.0 - dev: true /react-remove-scroll@2.5.5(@types/react@18.0.21)(react@18.2.0): resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} @@ -31149,7 +31060,6 @@ packages: tslib: 2.4.0 use-callback-ref: 1.3.0(@types/react@18.0.21)(react@18.2.0) use-sidecar: 1.1.2(@types/react@18.0.21)(react@18.2.0) - dev: true /react-router-dom@5.3.4(react@18.2.0): resolution: {integrity: sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==} @@ -31227,7 +31137,6 @@ packages: invariant: 2.2.4 react: 18.2.0 tslib: 2.4.0 - dev: true /react-syntax-highlighter@15.5.0(react@18.2.0): resolution: {integrity: sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg==} @@ -32586,6 +32495,7 @@ packages: /source-map@0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} + dev: false /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} @@ -33666,6 +33576,10 @@ packages: /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + /thumbhash@0.1.1: + resolution: {integrity: sha512-kH5pKeIIBPQXAOni2AiY/Cu/NKdkFREdpH+TLdM0g6WA7RriCv0kPLgP731ady67MhTAqrVG/4mnEeibVuCJcg==} + dev: false + /timers-browserify@2.0.12: resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} engines: {node: '>=0.6.0'}