react18-tools/esbuild-plugin-react18-css

View on GitHub
docs/index.html

Summary

Maintainability
Test Coverage
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Code Documentation</title><meta name="description" content="Documentation for Code Documentation"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="assets/style.css"/><link rel="stylesheet" href="assets/highlight.css"/><script defer src="assets/main.js"></script><script async src="assets/icons.js" id="tsd-icons-script"></script><script async src="assets/search.js" id="tsd-search-script"></script><script async src="assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><div class="table-cell" id="tsd-search" data-base="."><div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="assets/icons.svg#icon-search"></use></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div><div class="field"><div id="tsd-toolbar-links"></div></div><ul class="results"><li class="state loading">Preparing search index...</li><li class="state failure">The search index is not available</li></ul><a href="index.html" class="title">Code Documentation</a></div><div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="assets/icons.svg#icon-menu"></use></svg></a></div></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><h2>Code Documentation</h2></div><div class="tsd-panel tsd-typography"><a id="md:esbuild-plugin-react18-css" class="tsd-anchor"></a><h1><a href="#md:esbuild-plugin-react18-css">esbuild-plugin-react18-css</a></h1><p><a href="https://github.com/react18-tools/esbuild-plugin-react18-css/actions/workflows/test.yml"><img src="https://github.com/react18-tools/esbuild-plugin-react18-css/actions/workflows/test.yml/badge.svg" alt="test"></a> <a href="https://codeclimate.com/github/react18-tools/esbuild-plugin-react18-css/maintainability"><img src="https://api.codeclimate.com/v1/badges/4a09ba9315f3296c1524/maintainability" alt="Maintainability"></a> <a href="https://codecov.io/gh/react18-tools/esbuild-plugin-react18-css"><img src="https://codecov.io/gh/react18-tools/esbuild-plugin-react18-css/graph/badge.svg" alt="codecov"></a> <a href="https://www.npmjs.com/package/esbuild-plugin-react18-css"><img src="https://img.shields.io/npm/v/esbuild-plugin-react18-css.svg?colorB=green" alt="Version"></a> <a href="https://www.npmjs.com/package/esbuild-plugin-react18-css"><img src="https://img.jsdelivr.com/img.shields.io/npm/d18m/esbuild-plugin-react18-css.svg" alt="Downloads"></a> <img src="https://img.shields.io/bundlephobia/minzip/esbuild-plugin-react18-css" alt="npm bundle size"> <a href="https://gitpod.io/from-referrer/"><img src="https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod" alt="Gitpod ready-to-code"></a></p>
<blockquote>
<p><a href="./FEATURED.md">Featured packages built with this template.</a></p>
</blockquote>
<a id="md:features" class="tsd-anchor"></a><h2><a href="#md:features">Features</a></h2><p>✅ ESBuild plugin to handle CSS/SCSS modules, autoprefixer, etc.</p>
<p>✅ Create fully treeshakable libraries (import from esbuild-plugin-react18-css/client/component)</p>
<p>✅ Use CSS/SCSS modules - automatically converted to BEM like CSS</p>
<p>✅ fully treeshakable CSS - import only the CSS files your users need</p>
<p>✅ Full TypeScript Support</p>
<p>✅ Unleash the full power of React18 Server components</p>
<p>✅ Works with all build systems/tools/frameworks for React18</p>
<p>✅ Doccumented with <a href="https://react18-tools.github.io/esbuild-plugin-react18-css">Typedoc</a> (<a href="https://react18-tools.github.io/esbuild-plugin-react18-css">Docs</a>)</p>
<a id="md:install" class="tsd-anchor"></a><h2><a href="#md:install">Install</a></h2><pre><code class="language-bash"><span class="hl-0">$</span><span class="hl-1"> </span><span class="hl-2">pnpm</span><span class="hl-1"> </span><span class="hl-2">add</span><span class="hl-1"> </span><span class="hl-2">esbuild-plugin-react18-css</span>
</code><button>Copy</button></pre>
<p>or</p>
<pre><code class="language-bash"><span class="hl-0">$</span><span class="hl-1"> </span><span class="hl-2">npm</span><span class="hl-1"> </span><span class="hl-2">install</span><span class="hl-1"> </span><span class="hl-2">esbuild-plugin-react18-css</span>
</code><button>Copy</button></pre>
<p>or</p>
<pre><code class="language-bash"><span class="hl-0">$</span><span class="hl-1"> </span><span class="hl-2">yarn</span><span class="hl-1"> </span><span class="hl-2">add</span><span class="hl-1"> </span><span class="hl-2">esbuild-plugin-react18-css</span>
</code><button>Copy</button></pre>
<a id="md:use-with-tsup" class="tsd-anchor"></a><h2><a href="#md:use-with-tsup">use with <code>tsup</code></a></h2><pre><code class="language-ts"><span class="hl-3">// tsup.config.ts or tsup.config.js</span><br/><span class="hl-4">import</span><span class="hl-1"> { </span><span class="hl-5">defineConfig</span><span class="hl-1"> } </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">&quot;tsup&quot;</span><span class="hl-1">;</span><br/><span class="hl-4">import</span><span class="hl-1"> </span><span class="hl-5">cssPlugin</span><span class="hl-1"> </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">&quot;esbuild-plugin-react18-css&quot;</span><span class="hl-1">;</span><br/><br/><span class="hl-4">export</span><span class="hl-1"> </span><span class="hl-4">default</span><span class="hl-1"> </span><span class="hl-0">defineConfig</span><span class="hl-1">(</span><span class="hl-5">options</span><span class="hl-1"> </span><span class="hl-6">=&gt;</span><span class="hl-1"> ({</span><br/><span class="hl-1">    ...</span><br/><span class="hl-1">    </span><span class="hl-5">esbuildPlugins</span><span class="hl-1">:[</span><span class="hl-0">cssPlugin</span><span class="hl-1">()]</span><br/><span class="hl-1">}));</span>
</code><button>Copy</button></pre>
<a id="md:use-with-esbuild" class="tsd-anchor"></a><h2><a href="#md:use-with-esbuild">use with esbuild</a></h2><pre><code class="language-ts"><span class="hl-4">import</span><span class="hl-1"> </span><span class="hl-5">cssPlugin</span><span class="hl-1"> </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">&quot;esbuild-plugin-react18-css&quot;</span><span class="hl-1">;</span><br/><br/><span class="hl-5">esbuild</span><span class="hl-1">.</span><span class="hl-0">build</span><span class="hl-1">({</span><br/><span class="hl-1">  ...</span><br/><span class="hl-1">  </span><span class="hl-5">plugins</span><span class="hl-1">: [</span><span class="hl-0">cssPlugin</span><span class="hl-1">()],</span><br/><span class="hl-1">});</span>
</code><button>Copy</button></pre>
<a id="md:csspluginoptions" class="tsd-anchor"></a><h2><a href="#md:csspluginoptions">CSSPluginOptions</a></h2><pre><code class="language-tsx"><span class="hl-6">interface</span><span class="hl-1"> </span><span class="hl-7">CSSPluginOptions</span><span class="hl-1"> {</span><br/><span class="hl-1">  </span><span class="hl-3">/**</span><br/><span class="hl-3">   * By default name is generated without hash so that it is easier and reliable for library users to override some CSS.</span><br/><span class="hl-3">   * Refer [loader-utils docs](https://github.com/webpack/loader-utils?tab=readme-ov-file#interpolatename) for more options</span><br/><span class="hl-3">   * </span><span class="hl-6">@defaultValue</span><span class="hl-3"> A function that generates name similar to [name]__[local] but without .module</span><br/><span class="hl-3">   */</span><br/><span class="hl-1">  </span><span class="hl-5">generateScopedName</span><span class="hl-1">?: </span><span class="hl-7">string</span><span class="hl-1"> | ((</span><span class="hl-5">className</span><span class="hl-1">: </span><span class="hl-7">string</span><span class="hl-1">, </span><span class="hl-5">path</span><span class="hl-1">: </span><span class="hl-7">string</span><span class="hl-1">, </span><span class="hl-5">css</span><span class="hl-1">: </span><span class="hl-7">string</span><span class="hl-1">) </span><span class="hl-6">=&gt;</span><span class="hl-1"> </span><span class="hl-7">string</span><span class="hl-1">);</span><br/><span class="hl-1">  </span><span class="hl-3">/** set skipAutoPrefixer to true to disable autoprefixer */</span><br/><span class="hl-1">  </span><span class="hl-5">skipAutoPrefixer</span><span class="hl-1">?: </span><span class="hl-7">boolean</span><span class="hl-1">;</span><br/><span class="hl-1">  </span><span class="hl-3">/** global CSS class prefix. </span><span class="hl-6">@defaultValue</span><span class="hl-3"> undefined */</span><br/><span class="hl-1">  </span><span class="hl-5">globalPrefix</span><span class="hl-1">?: </span><span class="hl-7">string</span><span class="hl-1">;</span><br/><span class="hl-1">  </span><span class="hl-3">/** If you want to keep .module.css files. </span><span class="hl-6">@defaultValue</span><span class="hl-3"> undefined */</span><br/><span class="hl-1">  </span><span class="hl-5">keepModules</span><span class="hl-1">?: </span><span class="hl-7">boolean</span><span class="hl-1">;</span><br/><span class="hl-1">}</span>
</code><button>Copy</button></pre>
<a id="md:generatescopedname" class="tsd-anchor"></a><h3><a href="#md:generatescopedname">generateScopedName</a></h3><p>It can be a string like <code>[name]__[local]___[hash:base64:5]</code> or <code>[name]__[local]</code> or <code>my-prefix__[name]__[local]</code></p>
<p>The functions arguments are as follows.</p>
<ul>
<li>css: the entire css file content</li>
<li>className: className from css file for the specific class</li>
<li>fileName: absolute fileName</li>
</ul>
<a id="md:🤩-don39t-forger-to-star-this-repo" class="tsd-anchor"></a><h3><a href="#md:🤩-don39t-forger-to-star-this-repo">🤩 Don&#39;t forger to star <a href="https://github.com/react18-tools/esbuild-plugin-react18-css">this repo</a>!</a></h3><p>Want hands-on course for getting started with Turborepo? Check out <a href="https://mayank-chaudhari.vercel.app/courses/react-and-next-js-with-typescript">React and Next.js with TypeScript</a> and <a href="https://www.udemy.com/course/game-of-chess-with-nextjs-react-and-typescrypt/?referralCode=851A28F10B254A8523FE">The Game of Chess with Next.js, React and TypeScrypt</a></p>
<p><img src="https://repobeats.axiom.co/api/embed/b9f60aadc635649d8a66039094bcb26b5ccea1c1.svg" alt="Repo Stats" title="Repobeats analytics image"></p>
<a id="md:license" class="tsd-anchor"></a><h2><a href="#md:license">License</a></h2><p>Licensed as MIT open source.</p>
<hr />

