diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 411c2cc1056..a99e541d3d3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -164,7 +164,7 @@ Use the `--ui` flag to run the tests interactively. 1. If you haven't already, install the project dependencies using ```bash - pnpm + pnpm install ``` 1. To start the documentation application in dev mode run diff --git a/docs/data/toolpad/studio/concepts/page-properties.md b/docs/data/toolpad/studio/concepts/page-properties.md index 6715abeb5ea..83838dbe6bc 100644 --- a/docs/data/toolpad/studio/concepts/page-properties.md +++ b/docs/data/toolpad/studio/concepts/page-properties.md @@ -27,12 +27,20 @@ You can override this setting for any page using the `toolpad-display` query par - `?toolpad-display=shell` - Same as App shell mode. - `?toolpad-display=standalone` - Same as No shell mode. -{{"component": "modules/components/DocsImage.tsx", "src": "/static/toolpad/docs/studio/concepts/page-properties/display-mode-override.png", "alt": "No shell display mode ", "caption": "Overriding the display mode", "indent": 1}} +{{"component": "modules/components/DocsImage.tsx", "src": "/static/toolpad/docs/studio/concepts/page-properties/display-mode-override.png", "alt": "No shell display mode", "caption": "Overriding the display mode", "indent": 1}} :::info See the how-to guide on [how to embed Toolpad Studio pages](/toolpad/studio/how-to-guides/embed-pages/) using the display mode property. ::: +## Max width + +Toolpad pages use a Material UI [Container](https://mui.com/material-ui/react-container/) as their top-level element. You can control the maximum width of this container in the page properties. + +{{"component": "modules/components/DocsImage.tsx", "src": "/static/toolpad/docs/studio/concepts/page-properties/max-width.png", "alt": "Page container max width", "caption": "Setting the maximum width of the page container", "zoom": false, "width": 306}} + +Available values are **xs**, **sm**, **md**, **lg**, **xl**, or **None** to conform to the available width in the window. + ## Page parameters Page parameters allow you to pass external data into the Toolpad Studio page state via the URL query parameters. diff --git a/docs/public/static/toolpad/docs/studio/concepts/page-properties/max-width.png b/docs/public/static/toolpad/docs/studio/concepts/page-properties/max-width.png new file mode 100644 index 00000000000..16f2a8034f5 Binary files /dev/null and b/docs/public/static/toolpad/docs/studio/concepts/page-properties/max-width.png differ diff --git a/docs/schemas/v1/definitions.json b/docs/schemas/v1/definitions.json index da934ac16e5..7d3fe8fd921 100644 --- a/docs/schemas/v1/definitions.json +++ b/docs/schemas/v1/definitions.json @@ -377,6 +377,11 @@ } ], "description": "Display mode of the page. This can also be set at runtime with the toolpad-display query parameter" + }, + "maxWidth": { + "type": "string", + "enum": ["xs", "sm", "md", "lg", "xl", "none"], + "description": "Top level element of the page." } }, "additionalProperties": false, diff --git a/package.json b/package.json index 944f450b52c..b5b79f8a71f 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ }, "devDependencies": { "@argos-ci/core": "1.5.5", - "@mui/monorepo": "github:mui/material-ui#beef28264938138411e13e074dc4c60d498afbf8", + "@mui/monorepo": "github:mui/material-ui#fd764b5578ef6688f3c9c1a12d986de9d938de8d", "@mui/x-charts": "7.3.2", "@next/eslint-plugin-next": "14.2.3", "@playwright/test": "1.43.1", @@ -91,7 +91,7 @@ "lodash": "4.17.21", "semver": "7.6.0", "tsup": "8.0.2", - "tsx": "4.7.3", + "tsx": "4.9.3", "vitest": "1.6.0", "yargs": "17.7.2", "zod": "3.22.4", diff --git a/packages/toolpad-studio-components/src/DataGrid.tsx b/packages/toolpad-studio-components/src/DataGrid.tsx index ce94983bc03..0e34070a08a 100644 --- a/packages/toolpad-studio-components/src/DataGrid.tsx +++ b/packages/toolpad-studio-components/src/DataGrid.tsx @@ -457,6 +457,7 @@ export interface SerializableGridColumn dateFormat?: DateFormat; dateTimeFormat?: DateFormat; codeComponent?: string; + visible?: boolean; } export type SerializableGridColumns = SerializableGridColumn[]; @@ -1281,6 +1282,10 @@ const DataGridComponent = React.forwardRef(function DataGridComponent( const appHost = useAppHost(); const isProPlan = appHost.plan === 'pro'; + const columnVisibilityModel = Object.fromEntries( + (columnsProp ?? []).map((column) => [column.field, column.visible ?? true]), + ); + return ( @@ -1308,7 +1313,10 @@ const DataGridComponent = React.forwardRef(function DataGridComponent( getRowId={getRowId} onRowSelectionModelChange={onSelectionModelChange} rowSelectionModel={selectionModel} - initialState={{ pinnedColumns: { right: [ACTIONS_COLUMN_FIELD] } }} + initialState={{ + columns: { columnVisibilityModel }, + pinnedColumns: { right: [ACTIONS_COLUMN_FIELD] }, + }} disableAggregation={!isProPlan} disableRowGrouping={!isProPlan} {...props} diff --git a/packages/toolpad-studio-runtime/src/appDom.ts b/packages/toolpad-studio-runtime/src/appDom.ts index e5b5a479eb8..df0e86856c4 100644 --- a/packages/toolpad-studio-runtime/src/appDom.ts +++ b/packages/toolpad-studio-runtime/src/appDom.ts @@ -98,6 +98,10 @@ export interface ConnectionNode

