Skip to main content

Installation

This guide will show you how to install Takeoff UI from the public npm registry and integrate it into your project.

Prerequisites

  • Node.js ≥ 16.x
  • One of: npm, Yarn, or pnpm

Install Packages

Takeoff UI is published under the @takeoff-ui scope on npm. You can install the core package alone, or add framework-specific bindings:

Using npm:

npm install @takeoff-ui/core           # core web components
npm install @takeoff-ui/react # React bindings
npm install @takeoff-ui/vue # Vue bindings
npm install @takeoff-ui/angular # Angular bindings

Using pnpm:

pnpm add @takeoff-ui/core @takeoff-ui/react @takeoff-ui/vue @takeoff-ui/angular

Using Yarn:

yarn add @takeoff-ui/core @takeoff-ui/react @takeoff-ui/vue @takeoff-ui/angular

Quick Start

After installing, import the core CSS and register the component library for your framework of choice.

React

Add the core stylesheet in your entry point (e.g. src/main.tsx):

import '@takeoff-ui/core/dist/core/core.css';

Then use a component:

/src/App.tsx
import { TkButton } from '@takeoff-ui/react';

export default function App() {
return <TkButton label="Click me" />;
}

Vue

Add core.css and ComponentLibrary to main.ts file.

/src/main.ts
import '@takeoff-ui/core/dist/core/core.css';
import { createApp } from 'vue';
import { ComponentLibrary } from '@takeoff-ui/vue';
import App from './App.vue';

createApp(App).use(ComponentLibrary).mount('#app');
/src/App.vue
<template>
<TkButton label="Click me" />
</template>

Angular

The package was published with Angular 20

/src/styles.css
@import '@takeoff-ui/core/dist/core/core.css';
/src/app/app.ts
import { Component, inject } from '@angular/core';
import { RouterOutlet } from '@angular/router';
import {
FormBuilder,
FormGroup,
FormsModule,
ReactiveFormsModule,
} from '@angular/forms';
import { JsonPipe } from '@angular/common';
import { TkButton, TkInput, TextValueAccessor } from '@takeoff-ui/angular';

@Component({
selector: 'app-root',
imports: [
RouterOutlet,
TkButton,
TkInput,
TextValueAccessor,
ReactiveFormsModule,
JsonPipe,
FormsModule,
],
templateUrl: './app.html',
standalone: true,
styleUrl: './app.css',
})
export class App {
private readonly fb = inject(FormBuilder);

formGroup: FormGroup = this.fb.group({
firstname: [''],
surname: [''],
});

onButtonClick(): void {
alert('Button clicked!');
}
}
/src/app/app.html
<div class="container">
<h4>Button and Event Usage Example</h4>
<tk-button
label="Example Button"
variant="primary"
(tk-click)="onButtonClick()"
></tk-button>

<h4>Reactive Form Example</h4>
<form [formGroup]="formGroup">
<tk-input label="Name" formControlName="firstname" />
<tk-input label="Surname" formControlName="surname" />
</form>

{{ formGroup.getRawValue() | json }}
</div>

<router-outlet />

Next.js (App Router)

In src/app/layout.tsx or src/app/page.tsx:

import '@takeoff-ui/core/dist/core/core.css';

If you need dynamic imports for client-only components:

'use client';

import dynamic from 'next/dynamic';
const TkButton = dynamic(
() => import('@takeoff-ui/react').then(mod => mod.TkButton),
{ ssr: false },
);

export default function Example() {
return <TkButton label="Click me" />;
}

Next Steps

Now that Takeoff UI is installed, head over to the Components section in this documentation to explore available widgets, their props, and usage examples. Happy building!