Evaluating the options
To effectively integrate Magnetic into the existing design system, I carefully evaluated several options. There were three main paths we could take.
Keep what we had and continue to rebuild Blueprint components to match Magnetic.
As mentioned earlier, it was extremely difficult to keep up to date with updates from Magnetic (for both UX and UI teams). Plus, having to constantly check for updates from the Magnetic team proved to be very time consuming. I felt we were duplicating the effort for the same output. We were losing a lot of the benefits of a centralized design system with this approach.
Use the Magnetic library directly and have a separate file for our products specific components and patterns.
This approach allowed us to utilize Magnetic directly and be able to easily pull in the updates as they come. However, there were a couple important downsides to this. First, since the UI team was not able to use the Magnetic UI library, we needed a way to lock the version of Magnetic we're both using. We could just not pull in the updates on Figma, but that would only work with existing files, any new Figma file would automatically get the latest version of Magnetic and we would risk being out of sync with the UI team. Secondly, each product design file would need to pull in both the Magnetic library and Blueprint library files. While this wasn't a huge deal, educating the team on this would not be trivial. Also, if we had things built on top of a Magnetic component, such as a product specific variant of a button, then the button component would be in two different places.
The last option was to have a single library file that pulls in all of the components from Magnetic and wraps them.
This approach allowed us to still leverage the work that was already done by the Magnetic team, while still having the flexibility to add our product specific needs. It also allowed us to control what version of Magnetic we were on to better align with the development team. Lastly, having a single file for our designers to link in their Figma files and having all our components in a single place made it easier to consume and use our library.
Building wrapper components in Blueprint
To integrate the Magnetic library into Blueprint, we first connected the two libraries. Next, we created a "Core" page where we pulled instances of all Magnetic components. For each instance, we built a local component wrapper. These wrappers were named using the format magnetic_<component_name> to identify them as wrapped components.
While styles are typically referenced directly from the Magnetic library, we also imported them into our Blueprint component library for manual screens that are not components.
Custom components and variants were organized into specific sections based on their functionality: "Networking" and "Data Visualizations." To improve efficiency, larger and more complex components, such as topology, were placed in separate files. This approach allowed for better organization and potential performance benefits.