Clarity Design System for Angular 2
vmware.github.io
vmware.github.io
This seems to be a great option for ng2 projects considering the NG2 Material Design is currently in alpha, whereas this looks more "ready-to-go". To my more Bootstrap familiar mind, I feel like I "get" it much faster than some Material Design examples I've seen.
Do you guys have plans for a Tree component ? Would be great if it was and extension to the DataGrid (something like SlickGrid: http://mleibman.github.io/SlickGrid/examples/example5-collap...)
I wanted to make sure you saw the Datagrid component [1] we have. We just published it so please feel free to provide us with feedback and/or raise any issues!
[0] https://github.com/vmware/clarity/issues/67 [1] https://vmware.github.io/clarity/documentation/datagrid
I am not sure if there is confusion here but those components are built on top of Angular 2. We use and love Angular 2. In fact, we talk and work with the Angular team and both Angular and Clarity are open source projects. We contributed and would like to continue to contribute back to Angular as well!
regarding keeping pace with the Angular team, one thing worth noting is that we were up-to-date with Angular 2 Final within two days after its release.
i think we're good on that.
From first glance it appears that the form input elements on both of those projects are not going to be nearly as mobile friendly as I've found with Angular Material Design components.
I could very easily be mistaken, but already having a sense of what I feel like I need in order to make a nice mobile experience my first instinct would be to skip even trying out either of them for future mobile projects. That said, they both seem solid for building a standard web app the user will navigate with a mouse and keyboard.
1. To get more feedback on the docs if that's how you arrived there. 2. To get more feedback on the system itself (design and code) to see if there are bugs we can fix and issues we can improve.
A few examples:
- Alot of people will probably see the fancy animation in Angular Material 'placeholder' on text fields transition into a floating label when it receives focus as not having much functional purpose. On mobile, given space constraints, I feel it's a real innovation, not just sugar.
- Because of the differences (and discrepancies in behavior) between the 'time' input field on both mobile web platforms I went out of my way to build an analog clock face to bring consistency between platforms and more reasonable behavior. Some of it is probably personal preference, but I think having an analog clock face is objectively better from the perspective that you can set time (at least how I designed mine) with 2 taps (and maybe one more to toggle the meridian). Compared to how iOS and Android HTML inputs work natively it may not be much of a difference in the eye of the user, but I think there is a lot of room for improvement in this space.
- "tabbing" behavior between fields on a form are different, and because of a strange design decision on Apple's part, it's impossible to reconcile. There are 2 "tabbing" arrows on the iOS keyboard which send no events to the DOM.
- I could probably go on but hopefully it paints a picture of how difficult it is to create a consistent experience easily across these platforms. Not to mention that I get the feeling the number of mobile browser / web-view options (and thus differences that may or may not be reconcilable) will just continue to grow. By decoupling the UI form input component from the native elements it will bring more consistency to the user. I don't know if Angular Material (or other material design libraries) have a goal currently to decouple from the native elements completely, but they feel like they're the furthest along in this respect.
That said, one of the main reasons to use native form controls is accessibility, which is one of our biggest priorities. Maintaining accessibility with non-semantic elements is feasible, but we would end up with bugs fully breaking it, as opposed to a slightly worse UX on some mobile devices.
More importantly, we strongly believe that aiming for the exact same experience across all possible screen sizes is a mistake. If you are trying to write an application that feels natural on both desktops and mobiles, you will need to design two different interfaces, different patterns and probably different amounts of data displayed at once. Your time input example is very relevant: on desktops, you have easy access to a keyboard and a mouse, but sliding UI elements can be a drag. On phones, keyboards are painful to use, but swiping with your finger is extremely natural. Sticking to the native interface (or a customization of the native interface) in both cases will lead to an apparently "inconsistent" behavior, but a user experience that's more enjoyable on both sides.
This is the choice we have made after quite a bit of research, and you can see it for instance on our responsive navigation patterns: we support 3 levels of navigation across the app on desktops, but we limit to 2 on mobiles.
I agree with the point about designing different experiences across screen sizes also. It definitely has to be considered on a case-by-case basis, but I've seen some interesting design choices which significantly reduce this pain point. I've almost convinced myself at this point that almost all cases (app types) can be handled by some clever flexbox manipulation and some reasonable media query break points.
Before deciding to open source, we thought really hard about the long term strategy for Clarity. We did not want to open source the project and not be able to continue to build it. One of the many reasons we felt confident this is going to happen is that in the past year, we've build a very strong Clarity community internally. Over 35 product teams within VMware use Clarity and many more are on the way (many of them have not released yet but they depend on Clarity as a Design System for their future).
The team you see on the community page [0] of Clarity is a 100% dedicated to making Clarity successful. This will become more apparent in the next days and weeks as we continue to push more work into Clarity and continue to have more releases of it!
What would you say the primary motivation in switching from material2 or ng2-bootstrap to clarity would be? At my work we have an Angular 2 app still in development and have been rather dissatisfied with the available component libraries so far. We're at a point where it wouldn't be unreasonable to switch UI frameworks.
Additionally it looks like you have only implemented some of the material design spec. What was the reason for this / why not go full material?
We really built Clarity because we were in your position. No framework out there was able to provide us with what we needed to ship high quality, enterprise software but with modern and consumer-like UIs. We needed that framework to care deeply about user experience (not just provide code) and we wanted to make sure that framework is flexible enough that teams across the company (before we open sourced) can have the ability to understand it, build on top of it, etc.
We really looked around and every time we found something it had a part of the puzzle but not really enough of a part that we can depend on it.
Clarity does not depend on material (the design language), we are definitely inspired by material and others but we're building an end to end design system which includes the user experience and visual language aspects. Behind the components and patterns is a ton of research that we've doing throughout the past few months (and sometimes years depending on the data we have) and want to continue to do. One of our goals is to also share that research in case you can reach different conclusions so the community is able to keep us moving in the right direction.
It would definitely be useful to publish the research behind the design choices you've made. As a developer with not a lot of design experience that's something I would be interested in.
As for TypeScript, yes we mainly use TypeScript!
The demo website loads very slow :( .
I would recommend looking at https://ng-bootstrap.github.io/ for some code design of some of these components - as far as I can gather looking at the source code of Clarity, it appears to not be AoT-compliant, a big thing going forward with Angular due to the immense perf benefits it brings, and opens up the gate for also being able to use Web Workers/Service Workers.
AoT-compliance is something we're looking into. Definitely on the sooner end of our roadmap.
As for the slowness of the page, this is GitHub. It is currently down :(
As for AOT, that's definitely a priority for us (we were talking about it as a team yesterday and are working hard to make it a possibility for Clarity so we're definitely on the same page there).
First, thanks for the feedback. Really appreciate you taking the time to provide it. We've actually looked at Material and other visual languages/design systems out there as we do this. We learn from those that started this before us and will continue to do so.
One of the things we think is unique about Clarity is our attempt to get an end to end design system built by a single team of UX and UI engineers working side by side. This includes the UX guidelines (both generic patterns as well as design guidelines for each component), as well as the HTML/CSS/Angular2 components. As for downloading the sketch template for example, that is a pretty good point, I created an issue on github for us to track this and take a look [0].
Just in case you're still looking for it, a link to the Sketch template is available from get started and documentation. I am also adding it here to make it easier to find [1]
We're really looking forward to hear more feedback in order to continue improving Clarity.
[0] https://github.com/vmware/clarity/issues/68 [1] https://vmware.github.io/clarity/images/sketchTemplates/Clar...
Clarity UI is pure CSS: you just include it on your page, use the correct markup and classes and our styles will be applied. Kind of like using Bootstrap without their JS (most of us have done this).
Clarity NG depends on Clarity UI for styling, but provides full-blown Angular 2 components with the correct markup in their templates, two-way binding, ... That's the easiest way to use Clarity, but it forces you to use Angular.
Unfortunately, our documentation doesn't split the two yet, it starts with the pure HTML/CSS version and then showcases the Angular 2 components after that. Probably explains the confusion.
I hope this helped!
That's where the confusion come from, thanks for explanation!