@kanso-protocol/elements

Framework-agnostic custom elements for the Kanso Protocol design system — use components from React, Vue, Svelte, or plain HTML, no Angular required.
1,678 5
Install
npm install @kanso-protocol/elements
Latest Version:0.4.0
License:MIT
Last Updated:Oct 1, 2026
Links: GitHub  ·  npm
Maintainer: gregnblack

@kanso-protocol/elements

Framework-agnostic custom elements for the Kanso Protocol design system. Use <kp-badge>, <kp-card>, <kp-select>, … from React, Vue, Svelte, or plain HTML — no Angular required.

Angular apps should use @kanso-protocol/ui instead — same components, no embedded runtime, full tree-shaking. This package embeds the Angular runtime so non-Angular hosts can render Kanso.

Status: experimental (0.x). API is stable but the packaging (single bundle today) may evolve. Pin the exact version.

Install

npm install @kanso-protocol/elements @kanso-protocol/ui

@kanso-protocol/ui is used for the token stylesheet (styles/tokens.css); the components themselves are bundled in.

Use

Import once — it auto-defines every kp-* element — and load the tokens:

<link rel="stylesheet" href="node_modules/@kanso-protocol/ui/styles/tokens.css" />
<script type="module">
  import '@kanso-protocol/elements';
</script>

<kp-badge appearance="success">Active</kp-badge>
<kp-card><h3>Works in any framework</h3></kp-card>

Or control timing:

import { defineKansoElements } from '@kanso-protocol/elements';
await defineKansoElements();

Components render in light DOM, so the global tokens.css and any brand theme apply unchanged.

API mapping

Angular Custom element
string/number/bool @Input attribute foo="…" or property el.foo = …
object/array @Input property only: el.items = [...]
@Output() valueChange el.addEventListener('valueChange', e => e.detail)
content projection light-DOM children / named slots

React (19+)

<kp-select size="md" onValueChange={(e) => setValue(e.detail)} />

React ≤ 18: set object inputs and attach listeners via a ref (see the full guide).

Vue

<kp-select :items.prop="options" size="md" @valueChange="onChange" />

Mark kp-* as custom elements: app.config.compilerOptions.isCustomElement = t => t.startsWith('kp-').

Not available as elements

Four Kanso surfaces are attribute selectors / structural directives and can't be custom elements: kpButton and kpTab (apply .kp-button / .kp-tab classes to a native <button>), and kpVirtualRow / kpTableCell (Angular-only). See the web-components guide.

License

MIT — © GregNBlack. Part of the Kanso Protocol monorepo.

Related Packages

@syidax/core

A consistent design system for React, Angular, Vue and the web. Themeable UI Web...

210
@syidax/core-pro

A consistent design system for React, Angular, Vue and the web. Core Pro adds tr...

204
@component-compass/cli

Open-source CLI for measuring design-system component usage across multi-framewo...

20,270
@scoutui/cli

Scan React and Vue repos for design-system component usage, and upload the resul...

989 2
@infineon/infineon-design-system-vue

Vue wrapper for Infineon Design System Web Components

228,032 37

Version History

Version Released License
0.4.0 MIT
0.3.0 MIT
0.2.0 MIT
0.1.4 MIT
0.1.3 MIT