diff --git a/.babelrc.json b/.babelrc.json index d301495..57caf34 100644 --- a/.babelrc.json +++ b/.babelrc.json @@ -1,4 +1,7 @@ { - "presets": ["@babel/preset-env", "@babel/preset-react"], + "presets": [ + "@babel/preset-env", + ["@babel/preset-react", { "runtime": "automatic" }] + ], "plugins": ["@babel/plugin-transform-runtime"] } diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index af2917b..b72a65d 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -15,7 +15,7 @@ jobs: strategy: matrix: - node-version: [14.x] + node-version: [18.x] steps: - uses: actions/checkout@v2 diff --git a/demo/UncontrolledFormExamples.jsx b/demo/UncontrolledFormExamples.jsx index b49eaab..154bd3f 100644 --- a/demo/UncontrolledFormExamples.jsx +++ b/demo/UncontrolledFormExamples.jsx @@ -466,7 +466,7 @@ function FormArray() { const newElement = useCallback(() => { setValue((prevValue) => [...prevValue, Math.max(...prevValue) + 1]); - }); + }, [setValue]); if (refresh) { return <>; diff --git a/demo/demo.jsx b/demo/demo.jsx index 0567aeb..59e071a 100644 --- a/demo/demo.jsx +++ b/demo/demo.jsx @@ -1,7 +1,7 @@ /* eslint-disable import/max-dependencies */ /* eslint-disable no-console */ import React from 'react'; -import ReactDOM from 'react-dom'; +import { createRoot } from 'react-dom/client'; // eslint-disable-next-line import/no-unresolved import { StatefulTabs, Pagination, ToastsContainer } from '../dist/main'; @@ -18,7 +18,9 @@ import { UncontrolledFormExamples } from './UncontrolledFormExamples'; import { ToastsWithMessageFormatterExamples } from './ToastsWithMessageFormatterExamples'; import { ToastWithCustomState } from './ToastWithCustomState'; -ReactDOM.render( +const root = createRoot(document.getElementById('root')); + +root.render(
-
, - document.getElementById('root') + ); // eslint-disable-next-line no-undef diff --git a/jest.config.js b/jest.config.js index e9e2fa5..39f0d2f 100644 --- a/jest.config.js +++ b/jest.config.js @@ -2,6 +2,7 @@ /* eslint-disable import/no-commonjs */ /* eslint-disable import/unambiguous */ module.exports = { + testEnvironment: 'jsdom', moduleNameMapper: { 'js-var-type': 'js-var-type/dist/main.cjs', }, diff --git a/package.json b/package.json index 298dca9..8193de1 100644 --- a/package.json +++ b/package.json @@ -30,15 +30,17 @@ "author": "João Vitor ", "license": "MIT", "devDependencies": { - "@babel/core": "^7.12.10", + "@babel/core": "^7.28.4", "@babel/plugin-transform-runtime": "^7.12.10", "@babel/preset-env": "^7.12.11", "@babel/preset-react": "^7.12.10", "@babel/runtime": "^7.12.5", - "@rollup/plugin-babel": "^5.2.2", - "@rollup/plugin-node-resolve": "^11.0.1", + "@pmmmwh/react-refresh-webpack-plugin": "^0.6.1", + "@rollup/plugin-babel": "^6.1.0", + "@rollup/plugin-commonjs": "^28.0.7", + "@rollup/plugin-node-resolve": "^15.3.1", "babel-jest": "^26.6.3", - "babel-loader": "^8.2.2", + "babel-loader": "^9.2.1", "eslint": "^7.16.0", "eslint-import-resolver-webpack": "^0.13.0", "eslint-plugin-import": "^2.22.1", @@ -49,21 +51,21 @@ "lodash-es": "^4.17.20", "prettier": "^2.2.1", "prop-types": "^15.7.2", - "react": "^17.0.1", - "react-dom": "^17.0.1", - "react-hot-loader": "^4.13.0", - "rollup": "^2.35.1", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-refresh": "^0.14.2", + "rollup": "^4.52.4", "standard-version": "^9.0.0", - "webpack": "^5.33.2", - "webpack-cli": "^4.6.0", - "webpack-dev-server": "^3.11.2" + "webpack": "^5.102.1", + "webpack-cli": "^5.1.4", + "webpack-dev-server": "^4.15.2" }, "peerDependencies": { "@babel/runtime": "^7.12.5", "js-var-type": "^0.2.6", "lodash-es": "^4.17.20", "prop-types": "^15.7.2", - "react": "^17.0.1", - "react-dom": "^17.0.1" + "react": "^18.3.1", + "react-dom": "^18.3.1" } } diff --git a/rollup.config.js b/rollup.config.js index 733d52c..6109a4e 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,17 +1,21 @@ /* eslint-disable import/no-anonymous-default-export */ /* eslint-disable import/no-default-export */ -import resolve from '@rollup/plugin-node-resolve'; -import babel from '@rollup/plugin-babel'; +const resolve = require('@rollup/plugin-node-resolve'); +const commonjs = require('@rollup/plugin-commonjs'); +const babel = require('@rollup/plugin-babel'); -export default { +module.exports = { input: 'src/index.js', plugins: [ resolve({ extensions: ['.mjs', '.js', '.json', '.jsx'], }), + commonjs(), babel({ babelHelpers: 'runtime', - exclude: /node_modules/, // only transpile our source code + exclude: /node_modules/, + extensions: ['.js', '.jsx'], + presets: ['@babel/preset-env', ['@babel/preset-react', { runtime: 'automatic' }]], }), ], output: { diff --git a/webpack.config.js b/webpack.config.js index 179a9f2..4e16437 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,6 +1,6 @@ 'use strict'; -const webpack = require('webpack'); +const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin'); module.exports = [ { @@ -28,14 +28,35 @@ module.exports = [ { entry: './demo/demo.jsx', output: { - path: `${__dirname}/demo`, filename: 'demo.js', + path: `${__dirname}/demo`, + publicPath: '/demo/', }, devServer: { - contentBase: `${__dirname}/demo`, + static: { + directory: `${__dirname}/demo`, + }, hot: true, + port: 8080, + }, + module: { + rules: [ + { + test: /\.(js|jsx)$/, + exclude: /node_modules/, + use: { + loader: 'babel-loader', + options: { + plugins: [require.resolve('react-refresh/babel')], + }, + }, + }, + ], + }, + resolve: { + extensions: ['*', '.js', '.jsx'], }, - plugins: [new webpack.HotModuleReplacementPlugin()], + plugins: [new ReactRefreshWebpackPlugin()], }, { entry: './docs/docs.jsx', @@ -45,7 +66,6 @@ module.exports = [ }, }, ].map((setup) => ({ - ...setup, module: { rules: [ { @@ -60,4 +80,5 @@ module.exports = [ resolve: { extensions: ['*', '.js', '.jsx'], }, + ...setup, }));