Public repository with components for Deepgram demos and sites.
This repo contains a Stencil project with a Storybook for documenting and developing UI components in isolation.
Stencil is a compiler for building fast web apps using Web Components.
Stencil combines the best concepts of the most popular frontend frameworks into a compile-time rather than runtime tool. Stencil takes TypeScript, JSX, a tiny virtual DOM layer, efficient one-way data binding, an asynchronous rendering pipeline (similar to React Fiber), and lazy-loading out of the box, and generates 100% standards-based Web Components that run in any browser supporting the Custom Elements v1 spec.
Stencil is also capable of generating React, Vue, and Angular versions of components.
Storybook is a tool for documenting and developing UI components in isolation.
To start building a new component using Stencil, clone this repo to a new directory:
git clone https://github.com/deepgram/deepgram-components.git deepgram-components
cd deepgram-components
and run:
npm install
npm start
To build the component for production, run:
npm run build
To run the unit tests for the components, run:
npm test
Stencil docs are here.
We recommend using deepgram
in the component name (ex: <deepgram-header>
).
You can read more about these different approaches in the Stencil docs.
Our Stencil project is built with the dist
output target, so you can import a small bootstrap script that registers all components and allows you to load individual component scripts lazily.
For example, given your Stencil project namespace is called @deepgram/web-components
, to use deepgram-header
on any website, inject this into your HTML:
<script type="module" src="https://unpkg.com/@deepgram/web-components"></script>
<!--
To avoid unpkg.com redirects to the actual file, you can also directly import:
https://unpkg.com/@deepgram/[email protected]/dist/deepgram-components/deepgram-components.esm.js
-->
<deepgram-header active="docs"></deepgram-header>
This will only load the necessary scripts needed to render <deepgram-header />
. Once more components of this package are used, they will automatically be loaded lazily.
You can also import the script as part of your node_modules
in your applications entry file:
import '@deepgram/web-components/dist/deepgram-components/deepgram-components.esm.js';
We also use the dist-custom-elements
output target, so we recommend importing Stencil components individually in those files where they are needed.
For example, given you'd like to use <deepgram-header />
as part of a React component, you can import the component directly via:
import '@deepgram/web-components/deepgram-header';
function App() {
return (
<>
<div>
<deepgram-header active="docs"></deepgram-header>
</div>
</>
);
}
export default App;