Wafer is a simple and lightweight base library for building Web Components that can be used on the browser, server or both.
It small (<2kb minified and compressed) and opts for a CSS selector based API for updating component templates.
Component declarations can be used unchanged on both the client and server (node) to SSR components (using Shadow or Light DOM) and optionally hydrate on the client.
Hi all - thought I'd share a side project I've been working on recently. Think of it as a Slack-lite for groups of people who are temporarily networking with each other - think events, conferences and meetings. Would love to get some feedback on any aspects of it (the idea, the design, the execution). I'm currently in pre-launch so if anyone does fancy trying it out for a real event please go ahead - user limits are currently disabled so there's no cost. Thanks!
Technically it's written using Web Components (LitElement based) which I've really enjoyed using.
RemindMe is an experimental app to showcase background notifications in the browser.
It makes use of Notification Triggers, an experimental API to schedule local notifications that don't require a network connection. Currently Chrome is the only browser that has an implementation of Notification Triggers.
Thanks for the feedback. I agree the meaning of the icons is unclear - one is cancel, the other is clear. I would prefer to have text on these buttons, but then localising the language becomes an issue. I will think over these issues!
Thanks! The Storybook doesn't work too well on smaller viewports, but the picker does work well on small screens in regular pages, e.g. https://lamplightdev.github.io/aeon/
I needed a progressively enhanced, lightweight date and time picker that functioned and looked consistent across all browsers, and that worked with or without a framework. The difference in support (no native picker on desktop Safari) style and behaviour of native pickers rule them out, so web components seemed an obvious choice. The existing web component solutions tended to be too heavyweight, so Aeon was born:
- No dependencies - a standalone vanilla JS web component
- Lightweight - 5kb gzipped
- Use anywhere - use standalone or directly in your framework of choice with no wrappers
- Progressive enhancement - if the code fails to load, fallbacks to a native picker or a simple text box
- Accessible - works with mouse/touch/keyboard/screen readers and behaves as a native form element
- Locale aware - uses the browser locale language and date format by default
- Themeable - pass in custom colour schemes
- Browser support - works in all modern browsers on all devices (and IE11 - with polyfills)
Good job so far, it feels very lightweight and simple. It works well with different input devices, but the accessibility for screen readers could be improved:
* The first day immediately gets focused when opening the datepicker. It might be a bit confusing to just hear a number.
* There's enough space to spell the months in full.
* Use semantic abbrevations for weekdays, e.g. `<abbr title="Monday">Mo</abbr>`.
* Use `label`s which refer to the corresponding `select`.
* Use `table` instead of `div`s for the calendar view.
* Use (hidden) text instead of the `title` attribute in buttons.
Furthermore:
* Try using more unique classes for your elements, e.g. '.aeon-datepicker__select' instead of '.select'.
* `cursor: pointer` for buttons would be helpful to see how large the click area is.
It small (<2kb minified and compressed) and opts for a CSS selector based API for updating component templates.
Component declarations can be used unchanged on both the client and server (node) to SSR components (using Shadow or Light DOM) and optionally hydrate on the client.
Read a quick overview at https://waferlib.netlify.app/docs/010-overview/030-quick/, or edit a live example at https://waferlib.netlify.app/docs/010-overview/040-example/.
All feedback welcome, thanks!