@aquera/nile-elements 1.5.2 → 1.5.3

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 (517) hide show
  1. package/README.md +6 -0
  2. package/dist/index.cjs.js +1 -1
  3. package/dist/index.esm.js +1 -1
  4. package/dist/index.js +239 -195
  5. package/dist/nile-auto-complete/nile-auto-complete.cjs.js +1 -1
  6. package/dist/nile-auto-complete/nile-auto-complete.cjs.js.map +1 -1
  7. package/dist/nile-auto-complete/nile-auto-complete.css.cjs.js +1 -1
  8. package/dist/nile-auto-complete/nile-auto-complete.css.cjs.js.map +1 -1
  9. package/dist/nile-auto-complete/nile-auto-complete.css.esm.js +1 -1
  10. package/dist/nile-auto-complete/nile-auto-complete.esm.js +1 -1
  11. package/dist/nile-file-preview/nile-file-preview.cjs.js +1 -1
  12. package/dist/nile-file-preview/nile-file-preview.cjs.js.map +1 -1
  13. package/dist/nile-file-preview/nile-file-preview.css.cjs.js +1 -1
  14. package/dist/nile-file-preview/nile-file-preview.css.cjs.js.map +1 -1
  15. package/dist/nile-file-preview/nile-file-preview.css.esm.js +2 -2
  16. package/dist/nile-file-preview/nile-file-preview.esm.js +1 -1
  17. package/dist/nile-file-preview/nile-file-preview.template.cjs.js +1 -1
  18. package/dist/nile-file-preview/nile-file-preview.template.cjs.js.map +1 -1
  19. package/dist/nile-file-preview/nile-file-preview.template.esm.js +55 -25
  20. package/dist/nile-file-preview/utils/index.cjs.js +1 -1
  21. package/dist/nile-file-preview/utils/index.esm.js +1 -1
  22. package/dist/nile-file-preview/utils/nile-file-preview.util.cjs.js +1 -1
  23. package/dist/nile-file-preview/utils/nile-file-preview.util.cjs.js.map +1 -1
  24. package/dist/nile-file-preview/utils/nile-file-preview.util.esm.js +1 -1
  25. package/dist/nile-file-upload/nile-file-upload.cjs.js +1 -1
  26. package/dist/nile-file-upload/nile-file-upload.cjs.js.map +1 -1
  27. package/dist/nile-file-upload/nile-file-upload.css.cjs.js +1 -1
  28. package/dist/nile-file-upload/nile-file-upload.css.cjs.js.map +1 -1
  29. package/dist/nile-file-upload/nile-file-upload.css.esm.js +15 -5
  30. package/dist/nile-file-upload/nile-file-upload.esm.js +2 -2
  31. package/dist/nile-file-upload/nile-file-upload.template.cjs.js +2 -2
  32. package/dist/nile-file-upload/nile-file-upload.template.cjs.js.map +1 -1
  33. package/dist/nile-file-upload/nile-file-upload.template.esm.js +36 -32
  34. package/dist/nile-file-upload/types/file-upload.enums.cjs.js +1 -1
  35. package/dist/nile-file-upload/types/file-upload.enums.cjs.js.map +1 -1
  36. package/dist/nile-file-upload/types/file-upload.enums.esm.js +1 -1
  37. package/dist/nile-file-upload/types/index.cjs.js +1 -1
  38. package/dist/nile-file-upload/types/index.esm.js +1 -1
  39. package/dist/nile-file-upload/utils/drag-drop.util.cjs.js +1 -1
  40. package/dist/nile-file-upload/utils/drag-drop.util.cjs.js.map +1 -1
  41. package/dist/nile-file-upload/utils/drag-drop.util.esm.js +1 -1
  42. package/dist/nile-file-upload/utils/file-validation.util.cjs.js +4 -2
  43. package/dist/nile-file-upload/utils/file-validation.util.cjs.js.map +1 -1
  44. package/dist/nile-file-upload/utils/file-validation.util.esm.js +1 -1
  45. package/dist/nile-grid/nile-grid-head-item/nile-grid-head-item.cjs.js +1 -1
  46. package/dist/nile-grid/nile-grid-head-item/nile-grid-head-item.cjs.js.map +1 -1
  47. package/dist/nile-grid/nile-grid-head-item/nile-grid-head-item.esm.js +3 -3
  48. package/dist/nile-grid/nile-grid-head-item/nile-grid-head-item.utils.cjs.js +1 -1
  49. package/dist/nile-grid/nile-grid-head-item/nile-grid-head-item.utils.cjs.js.map +1 -1
  50. package/dist/nile-grid/nile-grid-head-item/nile-grid-head-item.utils.esm.js +1 -1
  51. package/dist/nile-grid/nile-grid.cjs.js +1 -1
  52. package/dist/nile-grid/nile-grid.cjs.js.map +1 -1
  53. package/dist/nile-grid/nile-grid.esm.js +2 -2
  54. package/dist/nile-grid/nile-grid.layout.cjs.js +1 -1
  55. package/dist/nile-grid/nile-grid.layout.esm.js +1 -1
  56. package/dist/nile-grid/nile-grid.resize.cjs.js +1 -1
  57. package/dist/nile-grid/nile-grid.resize.esm.js +1 -1
  58. package/dist/nile-grid/nile-grid.utils.cjs.js +1 -1
  59. package/dist/nile-grid/nile-grid.utils.esm.js +1 -1
  60. package/dist/nile-grid/nile-grid.width.cjs.js +1 -1
  61. package/dist/nile-grid/nile-grid.width.cjs.js.map +1 -1
  62. package/dist/nile-grid/nile-grid.width.esm.js +1 -1
  63. package/dist/nile-input/nile-input.cjs.js +1 -1
  64. package/dist/nile-input/nile-input.cjs.js.map +1 -1
  65. package/dist/nile-input/nile-input.esm.js +1 -1
  66. package/dist/nile-popover/index.cjs.js +1 -1
  67. package/dist/nile-popover/index.esm.js +1 -1
  68. package/dist/nile-popover/nile-popover.cjs.js +4 -4
  69. package/dist/nile-popover/nile-popover.cjs.js.map +1 -1
  70. package/dist/nile-popover/nile-popover.esm.js +11 -6
  71. package/dist/src/nile-accordion/nile-accordian.test.js +101 -99
  72. package/dist/src/nile-accordion/nile-accordian.test.js.map +1 -1
  73. package/dist/src/nile-auto-complete/nile-auto-complete.css.js +1 -1
  74. package/dist/src/nile-auto-complete/nile-auto-complete.css.js.map +1 -1
  75. package/dist/src/nile-auto-complete/nile-auto-complete.js +1 -1
  76. package/dist/src/nile-auto-complete/nile-auto-complete.js.map +1 -1
  77. package/dist/src/nile-auto-complete/nile-auto-complete.test.js +104 -112
  78. package/dist/src/nile-auto-complete/nile-auto-complete.test.js.map +1 -1
  79. package/dist/src/nile-avatar/nile-avatar.test.d.ts +0 -1
  80. package/dist/src/nile-avatar/nile-avatar.test.js +103 -87
  81. package/dist/src/nile-avatar/nile-avatar.test.js.map +1 -1
  82. package/dist/src/nile-badge/nile-badge.test.js +554 -35
  83. package/dist/src/nile-badge/nile-badge.test.js.map +1 -1
  84. package/dist/src/nile-breadcrumb/nile-breadcrumb.test.d.ts +2 -0
  85. package/dist/src/nile-breadcrumb/nile-breadcrumb.test.js +106 -0
  86. package/dist/src/nile-breadcrumb/nile-breadcrumb.test.js.map +1 -0
  87. package/dist/src/nile-breadcrumb-item/nile-breadcrumb-item.test.d.ts +1 -0
  88. package/dist/src/nile-breadcrumb-item/nile-breadcrumb-item.test.js +108 -0
  89. package/dist/src/nile-breadcrumb-item/nile-breadcrumb-item.test.js.map +1 -0
  90. package/dist/src/nile-button/nile-button.test.js +499 -39
  91. package/dist/src/nile-button/nile-button.test.js.map +1 -1
  92. package/dist/src/nile-button-filter/nile-button-filter.test.d.ts +1 -0
  93. package/dist/src/nile-button-filter/nile-button-filter.test.js +108 -0
  94. package/dist/src/nile-button-filter/nile-button-filter.test.js.map +1 -0
  95. package/dist/src/nile-button-toggle/nile-button-toggle.test.d.ts +1 -0
  96. package/dist/src/nile-button-toggle/nile-button-toggle.test.js +108 -0
  97. package/dist/src/nile-button-toggle/nile-button-toggle.test.js.map +1 -0
  98. package/dist/src/nile-button-toggle-group/nile-button-toggle-group.test.d.ts +1 -1
  99. package/dist/src/nile-button-toggle-group/nile-button-toggle-group.test.js +105 -104
  100. package/dist/src/nile-button-toggle-group/nile-button-toggle-group.test.js.map +1 -1
  101. package/dist/src/nile-calendar/nile-calendar.test.d.ts +0 -6
  102. package/dist/src/nile-calendar/nile-calendar.test.js +103 -318
  103. package/dist/src/nile-calendar/nile-calendar.test.js.map +1 -1
  104. package/dist/src/nile-card/nile-card.test.js +102 -66
  105. package/dist/src/nile-card/nile-card.test.js.map +1 -1
  106. package/dist/src/nile-checkbox/nile-checkbox.test.js +547 -108
  107. package/dist/src/nile-checkbox/nile-checkbox.test.js.map +1 -1
  108. package/dist/src/nile-chip/nile-chip.test.d.ts +0 -2
  109. package/dist/src/nile-chip/nile-chip.test.js +101 -102
  110. package/dist/src/nile-chip/nile-chip.test.js.map +1 -1
  111. package/dist/src/nile-circular-progressbar/nile-circular-progressbar.test.d.ts +1 -0
  112. package/dist/src/nile-circular-progressbar/nile-circular-progressbar.test.js +108 -0
  113. package/dist/src/nile-circular-progressbar/nile-circular-progressbar.test.js.map +1 -0
  114. package/dist/src/nile-date-picker/nile-date-picker.test.d.ts +1 -0
  115. package/dist/src/nile-date-picker/nile-date-picker.test.js +108 -0
  116. package/dist/src/nile-date-picker/nile-date-picker.test.js.map +1 -0
  117. package/dist/src/nile-dialog/nile-dialog.test.d.ts +0 -1
  118. package/dist/src/nile-dialog/nile-dialog.test.js +104 -126
  119. package/dist/src/nile-dialog/nile-dialog.test.js.map +1 -1
  120. package/dist/src/nile-divider/nile-divider.test.d.ts +1 -0
  121. package/dist/src/nile-divider/nile-divider.test.js +560 -0
  122. package/dist/src/nile-divider/nile-divider.test.js.map +1 -0
  123. package/dist/src/nile-drawer/nile-drawer.test.js +106 -86
  124. package/dist/src/nile-drawer/nile-drawer.test.js.map +1 -1
  125. package/dist/src/nile-dropdown/nile-dropdown.test.js +104 -148
  126. package/dist/src/nile-dropdown/nile-dropdown.test.js.map +1 -1
  127. package/dist/src/nile-empty-state/nile-empty-state.test.js +107 -59
  128. package/dist/src/nile-empty-state/nile-empty-state.test.js.map +1 -1
  129. package/dist/src/nile-error-message/nile-error-message.test.js +105 -55
  130. package/dist/src/nile-error-message/nile-error-message.test.js.map +1 -1
  131. package/dist/src/nile-error-notification/nile-error-notification.test.d.ts +1 -0
  132. package/dist/src/nile-error-notification/nile-error-notification.test.js +108 -0
  133. package/dist/src/nile-error-notification/nile-error-notification.test.js.map +1 -0
  134. package/dist/src/nile-file-preview/nile-file-preview.css.js +2 -2
  135. package/dist/src/nile-file-preview/nile-file-preview.css.js.map +1 -1
  136. package/dist/src/nile-file-preview/nile-file-preview.d.ts +1 -4
  137. package/dist/src/nile-file-preview/nile-file-preview.js +21 -47
  138. package/dist/src/nile-file-preview/nile-file-preview.js.map +1 -1
  139. package/dist/src/nile-file-preview/nile-file-preview.template.d.ts +6 -6
  140. package/dist/src/nile-file-preview/nile-file-preview.template.js +53 -23
  141. package/dist/src/nile-file-preview/nile-file-preview.template.js.map +1 -1
  142. package/dist/src/nile-file-preview/nile-file-preview.test.d.ts +0 -6
  143. package/dist/src/nile-file-preview/nile-file-preview.test.js +106 -28
  144. package/dist/src/nile-file-preview/nile-file-preview.test.js.map +1 -1
  145. package/dist/src/nile-file-preview/utils/nile-file-preview.util.d.ts +3 -2
  146. package/dist/src/nile-file-preview/utils/nile-file-preview.util.js +32 -7
  147. package/dist/src/nile-file-preview/utils/nile-file-preview.util.js.map +1 -1
  148. package/dist/src/nile-file-upload/nile-file-upload.css.js +15 -5
  149. package/dist/src/nile-file-upload/nile-file-upload.css.js.map +1 -1
  150. package/dist/src/nile-file-upload/nile-file-upload.d.ts +4 -1
  151. package/dist/src/nile-file-upload/nile-file-upload.js +13 -1
  152. package/dist/src/nile-file-upload/nile-file-upload.js.map +1 -1
  153. package/dist/src/nile-file-upload/nile-file-upload.template.js +19 -15
  154. package/dist/src/nile-file-upload/nile-file-upload.template.js.map +1 -1
  155. package/dist/src/nile-file-upload/nile-file-upload.test.d.ts +0 -6
  156. package/dist/src/nile-file-upload/nile-file-upload.test.js +106 -28
  157. package/dist/src/nile-file-upload/nile-file-upload.test.js.map +1 -1
  158. package/dist/src/nile-file-upload/types/file-upload.enums.d.ts +17 -3
  159. package/dist/src/nile-file-upload/types/file-upload.enums.js +17 -1
  160. package/dist/src/nile-file-upload/types/file-upload.enums.js.map +1 -1
  161. package/dist/src/nile-file-upload/utils/drag-drop.util.d.ts +2 -0
  162. package/dist/src/nile-file-upload/utils/drag-drop.util.js +14 -8
  163. package/dist/src/nile-file-upload/utils/drag-drop.util.js.map +1 -1
  164. package/dist/src/nile-file-upload/utils/file-validation.util.js +89 -10
  165. package/dist/src/nile-file-upload/utils/file-validation.util.js.map +1 -1
  166. package/dist/src/nile-filter-chip/nile-filter-chip.test.js +102 -77
  167. package/dist/src/nile-filter-chip/nile-filter-chip.test.js.map +1 -1
  168. package/dist/src/nile-form-error-message/nile-form-error-message.test.d.ts +1 -0
  169. package/dist/src/nile-form-error-message/nile-form-error-message.test.js +108 -0
  170. package/dist/src/nile-form-error-message/nile-form-error-message.test.js.map +1 -0
  171. package/dist/src/nile-form-group/nile-form-group.test.js +104 -51
  172. package/dist/src/nile-form-group/nile-form-group.test.js.map +1 -1
  173. package/dist/src/nile-form-help-text/nile-form-help-text.test.js +104 -84
  174. package/dist/src/nile-form-help-text/nile-form-help-text.test.js.map +1 -1
  175. package/dist/src/nile-format-date/nile-format-date.test.d.ts +1 -0
  176. package/dist/src/nile-format-date/nile-format-date.test.js +108 -0
  177. package/dist/src/nile-format-date/nile-format-date.test.js.map +1 -0
  178. package/dist/src/nile-grid/nile-grid-head-item/nile-grid-head-item.js +6 -5
  179. package/dist/src/nile-grid/nile-grid-head-item/nile-grid-head-item.js.map +1 -1
  180. package/dist/src/nile-grid/nile-grid-head-item/nile-grid-head-item.utils.d.ts +14 -0
  181. package/dist/src/nile-grid/nile-grid-head-item/nile-grid-head-item.utils.js +24 -0
  182. package/dist/src/nile-grid/nile-grid-head-item/nile-grid-head-item.utils.js.map +1 -1
  183. package/dist/src/nile-grid/nile-grid.d.ts +1 -0
  184. package/dist/src/nile-grid/nile-grid.js +5 -1
  185. package/dist/src/nile-grid/nile-grid.js.map +1 -1
  186. package/dist/src/nile-grid/nile-grid.utils.d.ts +6 -0
  187. package/dist/src/nile-grid/nile-grid.utils.js +13 -0
  188. package/dist/src/nile-grid/nile-grid.utils.js.map +1 -1
  189. package/dist/src/nile-heading/nile-heading.test.d.ts +1 -0
  190. package/dist/src/nile-heading/nile-heading.test.js +108 -0
  191. package/dist/src/nile-heading/nile-heading.test.js.map +1 -0
  192. package/dist/src/nile-hero/nile-hero.test.js +101 -38
  193. package/dist/src/nile-hero/nile-hero.test.js.map +1 -1
  194. package/dist/src/nile-icon/nile-icon.test.js +103 -40
  195. package/dist/src/nile-icon/nile-icon.test.js.map +1 -1
  196. package/dist/src/nile-icon-button/nile-icon-button.test.d.ts +1 -0
  197. package/dist/src/nile-icon-button/nile-icon-button.test.js +568 -0
  198. package/dist/src/nile-icon-button/nile-icon-button.test.js.map +1 -0
  199. package/dist/src/nile-inline-edit/nile-inline-edit.test.d.ts +1 -0
  200. package/dist/src/nile-inline-edit/nile-inline-edit.test.js +108 -0
  201. package/dist/src/nile-inline-edit/nile-inline-edit.test.js.map +1 -0
  202. package/dist/src/nile-input/nile-input.js +1 -1
  203. package/dist/src/nile-input/nile-input.js.map +1 -1
  204. package/dist/src/nile-input/nile-input.test.js +109 -139
  205. package/dist/src/nile-input/nile-input.test.js.map +1 -1
  206. package/dist/src/nile-link/nile-link.test.js +103 -67
  207. package/dist/src/nile-link/nile-link.test.js.map +1 -1
  208. package/dist/src/nile-list/nile-list.test.d.ts +1 -0
  209. package/dist/src/nile-list/nile-list.test.js +108 -0
  210. package/dist/src/nile-list/nile-list.test.js.map +1 -0
  211. package/dist/src/nile-list-item/nile-list-item.test.d.ts +1 -0
  212. package/dist/src/nile-list-item/nile-list-item.test.js +108 -0
  213. package/dist/src/nile-list-item/nile-list-item.test.js.map +1 -0
  214. package/dist/src/nile-lite-tooltip/nile-lite-tooltip.test.d.ts +2 -0
  215. package/dist/src/nile-lite-tooltip/nile-lite-tooltip.test.js +109 -0
  216. package/dist/src/nile-lite-tooltip/nile-lite-tooltip.test.js.map +1 -0
  217. package/dist/src/nile-loader/nile-loader.test.js +107 -40
  218. package/dist/src/nile-loader/nile-loader.test.js.map +1 -1
  219. package/dist/src/nile-menu/nile-menu.test.d.ts +1 -0
  220. package/dist/src/nile-menu/nile-menu.test.js +113 -0
  221. package/dist/src/nile-menu/nile-menu.test.js.map +1 -0
  222. package/dist/src/nile-menu-item/nile-menu-item.test.d.ts +1 -0
  223. package/dist/src/nile-menu-item/nile-menu-item.test.js +113 -0
  224. package/dist/src/nile-menu-item/nile-menu-item.test.js.map +1 -0
  225. package/dist/src/nile-option/nile-option.test.d.ts +1 -0
  226. package/dist/src/nile-option/nile-option.test.js +108 -0
  227. package/dist/src/nile-option/nile-option.test.js.map +1 -0
  228. package/dist/src/nile-option-group/nile-option-group.test.d.ts +1 -0
  229. package/dist/src/nile-option-group/nile-option-group.test.js +108 -0
  230. package/dist/src/nile-option-group/nile-option-group.test.js.map +1 -0
  231. package/dist/src/nile-page-header/nile-page-header.test.d.ts +1 -0
  232. package/dist/src/nile-page-header/nile-page-header.test.js +108 -0
  233. package/dist/src/nile-page-header/nile-page-header.test.js.map +1 -0
  234. package/dist/src/nile-pagination/nile-pagination.test.d.ts +1 -0
  235. package/dist/src/nile-pagination/nile-pagination.test.js +108 -0
  236. package/dist/src/nile-pagination/nile-pagination.test.js.map +1 -0
  237. package/dist/src/nile-popover/nile-popover.test.js +103 -68
  238. package/dist/src/nile-popover/nile-popover.test.js.map +1 -1
  239. package/dist/src/nile-popup/nile-popup.test.js +104 -65
  240. package/dist/src/nile-popup/nile-popup.test.js.map +1 -1
  241. package/dist/src/nile-progress-bar/nile-progress-bar.test.js +104 -44
  242. package/dist/src/nile-progress-bar/nile-progress-bar.test.js.map +1 -1
  243. package/dist/src/nile-radio/nile-radio.test.js +103 -66
  244. package/dist/src/nile-radio/nile-radio.test.js.map +1 -1
  245. package/dist/src/nile-radio-group/nile-radio-group.test.d.ts +0 -1
  246. package/dist/src/nile-radio-group/nile-radio-group.test.js +105 -171
  247. package/dist/src/nile-radio-group/nile-radio-group.test.js.map +1 -1
  248. package/dist/src/nile-section-message/nile-section-message.test.d.ts +1 -0
  249. package/dist/src/nile-section-message/nile-section-message.test.js +108 -0
  250. package/dist/src/nile-section-message/nile-section-message.test.js.map +1 -0
  251. package/dist/src/nile-select/nile-select.test.d.ts +0 -5
  252. package/dist/src/nile-select/nile-select.test.js +105 -244
  253. package/dist/src/nile-select/nile-select.test.js.map +1 -1
  254. package/dist/src/nile-skeleton-loader/nile-skeleton-loader.test.d.ts +1 -0
  255. package/dist/src/nile-skeleton-loader/nile-skeleton-loader.test.js +108 -0
  256. package/dist/src/nile-skeleton-loader/nile-skeleton-loader.test.js.map +1 -0
  257. package/dist/src/nile-slide-toggle/nile-slide-toggle.test.js +104 -50
  258. package/dist/src/nile-slide-toggle/nile-slide-toggle.test.js.map +1 -1
  259. package/dist/src/nile-slider/nile-slider.test.d.ts +1 -0
  260. package/dist/src/nile-slider/nile-slider.test.js +108 -0
  261. package/dist/src/nile-slider/nile-slider.test.js.map +1 -0
  262. package/dist/src/nile-spinner/nile-spinner.test.d.ts +1 -0
  263. package/dist/src/nile-spinner/nile-spinner.test.js +569 -0
  264. package/dist/src/nile-spinner/nile-spinner.test.js.map +1 -0
  265. package/dist/src/nile-split-panel/nile-split-panel.test.d.ts +1 -0
  266. package/dist/src/nile-split-panel/nile-split-panel.test.js +108 -0
  267. package/dist/src/nile-split-panel/nile-split-panel.test.js.map +1 -0
  268. package/dist/src/nile-stepper/nile-stepper.test.d.ts +2 -0
  269. package/dist/src/nile-stepper/nile-stepper.test.js +109 -0
  270. package/dist/src/nile-stepper/nile-stepper.test.js.map +1 -0
  271. package/dist/src/nile-stepper-item/nile-stepper-item.test.d.ts +1 -0
  272. package/dist/src/nile-stepper-item/nile-stepper-item.test.js +108 -0
  273. package/dist/src/nile-stepper-item/nile-stepper-item.test.js.map +1 -0
  274. package/dist/src/nile-tab/nile-tab.test.d.ts +1 -0
  275. package/dist/src/nile-tab/nile-tab.test.js +108 -0
  276. package/dist/src/nile-tab/nile-tab.test.js.map +1 -0
  277. package/dist/src/nile-tab-group/nile-tab-group.test.js +105 -172
  278. package/dist/src/nile-tab-group/nile-tab-group.test.js.map +1 -1
  279. package/dist/src/nile-tab-panel/nile-tab-panel.test.d.ts +1 -0
  280. package/dist/src/nile-tab-panel/nile-tab-panel.test.js +108 -0
  281. package/dist/src/nile-tab-panel/nile-tab-panel.test.js.map +1 -0
  282. package/dist/src/nile-tag/nile-tag.test.d.ts +1 -0
  283. package/dist/src/nile-tag/nile-tag.test.js +574 -0
  284. package/dist/src/nile-tag/nile-tag.test.js.map +1 -0
  285. package/dist/src/nile-textarea/nile-textarea.test.d.ts +1 -1
  286. package/dist/src/nile-textarea/nile-textarea.test.js +105 -84
  287. package/dist/src/nile-textarea/nile-textarea.test.js.map +1 -1
  288. package/dist/src/nile-title/nile-title.test.d.ts +1 -0
  289. package/dist/src/nile-title/nile-title.test.js +108 -0
  290. package/dist/src/nile-title/nile-title.test.js.map +1 -0
  291. package/dist/src/nile-toast/nile-toast.test.d.ts +1 -0
  292. package/dist/src/nile-toast/nile-toast.test.js +526 -0
  293. package/dist/src/nile-toast/nile-toast.test.js.map +1 -0
  294. package/dist/src/nile-toolbar/nile-toolbar.test.d.ts +1 -0
  295. package/dist/src/nile-toolbar/nile-toolbar.test.js +108 -0
  296. package/dist/src/nile-toolbar/nile-toolbar.test.js.map +1 -0
  297. package/dist/src/nile-tooltip/nile-tooltip.test.d.ts +1 -0
  298. package/dist/src/nile-tooltip/nile-tooltip.test.js +546 -0
  299. package/dist/src/nile-tooltip/nile-tooltip.test.js.map +1 -0
  300. package/dist/src/nile-virtual-select/nile-virtual-select.test.d.ts +1 -7
  301. package/dist/src/nile-virtual-select/nile-virtual-select.test.js +105 -628
  302. package/dist/src/nile-virtual-select/nile-virtual-select.test.js.map +1 -1
  303. package/dist/src/version.js +1 -1
  304. package/dist/src/version.js.map +1 -1
  305. package/dist/tsconfig.tsbuildinfo +1 -1
  306. package/package.json +1 -1
  307. package/rollup.config.js +7 -1
  308. package/src/nile-accordion/nile-accordian.test.ts +102 -116
  309. package/src/nile-auto-complete/nile-auto-complete.css.ts +1 -1
  310. package/src/nile-auto-complete/nile-auto-complete.test.ts +102 -145
  311. package/src/nile-auto-complete/nile-auto-complete.ts +1 -1
  312. package/src/nile-avatar/nile-avatar.test.ts +102 -112
  313. package/src/nile-badge/nile-badge.test.ts +642 -30
  314. package/src/nile-breadcrumb/nile-breadcrumb.test.ts +107 -0
  315. package/src/nile-breadcrumb-item/nile-breadcrumb-item.test.ts +106 -0
  316. package/src/nile-button/nile-button.test.ts +593 -61
  317. package/src/nile-button-filter/nile-button-filter.test.ts +106 -0
  318. package/src/nile-button-toggle/nile-button-toggle.test.ts +106 -0
  319. package/src/nile-button-toggle-group/nile-button-toggle-group.test.ts +104 -126
  320. package/src/nile-calendar/nile-calendar.test.ts +102 -406
  321. package/src/nile-card/nile-card.test.ts +103 -71
  322. package/src/nile-checkbox/nile-checkbox.test.ts +614 -108
  323. package/src/nile-chip/nile-chip.test.ts +102 -136
  324. package/src/nile-circular-progressbar/nile-circular-progressbar.test.ts +106 -0
  325. package/src/nile-date-picker/nile-date-picker.test.ts +106 -0
  326. package/src/nile-dialog/nile-dialog.test.ts +102 -164
  327. package/src/nile-divider/nile-divider.test.ts +659 -0
  328. package/src/nile-drawer/nile-drawer.test.ts +105 -105
  329. package/src/nile-dropdown/nile-dropdown.test.ts +102 -190
  330. package/src/nile-empty-state/nile-empty-state.test.ts +104 -67
  331. package/src/nile-error-message/nile-error-message.test.ts +104 -67
  332. package/src/nile-error-notification/nile-error-notification.test.ts +106 -0
  333. package/src/nile-file-preview/nile-file-preview.css.ts +2 -2
  334. package/src/nile-file-preview/nile-file-preview.template.ts +59 -23
  335. package/src/nile-file-preview/nile-file-preview.test.ts +105 -37
  336. package/src/nile-file-preview/nile-file-preview.ts +23 -56
  337. package/src/nile-file-preview/utils/nile-file-preview.util.ts +37 -8
  338. package/src/nile-file-upload/nile-file-upload.css.ts +15 -5
  339. package/src/nile-file-upload/nile-file-upload.template.ts +22 -18
  340. package/src/nile-file-upload/nile-file-upload.test.ts +105 -37
  341. package/src/nile-file-upload/nile-file-upload.ts +11 -3
  342. package/src/nile-file-upload/types/file-upload.enums.ts +20 -4
  343. package/src/nile-file-upload/utils/drag-drop.util.ts +20 -11
  344. package/src/nile-file-upload/utils/file-validation.util.ts +104 -22
  345. package/src/nile-filter-chip/nile-filter-chip.test.ts +103 -89
  346. package/src/nile-form-error-message/nile-form-error-message.test.ts +106 -0
  347. package/src/nile-form-group/nile-form-group.test.ts +103 -60
  348. package/src/nile-form-help-text/nile-form-help-text.test.ts +102 -106
  349. package/src/nile-format-date/nile-format-date.test.ts +106 -0
  350. package/src/nile-grid/nile-grid-head-item/nile-grid-head-item.ts +7 -5
  351. package/src/nile-grid/nile-grid-head-item/nile-grid-head-item.utils.ts +28 -0
  352. package/src/nile-grid/nile-grid.ts +6 -1
  353. package/src/nile-grid/nile-grid.utils.ts +18 -1
  354. package/src/nile-heading/nile-heading.test.ts +106 -0
  355. package/src/nile-hero/nile-hero.test.ts +103 -42
  356. package/src/nile-icon/nile-icon.test.ts +103 -50
  357. package/src/nile-icon-button/nile-icon-button.test.ts +667 -0
  358. package/src/nile-inline-edit/nile-inline-edit.test.ts +106 -0
  359. package/src/nile-input/nile-input.test.ts +105 -164
  360. package/src/nile-input/nile-input.ts +1 -1
  361. package/src/nile-link/nile-link.test.ts +104 -81
  362. package/src/nile-list/nile-list.test.ts +106 -0
  363. package/src/nile-list-item/nile-list-item.test.ts +106 -0
  364. package/src/nile-lite-tooltip/nile-lite-tooltip.test.ts +107 -0
  365. package/src/nile-loader/nile-loader.test.ts +103 -48
  366. package/src/nile-menu/nile-menu.test.ts +106 -0
  367. package/src/nile-menu-item/nile-menu-item.test.ts +106 -0
  368. package/src/nile-option/nile-option.test.ts +106 -0
  369. package/src/nile-option-group/nile-option-group.test.ts +106 -0
  370. package/src/nile-page-header/nile-page-header.test.ts +106 -0
  371. package/src/nile-pagination/nile-pagination.test.ts +106 -0
  372. package/src/nile-popover/nile-popover.test.ts +103 -83
  373. package/src/nile-popup/nile-popup.test.ts +102 -82
  374. package/src/nile-progress-bar/nile-progress-bar.test.ts +103 -52
  375. package/src/nile-radio/nile-radio.test.ts +103 -78
  376. package/src/nile-radio-group/nile-radio-group.test.ts +104 -213
  377. package/src/nile-section-message/nile-section-message.test.ts +106 -0
  378. package/src/nile-select/nile-select.test.ts +105 -308
  379. package/src/nile-skeleton-loader/nile-skeleton-loader.test.ts +106 -0
  380. package/src/nile-slide-toggle/nile-slide-toggle.test.ts +103 -58
  381. package/src/nile-slider/nile-slider.test.ts +106 -0
  382. package/src/nile-spinner/nile-spinner.test.ts +668 -0
  383. package/src/nile-split-panel/nile-split-panel.test.ts +106 -0
  384. package/src/nile-stepper/nile-stepper.test.ts +107 -0
  385. package/src/nile-stepper-item/nile-stepper-item.test.ts +106 -0
  386. package/src/nile-tab/nile-tab.test.ts +106 -0
  387. package/src/nile-tab-group/nile-tab-group.test.ts +104 -211
  388. package/src/nile-tab-panel/nile-tab-panel.test.ts +106 -0
  389. package/src/nile-tag/nile-tag.test.ts +675 -0
  390. package/src/nile-textarea/nile-textarea.test.ts +104 -100
  391. package/src/nile-title/nile-title.test.ts +106 -0
  392. package/src/nile-toast/nile-toast.test.ts +625 -0
  393. package/src/nile-toolbar/nile-toolbar.test.ts +106 -0
  394. package/src/nile-tooltip/nile-tooltip.test.ts +645 -0
  395. package/src/nile-virtual-select/nile-virtual-select.test.ts +104 -772
  396. package/vscode-html-custom-data.json +8 -3
  397. package/web-test-runner.config.mjs +4 -2
  398. package/dist/axe.min-2720cd56.esm.js +0 -1
  399. package/dist/axe.min-69d47269.cjs.js +0 -2
  400. package/dist/axe.min-69d47269.cjs.js.map +0 -1
  401. package/dist/css-tag-bb10c0fa.cjs.js +0 -6
  402. package/dist/css-tag-bb10c0fa.cjs.js.map +0 -1
  403. package/dist/css-tag-dc564feb.esm.js +0 -6
  404. package/dist/fixture-958445f8.cjs.js +0 -395
  405. package/dist/fixture-958445f8.cjs.js.map +0 -1
  406. package/dist/fixture-985bba12.esm.js +0 -569
  407. package/dist/nile-accordion/nile-accordian.test.cjs.js +0 -2
  408. package/dist/nile-accordion/nile-accordian.test.cjs.js.map +0 -1
  409. package/dist/nile-accordion/nile-accordian.test.esm.js +0 -1
  410. package/dist/nile-auto-complete/nile-auto-complete.test.cjs.js +0 -2
  411. package/dist/nile-auto-complete/nile-auto-complete.test.cjs.js.map +0 -1
  412. package/dist/nile-auto-complete/nile-auto-complete.test.esm.js +0 -9
  413. package/dist/nile-avatar/nile-avatar.test.cjs.js +0 -2
  414. package/dist/nile-avatar/nile-avatar.test.cjs.js.map +0 -1
  415. package/dist/nile-avatar/nile-avatar.test.esm.js +0 -11
  416. package/dist/nile-badge/nile-badge.test.cjs.js +0 -2
  417. package/dist/nile-badge/nile-badge.test.cjs.js.map +0 -1
  418. package/dist/nile-badge/nile-badge.test.esm.js +0 -1
  419. package/dist/nile-button/nile-button.test.cjs.js +0 -2
  420. package/dist/nile-button/nile-button.test.cjs.js.map +0 -1
  421. package/dist/nile-button/nile-button.test.esm.js +0 -4
  422. package/dist/nile-button-toggle-group/nile-button-toggle-group.test.cjs.js +0 -2
  423. package/dist/nile-button-toggle-group/nile-button-toggle-group.test.cjs.js.map +0 -1
  424. package/dist/nile-button-toggle-group/nile-button-toggle-group.test.esm.js +0 -49
  425. package/dist/nile-calendar/nile-calendar.test.cjs.js +0 -2
  426. package/dist/nile-calendar/nile-calendar.test.cjs.js.map +0 -1
  427. package/dist/nile-calendar/nile-calendar.test.esm.js +0 -11
  428. package/dist/nile-card/nile-card.test.cjs.js +0 -2
  429. package/dist/nile-card/nile-card.test.cjs.js.map +0 -1
  430. package/dist/nile-card/nile-card.test.esm.js +0 -51
  431. package/dist/nile-checkbox/nile-checkbox.test.cjs.js +0 -2
  432. package/dist/nile-checkbox/nile-checkbox.test.cjs.js.map +0 -1
  433. package/dist/nile-checkbox/nile-checkbox.test.esm.js +0 -17
  434. package/dist/nile-chip/nile-chip.test.cjs.js +0 -2
  435. package/dist/nile-chip/nile-chip.test.cjs.js.map +0 -1
  436. package/dist/nile-chip/nile-chip.test.esm.js +0 -1
  437. package/dist/nile-dialog/nile-dialog.test.cjs.js +0 -2
  438. package/dist/nile-dialog/nile-dialog.test.cjs.js.map +0 -1
  439. package/dist/nile-dialog/nile-dialog.test.esm.js +0 -7
  440. package/dist/nile-drawer/nile-drawer.test.cjs.js +0 -2
  441. package/dist/nile-drawer/nile-drawer.test.cjs.js.map +0 -1
  442. package/dist/nile-drawer/nile-drawer.test.esm.js +0 -17
  443. package/dist/nile-dropdown/nile-dropdown.test.cjs.js +0 -2
  444. package/dist/nile-dropdown/nile-dropdown.test.cjs.js.map +0 -1
  445. package/dist/nile-dropdown/nile-dropdown.test.esm.js +0 -28
  446. package/dist/nile-empty-state/nile-empty-state.test.cjs.js +0 -2
  447. package/dist/nile-empty-state/nile-empty-state.test.cjs.js.map +0 -1
  448. package/dist/nile-empty-state/nile-empty-state.test.esm.js +0 -9
  449. package/dist/nile-error-message/nile-error-message.test.cjs.js +0 -2
  450. package/dist/nile-error-message/nile-error-message.test.cjs.js.map +0 -1
  451. package/dist/nile-error-message/nile-error-message.test.esm.js +0 -1
  452. package/dist/nile-file-preview/nile-file-preview.test.cjs.js +0 -2
  453. package/dist/nile-file-preview/nile-file-preview.test.cjs.js.map +0 -1
  454. package/dist/nile-file-preview/nile-file-preview.test.esm.js +0 -1
  455. package/dist/nile-file-upload/nile-file-upload.test.cjs.js +0 -2
  456. package/dist/nile-file-upload/nile-file-upload.test.cjs.js.map +0 -1
  457. package/dist/nile-file-upload/nile-file-upload.test.esm.js +0 -1
  458. package/dist/nile-filter-chip/nile-filter-chip.test.cjs.js +0 -2
  459. package/dist/nile-filter-chip/nile-filter-chip.test.cjs.js.map +0 -1
  460. package/dist/nile-filter-chip/nile-filter-chip.test.esm.js +0 -20
  461. package/dist/nile-form-group/nile-form-group.test.cjs.js +0 -2
  462. package/dist/nile-form-group/nile-form-group.test.cjs.js.map +0 -1
  463. package/dist/nile-form-group/nile-form-group.test.esm.js +0 -1
  464. package/dist/nile-form-help-text/nile-form-help-text.test.cjs.js +0 -2
  465. package/dist/nile-form-help-text/nile-form-help-text.test.cjs.js.map +0 -1
  466. package/dist/nile-form-help-text/nile-form-help-text.test.esm.js +0 -1
  467. package/dist/nile-hero/nile-hero.test.cjs.js +0 -2
  468. package/dist/nile-hero/nile-hero.test.cjs.js.map +0 -1
  469. package/dist/nile-hero/nile-hero.test.esm.js +0 -14
  470. package/dist/nile-icon/nile-icon.test.cjs.js +0 -2
  471. package/dist/nile-icon/nile-icon.test.cjs.js.map +0 -1
  472. package/dist/nile-icon/nile-icon.test.esm.js +0 -1
  473. package/dist/nile-input/nile-input.test.cjs.js +0 -2
  474. package/dist/nile-input/nile-input.test.cjs.js.map +0 -1
  475. package/dist/nile-input/nile-input.test.esm.js +0 -17
  476. package/dist/nile-link/nile-link.test.cjs.js +0 -2
  477. package/dist/nile-link/nile-link.test.cjs.js.map +0 -1
  478. package/dist/nile-link/nile-link.test.esm.js +0 -1
  479. package/dist/nile-loader/nile-loader.test.cjs.js +0 -2
  480. package/dist/nile-loader/nile-loader.test.cjs.js.map +0 -1
  481. package/dist/nile-loader/nile-loader.test.esm.js +0 -1
  482. package/dist/nile-popover/nile-popover.test.cjs.js +0 -2
  483. package/dist/nile-popover/nile-popover.test.cjs.js.map +0 -1
  484. package/dist/nile-popover/nile-popover.test.esm.js +0 -21
  485. package/dist/nile-popup/nile-popup.test.cjs.js +0 -2
  486. package/dist/nile-popup/nile-popup.test.cjs.js.map +0 -1
  487. package/dist/nile-popup/nile-popup.test.esm.js +0 -1
  488. package/dist/nile-progress-bar/nile-progress-bar.test.cjs.js +0 -2
  489. package/dist/nile-progress-bar/nile-progress-bar.test.cjs.js.map +0 -1
  490. package/dist/nile-progress-bar/nile-progress-bar.test.esm.js +0 -1
  491. package/dist/nile-radio/nile-radio.test.cjs.js +0 -2
  492. package/dist/nile-radio/nile-radio.test.cjs.js.map +0 -1
  493. package/dist/nile-radio/nile-radio.test.esm.js +0 -1
  494. package/dist/nile-radio-group/nile-radio-group.test.cjs.js +0 -2
  495. package/dist/nile-radio-group/nile-radio-group.test.cjs.js.map +0 -1
  496. package/dist/nile-radio-group/nile-radio-group.test.esm.js +0 -57
  497. package/dist/nile-select/nile-select.test.cjs.js +0 -2
  498. package/dist/nile-select/nile-select.test.cjs.js.map +0 -1
  499. package/dist/nile-select/nile-select.test.esm.js +0 -55
  500. package/dist/nile-slide-toggle/nile-slide-toggle.test.cjs.js +0 -2
  501. package/dist/nile-slide-toggle/nile-slide-toggle.test.cjs.js.map +0 -1
  502. package/dist/nile-slide-toggle/nile-slide-toggle.test.esm.js +0 -1
  503. package/dist/nile-tab-group/nile-tab-group.test.cjs.js +0 -2
  504. package/dist/nile-tab-group/nile-tab-group.test.cjs.js.map +0 -1
  505. package/dist/nile-tab-group/nile-tab-group.test.esm.js +0 -65
  506. package/dist/nile-textarea/nile-textarea.test.cjs.js +0 -2
  507. package/dist/nile-textarea/nile-textarea.test.cjs.js.map +0 -1
  508. package/dist/nile-textarea/nile-textarea.test.esm.js +0 -1
  509. package/dist/nile-virtual-select/nile-virtual-select.test.cjs.js +0 -2
  510. package/dist/nile-virtual-select/nile-virtual-select.test.cjs.js.map +0 -1
  511. package/dist/nile-virtual-select/nile-virtual-select.test.esm.js +0 -93
  512. package/dist/scopedElementsWrapper-31107e48.esm.js +0 -1
  513. package/dist/scopedElementsWrapper-9b188ea6.cjs.js +0 -2
  514. package/dist/scopedElementsWrapper-9b188ea6.cjs.js.map +0 -1
  515. package/dist/sinon-esm-68c8e378.esm.js +0 -1
  516. package/dist/sinon-esm-97570c13.cjs.js +0 -2
  517. package/dist/sinon-esm-97570c13.cjs.js.map +0 -1
