Utilities
The parts you reach for after the components: tracking, app-wide defaults and your own variants.
Tracking
Name the action on the component. Nothing is sent unless you connect a sink and consent is given.
<Button track="signup_start">Start free</Button>App-wide defaults
Set once in a layout. Explicit props still win.
<script>
import { setDefaults } from '@tcpsystems/ui/foundation/extend';
setDefaults({ Button: { size: 'sm' } });
</script>Your own variants
import { registerVariant } from '@tcpsystems/ui/foundation/extend';
registerVariant('Button', 'brand');
/* your CSS: .tcp-button[data-variant='brand'] { ... } */Plugins
import { registerPlugin } from '@tcpsystems/ui/foundation/extend';
registerPlugin({ name: 'acme', setup({ registerVariant }) { registerVariant('Badge', 'acme'); } });Rune utilities
Debounce, disclosure, selection and similar utilities are being added under @tcpsystems/ui/utils.