Profile
Back to NewsBack
GitHub Trending 8 min
Reader Mode
ing-bank/lion: Fundamental white label web component features for your design system.

ing-bank/lion: Fundamental white label web component features for your design system.

Lion

Lion

Lion open issues status GitHub open pull requests status Todos

Website · Fundamentals · Guides · Components · Blog

Lion is a set of highly performant, accessible and flexible Web Components!

They provide an unopinionated, white-label layer that can be extended to your own layer of components.

  • High Performance: Focused on great performance in all relevant browsers with a minimal number of dependencies.
  • Accessibility: Aimed at compliance with the WCAG 2.2 AA standard to create components that are accessible for everybody.
  • Flexibility: Provides solutions through Web Components and JavaScript classes which can be used, adopted and extended to fit all needs.
  • Modern Code: Lion is distributed as pure es modules.
  • Exposes functions/classes and Web Components: Ships a functionality in it's most appropriate form.
Note: Our demos may look a little bland but that is on purpose. They only come with functional stylings.
This makes sense as the main use case is to extend those components and if you do you do not want to override existing stylings.

Explore the Lion Guides  ▶

Table of Contents

Astro migration

  • Keep using /docs on the root level as we used it in the master branch. The documentation is copied into Astro related directories on npm run start and when when anything in /docs is updated.
  • Replace manually all references to assets in all md files so that we imply that the path is produced from the directory where the md file is located. F.e. new URL('../src/wa-combobox/assets/obama.jpeg', import.meta.url).href; should new URL('./src/wa-combobox/assets/obama.jpeg', import.meta.url).href;. Note double dot is replaced with one dot. See this PR for the reference.
  • Rename all .mjs files to .js ones if they are used by mdjs examples

Astro how to

  • To start in dev mode run npm run start
  • To start in production mode:
- Run npm run build - Run npm run preview

Issues which are not caused by the migration (not to be fixed now)

__mdjs-stories--use-cases.js:40 Uncaught TypeError: shadowRoot.getElementById is not a function

Note. There is the same error on master. This issue is not caused by the migration

How to install

npm i @lion/ui

Temporary phone-number metadata workaround

We temporarily vendor [email protected], rebuilt from Google's libphonenumber v9.0.41, instead of the registry dependency. This includes updated phone-number metadata, such as the French Guiana premium-rate example +594890123456, which the previous [email protected] rejected. We keep this workaround until the next upstream awesome-phonenumber release incorporating the required metadata is available.

The artifact lives in packages/ui/vendor/awesome-phonenumber-7.9.0-tlouisse.libphonenumber-9.0.41.tgz. @lion/ui uses a package-relative file:vendor/... dependency and bundles the installed awesome-phonenumber package when published. This preserves normal consumer installation and lazy imports without access to the Lion checkout. The private root also declares the same tarball as a development dependency so npm installs it during a clean workspace install rather than assuming the workspace already contains its bundled dependencies. The legacy docs dependency keeps its separate registry version. The temporary prepack helper verifies the checksum and installs only the tarball in an isolated temporary prefix using npm's offline mode (without running dependency scripts or writing a lockfile). It copies that installed package into the local bundle and removes the temporary prefix, because npm packing does not include hoisted workspace bundles. Other Lion dependencies remain unchanged. The original MIT license and Google's Apache-2.0 notices remain in the artifact and bundled package. See vendor provenance for the source commit, checksum, and reproducible packaging instructions.

Once the next upstream awesome-phonenumber release includes the required metadata, restore the normal registry dependency in packages/ui/package.json, remove awesome-phonenumber from bundledDependencies, remove the vendor asset and its files entry, remove the root development dependency, and regenerate package-lock.json. Remove the temporary prepack lifecycle and scripts/prepare-vendored-phone.js helper as well. Keep the metadata regression test and rerun the phone tests, typechecks, and packed-consumer install check before removing this workaround documentation.

How to use

Extend a Web Component

This is the main use case for lion. To import component classes, and extend them for your own design system's components.

import { css } from 'lit';
import { LionInput } from '@lion/ui/input.js';

class MyInput extends LionInput { static get styles() { return [ super.styles, css / your styles here / , ]; } } customElements.define('my-input', MyInput);

Use a JavaScript system

There's a couple of "systems" in lion which have a JavaScript API. Examples are localize, overlays, ajax, etc.

<script type="module">
  import { ajax } from '@lion/ui/ajax.js';

ajax .fetch('data.json') .then(response => response.json()) .then(data => { // do something with the data }); </script>

Use a Web Component

You can also use the lion elements directly, although this is likely not a common use case.

<script type="module">
  import '@lion/ui/define/lion-input.js';
</script>

<lion-input name="firstName"></lion-input>

Issues

If you encounter an issue with any of the packages we are offering please open a new bug issue. Be sure to include a description of the expected and the current behavior - additional adding a reproduction always helps.

Feature requests

When you have an idea on how we could improve, please check our discussions to see if there are similar ideas or feature requests. If there are none, please start your feature request as a new discussion topic. Add the title [Feature Request] My awesome feature and a description of what you expect from the improvement and what the use case is.

Content

| Name | version | description | | --------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | @lion/ui | @lion/ui version | Set of components | | @lion/ajax | @lion/ajax version | A small wrapper around fetch | | Singleton-manager | Singleton-manager version | A singleton manager provides a way to make sure a singleton instance loaded from multiple file locations stays a singleton. Primarily useful if two major version of a package with a singleton is used. | | Babel plugin extend docs | babel-plugin-extend-docs version | A plugin which rewrites imports and templates according to a configuration. This enables the reuse of existing documentation from source packages while still using your extensions code. | | Providence analytics | providence-analytics version | Providence is the 'All Seeing Eye' that generates usage statistics by analyzing code. It measures the effectivity and popularity of your software. With just a few commands you can measure the impact for (breaking) changes, making your release process more stable and predictable. | | Publish docs | publish-docs version | A tool that copies and processes your documentation (in a monorepo) so it can be published/shipped with your package. | | Remark extend | remark-extend version | A plugin for remark to extend markdown by importing from source files. | | Rocket preset extend lion docs | rocket-preset-extend-lion-docs version | When maintaining your own extension layer of lion you most likely want to maintain a similar documentation. Copying and rewriting the markdown files works, but whenever something changes you need copy and rewrite again. To do this automatically you can use this preset for rocket. |

Technologies

Lion Web Components aims to be future-proof and use well-supported proven technology. The stack we have chosen should reflect this.

Rationale

We know from experience that making high quality, accessible UI components is hard and time consuming: it takes many iterations, a lot of development time and a lot of testing to get a generic component that works in every context, supports many edge cases and is accessible in all relevant screen readers.

Lion aims to do the heavy lifting for you. This means you only have to apply your own Design System: by delivering styles, configuring components and adding a minimal set of custom logic on top.

Coding guidelines

Check out our coding guidelines for more detailed information.

How to contribute

Please note: This project uses Npm Workspaces. If you want to run all demos locally you need to get at least npm 7+ and install all dependencies by executing npm install.

Lion Web Components are only as good as its contributions. Read our contribution guide and feel free to enhance/improve Lion. We keep feature requests closed while we're not working on them.

Site deployment

We use GitHub Pages to host our static website. Collaborators with push permission to the repository branch gh-pages can trigger a deploy by simply running:

npm run deploy

Contact

Feel free to create a github issue for any feedback or questions you might have.

Chat with me