@aquera/nile-elements 0.1.39 → 0.1.40-beta-1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/nile-pagination/index.cjs.js +2 -0
- package/dist/nile-pagination/index.cjs.js.map +1 -0
- package/dist/nile-pagination/index.esm.js +1 -0
- package/dist/nile-pagination/nile-pagination-utils.cjs.js +2 -0
- package/dist/nile-pagination/nile-pagination-utils.cjs.js.map +1 -0
- package/dist/nile-pagination/nile-pagination-utils.esm.js +1 -0
- package/dist/nile-pagination/nile-pagination.cjs.js +2 -0
- package/dist/nile-pagination/nile-pagination.cjs.js.map +1 -0
- package/dist/nile-pagination/nile-pagination.css.cjs.js +2 -0
- package/dist/nile-pagination/nile-pagination.css.cjs.js.map +1 -0
- package/dist/nile-pagination/nile-pagination.css.esm.js +101 -0
- package/dist/nile-pagination/nile-pagination.esm.js +89 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/nile-pagination/index.d.ts +1 -0
- package/dist/src/nile-pagination/index.js +2 -0
- package/dist/src/nile-pagination/index.js.map +1 -0
- package/dist/src/nile-pagination/nile-pagination-utils.d.ts +4 -0
- package/dist/src/nile-pagination/nile-pagination-utils.js +41 -0
- package/dist/src/nile-pagination/nile-pagination-utils.js.map +1 -0
- package/dist/src/nile-pagination/nile-pagination.css.d.ts +12 -0
- package/dist/src/nile-pagination/nile-pagination.css.js +113 -0
- package/dist/src/nile-pagination/nile-pagination.css.js.map +1 -0
- package/dist/src/nile-pagination/nile-pagination.d.ts +33 -0
- package/dist/src/nile-pagination/nile-pagination.js +187 -0
- package/dist/src/nile-pagination/nile-pagination.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -3
- package/src/index.ts +2 -1
- package/src/nile-pagination/index.ts +1 -0
- package/src/nile-pagination/nile-pagination-utils.ts +63 -0
- package/src/nile-pagination/nile-pagination.css.ts +115 -0
- package/src/nile-pagination/nile-pagination.ts +184 -0
- package/vscode-html-custom-data.json +44 -0
package/package.json
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
"description": "Webcomponent nile-elements following open-wc recommendations",
|
4
4
|
"license": "MIT",
|
5
5
|
"author": "nile-elements",
|
6
|
-
"version": "0.1.
|
6
|
+
"version": "0.1.40-beta-1.0",
|
7
7
|
"main": "dist/src/index.js",
|
8
8
|
"type": "module",
|
9
9
|
"module": "dist/src/index.js",
|
@@ -85,7 +85,8 @@
|
|
85
85
|
"./nile-toolbar": "./dist/src/nile-toolbar/index.js",
|
86
86
|
"./nile-inline-edit": "./dist/src/nile-inline-edit/index.js",
|
87
87
|
"./nile-tour": "./dist/src/nile-tour/index.js",
|
88
|
-
"./nile-table": "./dist/src/nile-table/index.js"
|
88
|
+
"./nile-table": "./dist/src/nile-table/index.js",
|
89
|
+
"./nile-pagination": "./dist/src/nile-pagination/index.js"
|
89
90
|
},
|
90
91
|
"scripts": {
|
91
92
|
"analyze": "cem analyze --litelement",
|
@@ -189,4 +190,4 @@
|
|
189
190
|
"prettier --write"
|
190
191
|
]
|
191
192
|
}
|
192
|
-
}
|
193
|
+
}
|
package/src/index.ts
CHANGED
@@ -76,4 +76,5 @@ export { NileSectionMessage } from './nile-section-message';
|
|
76
76
|
export { NileToolbar } from './nile-toolbar';
|
77
77
|
export { NileInlineEdit } from './nile-inline-edit';
|
78
78
|
export { NileTable } from './nile-table';
|
79
|
-
export { NileFilterChip } from './nile-filter-chip'
|
79
|
+
export { NileFilterChip } from './nile-filter-chip'
|
80
|
+
export { NilePagination } from './nile-pagination';
|
@@ -0,0 +1 @@
|
|
1
|
+
export { NilePagination } from './nile-pagination';
|
@@ -0,0 +1,63 @@
|
|
1
|
+
export function calculateTotalPages(
|
2
|
+
totalItems: number,
|
3
|
+
pageSize: number
|
4
|
+
): number {
|
5
|
+
return Math.ceil(totalItems / pageSize);
|
6
|
+
}
|
7
|
+
|
8
|
+
export function getPaginationItems(
|
9
|
+
totalPages: number,
|
10
|
+
currentPage: number
|
11
|
+
): (number | string)[] {
|
12
|
+
if (totalPages <= 7) {
|
13
|
+
return Array.from({ length: totalPages }, (_, i) => i + 1);
|
14
|
+
}
|
15
|
+
|
16
|
+
const pages: (number | string)[] = [1];
|
17
|
+
if (currentPage <= 4) {
|
18
|
+
pages.push(2, 3, 4, 5, '…');
|
19
|
+
} else if (currentPage >= totalPages - 3) {
|
20
|
+
pages.push(
|
21
|
+
'…',
|
22
|
+
totalPages - 4,
|
23
|
+
totalPages - 3,
|
24
|
+
totalPages - 2,
|
25
|
+
totalPages - 1
|
26
|
+
);
|
27
|
+
} else {
|
28
|
+
pages.push('…', currentPage - 1, currentPage, currentPage + 1, '…');
|
29
|
+
}
|
30
|
+
pages.push(totalPages);
|
31
|
+
return pages;
|
32
|
+
}
|
33
|
+
|
34
|
+
export function getHiddenPages(
|
35
|
+
totalPages: number,
|
36
|
+
items: (number | string)[],
|
37
|
+
currentPage: number,
|
38
|
+
position: 'left' | 'right'
|
39
|
+
): number[] {
|
40
|
+
if (totalPages <= 7) return [];
|
41
|
+
|
42
|
+
const all = Array.from({ length: totalPages }, (_, i) => i + 1);
|
43
|
+
const visible = items.filter(x => typeof x === 'number') as number[];
|
44
|
+
const hidden = all.filter(p => !visible.includes(p));
|
45
|
+
|
46
|
+
if (position === 'left') {
|
47
|
+
const firstAfterEllipsis = visible[1] as number;
|
48
|
+
return hidden.filter(p => p < firstAfterEllipsis);
|
49
|
+
} else {
|
50
|
+
const lastBeforeEllipsis = visible[visible.length - 2] as number;
|
51
|
+
return hidden.filter(p => p > lastBeforeEllipsis);
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
export function getRangeText(
|
56
|
+
totalItems: number,
|
57
|
+
pageSize: number,
|
58
|
+
currentPage: number
|
59
|
+
): string {
|
60
|
+
const start = (currentPage - 1) * pageSize + 1;
|
61
|
+
const end = Math.min(currentPage * pageSize, totalItems);
|
62
|
+
return `Showing ${start}–${end} of ${totalItems}`;
|
63
|
+
}
|
@@ -0,0 +1,115 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright Aquera Inc 2025
|
3
|
+
*
|
4
|
+
* This source code is licensed under the BSD-3-Clause license found in the
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
6
|
+
*/
|
7
|
+
|
8
|
+
import { css } from 'lit';
|
9
|
+
|
10
|
+
/**
|
11
|
+
* Pagination CSS
|
12
|
+
*/
|
13
|
+
export const styles = css`
|
14
|
+
:host {
|
15
|
+
}
|
16
|
+
|
17
|
+
.pagination-wrapper {
|
18
|
+
display: flex;
|
19
|
+
align-items: center;
|
20
|
+
justify-content: space-between;
|
21
|
+
padding: var(--nile-spacing-spacing-md) var(--nile-spacing-spacing-lg);
|
22
|
+
}
|
23
|
+
|
24
|
+
.pagination-wrapper.v2 {
|
25
|
+
justify-content: flex-start;
|
26
|
+
gap: var(--nile-spacing-spacing-lg);
|
27
|
+
}
|
28
|
+
|
29
|
+
.pagination-wrapper.v2 .pager-container {
|
30
|
+
flex-direction: row;
|
31
|
+
align-items: center;
|
32
|
+
gap: var(--nile-spacing-spacing-md);
|
33
|
+
margin-right: var(--nile-spacing-spacing-xl);
|
34
|
+
}
|
35
|
+
|
36
|
+
.pagination-wrapper.v2 .range-text {
|
37
|
+
margin-right: var(--nile-spacing-spacing-md);
|
38
|
+
font-size: var(--nile-font-size-small);
|
39
|
+
color: var(--nile-colors-dark-900);
|
40
|
+
font-feature-settings: 'liga' off, 'clig' off;
|
41
|
+
font-weight: var(--nile-font-weight-regular);
|
42
|
+
}
|
43
|
+
|
44
|
+
.pager-container {
|
45
|
+
display: flex;
|
46
|
+
align-items: center;
|
47
|
+
gap: var(--nile-spacing-spacing-3xl);
|
48
|
+
}
|
49
|
+
|
50
|
+
.range-text {
|
51
|
+
font-size: var(--nile-font-size-small);
|
52
|
+
color: var(--nile-colors-dark-900);
|
53
|
+
white-space: nowrap;
|
54
|
+
}
|
55
|
+
|
56
|
+
.page-size-select {
|
57
|
+
display: inline-flex;
|
58
|
+
align-items: center;
|
59
|
+
}
|
60
|
+
|
61
|
+
ul.pagination {
|
62
|
+
display: flex;
|
63
|
+
list-style: none;
|
64
|
+
padding: var(--nile-spacing-spacing-none);
|
65
|
+
margin: var(--nile-spacing-spacing-none);
|
66
|
+
gap: var(--nile-radius-radius-xxs);
|
67
|
+
}
|
68
|
+
|
69
|
+
ul.pagination li {
|
70
|
+
margin: var(--nile-spacing-spacing-none);
|
71
|
+
}
|
72
|
+
|
73
|
+
.ellipsis-scroll-wrapper {
|
74
|
+
max-height: 194px;
|
75
|
+
overflow-y: auto;
|
76
|
+
width: 66px;
|
77
|
+
}
|
78
|
+
|
79
|
+
.ellipsis-dropdown nile-menu {
|
80
|
+
overflow-y: auto;
|
81
|
+
padding: var(--nile-spacing-spacing-lg) var(--nile-spacing-spacing-none);
|
82
|
+
box-shadow: 0px 4px 8px 0px rgba(119, 125, 130, 0.15);
|
83
|
+
}
|
84
|
+
|
85
|
+
.ellipsis-dropdown nile-menu-item {
|
86
|
+
padding: var(--nile-spacing-spacing-sm) var(--nile-spacing-spacing-lg);
|
87
|
+
text-align: center;
|
88
|
+
}
|
89
|
+
|
90
|
+
.page-size-menu {
|
91
|
+
max-height: 144px;
|
92
|
+
overflow-y: auto;
|
93
|
+
}
|
94
|
+
|
95
|
+
ul.pagination li:first-child {
|
96
|
+
margin-right: var(--nile-spacing-spacing-xs);
|
97
|
+
}
|
98
|
+
ul.pagination li:last-child {
|
99
|
+
margin-left: var(--nile-spacing-spacing-md);
|
100
|
+
}
|
101
|
+
|
102
|
+
.page-size-label {
|
103
|
+
font-size: var(--nile-type-scale-3);
|
104
|
+
color: var(--nile-colors-dark-500);
|
105
|
+
margin-left: var(--nile-spacing-spacing-md);
|
106
|
+
font-feature-settings: 'liga' off, 'clig' off;
|
107
|
+
font-weight: var(--nile-font-weight-regular);
|
108
|
+
}
|
109
|
+
|
110
|
+
.nile-button::part(base) {
|
111
|
+
min-width: 32px;
|
112
|
+
}
|
113
|
+
`;
|
114
|
+
|
115
|
+
export default [styles];
|
@@ -0,0 +1,184 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright Aquera Inc 2025
|
3
|
+
*
|
4
|
+
* This source code is licensed under the BSD-3-Clause license found in the
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
6
|
+
*/
|
7
|
+
import { LitElement, html, CSSResultArray, TemplateResult } from 'lit';
|
8
|
+
import { customElement, property } from 'lit/decorators.js';
|
9
|
+
import { styles } from './nile-pagination.css';
|
10
|
+
import NileElement from '../internal/nile-element';
|
11
|
+
import {
|
12
|
+
calculateTotalPages,
|
13
|
+
getPaginationItems,
|
14
|
+
getHiddenPages,
|
15
|
+
getRangeText,
|
16
|
+
} from './nile-pagination-utils';
|
17
|
+
|
18
|
+
@customElement('nile-pagination')
|
19
|
+
export class NilePagination extends NileElement {
|
20
|
+
public static get styles(): CSSResultArray {
|
21
|
+
return [styles];
|
22
|
+
}
|
23
|
+
|
24
|
+
@property({ type: Number }) totalItems = 0;
|
25
|
+
@property({ type: Number }) pageSize = 50;
|
26
|
+
@property({ type: Number }) currentPage = 1;
|
27
|
+
@property({ type: String }) variant: 'v1' | 'v2' = 'v1';
|
28
|
+
@property({ type: Boolean }) disabled = false;
|
29
|
+
@property({ type: Boolean }) showTitle = true;
|
30
|
+
@property({ type: Array }) pageSizeOptions: number[] = [10, 25, 50, 100];
|
31
|
+
|
32
|
+
private get totalPages(): number {
|
33
|
+
return calculateTotalPages(this.totalItems, this.pageSize);
|
34
|
+
}
|
35
|
+
|
36
|
+
private goToPage(page: number) {
|
37
|
+
if (this.disabled) return;
|
38
|
+
const safe = Math.max(1, Math.min(page, this.totalPages));
|
39
|
+
this.currentPage = safe;
|
40
|
+
this.emit('nile-change', { page: safe, pageSize: this.pageSize });
|
41
|
+
}
|
42
|
+
|
43
|
+
private onPageSizeSelect(size: number) {
|
44
|
+
if (this.disabled || this.pageSize === size) return;
|
45
|
+
this.pageSize = size;
|
46
|
+
this.currentPage = 1;
|
47
|
+
this.emit('nile-change', { page: 1, pageSize: size });
|
48
|
+
}
|
49
|
+
|
50
|
+
private renderRangeText(): TemplateResult {
|
51
|
+
return html`<div class="range-text">
|
52
|
+
${getRangeText(this.totalItems, this.pageSize, this.currentPage)}
|
53
|
+
</div>`;
|
54
|
+
}
|
55
|
+
|
56
|
+
private renderPageSizeSelect(): TemplateResult | null {
|
57
|
+
if (this.variant !== 'v1') return null;
|
58
|
+
return html`
|
59
|
+
<div class="page-size-select">
|
60
|
+
<nile-dropdown class="page-size-dropdown" ?disabled=${this.disabled}>
|
61
|
+
<nile-button slot="trigger" variant="tertiary" ?disabled=${this.disabled}>
|
62
|
+
${this.pageSize}
|
63
|
+
<nile-icon name="chevrondown" size="14" class="chevron"></nile-icon>
|
64
|
+
</nile-button>
|
65
|
+
<nile-menu class="page-size-menu">
|
66
|
+
${this.pageSizeOptions.map(size => html`
|
67
|
+
<nile-menu-item
|
68
|
+
?disabled=${this.disabled}
|
69
|
+
@click=${() => this.onPageSizeSelect(size)}
|
70
|
+
>
|
71
|
+
${size}
|
72
|
+
</nile-menu-item>
|
73
|
+
`)}
|
74
|
+
</nile-menu>
|
75
|
+
</nile-dropdown>
|
76
|
+
<span class="page-size-label">Items per page</span>
|
77
|
+
</div>
|
78
|
+
`;
|
79
|
+
}
|
80
|
+
|
81
|
+
private renderPrevButton(): TemplateResult {
|
82
|
+
return html`
|
83
|
+
<li>
|
84
|
+
<nile-button
|
85
|
+
variant="tertiary"
|
86
|
+
?disabled=${this.currentPage === 1 || this.disabled}
|
87
|
+
@click=${() => this.goToPage(this.currentPage - 1)}
|
88
|
+
>
|
89
|
+
<nile-icon name="arrowleft" size="14"></nile-icon>
|
90
|
+
</nile-button>
|
91
|
+
</li>
|
92
|
+
`;
|
93
|
+
}
|
94
|
+
|
95
|
+
private renderNextButton(): TemplateResult {
|
96
|
+
const total = this.totalPages;
|
97
|
+
return html`
|
98
|
+
<li>
|
99
|
+
<nile-button
|
100
|
+
variant="tertiary"
|
101
|
+
?disabled=${this.currentPage === total || this.disabled}
|
102
|
+
@click=${() => this.goToPage(this.currentPage + 1)}
|
103
|
+
>
|
104
|
+
<nile-icon name="arrowright" size="14"></nile-icon>
|
105
|
+
</nile-button>
|
106
|
+
</li>
|
107
|
+
`;
|
108
|
+
}
|
109
|
+
|
110
|
+
private renderPageItem(item: number | string, idx: number, items: (number | string)[]): TemplateResult {
|
111
|
+
if (item === '…') {
|
112
|
+
return html`
|
113
|
+
<li>
|
114
|
+
<nile-dropdown class="ellipsis-dropdown" ?disabled=${this.disabled}>
|
115
|
+
<nile-button slot="trigger" variant="ghost" class="ellipsis-button" ?disabled=${this.disabled}>
|
116
|
+
…
|
117
|
+
</nile-button>
|
118
|
+
<nile-menu>
|
119
|
+
<div class="ellipsis-scroll-wrapper">
|
120
|
+
${getHiddenPages(
|
121
|
+
this.totalPages,
|
122
|
+
items,
|
123
|
+
this.currentPage,
|
124
|
+
idx < items.indexOf(this.currentPage) ? 'left' : 'right'
|
125
|
+
).map(page => html`
|
126
|
+
<nile-menu-item
|
127
|
+
?disabled=${this.disabled}
|
128
|
+
@click=${() => this.goToPage(page)}
|
129
|
+
>
|
130
|
+
${page}
|
131
|
+
</nile-menu-item>
|
132
|
+
`)}
|
133
|
+
</div>
|
134
|
+
</nile-menu>
|
135
|
+
</nile-dropdown>
|
136
|
+
</li>
|
137
|
+
`;
|
138
|
+
}
|
139
|
+
|
140
|
+
return html`
|
141
|
+
<li>
|
142
|
+
<nile-button
|
143
|
+
variant=${item === this.currentPage ? 'primary' : 'ghost'}
|
144
|
+
?disabled=${this.disabled}
|
145
|
+
@click=${() => this.goToPage(item as number)}
|
146
|
+
>
|
147
|
+
${item}
|
148
|
+
</nile-button>
|
149
|
+
</li>
|
150
|
+
`;
|
151
|
+
}
|
152
|
+
|
153
|
+
private renderPageList(): TemplateResult {
|
154
|
+
const total = this.totalPages;
|
155
|
+
const items = getPaginationItems(total, this.currentPage);
|
156
|
+
return html`
|
157
|
+
<nav aria-label="Pagination">
|
158
|
+
<ul class="pagination">
|
159
|
+
${this.renderPrevButton()}
|
160
|
+
${items.map((item, idx) => this.renderPageItem(item, idx, items))}
|
161
|
+
${this.renderNextButton()}
|
162
|
+
</ul>
|
163
|
+
</nav>
|
164
|
+
`;
|
165
|
+
}
|
166
|
+
|
167
|
+
public render(): TemplateResult {
|
168
|
+
return html`
|
169
|
+
<div class="pagination-wrapper ${this.variant}">
|
170
|
+
<div class="pager-container">
|
171
|
+
${this.showTitle ? this.renderRangeText() : null}
|
172
|
+
${this.renderPageSizeSelect()}
|
173
|
+
</div>
|
174
|
+
${this.renderPageList()}
|
175
|
+
</div>
|
176
|
+
`;
|
177
|
+
}
|
178
|
+
}
|
179
|
+
|
180
|
+
declare global {
|
181
|
+
interface HTMLElementTagNameMap {
|
182
|
+
'nile-pagination': NilePagination;
|
183
|
+
}
|
184
|
+
}
|
@@ -2339,6 +2339,50 @@
|
|
2339
2339
|
}
|
2340
2340
|
]
|
2341
2341
|
},
|
2342
|
+
{
|
2343
|
+
"name": "nile-pagination",
|
2344
|
+
"description": "Attributes:\n\n * `totalItems` {`number`} - \n\n * `pageSize` {`number`} - \n\n * `currentPage` {`number`} - \n\n * `variant` {`\"v1\" | \"v2\"`} - \n\n * `disabled` {`boolean`} - \n\n * `showTitle` {`boolean`} - \n\n * `pageSizeOptions` {`number[]`} - \n\nProperties:\n\n * `totalItems` {`number`} - \n\n * `pageSize` {`number`} - \n\n * `currentPage` {`number`} - \n\n * `variant` {`\"v1\" | \"v2\"`} - \n\n * `disabled` {`boolean`} - \n\n * `showTitle` {`boolean`} - \n\n * `pageSizeOptions` {`number[]`} - \n\n * `totalPages` {`number`} - \n\n * `BUBBLES` {`boolean`} - \n\n * `COMPOSED` {`boolean`} - \n\n * `CANCELABLE` {`boolean`} - ",
|
2345
|
+
"attributes": [
|
2346
|
+
{
|
2347
|
+
"name": "totalItems",
|
2348
|
+
"description": "`totalItems` {`number`} - \n\nProperty: totalItems\n\nDefault: 0"
|
2349
|
+
},
|
2350
|
+
{
|
2351
|
+
"name": "pageSize",
|
2352
|
+
"description": "`pageSize` {`number`} - \n\nProperty: pageSize\n\nDefault: 50"
|
2353
|
+
},
|
2354
|
+
{
|
2355
|
+
"name": "currentPage",
|
2356
|
+
"description": "`currentPage` {`number`} - \n\nProperty: currentPage\n\nDefault: 1"
|
2357
|
+
},
|
2358
|
+
{
|
2359
|
+
"name": "variant",
|
2360
|
+
"description": "`variant` {`\"v1\" | \"v2\"`} - \n\nProperty: variant\n\nDefault: v1",
|
2361
|
+
"values": [
|
2362
|
+
{
|
2363
|
+
"name": "v1"
|
2364
|
+
},
|
2365
|
+
{
|
2366
|
+
"name": "v2"
|
2367
|
+
}
|
2368
|
+
]
|
2369
|
+
},
|
2370
|
+
{
|
2371
|
+
"name": "disabled",
|
2372
|
+
"description": "`disabled` {`boolean`} - \n\nProperty: disabled\n\nDefault: false",
|
2373
|
+
"valueSet": "v"
|
2374
|
+
},
|
2375
|
+
{
|
2376
|
+
"name": "showTitle",
|
2377
|
+
"description": "`showTitle` {`boolean`} - \n\nProperty: showTitle\n\nDefault: true",
|
2378
|
+
"valueSet": "v"
|
2379
|
+
},
|
2380
|
+
{
|
2381
|
+
"name": "pageSizeOptions",
|
2382
|
+
"description": "`pageSizeOptions` {`number[]`} - \n\nProperty: pageSizeOptions\n\nDefault: 10,25,50,100"
|
2383
|
+
}
|
2384
|
+
]
|
2385
|
+
},
|
2342
2386
|
{
|
2343
2387
|
"name": "nile-popover",
|
2344
2388
|
"description": "Nile icon component.\n\nAttributes:\n\n * `placement` {`\"left\" | \"right\" | \"top\" | \"bottom\" | \"top-start\" | \"top-end\" | \"bottom-start\" | \"bottom-end\" | \"right-start\" | \"right-end\" | \"left-start\" | \"left-end\"`} - The preferred placement of the popover. Note that the actual placement may vary as needed to keep the tooltip\ninside of the viewport.\n\n * `distance` {`number`} - The distance in pixels from which to offset the popover away from its target.\n\n * `preventOverlayClose` {`boolean`} - \n\n * `arrow` {`boolean`} - \n\n * `title` {`string`} - Gives the title to the popover\n\n * `open` {`boolean`} - \n\n * `arrow-placement` {`\"end\" | \"start\" | \"center\" | \"anchor\"`} - \n\n * `hoist` {`boolean`} - Enable this option to prevent the panel from being clipped when the component is placed inside a container with\n`overflow: auto|scroll`. Hoisting uses a fixed positioning strategy that works in many, but not all, scenarios.\n\n * `flip` {`boolean`} - \n\nProperties:\n\n * `placement` {`\"left\" | \"right\" | \"top\" | \"bottom\" | \"top-start\" | \"top-end\" | \"bottom-start\" | \"bottom-end\" | \"right-start\" | \"right-end\" | \"left-start\" | \"left-end\"`} - The preferred placement of the popover. Note that the actual placement may vary as needed to keep the tooltip\ninside of the viewport.\n\n * `distance` {`number`} - The distance in pixels from which to offset the popover away from its target.\n\n * `preventOverlayClose` {`boolean`} - \n\n * `arrow` {`boolean`} - \n\n * `title` {`string`} - Gives the title to the popover\n\n * `open` {`boolean`} - \n\n * `isShow` {`boolean`} - \n\n * `arrowPlacement` {`\"end\" | \"start\" | \"center\" | \"anchor\"`} - \n\n * `hoist` {`boolean`} - Enable this option to prevent the panel from being clipped when the component is placed inside a container with\n`overflow: auto|scroll`. Hoisting uses a fixed positioning strategy that works in many, but not all, scenarios.\n\n * `flip` {`boolean`} - \n\n * `handleClick` - \n\n * `handleDocumentClick` - \n\n * `BUBBLES` {`boolean`} - \n\n * `COMPOSED` {`boolean`} - \n\n * `CANCELABLE` {`boolean`} - ",
|