@aquera/nile-elements 0.1.50-beta-1.0 → 0.1.50

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.
Files changed (209) hide show
  1. package/README.md +4 -4
  2. package/demo/index.html +33 -150
  3. package/dist/axe.min-2720cd56.esm.js +1 -0
  4. package/dist/axe.min-69d47269.cjs.js +2 -0
  5. package/dist/axe.min-69d47269.cjs.js.map +1 -0
  6. package/dist/{fixture-372df3b0.esm.js → fixture-e7023246.esm.js} +1 -1
  7. package/dist/{fixture-161dee0b.cjs.js → fixture-fe6c932e.cjs.js} +2 -2
  8. package/dist/fixture-fe6c932e.cjs.js.map +1 -0
  9. package/dist/index.cjs.js +1 -1
  10. package/dist/index.esm.js +1 -1
  11. package/dist/index.js +10339 -0
  12. package/dist/internal/form.cjs.js +1 -1
  13. package/dist/internal/form.cjs.js.map +1 -1
  14. package/dist/internal/form.esm.js +1 -1
  15. package/dist/nile-accordion/nile-accordian.test.cjs.js +1 -1
  16. package/dist/nile-accordion/nile-accordian.test.esm.js +1 -1
  17. package/dist/nile-auto-complete/index.cjs.js +1 -1
  18. package/dist/nile-auto-complete/index.esm.js +1 -1
  19. package/dist/nile-auto-complete/nile-auto-complete.cjs.js +17 -1
  20. package/dist/nile-auto-complete/nile-auto-complete.cjs.js.map +1 -1
  21. package/dist/nile-auto-complete/nile-auto-complete.esm.js +29 -8
  22. package/dist/nile-auto-complete/nile-auto-complete.test.cjs.js +1 -1
  23. package/dist/nile-auto-complete/nile-auto-complete.test.cjs.js.map +1 -1
  24. package/dist/nile-auto-complete/nile-auto-complete.test.esm.js +1 -1
  25. package/dist/nile-avatar/nile-avatar.test.cjs.js +1 -1
  26. package/dist/nile-avatar/nile-avatar.test.esm.js +1 -1
  27. package/dist/nile-badge/nile-badge.test.cjs.js +1 -1
  28. package/dist/nile-badge/nile-badge.test.esm.js +1 -1
  29. package/dist/nile-button/nile-button.test.cjs.js +1 -1
  30. package/dist/nile-button/nile-button.test.esm.js +1 -1
  31. package/dist/nile-button-toggle-group/nile-button-toggle-group.test.cjs.js +1 -1
  32. package/dist/nile-button-toggle-group/nile-button-toggle-group.test.esm.js +1 -1
  33. package/dist/nile-calendar/nile-calendar.test.cjs.js +1 -1
  34. package/dist/nile-calendar/nile-calendar.test.cjs.js.map +1 -1
  35. package/dist/nile-calendar/nile-calendar.test.esm.js +1 -1
  36. package/dist/nile-card/nile-card.test.cjs.js +1 -1
  37. package/dist/nile-card/nile-card.test.esm.js +1 -1
  38. package/dist/nile-checkbox/nile-checkbox.test.cjs.js +1 -1
  39. package/dist/nile-checkbox/nile-checkbox.test.esm.js +1 -1
  40. package/dist/nile-chip/nile-chip.cjs.js +1 -1
  41. package/dist/nile-chip/nile-chip.cjs.js.map +1 -1
  42. package/dist/nile-chip/nile-chip.esm.js +1 -0
  43. package/dist/nile-chip/nile-chip.test.cjs.js +1 -1
  44. package/dist/nile-chip/nile-chip.test.cjs.js.map +1 -1
  45. package/dist/nile-chip/nile-chip.test.esm.js +1 -1
  46. package/dist/nile-dialog/nile-dialog.test.cjs.js +1 -1
  47. package/dist/nile-dialog/nile-dialog.test.esm.js +1 -1
  48. package/dist/nile-drawer/nile-drawer.test.cjs.js +1 -1
  49. package/dist/nile-drawer/nile-drawer.test.esm.js +1 -1
  50. package/dist/nile-dropdown/nile-dropdown.test.cjs.js +1 -1
  51. package/dist/nile-dropdown/nile-dropdown.test.esm.js +1 -1
  52. package/dist/nile-empty-state/nile-empty-state.test.cjs.js +1 -1
  53. package/dist/nile-empty-state/nile-empty-state.test.esm.js +1 -1
  54. package/dist/nile-error-message/nile-error-message.test.cjs.js +1 -1
  55. package/dist/nile-error-message/nile-error-message.test.esm.js +1 -1
  56. package/dist/nile-filter-chip/nile-filter-chip.test.cjs.js +1 -1
  57. package/dist/nile-filter-chip/nile-filter-chip.test.esm.js +1 -1
  58. package/dist/nile-form-group/nile-form-group.test.cjs.js +1 -1
  59. package/dist/nile-form-group/nile-form-group.test.esm.js +1 -1
  60. package/dist/nile-form-help-text/nile-form-help-text.test.cjs.js +1 -1
  61. package/dist/nile-form-help-text/nile-form-help-text.test.esm.js +1 -1
  62. package/dist/nile-hero/nile-hero.test.cjs.js +1 -1
  63. package/dist/nile-hero/nile-hero.test.esm.js +1 -1
  64. package/dist/nile-icon/nile-icon.test.cjs.js +1 -1
  65. package/dist/nile-icon/nile-icon.test.esm.js +1 -1
  66. package/dist/nile-input/nile-input.test.cjs.js +1 -1
  67. package/dist/nile-input/nile-input.test.esm.js +1 -1
  68. package/dist/nile-link/nile-link.test.cjs.js +1 -1
  69. package/dist/nile-link/nile-link.test.esm.js +1 -1
  70. package/dist/nile-loader/nile-loader.test.cjs.js +1 -1
  71. package/dist/nile-loader/nile-loader.test.esm.js +1 -1
  72. package/dist/nile-option/nile-option.cjs.js +1 -1
  73. package/dist/nile-option/nile-option.cjs.js.map +1 -1
  74. package/dist/nile-option/nile-option.css.cjs.js +1 -1
  75. package/dist/nile-option/nile-option.css.cjs.js.map +1 -1
  76. package/dist/nile-option/nile-option.css.esm.js +1 -1
  77. package/dist/nile-option/nile-option.esm.js +2 -2
  78. package/dist/nile-pagination/nile-pagination.cjs.js +1 -1
  79. package/dist/nile-pagination/nile-pagination.cjs.js.map +1 -1
  80. package/dist/nile-pagination/nile-pagination.css.cjs.js +1 -1
  81. package/dist/nile-pagination/nile-pagination.css.cjs.js.map +1 -1
  82. package/dist/nile-pagination/nile-pagination.css.esm.js +152 -39
  83. package/dist/nile-pagination/nile-pagination.esm.js +118 -29
  84. package/dist/nile-popover/nile-popover.test.cjs.js +1 -1
  85. package/dist/nile-popover/nile-popover.test.esm.js +1 -1
  86. package/dist/nile-popup/nile-popup.test.cjs.js +1 -1
  87. package/dist/nile-popup/nile-popup.test.esm.js +1 -1
  88. package/dist/nile-progress-bar/nile-progress-bar.test.cjs.js +1 -1
  89. package/dist/nile-progress-bar/nile-progress-bar.test.esm.js +1 -1
  90. package/dist/nile-radio/nile-radio.test.cjs.js +1 -1
  91. package/dist/nile-radio/nile-radio.test.esm.js +1 -1
  92. package/dist/nile-radio-group/nile-radio-group.test.cjs.js +1 -1
  93. package/dist/nile-radio-group/nile-radio-group.test.esm.js +1 -1
  94. package/dist/nile-select/index.cjs.js +1 -1
  95. package/dist/nile-select/index.esm.js +1 -1
  96. package/dist/nile-select/nile-select.cjs.js +1 -1
  97. package/dist/nile-select/nile-select.cjs.js.map +1 -1
  98. package/dist/nile-select/nile-select.esm.js +2 -2
  99. package/dist/nile-select/nile-select.test.cjs.js +1 -1
  100. package/dist/nile-select/nile-select.test.cjs.js.map +1 -1
  101. package/dist/nile-select/nile-select.test.esm.js +2 -2
  102. package/dist/nile-slide-toggle/nile-slide-toggle.test.cjs.js +1 -1
  103. package/dist/nile-slide-toggle/nile-slide-toggle.test.esm.js +1 -1
  104. package/dist/nile-tab-group/nile-tab-group.test.cjs.js +1 -1
  105. package/dist/nile-tab-group/nile-tab-group.test.esm.js +1 -1
  106. package/dist/nile-textarea/nile-textarea.test.cjs.js +1 -1
  107. package/dist/nile-textarea/nile-textarea.test.esm.js +1 -1
  108. package/dist/src/index.d.ts +0 -1
  109. package/dist/src/index.js +0 -1
  110. package/dist/src/index.js.map +1 -1
  111. package/dist/src/internal/form.js +2 -2
  112. package/dist/src/internal/form.js.map +1 -1
  113. package/dist/src/nile-chip/nile-chip.js +1 -0
  114. package/dist/src/nile-chip/nile-chip.js.map +1 -1
  115. package/dist/src/nile-option/nile-option.css.js +1 -1
  116. package/dist/src/nile-option/nile-option.css.js.map +1 -1
  117. package/dist/src/nile-option/nile-option.d.ts +1 -5
  118. package/dist/src/nile-option/nile-option.js +6 -21
  119. package/dist/src/nile-option/nile-option.js.map +1 -1
  120. package/dist/src/nile-pagination/nile-pagination.css.js +151 -38
  121. package/dist/src/nile-pagination/nile-pagination.css.js.map +1 -1
  122. package/dist/src/nile-pagination/nile-pagination.d.ts +3 -0
  123. package/dist/src/nile-pagination/nile-pagination.js +167 -40
  124. package/dist/src/nile-pagination/nile-pagination.js.map +1 -1
  125. package/dist/src/nile-select/nile-select.d.ts +2 -11
  126. package/dist/src/nile-select/nile-select.js +18 -37
  127. package/dist/src/nile-select/nile-select.js.map +1 -1
  128. package/dist/tsconfig.tsbuildinfo +1 -1
  129. package/package.json +2 -1
  130. package/rollup.config.js +27 -39
  131. package/src/index.ts +1 -3
  132. package/src/internal/form.ts +2 -2
  133. package/src/nile-chip/nile-chip.ts +1 -0
  134. package/src/nile-option/nile-option.css.ts +1 -1
  135. package/src/nile-option/nile-option.ts +3 -17
  136. package/src/nile-pagination/nile-pagination.css.ts +151 -38
  137. package/src/nile-pagination/nile-pagination.ts +188 -46
  138. package/src/nile-select/nile-select.ts +9 -35
  139. package/vscode-html-custom-data.json +3 -230
  140. package/dist/axe.min-2b379f29.cjs.js +0 -12
  141. package/dist/axe.min-2b379f29.cjs.js.map +0 -1
  142. package/dist/axe.min-c2cd8733.esm.js +0 -12
  143. package/dist/fixture-161dee0b.cjs.js.map +0 -1
  144. package/dist/nile-select/virtual-scroll-helper.cjs.js +0 -2
  145. package/dist/nile-select/virtual-scroll-helper.cjs.js.map +0 -1
  146. package/dist/nile-select/virtual-scroll-helper.esm.js +0 -38
  147. package/dist/nile-virtual-select/index.cjs.js +0 -2
  148. package/dist/nile-virtual-select/index.cjs.js.map +0 -1
  149. package/dist/nile-virtual-select/index.esm.js +0 -1
  150. package/dist/nile-virtual-select/nile-virtual-select.cjs.js +0 -2
  151. package/dist/nile-virtual-select/nile-virtual-select.cjs.js.map +0 -1
  152. package/dist/nile-virtual-select/nile-virtual-select.css.cjs.js +0 -2
  153. package/dist/nile-virtual-select/nile-virtual-select.css.cjs.js.map +0 -1
  154. package/dist/nile-virtual-select/nile-virtual-select.css.esm.js +0 -467
  155. package/dist/nile-virtual-select/nile-virtual-select.esm.js +0 -227
  156. package/dist/nile-virtual-select/nile-virtual-select.test.cjs.js +0 -2
  157. package/dist/nile-virtual-select/nile-virtual-select.test.cjs.js.map +0 -1
  158. package/dist/nile-virtual-select/nile-virtual-select.test.esm.js +0 -49
  159. package/dist/nile-virtual-select/renderer.cjs.js +0 -2
  160. package/dist/nile-virtual-select/renderer.cjs.js.map +0 -1
  161. package/dist/nile-virtual-select/renderer.esm.js +0 -18
  162. package/dist/nile-virtual-select/search-manager.cjs.js +0 -2
  163. package/dist/nile-virtual-select/search-manager.cjs.js.map +0 -1
  164. package/dist/nile-virtual-select/search-manager.esm.js +0 -1
  165. package/dist/nile-virtual-select/selection-manager.cjs.js +0 -2
  166. package/dist/nile-virtual-select/selection-manager.cjs.js.map +0 -1
  167. package/dist/nile-virtual-select/selection-manager.esm.js +0 -1
  168. package/dist/nile-virtual-select/types.cjs.js +0 -2
  169. package/dist/nile-virtual-select/types.cjs.js.map +0 -1
  170. package/dist/nile-virtual-select/types.esm.js +0 -1
  171. package/dist/src/nile-select/virtual-scroll-helper.d.ts +0 -9
  172. package/dist/src/nile-select/virtual-scroll-helper.js +0 -51
  173. package/dist/src/nile-select/virtual-scroll-helper.js.map +0 -1
  174. package/dist/src/nile-virtual-select/index.d.ts +0 -1
  175. package/dist/src/nile-virtual-select/index.js +0 -2
  176. package/dist/src/nile-virtual-select/index.js.map +0 -1
  177. package/dist/src/nile-virtual-select/nile-virtual-select.css.d.ts +0 -12
  178. package/dist/src/nile-virtual-select/nile-virtual-select.css.js +0 -479
  179. package/dist/src/nile-virtual-select/nile-virtual-select.css.js.map +0 -1
  180. package/dist/src/nile-virtual-select/nile-virtual-select.d.ts +0 -263
  181. package/dist/src/nile-virtual-select/nile-virtual-select.js +0 -1183
  182. package/dist/src/nile-virtual-select/nile-virtual-select.js.map +0 -1
  183. package/dist/src/nile-virtual-select/nile-virtual-select.test.d.ts +0 -7
  184. package/dist/src/nile-virtual-select/nile-virtual-select.test.js +0 -341
  185. package/dist/src/nile-virtual-select/nile-virtual-select.test.js.map +0 -1
  186. package/dist/src/nile-virtual-select/renderer.d.ts +0 -11
  187. package/dist/src/nile-virtual-select/renderer.js +0 -51
  188. package/dist/src/nile-virtual-select/renderer.js.map +0 -1
  189. package/dist/src/nile-virtual-select/search-manager.d.ts +0 -12
  190. package/dist/src/nile-virtual-select/search-manager.js +0 -40
  191. package/dist/src/nile-virtual-select/search-manager.js.map +0 -1
  192. package/dist/src/nile-virtual-select/selection-manager.d.ts +0 -12
  193. package/dist/src/nile-virtual-select/selection-manager.js +0 -64
  194. package/dist/src/nile-virtual-select/selection-manager.js.map +0 -1
  195. package/dist/src/nile-virtual-select/types.d.ts +0 -50
  196. package/dist/src/nile-virtual-select/types.js +0 -8
  197. package/dist/src/nile-virtual-select/types.js.map +0 -1
  198. package/dist/virtualize-a4a40d96.esm.js +0 -22
  199. package/dist/virtualize-b6a2fbe0.cjs.js +0 -18
  200. package/dist/virtualize-b6a2fbe0.cjs.js.map +0 -1
  201. package/src/nile-select/virtual-scroll-helper.ts +0 -56
  202. package/src/nile-virtual-select/index.ts +0 -1
  203. package/src/nile-virtual-select/nile-virtual-select.css.ts +0 -481
  204. package/src/nile-virtual-select/nile-virtual-select.test.ts +0 -414
  205. package/src/nile-virtual-select/nile-virtual-select.ts +0 -1268
  206. package/src/nile-virtual-select/renderer.ts +0 -73
  207. package/src/nile-virtual-select/search-manager.ts +0 -50
  208. package/src/nile-virtual-select/selection-manager.ts +0 -75
  209. package/src/nile-virtual-select/types.ts +0 -54
@@ -4,6 +4,7 @@
4
4
  * This source code is licensed under the BSD-3-Clause license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
+
7
8
  import { LitElement, html, CSSResultArray, TemplateResult } from 'lit';
8
9
  import { customElement, property, query, state } from 'lit/decorators.js';
9
10
  import { styles } from './nile-pagination.css';
@@ -21,33 +22,51 @@ export class NilePagination extends NileElement {
21
22
  return [styles];
22
23
  }
23
24
 
24
-
25
- @property({attribute: 'totalitems',reflect: true, converter: { fromAttribute: (v: string) => {const n = Number(v);
26
- return Number.isFinite(n) && n >= 0 ? Math.floor(n) : 0; }}})totalItems: number = 0;
27
-
28
- @property({ attribute: 'currentpage',reflect: true,converter: { fromAttribute: (v: string) => { const n = Number(v);
29
- return Number.isFinite(n) && n >= 1 ? Math.floor(n) : 1;}}}) currentPage : number = 1;
30
-
25
+ @property({attribute: 'totalitems',reflect: true,converter: {
26
+ fromAttribute: (v: string) => {
27
+ const n = Number(v);
28
+ return Number.isFinite(n) && n >= 0 ? Math.floor(n) : 0;
29
+ },
30
+ },
31
+ })totalItems: number = 0;
31
32
 
32
- @property({attribute: 'pagesize',reflect: true, converter: { fromAttribute: (v: string) => {
33
+ @property({attribute: 'currentpage', reflect: true, converter: {
34
+ fromAttribute: (v: string) => {
33
35
  const n = Number(v);
34
- return Number.isFinite(n) && n >= 1 ? Math.floor(n) : 50;}}}) pageSize: number = 50;
36
+ return Number.isFinite(n) && n >= 1 ? Math.floor(n) : 1;
37
+ },
38
+ },
39
+ })currentPage: number = 1;
35
40
 
41
+ @property({attribute: 'pagesize',reflect: true,converter: {
42
+ fromAttribute: (v: string) => {
43
+ const n = Number(v);
44
+ return Number.isFinite(n) && n >= 1 ? Math.floor(n) : 50;
45
+ },
46
+ },
47
+ })pageSize: number = 50;
36
48
 
37
- @property({ attribute: 'pagesizeoptions', reflect: false,converter: { fromAttribute: (v: string) => { try { const arr = JSON.parse(v);
49
+ @property({ attribute: 'pagesizeoptions', reflect: false, converter: { fromAttribute: (v: string) => {
50
+ try {
51
+ const arr = JSON.parse(v);
38
52
  if (Array.isArray(arr) && arr.every(x => typeof x === 'number')) {
39
53
  return arr as number[];
40
54
  }
41
- } catch {}return [10, 25, 50, 100];}}}) pageSizeOptions: number[] = [10, 25, 50, 100];
55
+ } catch {}
56
+ return [10, 25, 50, 100];
57
+ }}})
58
+ pageSizeOptions: number[] = [10, 25, 50, 100];
42
59
 
