diff --git a/babel.config.js b/babel.config.js index 2de50cb6..702e3f9f 100644 --- a/babel.config.js +++ b/babel.config.js @@ -17,6 +17,7 @@ module.exports = function(api) { ]; const plugins = [ + ...(isTest ? [] : ['babel-plugin-react-compiler']), ...(isTest ? [] : [['@emotion/babel-plugin', { sourceMap: false, autoLabel: 'dev-only', diff --git a/package-lock.json b/package-lock.json index f51da66d..6b904636 100644 --- a/package-lock.json +++ b/package-lock.json @@ -54,6 +54,7 @@ "babel-jest": "^30.0.0", "babel-loader": "^10.0.0", "babel-plugin-codegen": "^4.0.0", + "babel-plugin-react-compiler": "^1.0.0", "babel-plugin-react-docgen": "^3.1.0", "chalk": "^4.1.2", "chokidar-cli": "^3.0.0", @@ -12693,6 +12694,16 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/babel-plugin-react-compiler": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-react-compiler/-/babel-plugin-react-compiler-1.0.0.tgz", + "integrity": "sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.0" + } + }, "node_modules/babel-plugin-react-docgen": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/babel-plugin-react-docgen/-/babel-plugin-react-docgen-3.2.0.tgz", @@ -32448,7 +32459,7 @@ "@dnd-kit/utilities": "^3.2.2", "@drawbotics/icons": "file:../icons", "@drawbotics/react-drylus": "file:../react-drylus", - "@drawbotics/use-screen-size": "^3.1.1", + "@drawbotics/use-screen-size": "^3.1.2", "@drawbotics/vanilla-drylus": "file:../vanilla-drylus", "@emotion/css": "^11.13.5", "hast-util-to-string": "^1.0.1", diff --git a/package.json b/package.json index 8c7feefe..d60ceb05 100644 --- a/package.json +++ b/package.json @@ -80,6 +80,7 @@ "babel-jest": "^30.0.0", "babel-loader": "^10.0.0", "babel-plugin-codegen": "^4.0.0", + "babel-plugin-react-compiler": "^1.0.0", "babel-plugin-react-docgen": "^3.1.0", "chalk": "^4.1.2", "chokidar-cli": "^3.0.0", diff --git a/packages/react-drylus/src/base/DrylusProvider.tsx b/packages/react-drylus/src/base/DrylusProvider.tsx index 400fbdaf..1055e8d3 100644 --- a/packages/react-drylus/src/base/DrylusProvider.tsx +++ b/packages/react-drylus/src/base/DrylusProvider.tsx @@ -1,11 +1,20 @@ -import React from 'react'; +import React, { lazy, Suspense } from 'react'; -import { AlertsProvider } from '../components'; -import { AlertsProviderProps } from '../components'; import { ThemeProviderProps } from './ThemeProvider'; import { ThemeProvider } from './ThemeProvider'; -export interface DrylusProviderProps extends ThemeProviderProps, AlertsProviderProps {} +const LazyAlertsProvider = lazy(() => + import('../components/AlertsProvider').then((m) => ({ default: m.AlertsProvider })), +); + +export interface DrylusProviderProps extends ThemeProviderProps { + /** + * If true, the AlertsProvider is included, enabling the useAlert() hook. + * When false (default), AlertsProvider and its dependencies are excluded from the bundle. + * @default false + */ + enableAlerts?: boolean; +} export const DrylusProvider = ({ children, @@ -13,6 +22,7 @@ export const DrylusProvider = ({ className, baseColor, injectGlobal, + enableAlerts = false, }: DrylusProviderProps) => { return ( - {children} + {enableAlerts ? ( + + {children} + + ) : ( + children + )} ); };