Skip to content

Commit 1a53f00

Browse files
committed
feat: added support to optionally generate entire styles including preflight and base css
1 parent 2e7c98c commit 1a53f00

File tree

3 files changed

+31
-15
lines changed

3 files changed

+31
-15
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"author": "Suraj Air",
66
"license": "BSD-3-Clause",
77
"homepage": "https://chaibuilder.com",
8-
"version": "1.2.4",
8+
"version": "1.2.5",
99
"type": "module",
1010
"repository": {
1111
"type": "git",

src/Preview.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@ function Preview() {
1212

1313
useEffect(() => {
1414
(async () => {
15-
const styles = await getStylesForBlocks(blocks, brandingOptions);
15+
const styles = await getStylesForBlocks(blocks, brandingOptions, "", true);
1616
setStyles(styles);
1717
})();
1818
}, [blocks, brandingOptions]);
1919

2020
return (
2121
<>
2222
<style>{allStyles}</style>
23-
<RenderChaiBlocks blocks={blocks} />
23+
<RenderChaiBlocks classPrefix={""} blocks={blocks} />
2424
</>
2525
);
2626
}

src/render/getTailwindCSS.ts

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import defaultTheme from "tailwindcss/defaultTheme";
55
import twForms from "@tailwindcss/forms";
66
import twTypography from "@tailwindcss/typography";
77
import twAspectRatio from "@tailwindcss/aspect-ratio";
8-
import twLineClamp from "@tailwindcss/line-clamp";
98
import { ChaiBlock } from "../core/types/ChaiBlock.ts";
109
import { addPrefixToClasses, ChaiPageData, getBrandingClasses } from "./functions.ts";
1110
import { STYLES_KEY } from "../core/constants/CONTROLS.ts";
@@ -16,6 +15,7 @@ export async function getTailwindCSS(
1615
markupString: string[],
1716
safelist: string[] = [],
1817
prefix: string = "c-",
18+
includeBaseStyles: boolean = false,
1919
) {
2020
const primary = get(options, "primaryColor", "#000");
2121
const secondary = get(options, "secondaryColor", "#ccc");
@@ -31,7 +31,6 @@ export async function getTailwindCSS(
3131
set(colors, "secondary.DEFAULT", secondary);
3232
const tailwind = createTailwindcss({
3333
tailwindConfig: {
34-
prefix,
3534
darkMode: "class",
3635
safelist,
3736
theme: {
@@ -46,19 +45,22 @@ export async function getTailwindCSS(
4645
colors,
4746
},
4847
},
49-
plugins: [twForms, twTypography, twAspectRatio, twLineClamp],
50-
corePlugins: { preflight: false },
48+
plugins: [twForms, twTypography, twAspectRatio],
49+
corePlugins: { preflight: includeBaseStyles },
50+
...(prefix ? { prefix: `${prefix}` } : {}),
5151
},
5252
});
5353

5454
const css = await tailwind.generateStylesFromContent(
55-
` @tailwind components;
55+
` ${includeBaseStyles ? "@tailwind base;" : ""}
56+
@tailwind components;
5657
@tailwind utilities;`,
5758
markupString,
5859
);
59-
return `${css} .${prefix}bg-clip-text{background-clip: text;-webkit-background-clip: text;} h1,h2,h3,h4,h5,h6{font-family: "${headingFont}",${defaultTheme.fontFamily.sans.join(
60-
", ",
61-
)};}`;
60+
return `${css}
61+
.${prefix}bg-clip-text{background-clip: text;-webkit-background-clip: text;} h1,h2,h3,h4,h5,h6{font-family: "${headingFont}",${defaultTheme.fontFamily.sans.join(
62+
", ",
63+
)};}`;
6264
}
6365

6466
const addPrefixToBlockStyles = (blocks: ChaiBlock[], prefix: string) => {
@@ -75,23 +77,37 @@ const addPrefixToBlockStyles = (blocks: ChaiBlock[], prefix: string) => {
7577
});
7678
};
7779

78-
export const getBlocksTailwindCSS = (blocks: ChaiBlock[], brandingOptions: any, prefix: string = "c-") => {
80+
export const getBlocksTailwindCSS = (
81+
blocks: ChaiBlock[],
82+
brandingOptions: any,
83+
prefix: string = "c-",
84+
includeBaseStyles: boolean = false,
85+
) => {
7986
const brandingClasses = getBrandingClasses(brandingOptions, prefix);
8087
return getTailwindCSS(
8188
brandingOptions,
8289
[replace(JSON.stringify(addPrefixToBlockStyles(blocks, prefix)), /#styles:/g, "")],
8390
brandingClasses.split(" ").concat(`${prefix}inline-block`, `${prefix}w-full`, `${prefix}h-full`),
91+
prefix,
92+
includeBaseStyles,
8493
);
8594
};
86-
export const getStylesForPageData = async (pageData: ChaiPageData, classPrefix: string = "c-"): Promise<string> => {
95+
96+
export const getStylesForPageData = async (
97+
pageData: ChaiPageData,
98+
classPrefix: string = "c-",
99+
includeBaseStyles: boolean = false,
100+
): Promise<string> => {
87101
//TODO: add support for subpages
88102
const blocks = pageData.page.blocks;
89-
return await getBlocksTailwindCSS(blocks, pageData.project.brandingOptions, classPrefix);
103+
return await getBlocksTailwindCSS(blocks, pageData.project.brandingOptions, classPrefix, includeBaseStyles);
90104
};
105+
91106
export const getStylesForBlocks = async (
92107
blocks: ChaiBlock[],
93108
brandingOptions: BrandingOptions,
94109
classPrefix: string = "c-",
110+
includeBaseStyles: boolean = false,
95111
): Promise<string> => {
96-
return await getBlocksTailwindCSS(blocks, brandingOptions, classPrefix);
112+
return await getBlocksTailwindCSS(blocks, brandingOptions, classPrefix, includeBaseStyles);
97113
};

0 commit comments

Comments
 (0)