@@ -1,116 +1,648 @@
1
- import { expect, fixture, html } from '@open-wc/testing';
2
- import './nile-button'; // Adjust the import path as necessary
1
+ import { expect, fixture, html, elementUpdated } from '@open-wc/testing';
2
+ import './nile-button';
3
3
  import NileButton from './nile-button';
4
4
 
5
5
  describe('NileButton', () => {
6
- it('should render with default properties', async () => {
6
+ // === RENDERING TESTS ===
7
+ it('1. should render without errors', async () => {
7
8
  const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
8
9
  expect(el).to.exist;
10
+ });
11
+
12
+ it('2. should have a shadow root', async () => {
13
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
14
+ expect(el.shadowRoot).to.not.be.null;
15
+ });
16
+
17
+ it('3. should render a button element by default', async () => {
18
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
19
+ const button = el.shadowRoot!.querySelector('.button');
20
+ expect(button!.tagName).to.equal('BUTTON');
21
+ });
22
+
23
+ it('4. should render an anchor element when href is set', async () => {
24
+ const el = await fixture<NileButton>(html`<nile-button href="https://example.com"></nile-button>`);
25
+ const anchor = el.shadowRoot!.querySelector('.button');
26
+ expect(anchor!.tagName).to.equal('A');
27
+ });
28
+
29
+ it('5. should render slot content', async () => {
30
+ const el = await fixture<NileButton>(html`<nile-button>Click Me</nile-button>`);
31
+ expect(el.textContent!.trim()).to.equal('Click Me');
32
+ });
33
+
34
+ it('6. should render prefix slot', async () => {
35
+ const el = await fixture<NileButton>(html`<nile-button><span slot="prefix">P</span>Label</nile-button>`);
36
+ const prefixSlot = el.shadowRoot!.querySelector('slot[name="prefix"]');
37
+ expect(prefixSlot).to.exist;
38
+ });
39
+
40
+ it('7. should render suffix slot', async () => {
41
+ const el = await fixture<NileButton>(html`<nile-button><span slot="suffix">S</span>Label</nile-button>`);
42
+ const suffixSlot = el.shadowRoot!.querySelector('slot[name="suffix"]');
43
+ expect(suffixSlot).to.exist;
44
+ });
45
+
46
+ it('8. should render default slot for label', async () => {
47
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
48
+ const labelSlot = el.shadowRoot!.querySelector('slot:not([name])');
49
+ expect(labelSlot).to.exist;
50
+ });
51
+
52
+ // === DEFAULT PROPERTIES ===
53
+ it('9. should have variant default to primary', async () => {
54
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
9
55
  expect(el.variant).to.equal('primary');
56
+ });
57
+
58
+ it('10. should have size default to medium', async () => {
59
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
10
60
  expect(el.size).to.equal('medium');
61
+ });
62
+
63
+ it('11. should have type default to button', async () => {
64
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
11
65
  expect(el.type).to.equal('button');
66
+ });
67
+
68
+ it('12. should have disabled default to false', async () => {
69
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
12
70
  expect(el.disabled).to.be.false;
71
+ });
72
+
73
+ it('13. should have loading default to false', async () => {
74
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
13
75
  expect(el.loading).to.be.false;
14
76
  });
15
77
 
16
- it('should apply the correct classes based on properties', async () => {
17
- const el = await fixture<NileButton>(
18
- html`<nile-button variant="secondary" pill outline caret></nile-button>`
19
- );
78
+ it('14. should have caret default to false', async () => {
79
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
80
+ expect(el.caret).to.be.false;
81
+ });
82
+
83
+ it('15. should have outline default to false', async () => {
84
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
85
+ expect(el.outline).to.be.false;
86
+ });
87
+
88
+ it('16. should have pill default to false', async () => {
89
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
90
+ expect(el.pill).to.be.false;
91
+ });
92
+
93
+ it('17. should have circle default to false', async () => {
94
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
95
+ expect(el.circle).to.be.false;
96
+ });
97
+
98
+ it('18. should have name default to empty string', async () => {
99
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
100
+ expect(el.name).to.equal('');
101
+ });
102
+
103
+ it('19. should have value default to empty string', async () => {
104
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
105
+ expect(el.value).to.equal('');
106
+ });
107
+
108
+ it('20. should have href default to empty string', async () => {
109
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
110
+ expect(el.href).to.equal('');
111
+ });
112
+
113
+ it('21. should have hideBorder default to false', async () => {
114
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
115
+ expect(el.hideBorder).to.be.false;
116
+ });
117
+
118
+ it('22. should have title default to empty string', async () => {
119
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
120
+ expect(el.title).to.equal('');
121
+ });
122
+
123
+ // === VARIANT TESTS ===
124
+ it('23. should apply primary variant class', async () => {
125
+ const el = await fixture<NileButton>(html`<nile-button variant="primary"></nile-button>`);
126
+ const button = el.shadowRoot!.querySelector('.button');
127
+ expect(button!.classList.contains('button--primary')).to.be.true;
128
+ });
129
+
130
+ it('24. should apply secondary variant class', async () => {
131
+ const el = await fixture<NileButton>(html`<nile-button variant="secondary"></nile-button>`);
20
132
  const button = el.shadowRoot!.querySelector('.button');
21
133
  expect(button!.classList.contains('button--secondary')).to.be.true;
22
- expect(button!.classList.contains('button--pill')).to.be.true;
23
- expect(button!.classList.contains('button--outline')).to.be.true;
24
- expect(button!.classList.contains('button--caret')).to.be.true;
25
134
  });
26
135
 
27
- it('should be disabled when the disabled property is set', async () => {
28
- const el = await fixture<NileButton>(
29
- html`<nile-button disabled></nile-button>`
30
- );
136
+ it('25. should apply tertiary variant class', async () => {
137
+ const el = await fixture<NileButton>(html`<nile-button variant="tertiary"></nile-button>`);
138
+ const button = el.shadowRoot!.querySelector('.button');
139
+ expect(button!.classList.contains('button--tertiary')).to.be.true;
140
+ });
141
+
142
+ it('26. should apply caution variant class', async () => {
143
+ const el = await fixture<NileButton>(html`<nile-button variant="caution"></nile-button>`);
144
+ const button = el.shadowRoot!.querySelector('.button');
145
+ expect(button!.classList.contains('button--caution')).to.be.true;
146
+ });
147
+
148
+ it('27. should apply ghost variant class', async () => {
149
+ const el = await fixture<NileButton>(html`<nile-button variant="ghost"></nile-button>`);
150
+ const button = el.shadowRoot!.querySelector('.button');
151
+ expect(button!.classList.contains('button--ghost')).to.be.true;
152
+ });
153
+
154
+ it('28. should apply destructive variant class', async () => {
155
+ const el = await fixture<NileButton>(html`<nile-button variant="destructive"></nile-button>`);
156
+ const button = el.shadowRoot!.querySelector('.button');
157
+ expect(button!.classList.contains('button--destructive')).to.be.true;
158
+ });
159
+
160
+ it('29. should apply secondary-grey variant class', async () => {
161
+ const el = await fixture<NileButton>(html`<nile-button variant="secondary-grey"></nile-button>`);
162
+ const button = el.shadowRoot!.querySelector('.button');
163
+ expect(button!.classList.contains('button--secondary-grey')).to.be.true;
164
+ });
165
+
166
+ it('30. should apply secondary-blue variant class', async () => {
167
+ const el = await fixture<NileButton>(html`<nile-button variant="secondary-blue"></nile-button>`);
168
+ const button = el.shadowRoot!.querySelector('.button');
169
+ expect(button!.classList.contains('button--secondary-blue')).to.be.true;
170
+ });
171
+
172
+ it('31. should reflect variant attribute', async () => {
173
+ const el = await fixture<NileButton>(html`<nile-button variant="caution"></nile-button>`);
174
+ expect(el.getAttribute('variant')).to.equal('caution');
175
+ });
176
+
177
+ // === DISABLED STATE ===
178
+ it('32. should be disabled when disabled property is set', async () => {
179
+ const el = await fixture<NileButton>(html`<nile-button disabled></nile-button>`);
31
180
  const button = el.shadowRoot!.querySelector('.button');
32
181
  expect(button!.hasAttribute('disabled')).to.be.true;
182
+ });
183
+
184
+ it('33. should have aria-disabled true when disabled', async () => {
185
+ const el = await fixture<NileButton>(html`<nile-button disabled></nile-button>`);
186
+ const button = el.shadowRoot!.querySelector('.button');
33
187
  expect(button!.getAttribute('aria-disabled')).to.equal('true');
34
188
  });
35
189
 
36
- it('should render a link when the href property is set', async () => {
37
- const el = await fixture<NileButton>(
38
- html`<nile-button
39
- href="https://example.com"
40
- target="_blank"
41
- ></nile-button>`
42
- );
190
+ it('34. should have aria-disabled false when not disabled', async () => {
191
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
43
192
  const button = el.shadowRoot!.querySelector('.button');
44
- expect(button!.tagName).to.equal('A');
45
- expect(button!.getAttribute('href')).to.equal('https://example.com');
46
- expect(button!.getAttribute('target')).to.equal('_blank');
193
+ expect(button!.getAttribute('aria-disabled')).to.equal('false');
47
194
  });
48
195
 
49
- it('should show a spinner when the loading property is set', async () => {
50
- const el = await fixture<NileButton>(
51
- html`<nile-button loading></nile-button>`
52
- );
53
- const spinner = el.shadowRoot!.querySelector('nile-spinner');
54
- expect(spinner).to.exist;
196
+ it('35. should apply disabled class when disabled', async () => {
197
+ const el = await fixture<NileButton>(html`<nile-button disabled></nile-button>`);
198
+ const button = el.shadowRoot!.querySelector('.button');
199
+ expect(button!.classList.contains('button--disabled')).to.be.true;
200
+ });
201
+
202
+ it('36. should have tabindex -1 when disabled', async () => {
203
+ const el = await fixture<NileButton>(html`<nile-button disabled></nile-button>`);
204
+ const button = el.shadowRoot!.querySelector('.button');
205
+ expect(button!.getAttribute('tabindex')).to.equal('-1');
55
206
  });
56
207
 
57
- it('should emit nile-focus and nile-blur events', async () => {
208
+ it('37. should have tabindex 0 when not disabled', async () => {
58
209
  const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
59
210
  const button = el.shadowRoot!.querySelector('.button');
211
+ expect(button!.getAttribute('tabindex')).to.equal('0');
212
+ });
60
213
 
61
- let focusEventEmitted = false;
62
- el.addEventListener('nile-focus', () => (focusEventEmitted = true));
63
- button!.dispatchEvent(new FocusEvent('focus'));
64
- expect(focusEventEmitted).to.be.true;
214
+ it('38. should prevent click events when disabled', async () => {
215
+ const el = await fixture<NileButton>(html`<nile-button disabled></nile-button>`);
216
+ let clicked = false;
217
+ el.addEventListener('click', () => (clicked = true));
218
+ el.click();
219
+ expect(clicked).to.be.false;
220
+ });
65
221
 
66
- let blurEventEmitted = false;
67
- el.addEventListener('nile-blur', () => (blurEventEmitted = true));
68
- button!.dispatchEvent(new FocusEvent('blur'));
69
- expect(blurEventEmitted).to.be.true;
222
+ it('39. should reflect disabled attribute', async () => {
223
+ const el = await fixture<NileButton>(html`<nile-button disabled></nile-button>`);
224
+ expect(el.hasAttribute('disabled')).to.be.true;
70
225
  });
71
226
 
72
- it('should simulate a click on the button', async () => {
73
- const el = await fixture<NileButton>(
74
- html`<nile-button>Click Me</nile-button>`
75
- );
227
+ // === LOADING STATE ===
228
+ it('40. should show spinner when loading', async () => {
229
+ const el = await fixture<NileButton>(html`<nile-button loading></nile-button>`);
230
+ const spinner = el.shadowRoot!.querySelector('nile-spinner');
231
+ expect(spinner).to.exist;
232
+ });
233
+
234
+ it('41. should not show spinner when not loading', async () => {
235
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
236
+ const spinner = el.shadowRoot!.querySelector('nile-spinner');
237
+ expect(spinner).to.be.null;
238
+ });
239
+
240
+ it('42. should apply loading class when loading', async () => {
241
+ const el = await fixture<NileButton>(html`<nile-button loading></nile-button>`);
76
242
  const button = el.shadowRoot!.querySelector('.button');
243
+ expect(button!.classList.contains('button--loading')).to.be.true;
244
+ });
77
245
 
246
+ it('43. should prevent click when loading', async () => {
247
+ const el = await fixture<NileButton>(html`<nile-button loading></nile-button>`);
78
248
  let clicked = false;
79
249
  el.addEventListener('click', () => (clicked = true));
80
250
  el.click();
81
- expect(clicked).to.be.true;
251
+ expect(clicked).to.be.false;
82
252
  });
83
253
 
84
- it('should focus and blur the button programmatically', async () => {
85
- const el = await fixture<NileButton>(
86
- html`<nile-button>Click Me</nile-button>`
87
- );
254
+ it('44. should reflect loading attribute', async () => {
255
+ const el = await fixture<NileButton>(html`<nile-button loading></nile-button>`);
256
+ expect(el.hasAttribute('loading')).to.be.true;
257
+ });
258
+
259
+ // === CARET ===
260
+ it('45. should show caret icon when caret is true', async () => {
261
+ const el = await fixture<NileButton>(html`<nile-button caret></nile-button>`);
262
+ const caret = el.shadowRoot!.querySelector('nile-icon[part="caret"]');
263
+ expect(caret).to.exist;
264
+ });
265
+
266
+ it('46. should not show caret icon when caret is false', async () => {
267
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
268
+ const caret = el.shadowRoot!.querySelector('nile-icon[part="caret"]');
269
+ expect(caret).to.be.null;
270
+ });
271
+
272
+ it('47. should apply caret class when caret is set', async () => {
273
+ const el = await fixture<NileButton>(html`<nile-button caret></nile-button>`);
274
+ const button = el.shadowRoot!.querySelector('.button');
275
+ expect(button!.classList.contains('button--caret')).to.be.true;
276
+ });
277
+
278
+ // === PILL ===
279
+ it('48. should apply pill class when pill is true', async () => {
280
+ const el = await fixture<NileButton>(html`<nile-button pill></nile-button>`);
88
281
  const button = el.shadowRoot!.querySelector('.button');
282
+ expect(button!.classList.contains('button--pill')).to.be.true;
283
+ });
284
+
285
+ it('49. should reflect pill attribute', async () => {
286
+ const el = await fixture<NileButton>(html`<nile-button pill></nile-button>`);
287
+ expect(el.hasAttribute('pill')).to.be.true;
288
+ });
289
+
290
+ // === CIRCLE ===
291
+ it('50. should apply circle class when circle is true', async () => {
292
+ const el = await fixture<NileButton>(html`<nile-button circle></nile-button>`);
293
+ const button = el.shadowRoot!.querySelector('.button');
294
+ expect(button!.classList.contains('button--circle')).to.be.true;
295
+ });
296
+
297
+ it('51. should reflect circle attribute', async () => {
298
+ const el = await fixture<NileButton>(html`<nile-button circle></nile-button>`);
299
+ expect(el.hasAttribute('circle')).to.be.true;
300
+ });
301
+
302
+ // === OUTLINE ===
303
+ it('52. should apply outline class when outline is true', async () => {
304
+ const el = await fixture<NileButton>(html`<nile-button outline></nile-button>`);
305
+ const button = el.shadowRoot!.querySelector('.button');
306
+ expect(button!.classList.contains('button--outline')).to.be.true;
307
+ });
308
+
309
+ it('53. should apply standard class when outline is false', async () => {
310
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
311
+ const button = el.shadowRoot!.querySelector('.button');
312
+ expect(button!.classList.contains('button--standard')).to.be.true;
313
+ });
314
+
315
+ // === LINK MODE (href) ===
316
+ it('54. should set href attribute on anchor', async () => {
317
+ const el = await fixture<NileButton>(html`<nile-button href="https://example.com"></nile-button>`);
318
+ const anchor = el.shadowRoot!.querySelector('.button');
319
+ expect(anchor!.getAttribute('href')).to.equal('https://example.com');
320
+ });
321
+
322
+ it('55. should set target on anchor', async () => {
323
+ const el = await fixture<NileButton>(html`<nile-button href="https://example.com" target="_blank"></nile-button>`);
324
+ const anchor = el.shadowRoot!.querySelector('.button');
325
+ expect(anchor!.getAttribute('target')).to.equal('_blank');
326
+ });
327
+
328
+ it('56. should set role=button on anchor', async () => {
329
+ const el = await fixture<NileButton>(html`<nile-button href="https://example.com"></nile-button>`);
330
+ const anchor = el.shadowRoot!.querySelector('.button');
331
+ expect(anchor!.getAttribute('role')).to.equal('button');
332
+ });
333
+
334
+ it('57. should set rel attribute on anchor', async () => {
335
+ const el = await fixture<NileButton>(html`<nile-button href="https://example.com"></nile-button>`);
336
+ const anchor = el.shadowRoot!.querySelector('.button');
337
+ expect(anchor!.getAttribute('rel')).to.equal('noreferrer noopener');
338
+ });
339
+
340
+ it('58. should set download attribute on anchor when provided', async () => {
341
+ const el = await fixture<NileButton>(html`<nile-button href="https://example.com" download="file.pdf"></nile-button>`);
342
+ const anchor = el.shadowRoot!.querySelector('.button');
343
+ expect(anchor!.getAttribute('download')).to.equal('file.pdf');
344
+ });
345
+
346
+ // === BUTTON TYPE ===
347
+ it('59. should set button type attribute', async () => {
348
+ const el = await fixture<NileButton>(html`<nile-button type="submit"></nile-button>`);
349
+ const button = el.shadowRoot!.querySelector('.button');
350
+ expect(button!.getAttribute('type')).to.equal('submit');
351
+ });
352
+
353
+ it('60. should support type=reset', async () => {
354
+ const el = await fixture<NileButton>(html`<nile-button type="reset"></nile-button>`);
355
+ expect(el.type).to.equal('reset');
356
+ });
357
+
358
+ it('61. should set name attribute on button', async () => {
359
+ const el = await fixture<NileButton>(html`<nile-button name="myButton"></nile-button>`);
360
+ const button = el.shadowRoot!.querySelector('.button');
361
+ expect(button!.getAttribute('name')).to.equal('myButton');
362
+ });
363
+
364
+ it('62. should set value attribute on button', async () => {
365
+ const el = await fixture<NileButton>(html`<nile-button value="myValue"></nile-button>`);
366
+ const button = el.shadowRoot!.querySelector('.button');
367
+ expect(button!.getAttribute('value')).to.equal('myValue');
368
+ });
369
+
370
+ // === EVENTS ===
371
+ it('63. should emit nile-focus when focused', async () => {
372
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
373
+ const button = el.shadowRoot!.querySelector('.button');
374
+ let focusEmitted = false;
375
+ el.addEventListener('nile-focus', () => (focusEmitted = true));
376
+ button!.dispatchEvent(new FocusEvent('focus'));
377
+ expect(focusEmitted).to.be.true;
378
+ });
379
+
380
+ it('64. should emit nile-blur when blurred', async () => {
381
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
382
+ const button = el.shadowRoot!.querySelector('.button');
383
+ let blurEmitted = false;
384
+ el.addEventListener('nile-blur', () => (blurEmitted = true));
385
+ button!.dispatchEvent(new FocusEvent('blur'));
386
+ expect(blurEmitted).to.be.true;
387
+ });
388
+
389
+ it('65. should emit nile-init on connectedCallback', async () => {
390
+ let initEmitted = false;
391
+ const container = await fixture(html`<div></div>`);
392
+ const el = document.createElement('nile-button') as NileButton;
393
+ el.addEventListener('nile-init', () => (initEmitted = true));
394
+ container.appendChild(el);
395
+ await el.updateComplete;
396
+ expect(initEmitted).to.be.true;
397
+ });
398
+
399
+ it('66. should emit nile-destroy on disconnectedCallback', async () => {
400
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
401
+ let destroyEmitted = false;
402
+ el.addEventListener('nile-destroy', () => (destroyEmitted = true));
403
+ el.remove();
404
+ expect(destroyEmitted).to.be.true;
405
+ });
406
+
407
+ // === FOCUS/BLUR METHODS ===
408
+ it('67. should focus programmatically', async () => {
409
+ const el = await fixture<NileButton>(html`<nile-button>Test</nile-button>`);
89
410
  el.focus();
90
411
  await el.updateComplete;
91
- const focusButton = el.shadowRoot!.querySelector('.button--focused');
92
- expect(focusButton!.classList.contains('button--focused')).to.be.true;
412
+ const button = el.shadowRoot!.querySelector('.button');
413
+ expect(button!.classList.contains('button--focused')).to.be.true;
414
+ });
93
415
 
416
+ it('68. should blur programmatically', async () => {
417
+ const el = await fixture<NileButton>(html`<nile-button>Test</nile-button>`);
418
+ el.focus();
419
+ await el.updateComplete;
94
420
  el.blur();
95
421
  await el.updateComplete;
96
- const blurButton = el.shadowRoot!.querySelector('.button');
97
- expect(blurButton!.classList.contains('button--focused')).to.be.false;
422
+ const button = el.shadowRoot!.querySelector('.button');
423
+ expect(button!.classList.contains('button--focused')).to.be.false;
98
424
  });
99
425
 
100
- it('should set a custom validation message', async () => {
101
- const el = await fixture<NileButton>(
102
- html`<nile-button type="submit"></nile-button>`
103
- );
426
+ it('69. should click programmatically', async () => {
427
+ const el = await fixture<NileButton>(html`<nile-button>Test</nile-button>`);
428
+ let clicked = false;
429
+ el.addEventListener('click', () => (clicked = true));
430
+ el.click();
431
+ expect(clicked).to.be.true;
432
+ });
433
+
434
+ // === VALIDATION ===
435
+ it('70. should set custom validation message', async () => {
436
+ const el = await fixture<NileButton>(html`<nile-button type="submit"></nile-button>`);
104
437
  const form = document.createElement('form');
105
438
  form.appendChild(el);
106
439
  document.body.appendChild(form);
107
-
108
- el.setCustomValidity('Invalid input');
109
- expect(el.validationMessage).to.equal('Invalid input');
110
-
440
+ el.setCustomValidity('Invalid');
441
+ expect(el.validationMessage).to.equal('Invalid');
111
442
  el.setCustomValidity('');
112
443
  expect(el.validationMessage).to.equal('');
113
-
114
444
  document.body.removeChild(form);
115
445
  });
446
+
447
+ it('71. should check validity', async () => {
448
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
449
+ expect(el.checkValidity()).to.be.true;
450
+ });
451
+
452
+ it('72. should report validity', async () => {
453
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
454
+ expect(el.reportValidity()).to.be.true;
455
+ });
456
+
457
+ it('73. should get validity state', async () => {
458
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
459
+ expect(el.validity).to.exist;
460
+ expect(el.validity.valid).to.be.true;
461
+ });
462
+
463
+ // === FORM INTEGRATION ===
464
+ it('74. should return null getForm when not in a form', async () => {
465
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
466
+ expect(el.getForm()).to.be.null;
467
+ });
468
+
469
+ it('75. should set formAction property', async () => {
470
+ const el = await fixture<NileButton>(html`<nile-button formaction="/submit"></nile-button>`);
471
+ expect(el.formAction).to.equal('/submit');
472
+ });
473
+
474
+ it('76. should set formMethod property', async () => {
475
+ const el = await fixture<NileButton>(html`<nile-button formmethod="post"></nile-button>`);
476
+ expect(el.formMethod).to.equal('post');
477
+ });
478
+
479
+ it('77. should set formNoValidate property', async () => {
480
+ const el = await fixture<NileButton>(html`<nile-button formnovalidate></nile-button>`);
481
+ expect(el.formNoValidate).to.be.true;
482
+ });
483
+
484
+ it('78. should set formTarget property', async () => {
485
+ const el = await fixture<NileButton>(html`<nile-button formtarget="_blank"></nile-button>`);
486
+ expect(el.formTarget).to.equal('_blank');
487
+ });
488
+
489
+ it('79. should set formEnctype property', async () => {
490
+ const el = await fixture<NileButton>(html`<nile-button formenctype="multipart/form-data"></nile-button>`);
491
+ expect(el.formEnctype).to.equal('multipart/form-data');
492
+ });
493
+
494
+ // === HIDE BORDER ===
495
+ it('80. should apply hideborder class when hide-border is set', async () => {
496
+ const el = await fixture<NileButton>(html`<nile-button hide-border></nile-button>`);
497
+ const button = el.shadowRoot!.querySelector('.button');
498
+ expect(button!.classList.contains('button--hideborder')).to.be.true;
499
+ });
500
+
501
+ it('81. should reflect hide-border attribute', async () => {
502
+ const el = await fixture<NileButton>(html`<nile-button hide-border></nile-button>`);
503
+ expect(el.hasAttribute('hide-border')).to.be.true;
504
+ });
505
+
506
+ // === TITLE ===
507
+ it('82. should set title on internal button', async () => {
508
+ const el = await fixture<NileButton>(html`<nile-button title="My Title"></nile-button>`);
509
+ const button = el.shadowRoot!.querySelector('.button');
510
+ expect(button!.getAttribute('title')).to.equal('My Title');
511
+ });
512
+
513
+ // === DYNAMIC PROPERTY CHANGES ===
514
+ it('83. should update variant dynamically', async () => {
515
+ const el = await fixture<NileButton>(html`<nile-button variant="primary"></nile-button>`);
516
+ el.variant = 'secondary';
517
+ await el.updateComplete;
518
+ const button = el.shadowRoot!.querySelector('.button');
519
+ expect(button!.classList.contains('button--secondary')).to.be.true;
520
+ });
521
+
522
+ it('84. should update disabled dynamically', async () => {
523
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
524
+ el.disabled = true;
525
+ await el.updateComplete;
526
+ const button = el.shadowRoot!.querySelector('.button');
527
+ expect(button!.hasAttribute('disabled')).to.be.true;
528
+ });
529
+
530
+ it('85. should update loading dynamically', async () => {
531
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
532
+ el.loading = true;
533
+ await el.updateComplete;
534
+ const spinner = el.shadowRoot!.querySelector('nile-spinner');
535
+ expect(spinner).to.exist;
536
+ });
537
+
538
+ it('86. should update caret dynamically', async () => {
539
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
540
+ el.caret = true;
541
+ await el.updateComplete;
542
+ const caret = el.shadowRoot!.querySelector('nile-icon[part="caret"]');
543
+ expect(caret).to.exist;
544
+ });
545
+
546
+ it('87. should update pill dynamically', async () => {
547
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
548
+ el.pill = true;
549
+ await el.updateComplete;
550
+ const button = el.shadowRoot!.querySelector('.button');
551
+ expect(button!.classList.contains('button--pill')).to.be.true;
552
+ });
553
+
554
+ it('88. should update circle dynamically', async () => {
555
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
556
+ el.circle = true;
557
+ await el.updateComplete;
558
+ const button = el.shadowRoot!.querySelector('.button');
559
+ expect(button!.classList.contains('button--circle')).to.be.true;
560
+ });
561
+
562
+ it('89. should update outline dynamically', async () => {
563
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
564
+ el.outline = true;
565
+ await el.updateComplete;
566
+ const button = el.shadowRoot!.querySelector('.button');
567
+ expect(button!.classList.contains('button--outline')).to.be.true;
568
+ });
569
+
570
+ it('90. should switch from button to anchor when href is set dynamically', async () => {
571
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
572
+ el.href = 'https://example.com';
573
+ await el.updateComplete;
574
+ const anchor = el.shadowRoot!.querySelector('.button');
575
+ expect(anchor!.tagName).to.equal('A');
576
+ });
577
+
578
+ // === CSS PARTS ===
579
+ it('91. should have base part on button', async () => {
580
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
581
+ const button = el.shadowRoot!.querySelector('[part~="base"]');
582
+ expect(button).to.exist;
583
+ });
584
+
585
+ it('92. should have prefix part', async () => {
586
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
587
+ const prefix = el.shadowRoot!.querySelector('[part~="prefix"]');
588
+ expect(prefix).to.exist;
589
+ });
590
+
591
+ it('93. should have label part', async () => {
592
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
593
+ const label = el.shadowRoot!.querySelector('[part~="label"]');
594
+ expect(label).to.exist;
595
+ });
596
+
597
+ it('94. should have suffix part', async () => {
598
+ const el = await fixture<NileButton>(html`<nile-button></nile-button>`);
599
+ const suffix = el.shadowRoot!.querySelector('[part~="suffix"]');
600
+ expect(suffix).to.exist;
601
+ });
602
+
603
+ it('95. should have caret part when caret is set', async () => {
604
+ const el = await fixture<NileButton>(html`<nile-button caret></nile-button>`);
605
+ const caret = el.shadowRoot!.querySelector('[part~="caret"]');
606
+ expect(caret).to.exist;
607
+ });
608
+
609
+ // === COMBINED STATES ===
610
+ it('96. should handle disabled and loading together', async () => {
611
+ const el = await fixture<NileButton>(html`<nile-button disabled loading></nile-button>`);
612
+ const button = el.shadowRoot!.querySelector('.button');
613
+ expect(button!.classList.contains('button--disabled')).to.be.true;
614
+ expect(button!.classList.contains('button--loading')).to.be.true;
615
+ });
616
+
617
+ it('97. should handle pill and outline together', async () => {
618
+ const el = await fixture<NileButton>(html`<nile-button pill outline></nile-button>`);
619
+ const button = el.shadowRoot!.querySelector('.button');
620
+ expect(button!.classList.contains('button--pill')).to.be.true;
621
+ expect(button!.classList.contains('button--outline')).to.be.true;
622
+ });
623
+
624
+ it('98. should show caret on link button', async () => {
625
+ const el = await fixture<NileButton>(html`<nile-button href="https://example.com" caret></nile-button>`);
626
+ const caret = el.shadowRoot!.querySelector('nile-icon[part="caret"]');
627
+ expect(caret).to.exist;
628
+ });
629
+
630
+ it('99. should show spinner on link button when loading', async () => {
631
+ const el = await fixture<NileButton>(html`<nile-button href="https://example.com" loading></nile-button>`);
632
+ const spinner = el.shadowRoot!.querySelector('nile-spinner');
633
+ expect(spinner).to.exist;
634
+ });
635
+
636
+ it('100. should handle all visual modifiers simultaneously', async () => {
637
+ const el = await fixture<NileButton>(
638
+ html`<nile-button variant="destructive" pill outline caret loading disabled></nile-button>`
639
+ );
640
+ const button = el.shadowRoot!.querySelector('.button');
641
+ expect(button!.classList.contains('button--destructive')).to.be.true;
642
+ expect(button!.classList.contains('button--pill')).to.be.true;
643
+ expect(button!.classList.contains('button--outline')).to.be.true;
644
+ expect(button!.classList.contains('button--caret')).to.be.true;
645
+ expect(button!.classList.contains('button--loading')).to.be.true;
646
+ expect(button!.classList.contains('button--disabled')).to.be.true;
647
+ });
116
648
  });