From 6f12ed31125f1d7377476c09822598ea4f1a6f4e Mon Sep 17 00:00:00 2001 From: germanocaumo Date: Tue, 30 Jun 2026 18:54:29 -0300 Subject: [PATCH] fix: add tree-shakeable package exports Build an ESM output alongside the existing UMD bundle and expose it through the package export map. Add per-component exports while preserving legacy dist/components paths for CommonJS consumers. Also avoid the Modal component importing Button through the root barrel and move tooltip runtime packages into dependencies. --- package-lock.json | 194 ++-------------------------- package.json | 201 +++++++++++++++++++++++++++-- src/components/Modal/component.tsx | 2 +- tsconfig.esm.json | 18 +++ 4 files changed, 219 insertions(+), 196 deletions(-) create mode 100644 tsconfig.esm.json diff --git a/package-lock.json b/package-lock.json index 02790b6..57136b1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,11 +6,12 @@ "packages": { "": { "name": "@mconf/bbb-ui-components-react", - "version": "2.1.0", + "version": "2.2.0", "license": "LGPL-3.0", "dependencies": { - "@mui/icons-material": "^6.1.4", - "react-modal": ">=3.16.1" + "@tippyjs/react": "^4.2.6", + "react-modal": ">=3.16.1", + "tippy.js": "^6.3.7" }, "devDependencies": { "@babel/cli": "^7.25.6", @@ -56,17 +57,14 @@ "peerDependencies": { "@emotion/react": "^11.13.0", "@emotion/styled": "^11.13.0", - "@mui/icons-material": "^7.3.1", - "@mui/material": "^6.1.4", - "@mui/styles": "^6.4.8", - "@tippyjs/react": "^4.2.6", + "@mui/icons-material": "^6.1.4 || ^7.0.0", + "@mui/material": "^6.1.4 || ^7.0.0", "prop-types": "^15.8.1", "react": "^18.2.0", "react-dom": "^18.2.0", "react-icons": "^5.5.0", "react-modal": ">=3.16.1", - "styled-components": ">=5.3.0", - "tippy.js": "^6.3.7" + "styled-components": ">=5.3.0" } }, "node_modules/@adobe/css-tools": { @@ -3347,7 +3345,8 @@ "@types/react": { "optional": true } - } + }, + "peer": true }, "node_modules/@mui/material": { "version": "6.5.0", @@ -3462,48 +3461,6 @@ } } }, - "node_modules/@mui/styles": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@mui/styles/-/styles-6.5.0.tgz", - "integrity": "sha512-DeE/S/l6adnMpKfgx6l7UaQwYuf+gD4FCp6En3Vdg2Er+CTArj4DcHNFVzb8HZ2nNqACwmSm16/P08m1vAxv2w==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.26.0", - "@emotion/hash": "^0.9.2", - "@mui/private-theming": "^6.4.9", - "@mui/types": "~7.2.24", - "@mui/utils": "^6.4.9", - "clsx": "^2.1.1", - "csstype": "^3.1.3", - "hoist-non-react-statics": "^3.3.2", - "jss": "^10.10.0", - "jss-plugin-camel-case": "^10.10.0", - "jss-plugin-default-unit": "^10.10.0", - "jss-plugin-global": "^10.10.0", - "jss-plugin-nested": "^10.10.0", - "jss-plugin-props-sort": "^10.10.0", - "jss-plugin-rule-value-function": "^10.10.0", - "jss-plugin-vendor-prefixer": "^10.10.0", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", - "react": "^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@mui/system": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.5.0.tgz", @@ -3641,7 +3598,6 @@ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "license": "MIT", - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -4456,7 +4412,6 @@ "resolved": "https://registry.npmjs.org/@tippyjs/react/-/react-4.2.6.tgz", "integrity": "sha512-91RicDR+H7oDSyPycI13q3b7o4O60wa2oRbjlz2fyRLmHImc4vyDwuUP8NtZaN0VARJY5hybvDYrFzhY9+Lbyw==", "license": "MIT", - "peer": true, "dependencies": { "tippy.js": "^6.3.1" }, @@ -7249,17 +7204,6 @@ "postcss-value-parser": "^4.0.2" } }, - "node_modules/css-vendor": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz", - "integrity": "sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.8.3", - "is-in-browser": "^1.0.2" - } - }, "node_modules/css-what": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", @@ -9968,13 +9912,6 @@ "node": ">=10.18" } }, - "node_modules/hyphenate-style-name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz", - "integrity": "sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==", - "license": "BSD-3-Clause", - "peer": true - }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -10484,13 +10421,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-in-browser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", - "integrity": "sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g==", - "license": "MIT", - "peer": true - }, "node_modules/is-inside-container": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", @@ -10982,104 +10912,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/jss": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss/-/jss-10.10.0.tgz", - "integrity": "sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.3.1", - "csstype": "^3.0.2", - "is-in-browser": "^1.1.3", - "tiny-warning": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/jss" - } - }, - "node_modules/jss-plugin-camel-case": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.10.0.tgz", - "integrity": "sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.3.1", - "hyphenate-style-name": "^1.0.3", - "jss": "10.10.0" - } - }, - "node_modules/jss-plugin-default-unit": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.10.0.tgz", - "integrity": "sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0" - } - }, - "node_modules/jss-plugin-global": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.10.0.tgz", - "integrity": "sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0" - } - }, - "node_modules/jss-plugin-nested": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.10.0.tgz", - "integrity": "sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0", - "tiny-warning": "^1.0.2" - } - }, - "node_modules/jss-plugin-props-sort": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.10.0.tgz", - "integrity": "sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0" - } - }, - "node_modules/jss-plugin-rule-value-function": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.10.0.tgz", - "integrity": "sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0", - "tiny-warning": "^1.0.2" - } - }, - "node_modules/jss-plugin-vendor-prefixer": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.10.0.tgz", - "integrity": "sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.3.1", - "css-vendor": "^2.0.8", - "jss": "10.10.0" - } - }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -14280,13 +14112,6 @@ "dev": true, "license": "MIT" }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", - "license": "MIT", - "peer": true - }, "node_modules/tinyglobby": { "version": "0.2.17", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", @@ -14329,7 +14154,6 @@ "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.7.tgz", "integrity": "sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==", "license": "MIT", - "peer": true, "dependencies": { "@popperjs/core": "^2.9.0" } diff --git a/package.json b/package.json index c0e1029..14d6c78 100644 --- a/package.json +++ b/package.json @@ -7,12 +7,191 @@ }, "main": "dist/components/index.js", "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", + "require": "./dist/components/index.js", + "default": "./dist/components/index.js" + }, + "./Accordion": { + "types": "./dist/types/components/Accordion/index.d.ts", + "import": "./dist/esm/components/Accordion/index.js", + "require": "./dist/components/Accordion.js", + "default": "./dist/components/Accordion.js" + }, + "./Button": { + "types": "./dist/types/components/Button/index.d.ts", + "import": "./dist/esm/components/Button/index.js", + "require": "./dist/components/Button.js", + "default": "./dist/components/Button.js" + }, + "./Checkbox": { + "types": "./dist/types/components/Checkbox/index.d.ts", + "import": "./dist/esm/components/Checkbox/index.js", + "require": "./dist/components/Checkbox.js", + "default": "./dist/components/Checkbox.js" + }, + "./Divider": { + "types": "./dist/types/components/Divider/index.d.ts", + "import": "./dist/esm/components/Divider/index.js", + "require": "./dist/components/Divider.js", + "default": "./dist/components/Divider.js" + }, + "./Hint": { + "types": "./dist/types/components/Hint/index.d.ts", + "import": "./dist/esm/components/Hint/index.js", + "require": "./dist/components/Hint.js", + "default": "./dist/components/Hint.js" + }, + "./Modal": { + "types": "./dist/types/components/Modal/index.d.ts", + "import": "./dist/esm/components/Modal/index.js", + "require": "./dist/components/Modal.js", + "default": "./dist/components/Modal.js" + }, + "./Navigation": { + "types": "./dist/types/components/Navigation/index.d.ts", + "import": "./dist/esm/components/Navigation/index.js", + "require": "./dist/components/Navigation.js", + "default": "./dist/components/Navigation.js" + }, + "./Search": { + "types": "./dist/types/components/Search/index.d.ts", + "import": "./dist/esm/components/Search/index.js", + "require": "./dist/components/Search.js", + "default": "./dist/components/Search.js" + }, + "./Select": { + "types": "./dist/types/components/Select/index.d.ts", + "import": "./dist/esm/components/Select/index.js", + "require": "./dist/components/Select.js", + "default": "./dist/components/Select.js" + }, + "./Spinner": { + "types": "./dist/types/components/Spinner/index.d.ts", + "import": "./dist/esm/components/Spinner/index.js", + "require": "./dist/components/Spinner.js", + "default": "./dist/components/Spinner.js" + }, + "./TextAreaInput": { + "types": "./dist/types/components/TextAreaInput/index.d.ts", + "import": "./dist/esm/components/TextAreaInput/index.js", + "require": "./dist/components/TextAreaInput.js", + "default": "./dist/components/TextAreaInput.js" + }, + "./TextInput": { + "types": "./dist/types/components/TextInput/index.d.ts", + "import": "./dist/esm/components/TextInput/index.js", + "require": "./dist/components/TextInput.js", + "default": "./dist/components/TextInput.js" + }, + "./Toggle": { + "types": "./dist/types/components/Toggle/index.d.ts", + "import": "./dist/esm/components/Toggle/index.js", + "require": "./dist/components/Toggle.js", + "default": "./dist/components/Toggle.js" + }, + "./Typography": { + "types": "./dist/types/components/Typography/index.d.ts", + "import": "./dist/esm/components/Typography/index.js", + "require": "./dist/components/Typography.js", + "default": "./dist/components/Typography.js" + }, + "./dist/components": { + "types": "./dist/types/index.d.ts", + "require": "./dist/components/index.js", + "default": "./dist/components/index.js" + }, + "./dist/components/index": { + "types": "./dist/types/index.d.ts", + "require": "./dist/components/index.js", + "default": "./dist/components/index.js" + }, + "./dist/components/index.js": { + "types": "./dist/types/index.d.ts", + "require": "./dist/components/index.js", + "default": "./dist/components/index.js" + }, + "./dist/components/*": { + "types": "./dist/types/components/*/index.d.ts", + "require": "./dist/components/*.js", + "default": "./dist/components/*.js" + }, + "./dist/components/*.js": { + "types": "./dist/types/components/*/index.d.ts", + "require": "./dist/components/*.js", + "default": "./dist/components/*.js" + }, + "./package.json": "./package.json" + }, + "typesVersions": { + "*": { + "dist/components": [ + "dist/types/index.d.ts" + ], + "dist/components/index": [ + "dist/types/index.d.ts" + ], + "dist/components/index.js": [ + "dist/types/index.d.ts" + ], + "dist/components/*": [ + "dist/types/components/*/index.d.ts" + ], + "dist/components/*.js": [ + "dist/types/components/*/index.d.ts" + ], + "Accordion": [ + "dist/types/components/Accordion/index.d.ts" + ], + "Button": [ + "dist/types/components/Button/index.d.ts" + ], + "Checkbox": [ + "dist/types/components/Checkbox/index.d.ts" + ], + "Divider": [ + "dist/types/components/Divider/index.d.ts" + ], + "Hint": [ + "dist/types/components/Hint/index.d.ts" + ], + "Modal": [ + "dist/types/components/Modal/index.d.ts" + ], + "Navigation": [ + "dist/types/components/Navigation/index.d.ts" + ], + "Search": [ + "dist/types/components/Search/index.d.ts" + ], + "Select": [ + "dist/types/components/Select/index.d.ts" + ], + "Spinner": [ + "dist/types/components/Spinner/index.d.ts" + ], + "TextAreaInput": [ + "dist/types/components/TextAreaInput/index.d.ts" + ], + "TextInput": [ + "dist/types/components/TextInput/index.d.ts" + ], + "Toggle": [ + "dist/types/components/Toggle/index.d.ts" + ], + "Typography": [ + "dist/types/components/Typography/index.d.ts" + ] + } + }, "files": [ "dist", "types" ], "scripts": { - "build": "webpack --mode production", + "build": "webpack --mode production && tsc -p tsconfig.esm.json", "lint": "eslint 'src/**/*.{js,ts,tsx}' --quiet", "start": "webpack serve --mode development", "storybook": "storybook dev -p 6006", @@ -36,17 +215,14 @@ "peerDependencies": { "@emotion/react": "^11.13.0", "@emotion/styled": "^11.13.0", - "@mui/material": "^6.1.4", - "@mui/styles": "^6.4.8", - "@mui/icons-material": "^7.3.1", - "@tippyjs/react": "^4.2.6", + "@mui/material": "^6.1.4 || ^7.0.0", + "@mui/icons-material": "^6.1.4 || ^7.0.0", "prop-types": "^15.8.1", "react": "^18.2.0", "react-dom": "^18.2.0", "react-icons": "^5.5.0", "react-modal": ">=3.16.1", - "styled-components": ">=5.3.0", - "tippy.js": "^6.3.7" + "styled-components": ">=5.3.0" }, "devDependencies": { "@babel/cli": "^7.25.6", @@ -90,7 +266,12 @@ "webpack-dev-server": "5.0.4" }, "dependencies": { - "@mui/icons-material": "^6.1.4", - "react-modal": ">=3.16.1" - } + "@tippyjs/react": "^4.2.6", + "react-modal": ">=3.16.1", + "tippy.js": "^6.3.7" + }, + "module": "dist/esm/index.js", + "sideEffects": [ + "**/*.css" + ] } diff --git a/src/components/Modal/component.tsx b/src/components/Modal/component.tsx index 244d6fc..b1d9d8b 100644 --- a/src/components/Modal/component.tsx +++ b/src/components/Modal/component.tsx @@ -5,7 +5,7 @@ import { BBBTypography } from '../Typography'; import { MdClose } from 'react-icons/md'; import { BBBDivider } from '../Divider'; import { ModalProps } from './types'; -import { BBButton } from '../..'; +import { BBButton } from '../Button'; /** * A versatile BBBModal component diff --git a/tsconfig.esm.json b/tsconfig.esm.json new file mode 100644 index 0000000..1c31ef1 --- /dev/null +++ b/tsconfig.esm.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "outDir": "./dist/esm", + "module": "ESNext", + "target": "ES5", + "jsx": "react", + "rootDir": "./src", + "noImplicitAny": true, + "moduleResolution": "bundler", + "declaration": false, + "skipLibCheck": true, + "emitDeclarationOnly": false, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "sourceMap": false + }, + "exclude": ["**/*.stories.tsx", "**/*.stories.ts", "node_modules"] +}