Skip to content

Commit f6427c5

Browse files
authored
Merge pull request #529 from buildo/esm2
2 parents 1487798 + b00d4c8 commit f6427c5

28 files changed

+1857
-1566
lines changed

packages/bento-design-system/babel-jest.config.js packages/bento-design-system/babel-jest.config.cjs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const baseConfig = require("./babel.config");
1+
const baseConfig = require("./babel.config.cjs");
22

33
module.exports = {
44
...baseConfig,

packages/bento-design-system/jest.config.js

-9
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"preset": "ts-jest",
3+
"testEnvironment": "jsdom",
4+
"transform": {
5+
"\\.tsx?$": ["babel-jest", { "configFile": "./babel-jest.config.cjs" }]
6+
},
7+
"setupFilesAfterEnv": ["<rootDir>/test/setupTests.ts"]
8+
}

packages/bento-design-system/jsxShim.ts

-3
This file was deleted.

packages/bento-design-system/package.json

+22-8
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,27 @@
22
"name": "@buildo/bento-design-system",
33
"version": "0.16.4",
44
"description": "The buildo DS",
5-
"main": "lib/index.js",
5+
"main": "lib/index.cjs",
6+
"module": "lib/index.js",
67
"files": [
78
"lib"
89
],
910
"sideEffects": [
10-
"*.css",
11-
"*.css.ts"
11+
"global.css.ts",
12+
"reset.css.ts",
13+
"defaultTheme.css.ts"
1214
],
15+
"exports": {
16+
".": {
17+
"node": "./lib/index.cjs",
18+
"import": "./lib/index.js",
19+
"require": "./lib/index.cjs"
20+
},
21+
"./index.css": "./lib/index.css",
22+
"./defaultTheme.css": "./lib/defaultTheme.css"
23+
},
24+
"types": "lib/index.d.ts",
25+
"type": "module",
1326
"scripts": {
1427
"build": "tsup --minify --clean",
1528
"prepublishOnly": "pnpm build",
@@ -20,8 +33,8 @@
2033
"prepublish": "pnpm test && pnpm build",
2134
"test": "jest",
2235
"lint-staged": "lint-staged",
23-
"playroom-start": "playroom start",
24-
"playroom-build": "playroom build",
36+
"playroom-start": "playroom start --config playroom.config.cjs",
37+
"playroom-build": "playroom build --config playroom.config.cjs",
2538
"start": "tsup --watch",
2639
"check-circular-deps": "madge --circular src"
2740
},
@@ -84,15 +97,15 @@
8497
"@vanilla-extract/recipes": "0.2.5",
8598
"@vanilla-extract/sprinkles": "1.5.1",
8699
"clsx": "^1.2.1",
100+
"deepmerge-ts": "^4.3.0",
87101
"react-cool-dimensions": "^2.0.7",
88102
"react-dropzone": "^14.2.3",
89103
"react-input-mask": "^2.0.4",
90-
"react-keyed-flatten-children": "^1.3.0",
104+
"react-is": "18.2.0",
91105
"react-select": "^5.4.0",
92106
"react-table": "^7.8.0",
93107
"react-use": "^17.4.0",
94108
"recharts": "^2.1.16",
95-
"ts-deepmerge": "^2.0.3",
96109
"ts-pattern": "^3.3.5"
97110
},
98111
"devDependencies": {
@@ -116,6 +129,7 @@
116129
"@types/react": "18.0.28",
117130
"@types/react-dom": "18.0.11",
118131
"@types/react-input-mask": "2.0.5",
132+
"@types/react-is": "^17.0.3",
119133
"@types/react-table": "7.7.14",
120134
"@vanilla-extract/babel-plugin": "1.1.7",
121135
"@vanilla-extract/esbuild-plugin": "2.1.0",
@@ -142,7 +156,7 @@
142156
"style-loader": "3.3.1",
143157
"ts-jest": "28.0.8",
144158
"ts-loader": "9.3.1",
145-
"tsup": "6.4.0",
159+
"tsup": "6.6.3",
146160
"typescript": "4.7.4",
147161
"webpack": "5.74.0",
148162
"webpack-cli": "4.10.0"

packages/bento-design-system/playroom.config.js packages/bento-design-system/playroom.config.cjs

+4-3
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ const { ProvidePlugin } = require("webpack");
33
const { ESBuildMinifyPlugin } = require("esbuild-loader");
44

55
module.exports = {
6-
components: "../storybook/stories/index.tsx",
7-
typeScriptFiles: ["../storybook/stories/index.tsx"],
6+
components: "./src/index.ts",
87
outputPath: "./dist/playroom",
98
title: "Bento 🍱",
109
widths: [320, 425, 768, 1024, 1440, 2560],
@@ -34,7 +33,9 @@ module.exports = {
3433
{
3534
test: /\.css$/,
3635
use: ["style-loader", "css-loader"],
37-
exclude: /node_modules/,
36+
exclude: (modulePath) => {
37+
return /node_modules/.test(modulePath) && !modulePath.includes("@fontsource");
38+
},
3839
},
3940
],
4041
},

packages/bento-design-system/playroom/FrameComponent.tsx

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
1-
import { Box, BentoProvider } from "../../storybook/stories";
1+
import * as React from "react";
2+
import { Box, BentoProvider } from "../src";
3+
import "../src/reset.css";
4+
import "../src/global.css";
5+
import "../src/defaultTheme.css";
6+
import "@fontsource/ibm-plex-sans/400.css";
7+
import "@fontsource/ibm-plex-sans/500.css";
8+
import "@fontsource/ibm-plex-sans/600.css";
29
import { defaultMessages } from "../../storybook/stories/defaultMessages";
310

411
export default function FrameComponent({ theme, children }) {

packages/bento-design-system/src/BentoConfigContext.tsx

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { createContext, useContext } from "react";
22
import * as defaultConfigs from "./util/defaultConfigs";
33
import type { BentoConfig, PartialBentoConfig } from "./BentoConfig";
4-
import merge from "ts-deepmerge";
4+
import { deepmerge } from "deepmerge-ts";
55
import { Children } from "./util/Children";
66

77
const BentoConfigContext = createContext<BentoConfig>(defaultConfigs);
@@ -22,8 +22,9 @@ export function BentoConfigProvider({
2222
// So we retrieve the parent config via useBentoConfig(), which will default to the default config
2323
// in case this is the top level provider.
2424
const parentConfig = useBentoConfig();
25+
2526
return (
26-
<BentoConfigContext.Provider value={merge(parentConfig, config)}>
27+
<BentoConfigContext.Provider value={deepmerge(parentConfig, config) as BentoConfig}>
2728
{children}
2829
</BentoConfigContext.Provider>
2930
);

packages/bento-design-system/src/Box/Box.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { extractAtomsFromProps } from "@dessert-box/core";
22
import * as resetStyles from "../reset.css";
33
import { forwardRef, createElement } from "react";
4-
import clsx, { ClassValue } from "clsx";
4+
import { ClassValue, clsx } from "clsx";
55
import { useSprinkles } from "../SprinklesContext";
66
import { SprinklesFn } from "../util/ConfigurableTypes";
77

packages/bento-design-system/src/DateField/DateField.tsx

+3-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import { useField } from "@react-aria/label";
99
import { Input } from "./Input";
1010
import { IconMinus } from "../Icons";
1111
import { dateFieldRecipe } from "./DateField.css";
12-
import clsx from "clsx";
1312
import { LocalizedString } from "../util/LocalizedString";
1413
import { useBentoConfig } from "../BentoConfigContext";
1514
import { getReadOnlyBackgroundStyle } from "../Field/utils";
@@ -159,7 +158,7 @@ export function DateField(props: Props) {
159158
paddingX={inputConfig.paddingX}
160159
paddingY={inputConfig.paddingY}
161160
background={inputConfig.background.default}
162-
className={clsx(
161+
className={[
163162
inputRecipe({ validation: validationState || "notSet" }),
164163
bodyRecipe({
165164
color: props.disabled ? "disabled" : "primary",
@@ -169,8 +168,8 @@ export function DateField(props: Props) {
169168
dateFieldRecipe({ validation: validationState || "notSet", isFocused }),
170169
{
171170
readOnly: props.readOnly,
172-
}
173-
)}
171+
},
172+
]}
174173
style={getReadOnlyBackgroundStyle(inputConfig)}
175174
disabled={props.disabled}
176175
>

packages/bento-design-system/src/Layout/Columns.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ReactChild, ReactElement } from "react";
2-
import flattenChildren from "react-keyed-flatten-children";
2+
import { flattenChildren } from "../util/flattenChildren";
33
import { BoxProps, Box } from "../Box/Box";
44
import { ResponsiveSpace } from "../internal";
55
import { normalizeResponsiveValue, OptionalResponsiveValue } from "../internal/sprinkles.css";

packages/bento-design-system/src/Layout/Inline.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import flattenChildren from "react-keyed-flatten-children";
1+
import { flattenChildren } from "../util/flattenChildren";
22
import { Box, AsProp } from "../Box/Box";
33
import { ResponsiveSpace } from "../internal";
44
import { Children } from "../util/Children";

packages/bento-design-system/src/Layout/Stack.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Fragment } from "react";
2-
import flattenChildren from "react-keyed-flatten-children";
2+
import { flattenChildren } from "../util/flattenChildren";
33
import { Divider } from "../Divider/Divider";
44
import { ResponsiveAlign, alignToFlexAlign } from "../util/align";
55
import { childKey } from "../util/childKey";

packages/bento-design-system/src/Layout/Tiles.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import flattenChildren from "react-keyed-flatten-children";
1+
import { flattenChildren } from "../util/flattenChildren";
22
import { Children } from "..";
33
import { mobileColumns, tabletColumns, desktopColumns, wideColumns } from "./Tiles.css";
44
import { ResponsiveAlignY, alignYToFlexAlign } from "../util/align";

packages/bento-design-system/src/Modal/Modal.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { useOverlay, usePreventScroll, useModal } from "@react-aria/overlays";
1414
import { useDialog } from "@react-aria/dialog";
1515
import { FocusScope } from "@react-aria/focus";
1616
import { modalRecipe, underlay, modalBody } from "./Modal.css";
17-
import useKeyPressEvent from "react-use/lib/useKeyPressEvent";
17+
import { useKeyPressEvent } from "react-use";
1818
import { useDefaultMessages } from "../util/useDefaultMessages";
1919
import { IconButton } from "../IconButton/IconButton";
2020
import { createPortal } from "../util/createPortal";

packages/bento-design-system/src/SelectField/components.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import {
3030
} from "..";
3131
import { singleValue, placeholder, menu, control } from "./SelectField.css";
3232
import { bodyRecipe } from "../Typography/Body/Body.css";
33-
import clsx from "clsx";
33+
import { clsx } from "clsx";
3434
import type { SelectOption } from "./SelectField";
3535
import { InternalList } from "../List/InternalList";
3636
import { ListItem } from "../List/ListItem";
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// NOTE(gabro): Adapted from react-keyed-flatten-children, due to lack of ESM build
2+
// Released under the MIT license (https://github.com/grrowl/react-keyed-flatten-children/blob/master/LICENSE)
3+
4+
/* Returns React children into an array, flattening fragments. */
5+
import { ReactNode, ReactElement, Children, isValidElement, cloneElement } from "react";
6+
import { isFragment } from "react-is";
7+
8+
type ReactChild = ReactElement | string | number;
9+
10+
export function flattenChildren(
11+
children: ReactNode,
12+
depth: number = 0,
13+
keys: (string | number)[] = []
14+
): ReactChild[] {
15+
return Children.toArray(children).reduce((acc: ReactChild[], node, nodeIndex) => {
16+
if (isFragment(node)) {
17+
acc.push.apply(
18+
acc,
19+
flattenChildren(node.props.children, depth + 1, keys.concat(node.key || nodeIndex))
20+
);
21+
} else {
22+
if (isValidElement(node)) {
23+
acc.push(
24+
cloneElement(node, {
25+
key: keys.concat(String(node.key)).join("."),
26+
})
27+
);
28+
} else if (typeof node === "string" || typeof node === "number") {
29+
acc.push(node);
30+
}
31+
}
32+
return acc;
33+
}, []);
34+
}

packages/bento-design-system/src/util/withBentoConfig.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export function withBentoConfig<Props>(
88
return (props: Props) => {
99
return (
1010
<BentoConfigProvider value={config}>
11-
<Component {...props} />{" "}
11+
<Component {...props} />
1212
</BentoConfigProvider>
1313
);
1414
};

packages/bento-design-system/tsup.config.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ import { vanillaExtractPlugin } from "@vanilla-extract/esbuild-plugin";
33

44
export default defineConfig({
55
entry: ["src/index.ts", "src/defaultTheme.ts"],
6+
sourcemap: true,
67
outDir: "lib",
8+
format: ["esm", "cjs"],
79
esbuildPlugins: [vanillaExtractPlugin()],
810
dts: true,
9-
// See https://esbuild.github.io/content-types/#auto-import-for-jsx
10-
inject: ["./jsxShim.ts"],
1111
noExternal: ["@fontsource"],
1212
});

packages/storybook/stories/index.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import "@buildo/bento-design-system/lib/index.css";
2-
import "@buildo/bento-design-system/lib/defaultTheme.css";
1+
import "@buildo/bento-design-system/index.css";
2+
import "@buildo/bento-design-system/defaultTheme.css";
33
import "./theme.css";
44
import {
55
createBentoProvider,

packages/website/docs/02-Getting Started/01-quick-start.mdx

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ Add the Bento package to your project:
1717
Here's how an hello world looks like:
1818

1919
```ts
20-
import "@buildo/bento-design-system/lib/index.css";
21-
import "@buildo/bento-design-system/lib/defaultTheme.css";
20+
import "@buildo/bento-design-system/index.css";
21+
import "@buildo/bento-design-system/defaultTheme.css";
2222
import { BentoProvider, Title } from "@buildo/bento-design-system";
2323
import { defaultMessages } from "./defaultMessages";
2424

packages/website/docs/02-Getting Started/03-project-structure.mdx

+1-1
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ export default defineConfig({
103103
// Include here the css files coming from external dependencies, which we
104104
// recommend to bundle in your design system package.
105105
noExternal: [
106-
"@buildo/bento-design-system/lib/index.css",
106+
"@buildo/bento-design-system/index.css",
107107
// e.g. here's how to include fonts from Fontsource, a popular library for self-hosting fonts
108108
// "@fontsource",
109109

packages/website/docs/03-Customization/01-theming.mdx

+2-2
Original file line numberDiff line numberDiff line change
@@ -89,13 +89,13 @@ This option is available but not recommended, as it's easy to forget or misspell
8989
You can either import the default theme and then override some of the default values using an additional stylesheet, or completely replace `defaultTheme.css` with your own stylesheet defining a value for each of the Bento variables.
9090

9191
```ts title="my-project/design-system/src/index.tsx"
92-
import "@buildo/bento-design-system/lib/index.css";
92+
import "@buildo/bento-design-system/index.css";
9393
import "./theme.css";
9494
```
9595

9696
```css title="my-project/design-system/src/theme.css"
9797
/* Import this file if you want to start from the defaultTheme and only override some variables */
98-
@import "@buildo/bento-design-system/lib/defaultTheme.css";
98+
@import "@buildo/bento-design-system/defaultTheme.css";
9999

100100
:root {
101101
/* change the brand primary color */

packages/website/src/components/HomepageFeatures.tsx

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import React from "react";
2-
import clsx from "clsx";
32
import styles from "./HomepageFeatures.module.css";
43

54
type FeatureItem = {
@@ -44,7 +43,7 @@ const FeatureList: FeatureItem[] = [
4443

4544
function Feature({ title, image, description }: FeatureItem) {
4645
return (
47-
<div className={clsx("col col--4")}>
46+
<div className={"col col--4"}>
4847
<div className="text--center padding-vert--md">
4948
<img className={styles.featureSvg} alt={title} src={image} />
5049
</div>

packages/website/src/css/custom.css

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
@import "@buildo/bento-design-system/lib/index.css";
2-
@import "@buildo/bento-design-system/lib/defaultTheme.css";
1+
@import "@buildo/bento-design-system/index.css";
2+
@import "@buildo/bento-design-system/defaultTheme.css";
33

44
/**
55
* Any CSS included here will be global. The classic template

packages/website/src/pages/index.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React from "react";
2-
import clsx from "clsx";
2+
import { clsx } from "clsx";
33
import Layout from "@theme/Layout";
44
import Link from "@docusaurus/Link";
55
import useDocusaurusContext from "@docusaurus/useDocusaurusContext";

0 commit comments

Comments
 (0)