# @tradeshift/elements

Latest version **0.41.0** (published 2026-08-19) · 0 weekly downloads

## Install

```sh
npm install @tradeshift/elements
pnpm add @tradeshift/elements
yarn add @tradeshift/elements
bun add @tradeshift/elements
```

## Health

**Score 55/100 (C)** — status: active.

Positive: esm support; no vulnerabilities; recently updated; high maintenance score.

Warnings: low downloads; no types; low quality score; pre 1.0.

## Facts

| | |
|---|---|
| Version | 0.41.0 |
| Published | 2026-08-19 |
| First published | 2019-03-15 |
| Weekly downloads | 0 |
| TypeScript types | none |
| Module format | ESM + CommonJS |
| Dependencies | 1 |
| Unpacked size | 73.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 18 |
| Maintainers | tradeshift-ci, kian-esmailpour, aleksandr.elkin, tradeshift-larsbojensen |

## Links

- npm: https://www.npmjs.com/package/@tradeshift/elements
- Repository: https://github.com/Tradeshift/elements
- Homepage: https://github.com/Tradeshift/elements#readme
- Issues: https://github.com/Tradeshift/elements/issues
- npm.io page: https://npm.io/package/@tradeshift/elements

## Dependencies (1)

- [lit-element](https://npm.io/package/lit-element.md) ^4.2.2

## Recent versions

- 0.41.0 (latest) — 2026-08-19
- 0.40.2 — 2022-11-03
- 0.40.1 — 2022-10-21
- 0.40.0 — 2022-07-04
- 0.39.0 — 2022-06-30
- 0.38.0 — 2022-04-11
- 0.36.3 — 2022-04-06
- 0.36.1 — 2022-03-11
- 0.35.0 — 2022-03-01
- 0.34.0 — 2022-02-15
- 0.33.8 — 2022-01-27
- 0.33.7 — 2022-01-25
- 0.33.5 — 2022-01-24
- 0.33.3 — 2022-01-19
- 0.33.2 — 2022-01-17
- … 89 more at https://npm.io/package/@tradeshift/elements/versions

## README

<h1 align="center">
    <a href="https://tradeshift.com/">
      <img alt="Tradeshift" src="https://tradeshift.com/wp-content/themes/Tradeshift/img/brand/logo-black.png"/>
    </a>
</h1>

<h1 align="center">Elements</h1>

<p align="center">
  Reusable Tradeshift UI Components as Web Components
    <a href="https://tradeshift.github.io/elements">
      https://tradeshift.github.io/elements
    </a>
</p>

<p align="center">
    <a href="https://www.npmjs.com/package/@tradeshift/elements">
      <img alt="NPM Version" src="https://badgen.net/npm/v/@tradeshift/elements" height="20"/>
    </a>
    <a href="https://npmcharts.com/compare/@tradeshift/elements?minimal=true">
      <img alt="Downloads per month" src="https://badgen.net/npm/dm/@tradeshift/elements" height="20"/>
    </a>
    <a href="https://github.com/Tradeshift/elements/graphs/contributors">
      <img alt="Contributors" src="https://badgen.net/github/contributors/Tradeshift/elements" height="20"/>
    </a>
    <br/>
    <a href="https://github.com/Tradeshift/elements/issues?q=is%3Aissue+is%3Aclosed">
      <img alt="Closed issues" src="https://badgen.net/github/closed-issues/Tradeshift/elements" height="20"/>
    </a>
    <a href="https://github.com/Tradeshift/elements/issues">
      <img alt="Open issues" src="https://badgen.net/github/open-issues/Tradeshift/elements" height="20"/>
    </a>
    <a href="https://github.com/Tradeshift/elements/pulls">
      <img alt="Open pull requests" src="https://badgen.net/github/open-prs/Tradeshift/elements" height="20"/>
    </a>
    <a href="https://github.com/Tradeshift/elements/pulls?q=is%3Apr+is%3Aclosed">
      <img alt="Closed pull requests" src="https://badgen.net/github/closed-prs/Tradeshift/elements" height="20"/>
    </a>
    <a href="https://github.com/Tradeshift/elements/commits/master">
      <img alt="Last commit" src="https://badgen.net/github/last-commit/Tradeshift/elements" height="20"/>
    </a>
</p>

## ➤ How to use it

- Install the core package of the Elements

```shell
$ npm i @tradeshift/elements --save
```

- Install the package of the component you need ([available components](https://github.com/Tradeshift/elements/tree/master/packages/components))

```shell
$ npm i @tradeshift/elements.button --save
```

- Import the component

```js
import '@tradeshift/elements.button';
```

or

```html
<script src="node_modules/@tradeshift/elements/lib/core.umd.js"></script>
<script src="node_modules/@tradeshift/elements.button/lib/button.umd.js"></script>
```

- Import the css variables

```js
import '@tradeshift/elements/src/vars.css';
```

or

```html
<link rel="stylesheet" href="node_modules/@tradeshift/elements/src/vars.css" />
```

- Use it

```html
<ts-button type="primary"> Sample Button </ts-button>
```

- Our components rely on having the `Open Sans` available, You can see the `font-weight` and `font-style` you need to load [here](https://github.com/Tradeshift/elements/blob/master/packages/core/src/fonts.css), or you can just load it from our package (for now)

```html
<link rel="stylesheet" href="node_modules/@tradeshift/elements/src/fonts.css" />
```

## ➤ Polyfills

For supporting IE11 you need to do couple of more things

- If you are using the [Tradeshift-ui](https://github.com/Tradeshift/tradeshift-ui) you need to upgrade it to a compatible version:

  - For version `12` you should upgrade to `12.2.9` or newer version
  - For version `11` you should upgrade to `11.3.2` or newer version

- Don't shim CSS Custom Properties in IE11

```html
<!-- Place this in the <head>, before the Web Component polyfills are loaded -->
<script>
	if (!window.Promise) {
		window.ShadyCSS = { nativeCss: true };
	}
</script>
```

##### You have two options for polyfills library:

1. Use [`@open-wc/polyfills-loader`](https://github.com/open-wc/open-wc/tree/master/packages/polyfills-loader)

- Installation

```shell
$ npm i @open-wc/polyfills-loader
```

- Load it

```js
import loadPolyfills from '@open-wc/polyfills-loader';

loadPolyfills().then(() => import('./my-app.js'));
```

2. Use [`@webcomponents/webcomponentsjs`](https://github.com/webcomponents/polyfills/tree/master/packages/webcomponentsjs)

- Installation

```shell
$ npm i @webcomponents/webcomponentsjs --save
```

- Enable ES5 class-less Custom Elements

```html
<script src="/node_modules/@webcomponents/webcomponentsjs/custom-elements-es5-adapter.js"></script>
```

- Load appropriate polyfills and shims with [`@webcomponents/webcomponentsjs`](https://github.com/webcomponents/webcomponentsjs)

```html
<script src="/node_modules/@webcomponents/webcomponentsjs/webcomponents-loader.js" defer></script>
```

- Load the core and components scripts after `WebComponensReady` event:

```html
<!-- Load Tradeshift Elements once the polyfills are ready -->
<script>
	window.addEventListener('WebComponentsReady', function () {
		// Load Tradeshift Elements core package
		var coreEl = document.createElement('script');
		coreEl.setAttribute('src', '/packages/core/lib/core.umd.js');
		document.body.appendChild(coreEl);

		// Load other Tradeshift Elements once the core package is loaded
		coreEl.onload = function () {
			var components = ['root', 'button'];
			components.forEach(function (component) {
				var el = document.createElement('script');
				el.setAttribute('src', '/packages/components/' + component + '/lib/' + component + '.umd.js');
				document.body.appendChild(el);
			});
		};
	});
</script>
```

## ➤ How to run it

- Make sure your node version is > 10. If you are using `nvm` you can just run:

```shell
$ nvm use
```

- We are using [lerna](https://github.com/lerna/lerna) to manage our components in single repo but their own packages, so for installation you need to run:

```shell
$ npx lerna bootstrap     # bootstrap all packages and make sure they work together
```

- You can start the development server which is watching for changes:

```shell
$ npm start
```

- Open [http://127.0.0.1:8080/](http://127.0.0.1:8080/), or e.g. http://127.0.0.1:8080/packages/components/{PACKAGE_NAME}/ if you want to test a specific element and that element (PACKAGE_NAME) has got an `index.html` file. If not, feel free to add one. Example: [http://127.0.0.1:8080/packages/components/action-select/](http://127.0.0.1:8080/packages/components/action-select/)

## ➤ How to contribute

Thanks for your interest and help!

- First thing you need to do is read this [[Component Checklist](https://github.com/Tradeshift/elements/wiki/Component-checklist)] which contains lots of important information about what you need to consider when you are creating/changing components

##### [General info](https://github.com/Tradeshift/elements/wiki/Useful-materials-starter)

You can find some [links to useful materials](https://github.com/Tradeshift/elements/wiki/Useful-materials-starter) about what we are using and some tutorials and articles that can help you get started.

#### `ts.elements`-specific info

- Extend `TSElement`, instead of `LitElement`
- Import `css`, `unsafeCSS` & `html` from `@tradeshift/elements` instead of `lit-html`
- Add the UMD global namespace to [`rollup.globals.json`](https://github.com/Tradeshift/elements/blob/master/rollup.globals.json)
- Add your package to the [`package.json`](<(https://github.com/Tradeshift/elements/blob/master/package.json)>) dependencies

## ➤ How to create new component

To make it simpler and more consistent, we added a `Component generator`, You can use our its script to generate a new component from terminal and it will create the component inside `packages/components`

- **NOTE**: Still you need to add the UMD global namespace to [`rollup.globals.json`](https://github.com/Tradeshift/elements/blob/master/rollup.globals.json) and add your package to the [`package.json`](<(https://github.com/Tradeshift/elements/blob/master/package.json)>) dependencies, for now

```shell
$ npm run component-gen
```

## ➤ How to release

We are using [lerna to publish](https://github.com/lerna/lerna/tree/main/commands/version#readme) our elements

- Checkout a master branch.
- Run the `npm run new-version` command. It will invoke a shell script that:
  - calculate a new version number
  - create a new branch with new version number and a new git tag
  - generate CHANGELOG.md for all components
  - make a commit with a predefined commit message to created branch
  - push this branch and git tag to origin
- Go to Github and create a PR from the branch created at previous step.
- After merge a new version of elements will be built and published to NPM registry and Github Packages.

## ➤ How to test a PR before it's merged

Comment on the PR to publish a temporary preview version to GitHub Packages (restricted to Tradeshift org members / the repo owner):

- `npm publish` — builds and publishes **every** package with the same `0.0.0-<uuid>` version, under the `pr-preview` dist-tag. Package dependencies between them (e.g. `@tradeshift/elements.header`'s dependency on `@tradeshift/elements.app-icon`) are automatically rewritten to match.
- `npm publish <name>` — publishes only that one package, e.g. `npm publish app-icon` (`npm publish core` or `npm publish elements` for `@tradeshift/elements` itself). Use this only when nothing that package depends on changed — it does not rewrite that package's own dependency ranges, so a change in a dependency won't be reflected unless that dependency is also published (with `npm publish` or its own `npm publish <name>`).
- The bot replies with the exact `npm install ... --registry=https://npm.pkg.github.com` command(s) to try it out.

---

## ➤ [Polyfill Limitations](https://github.com/Tradeshift/elements/wiki/Polyfill-Limitations)

You can see a list of limitations that we should watch out for, [here](https://github.com/Tradeshift/elements/wiki/Polyfill-Limitations)

## ➤ License

- You can always create forks on GitHub, submit Issues and Pull Requests.
- You can only use Tradeshift Elements to make apps on a Tradeshift platform, e.g. tradeshift.com.
- You can fix a bug until the bugfix is deployed by Tradeshift.
- You can host Tradeshift Elements yourself.
- If you want to make a bigger change or just want to talk with us, reach out to our team here on GitHub.

You can read the full license agreement in the [LICENSE.md](https://github.com/Tradeshift/elements/blob/master/LICENSE.md).

---
_Source: https://npm.io/package/@tradeshift/elements · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
