UI component library based on the design system of the canton of zurich. | Read-only mirror of https://github.com/statistikZH/leu — Kanton Zürich. Issues & pull requests at the source. https://www.opensource.admin.ch/en/softwares/8xvd77
  • TypeScript 83.7%
  • CSS 9.8%
  • MDX 3.8%
  • JavaScript 2.7%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Dan Büschlen f1941e17dd
fix(input): prevent text label from wrapping. show ellipsis instead
test(input): don't check for an exact value match
2026-10-05 16:08:54 +02:00
.github/workflows chore: migrate from npm to pnpm 2026-09-29 16:18:56 +02:00
.husky chore: migrate from npm to pnpm 2026-09-29 16:18:56 +02:00
.storybook docs: update note about font definitions 2026-07-29 15:03:06 +02:00
scripts fix: update dependencies 2026-03-16 15:41:51 +01:00
src fix(input): prevent text label from wrapping. show ellipsis instead 2026-10-05 16:08:54 +02:00
.editorconfig init 2023-08-30 11:25:08 +02:00
.gitignore fix: update dependencies 2026-03-16 15:41:51 +01:00
.nvmrc ci: use npm trusted publishing to avoid long lived tokens 2025-12-17 13:01:24 +01:00
.prettierignore chore: hopefully the last missed extensions 2025-06-16 11:38:59 +02:00
.release-please-manifest.json chore(main): release leu 0.29.1 (#358) 2026-07-28 13:13:08 +02:00
AGENTS.md chore: migrate from npm to pnpm 2026-09-29 16:18:56 +02:00
CHANGELOG.md chore(main): release leu 0.29.1 (#358) 2026-07-28 13:13:08 +02:00
CODE_OF_CONDUCT.md chore: amend readme, code of conduct and contribution guidelines to match cantonal defaults 2023-11-08 15:06:08 +01:00
commitlint.config.cjs chore: add commitlint to enforce conventional commits 2023-09-27 14:33:25 +02:00
CONTRIBUTING.md chore: use a meaningful scope description 2026-03-25 12:41:59 +01:00
custom-elements-manifest.config.js refactor: migrate to typescript 2025-06-12 17:04:03 +02:00
eslint.config.mjs chore: update eslint to v9 and prettier 2026-03-13 12:00:06 +01:00
LICENSE docs: update name of organisation 2026-07-01 09:08:34 +02:00
package.json chore: migrate from npm to pnpm 2026-09-29 16:18:56 +02:00
pnpm-lock.yaml chore: migrate from npm to pnpm 2026-09-29 16:18:56 +02:00
pnpm-workspace.yaml chore: migrate from npm to pnpm 2026-09-29 16:18:56 +02:00
postcss.config.cjs feat(theme): define custom properties for all font styles and curves (#142) 2024-02-29 17:08:49 +01:00
publiccode.yml chore: add publiccode.yml 2026-08-26 15:40:11 +02:00
README.md chore: migrate from npm to pnpm 2026-09-29 16:18:56 +02:00
release-please-config.json build: always update the release-please PR 2025-07-03 14:04:52 +02:00
stat_zh.png docs: update name of organisation 2026-07-01 09:08:34 +02:00
stylelint.config.mjs chore: hopefully the last missed extensions 2025-06-16 11:38:59 +02:00
tsconfig.build.json refactor: migrate to typescript 2025-06-12 17:04:03 +02:00
tsconfig.json feat(tabs): add leu-tab-group, leu-tab and leu-tab-panel components 2026-04-09 09:36:12 +02:00
tsdown.config.ts fix: update dependencies 2026-03-16 15:41:51 +01:00
web-test-runner.config.mjs fix: update dependencies 2026-03-16 15:41:51 +01:00

🦁 leu

A UI component library based on the design system of the canton of zurich.

⚠️ Active development

This library hasn't had a major release yet. Therefore, all minor releases may include breaking changes. Check the changelog for details on the changes made. If you plan to use this library in production, please get in touch with us.

Prerequisites

Node.js >= v24 pnpm >= 12

Installation

npm i @statistikzh/leu

Usage

The storybook contains a in depth guide to install the library and a comprehensive overview of all components and their usage.

In order for the components to work, you need to load the theme styles and the font definitions globally. The theme file is part of the package (dist/theme.css). The fonts on the other hand have to be licensed and are therefore not included in this package.

If you have an environment that resolves bare module imports, you can use the library like this:

<link rel="stylesheet" href="@statistikzh/leu/theme.css" />
<script type="module">
  import "@statistikzh/leu/leu-input.js"
</script>

<leu-input label="Repository" type="text" value="@statistikzh/leu"></leu-input>

CDN

Browsers can't resolve bare module imports without import maps. But we can use a CDN to resolve the imports for us. This is useful if you're just using plain HTML and JavaScript without any build or transformation steps. This is also applicable in an environment like Observable.

<link
  rel="stylesheet"
  href="https://esm.sh/@statistikzh/leu@0.22.0/dist/theme.css"
/>
<script type="module">
  import "https://esm.sh/@statistikzh/leu@0.22.0/leu-input.js"
</script>

<leu-input label="Repository" type="text" value="@statistikzh/leu"></leu-input>

Linting and formatting

To scan the project for linting and formatting errors, run

pnpm run lint

To automatically fix linting and formatting errors, run

pnpm run format

Testing with Web Test Runner

To execute a single test run:

pnpm run test

To run the tests in interactive watch mode run:

pnpm run test:watch

Demoing with Storybook

To run a local instance of Storybook for your component, run

pnpm run storybook

To build a production version of Storybook, run

pnpm run storybook:build

Contributors

Thanks to the following people who have contributed to this project

@cubmic
@resmartiZH
@daenub

Contact

Dan Büschlen
dan.bueschlen@statistik.ji.zh.ch

License

This project uses the following license:

Guidelines for contributing

We welcome contributions. Please see our CONTRIBUTING.md file for detailed guidelines of how to contribute.

Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.