@ngx-popovers/core
v18.2.0
Published
A core package for the floating elements based on Angular and Floating-ui
Downloads
1,552
Maintainers
Readme
core
This library was generated with Nx and floating-ui for Angular applications.
To see a demo, click on the link provided.
FloatingService
Before use, ensure this service is added to the providers list.
You can import the FloatingService from '@ngx-popovers/core'.
Example usage:
import { FloatingService } from '@ngx-popovers/core';
@Component({
standalone: true,
providers: [FloatingService],
template: '',
styles: ''
})
export class AppComponent {
}
| Method | Description | Type |
|-------------------|-------------------------------------------------------------------------------|-------------------------|
| computePosition
| The computePosition
method is a proxy for computePosition
from floating-ui | ComputePositionReturn
|
| autoUpdate
| The autoUpdate
method is a proxy for autoUpdate
from floating-ui | cleanup function
|
floatingService = inject(FloatingService);
this.floatingService.computePosition(trigger, floating);
You can also import all types and methods from floating-ui from this package:
import {
Derivable,
FlipOptions,
OffsetOptions,
Placement,
ShiftOptions
} from '@ngx-popovers/core';
portal
To see a demo, click on the link provided.
Usage
The <ngx-portal/>
component displays content on the body.
You can also display portal content within an element of your choice:
<div #portalWillBeInsideMe>
<p>Portal content will be rendered after this tag</p>
<!-- Here -->
</div>
<ngx-portal [bindTo]="portalWillBeInsideMe">
<p>It will be displayed as the last child of the div</p>
</ngx-portal>
This component is essential for displaying tooltips correctly without overlapping with other elements on the page.
ClickOutside directive
The click outside directive manages clicks inside and outside HTMLElements. This directive is used by the ngx-floating component.
To see a demo, click on the link provided.
Usage
import { ClickOutsideDirective, ClickOutsideEvent } from '@ngx-popovers/core';
@Component({
selector: 'ngx-click-outside-example',
standalone: true,
imports: [ClickOutsideDirective],
template: `
<div
(ngxClickOutside)="onClick($event)"
(inside)="onInsideClicked($event)"
(outside)="onOutsideClicked($event)"
></div>
`
})
export class ClickOutsideExample {
onClick(event: ClickOutsideEvent) {
console.log('Click!', el);
}
onInsideClicked(el: EventTarget) {
console.log('Inside click!', el);
}
onOutsideClicked(el: EventTarget) {
console.log('Outside click!', el);
}
}
floating
The Floating component implements the floating-ui library for Angular
To see a demo, click on the link provided.
Usage
For more information about the properties, refer to the official documentation for floating-ui.
<div #reference>
<p>Reference content</p>
</div>
<ngx-floating
[reference]="reference"
[placement]="'bottom'"
[middleware]="middleware"
>
<div class="floating">
<p>Floating content</p>
</div>
</ngx-floating>
API
Inputs
| Input | Description | Type | Default |
|--------------|---------------------------------------------------------------|--------------------------------------|---------------------|
| placement
| controls the position of the floating relative to the trigger | Placement
| bottom
|
| middleware
| list of middleware
from floating-ui | MiddlewareList
| offset(4), flip()
|
| autoUpdate
| updates floating element automatically | boolean
| true
|
| bindTo
| renders floating element as last child of bindTo | string
| HTMLElement
| .body
|
| strategy
| This is the type of CSS position property to use | absolute
| fixed
| undefined
| undefined
|
Outputs
| Output | Description | Type |
|-------------------------|----------------------------------------------------------------------|-------------------------|
| clickedOutside
| emits when user clicks outside the floating element | Element
|
| clickedInside
| emits when user clicks inside the floating element | Element
|
| computePositionReturn
| emits every time when the floating component calls computePosition
| ComputePositionReturn
|
Configuration
There is a configuration token NGX_FLOATING_CONFIG
.
Please use the NgxFloatingConfig
class to change the default floating properties.
export const FloatingConfigProvider: Provider = {
provide: NGX_FLOATING_CONFIG,
useValue: new NgxFloatingConfig({
placement: 'top-end',
arrow: true
})
};
Arrow
The arrow component adds an arrow to the floating component.
<div #trigger>Trigger</div>
<ngx-floating
[reference]="trigger"
>
<p>Floating content</p>
<ngx-arrow padding="10" />
</ngx-floating>
To see a demo, click on the link provided.
You can provide your own component for arrow visualization:
@Component({
standalone: true,
template: `
<div
style="
width: 5px;
height: 5px;
transform: rotate(45deg);
background: indianred;
"
></div>
`
})
export class CustomArrow extends FloatingArrowBase {
}
export const ArrowProvider: Provider = {
provide: NGX_ARROW_COMPONENT,
useValue: CustomArrow
};
Any module:
@Component({
standalone: true,
selector: 'app',
templateUrl: './app.component.html',
styleUrl: './app.component.scss',
providers: [ArrowProvider]
})
Sources
This package is a major dependency for other npm packages: