@aquera/nile-elements 0.1.46-beta-2.3 → 0.1.46-beta-2.5

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 (494) hide show
  1. package/README.md +3 -3
  2. package/demo/index.html +19 -103
  3. package/dist/{fixture-372df3b0.esm.js → fixture-2b5b3aba.esm.js} +1 -1
  4. package/dist/{fixture-161dee0b.cjs.js → fixture-7bfb866e.cjs.js} +2 -2
  5. package/dist/{fixture-161dee0b.cjs.js.map → fixture-7bfb866e.cjs.js.map} +1 -1
  6. package/dist/index.cjs.js +1 -1
  7. package/dist/index.esm.js +1 -1
  8. package/dist/nile-accordion/nile-accordian.test.cjs.js +1 -1
  9. package/dist/nile-accordion/nile-accordian.test.esm.js +1 -1
  10. package/dist/nile-auto-complete/index.cjs.js +1 -1
  11. package/dist/nile-auto-complete/index.esm.js +1 -1
  12. package/dist/nile-auto-complete/nile-auto-complete.cjs.js +17 -1
  13. package/dist/nile-auto-complete/nile-auto-complete.cjs.js.map +1 -1
  14. package/dist/nile-auto-complete/nile-auto-complete.esm.js +29 -8
  15. package/dist/nile-auto-complete/nile-auto-complete.test.cjs.js +1 -1
  16. package/dist/nile-auto-complete/nile-auto-complete.test.cjs.js.map +1 -1
  17. package/dist/nile-auto-complete/nile-auto-complete.test.esm.js +1 -1
  18. package/dist/nile-avatar/nile-avatar.test.cjs.js +1 -1
  19. package/dist/nile-avatar/nile-avatar.test.esm.js +1 -1
  20. package/dist/nile-badge/nile-badge.test.cjs.js +1 -1
  21. package/dist/nile-badge/nile-badge.test.esm.js +1 -1
  22. package/dist/nile-button/nile-button.test.cjs.js +1 -1
  23. package/dist/nile-button/nile-button.test.esm.js +1 -1
  24. package/dist/nile-button-toggle-group/nile-button-toggle-group.test.cjs.js +1 -1
  25. package/dist/nile-button-toggle-group/nile-button-toggle-group.test.esm.js +1 -1
  26. package/dist/nile-calendar/nile-calendar.test.cjs.js +1 -1
  27. package/dist/nile-calendar/nile-calendar.test.cjs.js.map +1 -1
  28. package/dist/nile-calendar/nile-calendar.test.esm.js +1 -1
  29. package/dist/nile-card/nile-card.test.cjs.js +1 -1
  30. package/dist/nile-card/nile-card.test.esm.js +1 -1
  31. package/dist/nile-checkbox/nile-checkbox.test.cjs.js +1 -1
  32. package/dist/nile-checkbox/nile-checkbox.test.esm.js +1 -1
  33. package/dist/nile-chip/nile-chip.test.cjs.js +1 -1
  34. package/dist/nile-chip/nile-chip.test.cjs.js.map +1 -1
  35. package/dist/nile-chip/nile-chip.test.esm.js +1 -1
  36. package/dist/nile-dialog/nile-dialog.test.cjs.js +1 -1
  37. package/dist/nile-dialog/nile-dialog.test.esm.js +1 -1
  38. package/dist/nile-drawer/nile-drawer.test.cjs.js +1 -1
  39. package/dist/nile-drawer/nile-drawer.test.esm.js +1 -1
  40. package/dist/nile-dropdown/nile-dropdown.test.cjs.js +1 -1
  41. package/dist/nile-dropdown/nile-dropdown.test.esm.js +1 -1
  42. package/dist/nile-empty-state/nile-empty-state.test.cjs.js +1 -1
  43. package/dist/nile-empty-state/nile-empty-state.test.esm.js +1 -1
  44. package/dist/nile-error-message/nile-error-message.test.cjs.js +1 -1
  45. package/dist/nile-error-message/nile-error-message.test.esm.js +1 -1
  46. package/dist/nile-filter-chip/nile-filter-chip.test.cjs.js +1 -1
  47. package/dist/nile-filter-chip/nile-filter-chip.test.esm.js +1 -1
  48. package/dist/nile-form-group/nile-form-group.test.cjs.js +1 -1
  49. package/dist/nile-form-group/nile-form-group.test.esm.js +1 -1
  50. package/dist/nile-form-help-text/nile-form-help-text.test.cjs.js +1 -1
  51. package/dist/nile-form-help-text/nile-form-help-text.test.esm.js +1 -1
  52. package/dist/nile-hero/nile-hero.test.cjs.js +1 -1
  53. package/dist/nile-hero/nile-hero.test.esm.js +1 -1
  54. package/dist/nile-icon/nile-icon.test.cjs.js +1 -1
  55. package/dist/nile-icon/nile-icon.test.esm.js +1 -1
  56. package/dist/nile-input/nile-input.test.cjs.js +1 -1
  57. package/dist/nile-input/nile-input.test.esm.js +1 -1
  58. package/dist/nile-link/nile-link.test.cjs.js +1 -1
  59. package/dist/nile-link/nile-link.test.esm.js +1 -1
  60. package/dist/nile-loader/nile-loader.test.cjs.js +1 -1
  61. package/dist/nile-loader/nile-loader.test.esm.js +1 -1
  62. package/dist/nile-option/nile-option.cjs.js +1 -1
  63. package/dist/nile-option/nile-option.cjs.js.map +1 -1
  64. package/dist/nile-option/nile-option.css.cjs.js +1 -1
  65. package/dist/nile-option/nile-option.css.cjs.js.map +1 -1
  66. package/dist/nile-option/nile-option.css.esm.js +1 -1
  67. package/dist/nile-option/nile-option.esm.js +2 -2
  68. package/dist/nile-popover/nile-popover.test.cjs.js +1 -1
  69. package/dist/nile-popover/nile-popover.test.esm.js +1 -1
  70. package/dist/nile-popup/nile-popup.test.cjs.js +1 -1
  71. package/dist/nile-popup/nile-popup.test.esm.js +1 -1
  72. package/dist/nile-progress-bar/nile-progress-bar.test.cjs.js +1 -1
  73. package/dist/nile-progress-bar/nile-progress-bar.test.esm.js +1 -1
  74. package/dist/nile-radio/nile-radio.test.cjs.js +1 -1
  75. package/dist/nile-radio/nile-radio.test.esm.js +1 -1
  76. package/dist/nile-radio-group/nile-radio-group.test.cjs.js +1 -1
  77. package/dist/nile-radio-group/nile-radio-group.test.esm.js +1 -1
  78. package/dist/nile-select/index.cjs.js +1 -1
  79. package/dist/nile-select/index.esm.js +1 -1
  80. package/dist/nile-select/nile-select.cjs.js +1 -1
  81. package/dist/nile-select/nile-select.cjs.js.map +1 -1
  82. package/dist/nile-select/nile-select.esm.js +9 -9
  83. package/dist/nile-select/nile-select.test.cjs.js +1 -1
  84. package/dist/nile-select/nile-select.test.cjs.js.map +1 -1
  85. package/dist/nile-select/nile-select.test.esm.js +2 -2
  86. package/dist/nile-slide-toggle/nile-slide-toggle.test.cjs.js +1 -1
  87. package/dist/nile-slide-toggle/nile-slide-toggle.test.esm.js +1 -1
  88. package/dist/nile-slider/index.cjs.js +2 -0
  89. package/dist/nile-slider/index.esm.js +1 -0
  90. package/dist/nile-slider/nile-slider.cjs.js +2 -0
  91. package/dist/nile-slider/nile-slider.cjs.js.map +1 -0
  92. package/dist/nile-slider/nile-slider.css.cjs.js +2 -0
  93. package/dist/nile-slider/nile-slider.css.cjs.js.map +1 -0
  94. package/dist/nile-slider/nile-slider.css.esm.js +98 -0
  95. package/dist/nile-slider/nile-slider.esm.js +13 -0
  96. package/dist/nile-slider/nile-slider.template.cjs.js +2 -0
  97. package/dist/nile-slider/nile-slider.template.cjs.js.map +1 -0
  98. package/dist/nile-slider/nile-slider.template.esm.js +34 -0
  99. package/dist/{nile-virtual-select/types.cjs.js → nile-slider/types/nile-slider.enums.cjs.js} +1 -1
  100. package/dist/nile-slider/types/nile-slider.enums.cjs.js.map +1 -0
  101. package/dist/nile-slider/types/nile-slider.types.cjs.js +2 -0
  102. package/dist/nile-slider/types/nile-slider.types.cjs.js.map +1 -0
  103. package/dist/nile-slider/types/nile-slider.types.esm.js +1 -0
  104. package/dist/nile-slider/utils/nile-slider.utils.cjs.js +2 -0
  105. package/dist/nile-slider/utils/nile-slider.utils.cjs.js.map +1 -0
  106. package/dist/nile-slider/utils/nile-slider.utils.esm.js +1 -0
  107. package/dist/nile-tab-group/nile-tab-group.test.cjs.js +1 -1
  108. package/dist/nile-tab-group/nile-tab-group.test.esm.js +1 -1
  109. package/dist/nile-textarea/nile-textarea.test.cjs.js +1 -1
  110. package/dist/nile-textarea/nile-textarea.test.esm.js +1 -1
  111. package/dist/src/index.d.ts +1 -1
  112. package/dist/src/index.js +1 -1
  113. package/dist/src/index.js.map +1 -1
  114. package/dist/src/nile-file-preview/index.d.ts +1 -0
  115. package/dist/src/nile-file-preview/index.js +2 -0
  116. package/dist/src/nile-file-preview/index.js.map +1 -0
  117. package/dist/src/nile-file-preview/nile-file-preview.css.d.ts +12 -0
  118. package/dist/src/nile-file-preview/nile-file-preview.css.js +568 -0
  119. package/dist/src/nile-file-preview/nile-file-preview.css.js.map +1 -0
  120. package/dist/src/nile-file-preview/nile-file-preview.d.ts +50 -0
  121. package/dist/src/nile-file-preview/nile-file-preview.js +171 -0
  122. package/dist/src/nile-file-preview/nile-file-preview.js.map +1 -0
  123. package/dist/src/nile-file-preview/nile-file-preview.template.d.ts +13 -0
  124. package/dist/src/nile-file-preview/nile-file-preview.template.js +210 -0
  125. package/dist/src/nile-file-preview/nile-file-preview.template.js.map +1 -0
  126. package/dist/src/{nile-virtual-select/types.js → nile-file-preview/nile-file-preview.test.d.ts} +2 -3
  127. package/dist/src/nile-file-preview/nile-file-preview.test.js +30 -0
  128. package/dist/src/nile-file-preview/nile-file-preview.test.js.map +1 -0
  129. package/dist/src/nile-file-preview/types/index.d.ts +2 -0
  130. package/dist/src/nile-file-preview/types/index.js +3 -0
  131. package/dist/src/nile-file-preview/types/index.js.map +1 -0
  132. package/dist/src/nile-file-preview/types/nile-file-preview.enums.d.ts +28 -0
  133. package/dist/src/nile-file-preview/types/nile-file-preview.enums.js +33 -0
  134. package/dist/src/nile-file-preview/types/nile-file-preview.enums.js.map +1 -0
  135. package/dist/src/nile-file-preview/types/nile-file-preview.interface.d.ts +4 -0
  136. package/dist/src/nile-file-preview/types/nile-file-preview.interface.js +2 -0
  137. package/dist/src/nile-file-preview/types/nile-file-preview.interface.js.map +1 -0
  138. package/dist/src/nile-file-preview/utils/index.d.ts +1 -0
  139. package/dist/src/nile-file-preview/utils/index.js +2 -0
  140. package/dist/src/nile-file-preview/utils/index.js.map +1 -0
  141. package/dist/src/nile-file-preview/utils/nile-file-preview.util.d.ts +4 -0
  142. package/dist/src/nile-file-preview/utils/nile-file-preview.util.js +38 -0
  143. package/dist/src/nile-file-preview/utils/nile-file-preview.util.js.map +1 -0
  144. package/dist/src/nile-file-upload/index.d.ts +1 -0
  145. package/dist/src/nile-file-upload/index.js +2 -0
  146. package/dist/src/nile-file-upload/index.js.map +1 -0
  147. package/dist/src/nile-file-upload/nile-file-upload.css.d.ts +12 -0
  148. package/dist/src/nile-file-upload/nile-file-upload.css.js +569 -0
  149. package/dist/src/nile-file-upload/nile-file-upload.css.js.map +1 -0
  150. package/dist/src/nile-file-upload/nile-file-upload.d.ts +48 -0
  151. package/dist/src/nile-file-upload/nile-file-upload.js +165 -0
  152. package/dist/src/nile-file-upload/nile-file-upload.js.map +1 -0
  153. package/dist/src/nile-file-upload/nile-file-upload.template.d.ts +11 -0
  154. package/dist/src/nile-file-upload/nile-file-upload.template.js +171 -0
  155. package/dist/src/nile-file-upload/nile-file-upload.template.js.map +1 -0
  156. package/dist/src/{nile-virtual-select/nile-virtual-select.test.d.ts → nile-file-upload/nile-file-upload.test.d.ts} +2 -2
  157. package/dist/src/nile-file-upload/nile-file-upload.test.js +30 -0
  158. package/dist/src/nile-file-upload/nile-file-upload.test.js.map +1 -0
  159. package/dist/src/nile-file-upload/types/file-upload.enums.d.ts +35 -0
  160. package/dist/src/nile-file-upload/types/file-upload.enums.js +42 -0
  161. package/dist/src/nile-file-upload/types/file-upload.enums.js.map +1 -0
  162. package/dist/src/nile-file-upload/types/file-upload.type.d.ts +4 -0
  163. package/dist/src/nile-file-upload/types/file-upload.type.js +2 -0
  164. package/dist/src/nile-file-upload/types/file-upload.type.js.map +1 -0
  165. package/dist/src/nile-file-upload/types/index.d.ts +2 -0
  166. package/dist/src/nile-file-upload/types/index.js +3 -0
  167. package/dist/src/nile-file-upload/types/index.js.map +1 -0
  168. package/dist/src/nile-file-upload/utils/drag-drop.util.d.ts +23 -0
  169. package/dist/src/nile-file-upload/utils/drag-drop.util.js +85 -0
  170. package/dist/src/nile-file-upload/utils/drag-drop.util.js.map +1 -0
  171. package/dist/src/nile-file-upload/utils/file-validation.util.d.ts +11 -0
  172. package/dist/src/nile-file-upload/utils/file-validation.util.js +120 -0
  173. package/dist/src/nile-file-upload/utils/file-validation.util.js.map +1 -0
  174. package/dist/src/nile-icon/icons/svg/ng-activity.d.ts +5 -0
  175. package/dist/src/nile-icon/icons/svg/ng-activity.js +5 -0
  176. package/dist/src/nile-icon/icons/svg/ng-activity.js.map +1 -0
  177. package/dist/src/nile-icon/icons/svg/ng-align-center.d.ts +5 -0
  178. package/dist/src/nile-icon/icons/svg/ng-align-center.js +5 -0
  179. package/dist/src/nile-icon/icons/svg/ng-align-center.js.map +1 -0
  180. package/dist/src/nile-icon/icons/svg/ng-annotation-x.d.ts +5 -0
  181. package/dist/src/nile-icon/icons/svg/ng-annotation-x.js +5 -0
  182. package/dist/src/nile-icon/icons/svg/ng-annotation-x.js.map +1 -0
  183. package/dist/src/nile-icon/icons/svg/ng-arrow-down.d.ts +5 -0
  184. package/dist/src/nile-icon/icons/svg/ng-arrow-down.js +5 -0
  185. package/dist/src/nile-icon/icons/svg/ng-arrow-down.js.map +1 -0
  186. package/dist/src/nile-icon/icons/svg/ng-arrow-narrow-down.d.ts +5 -0
  187. package/dist/src/nile-icon/icons/svg/ng-arrow-narrow-down.js +5 -0
  188. package/dist/src/nile-icon/icons/svg/ng-arrow-narrow-down.js.map +1 -0
  189. package/dist/src/nile-icon/icons/svg/ng-arrow-narrow-left.d.ts +5 -0
  190. package/dist/src/nile-icon/icons/svg/ng-arrow-narrow-left.js +5 -0
  191. package/dist/src/nile-icon/icons/svg/ng-arrow-narrow-left.js.map +1 -0
  192. package/dist/src/nile-icon/icons/svg/ng-arrow-up.d.ts +5 -0
  193. package/dist/src/nile-icon/icons/svg/ng-arrow-up.js +5 -0
  194. package/dist/src/nile-icon/icons/svg/ng-arrow-up.js.map +1 -0
  195. package/dist/src/nile-icon/icons/svg/ng-bar-chart-12.d.ts +5 -0
  196. package/dist/src/nile-icon/icons/svg/ng-bar-chart-12.js +5 -0
  197. package/dist/src/nile-icon/icons/svg/ng-bar-chart-12.js.map +1 -0
  198. package/dist/src/nile-icon/icons/svg/ng-bell-01.d.ts +5 -0
  199. package/dist/src/nile-icon/icons/svg/ng-bell-01.js +5 -0
  200. package/dist/src/nile-icon/icons/svg/ng-bell-01.js.map +1 -0
  201. package/dist/src/nile-icon/icons/svg/ng-bell-ringing-04.d.ts +5 -0
  202. package/dist/src/nile-icon/icons/svg/ng-bell-ringing-04.js +5 -0
  203. package/dist/src/nile-icon/icons/svg/ng-bell-ringing-04.js.map +1 -0
  204. package/dist/src/nile-icon/icons/svg/ng-bold-01.d.ts +5 -0
  205. package/dist/src/nile-icon/icons/svg/ng-bold-01.js +5 -0
  206. package/dist/src/nile-icon/icons/svg/ng-bold-01.js.map +1 -0
  207. package/dist/src/nile-icon/icons/svg/ng-calendar-plus-02.d.ts +5 -0
  208. package/dist/src/nile-icon/icons/svg/ng-calendar-plus-02.js +5 -0
  209. package/dist/src/nile-icon/icons/svg/ng-calendar-plus-02.js.map +1 -0
  210. package/dist/src/nile-icon/icons/svg/ng-calendar.d.ts +5 -0
  211. package/dist/src/nile-icon/icons/svg/ng-calendar.js +5 -0
  212. package/dist/src/nile-icon/icons/svg/ng-calendar.js.map +1 -0
  213. package/dist/src/nile-icon/icons/svg/ng-check-circle.d.ts +5 -0
  214. package/dist/src/nile-icon/icons/svg/ng-check-circle.js +5 -0
  215. package/dist/src/nile-icon/icons/svg/ng-check-circle.js.map +1 -0
  216. package/dist/src/nile-icon/icons/svg/ng-check-square-broken.d.ts +5 -0
  217. package/dist/src/nile-icon/icons/svg/ng-check-square-broken.js +5 -0
  218. package/dist/src/nile-icon/icons/svg/ng-check-square-broken.js.map +1 -0
  219. package/dist/src/nile-icon/icons/svg/ng-chevron-down.d.ts +5 -0
  220. package/dist/src/nile-icon/icons/svg/ng-chevron-down.js +5 -0
  221. package/dist/src/nile-icon/icons/svg/ng-chevron-down.js.map +1 -0
  222. package/dist/src/nile-icon/icons/svg/ng-chevron-left.d.ts +5 -0
  223. package/dist/src/nile-icon/icons/svg/ng-chevron-left.js +5 -0
  224. package/dist/src/nile-icon/icons/svg/ng-chevron-left.js.map +1 -0
  225. package/dist/src/nile-icon/icons/svg/ng-chevron-right.d.ts +5 -0
  226. package/dist/src/nile-icon/icons/svg/ng-chevron-right.js +5 -0
  227. package/dist/src/nile-icon/icons/svg/ng-chevron-right.js.map +1 -0
  228. package/dist/src/nile-icon/icons/svg/ng-chevron-selector-vertical.d.ts +5 -0
  229. package/dist/src/nile-icon/icons/svg/ng-chevron-selector-vertical.js +5 -0
  230. package/dist/src/nile-icon/icons/svg/ng-chevron-selector-vertical.js.map +1 -0
  231. package/dist/src/nile-icon/icons/svg/ng-chevron-up-double.d.ts +5 -0
  232. package/dist/src/nile-icon/icons/svg/ng-chevron-up-double.js +5 -0
  233. package/dist/src/nile-icon/icons/svg/ng-chevron-up-double.js.map +1 -0
  234. package/dist/src/nile-icon/icons/svg/ng-chevron-up.d.ts +5 -0
  235. package/dist/src/nile-icon/icons/svg/ng-chevron-up.js +5 -0
  236. package/dist/src/nile-icon/icons/svg/ng-chevron-up.js.map +1 -0
  237. package/dist/src/nile-icon/icons/svg/ng-copy-03.d.ts +5 -0
  238. package/dist/src/nile-icon/icons/svg/ng-copy-03.js +5 -0
  239. package/dist/src/nile-icon/icons/svg/ng-copy-03.js.map +1 -0
  240. package/dist/src/nile-icon/icons/svg/ng-dots-grid.d.ts +5 -0
  241. package/dist/src/nile-icon/icons/svg/ng-dots-grid.js +5 -0
  242. package/dist/src/nile-icon/icons/svg/ng-dots-grid.js.map +1 -0
  243. package/dist/src/nile-icon/icons/svg/ng-dots-vertical.d.ts +5 -0
  244. package/dist/src/nile-icon/icons/svg/ng-dots-vertical.js +5 -0
  245. package/dist/src/nile-icon/icons/svg/ng-dots-vertical.js.map +1 -0
  246. package/dist/src/nile-icon/icons/svg/ng-download-01.d.ts +5 -0
  247. package/dist/src/nile-icon/icons/svg/ng-download-01.js +5 -0
  248. package/dist/src/nile-icon/icons/svg/ng-download-01.js.map +1 -0
  249. package/dist/src/nile-icon/icons/svg/ng-dropdown.d.ts +5 -0
  250. package/dist/src/nile-icon/icons/svg/ng-dropdown.js +5 -0
  251. package/dist/src/nile-icon/icons/svg/ng-dropdown.js.map +1 -0
  252. package/dist/src/nile-icon/icons/svg/ng-edit-02.d.ts +5 -0
  253. package/dist/src/nile-icon/icons/svg/ng-edit-02.js +5 -0
  254. package/dist/src/nile-icon/icons/svg/ng-edit-02.js.map +1 -0
  255. package/dist/src/nile-icon/icons/svg/ng-edit-05.d.ts +5 -0
  256. package/dist/src/nile-icon/icons/svg/ng-edit-05.js +5 -0
  257. package/dist/src/nile-icon/icons/svg/ng-edit-05.js.map +1 -0
  258. package/dist/src/nile-icon/icons/svg/ng-expand-06.d.ts +5 -0
  259. package/dist/src/nile-icon/icons/svg/ng-expand-06.js +5 -0
  260. package/dist/src/nile-icon/icons/svg/ng-expand-06.js.map +1 -0
  261. package/dist/src/nile-icon/icons/svg/ng-file-02.d.ts +5 -0
  262. package/dist/src/nile-icon/icons/svg/ng-file-02.js +5 -0
  263. package/dist/src/nile-icon/icons/svg/ng-file-02.js.map +1 -0
  264. package/dist/src/nile-icon/icons/svg/ng-file-check-02.d.ts +5 -0
  265. package/dist/src/nile-icon/icons/svg/ng-file-check-02.js +5 -0
  266. package/dist/src/nile-icon/icons/svg/ng-file-check-02.js.map +1 -0
  267. package/dist/src/nile-icon/icons/svg/ng-file-question-03.d.ts +5 -0
  268. package/dist/src/nile-icon/icons/svg/ng-file-question-03.js +5 -0
  269. package/dist/src/nile-icon/icons/svg/ng-file-question-03.js.map +1 -0
  270. package/dist/src/nile-icon/icons/svg/ng-filter-lines.d.ts +5 -0
  271. package/dist/src/nile-icon/icons/svg/ng-filter-lines.js +5 -0
  272. package/dist/src/nile-icon/icons/svg/ng-filter-lines.js.map +1 -0
  273. package/dist/src/nile-icon/icons/svg/ng-grid-01.d.ts +5 -0
  274. package/dist/src/nile-icon/icons/svg/ng-grid-01.js +5 -0
  275. package/dist/src/nile-icon/icons/svg/ng-grid-01.js.map +1 -0
  276. package/dist/src/nile-icon/icons/svg/ng-help-circle.d.ts +5 -0
  277. package/dist/src/nile-icon/icons/svg/ng-help-circle.js +5 -0
  278. package/dist/src/nile-icon/icons/svg/ng-help-circle.js.map +1 -0
  279. package/dist/src/nile-icon/icons/svg/ng-image-user-left.d.ts +5 -0
  280. package/dist/src/nile-icon/icons/svg/ng-image-user-left.js +5 -0
  281. package/dist/src/nile-icon/icons/svg/ng-image-user-left.js.map +1 -0
  282. package/dist/src/nile-icon/icons/svg/ng-info-circle.d.ts +5 -0
  283. package/dist/src/nile-icon/icons/svg/ng-info-circle.js +5 -0
  284. package/dist/src/nile-icon/icons/svg/ng-info-circle.js.map +1 -0
  285. package/dist/src/nile-icon/icons/svg/ng-italic-01.d.ts +5 -0
  286. package/dist/src/nile-icon/icons/svg/ng-italic-01.js +5 -0
  287. package/dist/src/nile-icon/icons/svg/ng-italic-01.js.map +1 -0
  288. package/dist/src/nile-icon/icons/svg/ng-list.d.ts +5 -0
  289. package/dist/src/nile-icon/icons/svg/ng-list.js +5 -0
  290. package/dist/src/nile-icon/icons/svg/ng-list.js.map +1 -0
  291. package/dist/src/nile-icon/icons/svg/ng-log-out-01.d.ts +5 -0
  292. package/dist/src/nile-icon/icons/svg/ng-log-out-01.js +5 -0
  293. package/dist/src/nile-icon/icons/svg/ng-log-out-01.js.map +1 -0
  294. package/dist/src/nile-icon/icons/svg/ng-mail-01.d.ts +5 -0
  295. package/dist/src/nile-icon/icons/svg/ng-mail-01.js +5 -0
  296. package/dist/src/nile-icon/icons/svg/ng-mail-01.js.map +1 -0
  297. package/dist/src/nile-icon/icons/svg/ng-mail-04.d.ts +5 -0
  298. package/dist/src/nile-icon/icons/svg/ng-mail-04.js +5 -0
  299. package/dist/src/nile-icon/icons/svg/ng-mail-04.js.map +1 -0
  300. package/dist/src/nile-icon/icons/svg/ng-menu-05.d.ts +5 -0
  301. package/dist/src/nile-icon/icons/svg/ng-menu-05.js +5 -0
  302. package/dist/src/nile-icon/icons/svg/ng-menu-05.js.map +1 -0
  303. package/dist/src/nile-icon/icons/svg/ng-message-text-square-01.d.ts +5 -0
  304. package/dist/src/nile-icon/icons/svg/ng-message-text-square-01.js +5 -0
  305. package/dist/src/nile-icon/icons/svg/ng-message-text-square-01.js.map +1 -0
  306. package/dist/src/nile-icon/icons/svg/ng-minimize-02.d.ts +5 -0
  307. package/dist/src/nile-icon/icons/svg/ng-minimize-02.js +5 -0
  308. package/dist/src/nile-icon/icons/svg/ng-minimize-02.js.map +1 -0
  309. package/dist/src/nile-icon/icons/svg/ng-plus.d.ts +5 -0
  310. package/dist/src/nile-icon/icons/svg/ng-plus.js +5 -0
  311. package/dist/src/nile-icon/icons/svg/ng-plus.js.map +1 -0
  312. package/dist/src/nile-icon/icons/svg/ng-refresh-cw-02.d.ts +5 -0
  313. package/dist/src/nile-icon/icons/svg/ng-refresh-cw-02.js +5 -0
  314. package/dist/src/nile-icon/icons/svg/ng-refresh-cw-02.js.map +1 -0
  315. package/dist/src/nile-icon/icons/svg/ng-rocket-02.d.ts +5 -0
  316. package/dist/src/nile-icon/icons/svg/ng-rocket-02.js +5 -0
  317. package/dist/src/nile-icon/icons/svg/ng-rocket-02.js.map +1 -0
  318. package/dist/src/nile-icon/icons/svg/ng-search-lg.d.ts +5 -0
  319. package/dist/src/nile-icon/icons/svg/ng-search-lg.js +5 -0
  320. package/dist/src/nile-icon/icons/svg/ng-search-lg.js.map +1 -0
  321. package/dist/src/nile-icon/icons/svg/ng-send-01.d.ts +5 -0
  322. package/dist/src/nile-icon/icons/svg/ng-send-01.js +5 -0
  323. package/dist/src/nile-icon/icons/svg/ng-send-01.js.map +1 -0
  324. package/dist/src/nile-icon/icons/svg/ng-settings-01.d.ts +5 -0
  325. package/dist/src/nile-icon/icons/svg/ng-settings-01.js +5 -0
  326. package/dist/src/nile-icon/icons/svg/ng-settings-01.js.map +1 -0
  327. package/dist/src/nile-icon/icons/svg/ng-share-04.d.ts +5 -0
  328. package/dist/src/nile-icon/icons/svg/ng-share-04.js +5 -0
  329. package/dist/src/nile-icon/icons/svg/ng-share-04.js.map +1 -0
  330. package/dist/src/nile-icon/icons/svg/ng-share-06.d.ts +5 -0
  331. package/dist/src/nile-icon/icons/svg/ng-share-06.js +5 -0
  332. package/dist/src/nile-icon/icons/svg/ng-share-06.js.map +1 -0
  333. package/dist/src/nile-icon/icons/svg/ng-stars-02.d.ts +5 -0
  334. package/dist/src/nile-icon/icons/svg/ng-stars-02.js +5 -0
  335. package/dist/src/nile-icon/icons/svg/ng-stars-02.js.map +1 -0
  336. package/dist/src/nile-icon/icons/svg/ng-trash-01.d.ts +5 -0
  337. package/dist/src/nile-icon/icons/svg/ng-trash-01.js +5 -0
  338. package/dist/src/nile-icon/icons/svg/ng-trash-01.js.map +1 -0
  339. package/dist/src/nile-icon/icons/svg/ng-trash-03.d.ts +5 -0
  340. package/dist/src/nile-icon/icons/svg/ng-trash-03.js +5 -0
  341. package/dist/src/nile-icon/icons/svg/ng-trash-03.js.map +1 -0
  342. package/dist/src/nile-icon/icons/svg/ng-trend-up-01.d.ts +5 -0
  343. package/dist/src/nile-icon/icons/svg/ng-trend-up-01.js +5 -0
  344. package/dist/src/nile-icon/icons/svg/ng-trend-up-01.js.map +1 -0
  345. package/dist/src/nile-icon/icons/svg/ng-underline-01.d.ts +5 -0
  346. package/dist/src/nile-icon/icons/svg/ng-underline-01.js +5 -0
  347. package/dist/src/nile-icon/icons/svg/ng-underline-01.js.map +1 -0
  348. package/dist/src/nile-icon/icons/svg/ng-upload-01.d.ts +5 -0
  349. package/dist/src/nile-icon/icons/svg/ng-upload-01.js +5 -0
  350. package/dist/src/nile-icon/icons/svg/ng-upload-01.js.map +1 -0
  351. package/dist/src/nile-icon/icons/svg/ng-upload-cloud-02.d.ts +5 -0
  352. package/dist/src/nile-icon/icons/svg/ng-upload-cloud-02.js +5 -0
  353. package/dist/src/nile-icon/icons/svg/ng-upload-cloud-02.js.map +1 -0
  354. package/dist/src/nile-icon/icons/svg/ng-user-01.d.ts +5 -0
  355. package/dist/src/nile-icon/icons/svg/ng-user-01.js +5 -0
  356. package/dist/src/nile-icon/icons/svg/ng-user-01.js.map +1 -0
  357. package/dist/src/nile-icon/icons/svg/ng-user-check-02-1.d.ts +5 -0
  358. package/dist/src/nile-icon/icons/svg/ng-user-check-02-1.js +5 -0
  359. package/dist/src/nile-icon/icons/svg/ng-user-check-02-1.js.map +1 -0
  360. package/dist/src/nile-icon/icons/svg/ng-user-check-02.d.ts +5 -0
  361. package/dist/src/nile-icon/icons/svg/ng-user-check-02.js +5 -0
  362. package/dist/src/nile-icon/icons/svg/ng-user-check-02.js.map +1 -0
  363. package/dist/src/nile-icon/icons/svg/ng-user-plus-02.d.ts +5 -0
  364. package/dist/src/nile-icon/icons/svg/ng-user-plus-02.js +5 -0
  365. package/dist/src/nile-icon/icons/svg/ng-user-plus-02.js.map +1 -0
  366. package/dist/src/nile-icon/icons/svg/ng-user-right-01.d.ts +5 -0
  367. package/dist/src/nile-icon/icons/svg/ng-user-right-01.js +5 -0
  368. package/dist/src/nile-icon/icons/svg/ng-user-right-01.js.map +1 -0
  369. package/dist/src/nile-icon/icons/svg/ng-users-01.d.ts +5 -0
  370. package/dist/src/nile-icon/icons/svg/ng-users-01.js +5 -0
  371. package/dist/src/nile-icon/icons/svg/ng-users-01.js.map +1 -0
  372. package/dist/src/nile-icon/icons/svg/ng-x-close.d.ts +5 -0
  373. package/dist/src/nile-icon/icons/svg/ng-x-close.js +5 -0
  374. package/dist/src/nile-icon/icons/svg/ng-x-close.js.map +1 -0
  375. package/dist/src/nile-icon/icons/svg/ng-x-square.d.ts +5 -0
  376. package/dist/src/nile-icon/icons/svg/ng-x-square.js +5 -0
  377. package/dist/src/nile-icon/icons/svg/ng-x-square.js.map +1 -0
  378. package/dist/src/nile-option/nile-option.css.js +1 -1
  379. package/dist/src/nile-option/nile-option.css.js.map +1 -1
  380. package/dist/src/nile-option/nile-option.d.ts +1 -5
  381. package/dist/src/nile-option/nile-option.js +6 -21
  382. package/dist/src/nile-option/nile-option.js.map +1 -1
  383. package/dist/src/nile-select/nile-select.d.ts +4 -14
  384. package/dist/src/nile-select/nile-select.js +4 -118
  385. package/dist/src/nile-select/nile-select.js.map +1 -1
  386. package/dist/src/nile-slider/index.d.ts +1 -0
  387. package/dist/src/nile-slider/index.js +2 -0
  388. package/dist/src/nile-slider/index.js.map +1 -0
  389. package/dist/src/{nile-virtual-select/nile-virtual-select.css.d.ts → nile-slider/nile-slider.css.d.ts} +1 -1
  390. package/dist/src/nile-slider/nile-slider.css.js +110 -0
  391. package/dist/src/nile-slider/nile-slider.css.js.map +1 -0
  392. package/dist/src/nile-slider/nile-slider.d.ts +47 -0
  393. package/dist/src/nile-slider/nile-slider.js +181 -0
  394. package/dist/src/nile-slider/nile-slider.js.map +1 -0
  395. package/dist/src/nile-slider/nile-slider.template.d.ts +5 -0
  396. package/dist/src/nile-slider/nile-slider.template.js +44 -0
  397. package/dist/src/nile-slider/nile-slider.template.js.map +1 -0
  398. package/dist/src/nile-slider/types/nile-slider.enums.d.ts +10 -0
  399. package/dist/src/nile-slider/types/nile-slider.enums.js +2 -0
  400. package/dist/src/nile-slider/types/nile-slider.enums.js.map +1 -0
  401. package/dist/src/nile-slider/types/nile-slider.type.d.ts +0 -0
  402. package/dist/src/nile-slider/types/nile-slider.type.js +2 -0
  403. package/dist/src/nile-slider/types/nile-slider.type.js.map +1 -0
  404. package/dist/src/nile-slider/types/nile-slider.types.d.ts +1 -0
  405. package/dist/src/nile-slider/types/nile-slider.types.js +2 -0
  406. package/dist/src/nile-slider/types/nile-slider.types.js.map +1 -0
  407. package/dist/src/nile-slider/utils/nile-slider.utils.d.ts +11 -0
  408. package/dist/src/nile-slider/utils/nile-slider.utils.js +86 -0
  409. package/dist/src/nile-slider/utils/nile-slider.utils.js.map +1 -0
  410. package/dist/src/nile-virtualizer/index.d.ts +1 -0
  411. package/dist/src/nile-virtualizer/index.js +2 -0
  412. package/dist/src/nile-virtualizer/index.js.map +1 -0
  413. package/dist/src/nile-virtualizer/nile-virtualizer.css.d.ts +12 -0
  414. package/dist/src/nile-virtualizer/nile-virtualizer.css.js +17 -0
  415. package/dist/src/nile-virtualizer/nile-virtualizer.css.js.map +1 -0
  416. package/dist/src/nile-virtualizer/nile-virtualizer.d.ts +34 -0
  417. package/dist/src/nile-virtualizer/nile-virtualizer.js +66 -0
  418. package/dist/src/nile-virtualizer/nile-virtualizer.js.map +1 -0
  419. package/dist/tsconfig.tsbuildinfo +1 -1
  420. package/package.json +4 -4
  421. package/src/index.ts +1 -2
  422. package/src/nile-option/nile-option.css.ts +1 -1
  423. package/src/nile-option/nile-option.ts +3 -17
  424. package/src/nile-select/nile-select.ts +4 -133
  425. package/src/nile-slider/index.ts +1 -0
  426. package/src/nile-slider/nile-slider.css.ts +112 -0
  427. package/src/nile-slider/nile-slider.template.ts +47 -0
  428. package/src/nile-slider/nile-slider.ts +177 -0
  429. package/src/nile-slider/types/nile-slider.enums.ts +10 -0
  430. package/src/nile-slider/types/nile-slider.types.ts +13 -0
  431. package/src/nile-slider/utils/nile-slider.utils.ts +118 -0
  432. package/vscode-html-custom-data.json +136 -268
  433. package/dist/nile-select/virtual-scroll-helper.cjs.js +0 -2
  434. package/dist/nile-select/virtual-scroll-helper.cjs.js.map +0 -1
  435. package/dist/nile-select/virtual-scroll-helper.esm.js +0 -54
  436. package/dist/nile-virtual-select/index.cjs.js +0 -2
  437. package/dist/nile-virtual-select/index.esm.js +0 -1
  438. package/dist/nile-virtual-select/nile-virtual-select.cjs.js +0 -2
  439. package/dist/nile-virtual-select/nile-virtual-select.cjs.js.map +0 -1
  440. package/dist/nile-virtual-select/nile-virtual-select.css.cjs.js +0 -2
  441. package/dist/nile-virtual-select/nile-virtual-select.css.cjs.js.map +0 -1
  442. package/dist/nile-virtual-select/nile-virtual-select.css.esm.js +0 -468
  443. package/dist/nile-virtual-select/nile-virtual-select.esm.js +0 -202
  444. package/dist/nile-virtual-select/nile-virtual-select.test.cjs.js +0 -2
  445. package/dist/nile-virtual-select/nile-virtual-select.test.cjs.js.map +0 -1
  446. package/dist/nile-virtual-select/nile-virtual-select.test.esm.js +0 -49
  447. package/dist/nile-virtual-select/renderer.cjs.js +0 -2
  448. package/dist/nile-virtual-select/renderer.cjs.js.map +0 -1
  449. package/dist/nile-virtual-select/renderer.esm.js +0 -16
  450. package/dist/nile-virtual-select/search-manager.cjs.js +0 -2
  451. package/dist/nile-virtual-select/search-manager.cjs.js.map +0 -1
  452. package/dist/nile-virtual-select/search-manager.esm.js +0 -1
  453. package/dist/nile-virtual-select/selection-manager.cjs.js +0 -2
  454. package/dist/nile-virtual-select/selection-manager.cjs.js.map +0 -1
  455. package/dist/nile-virtual-select/selection-manager.esm.js +0 -1
  456. package/dist/nile-virtual-select/types.cjs.js.map +0 -1
  457. package/dist/src/nile-select/virtual-scroll-helper.d.ts +0 -40
  458. package/dist/src/nile-select/virtual-scroll-helper.js +0 -196
  459. package/dist/src/nile-select/virtual-scroll-helper.js.map +0 -1
  460. package/dist/src/nile-virtual-select/index.d.ts +0 -1
  461. package/dist/src/nile-virtual-select/index.js +0 -2
  462. package/dist/src/nile-virtual-select/index.js.map +0 -1
  463. package/dist/src/nile-virtual-select/nile-virtual-select.css.js +0 -480
  464. package/dist/src/nile-virtual-select/nile-virtual-select.css.js.map +0 -1
  465. package/dist/src/nile-virtual-select/nile-virtual-select.d.ts +0 -242
  466. package/dist/src/nile-virtual-select/nile-virtual-select.js +0 -1091
  467. package/dist/src/nile-virtual-select/nile-virtual-select.js.map +0 -1
  468. package/dist/src/nile-virtual-select/nile-virtual-select.test.js +0 -317
  469. package/dist/src/nile-virtual-select/nile-virtual-select.test.js.map +0 -1
  470. package/dist/src/nile-virtual-select/renderer.d.ts +0 -11
  471. package/dist/src/nile-virtual-select/renderer.js +0 -45
  472. package/dist/src/nile-virtual-select/renderer.js.map +0 -1
  473. package/dist/src/nile-virtual-select/search-manager.d.ts +0 -12
  474. package/dist/src/nile-virtual-select/search-manager.js +0 -39
  475. package/dist/src/nile-virtual-select/search-manager.js.map +0 -1
  476. package/dist/src/nile-virtual-select/selection-manager.d.ts +0 -12
  477. package/dist/src/nile-virtual-select/selection-manager.js +0 -49
  478. package/dist/src/nile-virtual-select/selection-manager.js.map +0 -1
  479. package/dist/src/nile-virtual-select/types.d.ts +0 -45
  480. package/dist/src/nile-virtual-select/types.js.map +0 -1
  481. package/dist/virtualize-a4a40d96.esm.js +0 -22
  482. package/dist/virtualize-b6a2fbe0.cjs.js +0 -18
  483. package/dist/virtualize-b6a2fbe0.cjs.js.map +0 -1
  484. package/src/nile-select/virtual-scroll-helper.ts +0 -228
  485. package/src/nile-virtual-select/index.ts +0 -1
  486. package/src/nile-virtual-select/nile-virtual-select.css.ts +0 -482
  487. package/src/nile-virtual-select/nile-virtual-select.test.ts +0 -390
  488. package/src/nile-virtual-select/nile-virtual-select.ts +0 -1161
  489. package/src/nile-virtual-select/renderer.ts +0 -62
  490. package/src/nile-virtual-select/search-manager.ts +0 -48
  491. package/src/nile-virtual-select/selection-manager.ts +0 -56
  492. package/src/nile-virtual-select/types.ts +0 -48
  493. /package/dist/{nile-virtual-select → nile-slider}/index.cjs.js.map +0 -0
  494. /package/dist/{nile-virtual-select/types.esm.js → nile-slider/types/nile-slider.enums.esm.js} +0 -0
