@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
@@ -0,0 +1,187 @@
|
|
1
|
+
import { __decorate } from "tslib";
|
2
|
+
/**
|
3
|
+
* Copyright Aquera Inc 2025
|
4
|
+
*
|
5
|
+
* This source code is licensed under the BSD-3-Clause license found in the
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
7
|
+
*/
|
8
|
+
import { html } from 'lit';
|
9
|
+
import { customElement, property } from 'lit/decorators.js';
|
10
|
+
import { styles } from './nile-pagination.css';
|
11
|
+
import NileElement from '../internal/nile-element';
|
12
|
+
import { calculateTotalPages, getPaginationItems, getHiddenPages, getRangeText, } from './nile-pagination-utils';
|
13
|
+
let NilePagination = class NilePagination extends NileElement {
|
14
|
+
constructor() {
|
15
|
+
super(...arguments);
|
16
|
+
this.totalItems = 0;
|
17
|
+
this.pageSize = 50;
|
18
|
+
this.currentPage = 1;
|
19
|
+
this.variant = 'v1';
|
20
|
+
this.disabled = false;
|
21
|
+
this.showTitle = true;
|
22
|
+
this.pageSizeOptions = [10, 25, 50, 100];
|
23
|
+
}
|
24
|
+
static get styles() {
|
25
|
+
return [styles];
|
26
|
+
}
|
27
|
+
get totalPages() {
|
28
|
+
return calculateTotalPages(this.totalItems, this.pageSize);
|
29
|
+
}
|
30
|
+
goToPage(page) {
|
31
|
+
if (this.disabled)
|
32
|
+
return;
|
33
|
+
const safe = Math.max(1, Math.min(page, this.totalPages));
|
34
|
+
this.currentPage = safe;
|
35
|
+
this.emit('nile-change', { page: safe, pageSize: this.pageSize });
|
36
|
+
}
|
37
|
+
onPageSizeSelect(size) {
|
38
|
+
if (this.disabled || this.pageSize === size)
|
39
|
+
return;
|
40
|
+
this.pageSize = size;
|
41
|
+
this.currentPage = 1;
|
42
|
+
this.emit('nile-change', { page: 1, pageSize: size });
|
43
|
+
}
|
44
|
+
renderRangeText() {
|
45
|
+
return html `<div class="range-text">
|
46
|
+
${getRangeText(this.totalItems, this.pageSize, this.currentPage)}
|
47
|
+
</div>`;
|
48
|
+
}
|
49
|
+
renderPageSizeSelect() {
|
50
|
+
if (this.variant !== 'v1')
|
51
|
+
return null;
|
52
|
+
return html `
|
53
|
+
<div class="page-size-select">
|
54
|
+
<nile-dropdown class="page-size-dropdown" ?disabled=${this.disabled}>
|
55
|
+
<nile-button slot="trigger" variant="tertiary" ?disabled=${this.disabled}>
|
56
|
+
${this.pageSize}
|
57
|
+
<nile-icon name="chevrondown" size="14" class="chevron"></nile-icon>
|
58
|
+
</nile-button>
|
59
|
+
<nile-menu class="page-size-menu">
|
60
|
+
${this.pageSizeOptions.map(size => html `
|
61
|
+
<nile-menu-item
|
62
|
+
?disabled=${this.disabled}
|
63
|
+
@click=${() => this.onPageSizeSelect(size)}
|
64
|
+
>
|
65
|
+
${size}
|
66
|
+
</nile-menu-item>
|
67
|
+
`)}
|
68
|
+
</nile-menu>
|
69
|
+
</nile-dropdown>
|
70
|
+
<span class="page-size-label">Items per page</span>
|
71
|
+
</div>
|
72
|
+
`;
|
73
|
+
}
|
74
|
+
renderPrevButton() {
|
75
|
+
return html `
|
76
|
+
<li>
|
77
|
+
<nile-button
|
78
|
+
variant="tertiary"
|
79
|
+
?disabled=${this.currentPage === 1 || this.disabled}
|
80
|
+
@click=${() => this.goToPage(this.currentPage - 1)}
|
81
|
+
>
|
82
|
+
<nile-icon name="arrowleft" size="14"></nile-icon>
|
83
|
+
</nile-button>
|
84
|
+
</li>
|
85
|
+
`;
|
86
|
+
}
|
87
|
+
renderNextButton() {
|
88
|
+
const total = this.totalPages;
|
89
|
+
return html `
|
90
|
+
<li>
|
91
|
+
<nile-button
|
92
|
+
variant="tertiary"
|
93
|
+
?disabled=${this.currentPage === total || this.disabled}
|
94
|
+
@click=${() => this.goToPage(this.currentPage + 1)}
|
95
|
+
>
|
96
|
+
<nile-icon name="arrowright" size="14"></nile-icon>
|
97
|
+
</nile-button>
|
98
|
+
</li>
|
99
|
+
`;
|
100
|
+
}
|
101
|
+
renderPageItem(item, idx, items) {
|
102
|
+
if (item === '…') {
|
103
|
+
return html `
|
104
|
+
<li>
|
105
|
+
<nile-dropdown class="ellipsis-dropdown" ?disabled=${this.disabled}>
|
106
|
+
<nile-button slot="trigger" variant="ghost" class="ellipsis-button" ?disabled=${this.disabled}>
|
107
|
+
…
|
108
|
+
</nile-button>
|
109
|
+
<nile-menu>
|
110
|
+
<div class="ellipsis-scroll-wrapper">
|
111
|
+
${getHiddenPages(this.totalPages, items, this.currentPage, idx < items.indexOf(this.currentPage) ? 'left' : 'right').map(page => html `
|
112
|
+
<nile-menu-item
|
113
|
+
?disabled=${this.disabled}
|
114
|
+
@click=${() => this.goToPage(page)}
|
115
|
+
>
|
116
|
+
${page}
|
117
|
+
</nile-menu-item>
|
118
|
+
`)}
|
119
|
+
</div>
|
120
|
+
</nile-menu>
|
121
|
+
</nile-dropdown>
|
122
|
+
</li>
|
123
|
+
`;
|
124
|
+
}
|
125
|
+
return html `
|
126
|
+
<li>
|
127
|
+
<nile-button
|
128
|
+
variant=${item === this.currentPage ? 'primary' : 'ghost'}
|
129
|
+
?disabled=${this.disabled}
|
130
|
+
@click=${() => this.goToPage(item)}
|
131
|
+
>
|
132
|
+
${item}
|
133
|
+
</nile-button>
|
134
|
+
</li>
|
135
|
+
`;
|
136
|
+
}
|
137
|
+
renderPageList() {
|
138
|
+
const total = this.totalPages;
|
139
|
+
const items = getPaginationItems(total, this.currentPage);
|
140
|
+
return html `
|
141
|
+
<nav aria-label="Pagination">
|
142
|
+
<ul class="pagination">
|
143
|
+
${this.renderPrevButton()}
|
144
|
+
${items.map((item, idx) => this.renderPageItem(item, idx, items))}
|
145
|
+
${this.renderNextButton()}
|
146
|
+
</ul>
|
147
|
+
</nav>
|
148
|
+
`;
|
149
|
+
}
|
150
|
+
render() {
|
151
|
+
return html `
|
152
|
+
<div class="pagination-wrapper ${this.variant}">
|
153
|
+
<div class="pager-container">
|
154
|
+
${this.showTitle ? this.renderRangeText() : null}
|
155
|
+
${this.renderPageSizeSelect()}
|
156
|
+
</div>
|
157
|
+
${this.renderPageList()}
|
158
|
+
</div>
|
159
|
+
`;
|
160
|
+
}
|
161
|
+
};
|
162
|
+
__decorate([
|
163
|
+
property({ type: Number })
|
164
|
+
], NilePagination.prototype, "totalItems", void 0);
|
165
|
+
__decorate([
|
166
|
+
property({ type: Number })
|
167
|
+
], NilePagination.prototype, "pageSize", void 0);
|
168
|
+
__decorate([
|
169
|
+
property({ type: Number })
|
170
|
+
], NilePagination.prototype, "currentPage", void 0);
|
171
|
+
__decorate([
|
172
|
+
property({ type: String })
|
173
|
+
], NilePagination.prototype, "variant", void 0);
|
174
|
+
__decorate([
|
175
|
+
property({ type: Boolean })
|
176
|
+
], NilePagination.prototype, "disabled", void 0);
|
177
|
+
__decorate([
|
178
|
+
property({ type: Boolean })
|
179
|
+
], NilePagination.prototype, "showTitle", void 0);
|
180
|
+
__decorate([
|
181
|
+
property({ type: Array })
|
182
|
+
], NilePagination.prototype, "pageSizeOptions", void 0);
|
183
|
+
NilePagination = __decorate([
|
184
|
+
customElement('nile-pagination')
|
185
|
+
], NilePagination);
|
186
|
+
export { NilePagination };
|
187
|
+
//# sourceMappingURL=nile-pagination.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"nile-pagination.js","sourceRoot":"","sources":["../../../src/nile-pagination/nile-pagination.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright Aquera Inc 2025\n *\n * This source code is licensed under the BSD-3-Clause license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { LitElement, html, CSSResultArray, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { styles } from './nile-pagination.css';\nimport NileElement from '../internal/nile-element';\nimport {\n calculateTotalPages,\n getPaginationItems,\n getHiddenPages,\n getRangeText,\n} from './nile-pagination-utils';\n\n@customElement('nile-pagination')\nexport class NilePagination extends NileElement {\n public static get styles(): CSSResultArray {\n return [styles];\n }\n\n @property({ type: Number }) totalItems = 0;\n @property({ type: Number }) pageSize = 50;\n @property({ type: Number }) currentPage = 1;\n @property({ type: String }) variant: 'v1' | 'v2' = 'v1';\n @property({ type: Boolean }) disabled = false;\n @property({ type: Boolean }) showTitle = true;\n @property({ type: Array }) pageSizeOptions: number[] = [10, 25, 50, 100];\n\n private get totalPages(): number {\n return calculateTotalPages(this.totalItems, this.pageSize);\n }\n\n private goToPage(page: number) {\n if (this.disabled) return;\n const safe = Math.max(1, Math.min(page, this.totalPages));\n this.currentPage = safe;\n this.emit('nile-change', { page: safe, pageSize: this.pageSize });\n }\n\n private onPageSizeSelect(size: number) {\n if (this.disabled || this.pageSize === size) return;\n this.pageSize = size;\n this.currentPage = 1;\n this.emit('nile-change', { page: 1, pageSize: size });\n }\n\n private renderRangeText(): TemplateResult {\n return html`<div class=\"range-text\">\n ${getRangeText(this.totalItems, this.pageSize, this.currentPage)}\n </div>`;\n }\n\n private renderPageSizeSelect(): TemplateResult | null {\n if (this.variant !== 'v1') return null;\n return html`\n <div class=\"page-size-select\">\n <nile-dropdown class=\"page-size-dropdown\" ?disabled=${this.disabled}>\n <nile-button slot=\"trigger\" variant=\"tertiary\" ?disabled=${this.disabled}>\n ${this.pageSize}\n <nile-icon name=\"chevrondown\" size=\"14\" class=\"chevron\"></nile-icon>\n </nile-button>\n <nile-menu class=\"page-size-menu\">\n ${this.pageSizeOptions.map(size => html`\n <nile-menu-item\n ?disabled=${this.disabled}\n @click=${() => this.onPageSizeSelect(size)}\n >\n ${size}\n </nile-menu-item>\n `)}\n </nile-menu>\n </nile-dropdown>\n <span class=\"page-size-label\">Items per page</span>\n </div>\n `;\n }\n\n private renderPrevButton(): TemplateResult {\n return html`\n <li>\n <nile-button\n variant=\"tertiary\"\n ?disabled=${this.currentPage === 1 || this.disabled}\n @click=${() => this.goToPage(this.currentPage - 1)}\n >\n <nile-icon name=\"arrowleft\" size=\"14\"></nile-icon>\n </nile-button>\n </li>\n `;\n }\n\n private renderNextButton(): TemplateResult {\n const total = this.totalPages;\n return html`\n <li>\n <nile-button\n variant=\"tertiary\"\n ?disabled=${this.currentPage === total || this.disabled}\n @click=${() => this.goToPage(this.currentPage + 1)}\n >\n <nile-icon name=\"arrowright\" size=\"14\"></nile-icon>\n </nile-button>\n </li>\n `;\n }\n\n private renderPageItem(item: number | string, idx: number, items: (number | string)[]): TemplateResult {\n if (item === '…') {\n return html`\n <li>\n <nile-dropdown class=\"ellipsis-dropdown\" ?disabled=${this.disabled}>\n <nile-button slot=\"trigger\" variant=\"ghost\" class=\"ellipsis-button\" ?disabled=${this.disabled}>\n …\n </nile-button>\n <nile-menu>\n <div class=\"ellipsis-scroll-wrapper\">\n ${getHiddenPages(\n this.totalPages,\n items,\n this.currentPage,\n idx < items.indexOf(this.currentPage) ? 'left' : 'right'\n ).map(page => html`\n <nile-menu-item\n ?disabled=${this.disabled}\n @click=${() => this.goToPage(page)}\n >\n ${page}\n </nile-menu-item>\n `)}\n </div>\n </nile-menu>\n </nile-dropdown>\n </li>\n `;\n }\n\n return html`\n <li>\n <nile-button\n variant=${item === this.currentPage ? 'primary' : 'ghost'}\n ?disabled=${this.disabled}\n @click=${() => this.goToPage(item as number)}\n >\n ${item}\n </nile-button>\n </li>\n `;\n }\n\n private renderPageList(): TemplateResult {\n const total = this.totalPages;\n const items = getPaginationItems(total, this.currentPage);\n return html`\n <nav aria-label=\"Pagination\">\n <ul class=\"pagination\">\n ${this.renderPrevButton()}\n ${items.map((item, idx) => this.renderPageItem(item, idx, items))}\n ${this.renderNextButton()}\n </ul>\n </nav>\n `;\n }\n\n public render(): TemplateResult {\n return html`\n <div class=\"pagination-wrapper ${this.variant}\">\n <div class=\"pager-container\">\n ${this.showTitle ? this.renderRangeText() : null}\n ${this.renderPageSizeSelect()}\n </div>\n ${this.renderPageList()}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-pagination': NilePagination;\n }\n}\n"]}
|