A growing collection of reusable, framework-agnostic web components built with modern technologies. This monorepo leverages Turborepo and PNPM Workspaces to efficiently manage multiple web component packages.
This repository contains a collection of web components that can be used in any JavaScript framework or vanilla JavaScript. Currently available:
🚀 More components coming soon! This repository will grow to include various web components for different use cases, not limited to Material Design 3.
The Angular demo app is automatically deployed to GitHub Pages: https://banegasn.github.io/components/
Every push to the main branch triggers an automatic deployment.
This monorepo is designed for building and distributing web components: - Framework-agnostic components: Built with Lit, Svelte, and other modern web component technologies - Universal compatibility: Components work in any JavaScript framework (Angular, React, Vue, etc.) or vanilla JavaScript - Efficient builds: Turborepo for intelligent build caching and parallelization - Workspace management: PNPM for fast, disk-efficient dependency management - Demo applications: Example apps showcasing component usage in different frameworks
.
├── apps/ # Demo applications
│ └── angular-app/ # Angular demo showcasing web components
├── packages/ # Web component packages
│ ├── m3-button/ # Material Design 3 Button
│ └── m3-navigation-rail/ # Material Design 3 Navigation Rail
├── pnpm-workspace.yaml # PNPM workspace configuration
├── turbo.json # Turborepo configuration
└── tsconfig.json # Shared TypeScript config
Install PNPM if you haven't already:
npm install -g pnpm@9.12.1
# Clone the repository
git clone <repository-url>
cd components
# Install dependencies
pnpm install
# Build all packages and apps
pnpm build
# Run development servers
pnpm dev
# Build all packages and apps
pnpm build
# Build specific package
pnpm --filter @banegasn/m3-button build
# Build specific app
pnpm --filter angular-app build
# Run all dev servers
pnpm dev
# Run specific package in dev mode
cd packages/example-component
pnpm dev
# Run specific app
cd apps/angular-app
pnpm dev
The Angular app will be available at http://localhost:4200
# Run linters
pnpm lint
# Run tests
pnpm test
# Clean all build artifacts
pnpm clean
A demonstration Angular application showcasing how to use the web components in a real-world application.
Features: - Angular 18 with standalone components - Live examples of all available web components - Integration patterns and best practices - Deployed to GitHub Pages for live preview
Run:
cd apps/angular-app
pnpm dev
💡 Note: More demo apps (React, Vue, vanilla JS) may be added in the future to demonstrate cross-framework compatibility.
The turbo.json file defines the build pipeline:
mkdir -p packages/my-web-component/src
package.json:{
"name": "@banegasn/my-web-component",
"version": "1.0.0",
"type": "module",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
"scripts": {
"build": "tsc",
"dev": "tsc --watch"
}
}
Create your web component using Lit, Svelte, or vanilla JavaScript
Install dependencies from root:
pnpm install
mkdir -p apps/my-demo-app
Set up your framework (React, Vue, etc.)
Add workspace dependencies in package.json:
{
"dependencies": {
"@banegasn/m3-button": "workspace:*",
"@banegasn/m3-navigation-rail": "workspace:*"
}
}
Add test scripts to individual packages:
{
"scripts": {
"test": "vitest"
}
}
Run all tests:
pnpm test
pnpm build
Turborepo will: 1. Build packages in dependency order 2. Cache successful builds 3. Only rebuild what changed
pnpm build:gh-pages
This builds all packages and the Angular app optimized for GitHub Pages deployment with the correct base href (/components/).
To publish web component packages to GitHub Packages (or npm):
# Bump version
pnpm version:patch # or version:minor, version:major
# Publish all packages
pnpm publish:packages
All web components are published as individual npm packages that can be installed and used in any project.
See PUBLISHING.md for detailed publishing instructions and GitHub Actions setup.
workspace:*tsconfig.json for consistencypnpm clean
rm -rf node_modules pnpm-lock.yaml
pnpm install
rm -rf .turbo
pnpm install --force
pnpm build and pnpm testMIT
$ claude mcp add components \
-- python -m otcore.mcp_server <graph>