From 2d1f3539b08f4db331c88aebbc44d5db85bc497e Mon Sep 17 00:00:00 2001 From: Diego Dias Date: Sun, 7 Jan 2024 22:41:36 -0300 Subject: [PATCH] perf(component treeshaking): updated config and build files to treeshake single components Each component now is treeshshaken individually into the final build BREAKING CHANGE: How import components #1197 --- .gitignore | 3 ++- .vscode/settings.json | 1 - package.json | 10 +++++++- src/components/List/List.tsx | 2 +- src/index.ts | 45 +----------------------------------- src/theme.ts | 2 +- tsconfig.json | 2 +- 7 files changed, 15 insertions(+), 50 deletions(-) diff --git a/.gitignore b/.gitignore index 386ee0621..5fa97a25d 100644 --- a/.gitignore +++ b/.gitignore @@ -13,4 +13,5 @@ tsconfig.tsbuildinfo yarn-debug.log* yarn-error.log* dist -.contentlayer \ No newline at end of file +.contentlayer +.yalc diff --git a/.vscode/settings.json b/.vscode/settings.json index ea86fa934..c19a02149 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -13,7 +13,6 @@ ".vercel/": true, "build/": true, "coverage/": true, - "lib/": true, "node_modules": true, "storybook-static/": true, "tsconfig.tsbuildinfo": true, diff --git a/package.json b/package.json index 775fcabb1..425ebc8d6 100644 --- a/package.json +++ b/package.json @@ -15,8 +15,16 @@ "bugs": "https://github.com/themesberg/flowbite-react/issues", "license": "MIT", "files": [ - "./lib/" + "lib" ], + "exports": { + "./*": { + "import": "./lib/esm/components/*/index.js", + "require": "./lib/cjs/components/*/index.js", + "default": "./lib/esm/components/*/index.js", + "types": "./lib/esm/components/*/index.d.ts" + } + }, "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", "types": "./lib/esm/index.d.ts", diff --git a/src/components/List/List.tsx b/src/components/List/List.tsx index 6a05641f1..b735323c9 100644 --- a/src/components/List/List.tsx +++ b/src/components/List/List.tsx @@ -1,6 +1,6 @@ import type { ComponentProps, FC, PropsWithChildren } from 'react'; import { twMerge } from 'tailwind-merge'; -import type { FlowbiteStateColors } from '../..'; +import type { FlowbiteStateColors } from '../Flowbite'; import { mergeDeep } from '../../helpers/merge-deep'; import { getTheme } from '../../theme-store'; import type { DeepPartial } from '../../types'; diff --git a/src/index.ts b/src/index.ts index 44e136c14..e6b50e7ce 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,48 +1,5 @@ -export * from './components/Accordion'; -export * from './components/Alert'; -export * from './components/Avatar'; -export * from './components/Badge'; -export * from './components/Banner'; -export * from './components/Blockquote'; -export * from './components/Breadcrumb'; -export * from './components/Button'; -export * from './components/Card'; -export * from './components/Carousel'; -export * from './components/Checkbox'; -export * from './components/DarkThemeToggle'; -export * from './components/Datepicker'; -export * from './components/Dropdown'; -export * from './components/FileInput'; -export * from './components/FloatingLabel'; -export * from './components/Flowbite'; -export type { CustomFlowbiteTheme } from './components/Flowbite/FlowbiteTheme'; -export * from './components/Footer'; -export * from './components/HelperText'; -export * from './components/Kbd'; -export * from './components/Label'; -export * from './components/List'; -export * from './components/ListGroup'; -export * from './components/Modal'; -export * from './components/Navbar'; -export * from './components/Pagination'; -export * from './components/Progress'; -export * from './components/Radio'; -export * from './components/RangeSlider'; -export * from './components/Rating'; -export * from './components/Select'; -export * from './components/Sidebar'; -export * from './components/Spinner'; -export * from './components/Table'; -export * from './components/Tabs'; -export * from './components/TextInput'; -export * from './components/Textarea'; -export * from './components/ThemeModeScript'; -export * from './components/Timeline'; -export * from './components/Toast'; -export * from './components/ToggleSwitch'; -export * from './components/Tooltip'; - export * from './hooks/use-theme-mode'; export * from './theme'; export { getTheme, getThemeMode } from './theme-store'; +export type { CustomFlowbiteTheme } from './components/Flowbite/FlowbiteTheme'; diff --git a/src/theme.ts b/src/theme.ts index 800223c4f..a9ffa60c7 100644 --- a/src/theme.ts +++ b/src/theme.ts @@ -1,4 +1,4 @@ -import type { FlowbiteTheme } from '.'; +import type { FlowbiteTheme } from './components/Flowbite'; import { accordionTheme } from './components/Accordion/theme'; import { alertTheme } from './components/Alert/theme'; import { avatarTheme } from './components/Avatar/theme'; diff --git a/tsconfig.json b/tsconfig.json index cf1da7c65..1c172ea1b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,7 +6,7 @@ "forceConsistentCasingInFileNames": true, "incremental": true, "isolatedModules": true, - "jsx": "preserve", + "jsx": "react-jsx", "lib": ["DOM", "DOM.Iterable", "ESNext"], "module": "ESNext", "moduleResolution": "node",