Angular Bootstrap component library providing comprehensive UI components for Angular applications
npx @tessl/cli install tessl/npm-ngx-bootstrap@20.0.0NGX-Bootstrap is a comprehensive Angular component library that provides Bootstrap 5 and Bootstrap 4 components for Angular applications. It offers a complete suite of UI components including modals, datepickers, dropdowns, tooltips, and more, all designed to integrate seamlessly with Angular's change detection and data binding systems.
npm install ngx-bootstrapNGX-Bootstrap uses modular imports, allowing you to import only the components you need:
import { AccordionModule } from 'ngx-bootstrap/accordion';
import { BsModalService, BsModalRef } from 'ngx-bootstrap/modal';
import { BsDatepickerModule } from 'ngx-bootstrap/datepicker';
import { TooltipModule } from 'ngx-bootstrap/tooltip';For services and utilities:
import { BsModalService } from 'ngx-bootstrap/modal';
import { positionElements } from 'ngx-bootstrap/positioning';
import { parseDate, formatDate } from 'ngx-bootstrap/chronos';import { Component } from '@angular/core';
import { BsModalService, BsModalRef } from 'ngx-bootstrap/modal';
import { AccordionModule } from 'ngx-bootstrap/accordion';
@Component({
selector: 'app-example',
template: `
<!-- Accordion -->
<accordion [closeOthers]="true">
<accordion-panel heading="Panel 1" [isOpen]="true">
Content for panel 1
</accordion-panel>
<accordion-panel heading="Panel 2">
Content for panel 2
</accordion-panel>
</accordion>
<!-- Modal trigger -->
<button class="btn btn-primary" (click)="openModal()">
Open Modal
</button>
`,
imports: [AccordionModule]
})
export class ExampleComponent {
modalRef?: BsModalRef;
constructor(private modalService: BsModalService) {}
openModal() {
this.modalRef = this.modalService.show(MyModalComponent);
}
}NGX-Bootstrap is built around several key architectural patterns:
TooltipConfig, AccordionConfig)Core interactive Bootstrap components including accordions, modals, dropdowns, and tabs.
// Accordion API
interface AccordionComponent {
isAnimated: boolean;
closeOthers: boolean;
}
interface AccordionPanelComponent {
heading: string;
isOpen: boolean;
isDisabled: boolean;
isOpenChange: EventEmitter<boolean>;
}
// Modal API
interface BsModalService {
show<T>(component: ComponentType<T>, config?: Partial<ModalOptions>): BsModalRef<T>;
hide(id?: number): void;
getModalsCount(): number;
onShow: EventEmitter<BsModalRef>;
onShown: EventEmitter<BsModalRef>;
onHide: EventEmitter<BsModalRef>;
onHidden: EventEmitter<BsModalRef>;
}
interface BsModalRef<T = any> {
content?: T;
hide(): void;
setClass(newClass: string): void;
}Advanced form controls including datepickers, timepickers, typeahead, and rating components.
// Datepicker API
interface BsDatepickerDirective {
bsConfig: Partial<BsDatepickerConfig>;
bsValue: Date | Date[];
minDate: Date;
maxDate: Date;
dateCustomClasses: DatepickerDateCustomClasses[];
daysDisabled: number[];
datesDisabled: Date[];
placement: 'top' | 'bottom' | 'left' | 'right';
triggers: string;
container: string;
isDisabled: boolean;
onShown: EventEmitter<BsDatepickerDirective>;
onHidden: EventEmitter<BsDatepickerDirective>;
bsValueChange: EventEmitter<Date>;
}
// Timepicker API
interface TimepickerComponent {
hourStep: number;
minuteStep: number;
secondsStep: number;
readonlyInput: boolean;
disabled: boolean;
mousewheel: boolean;
arrowkeys: boolean;
showSpinners: boolean;
showSeconds: boolean;
showMinutes: boolean;
min: Date;
max: Date;
}Navigation components including pagination, tabs, and carousel for content organization.
// Pagination API
interface PaginationComponent {
align: boolean;
boundaryLinks: boolean;
directionLinks: boolean;
disabled: boolean;
firstText: string;
lastText: string;
maxSize: number;
nextText: string;
previousText: string;
rotate: boolean;
totalItems: number;
itemsPerPage: number;
numPages: EventEmitter<number>;
pageChanged: EventEmitter<PageChangedEvent>;
}
// Carousel API
interface CarouselComponent {
noWrap: boolean;
noPause: boolean;
showIndicators: boolean;
interval: number;
pauseOnFocus: boolean;
indicatorsByChunk: boolean;
itemsPerSlide: number;
singleSlideOffset: boolean;
activeSlideChange: EventEmitter<number>;
slideRangeChange: EventEmitter<number[]>;
}Overlay components including tooltips, popovers, and dropdowns for contextual information.
// Tooltip API
interface TooltipDirective {
tooltip: string | TemplateRef<any>;
tooltipHtml: string | TemplateRef<any>;
placement: string;
triggers: string;
container: string;
isDisabled: boolean;
delay: number;
customClass: string;
tooltipContext: any;
tooltipPopupDelay: number;
adaptivePosition: boolean;
onShown: EventEmitter<TooltipDirective>;
onHidden: EventEmitter<TooltipDirective>;
}
// Dropdown API
interface BsDropdownDirective {
placement: 'top' | 'bottom' | 'left' | 'right';
triggers: string;
container: string;
dropup: boolean;
autoClose: boolean | 'outside' | 'inside';
insideClick: boolean;
isDisabled: boolean;
onShown: EventEmitter<BsDropdownDirective>;
onHidden: EventEmitter<BsDropdownDirective>;
isOpenChange: EventEmitter<boolean>;
}Core utilities for positioning, theming, date manipulation, and component loading.
// Positioning utilities
function positionElements(
hostElement: HTMLElement,
targetElement: HTMLElement,
placement: string,
appendToBody?: boolean
): { top: number; left: number };
// Date utilities (Chronos)
function parseDate(input: string, format?: string, locale?: string): Date;
function formatDate(date: Date, format: string, locale?: string): string;
function add(date: Date, amount: number, unit: TimeUnit): Date;
function subtract(date: Date, amount: number, unit: TimeUnit): Date;
// Theme utilities
function setTheme(theme: AvailableBsVersions): void;
function getBsVer(): IBsVersion;
// Component loading
interface ComponentLoader<T> {
provide(component: ComponentType<T>): ComponentLoader<T>;
to(container?: string): ComponentLoader<T>;
position(opts?: PositioningOptions): ComponentLoader<T>;
show(opts?: any): ComponentRef<T>;
hide(): ComponentLoader<T>;
dispose(): void;
}// Configuration interfaces
interface BsComponentConfig {
placement?: string;
triggers?: string;
container?: string;
}
// Event types
interface PageChangedEvent {
page: number;
itemsPerPage: number;
}
// Date types
type TimeUnit = 'year' | 'quarter' | 'month' | 'week' | 'day' | 'hour' | 'minute' | 'second' | 'millisecond';
interface DatepickerDateCustomClasses {
date: Date;
classes: string[];
}
// Modal types
interface ModalOptions {
backdrop?: boolean | 'static';
keyboard?: boolean;
focus?: boolean;
show?: boolean;
ignoreBackdropClick?: boolean;
class?: string;
containerClass?: string;
animated?: boolean;
data?: any;
initialState?: any;
providers?: StaticProvider[];
ariaDescribedby?: string;
ariaLabelledBy?: string;
ariaLabel?: string;
}
// Bootstrap version types
interface IBsVersion {
isBs3: boolean;
isBs4: boolean;
isBs5: boolean;
}
type AvailableBsVersions = 'bs3' | 'bs4' | 'bs5';