diff --git a/dashboard/CHANGELOG.md b/dashboard/CHANGELOG.md index f94d2e467f..bc1c7855ba 100644 --- a/dashboard/CHANGELOG.md +++ b/dashboard/CHANGELOG.md @@ -1,5 +1,12 @@ # @nhost/dashboard +## 0.21.0 + +### Minor Changes + +- ed1a8d458: Update alert message on increasing PostgreSQL's volume capacity +- 2e2248fd4: feat(dashboard): add SQL editor + ## 0.20.28 ### Patch Changes diff --git a/dashboard/Dockerfile b/dashboard/Dockerfile index d7b94b5410..b035c084b5 100644 --- a/dashboard/Dockerfile +++ b/dashboard/Dockerfile @@ -1,4 +1,4 @@ -FROM node:16-alpine AS pruner +FROM node:18-alpine AS pruner RUN apk add --no-cache libc6-compat RUN apk update WORKDIR /app @@ -7,7 +7,7 @@ RUN yarn global add turbo@1.10.11 COPY . . RUN turbo prune --scope="@nhost/dashboard" --docker -FROM node:16-alpine AS builder +FROM node:18-alpine AS builder ARG TURBO_TOKEN ARG TURBO_TEAM @@ -40,7 +40,7 @@ COPY turbo.json turbo.json COPY config/ config/ RUN pnpm build:dashboard -FROM node:16-alpine AS runner +FROM node:18-alpine AS runner WORKDIR /app RUN addgroup --system --gid 1001 nodejs diff --git a/dashboard/package.json b/dashboard/package.json index 40f42f3c4b..149574990c 100644 --- a/dashboard/package.json +++ b/dashboard/package.json @@ -1,6 +1,6 @@ { "name": "@nhost/dashboard", - "version": "0.20.28", + "version": "0.21.0", "private": true, "scripts": { "preinstall": "npx only-allow pnpm", @@ -19,7 +19,7 @@ }, "dependencies": { "@apollo/client": "^3.7.10", - "@codemirror/language": "^6.3.0", + "@codemirror/lang-sql": "^6.5.4", "@emotion/cache": "^11.10.5", "@emotion/react": "^11.10.5", "@emotion/server": "^11.4.0", @@ -44,6 +44,8 @@ "@tanstack/react-query": "^4.16.1", "@tanstack/react-table": "^8.5.30", "@tanstack/react-virtual": "^3.0.0-beta.23", + "@uiw/codemirror-theme-github": "^4.21.20", + "@uiw/react-codemirror": "^4.21.20", "analytics-node": "^6.2.0", "bcryptjs": "^2.4.3", "clsx": "^1.2.1", @@ -70,6 +72,7 @@ "react-is": "18.2.0", "react-loading-skeleton": "^2.2.0", "react-merge-refs": "^1.1.0", + "react-resizable-layout": "^0.7.2", "react-syntax-highlighter": "^15.4.5", "react-table": "^7.8.0", "sharp": "^0.32.0", diff --git a/dashboard/src/components/ui/v2/icons/TerminalIcon/TerminalIcon.tsx b/dashboard/src/components/ui/v2/icons/TerminalIcon/TerminalIcon.tsx new file mode 100644 index 0000000000..65e685e6b1 --- /dev/null +++ b/dashboard/src/components/ui/v2/icons/TerminalIcon/TerminalIcon.tsx @@ -0,0 +1,26 @@ +import type { IconProps } from '@/components/ui/v2/icons'; +import { SvgIcon } from '@/components/ui/v2/icons/SvgIcon'; + +function TerminalIcon(props: IconProps) { + return ( + + + + ); +} + +TerminalIcon.displayName = 'NhostTerminalIcon'; + +export default TerminalIcon; diff --git a/dashboard/src/components/ui/v2/icons/TerminalIcon/index.ts b/dashboard/src/components/ui/v2/icons/TerminalIcon/index.ts new file mode 100644 index 0000000000..31ff476e3f --- /dev/null +++ b/dashboard/src/components/ui/v2/icons/TerminalIcon/index.ts @@ -0,0 +1 @@ +export { default as TerminalIcon } from './TerminalIcon'; diff --git a/dashboard/src/features/database/dataGrid/components/DataBrowserSidebar/DataBrowserSidebar.tsx b/dashboard/src/features/database/dataGrid/components/DataBrowserSidebar/DataBrowserSidebar.tsx index 48cf0e47a1..d121b3fde6 100644 --- a/dashboard/src/features/database/dataGrid/components/DataBrowserSidebar/DataBrowserSidebar.tsx +++ b/dashboard/src/features/database/dataGrid/components/DataBrowserSidebar/DataBrowserSidebar.tsx @@ -17,6 +17,7 @@ import { DotsHorizontalIcon } from '@/components/ui/v2/icons/DotsHorizontalIcon' import { LockIcon } from '@/components/ui/v2/icons/LockIcon'; import { PencilIcon } from '@/components/ui/v2/icons/PencilIcon'; import { PlusIcon } from '@/components/ui/v2/icons/PlusIcon'; +import { TerminalIcon } from '@/components/ui/v2/icons/TerminalIcon'; import { TrashIcon } from '@/components/ui/v2/icons/TrashIcon'; import { UsersIcon } from '@/components/ui/v2/icons/UsersIcon'; import { Link } from '@/components/ui/v2/Link'; @@ -86,7 +87,9 @@ function DataBrowserSidebarContent({ const isGitHubConnected = !!currentProject?.githubRepository; const router = useRouter(); + const { + asPath, query: { workspaceSlug, appSlug, dataSourceSlug, schemaSlug, tableSlug }, } = router; @@ -108,6 +111,8 @@ function DataBrowserSidebarContent({ */ const [sidebarMenuTable, setSidebarMenuTable] = useState(); + const sqlEditorHref = `/${workspaceSlug}/${appSlug}/database/browser/default/editor`; + useEffect(() => { if (selectedSchema) { return; @@ -258,194 +263,135 @@ function DataBrowserSidebarContent({ } return ( -
- {schemas && schemas.length > 0 && ( - ( + + {option?.label} + + )} + slotProps={{ + listbox: { className: 'max-w-[220px] min-w-[initial] w-full' }, + popper: { className: 'max-w-[220px] min-w-[initial] w-full' }, + }} + value={selectedSchema} + onChange={(_event, value) => setSelectedSchema(value as string)} + > + {schemas.map((schema) => ( + - ))} - - )} - - {isGitHubConnected && ( - - - Your project is connected to GitHub. Please use the CLI to make - schema changes. - - - + )} + + ))} + + )} + {isGitHubConnected && ( + - Learn More - - - )} - - {!isSelectedSchemaLocked && ( - - )} - - {schemas && schemas.length > 0 && tablesInSelectedSchema.length === 0 && ( - - No tables found. - - )} - -
+ { + if (onSidebarItemClick) { + onSidebarItemClick(`default.${tablePath}`); + } + }} + > + {table.table_name} + + + ); + })} + + )} + + + + + +
+ + SQL Editor +
+
+
+ ); } @@ -580,7 +593,7 @@ export default function DataBrowserSidebar({ setSQLCode(value), []); + + const { runSQL, loading, errorMessage, commandOk, rows, columns } = useRunSQL( + sqlCode, + track, + cascade, + readOnly, + isMigration, + migrationName, + ); + + const { position, separatorProps } = useResizable({ + axis: 'y', + initial: 400, + min: 50, + reverse: true, + }); + + return ( + + + Raw SQL + + + + + Track this + + } + checked={track} + onChange={(event) => setTrack(event.currentTarget.checked)} + /> + + + + + + + + Cascade metadata + + } + checked={cascade} + onChange={(e) => setCascade(e.target.checked)} + /> + + + + + + + + + Read only + + } + checked={readOnly} + onChange={(e) => setReadOnly(e.target.checked)} + /> + + + + + + + {!isPlatform && ( + + + + This is a migration + + } + checked={isMigration} + onChange={(e) => setIsMigration(e.target.checked)} + /> + + + + + + {isMigration && ( + setMigrationName(e.target.value)} + /> + )} + + )} + + + + + + + + + + + {loading && ( + + )} + + {errorMessage && ( + + {errorMessage} + + )} + + {!loading && !errorMessage && commandOk && ( + + Success, no rows returned + + )} + + {!loading && !errorMessage && ( + + + + {columns.map((header) => ( + + {header} + + ))} + + + + + {rows.map((row, rowIndex) => ( + + {row.map((value, valueIndex) => ( + + {value} + + ))} + + ))} + +
+ )} +
+
+ ); +} diff --git a/dashboard/src/features/database/dataGrid/components/SQLEditor/index.ts b/dashboard/src/features/database/dataGrid/components/SQLEditor/index.ts new file mode 100644 index 0000000000..393ecd9b6d --- /dev/null +++ b/dashboard/src/features/database/dataGrid/components/SQLEditor/index.ts @@ -0,0 +1 @@ +export { default as SQLEditor } from './SQLEditor'; diff --git a/dashboard/src/features/database/dataGrid/hooks/useRunSQL/index.ts b/dashboard/src/features/database/dataGrid/hooks/useRunSQL/index.ts new file mode 100644 index 0000000000..4c8d1d5303 --- /dev/null +++ b/dashboard/src/features/database/dataGrid/hooks/useRunSQL/index.ts @@ -0,0 +1 @@ +export { default as useRunSQL } from './useRunSQL'; diff --git a/dashboard/src/features/database/dataGrid/hooks/useRunSQL/useRunSQL.ts b/dashboard/src/features/database/dataGrid/hooks/useRunSQL/useRunSQL.ts new file mode 100644 index 0000000000..4384b43dd2 --- /dev/null +++ b/dashboard/src/features/database/dataGrid/hooks/useRunSQL/useRunSQL.ts @@ -0,0 +1,283 @@ +import { useCurrentWorkspaceAndProject } from '@/features/projects/common/hooks/useCurrentWorkspaceAndProject'; +import { generateAppServiceUrl } from '@/features/projects/common/utils/generateAppServiceUrl'; +import { getToastStyleProps } from '@/utils/constants/settings'; +import { getHasuraAdminSecret } from '@/utils/env'; +import { parseIdentifiersFromSQL } from '@/utils/sql'; +import toast from 'react-hot-toast'; +import { useState } from 'react'; + +export default function useRunSQL( + sqlCode: string, + track: boolean, + cascade: boolean, + readOnly: boolean, + isMigration: boolean, + migrationName: string, +) { + const { currentProject } = useCurrentWorkspaceAndProject(); + + const [loading, setLoading] = useState(false); + const [commandOk, setCommandOk] = useState(false); + const [errorMessage, setErrorMessage] = useState(''); + const [columns, setColumns] = useState([]); + const [rows, setRows] = useState([[]]); + + const appUrl = generateAppServiceUrl( + currentProject?.subdomain, + currentProject?.region, + 'hasura', + ); + + const adminSecret = + process.env.NEXT_PUBLIC_ENV === 'dev' + ? getHasuraAdminSecret() + : currentProject?.config?.hasura.adminSecret; + + const toastStyle = getToastStyleProps(); + + const createMigration = async ( + inputSQL: string, + migration: string, + isCascade: boolean, + ) => { + try { + const migrationApiResponse = await fetch(`${appUrl}/apis/migrate`, { + method: 'POST', + headers: { 'x-hasura-admin-secret': adminSecret }, + body: JSON.stringify({ + name: migration, + datasource: 'default', + up: [ + { + type: 'run_sql', + args: { + source: 'default', + sql: inputSQL, + cascade: isCascade, + read_only: false, + }, + }, + ], + down: [ + { + type: 'run_sql', + args: { + source: 'default', + sql: '-- Could not auto-generate a down migration.', + cascade: isCascade, + read_only: false, + }, + }, + ], + }), + }); + + if (!migrationApiResponse.ok) { + throw new Error('Migration API call failed'); + } + + return { + error: null, + }; + } catch (createMigrationError) { + toast.error('An error happened when calling the migration API', { + style: toastStyle.style, + ...toastStyle.error, + }); + + return { + error: createMigrationError, + }; + } + }; + + const sendSQLToHasura = async ( + inputSQL: string, + isCascade: boolean, + isReadOnly: boolean, + ) => { + try { + if (!inputSQL) { + return { + result_type: 'error', + columns: [], + rows: [], + queryApiError: 'No SQL provided', + }; + } + + const response = await fetch(`${appUrl}/v2/query`, { + method: 'POST', + headers: { 'x-hasura-admin-secret': adminSecret }, + body: JSON.stringify({ + type: 'run_sql', + args: { + source: 'default', + sql: inputSQL, + cascade: isCascade, + read_only: isReadOnly, + }, + }), + }); + + if (!response.ok) { + const errorResponse = await response.json(); + const queryApiError = + errorResponse?.internal?.error?.message || 'Unknown error'; + return { + result_type: 'error', + columns: [], + rows: [], + error: queryApiError, + }; + } + + const responseBody = await response.json(); + + if (responseBody?.result_type === 'TuplesOk') { + return { + result_type: 'TuplesOk', + columns: responseBody.result[0], + rows: responseBody.result.slice(1), + error: '', + }; + } + + if (responseBody?.result_type === 'CommandOk') { + return { + result_type: 'CommandOk', + columns: [], + rows: [], + error: '', + }; + } + + // If the result_type is neither TuplesOk nor CommandOk + return { + result_type: 'error', + columns: [], + rows: [], + error: 'Unknown response type', + }; + } catch (error) { + return { + result_type: 'error', + columns: [], + rows: [], + error: error.message || 'Unknown error', + }; + } + }; + + const updateMetadata = async (inputSQL: string) => { + const entities = parseIdentifiersFromSQL(inputSQL); + + const tablesOrViewEntities = entities.filter( + (entity) => entity.type !== 'function', + ); + const functionEntities = entities.filter( + (entity) => entity.type === 'function', + ); + + const trackTablesOrViews = tablesOrViewEntities.map(({ name, schema }) => ({ + type: 'pg_track_table', + args: { + source: 'default', + table: { + name, + schema, + }, + }, + })); + + const trackFunctions = functionEntities.map(({ name, schema }) => ({ + type: 'pg_track_function', + args: { + source: 'default', + function: { + name, + schema, + configuration: {}, + }, + }, + })); + + const metaDataPayload = { + source: 'default', + type: 'bulk', + args: [...trackTablesOrViews, ...trackFunctions], + }; + + try { + if (entities.length > 0) { + const metadataApiResponse = await fetch(`${appUrl}/v1/metadata`, { + method: 'POST', + headers: { 'x-hasura-admin-secret': adminSecret }, + body: JSON.stringify(metaDataPayload), + }); + + if (!metadataApiResponse.ok) { + throw new Error('Metadata API call failed'); + } + } + } catch (error) { + toast.error('An error happened when calling the metadata API', { + style: toastStyle.style, + ...toastStyle.error, + }); + } + }; + + const runSQL = async () => { + setLoading(true); + setCommandOk(false); + setErrorMessage(''); + + if (isMigration) { + const { error: createMigrationError } = await createMigration( + sqlCode, + migrationName, + cascade, + ); + + setCommandOk(!createMigrationError); + + if (createMigrationError) { + setErrorMessage('An unknown error occurred'); + } + + // if running the migration fails then we don't update the metadata + if (track && !createMigrationError) { + await updateMetadata(sqlCode); + } + } else { + const { + result_type, + error: $error, + columns: $columns, + rows: $rows, + } = await sendSQLToHasura(sqlCode, cascade, readOnly); + + setCommandOk(result_type === 'CommandOk'); + setColumns($columns); + setRows($rows); + setErrorMessage($error); + + // if running the sql fails then we don't update the metadata + if (track && !$error) { + await updateMetadata(sqlCode); + } + } + + setLoading(false); + }; + + return { + runSQL, + loading, + errorMessage, + commandOk, + rows, + columns, + }; +} diff --git a/dashboard/src/pages/[workspaceSlug]/[appSlug]/database/browser/[dataSourceSlug]/editor.tsx b/dashboard/src/pages/[workspaceSlug]/[appSlug]/database/browser/[dataSourceSlug]/editor.tsx new file mode 100644 index 0000000000..36f25724a3 --- /dev/null +++ b/dashboard/src/pages/[workspaceSlug]/[appSlug]/database/browser/[dataSourceSlug]/editor.tsx @@ -0,0 +1,27 @@ +import { LoadingScreen } from '@/components/presentational/LoadingScreen'; +import { RetryableErrorBoundary } from '@/components/presentational/RetryableErrorBoundary'; +// import { useTablePath } from '@/features/database/common/hooks/useTablePath'; +import { DataBrowserLayout } from '@/features/database/dataGrid/components/DataBrowserLayout'; +import { SQLEditor } from '@/features/database/dataGrid/components/SQLEditor'; +import { useCurrentWorkspaceAndProject } from '@/features/projects/common/hooks/useCurrentWorkspaceAndProject'; +import { useIsPlatform } from '@/features/projects/common/hooks/useIsPlatform'; +import type { ReactElement } from 'react'; + +export default function Editor() { + const isPlatform = useIsPlatform(); + const { currentProject } = useCurrentWorkspaceAndProject(); + + if (isPlatform && !currentProject?.config?.hasura.adminSecret) { + return ; + } + + return ( + + + + ); +} + +Editor.getLayout = function getLayout(page: ReactElement) { + return {page}; +}; diff --git a/dashboard/src/utils/sql/index.ts b/dashboard/src/utils/sql/index.ts new file mode 100644 index 0000000000..c01728c712 --- /dev/null +++ b/dashboard/src/utils/sql/index.ts @@ -0,0 +1,53 @@ +// The parsing was inspired by code from the hasura/graphql-engine repo + +export interface ParsedSQLEntity { + type: string; + name: string; + schema: string; +} + +const sanitizeValue = (value: string) => { + let val = value; + + if (!/^".*"$/.test(value)) { + val = value?.toLowerCase() ?? ''; + } + + return val.replace(/['"]+/g, ''); +}; + +const stripComments = (sql: string) => { + const regExp = /(--[^\r\n]*)|(\/\*[\w\W]*?(?=\*\/)\*\/)/; // eslint-disable-line + const comments = sql.match(new RegExp(regExp, 'gmi')); + + if (!comments?.length) { + return sql; + } + + return comments.reduce( + (acc: string, comment: string) => acc.replace(comment, ''), + sql, + ); +}; + +export const parseIdentifiersFromSQL = (sql: string): ParsedSQLEntity[] => { + const objects: ParsedSQLEntity[] = []; + const sanitizedSql = stripComments(sql); + + const regExp = + /create\s*(?:|or\s*replace)\s*(?view|table|function)\s*(?:\s*if*\s*not\s*exists\s*)?((?\"?\w+\"?)\.(?\"?\w+\"?)|(?\"?\w+\"?))\s*(?partition\s*of)?/gim; // eslint-disable-line + + Array.from(sanitizedSql.matchAll(regExp)).forEach((result) => { + const { type, schema, name, nameWithSchema } = result.groups ?? {}; + + if (type && (name || nameWithSchema)) { + objects.push({ + type: type.toLowerCase(), + schema: sanitizeValue(schema || 'public'), + name: sanitizeValue(name || nameWithSchema), + }); + } + }); + + return objects; +}; diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 5d52d4f9c1..062e78b920 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,5 +1,11 @@ # @nhost/docs +## 0.7.2 + +### Patch Changes + +- 138bf9eb5: fix: add instructions for enabling Sign In with LinkedIn using OpenID Connect + ## 0.7.1 ### Patch Changes diff --git a/docs/package.json b/docs/package.json index 3b7761476b..99f36f2ba9 100644 --- a/docs/package.json +++ b/docs/package.json @@ -1,6 +1,6 @@ { "name": "@nhost/docs", - "version": "0.7.1", + "version": "0.7.2", "private": true, "scripts": { "docusaurus": "docusaurus", diff --git a/examples/react-apollo/CHANGELOG.md b/examples/react-apollo/CHANGELOG.md index 93870f93dc..e09e8c1e91 100644 --- a/examples/react-apollo/CHANGELOG.md +++ b/examples/react-apollo/CHANGELOG.md @@ -1,5 +1,11 @@ # @nhost-examples/react-apollo +## 0.1.17 + +### Patch Changes + +- 67b2c044b: feat: add sign-in with Linked-In + ## 0.1.16 ### Patch Changes diff --git a/examples/react-apollo/package.json b/examples/react-apollo/package.json index 64e5eaa04a..0dec4275d1 100644 --- a/examples/react-apollo/package.json +++ b/examples/react-apollo/package.json @@ -1,6 +1,6 @@ { "name": "@nhost-examples/react-apollo", - "version": "0.1.16", + "version": "0.1.17", "private": true, "dependencies": { "@apollo/client": "^3.7.14", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6acfb209f9..c48cbc1c9c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -106,16 +106,16 @@ importers: version: 4.2.0(typescript@4.9.5)(vite@4.3.8) vitest: specifier: ^0.32.0 - version: 0.32.0 + version: 0.32.0(jsdom@22.0.0) dashboard: dependencies: '@apollo/client': specifier: ^3.7.10 version: 3.7.10(graphql-ws@5.11.2)(graphql@16.7.1)(react-dom@18.2.0)(react@18.2.0) - '@codemirror/language': - specifier: ^6.3.0 - version: 6.3.1 + '@codemirror/lang-sql': + specifier: ^6.5.4 + version: 6.5.4(@codemirror/view@6.22.0)(@lezer/common@1.1.1) '@emotion/cache': specifier: ^11.10.5 version: 11.10.5 @@ -136,7 +136,7 @@ importers: version: 5.0.0 '@graphiql/react': specifier: ^0.18.0 - version: 0.18.0(@codemirror/language@6.3.1)(@types/node@16.18.11)(@types/react-dom@18.2.6)(@types/react@18.2.14)(graphql-ws@5.11.2)(graphql@16.7.1)(react-dom@18.2.0)(react@18.2.0) + version: 0.18.0(@codemirror/language@6.0.0)(@types/node@16.18.11)(@types/react-dom@18.2.6)(@types/react@18.2.14)(graphql-ws@5.11.2)(graphql@16.7.1)(react-dom@18.2.0)(react@18.2.0) '@graphiql/toolkit': specifier: ^0.8.2 version: 0.8.2(@types/node@16.18.11)(graphql-ws@5.11.2)(graphql@16.7.1) @@ -188,6 +188,12 @@ importers: '@tanstack/react-virtual': specifier: ^3.0.0-beta.23 version: 3.0.0-beta.23(react@18.2.0) + '@uiw/codemirror-theme-github': + specifier: ^4.21.20 + version: 4.21.20(@codemirror/language@6.0.0)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0) + '@uiw/react-codemirror': + specifier: ^4.21.20 + version: 4.21.20(@babel/runtime@7.21.0)(@codemirror/autocomplete@6.11.0)(@codemirror/language@6.0.0)(@codemirror/lint@6.4.2)(@codemirror/search@6.5.4)(@codemirror/state@6.3.1)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.22.0)(codemirror@6.0.1)(react-dom@18.2.0)(react@18.2.0) analytics-node: specifier: ^6.2.0 version: 6.2.0 @@ -205,7 +211,7 @@ importers: version: 1.7.0 graphiql: specifier: ^3.0.0 - version: 3.0.0(@codemirror/language@6.3.1)(@types/node@16.18.11)(@types/react-dom@18.2.6)(@types/react@18.2.14)(graphql-ws@5.11.2)(graphql@16.7.1)(react-dom@18.2.0)(react@18.2.0) + version: 3.0.0(@codemirror/language@6.0.0)(@types/node@16.18.11)(@types/react-dom@18.2.6)(@types/react@18.2.14)(graphql-ws@5.11.2)(graphql@16.7.1)(react-dom@18.2.0)(react@18.2.0) graphql: specifier: 16.7.1 version: 16.7.1 @@ -266,6 +272,9 @@ importers: react-merge-refs: specifier: ^1.1.0 version: 1.1.0 + react-resizable-layout: + specifier: ^0.7.2 + version: 0.7.2(react-dom@18.2.0)(react@18.2.0) react-syntax-highlighter: specifier: ^15.4.5 version: 15.5.0(react@18.2.0) @@ -5330,26 +5339,87 @@ packages: minimist: 1.2.7 dev: true - /@codemirror/language@6.3.1: - resolution: {integrity: sha512-MK+G1QKaGfSEUg9YEFaBkMBI6j1ge4VMBPZv9fDYotw7w695c42x5Ba1mmwBkesYnzYFBfte6Hh9TDcKa6xORQ==} + /@codemirror/autocomplete@6.11.0(@codemirror/language@6.0.0)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0)(@lezer/common@1.1.1): + resolution: {integrity: sha512-LCPH3W+hl5vcO7OzEQgX6NpKuKVyiKFLGAy7FXROF6nUpsWUdQEgUb3fe/g7B0E1KZCRFfgzdKASt6Wly2UOBg==} + peerDependencies: + '@codemirror/language': ^6.0.0 + '@codemirror/state': ^6.0.0 + '@codemirror/view': ^6.0.0 + '@lezer/common': ^1.0.0 + dependencies: + '@codemirror/language': 6.0.0 + '@codemirror/state': 6.3.1 + '@codemirror/view': 6.22.0 + '@lezer/common': 1.1.1 + dev: false + + /@codemirror/commands@6.3.0: + resolution: {integrity: sha512-tFfcxRIlOWiQDFhjBSWJ10MxcvbCIsRr6V64SgrcaY0MwNk32cUOcCuNlWo8VjV4qRQCgNgUAnIeo0svkk4R5Q==} + dependencies: + '@codemirror/language': 6.0.0 + '@codemirror/state': 6.3.1 + '@codemirror/view': 6.22.0 + '@lezer/common': 1.1.1 + dev: false + + /@codemirror/lang-sql@6.5.4(@codemirror/view@6.22.0)(@lezer/common@1.1.1): + resolution: {integrity: sha512-5Gq7fYtT/5HbNyIG7a8vYaqOYQU3JbgtBe3+derkrFUXRVcjkf8WVgz++PIbMFAQsOFMDdDR+uiNM8ZRRuXH+w==} + dependencies: + '@codemirror/autocomplete': 6.11.0(@codemirror/language@6.0.0)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0)(@lezer/common@1.1.1) + '@codemirror/language': 6.0.0 + '@codemirror/state': 6.3.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.3.14 + transitivePeerDependencies: + - '@codemirror/view' + - '@lezer/common' + dev: false + + /@codemirror/language@6.0.0: + resolution: {integrity: sha512-rtjk5ifyMzOna1c7PBu7J1VCt0PvA5wy3o8eMVnxMKb7z8KA7JFecvD04dSn14vj/bBaAbqRsGed5OjtofEnLA==} dependencies: - '@codemirror/state': 6.1.3 - '@codemirror/view': 6.5.0 - '@lezer/common': 1.0.1 - '@lezer/highlight': 1.1.2 - '@lezer/lr': 1.2.4 - style-mod: 4.0.0 + '@codemirror/state': 6.3.1 + '@codemirror/view': 6.22.0 + '@lezer/common': 1.1.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.3.14 + style-mod: 4.1.0 dev: false - /@codemirror/state@6.1.3: - resolution: {integrity: sha512-0Rn7vadZ6EgHaKdIOwyhBWLdPDh1JM5USYqXjxwrvpmTKWu4wQ77twgAYEg1MU282XcrnV4ZqFf+00bu6UPCyg==} + /@codemirror/lint@6.4.2: + resolution: {integrity: sha512-wzRkluWb1ptPKdzlsrbwwjYCPLgzU6N88YBAmlZi8WFyuiEduSd05MnJYNogzyc8rPK7pj6m95ptUApc8sHKVA==} + dependencies: + '@codemirror/state': 6.3.1 + '@codemirror/view': 6.22.0 + crelt: 1.0.6 dev: false - /@codemirror/view@6.5.0: - resolution: {integrity: sha512-dapE7AywjyYoHBHn4n+wCRKFqMEmYZHHlfyoSO+e1P6MK4az1wg9t7mfwbdI9mXuBzmPBX7NmU3Xmq+qmxDOLw==} + /@codemirror/search@6.5.4: + resolution: {integrity: sha512-YoTrvjv9e8EbPs58opjZKyJ3ewFrVSUzQ/4WXlULQLSDDr1nGPJ67mMXFNNVYwdFhybzhrzrtqgHmtpJwIF+8g==} dependencies: - '@codemirror/state': 6.1.3 - style-mod: 4.0.0 + '@codemirror/state': 6.3.1 + '@codemirror/view': 6.22.0 + crelt: 1.0.6 + dev: false + + /@codemirror/state@6.3.1: + resolution: {integrity: sha512-88e4HhMtKJyw6fKprGaN/yZfiaoGYOi2nM45YCUC6R/kex9sxFWBDGatS1vk4lMgnWmdIIB9tk8Gj1LmL8YfvA==} + dev: false + + /@codemirror/theme-one-dark@6.1.2: + resolution: {integrity: sha512-F+sH0X16j/qFLMAfbciKTxVOwkdAS336b7AXTKOZhy8BR3eH/RelsnLgLFINrpST63mmN2OuwUt0W2ndUgYwUA==} + dependencies: + '@codemirror/language': 6.0.0 + '@codemirror/state': 6.3.1 + '@codemirror/view': 6.22.0 + '@lezer/highlight': 1.2.0 + dev: false + + /@codemirror/view@6.22.0: + resolution: {integrity: sha512-6zLj4YIoIpfTGKrDMTbeZRpa8ih4EymMCKmddEDcJWrCdp/N1D46B38YEz4creTb4T177AVS9EyXkLeC/HL2jA==} + dependencies: + '@codemirror/state': 6.3.1 + style-mod: 4.1.0 w3c-keyname: 2.2.6 dev: false @@ -7592,7 +7662,7 @@ packages: /@gqty/utils@1.0.0: resolution: {integrity: sha512-QJMlzts//d0H5mlekOZgx1a4KsTYXfxmRhhx8g/8mvzdaNVPxhFzCsv3+ljTOzbW3A08qy4jXQPWAMoTefSJDQ==} - /@graphiql/react@0.18.0(@codemirror/language@6.3.1)(@types/node@16.18.11)(@types/react-dom@18.2.6)(@types/react@18.2.14)(graphql-ws@5.11.2)(graphql@16.7.1)(react-dom@18.2.0)(react@18.2.0): + /@graphiql/react@0.18.0(@codemirror/language@6.0.0)(@types/node@16.18.11)(@types/react-dom@18.2.6)(@types/react@18.2.14)(graphql-ws@5.11.2)(graphql@16.7.1)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-OIzUjnxBM4k9DY0DXBMRfU+fTak2tbnmY2o6J5t/vKvqGaa4opRUhgIZEvrerjnktjCxj2dJY706gCwnUZQsNg==} peerDependencies: graphql: 16.7.1 @@ -7608,7 +7678,7 @@ packages: '@types/codemirror': 5.60.8 clsx: 1.2.1 codemirror: 5.65.9 - codemirror-graphql: 2.0.9(@codemirror/language@6.3.1)(codemirror@5.65.9)(graphql@16.7.1) + codemirror-graphql: 2.0.9(@codemirror/language@6.0.0)(codemirror@5.65.9)(graphql@16.7.1) copy-to-clipboard: 3.3.3 framer-motion: 6.5.1(react-dom@18.2.0)(react@18.2.0) graphql: 16.7.1 @@ -9471,20 +9541,20 @@ packages: resolution: {integrity: sha512-nkalE/f1RvRGChwBnEIoBfSEYOXnCRdleKuv6+lePbMDrMZXeDQnqak5XDOeBgrPPyPfAdcCu/B5z+v3VhplGg==} dev: false - /@lezer/common@1.0.1: - resolution: {integrity: sha512-8TR5++Q/F//tpDsLd5zkrvEX5xxeemafEaek7mUp7Y+bI8cKQXdSqhzTOBaOogETcMOVr0pT3BBPXp13477ciw==} + /@lezer/common@1.1.1: + resolution: {integrity: sha512-aAPB9YbvZHqAW+bIwiuuTDGB4DG0sYNRObGLxud8cW7osw1ZQxfDuTZ8KQiqfZ0QJGcR34CvpTMDXEyo/+Htgg==} dev: false - /@lezer/highlight@1.1.2: - resolution: {integrity: sha512-CAun1WR1glxG9ZdOokTZwXbcwB7PXkIEyZRUMFBVwSrhTcogWq634/ByNImrkUnQhjju6xsIaOBIxvcRJtplXQ==} + /@lezer/highlight@1.2.0: + resolution: {integrity: sha512-WrS5Mw51sGrpqjlh3d4/fOwpEV2Hd3YOkp9DBt4k8XZQcoTHZFB7sx030A6OcahF4J1nDQAa3jXlTVVYH50IFA==} dependencies: - '@lezer/common': 1.0.1 + '@lezer/common': 1.1.1 dev: false - /@lezer/lr@1.2.4: - resolution: {integrity: sha512-L/52/oMJBFXXx8qBYF4UgktLP2geQ/qn5Fd8+5L/mqlLLCB9+qdKktFAtejd9FdFMaFx6lrP5rmLz4sN3Kplcg==} + /@lezer/lr@1.3.14: + resolution: {integrity: sha512-z5mY4LStlA3yL7aHT/rqgG614cfcvklS+8oFRFBYrs4YaWLJyKKM4+nN6KopToX0o9Hj6zmH6M5kinOYuy06ug==} dependencies: - '@lezer/common': 1.0.1 + '@lezer/common': 1.1.1 dev: false /@mantine/core@4.2.12(@babel/core@7.19.6)(@mantine/hooks@4.2.12)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0): @@ -12697,7 +12767,7 @@ packages: find-up: 5.0.0 fs-extra: 9.1.0 html-webpack-plugin: 4.5.2(webpack@4.46.0) - node-fetch: 2.6.7(encoding@0.1.13) + node-fetch: 2.6.12(encoding@0.1.13) pnp-webpack-plugin: 1.6.4(typescript@4.9.5) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -13639,7 +13709,7 @@ packages: tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1' dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 3.2.1(postcss@8.4.19)(ts-node@10.9.1) + tailwindcss: 3.2.1(postcss@8.4.20)(ts-node@10.9.1) /@tailwindcss/forms@0.5.3(tailwindcss@3.2.4): resolution: {integrity: sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==} @@ -14129,7 +14199,6 @@ packages: /@types/node@18.11.17: resolution: {integrity: sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==} - dev: true /@types/node@18.11.9: resolution: {integrity: sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==} @@ -14899,6 +14968,75 @@ packages: '@typescript-eslint/types': 5.43.0 eslint-visitor-keys: 3.4.3 + /@uiw/codemirror-extensions-basic-setup@4.21.20(@codemirror/autocomplete@6.11.0)(@codemirror/commands@6.3.0)(@codemirror/language@6.0.0)(@codemirror/lint@6.4.2)(@codemirror/search@6.5.4)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0): + resolution: {integrity: sha512-Wyi9q4uw0xGYd/tJ6bULG7tkCLqcUsQT0AQBfCDtnkV3LdiLU0LceTrzJoHJyIKSHsKDJxFQxa1qg3QLt4gIUA==} + peerDependencies: + '@codemirror/autocomplete': '>=6.0.0' + '@codemirror/commands': '>=6.0.0' + '@codemirror/language': '>=6.0.0' + '@codemirror/lint': '>=6.0.0' + '@codemirror/search': '>=6.0.0' + '@codemirror/state': '>=6.0.0' + '@codemirror/view': '>=6.0.0' + dependencies: + '@codemirror/autocomplete': 6.11.0(@codemirror/language@6.0.0)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0)(@lezer/common@1.1.1) + '@codemirror/commands': 6.3.0 + '@codemirror/language': 6.0.0 + '@codemirror/lint': 6.4.2 + '@codemirror/search': 6.5.4 + '@codemirror/state': 6.3.1 + '@codemirror/view': 6.22.0 + dev: false + + /@uiw/codemirror-theme-github@4.21.20(@codemirror/language@6.0.0)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0): + resolution: {integrity: sha512-A4DFScxtZDdbT0XmMCpIZ0b2qzxJJ8CI9LibI8PHrwDIG5yp4sRCVoawU953U+J99Yv6zDqi5sqbkLAPRVmd9g==} + dependencies: + '@uiw/codemirror-themes': 4.21.20(@codemirror/language@6.0.0)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0) + transitivePeerDependencies: + - '@codemirror/language' + - '@codemirror/state' + - '@codemirror/view' + dev: false + + /@uiw/codemirror-themes@4.21.20(@codemirror/language@6.0.0)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0): + resolution: {integrity: sha512-/Ncc88v5RroeDAOfhao5lmkobmH4aJZqlSAJJTxXE7AzM85BjuCnnUYXVT7VFeEslFtfTiIgriyLmJQoGOi2mA==} + peerDependencies: + '@codemirror/language': '>=6.0.0' + '@codemirror/state': '>=6.0.0' + '@codemirror/view': '>=6.0.0' + dependencies: + '@codemirror/language': 6.0.0 + '@codemirror/state': 6.3.1 + '@codemirror/view': 6.22.0 + dev: false + + /@uiw/react-codemirror@4.21.20(@babel/runtime@7.21.0)(@codemirror/autocomplete@6.11.0)(@codemirror/language@6.0.0)(@codemirror/lint@6.4.2)(@codemirror/search@6.5.4)(@codemirror/state@6.3.1)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.22.0)(codemirror@6.0.1)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-PdyewPvNXnvT3JHj888yjpbWsAGw5qlxW6w1sMdsqJ0R6vPV++ob1iZXCGrM1FVpbqPK0DNfpXvjzp2gIr3lYw==} + peerDependencies: + '@babel/runtime': '>=7.11.0' + '@codemirror/state': '>=6.0.0' + '@codemirror/theme-one-dark': '>=6.0.0' + '@codemirror/view': '>=6.0.0' + codemirror: '>=6.0.0' + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + '@babel/runtime': 7.21.0 + '@codemirror/commands': 6.3.0 + '@codemirror/state': 6.3.1 + '@codemirror/theme-one-dark': 6.1.2 + '@codemirror/view': 6.22.0 + '@uiw/codemirror-extensions-basic-setup': 4.21.20(@codemirror/autocomplete@6.11.0)(@codemirror/commands@6.3.0)(@codemirror/language@6.0.0)(@codemirror/lint@6.4.2)(@codemirror/search@6.5.4)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0) + codemirror: 6.0.1(@lezer/common@1.1.1) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + transitivePeerDependencies: + - '@codemirror/autocomplete' + - '@codemirror/language' + - '@codemirror/lint' + - '@codemirror/search' + dev: false + /@unocss/cli@0.33.5: resolution: {integrity: sha512-zijL36Km7mrb4auJv6rbsQwBlvP68omLko9Whv4lFx9dJ0H7FqIABxKODGIOGSnKhkOf63qRWihdftdmVQeyCA==} engines: {node: '>=14'} @@ -15203,7 +15341,7 @@ packages: std-env: 3.3.2 test-exclude: 6.0.0 v8-to-istanbul: 9.1.0 - vitest: 0.32.0 + vitest: 0.32.0(jsdom@22.0.0) transitivePeerDependencies: - supports-color dev: true @@ -18183,14 +18321,14 @@ packages: resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} engines: {node: '>=6'} - /codemirror-graphql@2.0.9(@codemirror/language@6.3.1)(codemirror@5.65.9)(graphql@16.7.1): + /codemirror-graphql@2.0.9(@codemirror/language@6.0.0)(codemirror@5.65.9)(graphql@16.7.1): resolution: {integrity: sha512-gl1LR6XSBgZtl7Dr2q4jjRNfhxMF8vn+rnjZTZPf/l+VrQgavY8l3G//hW7s3hWy73iiqkq5LZ4KE1tdaxB/vQ==} peerDependencies: '@codemirror/language': 6.0.0 codemirror: ^5.65.3 graphql: 16.7.1 dependencies: - '@codemirror/language': 6.3.1 + '@codemirror/language': 6.0.0 codemirror: 5.65.9 graphql: 16.7.1 graphql-language-service: 5.1.7(graphql@16.7.1) @@ -18200,6 +18338,20 @@ packages: resolution: {integrity: sha512-19Jox5sAKpusTDgqgKB5dawPpQcY+ipQK7xoEI+MVucEF9qqFaXpeqY1KaoyGBso/wHQoDa4HMMxMjdsS3Zzzw==} dev: false + /codemirror@6.0.1(@lezer/common@1.1.1): + resolution: {integrity: sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==} + dependencies: + '@codemirror/autocomplete': 6.11.0(@codemirror/language@6.0.0)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0)(@lezer/common@1.1.1) + '@codemirror/commands': 6.3.0 + '@codemirror/language': 6.0.0 + '@codemirror/lint': 6.4.2 + '@codemirror/search': 6.5.4 + '@codemirror/state': 6.3.1 + '@codemirror/view': 6.22.0 + transitivePeerDependencies: + - '@lezer/common' + dev: false + /collapse-white-space@1.0.6: resolution: {integrity: sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==} @@ -18751,6 +18903,10 @@ packages: /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + /crelt@1.0.6: + resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} + dev: false + /cross-fetch@3.1.5(encoding@0.1.13): resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} dependencies: @@ -22723,7 +22879,7 @@ packages: extend: 3.0.2 https-proxy-agent: 5.0.1 is-stream: 2.0.1 - node-fetch: 2.6.7(encoding@0.1.13) + node-fetch: 2.6.12(encoding@0.1.13) transitivePeerDependencies: - encoding - supports-color @@ -23115,14 +23271,14 @@ packages: /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - /graphiql@3.0.0(@codemirror/language@6.3.1)(@types/node@16.18.11)(@types/react-dom@18.2.6)(@types/react@18.2.14)(graphql-ws@5.11.2)(graphql@16.7.1)(react-dom@18.2.0)(react@18.2.0): + /graphiql@3.0.0(@codemirror/language@6.0.0)(@types/node@16.18.11)(@types/react-dom@18.2.6)(@types/react@18.2.14)(graphql-ws@5.11.2)(graphql@16.7.1)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-MmXcEIcku4gLc+wk23yAe07B0ZHTgRFNsPCnRJXBVkO5sgdfvtJ98J0zczz0GA52DG5XTQ6mKXPJHNysj4ePQw==} peerDependencies: graphql: 16.7.1 react: ^16.8.0 || ^17 || ^18 react-dom: ^16.8.0 || ^17 || ^18 dependencies: - '@graphiql/react': 0.18.0(@codemirror/language@6.3.1)(@types/node@16.18.11)(@types/react-dom@18.2.6)(@types/react@18.2.14)(graphql-ws@5.11.2)(graphql@16.7.1)(react-dom@18.2.0)(react@18.2.0) + '@graphiql/react': 0.18.0(@codemirror/language@6.0.0)(@types/node@16.18.11)(@types/react-dom@18.2.6)(@types/react@18.2.14)(graphql-ws@5.11.2)(graphql@16.7.1)(react-dom@18.2.0)(react@18.2.0) '@graphiql/toolkit': 0.8.4(@types/node@16.18.11)(graphql-ws@5.11.2)(graphql@16.7.1) graphql: 16.7.1 graphql-language-service: 5.1.7(graphql@16.7.1) @@ -25802,6 +25958,7 @@ packages: /map-obj@1.0.1: resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} engines: {node: '>=0.10.0'} + requiresBuild: true dev: true /map-obj@4.3.0: @@ -26806,7 +26963,6 @@ packages: dependencies: encoding: 0.1.13 whatwg-url: 5.0.0 - dev: false /node-fetch@2.6.7(encoding@0.1.13): resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} @@ -28002,6 +28158,7 @@ packages: postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.4 + dev: true /postcss-import@14.1.0(postcss@8.4.20): resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} @@ -28013,7 +28170,6 @@ packages: postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.4 - dev: true /postcss-import@15.1.0(postcss@8.4.29): resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} @@ -28044,6 +28200,7 @@ packages: dependencies: camelcase-css: 2.0.1 postcss: 8.4.19 + dev: true /postcss-js@4.0.0(postcss@8.4.20): resolution: {integrity: sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==} @@ -28053,7 +28210,6 @@ packages: dependencies: camelcase-css: 2.0.1 postcss: 8.4.20 - dev: true /postcss-js@4.0.1(postcss@8.4.29): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} @@ -28097,6 +28253,7 @@ packages: postcss: 8.4.19 ts-node: 10.9.1(@types/node@16.18.11)(typescript@4.9.5) yaml: 1.10.2 + dev: true /postcss-load-config@3.1.4(postcss@8.4.20)(ts-node@10.9.1): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} @@ -28114,7 +28271,6 @@ packages: postcss: 8.4.20 ts-node: 10.9.1(@types/node@18.11.17)(typescript@4.9.4) yaml: 1.10.2 - dev: true /postcss-load-config@3.1.4(postcss@8.4.29): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} @@ -28361,6 +28517,7 @@ packages: dependencies: postcss: 8.4.19 postcss-selector-parser: 6.0.13 + dev: true /postcss-nested@6.0.0(postcss@8.4.20): resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==} @@ -28370,7 +28527,6 @@ packages: dependencies: postcss: 8.4.20 postcss-selector-parser: 6.0.13 - dev: true /postcss-nested@6.0.1(postcss@8.4.29): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} @@ -28621,6 +28777,7 @@ packages: nanoid: 3.3.4 picocolors: 1.0.0 source-map-js: 1.0.2 + dev: true /postcss@8.4.20: resolution: {integrity: sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==} @@ -28629,7 +28786,6 @@ packages: nanoid: 3.3.4 picocolors: 1.0.0 source-map-js: 1.0.2 - dev: true /postcss@8.4.29: resolution: {integrity: sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==} @@ -29491,6 +29647,16 @@ packages: use-sidecar: 1.1.2(@types/react@18.2.14)(react@18.2.0) dev: false + /react-resizable-layout@0.7.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-GrVzAecB6+osdAx5PPP3G8R9n7A2uDd3NL+PyrHWNRaVBivZmW/o0+yFjQdS5Bo016A2fIP11fAhefsknWN4aw==} + peerDependencies: + react: '>=17.0.0' + react-dom: '>=17.0.0' + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /react-router-config@5.1.1(react-router@5.3.4)(react@18.2.0): resolution: {integrity: sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==} peerDependencies: @@ -31434,8 +31600,8 @@ packages: webpack: 5.75.0 dev: true - /style-mod@4.0.0: - resolution: {integrity: sha512-OPhtyEjyyN9x3nhPsu76f52yUGXiZcgvsrFVtvTkyGRQJ0XK+GPc6ov1z+lRpbeabka+MYEQxOYRnt5nF30aMw==} + /style-mod@4.1.0: + resolution: {integrity: sha512-Ca5ib8HrFn+f+0n4N4ScTIA9iTOQ7MaGS1ylHcoVqW9J7w2w8PzN6g9gKmTYgGEBH8e120+RCmhpje6jC5uGWA==} dev: false /style-to-js@1.1.0: @@ -31823,6 +31989,7 @@ packages: resolve: 1.22.1 transitivePeerDependencies: - ts-node + dev: true /tailwindcss@3.2.1(postcss@8.4.20)(ts-node@10.9.1): resolution: {integrity: sha512-Uw+GVSxp5CM48krnjHObqoOwlCt5Qo6nw1jlCRwfGy68dSYb/LwS9ZFidYGRiM+w6rMawkZiu1mEMAsHYAfoLg==} @@ -31856,7 +32023,6 @@ packages: resolve: 1.22.1 transitivePeerDependencies: - ts-node - dev: true /tailwindcss@3.2.4(postcss@8.4.20)(ts-node@10.9.1): resolution: {integrity: sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==} @@ -32530,6 +32696,7 @@ packages: typescript: 4.9.5 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + dev: true /ts-node@10.9.1(@types/node@18.11.17)(typescript@4.9.4): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} @@ -32560,7 +32727,6 @@ packages: typescript: 4.9.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - dev: true /ts-node@10.9.1(@types/node@18.11.9)(typescript@4.7.4): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} @@ -34192,72 +34358,6 @@ packages: - terser dev: true - /vitest@0.32.0: - resolution: {integrity: sha512-SW83o629gCqnV3BqBnTxhB10DAwzwEx3z+rqYZESehUB+eWsJxwcBQx7CKy0otuGMJTYh7qCVuUX23HkftGl/Q==} - engines: {node: '>=v14.18.0'} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@vitest/browser': '*' - '@vitest/ui': '*' - happy-dom: '*' - jsdom: '*' - playwright: '*' - safaridriver: '*' - webdriverio: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - playwright: - optional: true - safaridriver: - optional: true - webdriverio: - optional: true - dependencies: - '@types/chai': 4.3.5 - '@types/chai-subset': 1.3.3 - '@types/node': 18.16.14 - '@vitest/expect': 0.32.0 - '@vitest/runner': 0.32.0 - '@vitest/snapshot': 0.32.0 - '@vitest/spy': 0.32.0 - '@vitest/utils': 0.32.0 - acorn: 8.8.2 - acorn-walk: 8.2.0 - cac: 6.7.14 - chai: 4.3.7 - concordance: 5.0.4 - debug: 4.3.4 - local-pkg: 0.4.3 - magic-string: 0.30.0 - pathe: 1.1.0 - picocolors: 1.0.0 - std-env: 3.3.2 - strip-literal: 1.0.1 - tinybench: 2.5.0 - tinypool: 0.5.0 - vite: 4.3.8(@types/node@18.16.14) - vite-node: 0.32.0(@types/node@18.16.14) - why-is-node-running: 2.2.2 - transitivePeerDependencies: - - less - - lightningcss - - sass - - stylus - - sugarss - - supports-color - - terser - dev: true - /vitest@0.32.0(jsdom@22.0.0): resolution: {integrity: sha512-SW83o629gCqnV3BqBnTxhB10DAwzwEx3z+rqYZESehUB+eWsJxwcBQx7CKy0otuGMJTYh7qCVuUX23HkftGl/Q==} engines: {node: '>=v14.18.0'} @@ -34312,7 +34412,7 @@ packages: strip-literal: 1.0.1 tinybench: 2.5.0 tinypool: 0.5.0 - vite: 4.5.0(@types/node@18.16.14) + vite: 4.3.8(@types/node@18.16.14) vite-node: 0.32.0(@types/node@18.16.14) why-is-node-running: 2.2.2 transitivePeerDependencies: