@aquera/nile-elements 0.1.50 → 0.1.52-beta-1.2

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 (253) hide show
  1. package/README.md +7 -0
  2. package/demo/index.html +150 -33
  3. package/demo/index.js +0 -1
  4. package/dist/index.cjs.js +1 -1
  5. package/dist/index.esm.js +1 -1
  6. package/dist/index.js +1363 -617
  7. package/dist/internal/form.cjs.js +1 -1
  8. package/dist/internal/form.cjs.js.map +1 -1
  9. package/dist/internal/form.esm.js +1 -1
  10. package/dist/nile-accordion/nile-accordian.test.cjs.js +1 -1
  11. package/dist/nile-auto-complete/index.cjs.js +1 -1
  12. package/dist/nile-auto-complete/index.esm.js +1 -1
  13. package/dist/nile-auto-complete/nile-auto-complete.cjs.js +1 -17
  14. package/dist/nile-auto-complete/nile-auto-complete.cjs.js.map +1 -1
  15. package/dist/nile-auto-complete/nile-auto-complete.esm.js +8 -29
  16. package/dist/nile-auto-complete/nile-auto-complete.test.cjs.js +1 -1
  17. package/dist/nile-auto-complete/nile-auto-complete.test.cjs.js.map +1 -1
  18. package/dist/nile-auto-complete/nile-auto-complete.test.esm.js +1 -1
  19. package/dist/nile-avatar/nile-avatar.test.cjs.js +1 -1
  20. package/dist/nile-avatar/nile-avatar.test.cjs.js.map +1 -1
  21. package/dist/nile-avatar/nile-avatar.test.esm.js +1 -1
  22. package/dist/nile-badge/index.cjs.js +1 -1
  23. package/dist/nile-badge/index.esm.js +1 -1
  24. package/dist/nile-badge/nile-badge.cjs.js +1 -1
  25. package/dist/nile-badge/nile-badge.cjs.js.map +1 -1
  26. package/dist/nile-badge/nile-badge.esm.js +1 -1
  27. package/dist/nile-badge/nile-badge.test.cjs.js +1 -1
  28. package/dist/nile-badge/nile-badge.test.cjs.js.map +1 -1
  29. package/dist/nile-badge/nile-badge.test.esm.js +1 -1
  30. package/dist/nile-button/index.cjs.js +1 -1
  31. package/dist/nile-button/index.esm.js +1 -1
  32. package/dist/nile-button/nile-button.cjs.js +1 -1
  33. package/dist/nile-button/nile-button.cjs.js.map +1 -1
  34. package/dist/nile-button/nile-button.esm.js +1 -1
  35. package/dist/nile-button/nile-button.test.cjs.js +1 -1
  36. package/dist/nile-button/nile-button.test.cjs.js.map +1 -1
  37. package/dist/nile-button/nile-button.test.esm.js +1 -1
  38. package/dist/nile-button-toggle-group/nile-button-toggle-group.test.cjs.js +1 -1
  39. package/dist/nile-calendar/nile-calendar.test.cjs.js +1 -1
  40. package/dist/nile-calendar/nile-calendar.test.cjs.js.map +1 -1
  41. package/dist/nile-calendar/nile-calendar.test.esm.js +1 -1
  42. package/dist/nile-card/nile-card.test.cjs.js +1 -1
  43. package/dist/nile-checkbox/nile-checkbox.test.cjs.js +1 -1
  44. package/dist/nile-chip/nile-chip.test.cjs.js +1 -1
  45. package/dist/nile-chip/nile-chip.test.cjs.js.map +1 -1
  46. package/dist/nile-chip/nile-chip.test.esm.js +1 -1
  47. package/dist/nile-dialog/index.cjs.js +1 -1
  48. package/dist/nile-dialog/index.esm.js +1 -1
  49. package/dist/nile-dialog/nile-dialog.cjs.js +1 -1
  50. package/dist/nile-dialog/nile-dialog.cjs.js.map +1 -1
  51. package/dist/nile-dialog/nile-dialog.esm.js +1 -1
  52. package/dist/nile-dialog/nile-dialog.test.cjs.js +1 -1
  53. package/dist/nile-dialog/nile-dialog.test.cjs.js.map +1 -1
  54. package/dist/nile-dialog/nile-dialog.test.esm.js +1 -1
  55. package/dist/nile-drawer/index.cjs.js +1 -1
  56. package/dist/nile-drawer/index.esm.js +1 -1
  57. package/dist/nile-drawer/nile-drawer.cjs.js +1 -1
  58. package/dist/nile-drawer/nile-drawer.cjs.js.map +1 -1
  59. package/dist/nile-drawer/nile-drawer.esm.js +1 -1
  60. package/dist/nile-drawer/nile-drawer.test.cjs.js +1 -1
  61. package/dist/nile-drawer/nile-drawer.test.cjs.js.map +1 -1
  62. package/dist/nile-drawer/nile-drawer.test.esm.js +1 -1
  63. package/dist/nile-dropdown/nile-dropdown.test.cjs.js +1 -1
  64. package/dist/nile-empty-state/nile-empty-state.test.cjs.js +1 -1
  65. package/dist/nile-error-message/nile-error-message.test.cjs.js +1 -1
  66. package/dist/nile-filter-chip/nile-filter-chip.test.cjs.js +1 -1
  67. package/dist/nile-form-group/nile-form-group.test.cjs.js +1 -1
  68. package/dist/nile-form-help-text/nile-form-help-text.test.cjs.js +1 -1
  69. package/dist/nile-hero/nile-hero.test.cjs.js +1 -1
  70. package/dist/nile-icon/icons/svg/column-add.cjs.js +2 -0
  71. package/dist/nile-icon/icons/svg/column-add.cjs.js.map +1 -0
  72. package/dist/nile-icon/icons/svg/column-add.esm.js +1 -0
  73. package/dist/nile-icon/icons/svg/index.cjs.js +1 -1
  74. package/dist/nile-icon/icons/svg/index.esm.js +1 -1
  75. package/dist/nile-icon/index.cjs.js +1 -1
  76. package/dist/nile-icon/index.cjs.js.map +1 -1
  77. package/dist/nile-icon/index.esm.js +1 -1
  78. package/dist/nile-icon/nile-icon.test.cjs.js +1 -1
  79. package/dist/nile-icon/nile-icon.test.cjs.js.map +1 -1
  80. package/dist/nile-icon/nile-icon.test.esm.js +1 -1
  81. package/dist/nile-icon-button/index.cjs.js +1 -1
  82. package/dist/nile-icon-button/index.esm.js +1 -1
  83. package/dist/nile-icon-button/nile-icon-button.cjs.js +1 -1
  84. package/dist/nile-icon-button/nile-icon-button.cjs.js.map +1 -1
  85. package/dist/nile-icon-button/nile-icon-button.esm.js +1 -1
  86. package/dist/nile-input/index.cjs.js +1 -1
  87. package/dist/nile-input/index.esm.js +1 -1
  88. package/dist/nile-input/nile-input.cjs.js +1 -1
  89. package/dist/nile-input/nile-input.cjs.js.map +1 -1
  90. package/dist/nile-input/nile-input.esm.js +1 -1
  91. package/dist/nile-input/nile-input.test.cjs.js +1 -1
  92. package/dist/nile-input/nile-input.test.cjs.js.map +1 -1
  93. package/dist/nile-input/nile-input.test.esm.js +1 -1
  94. package/dist/nile-link/nile-link.test.cjs.js +1 -1
  95. package/dist/nile-loader/nile-loader.test.cjs.js +1 -1
  96. package/dist/nile-menu-item/index.cjs.js +1 -1
  97. package/dist/nile-menu-item/index.esm.js +1 -1
  98. package/dist/nile-menu-item/nile-menu-item.cjs.js +1 -1
  99. package/dist/nile-menu-item/nile-menu-item.cjs.js.map +1 -1
  100. package/dist/nile-menu-item/nile-menu-item.esm.js +1 -1
  101. package/dist/nile-option/index.cjs.js +1 -1
  102. package/dist/nile-option/index.esm.js +1 -1
  103. package/dist/nile-option/nile-option.cjs.js +1 -1
  104. package/dist/nile-option/nile-option.cjs.js.map +1 -1
  105. package/dist/nile-option/nile-option.css.cjs.js +1 -1
  106. package/dist/nile-option/nile-option.css.cjs.js.map +1 -1
  107. package/dist/nile-option/nile-option.css.esm.js +1 -1
  108. package/dist/nile-option/nile-option.esm.js +2 -2
  109. package/dist/nile-popover/nile-popover.test.cjs.js +1 -1
  110. package/dist/nile-popup/nile-popup.test.cjs.js +1 -1
  111. package/dist/nile-progress-bar/nile-progress-bar.test.cjs.js +1 -1
  112. package/dist/nile-radio/nile-radio.test.cjs.js +1 -1
  113. package/dist/nile-radio-group/nile-radio-group.test.cjs.js +1 -1
  114. package/dist/nile-select/index.cjs.js +1 -1
  115. package/dist/nile-select/index.esm.js +1 -1
  116. package/dist/nile-select/nile-select.cjs.js +1 -1
  117. package/dist/nile-select/nile-select.cjs.js.map +1 -1
  118. package/dist/nile-select/nile-select.esm.js +2 -2
  119. package/dist/nile-select/nile-select.test.cjs.js +1 -1
  120. package/dist/nile-select/nile-select.test.cjs.js.map +1 -1
  121. package/dist/nile-select/nile-select.test.esm.js +2 -2
  122. package/dist/nile-select/virtual-scroll-helper.cjs.js +2 -0
  123. package/dist/nile-select/virtual-scroll-helper.cjs.js.map +1 -0
  124. package/dist/nile-select/virtual-scroll-helper.esm.js +38 -0
  125. package/dist/nile-slide-toggle/nile-slide-toggle.test.cjs.js +1 -1
  126. package/dist/nile-tab/index.cjs.js +1 -1
  127. package/dist/nile-tab/index.esm.js +1 -1
  128. package/dist/nile-tab/nile-tab.cjs.js +1 -1
  129. package/dist/nile-tab/nile-tab.cjs.js.map +1 -1
  130. package/dist/nile-tab/nile-tab.esm.js +1 -1
  131. package/dist/nile-tab-group/index.cjs.js +1 -1
  132. package/dist/nile-tab-group/index.esm.js +1 -1
  133. package/dist/nile-tab-group/nile-tab-group.cjs.js +1 -1
  134. package/dist/nile-tab-group/nile-tab-group.cjs.js.map +1 -1
  135. package/dist/nile-tab-group/nile-tab-group.esm.js +1 -1
  136. package/dist/nile-tab-group/nile-tab-group.test.cjs.js +1 -1
  137. package/dist/nile-tab-group/nile-tab-group.test.cjs.js.map +1 -1
  138. package/dist/nile-tab-group/nile-tab-group.test.esm.js +1 -1
  139. package/dist/nile-tag/index.cjs.js +1 -1
  140. package/dist/nile-tag/index.esm.js +1 -1
  141. package/dist/nile-tag/nile-tag.cjs.js +1 -1
  142. package/dist/nile-tag/nile-tag.cjs.js.map +1 -1
  143. package/dist/nile-tag/nile-tag.esm.js +1 -1
  144. package/dist/nile-textarea/nile-textarea.test.cjs.js +1 -1
  145. package/dist/nile-toast/index.cjs.js +1 -1
  146. package/dist/nile-toast/index.esm.js +1 -1
  147. package/dist/nile-toast/nile-toast.cjs.js +1 -1
  148. package/dist/nile-toast/nile-toast.cjs.js.map +1 -1
  149. package/dist/nile-toast/nile-toast.esm.js +1 -1
  150. package/dist/nile-tree/index.cjs.js +1 -1
  151. package/dist/nile-tree/index.esm.js +1 -1
  152. package/dist/nile-tree/nile-tree.cjs.js +1 -1
  153. package/dist/nile-tree/nile-tree.cjs.js.map +1 -1
  154. package/dist/nile-tree/nile-tree.esm.js +1 -1
  155. package/dist/nile-tree-item/index.cjs.js +1 -1
  156. package/dist/nile-tree-item/index.esm.js +1 -1
  157. package/dist/nile-tree-item/nile-tree-item.cjs.js +1 -1
  158. package/dist/nile-tree-item/nile-tree-item.cjs.js.map +1 -1
  159. package/dist/nile-tree-item/nile-tree-item.esm.js +1 -1
  160. package/dist/nile-virtual-select/index.cjs.js +2 -0
  161. package/dist/nile-virtual-select/index.cjs.js.map +1 -0
  162. package/dist/nile-virtual-select/index.esm.js +1 -0
  163. package/dist/nile-virtual-select/nile-virtual-select.cjs.js +2 -0
  164. package/dist/nile-virtual-select/nile-virtual-select.cjs.js.map +1 -0
  165. package/dist/nile-virtual-select/nile-virtual-select.css.cjs.js +2 -0
  166. package/dist/nile-virtual-select/nile-virtual-select.css.cjs.js.map +1 -0
  167. package/dist/nile-virtual-select/nile-virtual-select.css.esm.js +467 -0
  168. package/dist/nile-virtual-select/nile-virtual-select.esm.js +227 -0
  169. package/dist/nile-virtual-select/nile-virtual-select.test.cjs.js +2 -0
  170. package/dist/nile-virtual-select/nile-virtual-select.test.cjs.js.map +1 -0
  171. package/dist/nile-virtual-select/nile-virtual-select.test.esm.js +49 -0
  172. package/dist/nile-virtual-select/renderer.cjs.js +2 -0
  173. package/dist/nile-virtual-select/renderer.cjs.js.map +1 -0
  174. package/dist/nile-virtual-select/renderer.esm.js +18 -0
  175. package/dist/nile-virtual-select/search-manager.cjs.js +2 -0
  176. package/dist/nile-virtual-select/search-manager.cjs.js.map +1 -0
  177. package/dist/nile-virtual-select/search-manager.esm.js +1 -0
  178. package/dist/nile-virtual-select/selection-manager.cjs.js +2 -0
  179. package/dist/nile-virtual-select/selection-manager.cjs.js.map +1 -0
  180. package/dist/nile-virtual-select/selection-manager.esm.js +1 -0
  181. package/dist/nile-virtual-select/types.cjs.js +2 -0
  182. package/dist/nile-virtual-select/types.cjs.js.map +1 -0
  183. package/dist/nile-virtual-select/types.esm.js +1 -0
  184. package/dist/src/index.d.ts +1 -0
  185. package/dist/src/index.js +1 -0
  186. package/dist/src/index.js.map +1 -1
  187. package/dist/src/internal/form.js +2 -2
  188. package/dist/src/internal/form.js.map +1 -1
  189. package/dist/src/nile-icon/icons/svg/column-add.d.ts +5 -0
  190. package/dist/src/nile-icon/icons/svg/column-add.js +5 -0
  191. package/dist/src/nile-icon/icons/svg/column-add.js.map +1 -0
  192. package/dist/src/nile-icon/icons/svg/index.d.ts +1 -0
  193. package/dist/src/nile-icon/icons/svg/index.js +1 -0
  194. package/dist/src/nile-icon/icons/svg/index.js.map +1 -1
  195. package/dist/src/nile-option/nile-option.css.js +1 -1
  196. package/dist/src/nile-option/nile-option.css.js.map +1 -1
  197. package/dist/src/nile-option/nile-option.d.ts +5 -1
  198. package/dist/src/nile-option/nile-option.js +21 -6
  199. package/dist/src/nile-option/nile-option.js.map +1 -1
  200. package/dist/src/nile-select/nile-select.d.ts +11 -2
  201. package/dist/src/nile-select/nile-select.js +37 -18
  202. package/dist/src/nile-select/nile-select.js.map +1 -1
  203. package/dist/src/nile-select/virtual-scroll-helper.d.ts +9 -0
  204. package/dist/src/nile-select/virtual-scroll-helper.js +51 -0
  205. package/dist/src/nile-select/virtual-scroll-helper.js.map +1 -0
  206. package/dist/src/nile-virtual-select/index.d.ts +1 -0
  207. package/dist/src/nile-virtual-select/index.js +2 -0
  208. package/dist/src/nile-virtual-select/index.js.map +1 -0
  209. package/dist/src/nile-virtual-select/nile-virtual-select.css.d.ts +12 -0
  210. package/dist/src/nile-virtual-select/nile-virtual-select.css.js +479 -0
  211. package/dist/src/nile-virtual-select/nile-virtual-select.css.js.map +1 -0
  212. package/dist/src/nile-virtual-select/nile-virtual-select.d.ts +263 -0
  213. package/dist/src/nile-virtual-select/nile-virtual-select.js +1183 -0
  214. package/dist/src/nile-virtual-select/nile-virtual-select.js.map +1 -0
  215. package/dist/src/nile-virtual-select/nile-virtual-select.test.d.ts +7 -0
  216. package/dist/src/nile-virtual-select/nile-virtual-select.test.js +341 -0
  217. package/dist/src/nile-virtual-select/nile-virtual-select.test.js.map +1 -0
  218. package/dist/src/nile-virtual-select/renderer.d.ts +11 -0
  219. package/dist/src/nile-virtual-select/renderer.js +51 -0
  220. package/dist/src/nile-virtual-select/renderer.js.map +1 -0
  221. package/dist/src/nile-virtual-select/search-manager.d.ts +12 -0
  222. package/dist/src/nile-virtual-select/search-manager.js +40 -0
  223. package/dist/src/nile-virtual-select/search-manager.js.map +1 -0
  224. package/dist/src/nile-virtual-select/selection-manager.d.ts +12 -0
  225. package/dist/src/nile-virtual-select/selection-manager.js +64 -0
  226. package/dist/src/nile-virtual-select/selection-manager.js.map +1 -0
  227. package/dist/src/nile-virtual-select/types.d.ts +50 -0
  228. package/dist/src/nile-virtual-select/types.js +8 -0
  229. package/dist/src/nile-virtual-select/types.js.map +1 -0
  230. package/dist/tsconfig.tsbuildinfo +1 -1
  231. package/dist/virtualize-a4a40d96.esm.js +22 -0
  232. package/dist/virtualize-b6a2fbe0.cjs.js +18 -0
  233. package/dist/virtualize-b6a2fbe0.cjs.js.map +1 -0
  234. package/package.json +1 -2
  235. package/src/index.ts +3 -1
  236. package/src/internal/form.ts +2 -2
  237. package/src/nile-icon/icons/svg/column-add.ts +5 -0
  238. package/src/nile-icon/icons/svg/index.ts +1 -0
  239. package/src/nile-option/nile-option.css.ts +1 -1
  240. package/src/nile-option/nile-option.ts +17 -3
  241. package/src/nile-select/nile-select.ts +35 -9
  242. package/src/nile-select/virtual-scroll-helper.ts +56 -0
  243. package/src/nile-virtual-select/index.ts +1 -0
  244. package/src/nile-virtual-select/nile-virtual-select.css.ts +481 -0
  245. package/src/nile-virtual-select/nile-virtual-select.test.ts +414 -0
  246. package/src/nile-virtual-select/nile-virtual-select.ts +1268 -0
  247. package/src/nile-virtual-select/renderer.ts +73 -0
  248. package/src/nile-virtual-select/search-manager.ts +50 -0
  249. package/src/nile-virtual-select/selection-manager.ts +75 -0
  250. package/src/nile-virtual-select/types.ts +54 -0
  251. package/vscode-html-custom-data.json +229 -2
  252. package/demo/filenames.txt +0 -1
  253. package/demo/filenames.txt +0 -1
