my-stencil-duet-components
v1.0.1
Published
A Stencil.js component library using Duet Design System with form components
Maintainers
Readme
My Stencil Duet Library
A Stencil.js component library built with Duet Design System
This library contains reusable web components built with Stencil.js and the Duet Design System. The components are framework-agnostic and can be used in React, Angular, Vue, or vanilla JavaScript applications.
Components
<my-duet-form>
A form component that demonstrates integration with Duet Design System components including input fields, select dropdowns, and buttons.
Features:
- Uses Duet input, select, and button components
- Emits custom events for form submission
- TypeScript support
- Shadow DOM encapsulation
Properties:
- None (uses internal state)
Events:
formSubmitted: Emitted when the form is submitted with{ name: string, country: string }data
Installation
npm install my-stencil-duet-componentsGetting Started
To start building a new web component using Stencil, clone this repo to a new directory:
git clone https://github.com/stenciljs/component-starter.git my-component
cd my-component
git remote rm originand run:
npm install
npm startTo build the component for production, run:
npm run buildTo run the unit tests for the components, run:
npm testNeed help? Check out our docs here.
Naming Components
When creating new component tags, we recommend not using stencil in the component name (ex: <stencil-datepicker>). This is because the generated component has little to nothing to do with Stencil; it's just a web component!
Instead, use a prefix that fits your company or any name for a group of related components. For example, all of the Ionic-generated web components use the prefix ion.
Using this component
There are two strategies we recommend for using web components built with Stencil.
The first step for all two of these strategies is to publish to NPM.
You can read more about these different approaches in the Stencil docs.
Lazy Loading
If your Stencil project is built with the dist output target, you can import a small bootstrap script that registers all components and allows you to load individual component scripts lazily.
To use the my-duet-form component on any website, inject this into your HTML:
<script type="module" src="https://unpkg.com/my-stencil-duet-components"></script>
<my-duet-form></my-duet-form>
<script>
// Listen for form submission events
document.querySelector('my-duet-form').addEventListener('formSubmitted', (event) => {
console.log('Form submitted:', event.detail);
// event.detail will contain { name: string, country: string }
});
</script>You can also import the script as part of your node_modules in your applications entry file:
import 'my-stencil-duet-components/dist/my-stencil-lib/my-stencil-lib.esm.js';Check out this Live Demo.
Standalone
If you are using a Stencil component library with dist-custom-elements, we recommend importing Stencil components individually in those files where they are needed.
To export Stencil components as standalone components make sure you have the dist-custom-elements output target defined in your stencil.config.ts.
For example, to use <my-duet-form /> as part of a React component, you can import the component directly:
import 'my-stencil-duet-components/my-duet-form';
function App() {
const handleFormSubmit = (event: CustomEvent<{ name: string; country: string }>) => {
console.log('Form submitted:', event.detail);
// Handle form submission data
};
return (
<>
<div>
<my-duet-form onFormSubmitted={handleFormSubmit}></my-duet-form>
</div>
</>
);
}
export default App;Check out this Live Demo.