@@ -1,1161 +0,0 @@
1
- /**
2
- * Copyright Aquera Inc 2023
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 {
9
- LitElement,
10
- html,
11
- } from 'lit';
12
- import { customElement, property } from 'lit/decorators.js';
13
- import { styles } from './nile-virtual-select.css';
14
-
15
- import '../nile-icon';
16
- import '../nile-popup/nile-popup';
17
- import '../nile-tag/nile-tag';
18
- import { animateTo, stopAnimations } from '../internal/animate';
19
- import { classMap } from 'lit/directives/class-map.js';
20
- import { query, state } from 'lit/decorators.js';
21
- import { defaultValue } from '../internal/default-value';
22
- import { FormControlController } from '../internal/form';
23
- import {
24
- getAnimation,
25
- setDefaultAnimation,
26
- } from '../utilities/animation-registry';
27
- import { HasSlotController } from '../internal/slot';
28
- import { waitForEvent } from '../internal/event';
29
- import { watch } from '../internal/watch';
30
- import NileElement from '../internal/nile-element';
31
- import type { CSSResultGroup, TemplateResult } from 'lit';
32
- import type { NileFormControl } from '../internal/nile-element';
33
- import type NileOption from '../nile-option/nile-option';
34
- import type NilePopup from '../nile-popup/nile-popup';
35
- import { ifDefined } from 'lit/directives/if-defined.js';
36
-
37
- import type { VirtualOption, NileRemoveEvent } from './types.js';
38
- import { VirtualSelectSelectionManager } from './selection-manager.js';
39
- import { VirtualSelectSearchManager } from './search-manager.js';
40
- import { VirtualSelectRenderer } from './renderer.js';
41
-
42
- /**
43
- * Nile Virtual Select component.
44
- *
45
- * @tag nile-virtual-select
46
- *
47
- */
48
-
49
- /**
50
- * @summary Virtual select component for handling large datasets with virtual scrolling.
51
- * @status stable
52
- * @since 2.0
53
- *
54
- * @dependency nile-icon
55
- * @dependency nile-popup
56
- * @dependency nile-tag
57
- *
58
- * @slot label - The input's label. Alternatively, you can use the `label` attribute.
59
- * @slot prefix - Used to prepend a presentational icon or similar element to the combobox.
60
- * @slot clear-icon - An icon to use in lieu of the default clear icon.
61
- * @slot expand-icon - The icon to show when the control is expanded and collapsed.
62
- * @slot help-text - Text that describes how to use the input. Alternatively, you can use the `help-text` attribute.
63
- *
64
- * @event nile-change - Emitted when the control's value changes.
65
- * @event nile-clear - Emitted when the control's value is cleared.
66
- * @event nile-input - Emitted when the control receives input.
67
- * @event nile-focus - Emitted when the control gains focus.
68
- * @event nile-blur - Emitted when the control loses focus.
69
- * @event nile-show - Emitted when the select's menu opens.
70
- * @event nile-after-show - Emitted after the select's menu opens and all animations are complete.
71
- * @event nile-hide - Emitted when the select's menu closes.
72
- * @event nile-after-hide - Emitted after the select's menu closes and all animations are complete.
73
- * @event nile-invalid - Emitted when the form control has been checked for validity and its constraints aren't satisfied.
74
- *
75
- * @csspart form-control - The form control that wraps the label, input, and help text.
76
- * @csspart form-control-label - The label's wrapper.
77
- * @csspart form-control-input - The select's wrapper.
78
- * @csspart form-control-help-text - The help text's wrapper.
79
- * @csspart combobox - The container the wraps the prefix, combobox, clear icon, and expand button.
80
- * @csspart prefix - The container that wraps the prefix slot.
81
- * @csspart display-input - The element that displays the selected option's label, an `<input>` element.
82
- * @csspart listbox - The listbox container where options are slotted.
83
- * @csspart tags - The container that houses option tags when `multiple` is used.
84
- * @csspart tag - The individual tags that represent each multiselect option.
85
- * @csspart clear-button - The clear button.
86
- * @csspart expand-icon - The container that wraps the expand icon.
87
- */
88
-
89
- @customElement('nile-virtual-select')
90
- export class NileVirtualSelect extends NileElement implements NileFormControl {
91
- static styles: CSSResultGroup = styles;
92
-
93
- private readonly formControlController = new FormControlController(this, {
94
- assumeInteractionOn: ['nile-blur', 'nile-input'],
95
- });
96
- private readonly hasSlotController = new HasSlotController(
97
- this,
98
- 'help-text',
99
- 'label'
100
- );
101
-
102
- @query('.select') popup: NilePopup;
103
- @query('.select__display-input') displayInput: HTMLInputElement;
104
- @query('.select__value-input') valueInput: HTMLInputElement;
105
-
106
- @state() private hasFocus = false;
107
- @state() displayLabel = '';
108
- @state() selectedOptions: VirtualOption[] = [];
109
- @state() oldValue: string | string[] = '';
110
-
111
- /** The name of the select, submitted as a name/value pair with form data. */
112
- @property() name = '';
113
-
114
- /** Array of all option items for virtual scrolling */
115
- @property({ type: Array }) allOptionItems: any = [];
116
-
117
- /** Original unfiltered option items for search functionality */
118
- @state() private originalOptionItems: any = [];
119
-
120
- /**
121
- * The current value of the select. When `multiple` is enabled, the value will be an array of selected values.
122
- */
123
- @property({
124
- converter: {
125
- fromAttribute: (value: string) => value.split(' '),
126
- toAttribute: (value: string[]) => value.join(' '),
127
- },
128
- })
129
- value: string | string[] = '';
130
-
131
- /** The default value of the form control. Primarily used for resetting the form control. */
132
- @defaultValue() defaultValue: string | string[] = '';
133
-
134
- /** The select's size. */
135
- @property() size: 'small' | 'medium' | 'large' = 'medium';
136
-
137
- /** Placeholder text to show as a hint when the select is empty. */
138
- @property() placeholder = 'Select...';
139
-
140
- /** Current search value */
141
- @state() searchValue: string = '';
142
-
143
- /** Enable search functionality */
144
- @property({ type: Boolean, reflect: true }) searchEnabled = false;
145
-
146
- /** Search input placeholder */
147
- @property({attribute:'internal-search-placeholder'}) internalSearchPlaceHolder = 'Search...';
148
-
149
- /** Disable local search filtering */
150
- @property({ type: Boolean, reflect: true }) disableLocalSearch = false;
151
-
152
- /** Show loading state */
153
- @property({ type: Boolean, reflect: true }) optionsLoading = false;
154
-
155
- /** Allows more than one option to be selected. */
156
- @property({ type: Boolean, reflect: true }) multiple = false;
157
-
158
- /** Help text */
159
- @property({ attribute: 'help-text', reflect: true }) helpText = '';
160
-
161
- /** Error message */
162
- @property({ attribute: 'error-message', reflect: true }) errorMessage = '';
163
-
164
- /** Sets the input to a warning state */
165
- @property({ type: Boolean }) warning = false;
166
-
167
- /** Sets the input to an error state */
168
- @property({ type: Boolean }) error = false;
169
-
170
- /** Sets the input to a success state */
171
- @property({ type: Boolean }) success = false;
172
-
173
- /** Disables the select control. */
174
- @property({ type: Boolean, reflect: true }) disabled = false;
175
-
176
- /** Adds a clear button when the select is not empty. */
177
- @property({ type: Boolean, reflect: true }) clearable = false;
178
-
179
- /** The select's open state. */
180
- @property({ type: Boolean, reflect: true }) open = false;
181
-
182
- /**
183
- * Enable this option to prevent the listbox from being clipped when the component is placed inside a container with
184
- * `overflow: auto|scroll`. Hoisting uses a fixed positioning strategy that works in many, but not all, scenarios.
185
- */
186
- @property({ type: Boolean }) hoist = false;
187
-
188
- /** Draws a filled select. */
189
- @property({ type: Boolean, reflect: true }) filled = false;
190
-
191
- /** Draws a pill-style select with rounded edges. */
192
- @property({ type: Boolean, reflect: true }) pill = false;
193
-
194
- /** The select's label. If you need to display HTML, use the `label` slot instead. */
195
- @property() label = '';
196
-
197
- /**
198
- * The preferred placement of the select's menu. Note that the actual placement may vary as needed to keep the listbox
199
- * inside of the viewport.
200
- */
201
- @property({ reflect: true }) placement: 'top' | 'bottom' = 'bottom';
202
-
203
- /**
204
- * By default, form controls are associated with the nearest containing `<form>` element. This attribute allows you
205
- * to place the form control outside of a form and associate it with the form that has this `id`. The form must be in
206
- * the same document or shadow root for this to work.
207
- */
208
- @property({ reflect: true }) form = '';
209
-
210
- /** The select's required attribute. */
211
- @property({ type: Boolean, reflect: true }) required = false;
212
-
213
- /** Show no results message */
214
- @property({ type: Boolean }) showNoResults: boolean = false;
215
-
216
- /** No results message */
217
- @property({ type: String }) noResultsMessage: string = 'No results found';
218
-
219
- /** Function to render item value from data object */
220
- @property({ attribute:false}) renderItemFunction: (item:any)=>string = (item:any)=>item?.label || item?.name || item;
221
-
222
- /** Block value change events */
223
- @property({ type: Boolean, reflect: true }) blockValueChange = false;
224
-
225
- /** Disable width synchronization */
226
- @property({ type: Boolean, reflect: true }) noWidthSync = false;
227
-
228
- /**
229
- * The maximum number of selected options to show when `multiple` is true. After the maximum, "+n" will be shown to
230
- * indicate the number of additional items that are selected. Set to 0 to remove the limit.
231
- */
232
- @property({ attribute: 'max-options-visible', type: Number })
233
- maxOptionsVisible = 3;
234
-
235
- @state() oldMaxOptionsVisible: number = 1;
236
-
237
- /** Gets the validity state object */
238
- get validity() {
239
- return this.valueInput?.validity;
240
- }
241
-
242
- /** Gets the validation message */
243
- get validationMessage() {
244
- return this.valueInput?.validationMessage ?? '';
245
- }
246
-
247
- connectedCallback() {
248
- super.connectedCallback();
249
- this.initializeComponent();
250
- this.setupEventListeners();
251
-
252
- this.updateComplete.then(() => {
253
- if (this.value && this.allOptionItems.length > 0) {
254
- this.selectionChanged();
255
- }
256
- });
257
- }
258
-
259
- disconnectedCallback() {
260
- this.removeOpenListeners();
261
- }
262
-
263
- private initializeComponent(): void {
264
- this.renderItemFunction = (item:any) => item?.label || item?.name || item;
265
- this.open = false;
266
- this.emit('nile-init');
267
- }
268
-
269
- private setupEventListeners(): void {
270
- this.handleDocumentFocusIn = this.handleDocumentFocusIn.bind(this);
271
- this.handleDocumentKeyDown = this.handleDocumentKeyDown.bind(this);
272
- this.handleDocumentMouseDown = this.handleDocumentMouseDown.bind(this);
273
- }
274
-
275
- private addOpenListeners(): void {
276
- document.addEventListener('focusin', this.handleDocumentFocusIn);
277
- document.addEventListener('keydown', this.handleDocumentKeyDown);
278
- document.addEventListener('mousedown', this.handleDocumentMouseDown);
279
- }
280
-
281
- private removeOpenListeners(): void {
282
- document.removeEventListener('focusin', this.handleDocumentFocusIn);
283
- document.removeEventListener('keydown', this.handleDocumentKeyDown);
284
- document.removeEventListener('mousedown', this.handleDocumentMouseDown);
285
- }
286
-
287
- private handleFocus(): void {
288
- this.hasFocus = true;
289
- this.emit('nile-focus');
290
- }
291
-
292
- private handleBlur(): void {
293
- this.hasFocus = false;
294
- this.emit('nile-blur');
295
- }
296
-
297
- private handleDocumentFocusIn(event: FocusEvent): void {
298
- if (!this.open) return;
299
- const path = event.composedPath();
300
- const hitSelf = path.includes(this);
301
- const hitPopup = this.popup && path.includes(this.popup);
302
-
303
- if (!hitSelf && !hitPopup) {
304
- this.hide();
305
- }
306
- }
307
-
308
- private handleDocumentKeyDown(event: KeyboardEvent): void {
309
- if (this.shouldIgnoreKeyPress(event)) {
310
- return;
311
- }
312
-
313
- if (this.isEscapeKey(event)) {
314
- this.handleEscapeKey(event);
315
- }
316
-
317
- if (this.isEnterOrSpaceKey(event)) {
318
- this.handleEnterOrSpaceKey(event);
319
- }
320
- }
321
-
322
- private shouldIgnoreKeyPress(event: KeyboardEvent): boolean {
323
- const target = event.target as HTMLElement;
324
- const isClearButton = target.closest('.select__clear') !== null;
325
- const isIconButton = target.closest('nile-icon-button') !== null;
326
- return isClearButton || isIconButton;
327
- }
328
-
329
- private isEscapeKey(event: KeyboardEvent): boolean {
330
- return event.key === 'Escape' && this.open;
331
- }
332
-
333
- private handleEscapeKey(event: KeyboardEvent): void {
334
- event.preventDefault();
335
- event.stopPropagation();
336
- this.hide();
337
- this.displayInput.focus({ preventScroll: true });
338
- }
339
-
340
- private isEnterOrSpaceKey(event: KeyboardEvent): boolean {
341
- return event.key === 'Enter' || event.key === ' ';
342
- }
343
-
344
- private handleEnterOrSpaceKey(event: KeyboardEvent): void {
345
- event.preventDefault();
346
- event.stopImmediatePropagation();
347
-
348
- if (!this.open) {
349
- this.show();
350
- return;
351
- }
352
-
353
- if (!this.multiple) {
354
- this.hide();
355
- this.displayInput.focus({ preventScroll: true });
356
- }
357
- }
358
-
359
- private handleDocumentMouseDown = (event: MouseEvent): void => {
360
- if (!this.open) return;
361
-
362
- const path = event.composedPath();
363
- const hitSelf = path.includes(this);
364
- const hitPopup = this.popup && path.includes(this.popup);
365
-
366
- if (!hitSelf && !hitPopup) {
367
- this.hide();
368
- }
369
- };
370
-
371
- private handleLabelClick(): void {
372
- this.displayInput.focus();
373
- this.hide();
374
- }
375
-
376
- private handleComboboxMouseDown(event: MouseEvent): void {
377
- if (this.shouldIgnoreComboboxClick(event)) {
378
- return;
379
- }
380
-
381
- event.preventDefault();
382
- this.displayInput.focus({ preventScroll: true });
383
- this.open = !this.open;
384
- }
385
-
386
- private shouldIgnoreComboboxClick(event: MouseEvent): boolean {
387
- const path = event.composedPath();
388
- const isIconButton = path.some(
389
- el =>
390
- el instanceof Element && el.tagName.toLowerCase() === 'nile-icon-button'
391
- );
392
- return this.disabled || isIconButton;
393
- }
394
-
395
- private handleComboboxKeyDown(event: KeyboardEvent): void {
396
- if (this.isEnterOrSpaceKey(event)) {
397
- event.preventDefault();
398
- this.open = !this.open;
399
- }
400
- }
401
-
402
- private handleClearClick(event: MouseEvent): void {
403
- event.stopPropagation();
404
- this.clearSelection();
405
- }
406
-
407
- private clearSelection(): void {
408
- const oldValue = this.value;
409
- this.value = this.multiple ? [] : '';
410
- this.selectionChanged();
411
-
412
- this.updateComplete.then(() => {
413
- this.nileInput({ value: this.value, name: this.name });
414
- this.nileChange({ value: this.value, name: this.name });
415
- this.emit('nile-clear');
416
- });
417
- }
418
-
419
- private handleClearMouseDown(event: MouseEvent): void {
420
- event.stopPropagation();
421
- }
422
-
423
- private handleOptionClick(event: MouseEvent): void {
424
- const target = event.target as HTMLElement;
425
- const option = target.closest('nile-option');
426
-
427
- if (this.shouldBlockValueChange(option)) {
428
- return;
429
- }
430
-
431
- const oldValue = this.value;
432
- this.oldValue = oldValue;
433
-
434
- if (option && !option.disabled) {
435
- this.handleOptionSelection(option);
436
- }
437
- }
438
-
439
- private shouldBlockValueChange(option: Element | null): boolean {
440
- if (this.blockValueChange && option) {
441
- this.emit('nile-block-change', { value: (option as any)?.value, name: this.name });
442
- this.hide();
443
- return true;
444
- }
445
- return false;
446
- }
447
-
448
- private handleOptionSelection(option: Element): void {
449
- const optionValue = (option as any).value;
450
-
451
- if (this.multiple) {
452
- this.toggleOptionSelection(optionValue);
453
- } else {
454
- this.setSelectedOptions(optionValue);
455
- }
456
-
457
- this.updateComplete.then(() =>
458
- this.displayInput.focus({ preventScroll: true })
459
- );
460
-
461
- if (this.value !== this.oldValue) {
462
- this.updateComplete.then(() => {
463
- this.nileInput({ value: this.value, name: this.name });
464
- this.nileChange({ value: this.value, name: this.name });
465
- });
466
- }
467
-
468
- if (!this.multiple) {
469
- this.hide();
470
- this.displayInput.focus({ preventScroll: true });
471
- }
472
- }
473
-
474
- private setSelectedOptions(optionValue: string): void {
475
- this.value = optionValue;
476
- this.selectionChanged();
477
- }
478
-
479
- private toggleOptionSelection(optionValue: string): void {
480
- const currentValues = Array.isArray(this.value) ? this.value : [];
481
-
482
- if (currentValues.includes(optionValue)) {
483
- this.value = currentValues.filter(v => v !== optionValue);
484
- } else {
485
- this.value = [...currentValues, optionValue];
486
- }
487
-
488
- this.selectionChanged();
489
- }
490
-
491
- private handleTagRemove(event: NileRemoveEvent, option: VirtualOption): void {
492
- event.stopPropagation();
493
-
494
- if (!this.disabled) {
495
- this.removeTagFromSelection(option);
496
- this.emitTagRemovalEvent(option);
497
- }
498
- }
499
-
500
- private removeTagFromSelection(option: VirtualOption): void {
501
- let currentValue = this.value;
502
- if (!Array.isArray(currentValue)) {
503
- currentValue = currentValue ? [currentValue] : [];
504
- }
505
- const newValue = currentValue.filter((v: string) => v !== option.value);
506
- this.value = newValue;
507
- this.selectionChanged();
508
- }
509
-
510
- private emitTagRemovalEvent(option: VirtualOption): void {
511
- this.updateComplete.then(() => {
512
- this.nileInput({ value: this.value, name: this.name });
513
- this.nileChange({ value: this.value, name: this.name });
514
- this.emit('nile-tag-remove', { value: this.value, name: this.name, removedtagvalue: option.value });
515
- });
516
- }
517
-
518
- private selectionChanged(): void {
519
- // Update selected options cache
520
- this.selectedOptions = VirtualSelectSelectionManager.createVirtualOptionsFromValues(
521
- this.value,
522
- this.allOptionItems,
523
- this.renderItemFunction
524
- );
525
-
526
- // Update the display label
527
- if (this.multiple) {
528
- if (this.placeholder && this.value.length === 0) {
529
- // When no items are selected, keep the value empty so the placeholder shows
530
- this.displayLabel = '';
531
- } else {
532
- this.displayLabel = this.selectedOptions.length + ' selected';
533
- }
534
- } else {
535
- const currentValue = Array.isArray(this.value) ? this.value[0] : this.value;
536
- this.displayLabel = this.selectedOptions[0]?.getTextLabel()
537
- ? this.selectedOptions[0].getTextLabel()
538
- : currentValue ?? '';
539
- }
540
-
541
- // Update validity
542
- this.updateValidity();
543
-
544
- this.calculateTotalWidthOfTags();
545
- }
546
-
547
- handleSearchFocus(): void {
548
- document.removeEventListener('keydown', this.handleDocumentKeyDown);
549
- }
550
-
551
- handleSearchBlur(): void {
552
- document.addEventListener('keydown', this.handleDocumentKeyDown);
553
- }
554
-
555
- handleSearchChange(e: any): void {
556
- this.searchValue = e.detail.value;
557
- if (!this.disableLocalSearch) {
558
- this.filterVirtualOptions(this.searchValue);
559
- }
560
- }
561
-
562
- filterVirtualOptions(searchValue: string): void {
563
- const result = VirtualSelectSearchManager.filterVirtualOptions(
564
- searchValue,
565
- this.originalOptionItems,
566
- this.allOptionItems,
567
- this.renderItemFunction
568
- );
569
-
570
- this.allOptionItems = result.filteredItems;
571
- this.showNoResults = result.showNoResults;
572
- this.requestUpdate();
573
- }
574
-
575
- private handleInvalid(event: Event): void {
576
- this.formControlController.setValidity(false);
577
- this.formControlController.emitInvalidEvent(event);
578
- }
579
-
580
- @watch('disabled', { waitUntilFirstUpdate: true })
581
- handleDisabledChange(): void {
582
- if (this.disabled) {
583
- this.open = false;
584
- this.handleOpenChange();
585
- }
586
- }
587
-
588
- @watch('value', { waitUntilFirstUpdate: true })
589
- handleValueChange(): void {
590
- this.selectionChanged();
591
- this.requestUpdate();
592
- }
593
-
594
- @watch('allOptionItems', { waitUntilFirstUpdate: true })
595
- handleAllOptionItemsChange(): void {
596
- this.selectionChanged();
597
- this.requestUpdate();
598
- }
599
-
600
- @watch('renderItemFunction', { waitUntilFirstUpdate: true })
601
- handleRenderItemFunctionChange(): void {
602
- if (this.value && this.allOptionItems.length > 0) {
603
- this.selectionChanged();
604
- this.requestUpdate();
605
- }
606
- }
607
-
608
- @watch('open', { waitUntilFirstUpdate: true })
609
- async handleOpenChange(): Promise<void> {
610
- if (this.open && !this.disabled) {
611
- await this.handleOpen();
612
- } else {
613
- await this.handleClose();
614
- }
615
- }
616
-
617
- private async handleOpen(): Promise<void> {
618
- this.emit('nile-show', { value: this.value, name: this.name });
619
- this.addOpenListeners();
620
- this.showNoResults = !this.allOptionItems?.length;
621
-
622
- await stopAnimations(this);
623
- this.popup.active = true;
624
-
625
- const { keyframes, options } = getAnimation(this, 'select.show', {
626
- dir: 'ltr',
627
- });
628
- await animateTo(this.popup.popup, keyframes, options);
629
-
630
- this.initializeOriginalItems();
631
- this.filterVirtualOptions(this.searchValue);
632
- this.emit('nile-after-show', { value: this.value, name: this.name });
633
- }
634
-
635
- private async handleClose(): Promise<void> {
636
- this.emit('nile-hide', { value: this.value, name: this.name });
637
- this.removeOpenListeners();
638
-
639
- await stopAnimations(this);
640
- const { keyframes, options } = getAnimation(this, 'select.hide', {
641
- dir: 'ltr',
642
- });
643
- await animateTo(this.popup.popup, keyframes, options);
644
- this.popup.active = false;
645
-
646
- this.searchValue = '';
647
- this.emit('nile-after-hide', { value: this.value, name: this.name });
648
- }
649
-
650
- private initializeOriginalItems(): void {
651
- if (this.originalOptionItems.length === 0 && this.allOptionItems.length > 0) {
652
- this.originalOptionItems = [...this.allOptionItems];
653
- }
654
- }
655
-
656
- async show(): Promise<unknown> {
657
- if (this.open || this.disabled) {
658
- this.open = false;
659
- return undefined;
660
- }
661
-
662
- this.open = true;
663
- return waitForEvent(this, 'nile-after-show');
664
- }
665
-
666
- async hide(): Promise<unknown> {
667
- if (!this.open || this.disabled) {
668
- this.open = false;
669
- return undefined;
670
- }
671
-
672
- this.open = false;
673
- return waitForEvent(this, 'nile-after-hide');
674
- }
675
-
676
- checkValidity(): boolean {
677
- return this.valueInput.checkValidity();
678
- }
679
-
680
- getForm(): HTMLFormElement | null {
681
- return this.formControlController.getForm();
682
- }
683
-
684
- reportValidity(): boolean {
685
- return this.valueInput.reportValidity();
686
- }
687
-
688
- setCustomValidity(message: string): void {
689
- this.valueInput.setCustomValidity(message);
690
- this.formControlController.updateValidity();
691
- }
692
-
693
- focus(options?: FocusOptions): void {
694
- this.displayInput.focus(options);
695
- }
696
-
697
- blur(): void {
698
- this.displayInput.blur();
699
- }
700
-
701
- onInputChange(event: Event): void {
702
- event.stopPropagation();
703
- }
704
-
705
- render(): TemplateResult {
706
- const hasLabelSlot = this.hasSlotController.test('label');
707
- const hasHelpTextSlot = this.hasSlotController.test('help-text');
708
- const hasLabelSuffixSlot = this.hasSlotController.test('label-suffix');
709
- const hasCustomSelect = this.hasSlotController.test('custom-select');
710
- const hasLabel = this.label ? true : !!hasLabelSlot;
711
- const hasClearIcon =
712
- this.clearable && !this.disabled && this.value.length > 0;
713
- const isPlaceholderVisible = !!this.placeholder && this.value.length === 0;
714
- const hasHelpText = !!this.helpText;
715
- const hasErrorMessage = !!this.errorMessage;
716
-
717
- return html`
718
- <div
719
- part="form-control"
720
- class=${classMap({
721
- 'form-control': true,
722
- 'form-control--small': this.size === 'small',
723
- 'form-control--medium': this.size === 'medium',
724
- 'form-control--large': this.size === 'large',
725
- 'form-control--has-label': hasLabel,
726
- 'form-control--has-help-text': hasHelpText,
727
- })}
728
- >
729
- ${this.renderLabel(hasLabel, hasLabelSuffixSlot)}
730
- ${this.renderFormControlInput(hasCustomSelect, hasClearIcon, isPlaceholderVisible, hasHelpText, hasErrorMessage)}
731
- </div>
732
- `;
733
- }
734
-
735
- private renderLabel(hasLabel: boolean, hasLabelSuffixSlot: boolean): TemplateResult {
736
- return html`
737
- <label
738
- id="label"
739
- part="form-control-label"
740
- class="form-control__label"
741
- aria-hidden=${hasLabel ? 'false' : 'true'}
742
- @click=${this.handleLabelClick}
743
- >
744
- <slot name="label">${this.label}</slot>
745
- </label>
746
-
747
- ${hasLabelSuffixSlot ? html` <slot name="label-suffix"></slot> ` : ``}
748
- `;
749
- }
750
-
751
- private renderFormControlInput(
752
- hasCustomSelect: boolean,
753
- hasClearIcon: boolean,
754
- isPlaceholderVisible: boolean,
755
- hasHelpText: boolean,
756
- hasErrorMessage: boolean
757
- ): TemplateResult {
758
- return html`
759
- <div part="form-control-input" class="form-control-input">
760
- ${this.renderPopup(hasCustomSelect, hasClearIcon, isPlaceholderVisible)}
761
- ${this.renderHelpText(hasHelpText, hasErrorMessage)}
762
- </div>
763
- `;
764
- }
765
-
766
- private renderPopup(hasCustomSelect: boolean, hasClearIcon: boolean, isPlaceholderVisible: boolean): TemplateResult {
767
- return html`
768
- <nile-popup
769
- class=${classMap({
770
- select: true,
771
- 'select--warning': this.warning,
772
- 'select--error': this.error,
773
- 'select--success': this.success,
774
- 'select--standard': true,
775
- 'select--filled': this.filled,
776
- 'select--pill': this.pill,
777
- 'select--open': this.open,
778
- 'select--disabled': this.disabled,
779
- 'select--multiple': this.multiple,
780
- 'select--focused': this.hasFocus,
781
- 'select--placeholder-visible': isPlaceholderVisible,
782
- 'select--top': this.placement === 'top',
783
- 'select--bottom': this.placement === 'bottom',
784
- 'select--small': this.size === 'small',
785
- 'select--medium': this.size === 'medium',
786
- 'select--large': this.size === 'large',
787
- })}
788
- placement=${this.placement}
789
- strategy=${this.hoist ? 'fixed' : 'absolute'}
790
- distance="6"
791
- flip
792
- shift
793
- sync=${ifDefined(!this.noWidthSync ? 'width' : undefined)}
794
- auto-size="vertical"
795
- auto-size-padding="10"
796
- >
797
- ${this.renderCustomSelect(hasCustomSelect)}
798
- ${this.renderCombobox(hasCustomSelect, hasClearIcon)}
799
- ${this.renderListbox()}
800
- </nile-popup>
801
- `;
802
- }
803
-
804
- private renderCustomSelect(hasCustomSelect: boolean): TemplateResult {
805
- return hasCustomSelect
806
- ? html`<slot
807
- slot="anchor"
808
- name="custom-select"
809
- class="custom-select"
810
- @keydown=${this.handleComboboxKeyDown}
811
- @mousedown=${this.handleComboboxMouseDown}
812
- ></slot>`
813
- : html``;
814
- }
815
-
816
- private renderCombobox(hasCustomSelect: boolean, hasClearIcon: boolean): TemplateResult {
817
- return html`
818
- <div
819
- part="combobox"
820
- class=${classMap({
821
- select__combobox: true,
822
- 'select__hide-default': hasCustomSelect,
823
- })}
824
- slot="anchor"
825
- @keydown=${this.handleComboboxKeyDown}
826
- @mousedown=${this.handleComboboxMouseDown}
827
- >
828
- ${this.renderPrefix()}
829
- ${this.renderDisplayInput()}
830
- ${this.renderTags()}
831
- ${this.renderValueInput()}
832
- ${this.renderClearButton(hasClearIcon)}
833
- ${this.renderSuffix()}
834
- ${this.renderExpandIcon()}
835
- </div>
836
- `;
837
- }
838
-
839
- private renderPrefix(): TemplateResult {
840
- return html`
841
- <slot
842
- part="prefix"
843
- name="prefix"
844
- class=${classMap({
845
- select__prefix: true,
846
- multiple: this.multiple,
847
- })}
848
- ></slot>
849
- `;
850
- }
851
-
852
- private renderDisplayInput(): TemplateResult {
853
- return html`
854
- <input
855
- part="display-input"
856
- class="select__display-input"
857
- type="text"
858
- placeholder=${this.placeholder}
859
- .disabled=${this.disabled}
860
- .value=${this.displayLabel}
861
- autocomplete="off"
862
- spellcheck="false"
863
- autocapitalize="off"
864
- readonly
865
- aria-controls="listbox"
866
- aria-expanded=${this.open ? 'true' : 'false'}
867
- aria-haspopup="listbox"
868
- aria-labelledby="label"
869
- aria-disabled=${this.disabled ? 'true' : 'false'}
870
- aria-describedby="help-text"
871
- role="combobox"
872
- tabindex="0"
873
- @focus=${this.handleFocus}
874
- @blur=${this.handleBlur}
875
- />
876
- `;
877
- }
878
-
879
- private renderTags(): TemplateResult {
880
- return this.multiple
881
- ? html`
882
- <div part="tags" class="select__tags">
883
- ${this.selectedOptions.map((option, index) => {
884
- if (
885
- index < this.maxOptionsVisible ||
886
- this.maxOptionsVisible <= 0
887
- ) {
888
- const classes = {
889
- select__invisible:
890
- index + 1 > this.oldMaxOptionsVisible &&
891
- this.maxOptionsVisible === Infinity,
892
- };
893
- return html`
894
- <nile-tag
895
- class=${classMap(classes)}
896
- part="tag"
897
- exportparts="
898
- base:tag__base,
899
- content:tag__content,
900
- remove-button:tag__remove-button,
901
- remove-button__base:tag__remove-button__base
902
- "
903
- ?pill=${this.pill}
904
- size=${this.size}
905
- removable
906
- @nile-remove=${(event: NileRemoveEvent) =>
907
- this.handleTagRemove(event, option)}
908
- >
909
- ${option.getTextLabel()}
910
- </nile-tag>
911
- `;
912
- } else if (index === this.maxOptionsVisible) {
913
- return html`
914
- <span class="select__tags-count"
915
- >+${this.selectedOptions.length - index} More
916
- </span>
917
- `;
918
- } else {
919
- return null;
920
- }
921
- })}
922
- </div>
923
- `
924
- : html``;
925
- }
926
-
927
- private renderValueInput(): TemplateResult {
928
- return html`
929
- <input
930
- class="select__value-input"
931
- type="text"
932
- ?disabled=${this.disabled}
933
- ?required=${this.required}
934
- .value=${Array.isArray(this.value)
935
- ? this.value.join(', ')
936
- : this.value}
937
- tabindex="-1"
938
- aria-hidden="true"
939
- @focus=${() => this.focus()}
940
- @invalid=${this.handleInvalid}
941
- />
942
- `;
943
- }
944
-
945
- private renderClearButton(hasClearIcon: boolean): TemplateResult {
946
- return hasClearIcon
947
- ? html`
948
- <button
949
- part="clear-button"
950
- class="select__clear"
951
- type="button"
952
- aria-label="clearEntry"
953
- @mousedown=${this.handleClearMouseDown}
954
- @click=${this.handleClearClick}
955
- tabindex="-1"
956
- >
957
- <slot name="clear-icon">
958
- <nile-icon name="close" library="system"></nile-icon>
959
- </slot>
960
- </button>
961
- `
962
- : html``;
963
- }
964
-
965
- private renderSuffix(): TemplateResult {
966
- return html`
967
- <slot
968
- part="suffix"
969
- name="suffix"
970
- class=${classMap({
971
- select__suffix: true,
972
- })}
973
- ></slot>
974
- `;
975
- }
976
-
977
- private renderExpandIcon(): TemplateResult {
978
- return html`
979
- <slot
980
- name="expand-icon"
981
- part="expand-icon"
982
- class="select__expand-icon"
983
- >
984
- <nile-icon library="system" name="arrowdown"></nile-icon>
985
- </slot>
986
- `;
987
- }
988
-
989
- private renderListbox(): TemplateResult {
990
- return html`
991
- <div
992
- id="listbox"
993
- role="listbox"
994
- aria-expanded=${this.open ? 'true' : 'false'}
995
- aria-multiselectable=${this.multiple ? 'true' : 'false'}
996
- aria-labelledby="label"
997
- part="listbox"
998
- class="select__listbox ${this.searchEnabled
999
- ? 'select__search-enabled '
1000
- : ''}"
1001
- tabindex="-1"
1002
- @mouseup=${this.handleOptionClick}
1003
- >
1004
- ${this.renderSearch()}
1005
- ${this.renderLoader()}
1006
- ${this.getVirtualizedContent()}
1007
- </div>
1008
- `;
1009
- }
1010
-
1011
- private renderSearch(): TemplateResult {
1012
- return this.searchEnabled
1013
- ? html`
1014
- <div class="select__search">
1015
- <nile-input
1016
- size="small"
1017
- clearable
1018
- .value=${this.searchValue}
1019
- placeholder="${this.internalSearchPlaceHolder}"
1020
- @nile-input=${this.handleSearchChange}
1021
- @nile-focus=${this.handleSearchFocus}
1022
- @nile-change="${this.onInputChange}"
1023
- >
1024
- <nile-icon name="search" slot="suffix"> </nile-icon>
1025
- </nile-input>
1026
- </div>
1027
- `
1028
- : html``;
1029
- }
1030
-
1031
- private renderLoader(): TemplateResult {
1032
- return this.optionsLoading
1033
- ? html`
1034
- <span class="select__loader">
1035
- <nile-icon
1036
- class="select__loader--icon"
1037
- name="button-loading-blue"
1038
- ></nile-icon>
1039
- </span>
1040
- `
1041
- : html``;
1042
- }
1043
-
1044
- private renderHelpText(hasHelpText: boolean, hasErrorMessage: boolean): TemplateResult {
1045
- return html`
1046
- ${hasHelpText
1047
- ? html` <nile-form-help-text>${this.helpText}</nile-form-help-text> `
1048
- : ``}
1049
- ${hasErrorMessage
1050
- ? html`
1051
- <nile-form-error-message
1052
- >${this.errorMessage}</nile-form-error-message
1053
- >
1054
- `
1055
- : ``}
1056
- `;
1057
- }
1058
-
1059
- getVirtualizedContent(): TemplateResult {
1060
- return VirtualSelectRenderer.getVirtualizedContent(
1061
- this.allOptionItems,
1062
- this.searchEnabled,
1063
- this.renderItemFunction,
1064
- this.value,
1065
- this.multiple
1066
- );
1067
- }
1068
-
1069
- nileInput(value: any): void {
1070
- this.emit('nile-input', value);
1071
- }
1072
-
1073
- nileChange(value: any): void {
1074
- this.emit('nile-change', value);
1075
- }
1076
-
1077
- private updateValidity(): void {
1078
- this.updateComplete.then(() => {
1079
- this.formControlController.updateValidity();
1080
- });
1081
- }
1082
-
1083
- private calculateWidthOfSelectTagsDiv(): number | null {
1084
- if (this.shadowRoot) {
1085
- const selectTagsDiv = this.shadowRoot.querySelector('.select__tags') as HTMLElement;
1086
- if (selectTagsDiv) {
1087
- const width = selectTagsDiv.offsetWidth;
1088
- return width - 70;
1089
- }
1090
- }
1091
- return null;
1092
- }
1093
-
1094
- private calculateTotalWidthOfTags(): void {
1095
- if (this.maxOptionsVisible !== Infinity) {
1096
- this.oldMaxOptionsVisible = this.maxOptionsVisible;
1097
- }
1098
-
1099
- this.maxOptionsVisible = Infinity;
1100
- setTimeout(() => {
1101
- let widths: number[] = [];
1102
- if (this.shadowRoot) {
1103
- const tags = this.shadowRoot.querySelectorAll('nile-tag');
1104
- tags.forEach(tag => {
1105
- if (tag instanceof HTMLElement) {
1106
- widths.push(tag.offsetWidth);
1107
- }
1108
- });
1109
- }
1110
- if (this.value.length !== widths.length) {
1111
- return;
1112
- }
1113
-
1114
- let sum = widths.reduce(
1115
- (accumulator, currentValue) => accumulator + currentValue,
1116
- 0
1117
- );
1118
- const widthOfSelectTagsDiv = this.calculateWidthOfSelectTagsDiv();
1119
- if (!widthOfSelectTagsDiv) {
1120
- return;
1121
- }
1122
-
1123
- let summ = 0;
1124
- let lastindex = 0;
1125
-
1126
- for (let i = 0; i < widths.length; i++) {
1127
- summ += widths[i];
1128
-
1129
- if (summ > widthOfSelectTagsDiv) {
1130
- lastindex = i;
1131
- break;
1132
- }
1133
- }
1134
- this.maxOptionsVisible = lastindex;
1135
- }, 1);
1136
- }
1137
- }
1138
-
1139
- setDefaultAnimation('select.show', {
1140
- keyframes: [
1141
- { opacity: 0, scale: 0.9 },
1142
- { opacity: 1, scale: 1 },
1143
- ],
1144
- options: { duration: 100, easing: 'ease' },
1145
- });
1146
-
1147
- setDefaultAnimation('select.hide', {
1148
- keyframes: [
1149
- { opacity: 1, scale: 1 },
1150
- { opacity: 0, scale: 0.9 },
1151
- ],
1152
- options: { duration: 100, easing: 'ease' },
1153
- });
1154
-
1155
- export default NileVirtualSelect;
1156
-
1157
- declare global {
1158
- interface HTMLElementTagNameMap {
1159
- 'nile-virtual-select': NileVirtualSelect;
1160
- }
1161
- }