extends AppDomNodeBase { export type PageDisplayMode = 'standalone' | 'shell'; +export type ContainerWidth = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'none'; + +export const DEFAULT_CONTAINER_WIDTH = 'lg' satisfies ContainerWidth; + export interface PageNode extends AppDomNodeBase { readonly type: 'page'; readonly attributes: { @@ -107,6 +111,7 @@ export interface PageNode extends AppDomNodeBase { readonly module?: string; readonly display?: PageDisplayMode; readonly displayName?: string; + readonly maxWidth?: ContainerWidth; readonly authorization?: { readonly allowAll?: boolean; readonly allowedRoles?: string[]; diff --git a/packages/toolpad-studio-runtime/src/jsBrowserRuntime.tsx b/packages/toolpad-studio-runtime/src/jsBrowserRuntime.tsx index d0280a8802b..7e2a92fb385 100644 --- a/packages/toolpad-studio-runtime/src/jsBrowserRuntime.tsx +++ b/packages/toolpad-studio-runtime/src/jsBrowserRuntime.tsx @@ -3,6 +3,10 @@ import { TOOLPAD_LOADING_MARKER } from './jsRuntime'; import { BindingEvaluationResult, JsRuntime } from './types'; function getIframe(): HTMLIFrameElement { + if (typeof window === 'undefined') { + throw new Error(`Can't use browser JS runtime outside of a browser`); + } + const iframeId = 'toolpad-browser-runtime-iframe'; let iframe = document.getElementById(iframeId) as HTMLIFrameElement; @@ -90,11 +94,8 @@ function createBrowserRuntime(): JsRuntime { }; } -const browserRuntime = typeof window === 'undefined' ? null : createBrowserRuntime(); +const browserRuntime = createBrowserRuntime(); export function getBrowserRuntime(): JsRuntime { - if (!browserRuntime) { - throw new Error(`Can't use browser JS runtime outside of a browser`); - } return browserRuntime; } diff --git a/packages/toolpad-studio/src/components/NoSsr.tsx b/packages/toolpad-studio/src/components/NoSsr.tsx index 9498824195c..72acf7c37c2 100644 --- a/packages/toolpad-studio/src/components/NoSsr.tsx +++ b/packages/toolpad-studio/src/components/NoSsr.tsx @@ -1,38 +1,16 @@ import * as React from 'react'; - -function subscribe() { - return () => {}; -} - -function getSnapshot() { - return false; -} - -function getServerSnapshot() { - return true; -} - -/** - * Returns true when serverside rendering, or when hydrating. - */ -export function useIsSsr(defer: boolean = false): boolean { - const isSsrInitialValue = React.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot); - const [isSsr, setIsSsr] = React.useState(defer ? true : isSsrInitialValue); - React.useEffect(() => setIsSsr(false), []); - return isSsr; -} +import useSsr from '@toolpad/utils/hooks/useSsr'; export interface NoSsrProps { children?: React.ReactNode; fallback?: React.ReactNode; - defer?: boolean; } /** * Alternative version of MUI NoSsr that avoids state updates during layout effects. */ -export default function NoSsr({ children, defer, fallback = null }: NoSsrProps) { - const isSsr = useIsSsr(defer); +export default function NoSsr({ children, fallback = null }: NoSsrProps) { + const isSsr = useSsr(); return {isSsr ? fallback : children}; } diff --git a/packages/toolpad-studio/src/runtime/AppLayout.tsx b/packages/toolpad-studio/src/runtime/AppLayout.tsx index cd869296e44..e806d32f796 100644 --- a/packages/toolpad-studio/src/runtime/AppLayout.tsx +++ b/packages/toolpad-studio/src/runtime/AppLayout.tsx @@ -24,6 +24,16 @@ import { AuthContext } from './useAuth'; import productIconDark from '../../public/product-icon-dark.svg'; import productIconLight from '../../public/product-icon-light.svg'; +function interopNextImg(img: any) { + if (typeof img.src === 'string') { + return img.src; + } + return img; +} + +const productIconDarkSrc = interopNextImg(productIconDark); +const productIconLightSrc = interopNextImg(productIconLight); + const TOOLPAD_DISPLAY_MODE_URL_PARAM = 'toolpad-display'; // Url params that will be carried over to the next page @@ -54,7 +64,7 @@ function AppPagesNavigation({ const theme = useTheme(); - const productIcon = theme.palette.mode === 'dark' ? productIconDark : productIconLight; + const productIcon = theme.palette.mode === 'dark' ? productIconDarkSrc : productIconLightSrc; return ( ; Component: ToolpadComponent; + staticProps?: Record; } -function RenderedNodeContent({ node, childNodeGroups, Component }: RenderedNodeContentProps) { +function RenderedNodeContent({ + node, + childNodeGroups, + Component, + staticProps, +}: RenderedNodeContentProps) { const { setControlledBinding } = React.useContext(SetBindingContext) ?? {}; invariant(setControlledBinding, 'Node must be rendered in a RuntimeScoped context'); @@ -954,7 +963,10 @@ function RenderedNodeContent({ node, childNodeGroups, Component }: RenderedNodeC } if (typeof hookResult[propName] === 'undefined' && argType) { - hookResult[propName] = getArgTypeDefaultValue(argType); + const defaultValue = getArgTypeDefaultValue(argType); + if (typeof defaultValue !== 'undefined') { + hookResult[propName] = getArgTypeDefaultValue(argType); + } } } @@ -1079,13 +1091,14 @@ function RenderedNodeContent({ node, childNodeGroups, Component }: RenderedNodeC const props: Record = React.useMemo(() => { return { + ...staticProps, ...boundProps, ...onChangeHandlers, ...eventHandlers, ...layoutElementProps, ...reactChildren, }; - }, [boundProps, eventHandlers, layoutElementProps, onChangeHandlers, reactChildren]); + }, [staticProps, boundProps, eventHandlers, layoutElementProps, onChangeHandlers, reactChildren]); const previousProps = React.useRef>(props); const [hasSetInitialBindings, setHasSetInitialBindings] = React.useState(false); @@ -1207,24 +1220,19 @@ function RenderedNodeContent({ node, childNodeGroups, Component }: RenderedNodeC } interface PageRootProps { + maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'none'; children?: React.ReactNode; } const PageRoot = React.forwardRef(function PageRoot( - { children, ...props }: PageRootProps, + { children, maxWidth, ...props }: PageRootProps, ref, ) { + const containerMaxWidth = + maxWidth === 'none' ? false : maxWidth ?? appDom.DEFAULT_CONTAINER_WIDTH; return ( - - + + {children} @@ -1237,6 +1245,11 @@ const PageRootComponent = createComponent(PageRoot, { type: 'element', control: { type: 'slots' }, }, + maxWidth: { + type: 'string', + enum: ['xs', 'sm', 'md', 'lg', 'xl', 'none'], + control: { type: 'ToggleButtons' }, + }, }, }); @@ -1411,6 +1424,13 @@ function RenderedLowCodePage({ page }: RenderedLowCodePageProps) { const applicationVm = useApplicationVm(onApplicationVmUpdate); + const pageProps = React.useMemo( + () => ({ + maxWidth: page.attributes.maxWidth, + }), + [page.attributes.maxWidth], + ); + return ( @@ -1418,6 +1438,7 @@ function RenderedLowCodePage({ page }: RenderedLowCodePageProps) { node={page} childNodeGroups={{ children }} Component={PageRootComponent} + staticProps={pageProps} /> {queries.map((node) => ( @@ -1709,7 +1730,8 @@ export function ToolpadAppRoutes(props: ToolpadAppProps) { } export default function ToolpadApp(props: ToolpadAppProps) { - return ( + const isSsr = useSsr(); + return isSsr ? null : ( ( } interface IToolpadProject { - options: ToolpadProjectOptions; + options: { dev: boolean }; getRoot(): string; loadDom(): Promise; saveDom(dom: appDom.AppDom): Promise; diff --git a/packages/toolpad-studio/src/server/EnvManager.ts b/packages/toolpad-studio/src/server/EnvManager.ts index 5f6336504dc..08975efd5fa 100644 --- a/packages/toolpad-studio/src/server/EnvManager.ts +++ b/packages/toolpad-studio/src/server/EnvManager.ts @@ -5,10 +5,10 @@ import { Emitter } from '@toolpad/utils/events'; import chalk from 'chalk'; import { truncate } from '@toolpad/utils/strings'; import { Awaitable } from '@toolpad/utils/types'; -import { ProjectEvents, ToolpadProjectOptions } from '../types'; +import { ProjectEvents } from '../types'; interface IToolpadProject { - options: ToolpadProjectOptions; + options: { dev: boolean }; events: Emitter; getRoot(): string; } diff --git a/packages/toolpad-studio/src/server/FunctionsManager.ts b/packages/toolpad-studio/src/server/FunctionsManager.ts index 0c94d231b60..9f9ee8a38f0 100644 --- a/packages/toolpad-studio/src/server/FunctionsManager.ts +++ b/packages/toolpad-studio/src/server/FunctionsManager.ts @@ -20,7 +20,7 @@ import * as url from 'node:url'; import type { GridRowId } from '@mui/x-data-grid'; import invariant from 'invariant'; import { Awaitable } from '@toolpad/utils/types'; -import { ProjectEvents, ToolpadProjectOptions } from '../types'; +import { ProjectEvents } from '../types'; import * as functionsRuntime from './functionsRuntime'; import type { ExtractTypesParams, IntrospectionResult } from './functionsTypesWorker'; import { format } from '../utils/prettier'; @@ -99,7 +99,7 @@ function formatError(esbuildError: esbuild.Message): Error { } interface IToolpadProject { - options: ToolpadProjectOptions; + options: { dev: boolean }; events: Emitter; getRoot(): string; getOutputFolder(): string; diff --git a/packages/toolpad-studio/src/server/functionsRuntime.ts b/packages/toolpad-studio/src/server/functionsRuntime.ts index 9957baa1b6e..ea4f08ae295 100644 --- a/packages/toolpad-studio/src/server/functionsRuntime.ts +++ b/packages/toolpad-studio/src/server/functionsRuntime.ts @@ -12,7 +12,9 @@ async function loadExports(filePath: string): Promise> { const content = await fs.readFile(importFileUrl, 'utf-8'); const hash = crypto.createHash('md5').update(content).digest('hex'); importFileUrl.searchParams.set('hash', hash); - const exports = await import(importFileUrl.href); + // `webpackIgnore: true` is used to instruct webpack in Next.js to use the native import() function + // instead of trying to bundle the dynamic import() call + const exports = await import(/* webpackIgnore: true */ importFileUrl.href); return new Map(Object.entries(exports)); } diff --git a/packages/toolpad-studio/src/server/localMode.ts b/packages/toolpad-studio/src/server/localMode.ts index d6e9827f2b1..611f28ba07c 100644 --- a/packages/toolpad-studio/src/server/localMode.ts +++ b/packages/toolpad-studio/src/server/localMode.ts @@ -104,7 +104,7 @@ function getComponentFilePath(componentsFolder: string, componentName: string): return path.join(componentsFolder, `${componentName}.tsx`); } -function getOutputFolder(root: string) { +export function getOutputFolder(root: string) { return path.join(root, '.generated'); } @@ -453,6 +453,7 @@ function expandFromDom( content: undefinedWhenEmpty(expandChildren(children.children || [], dom)), queries: undefinedWhenEmpty(expandChildren(children.queries || [], dom)), display: node.attributes.display, + maxWidth: node.attributes.maxWidth, authorization: node.attributes.authorization, }, } satisfies Page; @@ -633,6 +634,7 @@ function createPageDomFromPageFile(pageName: string, pageFile: Page): appDom.App title: pageFileSpec.title, parameters: pageFileSpec.parameters?.map(({ name, value }) => [name, value]) || [], display: pageFileSpec.display || undefined, + maxWidth: pageFileSpec.maxWidth || undefined, authorization: pageFileSpec.authorization || undefined, }, }); diff --git a/packages/toolpad-studio/src/server/runtimeRpcServer.ts b/packages/toolpad-studio/src/server/runtimeRpcServer.ts index ad5f3820c9f..9f2f2a1d0a1 100644 --- a/packages/toolpad-studio/src/server/runtimeRpcServer.ts +++ b/packages/toolpad-studio/src/server/runtimeRpcServer.ts @@ -1,8 +1,14 @@ import { createMethod, MethodResolvers } from './rpc'; -import type { ToolpadProject } from './localMode'; +import type FunctionsManager from './FunctionsManager'; +import type DataManager from './DataManager'; + +interface IToolpadProject { + functionsManager: FunctionsManager; + dataManager: DataManager; +} // Methods exposed to the Toolpad Studio runtime -export function createRpcServer(project: ToolpadProject) { +export function createRpcServer(project: IToolpadProject) { return { introspectDataProvider: createMethod( ({ params }) => { diff --git a/packages/toolpad-studio/src/server/schema.ts b/packages/toolpad-studio/src/server/schema.ts index a46a4457212..ab0eff08d19 100644 --- a/packages/toolpad-studio/src/server/schema.ts +++ b/packages/toolpad-studio/src/server/schema.ts @@ -356,6 +356,17 @@ export const pageSchema = toolpadObjectSchema( .describe( 'Display mode of the page. This can also be set at runtime with the toolpad-display query parameter', ), + maxWidth: z + .union([ + z.literal('xs'), + z.literal('sm'), + z.literal('md'), + z.literal('lg'), + z.literal('xl'), + z.literal('none'), + ]) + .optional() + .describe('Top level element of the page.'), }), ); diff --git a/packages/toolpad-studio/src/toolpad/AppEditor/PageEditor/PageOptionsPanel.tsx b/packages/toolpad-studio/src/toolpad/AppEditor/PageEditor/PageOptionsPanel.tsx index 0709c57a71e..11d59834ab7 100644 --- a/packages/toolpad-studio/src/toolpad/AppEditor/PageEditor/PageOptionsPanel.tsx +++ b/packages/toolpad-studio/src/toolpad/AppEditor/PageEditor/PageOptionsPanel.tsx @@ -27,6 +27,15 @@ const PAGE_DISPLAY_OPTIONS: { value: appDom.PageDisplayMode; label: string }[] = { value: 'standalone', label: 'No shell' }, ]; +const PAGE_CONTAINER_WIDTH_OPTIONS: { value: appDom.ContainerWidth; label: string }[] = [ + { value: 'xs', label: 'xs' }, + { value: 'sm', label: 'sm' }, + { value: 'md', label: 'md' }, + { value: 'lg', label: 'lg' }, + { value: 'xl', label: 'xl' }, + { value: 'none', label: 'None' }, +]; + export default function PageOptionsPanel() { const { nodeId: pageNodeId } = usePageEditorState(); const { dom } = useAppState(); @@ -37,6 +46,7 @@ export default function PageOptionsPanel() { const appNode = appDom.getApp(dom); const page = appDom.getNode(dom, pageNodeId, 'page'); + const handleDisplayModeChange = React.useCallback( (event: React.MouseEvent, newValue: appDom.PageDisplayMode) => { domApi.update((draft) => @@ -46,6 +56,15 @@ export default function PageOptionsPanel() { [domApi, page], ); + const handleContainerModeChange = React.useCallback( + (event: React.MouseEvent, newValue: appDom.ContainerWidth) => { + domApi.update((draft) => + appDom.setNodeNamespacedProp(draft, page, 'attributes', 'maxWidth', newValue), + ); + }, + [domApi, page], + ); + const availableRoles = React.useMemo(() => { return new Map(appNode.attributes?.authorization?.roles?.map((role) => [role.name, role])); }, [appNode]); @@ -121,6 +140,34 @@ export default function PageOptionsPanel() { +

+ Container width + + Set the maximum width of the top-level container. + + } + > + + {PAGE_CONTAINER_WIDTH_OPTIONS.map((option) => { + return ( + + {option.label} + + ); + })} + + +
Authorization diff --git a/packages/toolpad-studio/src/toolpad/propertyControls/GridColumns.tsx b/packages/toolpad-studio/src/toolpad/propertyControls/GridColumns.tsx index f76b33ed94d..8b16a5046e6 100644 --- a/packages/toolpad-studio/src/toolpad/propertyControls/GridColumns.tsx +++ b/packages/toolpad-studio/src/toolpad/propertyControls/GridColumns.tsx @@ -260,6 +260,24 @@ function GridColumnEditor({ ) : null} + + + handleColumnChange({ + ...editedColumn, + visible: event.target.checked, + }) + } + /> + } + label="Visible" + /> + + {}; +} + +function getSnapshot() { + return false; +} + +function getServerSnapshot() { + return true; +} + +/** + * Returns true when serverside rendering, or when hydrating. + */ +export default function useSsr() { + return React.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot); +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a03a702c506..08f9831d940 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -42,8 +42,8 @@ importers: specifier: 8.0.2 version: 8.0.2(typescript@5.4.5) tsx: - specifier: 4.7.3 - version: 4.7.3 + specifier: 4.9.3 + version: 4.9.3 vitest: specifier: 1.6.0 version: 1.6.0(@types/node@20.12.8)(jsdom@24.0.0) @@ -61,8 +61,8 @@ importers: specifier: 1.5.5 version: 1.5.5 '@mui/monorepo': - specifier: github:mui/material-ui#beef28264938138411e13e074dc4c60d498afbf8 - version: github.com/mui/material-ui/beef28264938138411e13e074dc4c60d498afbf8 + specifier: github:mui/material-ui#fd764b5578ef6688f3c9c1a12d986de9d938de8d + version: github.com/mui/material-ui/fd764b5578ef6688f3c9c1a12d986de9d938de8d '@mui/x-charts': specifier: 7.3.2 version: 7.3.2(@mui/material@5.15.16)(react-dom@18.2.0)(react@18.2.0) @@ -12377,6 +12377,7 @@ packages: /queue-tick@1.0.1: resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} + requiresBuild: true /quick-lru@4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} @@ -14188,12 +14189,12 @@ packages: typescript: 5.4.5 dev: true - /tsx@4.7.3: - resolution: {integrity: sha512-+fQnMqIp/jxZEXLcj6WzYy9FhcS5/Dfk8y4AtzJ6ejKcKqmfTF8Gso/jtrzDggCF2zTU20gJa6n8XqPYwDAUYQ==} + /tsx@4.9.3: + resolution: {integrity: sha512-czVbetlILiyJZI5zGlj2kw9vFiSeyra9liPD4nG+Thh4pKTi0AmMEQ8zdV/L2xbIVKrIqif4sUNrsMAOksx9Zg==} engines: {node: '>=18.0.0'} hasBin: true dependencies: - esbuild: 0.19.12 + esbuild: 0.20.2 get-tsconfig: 4.7.3 optionalDependencies: fsevents: 2.3.3 @@ -15161,10 +15162,10 @@ packages: resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} dev: false - github.com/mui/material-ui/beef28264938138411e13e074dc4c60d498afbf8: - resolution: {tarball: https://codeload.github.com/mui/material-ui/tar.gz/beef28264938138411e13e074dc4c60d498afbf8} + github.com/mui/material-ui/fd764b5578ef6688f3c9c1a12d986de9d938de8d: + resolution: {tarball: https://codeload.github.com/mui/material-ui/tar.gz/fd764b5578ef6688f3c9c1a12d986de9d938de8d} name: '@mui/monorepo' - version: 6.0.0-alpha.4 + version: 6.0.0-alpha.5 requiresBuild: true dependencies: '@googleapis/sheets': 5.0.5 diff --git a/renovate.json b/renovate.json index c30114ac763..ab2efedaf8e 100644 --- a/renovate.json +++ b/renovate.json @@ -55,7 +55,7 @@ }, { "groupName": "react-router", - "matchPackageNames": ["react-router", "react-router-dom"], + "matchPackageNames": ["react-router", "react-router-dom"] }, { "groupName": "Tanstack",