Develop
The Carbon Design System is built React first. We also support core parts of the system in vanilla JS, Angular, and Vue. If you’re you’re using a different framework, you can still build components by following the guidelines below.
Using just the styles
Developers wanting to build in different ways, follow the instructions for the vanilla JS library to access the styles and build out their own components.
Wrapping a component
Many JavaScript frameworks have a mechanism to dynamically create/destroy DOM elements, for example, upon change in array. This often makes it unclear when the DOM element to instantiate a Carbon component is available, which often depends on the JavaScript framework you use.
Also when DOM elements that Carbon components have been instantiated on are being destroyed, the Carbon component instances should be released so that e.g. there are no zombie event handlers.
The easiest way to hook on the creation/destruction of DOM elements is by defining a “wrapping component”, with the JavaScript framework of your choice. Here’s an example using Web Components’ Custom Elements v1 spec, but the notion of components, along with the lifecycle callbacks, are commonly found in many other JavaScript frameworks.
class BXLoading extends HTMLElement {// Called when this custom element gets into render treeconnectedCallback() {// "this" here is "<bx-loading>" elementthis.innerHTML ='(e.g. snippet from http://carbondesignsystem.com/components/loading/code)';this.loading = CarbonComponents.Loading.create(this.querySelector('[data-loading]'));
Examples
Angular 4 wrapper for Carbon (We use this just as an example. Angular is now supported by the Carbon Design System.)
Troubleshooting
If you experience any issues while getting set up with Carbon Components, please head over to the Carbon Components GitHub repo for more guidelines and support. Please create an issue if your issue does not already exist.
Other frameworks
We are open to the idea of providing core support for additional frameworks in future. We added Angular support in the summer of 2018 and Vue in early 2019.
For the Carbon Design System to incorporate additional frameworks into our core offering, those frameworks need clear, guaranteed, ongoing resources to maintain and support that option. If a team built a product using a native web components implemenation of Carbon, for example, but had no plan to support that solution outside of their product, that couldn’t become a core part of the Carbon Design System.