43
- @property({ type: String }) variant: 'fluid' | 'compact' = 'fluid';
60
+ @property({ type: String })variant: 'fluid' | 'compact' = 'fluid';
44
61
  @property({ type: Boolean }) disabled = false;
45
62
  @property({ type: Boolean }) showTitle = true;
46
63
 
47
64
  @state() private _pageSizeOpen = false;
65
+ @state() private _pageOpen = false;
48
66
  @query('.page-size-dropdown') private _pageSizeDropdown!: HTMLElement;
49
67
 
50
68
  firstUpdated() {
69
+ if (this._pageSizeDropdown) {
51
70
  this._pageSizeDropdown.addEventListener('nile-show', () => {
52
71
  this._pageSizeOpen = true;
53
72
  });
@@ -55,31 +74,49 @@ export class NilePagination extends NileElement {
55
74
  this._pageSizeOpen = false;
56
75
  });
57
76
  }
58
-
77
+ }
78
+
59
79
  private get totalPages(): number {
60
80
  return Math.max(1, calculateTotalPages(this.totalItems, this.pageSize));
61
81
  }
62
82
 
63
- private goToPage(page: number) {
83
+ private goToPage(newPage: number) {
84
+
64
85
  if (this.disabled) return;
65
- this.currentPage = page;
66
- this.emit('nile-change', { page: this.currentPage, pageSize: this.pageSize });
86
+ const previousPage = this.currentPage;
87
+ this.currentPage = newPage;
88
+ this.emit('nile-change', { page: newPage, previousPage, pageSize: this.pageSize });
67
89
  }
68
90
 
69
- private onPageSizeSelect(size: number) {
70
- if (this.disabled || this.pageSize === size) return;
71
- this.pageSize = size;
72
- this.currentPage = 1;
73
- this.emit('nile-change', { page: 1, pageSize: size });
74
- }
91
+ private onPageSizeSelect(newSize: number) {
92
+ if (this.disabled || this.pageSize === newSize) return;
93
+
94
+ const previousPage = this.currentPage;
95
+ this.pageSize = newSize;
96
+ this.currentPage = 1;
97
+ this.emit('nile-change', {
98
+ page: 1,
99
+ previousPage,
100
+ pageSize: newSize
101
+ });
102
+ }
103
+
104
+ private renderCompactRangeText(): TemplateResult {
105
+ const full = getRangeText(this.totalItems, this.pageSize, this.currentPage);
106
+ const trimmed = full.replace(/^Showing\s*/, '');
107
+ return html`<div class="range-text">${trimmed}</div>`;
108
+ }
109
+
75
110
 
76
111
  private renderRangeText(): TemplateResult {
77
112
  if (this.totalItems === 0) {
78
113
  return html`<div class="range-text">Showing 0 of 0</div>`;
79
114
  }
80
- return html`<div class="range-text">
81
- ${getRangeText(this.totalItems, this.pageSize, this.currentPage)}
82
- </div>`;
115
+ return html`
116
+ <div part="range-text" class="range-text">
117
+ ${getRangeText(this.totalItems, this.pageSize, this.currentPage)}
118
+ </div>
119
+ `;
83
120
  }
84
121
 
85
122
  private renderPageSizeSelect(): TemplateResult | null {
@@ -87,13 +124,65 @@ export class NilePagination extends NileElement {
87
124
  return html`
88
125
  <div class="page-size-select">
89
126
  <nile-dropdown class="page-size-dropdown" ?disabled=${this.disabled}>
90
- <nile-button slot="trigger" variant="tertiary" class="down ${this._pageSizeOpen ? 'open' : ''}"
127
+ <nile-button
128
+ slot="trigger"
129
+ variant="tertiary"
130
+ class="down ${this._pageSizeOpen ? 'open' : ''}"
91
131
  ?disabled=${this.disabled}
92
132
  >
93
133
  ${this.pageSize}
94
- <nile-icon name="chevrondown" size="14" color="var(--nile-colors-dark-500)" class="chevron"></nile-icon>
134
+ <nile-icon
135
+ name="chevrondown"
136
+ size="14"
137
+ color="var(--nile-colors-dark-500)"
138
+ class="chevron"
139
+ ></nile-icon>
95
140
  </nile-button>
96
- <nile-menu class="page-size-menu">
141
+ <nile-menu>
142
+ <div class="down-scroll-wrapper">
143
+ ${this.pageSizeOptions.map(
144
+ size => html`
145
+ <nile-menu-item
146
+ ?disabled=${this.disabled}
147
+ @click=${() => this.onPageSizeSelect(size)}
148
+ >
149
+ ${size}
150
+ </nile-menu-item>
151
+ `
152
+ )}
153
+ </div>
154
+ </nile-menu>
155
+ </nile-dropdown>
156
+ <span part="pagesize-label" class="page-size-label">Items per page</span>
157
+ </div>
158
+ `;
159
+ }
160
+
161
+
162
+ private renderCompactPageSize(): TemplateResult {
163
+ return html`
164
+ <nile-dropdown
165
+ class="compact-dropdown"
166
+ ?disabled=${this.disabled}
167
+ @nile-show=${() => (this._pageSizeOpen = true)}
168
+ @nile-after-hide=${() => (this._pageSizeOpen = false)}
169
+ >
170
+ <nile-button
171
+ slot="trigger"
172
+ variant="tertiary"
173
+ class="down ${this._pageSizeOpen ? 'open' : ''}"
174
+ ?disabled=${this.disabled}
175
+ >
176
+ ${this.pageSize}
177
+ <nile-icon
178
+ name="chevrondown"
179
+ size="14"
180
+ color="var(--nile-colors-dark-500)"
181
+ class="chevron"
182
+ ></nile-icon>
183
+ </nile-button>
184
+ <nile-menu>
185
+ <div class="compact-scroll-wrapper">
97
186
  ${this.pageSizeOptions.map(
98
187
  size => html`
99
188
  <nile-menu-item
@@ -101,14 +190,15 @@ export class NilePagination extends NileElement {
101
190
  @click=${() => this.onPageSizeSelect(size)}
102
191
  >
103
192
  ${size}
104
- </nile-menu-item>`
193
+ </nile-menu-item>
194
+ `
105
195
  )}
106
- </nile-menu>
107
- </nile-dropdown>
108
- <span class="page-size-label">Items per page</span>
109
- </div>
196
+ </div>
197
+ </nile-menu>
198
+ </nile-dropdown>
110
199
  `;
111
200
  }
201
+
112
202
 
113
203
  private renderPrevButton(): TemplateResult {
114
204
  return html`
@@ -164,7 +254,8 @@ export class NilePagination extends NileElement {
164
254
  @click=${() => this.goToPage(page)}
165
255
  >
166
256
  ${page}
167
- </nile-menu-item>`
257
+ </nile-menu-item>
258
+ `
168
259
  )}
169
260
  </div>
170
261
  </nile-menu>
@@ -172,7 +263,6 @@ export class NilePagination extends NileElement {
172
263
  </li>
173
264
  `;
174
265
  }
175
-
176
266
  return html`
177
267
  <li>
178
268
  <nile-button
@@ -187,10 +277,56 @@ export class NilePagination extends NileElement {
187
277
  }
188
278
 
189
279
  private renderPageList(): TemplateResult {
280
+ if (this.variant === 'compact') {
281
+ return html`
282
+ <nav aria-label="Pagination">
283
+ <ul class="pagination compact-pagination">
284
+ ${this.renderPrevButton()}
285
+ <li>
286
+ <nile-dropdown
287
+ class="compact-dropdown1"
288
+ ?disabled=${this.disabled}
289
+ @nile-show=${() => (this._pageOpen = true)}
290
+ @nile-after-hide=${() => (this._pageOpen = false)}
291
+ >
292
+ <nile-button
293
+ slot="trigger"
294
+ variant="tertiary"
295
+ class="current-page-btn ${this._pageOpen ? 'open' : ''}"
296
+ ?disabled=${this.disabled}
297
+ >
298
+ ${this.currentPage}
299
+ <nile-icon
300
+ name="chevrondown"
301
+ size="14"
302
+ class="chevron"
303
+ ></nile-icon>
304
+ </nile-button>
305
+ <nile-menu>
306
+ <div class="compact-scroll-wrapper1">
307
+ ${Array.from({ length: this.totalPages }, (_, i) => i + 1).map(
308
+ p => html`
309
+ <nile-menu-item
310
+ ?disabled=${this.disabled}
311
+ @click=${() => this.goToPage(p)}
312
+ >
313
+ ${p}
314
+ </nile-menu-item>
315
+ `
316
+ )}
317
+ </div>
318
+ </nile-menu>
319
+ </nile-dropdown>
320
+ </li>
321
+ ${this.renderNextButton()}
322
+ </ul>
323
+ </nav>
324
+ `;
325
+ }
190
326
  const items = getPaginationItems(this.totalPages, this.currentPage);
191
327
  return html`
192
328
  <nav aria-label="Pagination">
193
- <ul class="pagination">
329
+ <ul part="page-list" class="pagination">
194
330
  ${this.renderPrevButton()}
195
331
  ${items.map((item, idx) => this.renderPageItem(item, idx, items))}
196
332
  ${this.renderNextButton()}
@@ -199,17 +335,23 @@ export class NilePagination extends NileElement {
199
335
  `;
200
336
  }
201
337
 
202
- public render(): TemplateResult {
203
- return html`
204
- <div class="pagination-wrapper ${this.variant}">
205
- <div class="pager-container">
206
- ${this.showTitle ? this.renderRangeText() : null}
207
- ${this.renderPageSizeSelect()}
208
- </div>
209
- ${this.renderPageList()}
338
+ public render(): TemplateResult {
339
+ return html`
340
+ <div part="wrapper" class="pagination-wrapper ${this.variant}">
341
+ <div part="pager-container" class="pager-container">
342
+ ${this.variant === 'fluid' && this.showTitle
343
+ ? this.renderRangeText()
344
+ : this.variant === 'compact'
345
+ ? this.renderCompactRangeText()
346
+ : null}
347
+ ${this.variant === 'fluid'
348
+ ? this.renderPageSizeSelect()
349
+ : this.renderCompactPageSize()}
210
350
  </div>
211
- `;
212
- }
351
+ ${this.renderPageList()}
352
+ </div>
353
+ `;
354
+ }
213
355
  }
214
356
 
215
357
  declare global {
@@ -33,11 +33,8 @@ import type { CSSResultGroup, PropertyValues } from 'lit';
33
33
  import type { NileFormControl } from '../internal/nile-element';
34
34
  import type NileOption from '../nile-option/nile-option';
35
35
  import type NilePopup from '../nile-popup/nile-popup';
36
- import type { RenderItemConfig } from '../nile-virtual-select/types.js';
37
36
  import { unsafeHTML } from 'lit/directives/unsafe-html.js';
38
37
  import { ifDefined } from 'lit/directives/if-defined.js';
39
- import '../nile-virtual-select/nile-virtual-select';
40
- import { VirtualScrollHelper } from './virtual-scroll-helper';
41
38
 
42
39
  type NileRemoveEvent = CustomEvent<Record<PropertyKey, never>>;
43
40
 
@@ -56,7 +53,6 @@ type NileRemoveEvent = CustomEvent<Record<PropertyKey, never>>;
56
53
  * @dependency nile-icon
57
54
  * @dependency nile-popup
58
55
  * @dependency nile-tag
59
- * @dependency nile-virtual-select
60
56
  *
61
57
  * @slot - The listbox options. Must be `<nile-option>` elements. You can use `<nile-divider>` to group items visually.
62
58
  * @slot label - The input's label. Alternatively, you can use the `label` attribute.
@@ -95,15 +91,14 @@ type NileRemoveEvent = CustomEvent<Record<PropertyKey, never>>;
95
91
  */
96
92
 
97
93
  @customElement('nile-select')
98
- export class NileSelect extends NileElement implements NileFormControl{
94
+ export class NileSelect extends NileElement implements NileFormControl {
99
95
  static styles: CSSResultGroup = styles;
100
96
 
101
97
  // protected override BUBBLES=false;
102
98
 
103
- private formControlController: FormControlController | null;
104
- private virtualScrollHelper!: VirtualScrollHelper;
105
-
106
-
99
+ private readonly formControlController = new FormControlController(this, {
100
+ assumeInteractionOn: ['nile-blur', 'nile-input'],
101
+ });
107
102
  private readonly hasSlotController = new HasSlotController(
108
103
  this,
109
104
  'help-text',
@@ -237,13 +232,6 @@ export class NileSelect extends NileElement implements NileFormControl{
237
232
 
238
233
  @property({ type: String }) noResultsMessage: string = 'No results found';
239
234
 
240
- /** Enhanced configuration for rendering items with support for display text, value, and search text */
241
- @property({ attribute: false }) renderItemConfig?: RenderItemConfig;
242
-
243
- @property({ type: Array }) data: any = [];
244
-
245
- @property({ type: Boolean }) enableVirtualScroll = false;
246
-
247
235
  /** Gets the validity state object */
248
236
  get validity() {
249
237
  return this.valueInput?.validity;
@@ -254,18 +242,8 @@ export class NileSelect extends NileElement implements NileFormControl{
254
242
  return this.valueInput?.validationMessage;
255
243
  }
256
244
 
257
- constructor() {
258
- super();
259
- }
260
-
261
245
  connectedCallback() {
262
246
  super.connectedCallback();
263
- if(!this.enableVirtualScroll) {
264
- this.formControlController = new FormControlController(this, {
265
- assumeInteractionOn: ['nile-blur', 'nile-input'],
266
- });
267
- }
268
- this.virtualScrollHelper = new VirtualScrollHelper(this);
269
247
  this.handleDocumentFocusIn = this.handleDocumentFocusIn.bind(this);
270
248
  this.handleDocumentKeyDown = this.handleDocumentKeyDown.bind(this);
271
249
  this.handleDocumentMouseDown = this.handleDocumentMouseDown.bind(this);
@@ -769,7 +747,7 @@ export class NileSelect extends NileElement implements NileFormControl{
769
747
 
770
748
  // Update validity
771
749
  this.updateComplete.then(() => {
772
- this.formControlController?.updateValidity();
750
+ this.formControlController.updateValidity();
773
751
  });
774
752
 
775
753
  this.calculateTotalWidthOfTags();
@@ -820,8 +798,8 @@ export class NileSelect extends NileElement implements NileFormControl{
820
798
  }
821
799
 
822
800
  private handleInvalid(event: Event) {
823
- this.formControlController?.setValidity(false);
824
- this.formControlController?.emitInvalidEvent(event);
801
+ this.formControlController.setValidity(false);
802
+ this.formControlController.emitInvalidEvent(event);
825
803
  }
826
804
 
827
805
  @watch('disabled', { waitUntilFirstUpdate: true })
@@ -924,7 +902,7 @@ export class NileSelect extends NileElement implements NileFormControl{
924
902
 
925
903
  /** Gets the associated form, if one exists. */
926
904
  getForm(): HTMLFormElement | null {
927
- return this.formControlController?.getForm() || null;
905
+ return this.formControlController.getForm();
928
906
  }
929
907
 
930
908
  /** Checks for validity and shows the browser's validation message if the control is invalid. */
@@ -935,7 +913,7 @@ export class NileSelect extends NileElement implements NileFormControl{
935
913
  /** Sets a custom validation message. Pass an empty string to restore validity. */
936
914
  setCustomValidity(message: string) {
937
915
  this.valueInput.setCustomValidity(message);
938
- this.formControlController?.updateValidity();
916
+ this.formControlController.updateValidity();
939
917
  }
940
918
 
941
919
  /** Sets focus on the control. */
@@ -1008,10 +986,6 @@ export class NileSelect extends NileElement implements NileFormControl{
1008
986
  }
1009
987
 
1010
988
  render() {
1011
- if(this.enableVirtualScroll) {
1012
- return this.virtualScrollHelper.renderVirtualizedContent();
1013
- }
1014
-
1015
989
  const hasLabelSlot = this.hasSlotController.test('label');
1016
990
  const hasHelpTextSlot = this.hasSlotController.test('help-text');
1017
991
  const hasLabelSuffixSlot = this.hasSlotController.test('label-suffix');