@@ -36,7 +36,6 @@ export declare class NileOption extends NileElement {
36
36
  private cachedTextLabel;
37
37
  defaultSlot: HTMLSlotElement;
38
38
  current: boolean;
39
- selected: boolean;
40
39
  hasHover: boolean;
41
40
  hidden: boolean;
42
41
  isMultipleSelect: boolean;
@@ -49,6 +48,10 @@ export declare class NileOption extends NileElement {
49
48
  showCheckbox: boolean;
50
49
  /** Draws the option in a disabled state, preventing selection. */
51
50
  disabled: boolean;
51
+ /** Forces the option to display in multiple select mode with checkboxes. */
52
+ multiple: boolean;
53
+ /** Indicates whether the option is selected. */
54
+ selected: boolean;
52
55
  connectedCallback(): void;
53
56
  protected updated(_changedProperties: PropertyValues): void;
54
57
  private handleDefaultSlotChange;
@@ -56,6 +59,7 @@ export declare class NileOption extends NileElement {
56
59
  private handleMouseLeave;
57
60
  handleDisabledChange(): void;
58
61
  handleSelectedChange(): void;
62
+ handleMultipleChange(): void;
59
63
  handleValueChange(): void;
60
64
  /** Returns a plain text label based on the option's content. */
61
65
  getTextLabel(): string;
@@ -39,7 +39,6 @@ let NileOption = class NileOption extends NileElement {
39
39
  constructor() {
40
40
  super(...arguments);
41
41
  this.current = false; // the user has keyed into the option, but hasn't selected it yet (shows a highlight)
42
- this.selected = false; // the option is selected and has aria-selected="true"
43
42
  this.hasHover = false; // we need this because Safari doesn't honor :hover styles while dragging
44
43
  this.hidden = false; // the option is hidden
45
44
  this.isMultipleSelect = false;
@@ -52,13 +51,17 @@ let NileOption = class NileOption extends NileElement {
52
51
  this.showCheckbox = false;
53
52
  /** Draws the option in a disabled state, preventing selection. */
54
53
  this.disabled = false;
54
+ /** Forces the option to display in multiple select mode with checkboxes. */
55
+ this.multiple = false;
56
+ /** Indicates whether the option is selected. */
57
+ this.selected = false;
55
58
  }
56
59
  connectedCallback() {
57
60
  super.connectedCallback();
58
61
  this.setAttribute('role', 'option');
59
62
  this.setAttribute('aria-selected', 'false');
60
- // Find the closest parent 'nile-select' element
61
- const parentSelect = this.closest('nile-select');
63
+ // Find the closest parent 'nile-select' or 'nile-virtual-select' element
64
+ const parentSelect = this.closest('nile-select') || this.closest('nile-virtual-select');
62
65
  // Check if the parent has the 'multiple' attribute
63
66
  if (parentSelect && parentSelect.hasAttribute('multiple')) {
64
67
  let multipleValue = parentSelect.getAttribute('multiple');
@@ -69,6 +72,9 @@ let NileOption = class NileOption extends NileElement {
69
72
  this.isMultipleSelect = Boolean(multipleValue);
70
73
  }
71
74
  }
75
+ if (this.multiple) {
76
+ this.isMultipleSelect = true;
77
+ }
72
78
  }
73
79
  updated(_changedProperties) {
74
80
  if (_changedProperties.has('showCheckbox')) {
@@ -100,6 +106,9 @@ let NileOption = class NileOption extends NileElement {
100
106
  handleSelectedChange() {
101
107
  this.setAttribute('aria-selected', this.selected ? 'true' : 'false');
102
108
  }
109
+ handleMultipleChange() {
110
+ this.isMultipleSelect = this.multiple;
111
+ }
103
112
  handleValueChange() {
104
113
  // Ensure the value is a string. This ensures the next line doesn't error and allows framework users to pass numbers
105
114
  // instead of requiring them to cast the value to a string.
@@ -163,9 +172,6 @@ __decorate([
163
172
  __decorate([
164
173
  state()
165
174
  ], NileOption.prototype, "current", void 0);
166
- __decorate([
167
- state()
168
- ], NileOption.prototype, "selected", void 0);
169
175
  __decorate([
170
176
  state()
171
177
  ], NileOption.prototype, "hasHover", void 0);
@@ -184,12 +190,21 @@ __decorate([
184
190
  __decorate([
185
191
  property({ type: Boolean, reflect: true })
186
192
  ], NileOption.prototype, "disabled", void 0);
193
+ __decorate([
194
+ property({ type: Boolean, reflect: true })
195
+ ], NileOption.prototype, "multiple", void 0);
196
+ __decorate([
197
+ property({ type: Boolean, reflect: true })
198
+ ], NileOption.prototype, "selected", void 0);
187
199
  __decorate([
188
200
  watch('disabled')
189
201
  ], NileOption.prototype, "handleDisabledChange", null);
190
202
  __decorate([
191
203
  watch('selected')
192
204
  ], NileOption.prototype, "handleSelectedChange", null);
205
+ __decorate([
206
+ watch('multiple')
207
+ ], NileOption.prototype, "handleMultipleChange", null);
193
208
  __decorate([
194
209
  watch('value')
195
210
  ], NileOption.prototype, "handleValueChange", null);
@@ -1 +1 @@
1
- {"version":3,"file":"nile-option.js","sourceRoot":"","sources":["../../../src/nile-option/nile-option.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,cAAc,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,kBAAkB,CAAC;AAE1B;;;;;GAKG;AAEH;;;;;;;;;;;;;;;GAeG;AAGI,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,WAAW;IAApC;;QAOI,YAAO,GAAG,KAAK,CAAC,CAAC,qFAAqF;QACtG,aAAQ,GAAG,KAAK,CAAC,CAAC,sDAAsD;QACxE,aAAQ,GAAG,KAAK,CAAC,CAAC,yEAAyE;QAC3F,WAAM,GAAG,KAAK,CAAC,CAAC,uBAAuB;QACvC,qBAAgB,GAAG,KAAK,CAAC;QAElC;;;;WAIG;QAC0B,UAAK,GAAG,EAAE,CAAC;QAEX,iBAAY,GAAY,KAAK,CAAC;QAE3D,kEAAkE;QACtB,aAAQ,GAAG,KAAK,CAAC;IA2H/D,CAAC;IAzHC,iBAAiB;QACf,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAE5C,gDAAgD;QAChD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAEjD,mDAAmD;QACnD,IAAI,YAAY,IAAI,YAAY,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1D,IAAI,aAAa,GAAG,YAAY,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;YAC1D,IAAI,aAAa,KAAK,OAAO,EAAE,CAAC;gBAC9B,IAAG,aAAa,KAAK,EAAE,EAAC,CAAC;oBACvB,aAAa,GAAG,MAAM,CAAC;gBACzB,CAAC;gBACD,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;IACH,CAAC;IAES,OAAO,CAAC,kBAAkC;QAClD,IAAG,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC;QAC5C,CAAC;IACH,CAAC;IAEO,uBAAuB;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAEtC,yCAAyC;QACzC,IAAI,OAAO,IAAI,CAAC,eAAe,KAAK,WAAW,EAAE,CAAC;YAChD,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;YACjC,OAAO;QACT,CAAC;QAED,4EAA4E;QAC5E,IAAI,SAAS,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;YACvC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAEO,gBAAgB;QACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;IAEO,gBAAgB;QACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,CAAC;IAGD,oBAAoB;QAClB,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACvE,CAAC;IAGD,oBAAoB;QAClB,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACvE,CAAC;IAGD,iBAAiB;QACf,oHAAoH;QACpH,2DAA2D;QAC3D,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QAED,kCAAkC;QAClC,mBAAmB;QACnB,+FAA+F;QAC/F,WAAW;QACX,OAAO;QACP,gDAAgD;QAChD,IAAI;IACN,CAAC;IAED,gEAAgE;IAChE,YAAY;QACV,kDAAkD;QAClD,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAEjD,uDAAuD;QACvD,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,YAAY,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAChD,CAAC;QAED,6DAA6D;QAC7D,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACzC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;QACP,CAAC,IAAI,CAAC,MAAM;YACZ,CAAC,CAAC,IAAI,CAAA;;oBAEM,QAAQ,CAAC;gBACf,MAAM,EAAE,IAAI;gBACZ,uBAAuB,EAAE,CAAC,IAAI,CAAC,gBAAgB;gBAC/C,iBAAiB,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB;gBAC1D,kBAAkB,EAAE,IAAI,CAAC,QAAQ;gBACjC,kBAAkB,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB;gBAC3D,eAAe,EAAE,IAAI,CAAC,QAAQ;aAC/B,CAAC;0BACY,IAAI,CAAC,gBAAgB;0BACrB,IAAI,CAAC,gBAAgB;;;YAGnC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAA,oDAAoD,IAAI,CAAC,QAAQ,mBAAmB,CAAC,CAAC,CAAC,EAAE;;;;;;4BAMrG,IAAI,CAAC,uBAAuB;;;iBAGvC;YACT,CAAC,CAAC,EAAE;KACP,CAAC;IACJ,CAAC;;AAhJM,iBAAM,GAAmB,MAAM,AAAzB,CAA0B;AAId;IAAxB,KAAK,CAAC,gBAAgB,CAAC;+CAA8B;AAE7C;IAAR,KAAK,EAAE;2CAAiB;AAChB;IAAR,KAAK,EAAE;4CAAkB;AACjB;IAAR,KAAK,EAAE;4CAAkB;AACjB;IAAR,KAAK,EAAE;0CAAgB;AACf;IAAR,KAAK,EAAE;oDAA0B;AAOL;IAA5B,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;yCAAY;AAEX;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gDAA+B;AAGf;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;4CAAkB;AAqD7D;IADC,KAAK,CAAC,UAAU,CAAC;sDAGjB;AAGD;IADC,KAAK,CAAC,UAAU,CAAC;sDAGjB;AAGD;IADC,KAAK,CAAC,OAAO,CAAC;mDAed;AApGU,UAAU;IADtB,aAAa,CAAC,aAAa,CAAC;GAChB,UAAU,CAkJtB;;AAED,eAAe,UAAU,CAAC","sourcesContent":["/**\n * Copyright Aquera Inc 2023\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 */\n\nimport { LitElement, CSSResultArray, TemplateResult } from 'lit';\nimport { styles } from './nile-option.css';\nimport '../nile-icon';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { html } from 'lit';\nimport { watch } from '../internal/watch';\nimport type { CSSResultGroup, PropertyValues } from 'lit';\nimport NileElement from '../internal/nile-element';\nimport '../nile-checkbox';\n\n/**\n * Nile icon component.\n *\n * @tag nile-option\n *\n */\n\n/**\n * @summary Options define the selectable items within various form controls such as [select](/components/select).\n * @status stable\n *\n * @dependency nile-icon\n *\n * @slot - The option's label.\n * @slot prefix - Used to prepend an icon or similar element to the menu item.\n * @slot suffix - Used to append an icon or similar element to the menu item.\n *\n * @csspart checked-icon - The checked icon, an `<nile-icon>` element.\n * @csspart base - The component's base wrapper.\n * @csspart label - The option's label.\n * @csspart prefix - The container that wraps the prefix.\n * @csspart suffix - The container that wraps the suffix.\n */\n\n@customElement('nile-option')\nexport class NileOption extends NileElement {\n static styles: CSSResultGroup = styles;\n\n private cachedTextLabel: string;\n\n @query('.option__label') defaultSlot: HTMLSlotElement;\n\n @state() current = false; // the user has keyed into the option, but hasn't selected it yet (shows a highlight)\n @state() selected = false; // the option is selected and has aria-selected=\"true\"\n @state() hasHover = false; // we need this because Safari doesn't honor :hover styles while dragging\n @state() hidden = false; // the option is hidden\n @state() isMultipleSelect = false;\n\n /**\n * The option's value. When selected, the containing form control will receive this value. The value must be unique\n * from other options in the same group. Values may not contain spaces, as spaces are used as delimiters when listing\n * multiple values.\n */\n @property({ reflect: true }) value = '';\n\n @property({ type: Boolean }) showCheckbox: boolean = false;\n\n /** Draws the option in a disabled state, preventing selection. */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n connectedCallback() {\n super.connectedCallback();\n this.setAttribute('role', 'option');\n this.setAttribute('aria-selected', 'false');\n\n // Find the closest parent 'nile-select' element\n const parentSelect = this.closest('nile-select');\n\n // Check if the parent has the 'multiple' attribute\n if (parentSelect && parentSelect.hasAttribute('multiple')) {\n let multipleValue = parentSelect.getAttribute('multiple');\n if (multipleValue !== 'false') {\n if(multipleValue === ''){\n multipleValue = 'true';\n }\n this.isMultipleSelect = Boolean(multipleValue);\n }\n }\n }\n\n protected updated(_changedProperties: PropertyValues): void {\n if(_changedProperties.has('showCheckbox')) {\n this.isMultipleSelect = this.showCheckbox;\n }\n }\n\n private handleDefaultSlotChange() {\n const textLabel = this.getTextLabel();\n\n // Ignore the first time the label is set\n if (typeof this.cachedTextLabel === 'undefined') {\n this.cachedTextLabel = textLabel;\n return;\n }\n\n // When the label changes, emit a slotchange event so parent controls see it\n if (textLabel !== this.cachedTextLabel) {\n this.cachedTextLabel = textLabel;\n this.emit('slotchange');\n }\n }\n\n private handleMouseEnter() {\n this.hasHover = true;\n }\n\n private handleMouseLeave() {\n this.hasHover = false;\n }\n\n @watch('disabled')\n handleDisabledChange() {\n this.setAttribute('aria-disabled', this.disabled ? 'true' : 'false');\n }\n\n @watch('selected')\n handleSelectedChange() {\n this.setAttribute('aria-selected', this.selected ? 'true' : 'false');\n }\n\n @watch('value')\n handleValueChange() {\n // Ensure the value is a string. This ensures the next line doesn't error and allows framework users to pass numbers\n // instead of requiring them to cast the value to a string.\n if (typeof this.value !== 'string') {\n this.value = String(this.value);\n }\n\n // if (this.value.includes(' ')) {\n // console.error(\n // `Option values cannot include a space. All spaces have been replaced with underscores.`,\n // this\n // );\n // this.value = this.value.replace(/ /g, '_');\n // }\n }\n\n /** Returns a plain text label based on the option's content. */\n getTextLabel() {\n // Search for a label element inside the component\n const labelElement = this.querySelector('label');\n\n // If a label element is found, return its text content\n if (labelElement) {\n return labelElement.textContent?.trim() ?? '';\n }\n\n // If no label element is found, return the existing behavior\n return (this.textContent ?? '').trim();\n }\n\n render() {\n return html`\n ${!this.hidden\n ? html` <div\n part=\"base\"\n class=${classMap({\n option: true,\n 'option--single-select': !this.isMultipleSelect,\n 'option--current': this.selected && !this.isMultipleSelect,\n 'option--disabled': this.disabled,\n 'option--selected': this.selected && !this.isMultipleSelect,\n 'option--hover': this.hasHover,\n })}\n @mouseenter=${this.handleMouseEnter}\n @mouseleave=${this.handleMouseLeave}\n >\n\n ${this.isMultipleSelect ? html`<nile-checkbox class=\"option--checkbox\" .checked=${this.selected}></nile-checkbox>` : ''}\n\n <slot part=\"prefix\" name=\"prefix\" class=\"option__prefix\"></slot>\n <slot\n part=\"label\"\n class=\"option__label\"\n @slotchange=${this.handleDefaultSlotChange}\n ></slot>\n <slot part=\"suffix\" name=\"suffix\" class=\"option__suffix\"></slot>\n </div>`\n : ''}\n `;\n }\n}\n\nexport default NileOption;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-option': NileOption;\n }\n}\n"]}
1
+ {"version":3,"file":"nile-option.js","sourceRoot":"","sources":["../../../src/nile-option/nile-option.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright Aquera Inc 2023\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 */\n\nimport { LitElement, CSSResultArray, TemplateResult } from 'lit';\nimport { styles } from './nile-option.css';\nimport '../nile-icon';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { html } from 'lit';\nimport { watch } from '../internal/watch';\nimport type { CSSResultGroup, PropertyValues } from 'lit';\nimport NileElement from '../internal/nile-element';\nimport '../nile-checkbox';\n\n/**\n * Nile icon component.\n *\n * @tag nile-option\n *\n */\n\n/**\n * @summary Options define the selectable items within various form controls such as [select](/components/select).\n * @status stable\n *\n * @dependency nile-icon\n *\n * @slot - The option's label.\n * @slot prefix - Used to prepend an icon or similar element to the menu item.\n * @slot suffix - Used to append an icon or similar element to the menu item.\n *\n * @csspart checked-icon - The checked icon, an `<nile-icon>` element.\n * @csspart base - The component's base wrapper.\n * @csspart label - The option's label.\n * @csspart prefix - The container that wraps the prefix.\n * @csspart suffix - The container that wraps the suffix.\n */\n\n@customElement('nile-option')\nexport class NileOption extends NileElement {\n static styles: CSSResultGroup = styles;\n\n private cachedTextLabel: string;\n\n @query('.option__label') defaultSlot: HTMLSlotElement;\n\n @state() current = false; // the user has keyed into the option, but hasn't selected it yet (shows a highlight)\n @state() hasHover = false; // we need this because Safari doesn't honor :hover styles while dragging\n @state() hidden = false; // the option is hidden\n @state() isMultipleSelect = false;\n\n /**\n * The option's value. When selected, the containing form control will receive this value. The value must be unique\n * from other options in the same group. Values may not contain spaces, as spaces are used as delimiters when listing\n * multiple values.\n */\n @property({ reflect: true }) value = '';\n\n @property({ type: Boolean }) showCheckbox: boolean = false;\n\n /** Draws the option in a disabled state, preventing selection. */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n /** Forces the option to display in multiple select mode with checkboxes. */\n @property({ type: Boolean, reflect: true }) multiple = false;\n\n /** Indicates whether the option is selected. */\n @property({ type: Boolean, reflect: true }) selected = false;\n\n connectedCallback() {\n super.connectedCallback();\n this.setAttribute('role', 'option');\n this.setAttribute('aria-selected', 'false');\n\n // Find the closest parent 'nile-select' or 'nile-virtual-select' element\n const parentSelect = this.closest('nile-select') || this.closest('nile-virtual-select');\n\n // Check if the parent has the 'multiple' attribute\n if (parentSelect && parentSelect.hasAttribute('multiple')) {\n let multipleValue = parentSelect.getAttribute('multiple');\n if (multipleValue !== 'false') {\n if(multipleValue === ''){\n multipleValue = 'true';\n }\n this.isMultipleSelect = Boolean(multipleValue);\n }\n }\n\n if (this.multiple) {\n this.isMultipleSelect = true;\n }\n }\n\n protected updated(_changedProperties: PropertyValues): void {\n if(_changedProperties.has('showCheckbox')) {\n this.isMultipleSelect = this.showCheckbox;\n }\n }\n\n private handleDefaultSlotChange() {\n const textLabel = this.getTextLabel();\n\n // Ignore the first time the label is set\n if (typeof this.cachedTextLabel === 'undefined') {\n this.cachedTextLabel = textLabel;\n return;\n }\n\n // When the label changes, emit a slotchange event so parent controls see it\n if (textLabel !== this.cachedTextLabel) {\n this.cachedTextLabel = textLabel;\n this.emit('slotchange');\n }\n }\n\n private handleMouseEnter() {\n this.hasHover = true;\n }\n\n private handleMouseLeave() {\n this.hasHover = false;\n }\n\n @watch('disabled')\n handleDisabledChange() {\n this.setAttribute('aria-disabled', this.disabled ? 'true' : 'false');\n }\n\n @watch('selected')\n handleSelectedChange() {\n this.setAttribute('aria-selected', this.selected ? 'true' : 'false');\n }\n\n @watch('multiple')\n handleMultipleChange() {\n this.isMultipleSelect = this.multiple;\n }\n\n @watch('value')\n handleValueChange() {\n // Ensure the value is a string. This ensures the next line doesn't error and allows framework users to pass numbers\n // instead of requiring them to cast the value to a string.\n if (typeof this.value !== 'string') {\n this.value = String(this.value);\n }\n\n // if (this.value.includes(' ')) {\n // console.error(\n // `Option values cannot include a space. All spaces have been replaced with underscores.`,\n // this\n // );\n // this.value = this.value.replace(/ /g, '_');\n // }\n }\n\n /** Returns a plain text label based on the option's content. */\n getTextLabel() {\n // Search for a label element inside the component\n const labelElement = this.querySelector('label');\n\n // If a label element is found, return its text content\n if (labelElement) {\n return labelElement.textContent?.trim() ?? '';\n }\n\n // If no label element is found, return the existing behavior\n return (this.textContent ?? '').trim();\n }\n\n render() {\n return html`\n ${!this.hidden\n ? html` <div\n part=\"base\"\n class=${classMap({\n option: true,\n 'option--single-select': !this.isMultipleSelect,\n 'option--current': this.selected && !this.isMultipleSelect,\n 'option--disabled': this.disabled,\n 'option--selected': this.selected && !this.isMultipleSelect,\n 'option--hover': this.hasHover,\n })}\n @mouseenter=${this.handleMouseEnter}\n @mouseleave=${this.handleMouseLeave}\n >\n\n ${this.isMultipleSelect ? html`<nile-checkbox class=\"option--checkbox\" .checked=${this.selected}></nile-checkbox>` : ''}\n\n <slot part=\"prefix\" name=\"prefix\" class=\"option__prefix\"></slot>\n <slot\n part=\"label\"\n class=\"option__label\"\n @slotchange=${this.handleDefaultSlotChange}\n ></slot>\n <slot part=\"suffix\" name=\"suffix\" class=\"option__suffix\"></slot>\n </div>`\n : ''}\n `;\n }\n}\n\nexport default NileOption;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-option': NileOption;\n }\n}\n"]}
@@ -12,6 +12,8 @@ import type { CSSResultGroup, PropertyValues } from 'lit';
12
12
  import type { NileFormControl } from '../internal/nile-element';
13
13
  import type NileOption from '../nile-option/nile-option';
14
14
  import type NilePopup from '../nile-popup/nile-popup';
15
+ import type { RenderItemConfig } from '../nile-virtual-select/types.js';
16
+ import '../nile-virtual-select/nile-virtual-select';
15
17
  /**
16
18
  * Nile icon component.
17
19
  *
@@ -26,6 +28,7 @@ import type NilePopup from '../nile-popup/nile-popup';
26
28
  * @dependency nile-icon
27
29
  * @dependency nile-popup
28
30
  * @dependency nile-tag
31
+ * @dependency nile-virtual-select
29
32
  *
30
33
  * @slot - The listbox options. Must be `<nile-option>` elements. You can use `<nile-divider>` to group items visually.
31
34
  * @slot label - The input's label. Alternatively, you can use the `label` attribute.
@@ -64,7 +67,8 @@ import type NilePopup from '../nile-popup/nile-popup';
64
67
  */
65
68
  export declare class NileSelect extends NileElement implements NileFormControl {
66
69
  static styles: CSSResultGroup;
67
- private readonly formControlController;
70
+ private formControlController;
71
+ private virtualScrollHelper;
68
72
  private readonly hasSlotController;
69
73
  private typeToSelectString;
70
74
  private typeToSelectTimeout;
@@ -151,10 +155,15 @@ export declare class NileSelect extends NileElement implements NileFormControl {
151
155
  oldMaxOptionsVisible: number;
152
156
  showNoResults: boolean;
153
157
  noResultsMessage: string;
158
+ /** Enhanced configuration for rendering items with support for display text, value, and search text */
159
+ renderItemConfig?: RenderItemConfig;
160
+ data: any;
161
+ enableVirtualScroll: boolean;
154
162
  /** Gets the validity state object */
155
163
  get validity(): ValidityState;
156
164
  /** Gets the validation message */
157
165
  get validationMessage(): string;
166
+ constructor();
158
167
  connectedCallback(): void;
159
168
  disconnectedCallback(): void;
160
169
  protected updated(_changedProperties: PropertyValues): void;
@@ -222,7 +231,7 @@ export declare class NileSelect extends NileElement implements NileFormControl {
222
231
  onInputChange(event: Event): void;
223
232
  calculateWidthOfSelectTagsDiv(): number | undefined;
224
233
  calculateTotalWidthOfTags(): void;
225
- render(): import("lit-html").TemplateResult<1>;
234
+ render(): any;
226
235
  nileInput(value: any): void;
227
236
  nileChange(value: any): void;
228
237
  }
@@ -24,6 +24,8 @@ import { watch } from '../internal/watch';
24
24
  import NileElement from '../internal/nile-element';
25
25
  import { unsafeHTML } from 'lit/directives/unsafe-html.js';
26
26
  import { ifDefined } from 'lit/directives/if-defined.js';
27
+ import '../nile-virtual-select/nile-virtual-select';
28
+ import { VirtualScrollHelper } from './virtual-scroll-helper';
27
29
  /**
28
30
  * Nile icon component.
29
31
  *
@@ -38,6 +40,7 @@ import { ifDefined } from 'lit/directives/if-defined.js';
38
40
  * @dependency nile-icon
39
41
  * @dependency nile-popup
40
42
  * @dependency nile-tag
43
+ * @dependency nile-virtual-select
41
44
  *
42
45
  * @slot - The listbox options. Must be `<nile-option>` elements. You can use `<nile-divider>` to group items visually.
43
46
  * @slot label - The input's label. Alternatively, you can use the `label` attribute.
@@ -75,12 +78,16 @@ import { ifDefined } from 'lit/directives/if-defined.js';
75
78
  * @csspart expand-icon - The container that wraps the expand icon.
76
79
  */
77
80
  let NileSelect = class NileSelect extends NileElement {
81
+ /** Gets the validity state object */
82
+ get validity() {
83
+ return this.valueInput?.validity;
84
+ }
85
+ /** Gets the validation message */
86
+ get validationMessage() {
87
+ return this.valueInput?.validationMessage;
88
+ }
78
89
  constructor() {
79
- super(...arguments);
80
- // protected override BUBBLES=false;
81
- this.formControlController = new FormControlController(this, {
82
- assumeInteractionOn: ['nile-blur', 'nile-input'],
83
- });
90
+ super();
84
91
  this.hasSlotController = new HasSlotController(this, 'help-text', 'label');
85
92
  this.typeToSelectString = '';
86
93
  this.hasFocus = false;
@@ -160,17 +167,17 @@ let NileSelect = class NileSelect extends NileElement {
160
167
  this.oldMaxOptionsVisible = 1;
161
168
  this.showNoResults = false;
162
169
  this.noResultsMessage = 'No results found';
163
- }
164
- /** Gets the validity state object */
165
- get validity() {
166
- return this.valueInput?.validity;
167
- }
168
- /** Gets the validation message */
169
- get validationMessage() {
170
- return this.valueInput?.validationMessage;
170
+ this.data = [];
171
+ this.enableVirtualScroll = false;
171
172
  }
172
173
  connectedCallback() {
173
174
  super.connectedCallback();
175
+ if (!this.enableVirtualScroll) {
176
+ this.formControlController = new FormControlController(this, {
177
+ assumeInteractionOn: ['nile-blur', 'nile-input'],
178
+ });
179
+ }
180
+ this.virtualScrollHelper = new VirtualScrollHelper(this);
174
181
  this.handleDocumentFocusIn = this.handleDocumentFocusIn.bind(this);
175
182
  this.handleDocumentKeyDown = this.handleDocumentKeyDown.bind(this);
176
183
  this.handleDocumentMouseDown = this.handleDocumentMouseDown.bind(this);
@@ -587,7 +594,7 @@ let NileSelect = class NileSelect extends NileElement {
587
594
  }
588
595
  // Update validity
589
596
  this.updateComplete.then(() => {
590
- this.formControlController.updateValidity();
597
+ this.formControlController?.updateValidity();
591
598
  });
592
599
  this.calculateTotalWidthOfTags();
593
600
  }
@@ -629,8 +636,8 @@ let NileSelect = class NileSelect extends NileElement {
629
636
  return filteredOptions;
630
637
  }
631
638
  handleInvalid(event) {
632
- this.formControlController.setValidity(false);
633
- this.formControlController.emitInvalidEvent(event);
639
+ this.formControlController?.setValidity(false);
640
+ this.formControlController?.emitInvalidEvent(event);
634
641
  }
635
642
  handleDisabledChange() {
636
643
  // Close the listbox when the control is disabled
@@ -712,7 +719,7 @@ let NileSelect = class NileSelect extends NileElement {
712
719
  }
713
720
  /** Gets the associated form, if one exists. */
714
721
  getForm() {
715
- return this.formControlController.getForm();
722
+ return this.formControlController?.getForm() || null;
716
723
  }
717
724
  /** Checks for validity and shows the browser's validation message if the control is invalid. */
718
725
  reportValidity() {
@@ -721,7 +728,7 @@ let NileSelect = class NileSelect extends NileElement {
721
728
  /** Sets a custom validation message. Pass an empty string to restore validity. */
722
729
  setCustomValidity(message) {
723
730
  this.valueInput.setCustomValidity(message);
724
- this.formControlController.updateValidity();
731
+ this.formControlController?.updateValidity();
725
732
  }
726
733
  /** Sets focus on the control. */
727
734
  focus(options) {
@@ -780,6 +787,9 @@ let NileSelect = class NileSelect extends NileElement {
780
787
  }, 1);
781
788
  }
782
789
  render() {
790
+ if (this.enableVirtualScroll) {
791
+ return this.virtualScrollHelper.renderVirtualizedContent();
792
+ }
783
793
  const hasLabelSlot = this.hasSlotController.test('label');
784
794
  const hasHelpTextSlot = this.hasSlotController.test('help-text');
785
795
  const hasLabelSuffixSlot = this.hasSlotController.test('label-suffix');
@@ -1239,6 +1249,15 @@ __decorate([
1239
1249
  __decorate([
1240
1250
  property({ type: String })
1241
1251
  ], NileSelect.prototype, "noResultsMessage", void 0);
1252
+ __decorate([
1253
+ property({ attribute: false })
1254
+ ], NileSelect.prototype, "renderItemConfig", void 0);
1255
+ __decorate([
1256
+ property({ type: Array })
1257
+ ], NileSelect.prototype, "data", void 0);
1258
+ __decorate([
1259
+ property({ type: Boolean })
1260
+ ], NileSelect.prototype, "enableVirtualScroll", void 0);
1242
1261
  __decorate([
1243
1262
  watch('disabled', { waitUntilFirstUpdate: true })
1244
1263
  ], NileSelect.prototype, "handleDisabledChange", null);