<p align="center" style="text-align:center">with 💖 by <a href="https://mayank-chaudhari.vercel.app" target="_blank">Mayank Kumar Chaudhari</a></p></div></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="assets/icons.svg#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><h4 class="uppercase">Member Visibility</h4><form><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-private" name="private"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Private</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></form></div><div class="tsd-theme-toggle"><h4 class="uppercase">Theme</h4><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-index-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="assets/icons.svg#icon-chevronDown"></use></svg>On This Page</h3></summary><div class="tsd-accordion-details"><a href="#md:esbuild-plugin-react18-css"><span>esbuild-<wbr/>plugin-<wbr/>react18-<wbr/>css</span></a><ul><li><a href="#md:features"><span>Features</span></a></li><li><a href="#md:install"><span>Install</span></a></li><li><a href="#md:use-with-tsup"><span>use with tsup</span></a></li><li><a href="#md:use-with-esbuild"><span>use with esbuild</span></a></li><li><a href="#md:csspluginoptions"><span>CSSPlugin<wbr/>Options</span></a></li><li><ul><li><a href="#md:generatescopedname"><span>generate<wbr/>Scoped<wbr/>Name</span></a></li><li><a href="#md:🤩-don39t-forger-to-star-this-repo"><span>🤩 <wbr/>Don&#39;t forger to star this repo!</span></a></li></ul></li><li><a href="#md:license"><span>License</span></a></li></ul></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="modules.html" class="current"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="assets/icons.svg#icon-1"></use></svg><span>Code Documentation</span></a><ul class="tsd-small-nested-navigation" id="tsd-nav-container" data-base="."><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>