Skip to content

An example of Web Component library that works with SSR Declarative Shadow DOM in any framework or Vanilla.js. Thanks to Brisa Web Component Compiler.

License

Notifications You must be signed in to change notification settings

aralroca/counter-wc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

<counter-wc />

Made with Brisa

npm version npm size follow on Twitter

It is a very silly example of a Counter Web Component.

> bun install counter-wc

The idea of this library is to show how you can use the Brisa Web Component compiler to transform JSX with Signals into two files; one to load the web component on the client, and another to load the web component on the server to make the SSR of the Web Component easy.

How to use this Counter Web Component

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Brisa Web Component Example</title>
  <script type="importmap">
    {
      "imports": {
        "brisa/client": "https://unpkg.com/brisa@latest/client-simplified/index.js"
      }
    }
  </script>
  <script type="module" src="https://unpkg.com/counter-wc@latest"></script>
</head>
<body>
  <counter-wc start="15"></counter-wc>
</body>
</html>

Note

The importmap is necessary because all the compiled web components are only the rendering function so that they take up little space, but they need the Brisa wrapper to work correctly.

How to use this Counter Web Component with SSR

For this, you need Bun.js or Node.js. You can integrate it with any framework without the need to have JSX. What you will need is to have the Brisa library installed to use its renderToString.

> bun install brisa
> bun install counter-wc

And then you can use the renderToString function to render the web component on the server.

ssr.js

import { renderToString } from 'brisa/server';
import { jsx } from 'brisa/jsx-runtime';
import CustomCounter from 'counter-wc/server';

const html = `
	<!DOCTYPE html>
	<html lang="en">
		<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<title>Brisa Web Component Example</title>
		<script type="importmap">
			{
				"imports": {
					"brisa/client": "https://unpkg.com/brisa@latest/client-simplified/index.js"
				}
			}
		</script>
		<script type="module" src="https://unpkg.com/counter-wc@latest"></script>
		</head>
		<body>
			${await renderToString(jsx(CustomCounter, { start: 10 }))}
		</body>
	</html>
`;

console.log(html);

Then run bun run ssr.js and you will see the HTML with the rendered web component using the Declarative Shadow DOM.

Using the Web Component in Brisa

Brisa uses a special integration file located at web-components/_integrations.(tsx|ts|js|jsx). This file maps Web Component selectors to their respective libraries, ensuring they are correctly loaded when needed.

import type { WebComponentIntegrations } from "brisa";

export default {
  "counter-wc": {
    client: "counter-wc",
    server: "counter-wc/server",
    types: "counter-wc/types",
  },
} satisfies WebComponentIntegrations;

Note

After this integration, you can use the Web Component in your Brisa application directly by typing <counter-wc></counter-wc> in your JSX code (pages, components, web components, elements). SSR and TypeScript support are automatically handled by Brisa.

Building the Web Component

You just need to clone the repository, install the dependencies with:

> bun install

After that, you can build the Web Component with:

> bun run build

Below the build script runs the brisa build -w src/counter-wc.tsx command that does the magic of transforming the JSX with Signals into two files, one for the client and one for the server.

Feel free to use this reference library to create your own Web Components with Brisa and share them with the community.

License

MIT

About

An example of Web Component library that works with SSR Declarative Shadow DOM in any framework or Vanilla.js. Thanks to Brisa Web Component Compiler.

Topics

Resources

License

Security policy

Stars

Watchers

Forks

Packages

No packages published