Top Related Projects
The adaptive interface system for modern web experiences.
A collection of professionally designed, every day UI components built on Web standards. SHOELACE IS BECOMING WEB AWESOME 👇👇👇
A powerful cross-platform UI toolkit for building native-quality iOS, Android, and Progressive Web Apps with HTML, CSS, and JavaScript.
Material Design Web Components
Lit is a simple library for building fast, lightweight web components.
Quick Overview
Spectrum Web Components is an open-source project by Adobe that provides a collection of web components based on the Spectrum design system. It aims to offer a consistent and accessible user interface across Adobe products and third-party applications using web technologies.
Pros
- Implements Adobe's Spectrum design system, ensuring consistency with Adobe products
- Built using web components, providing framework-agnostic reusability
- Offers a wide range of UI components with accessibility features built-in
- Regularly updated and maintained by Adobe
Cons
- Learning curve for developers not familiar with web components
- May require additional setup for optimal performance in some frameworks
- Documentation could be more comprehensive for certain components
- Limited customization options compared to some other UI libraries
Code Examples
- Basic button component:
<sp-button variant="primary">Click me</sp-button>
- Creating a simple form with input and button:
<sp-form>
<sp-field-label for="name">Name</sp-field-label>
<sp-textfield id="name" placeholder="Enter your name"></sp-textfield>
<sp-button type="submit">Submit</sp-button>
</sp-form>
- Using a modal dialog:
<sp-button id="openModal">Open Modal</sp-button>
<sp-dialog id="myModal" dismissable>
<h2 slot="heading">Modal Title</h2>
<p>This is the modal content.</p>
<sp-button slot="footer" variant="secondary">Cancel</sp-button>
<sp-button slot="footer" variant="primary">Confirm</sp-button>
</sp-dialog>
<script>
const openButton = document.getElementById('openModal');
const modal = document.getElementById('myModal');
openButton.addEventListener('click', () => modal.open = true);
</script>
Getting Started
To start using Spectrum Web Components in your project:
- Install the package:
npm install @adobe/spectrum-web-components
- Import and use components in your HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<script type="module" src="node_modules/@adobe/spectrum-web-components/dist/index.js"></script>
</head>
<body>
<sp-button variant="primary">Hello Spectrum!</sp-button>
</body>
</html>
For more advanced usage and integration with frameworks, refer to the official documentation.
Competitor Comparisons
The adaptive interface system for modern web experiences.
Pros of FAST
- More flexible and customizable design system
- Better performance due to lightweight components
- Broader browser support, including older versions
Cons of FAST
- Less mature ecosystem compared to Spectrum
- Smaller community and fewer third-party components
- Steeper learning curve for developers new to web components
Code Comparison
FAST component:
<fast-button appearance="accent">
Click me
</fast-button>
Spectrum component:
<sp-button variant="cta">
Click me
</sp-button>
Both libraries use similar syntax for creating components, but FAST offers more customization options through its design system. Spectrum components often have more specific variants and follow Adobe's design guidelines more closely.
FAST provides a more low-level approach, allowing developers to build custom design systems, while Spectrum offers a complete, opinionated design system out of the box. This makes FAST more flexible but potentially requires more setup and configuration.
Performance-wise, FAST components are generally lighter and faster, which can be beneficial for large-scale applications. However, Spectrum's components are well-optimized and provide a consistent look and feel across Adobe products.
Ultimately, the choice between FAST and Spectrum depends on project requirements, design preferences, and development team expertise.
A collection of professionally designed, every day UI components built on Web standards. SHOELACE IS BECOMING WEB AWESOME 👇👇👇
Pros of Shoelace
- Framework-agnostic, works with any JavaScript framework or vanilla JS
- Extensive documentation and interactive examples
- Smaller bundle size and faster load times
Cons of Shoelace
- Less comprehensive component set compared to Spectrum
- Not as tightly integrated with Adobe's design system
- May require more customization for enterprise-level applications
Code Comparison
Shoelace button:
<sl-button>Click me</sl-button>
Spectrum button:
<sp-button>Click me</sp-button>
Both libraries use similar syntax for basic components, but Spectrum often includes more built-in variants and properties aligned with Adobe's design system.
Summary
Shoelace is a lightweight, framework-agnostic web component library that offers flexibility and ease of use. It's ideal for projects that prioritize performance and don't require strict adherence to a specific design system.
Spectrum Web Components, on the other hand, provides a more comprehensive set of components tightly integrated with Adobe's design system. It's better suited for projects that need to maintain consistency with Adobe's ecosystem or require a wider range of pre-built, enterprise-level components.
The choice between the two depends on project requirements, design constraints, and the need for integration with Adobe's ecosystem.
A powerful cross-platform UI toolkit for building native-quality iOS, Android, and Progressive Web Apps with HTML, CSS, and JavaScript.
Pros of Ionic Framework
- Broader ecosystem with extensive documentation, plugins, and community support
- Cross-platform development for mobile, desktop, and web applications
- Built-in UI components and native device features integration
Cons of Ionic Framework
- Steeper learning curve due to its comprehensive nature
- Potentially larger bundle sizes for simple applications
- May require additional optimization for high-performance apps
Code Comparison
Spectrum Web Components:
<sp-button variant="primary">Click me</sp-button>
Ionic Framework:
<ion-button color="primary">Click me</ion-button>
Both frameworks offer declarative component usage, but Ionic's syntax is more aligned with standard HTML elements.
Additional Considerations
- Spectrum Web Components focuses on Adobe's design system, while Ionic provides a more general-purpose framework
- Ionic offers a complete app development solution, whereas Spectrum Web Components is primarily for UI components
- Spectrum Web Components may be more suitable for projects already using Adobe's ecosystem, while Ionic is versatile for various application types
Overall, the choice between these frameworks depends on project requirements, existing ecosystem integration, and development team preferences.
Material Design Web Components
Pros of Material Web
- More comprehensive documentation and examples
- Wider adoption and community support
- Closer alignment with Google's Material Design guidelines
Cons of Material Web
- Larger bundle size and potentially higher performance overhead
- Less flexibility for customization outside of Material Design
- Slower release cycle and updates compared to Spectrum Web Components
Code Comparison
Spectrum Web Components:
<sp-button variant="primary">Click me</sp-button>
Material Web:
<mwc-button raised>Click me</mwc-button>
Both libraries aim to provide web components for building user interfaces, but they differ in their approach and design philosophy. Spectrum Web Components focuses on Adobe's design system, offering a more flexible and lightweight solution. Material Web, on the other hand, adheres closely to Google's Material Design principles, providing a more opinionated and comprehensive set of components.
Spectrum Web Components may be a better choice for projects that require more customization and smaller bundle sizes, while Material Web might be preferred for applications that want to closely follow Material Design guidelines and benefit from a larger ecosystem of components and resources.
Ultimately, the choice between these libraries depends on the specific requirements of your project, design preferences, and performance considerations.
Lit is a simple library for building fast, lightweight web components.
Pros of lit
- Lightweight and fast, with a smaller bundle size
- More flexible and unopinionated, allowing for greater customization
- Broader community support and ecosystem
Cons of lit
- Less out-of-the-box UI components and design system
- Requires more setup and configuration for complex applications
- May need additional libraries for advanced features
Code Comparison
spectrum-web-components:
<sp-button variant="primary" onClick={handleClick}>
Click me
</sp-button>
lit:
import { LitElement, html } from 'lit';
class MyButton extends LitElement {
render() {
return html`<button @click=${this.handleClick}>Click me</button>`;
}
}
Summary
lit is a lightweight and flexible library for building web components, offering greater customization options and a broader ecosystem. However, it requires more setup and may need additional libraries for advanced features. spectrum-web-components provides a comprehensive design system with ready-to-use UI components but may be less flexible for custom designs. The choice between the two depends on project requirements, design needs, and development preferences.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Spectrum Web Components
Who are we?
Spectrum Web Components is a future-looking project to develop Adobe Spectrum design language based around web components, ES-Modules, and modern browser standards.
To this end, Spectrum Web Components only targets modern, evergreen browsers that fully implement the Custom Elements V1 specification, e.g. Chrome, Firefox, Safari. Polyfills will be avoided as much as possible but documented if necessary.
Requirements
- NodeJS >= 20.0.0
- Yarn >= 4.6.0
- Typescript
- Supported desktop browsers:
- Last 2 versions of Chrome
- Last 2 versions of Firefox
- Last 2 versions of Safari
- Last 2 versions of Edge
- Or appropriate polyfills in older browsers.
- We support all viewport sizes across supported desktop browsers.
- While our components are designed to be responsive and mobile-friendly, we do not yet fully support mobile browsers due to limited testing in mobile hardware. We advise testing updates on mobile devices before updating and are happy to address any reported issues.
Getting started
git clone https://github.com/adobe/spectrum-web-components.git
cd spectrum-web-components
yarn
The call to yarn
will install and setup everything you need for developing and running the packages in this library.
Typical development will involve running yarn storybook
, yarn test
, and yarn docs:start
if you're making documentation changes (see below for additional details).
Building a new component
Creating a new component from the command line can be done by running the following:
yarn new-package
This will scaffold your component's required architecture by prompting you for the desired name for your package.
? **SWC package name (i.e. color-area)**
Note that your component name should be provided in kebab case and should relate as closely as possible to the Spectrum core naming.
For additional information, please see the generating components documentation.
Storybook
Testing & reviewing changes can be done using the Storybook instance. Running yarn storybook
will spin up a local instance of Storybook, triggering the browser to open at completion. From there you can make changes to your code and the browser will automatically refresh.
You can run Storybook through the command:
yarn storybook
By default, the resulting site will be available at http://localhost:8000.
Documentation
The Spectrum Web Components documentation site is available via the following command:
yarn docs:start
By default, the resulting site will be available at http://localhost:8080.
The documentation site provides comprehensive guides, API references, and examples to help you understand and use Spectrum Web Components effectively. It includes:
- Component API documentation
- Usage guidelines
- Accessibility information
- Code examples
- Design system principles
In the case that you'd like to serve and test a static build of the documentation from the root directory (localhost
or otherwise), use:
yarn docs:build
Using Stackblitz for reproductions
We provide Stackblitz demos for all our components to help you quickly test, experiment, and create reproductions. These interactive environments are perfect for:
- Bug reports: Create a minimal reproduction of issues you encounter
- Experiment: Test and experiment with components in a live environment to understand their features and behavior
Finding component demos
Each component's README includes a "Try it on Stackblitz" badge that links to a pre-configured demo environment. You can also find links to all component demos in our documentation site.
Creating reproductions
When reporting bugs or requesting features:
- Start with the component demo: Click the Stackblitz badge in the relevant component's README
- Fork the demo: Click "Fork" in Stackblitz to create your own copy
- Reproduce the issue: Modify the code to demonstrate the problem or desired behavior
- Share the link: Include the Stackblitz URL in your GitHub issue
Spectrum CSS and Icons
While we've moved away from using Spectrum CSS for component styling, we still maintain a dependency on Spectrum CSS for icons. We aim to keep the icon packages as current as possible to track the Spectrum design system closely.
Testing
Unit tests
Unit tests are run with Web Test Runner in Playwright using the Chai, Mocha and Sinon helper libraries. These tests can be executed with:
yarn test
During development you may wish to use yarn test:watch
to automatically build and re-run the test suites.
Visual regression testing
Visual regressions are tracked via screenshot testing. To run visual regression tests:
yarn test:visual
For testing specific components:
yarn test:visual vrt-${component name}
# Example: yarn test:visual vrt-accordion
For more details about visual regression testing, see the README section on Screenshot Testing.
Benchmarking
You can measure the performance of individual elements with:
yarn build:tests
yarn test:bench
This will run the defined Tachometer tests and report the current runtime cost of each individual element.
Contributing
We'd be very grateful if you contributed to the project! Check out our contribution guidelines and pull request best practices for more information.
Writing changesets
Spectrum Web Components uses changesets to manage versioning and changelogs. When making changes that impact users, you should include a changeset file that describes the change and indicates the type of version bump needed (patch, minor, or major).
To create a changeset:
yarn changeset
Release process
For information about our release process, including publishing to NPM, please see our Release Process documentation.
Advanced development
There are several commands that can be useful in specific scenarios:
yarn build:clear-cache
to remove previously created artifacts of thetsc build
process.yarn process-icons
to make sure that the most recent icons are included.yarn build
to make sure the available JS has been built from the current TS source.
Linting
The project will be linted on a pre-commit hook, but you can also run the lint suite with yarn lint
. It uses ESLint to lint the JS / TS files, and StyleLint to lint the CSS files.
Dependency linting
There are downstream issues that can arise from multiple packages in this mono-repo using dependencies with mismatched version strings. By default, changesets will bump version numbers of internal dependencies when the various packages are published and the depended version is pointing to the latest release, which can help to mitigate this issue. Running yarn constraints
will check that all version strings for each dependency match across the repo.
yarn constraints --fix
will modify the package.json
files, updating all dependencies to the latest version available in the library â a potentially dangerous operation. If this is what you want to do when yarn constraints
discovers mismatched versions, this step can greatly reduce the amount of work to achieve matching version numbers.
Anatomy of a component
There is extended documentation on adding a new component to the library in the documentation site. However, at a high level, you will be building the following structure:
- packages
- [new-component-name]
- src
- index.ts
- spectrum-[new-component-name].css
- [new-component-name]-overrides.css
- [new-component-name].css
- [NewComponentName].ts
- stories
- [new-component-name].stories.ts
- args.ts
- template.ts
- test
- benchmark
- basic-test.ts
- [new-component-name].test.ts
- .npmrc
- CHANGELOG.md
- custom-elements.json
- package.json
- README.md
- sp-[new-component-name].ts
- tsconfig.json
For a list of component waiting to be implemented, visit our missing components
tag.
IDE Notes
The build process compiles .css
files using PostCSS and wraps them in the lit-html
css
template tag and writes out a .css.ts
file for easy import into TypeScript files. This file should not be edited, and is ignored by .gitignore
, but you may also wish to hide the files in your IDE.
Active patches
lru-cache
The lru-cache
leveraged by @web/dev-server
can interact negatively with ARM based macOS machines causing a critical hang in the cache of transpiled file responses. This only effects development time operations and specifically effects the local test passes. To avoid this lru-cache@6.0
has been patched to make its set
method a noop, avoiding the caching process all together.
Top Related Projects
The adaptive interface system for modern web experiences.
A collection of professionally designed, every day UI components built on Web standards. SHOELACE IS BECOMING WEB AWESOME 👇👇👇
A powerful cross-platform UI toolkit for building native-quality iOS, Android, and Progressive Web Apps with HTML, CSS, and JavaScript.
Material Design Web Components
Lit is a simple library for building fast, lightweight web components.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot