Angular powered Bootstrap UI component library with comprehensive Bootstrap 5 components for Angular applications
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
User feedback components including toast notifications, tooltips, and popovers for providing contextual information and notifications to users.
import {
NgbToastModule,
NgbTooltipModule,
NgbPopoverModule
} from '@ng-bootstrap/ng-bootstrap';Toast notification component for displaying temporary messages.
@Component({
selector: 'ngb-toast',
exportAs: 'ngbToast'
})
class NgbToast {
/** Enable/disable fade animation */
@Input() animation: boolean;
/** If true, toast will hide automatically after delay */
@Input() autohide: boolean;
/** Delay in milliseconds before auto-hiding */
@Input() delay: number;
/** Toast header text */
@Input() header: string;
/** CSS class for the toast */
@Input() class: string;
/** Event emitted when toast is hidden */
@Output() hide: EventEmitter<void>;
/** Programmatically show the toast */
show(): void;
/** Programmatically hide the toast */
hide(): void;
}Header component for toast notifications.
@Component({
selector: 'ngb-toast-header',
exportAs: 'ngbToastHeader'
})
class NgbToastHeader {}Tooltip directive for displaying contextual help on hover or focus.
@Directive({
selector: '[ngbTooltip]',
exportAs: 'ngbTooltip'
})
class NgbTooltip {
/** Tooltip content (string or template) */
@Input() ngbTooltip: string | TemplateRef<any>;
/** CSS class for the tooltip */
@Input() tooltipClass: string;
/** Tooltip placement */
@Input() placement: Placement;
/** Events that trigger tooltip (space-separated) */
@Input() triggers: string;
/** Container element for the tooltip */
@Input() container: string;
/** If true, tooltip is disabled */
@Input() disableTooltip: boolean;
/** Delay before showing tooltip */
@Input() openDelay: number;
/** Delay before hiding tooltip */
@Input() closeDelay: number;
/** Event emitted when tooltip is shown */
@Output() shown: EventEmitter<void>;
/** Event emitted when tooltip is hidden */
@Output() hidden: EventEmitter<void>;
/** Programmatically open the tooltip */
open(): void;
/** Programmatically close the tooltip */
close(): void;
/** Toggle tooltip visibility */
toggle(): void;
/** Check if tooltip is open */
isOpen(): boolean;
}Popover directive for displaying rich content in an overlay.
@Directive({
selector: '[ngbPopover]',
exportAs: 'ngbPopover'
})
class NgbPopover {
/** Popover content (string or template) */
@Input() ngbPopover: string | TemplateRef<any>;
/** Popover title */
@Input() popoverTitle: string | TemplateRef<any>;
/** CSS class for the popover */
@Input() popoverClass: string;
/** Popover placement */
@Input() placement: Placement;
/** Events that trigger popover (space-separated) */
@Input() triggers: string;
/** Container element for the popover */
@Input() container: string;
/** If true, popover is disabled */
@Input() disablePopover: boolean;
/** Delay before showing popover */
@Input() openDelay: number;
/** Delay before hiding popover */
@Input() closeDelay: number;
/** Event emitted when popover is shown */
@Output() shown: EventEmitter<void>;
/** Event emitted when popover is hidden */
@Output() hidden: EventEmitter<void>;
/** Programmatically open the popover */
open(): void;
/** Programmatically close the popover */
close(): void;
/** Toggle popover visibility */
toggle(): void;
/** Check if popover is open */
isOpen(): boolean;
}@Injectable({ providedIn: 'root' })
class NgbToastConfig {
/** Default animation setting */
animation: boolean;
/** Default autohide setting */
autohide: boolean;
/** Default delay in milliseconds */
delay: number;
/** Default CSS class */
toastClass: string;
}
@Injectable({ providedIn: 'root' })
class NgbTooltipConfig {
/** Default animation setting */
animation: boolean;
/** Default autoClose setting */
autoClose: boolean;
/** Default placement */
placement: Placement;
/** Default triggers */
triggers: string;
/** Default container */
container: string;
/** Default disabled state */
disableTooltip: boolean;
/** Default CSS class */
tooltipClass: string;
/** Default open delay */
openDelay: number;
/** Default close delay */
closeDelay: number;
}
@Injectable({ providedIn: 'root' })
class NgbPopoverConfig {
/** Default animation setting */
animation: boolean;
/** Default autoClose setting */
autoClose: boolean;
/** Default placement */
placement: Placement;
/** Default triggers */
triggers: string;
/** Default container */
container: string;
/** Default disabled state */
disablePopover: boolean;
/** Default CSS class */
popoverClass: string;
/** Default open delay */
openDelay: number;
/** Default close delay */
closeDelay: number;
}interface NgbToastOptions {
/** CSS class for the toast */
class?: string;
/** Delay before auto-hiding */
delay?: number;
/** If true, toast will auto-hide */
autohide?: boolean;
/** Header text */
header?: string;
}@Component({
template: `
<div class="mb-3">
<button class="btn btn-primary me-2" (click)="showSuccess()">
Show Success
</button>
<button class="btn btn-warning me-2" (click)="showWarning()">
Show Warning
</button>
<button class="btn btn-danger" (click)="showError()">
Show Error
</button>
</div>
<ngb-toast
*ngFor="let toast of toasts; trackBy: trackByToast"
[class]="toast.class"
[autohide]="true"
[delay]="toast.delay"
(hide)="removeToast(toast)">
<ng-template [ngIf]="toast.header">
<ngb-toast-header>
<strong>{{ toast.header }}</strong>
</ngb-toast-header>
</ng-template>
{{ toast.message }}
</ngb-toast>
`
})
export class BasicToastComponent {
toasts: any[] = [];
showSuccess() {
this.toasts.push({
id: Date.now(),
class: 'bg-success text-white',
header: 'Success',
message: 'Operation completed successfully!',
delay: 5000
});
}
showWarning() {
this.toasts.push({
id: Date.now(),
class: 'bg-warning text-white',
header: 'Warning',
message: 'Please check your input.',
delay: 5000
});
}
showError() {
this.toasts.push({
id: Date.now(),
class: 'bg-danger text-white',
header: 'Error',
message: 'Something went wrong!',
delay: 8000
});
}
removeToast(toast: any) {
this.toasts = this.toasts.filter(t => t.id !== toast.id);
}
trackByToast(index: number, toast: any) {
return toast.id;
}
}@Component({
template: `
<div class="mb-3">
<button
class="btn btn-primary me-2"
ngbTooltip="This is a basic tooltip">
Hover me
</button>
<button
class="btn btn-secondary me-2"
ngbTooltip="Tooltip on top"
placement="top">
Top tooltip
</button>
<button
class="btn btn-success"
ngbTooltip="Custom styled tooltip"
tooltipClass="custom-tooltip">
Custom tooltip
</button>
</div>
`,
styles: [`
:host ::ng-deep .custom-tooltip .tooltip-inner {
background-color: #28a745;
font-size: 14px;
}
`]
})
export class BasicTooltipComponent {}@Component({
template: `
<button
class="btn btn-info"
[ngbTooltip]="tooltipTemplate">
Rich content tooltip
</button>
<ng-template #tooltipTemplate>
<div class="text-center">
<strong>Rich Tooltip</strong><br>
<small>With <em>formatted</em> content</small>
</div>
</ng-template>
`
})
export class TemplateTooltipComponent {}@Component({
template: `
<div class="mb-3">
<button
class="btn btn-primary me-2"
ngbPopover="This is a basic popover content"
popoverTitle="Basic Popover">
Click me
</button>
<button
class="btn btn-secondary me-2"
ngbPopover="Popover on hover"
popoverTitle="Hover Popover"
triggers="hover">
Hover me
</button>
<button
class="btn btn-success"
[ngbPopover]="popoverTemplate"
popoverTitle="Template Popover">
Template popover
</button>
</div>
<ng-template #popoverTemplate>
<div>
<p>This is a <strong>template</strong> popover.</p>
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
</div>
</ng-template>
`
})
export class BasicPopoverComponent {}@Component({
template: `
<div class="mb-3">
<button class="btn btn-primary me-2" (click)="tooltip.open()">
Show Tooltip
</button>
<button class="btn btn-secondary me-2" (click)="tooltip.close()">
Hide Tooltip
</button>
<button class="btn btn-info" (click)="tooltip.toggle()">
Toggle Tooltip
</button>
</div>
<button
class="btn btn-outline-primary"
ngbTooltip="Programmatically controlled tooltip"
triggers="manual"
#tooltip="ngbTooltip">
Controlled tooltip
</button>
<div class="mt-3">
<button class="btn btn-warning me-2" (click)="popover.open()">
Show Popover
</button>
<button class="btn btn-dark me-2" (click)="popover.close()">
Hide Popover
</button>
</div>
<button
class="btn btn-outline-warning"
ngbPopover="Programmatically controlled popover"
popoverTitle="Controlled"
triggers="manual"
#popover="ngbPopover">
Controlled popover
</button>
`
})
export class ProgrammaticControlComponent {}@Injectable({ providedIn: 'root' })
export class ToastService {
toasts: any[] = [];
show(message: string, options: Partial<NgbToastOptions> = {}) {
this.toasts.push({
id: Date.now(),
message,
...options
});
}
showSuccess(message: string) {
this.show(message, {
class: 'bg-success text-white',
header: 'Success',
delay: 5000
});
}
showError(message: string) {
this.show(message, {
class: 'bg-danger text-white',
header: 'Error',
delay: 8000
});
}
remove(toast: any) {
this.toasts = this.toasts.filter(t => t.id !== toast.id);
}
clear() {
this.toasts = [];
}
}
@Component({
selector: 'app-toast-container',
template: `
<ngb-toast
*ngFor="let toast of toastService.toasts; trackBy: trackByToast"
[class]="toast.class"
[autohide]="toast.autohide !== false"
[delay]="toast.delay || 5000"
(hide)="toastService.remove(toast)">
<ng-template [ngIf]="toast.header">
<ngb-toast-header>
<strong>{{ toast.header }}</strong>
</ngb-toast-header>
</ng-template>
{{ toast.message }}
</ngb-toast>
`,
styles: [`
:host {
position: fixed;
top: 20px;
right: 20px;
z-index: 1200;
}
`]
})
export class ToastContainerComponent {
constructor(public toastService: ToastService) {}
trackByToast(index: number, toast: any) {
return toast.id;
}
}