@aquera/nile-elements 1.6.7 → 1.6.9

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 (255) hide show
  1. package/README.md +12 -0
  2. package/dist/index.cjs.js +1 -1
  3. package/dist/index.esm.js +1 -1
  4. package/dist/index.js +1735 -495
  5. package/dist/internal/enum.cjs.js +1 -1
  6. package/dist/internal/enum.cjs.js.map +1 -1
  7. package/dist/internal/enum.esm.js +1 -1
  8. package/dist/nile-auto-complete/nile-auto-complete.cjs.js +1 -1
  9. package/dist/nile-auto-complete/nile-auto-complete.cjs.js.map +1 -1
  10. package/dist/nile-auto-complete/nile-auto-complete.esm.js +1 -1
  11. package/dist/nile-calendar/nile-calendar.cjs.js +1 -1
  12. package/dist/nile-calendar/nile-calendar.cjs.js.map +1 -1
  13. package/dist/nile-calendar/nile-calendar.css.cjs.js +1 -1
  14. package/dist/nile-calendar/nile-calendar.css.cjs.js.map +1 -1
  15. package/dist/nile-calendar/nile-calendar.css.esm.js +0 -3
  16. package/dist/nile-calendar/nile-calendar.esm.js +2 -2
  17. package/dist/nile-dropdown/nile-dropdown.cjs.js +1 -1
  18. package/dist/nile-dropdown/nile-dropdown.cjs.js.map +1 -1
  19. package/dist/nile-dropdown/nile-dropdown.esm.js +1 -1
  20. package/dist/nile-inline-sidebar/index.cjs.js +1 -1
  21. package/dist/nile-inline-sidebar/index.esm.js +1 -1
  22. package/dist/nile-inline-sidebar/nile-inline-sidebar.cjs.js +1 -1
  23. package/dist/nile-inline-sidebar/nile-inline-sidebar.cjs.js.map +1 -1
  24. package/dist/nile-inline-sidebar/nile-inline-sidebar.css.cjs.js +1 -1
  25. package/dist/nile-inline-sidebar/nile-inline-sidebar.css.cjs.js.map +1 -1
  26. package/dist/nile-inline-sidebar/nile-inline-sidebar.css.esm.js +76 -19
  27. package/dist/nile-inline-sidebar/nile-inline-sidebar.esm.js +42 -23
  28. package/dist/nile-inline-sidebar-group/nile-inline-sidebar-group.css.cjs.js +1 -1
  29. package/dist/nile-inline-sidebar-group/nile-inline-sidebar-group.css.cjs.js.map +1 -1
  30. package/dist/nile-inline-sidebar-group/nile-inline-sidebar-group.css.esm.js +8 -9
  31. package/dist/nile-inline-sidebar-item/index.cjs.js +1 -1
  32. package/dist/nile-inline-sidebar-item/index.esm.js +1 -1
  33. package/dist/nile-inline-sidebar-item/nile-inline-sidebar-item.cjs.js +1 -1
  34. package/dist/nile-inline-sidebar-item/nile-inline-sidebar-item.cjs.js.map +1 -1
  35. package/dist/nile-inline-sidebar-item/nile-inline-sidebar-item.css.cjs.js +1 -1
  36. package/dist/nile-inline-sidebar-item/nile-inline-sidebar-item.css.cjs.js.map +1 -1
  37. package/dist/nile-inline-sidebar-item/nile-inline-sidebar-item.css.esm.js +16 -18
  38. package/dist/nile-inline-sidebar-item/nile-inline-sidebar-item.esm.js +22 -4
  39. package/dist/nile-inline-sidebar-item-body/index.cjs.js +2 -0
  40. package/dist/nile-inline-sidebar-item-body/index.cjs.js.map +1 -0
  41. package/dist/nile-inline-sidebar-item-body/index.esm.js +1 -0
  42. package/dist/nile-inline-sidebar-item-body/nile-inline-sidebar-item-body.cjs.js +2 -0
  43. package/dist/nile-inline-sidebar-item-body/nile-inline-sidebar-item-body.cjs.js.map +1 -0
  44. package/dist/nile-inline-sidebar-item-body/nile-inline-sidebar-item-body.css.cjs.js +2 -0
  45. package/dist/nile-inline-sidebar-item-body/nile-inline-sidebar-item-body.css.cjs.js.map +1 -0
  46. package/dist/nile-inline-sidebar-item-body/nile-inline-sidebar-item-body.css.esm.js +53 -0
  47. package/dist/nile-inline-sidebar-item-body/nile-inline-sidebar-item-body.esm.js +13 -0
  48. package/dist/nile-inline-sidebar-item-header/index.cjs.js +2 -0
  49. package/dist/nile-inline-sidebar-item-header/index.cjs.js.map +1 -0
  50. package/dist/nile-inline-sidebar-item-header/index.esm.js +1 -0
  51. package/dist/nile-inline-sidebar-item-header/nile-inline-sidebar-item-header.cjs.js +2 -0
  52. package/dist/nile-inline-sidebar-item-header/nile-inline-sidebar-item-header.cjs.js.map +1 -0
  53. package/dist/nile-inline-sidebar-item-header/nile-inline-sidebar-item-header.css.cjs.js +2 -0
  54. package/dist/nile-inline-sidebar-item-header/nile-inline-sidebar-item-header.css.cjs.js.map +1 -0
  55. package/dist/nile-inline-sidebar-item-header/nile-inline-sidebar-item-header.css.esm.js +27 -0
  56. package/dist/nile-inline-sidebar-item-header/nile-inline-sidebar-item-header.esm.js +16 -0
  57. package/dist/nile-inline-sidebar-panel/index.cjs.js +2 -0
  58. package/dist/nile-inline-sidebar-panel/index.cjs.js.map +1 -0
  59. package/dist/nile-inline-sidebar-panel/index.esm.js +1 -0
  60. package/dist/nile-inline-sidebar-panel/nile-inline-sidebar-panel.cjs.js +2 -0
  61. package/dist/nile-inline-sidebar-panel/nile-inline-sidebar-panel.cjs.js.map +1 -0
  62. package/dist/nile-inline-sidebar-panel/nile-inline-sidebar-panel.css.cjs.js +2 -0
  63. package/dist/nile-inline-sidebar-panel/nile-inline-sidebar-panel.css.cjs.js.map +1 -0
  64. package/dist/nile-inline-sidebar-panel/nile-inline-sidebar-panel.css.esm.js +19 -0
  65. package/dist/nile-inline-sidebar-panel/nile-inline-sidebar-panel.esm.js +5 -0
  66. package/dist/nile-inline-sidebar-panel-group/index.cjs.js +2 -0
  67. package/dist/nile-inline-sidebar-panel-group/index.cjs.js.map +1 -0
  68. package/dist/nile-inline-sidebar-panel-group/index.esm.js +1 -0
  69. package/dist/nile-inline-sidebar-panel-group/nile-inline-sidebar-panel-group.cjs.js +2 -0
  70. package/dist/nile-inline-sidebar-panel-group/nile-inline-sidebar-panel-group.cjs.js.map +1 -0
  71. package/dist/nile-inline-sidebar-panel-group/nile-inline-sidebar-panel-group.css.cjs.js +2 -0
  72. package/dist/nile-inline-sidebar-panel-group/nile-inline-sidebar-panel-group.css.cjs.js.map +1 -0
  73. package/dist/nile-inline-sidebar-panel-group/nile-inline-sidebar-panel-group.css.esm.js +30 -0
  74. package/dist/nile-inline-sidebar-panel-group/nile-inline-sidebar-panel-group.esm.js +12 -0
  75. package/dist/nile-nav-tab/index.cjs.js +2 -0
  76. package/dist/nile-nav-tab/index.cjs.js.map +1 -0
  77. package/dist/nile-nav-tab/index.esm.js +1 -0
  78. package/dist/nile-nav-tab/nile-nav-tab.cjs.js +2 -0
  79. package/dist/nile-nav-tab/nile-nav-tab.cjs.js.map +1 -0
  80. package/dist/nile-nav-tab/nile-nav-tab.css.cjs.js +2 -0
  81. package/dist/nile-nav-tab/nile-nav-tab.css.cjs.js.map +1 -0
  82. package/dist/nile-nav-tab/nile-nav-tab.css.esm.js +190 -0
  83. package/dist/nile-nav-tab/nile-nav-tab.esm.js +36 -0
  84. package/dist/nile-nav-tab-group/index.cjs.js +2 -0
  85. package/dist/nile-nav-tab-group/index.cjs.js.map +1 -0
  86. package/dist/nile-nav-tab-group/index.esm.js +1 -0
  87. package/dist/nile-nav-tab-group/nile-nav-tab-group.cjs.js +4 -0
  88. package/dist/nile-nav-tab-group/nile-nav-tab-group.cjs.js.map +1 -0
  89. package/dist/nile-nav-tab-group/nile-nav-tab-group.css.cjs.js +2 -0
  90. package/dist/nile-nav-tab-group/nile-nav-tab-group.css.cjs.js.map +1 -0
  91. package/dist/nile-nav-tab-group/nile-nav-tab-group.css.esm.js +668 -0
  92. package/dist/nile-nav-tab-group/nile-nav-tab-group.esm.js +61 -0
  93. package/dist/nile-nav-tab-panel/index.cjs.js +2 -0
  94. package/dist/nile-nav-tab-panel/index.cjs.js.map +1 -0
  95. package/dist/nile-nav-tab-panel/index.esm.js +1 -0
  96. package/dist/nile-nav-tab-panel/nile-nav-tab-panel.cjs.js +2 -0
  97. package/dist/nile-nav-tab-panel/nile-nav-tab-panel.cjs.js.map +1 -0
  98. package/dist/nile-nav-tab-panel/nile-nav-tab-panel.css.cjs.js +2 -0
  99. package/dist/nile-nav-tab-panel/nile-nav-tab-panel.css.cjs.js.map +1 -0
  100. package/dist/nile-nav-tab-panel/nile-nav-tab-panel.css.esm.js +22 -0
  101. package/dist/nile-nav-tab-panel/nile-nav-tab-panel.esm.js +8 -0
  102. package/dist/nile-stepper-item/nile-stepper-item.cjs.js +1 -1
  103. package/dist/nile-stepper-item/nile-stepper-item.cjs.js.map +1 -1
  104. package/dist/nile-stepper-item/nile-stepper-item.esm.js +13 -13
  105. package/dist/nile-vertical-stepper-item/nile-vertical-stepper-item.cjs.js +1 -1
  106. package/dist/nile-vertical-stepper-item/nile-vertical-stepper-item.cjs.js.map +1 -1
  107. package/dist/nile-vertical-stepper-item/nile-vertical-stepper-item.esm.js +1 -1
  108. package/dist/src/index.d.ts +7 -0
  109. package/dist/src/index.js +7 -0
  110. package/dist/src/index.js.map +1 -1
  111. package/dist/src/internal/enum.d.ts +6 -0
  112. package/dist/src/internal/enum.js +7 -0
  113. package/dist/src/internal/enum.js.map +1 -1
  114. package/dist/src/nile-auto-complete/nile-auto-complete.js +1 -1
  115. package/dist/src/nile-auto-complete/nile-auto-complete.js.map +1 -1
  116. package/dist/src/nile-calendar/nile-calendar.css.js +0 -3
  117. package/dist/src/nile-calendar/nile-calendar.css.js.map +1 -1
  118. package/dist/src/nile-calendar/nile-calendar.js +2 -2
  119. package/dist/src/nile-calendar/nile-calendar.js.map +1 -1
  120. package/dist/src/nile-dropdown/nile-dropdown.d.ts +2 -0
  121. package/dist/src/nile-dropdown/nile-dropdown.js +21 -5
  122. package/dist/src/nile-dropdown/nile-dropdown.js.map +1 -1
  123. package/dist/src/nile-inline-sidebar/nile-inline-sidebar.css.d.ts +1 -0
  124. package/dist/src/nile-inline-sidebar/nile-inline-sidebar.css.js +75 -17
  125. package/dist/src/nile-inline-sidebar/nile-inline-sidebar.css.js.map +1 -1
  126. package/dist/src/nile-inline-sidebar/nile-inline-sidebar.d.ts +17 -1
  127. package/dist/src/nile-inline-sidebar/nile-inline-sidebar.js +147 -18
  128. package/dist/src/nile-inline-sidebar/nile-inline-sidebar.js.map +1 -1
  129. package/dist/src/nile-inline-sidebar-group/nile-inline-sidebar-group.css.d.ts +1 -0
  130. package/dist/src/nile-inline-sidebar-group/nile-inline-sidebar-group.css.js +7 -7
  131. package/dist/src/nile-inline-sidebar-group/nile-inline-sidebar-group.css.js.map +1 -1
  132. package/dist/src/nile-inline-sidebar-item/nile-inline-sidebar-item.css.d.ts +1 -1
  133. package/dist/src/nile-inline-sidebar-item/nile-inline-sidebar-item.css.js +15 -17
  134. package/dist/src/nile-inline-sidebar-item/nile-inline-sidebar-item.css.js.map +1 -1
  135. package/dist/src/nile-inline-sidebar-item/nile-inline-sidebar-item.d.ts +7 -1
  136. package/dist/src/nile-inline-sidebar-item/nile-inline-sidebar-item.js +63 -4
  137. package/dist/src/nile-inline-sidebar-item/nile-inline-sidebar-item.js.map +1 -1
  138. package/dist/src/nile-inline-sidebar-item-body/index.d.ts +1 -0
  139. package/dist/src/nile-inline-sidebar-item-body/index.js +2 -0
  140. package/dist/src/nile-inline-sidebar-item-body/index.js.map +1 -0
  141. package/dist/src/nile-inline-sidebar-item-body/nile-inline-sidebar-item-body.css.d.ts +9 -0
  142. package/dist/src/nile-inline-sidebar-item-body/nile-inline-sidebar-item-body.css.js +62 -0
  143. package/dist/src/nile-inline-sidebar-item-body/nile-inline-sidebar-item-body.css.js.map +1 -0
  144. package/dist/src/nile-inline-sidebar-item-body/nile-inline-sidebar-item-body.d.ts +45 -0
  145. package/dist/src/nile-inline-sidebar-item-body/nile-inline-sidebar-item-body.js +110 -0
  146. package/dist/src/nile-inline-sidebar-item-body/nile-inline-sidebar-item-body.js.map +1 -0
  147. package/dist/src/nile-inline-sidebar-item-header/index.d.ts +1 -0
  148. package/dist/src/nile-inline-sidebar-item-header/index.js +2 -0
  149. package/dist/src/nile-inline-sidebar-item-header/index.js.map +1 -0
  150. package/dist/src/nile-inline-sidebar-item-header/nile-inline-sidebar-item-header.css.d.ts +9 -0
  151. package/dist/src/nile-inline-sidebar-item-header/nile-inline-sidebar-item-header.css.js +36 -0
  152. package/dist/src/nile-inline-sidebar-item-header/nile-inline-sidebar-item-header.css.js.map +1 -0
  153. package/dist/src/nile-inline-sidebar-item-header/nile-inline-sidebar-item-header.d.ts +34 -0
  154. package/dist/src/nile-inline-sidebar-item-header/nile-inline-sidebar-item-header.js +68 -0
  155. package/dist/src/nile-inline-sidebar-item-header/nile-inline-sidebar-item-header.js.map +1 -0
  156. package/dist/src/nile-inline-sidebar-panel/index.d.ts +1 -0
  157. package/dist/src/nile-inline-sidebar-panel/index.js +2 -0
  158. package/dist/src/nile-inline-sidebar-panel/index.js.map +1 -0
  159. package/dist/src/nile-inline-sidebar-panel/nile-inline-sidebar-panel.css.d.ts +9 -0
  160. package/dist/src/nile-inline-sidebar-panel/nile-inline-sidebar-panel.css.js +28 -0
  161. package/dist/src/nile-inline-sidebar-panel/nile-inline-sidebar-panel.css.js.map +1 -0
  162. package/dist/src/nile-inline-sidebar-panel/nile-inline-sidebar-panel.d.ts +35 -0
  163. package/dist/src/nile-inline-sidebar-panel/nile-inline-sidebar-panel.js +55 -0
  164. package/dist/src/nile-inline-sidebar-panel/nile-inline-sidebar-panel.js.map +1 -0
  165. package/dist/src/nile-inline-sidebar-panel-group/index.d.ts +1 -0
  166. package/dist/src/nile-inline-sidebar-panel-group/index.js +2 -0
  167. package/dist/src/nile-inline-sidebar-panel-group/index.js.map +1 -0
  168. package/dist/src/nile-inline-sidebar-panel-group/nile-inline-sidebar-panel-group.css.d.ts +9 -0
  169. package/dist/src/nile-inline-sidebar-panel-group/nile-inline-sidebar-panel-group.css.js +39 -0
  170. package/dist/src/nile-inline-sidebar-panel-group/nile-inline-sidebar-panel-group.css.js.map +1 -0
  171. package/dist/src/nile-inline-sidebar-panel-group/nile-inline-sidebar-panel-group.d.ts +43 -0
  172. package/dist/src/nile-inline-sidebar-panel-group/nile-inline-sidebar-panel-group.js +93 -0
  173. package/dist/src/nile-inline-sidebar-panel-group/nile-inline-sidebar-panel-group.js.map +1 -0
  174. package/dist/src/nile-nav-tab/index.d.ts +1 -0
  175. package/dist/src/nile-nav-tab/index.js +2 -0
  176. package/dist/src/nile-nav-tab/index.js.map +1 -0
  177. package/dist/src/nile-nav-tab/nile-nav-tab.css.d.ts +9 -0
  178. package/dist/src/nile-nav-tab/nile-nav-tab.css.js +199 -0
  179. package/dist/src/nile-nav-tab/nile-nav-tab.css.js.map +1 -0
  180. package/dist/src/nile-nav-tab/nile-nav-tab.d.ts +50 -0
  181. package/dist/src/nile-nav-tab/nile-nav-tab.js +190 -0
  182. package/dist/src/nile-nav-tab/nile-nav-tab.js.map +1 -0
  183. package/dist/src/nile-nav-tab/nile-nav-tab.test.d.ts +1 -0
  184. package/dist/src/nile-nav-tab/nile-nav-tab.test.js +656 -0
  185. package/dist/src/nile-nav-tab/nile-nav-tab.test.js.map +1 -0
  186. package/dist/src/nile-nav-tab-group/index.d.ts +1 -0
  187. package/dist/src/nile-nav-tab-group/index.js +2 -0
  188. package/dist/src/nile-nav-tab-group/index.js.map +1 -0
  189. package/dist/src/nile-nav-tab-group/nile-nav-tab-group.css.d.ts +12 -0
  190. package/dist/src/nile-nav-tab-group/nile-nav-tab-group.css.js +680 -0
  191. package/dist/src/nile-nav-tab-group/nile-nav-tab-group.css.js.map +1 -0
  192. package/dist/src/nile-nav-tab-group/nile-nav-tab-group.d.ts +119 -0
  193. package/dist/src/nile-nav-tab-group/nile-nav-tab-group.js +765 -0
  194. package/dist/src/nile-nav-tab-group/nile-nav-tab-group.js.map +1 -0
  195. package/dist/src/nile-nav-tab-group/nile-nav-tab-group.test.d.ts +3 -0
  196. package/dist/src/nile-nav-tab-group/nile-nav-tab-group.test.js +838 -0
  197. package/dist/src/nile-nav-tab-group/nile-nav-tab-group.test.js.map +1 -0
  198. package/dist/src/nile-nav-tab-panel/index.d.ts +1 -0
  199. package/dist/src/nile-nav-tab-panel/index.js +2 -0
  200. package/dist/src/nile-nav-tab-panel/index.js.map +1 -0
  201. package/dist/src/nile-nav-tab-panel/nile-nav-tab-panel.css.d.ts +15 -0
  202. package/dist/src/nile-nav-tab-panel/nile-nav-tab-panel.css.js +37 -0
  203. package/dist/src/nile-nav-tab-panel/nile-nav-tab-panel.css.js.map +1 -0
  204. package/dist/src/nile-nav-tab-panel/nile-nav-tab-panel.d.ts +37 -0
  205. package/dist/src/nile-nav-tab-panel/nile-nav-tab-panel.js +75 -0
  206. package/dist/src/nile-nav-tab-panel/nile-nav-tab-panel.js.map +1 -0
  207. package/dist/src/nile-nav-tab-panel/nile-nav-tab-panel.test.d.ts +1 -0
  208. package/dist/src/nile-nav-tab-panel/nile-nav-tab-panel.test.js +534 -0
  209. package/dist/src/nile-nav-tab-panel/nile-nav-tab-panel.test.js.map +1 -0
  210. package/dist/src/nile-stepper-item/nile-stepper-item.js +1 -1
  211. package/dist/src/nile-stepper-item/nile-stepper-item.js.map +1 -1
  212. package/dist/src/nile-vertical-stepper-item/nile-vertical-stepper-item.js +1 -1
  213. package/dist/src/nile-vertical-stepper-item/nile-vertical-stepper-item.js.map +1 -1
  214. package/dist/src/version.js +1 -1
  215. package/dist/src/version.js.map +1 -1
  216. package/dist/tsconfig.tsbuildinfo +1 -1
  217. package/package.json +7 -2
  218. package/src/index.ts +7 -0
  219. package/src/internal/enum.ts +8 -1
  220. package/src/nile-auto-complete/nile-auto-complete.ts +1 -1
  221. package/src/nile-calendar/nile-calendar.css.ts +0 -3
  222. package/src/nile-calendar/nile-calendar.ts +2 -2
  223. package/src/nile-dropdown/nile-dropdown.ts +23 -5
  224. package/src/nile-inline-sidebar/nile-inline-sidebar.css.ts +75 -17
  225. package/src/nile-inline-sidebar/nile-inline-sidebar.ts +148 -18
  226. package/src/nile-inline-sidebar-group/nile-inline-sidebar-group.css.ts +7 -7
  227. package/src/nile-inline-sidebar-item/nile-inline-sidebar-item.css.ts +15 -17
  228. package/src/nile-inline-sidebar-item/nile-inline-sidebar-item.ts +74 -9
  229. package/src/nile-inline-sidebar-item-body/index.ts +1 -0
  230. package/src/nile-inline-sidebar-item-body/nile-inline-sidebar-item-body.css.ts +64 -0
  231. package/src/nile-inline-sidebar-item-body/nile-inline-sidebar-item-body.ts +110 -0
  232. package/src/nile-inline-sidebar-item-header/index.ts +1 -0
  233. package/src/nile-inline-sidebar-item-header/nile-inline-sidebar-item-header.css.ts +38 -0
  234. package/src/nile-inline-sidebar-item-header/nile-inline-sidebar-item-header.ts +69 -0
  235. package/src/nile-inline-sidebar-panel/index.ts +1 -0
  236. package/src/nile-inline-sidebar-panel/nile-inline-sidebar-panel.css.ts +30 -0
  237. package/src/nile-inline-sidebar-panel/nile-inline-sidebar-panel.ts +53 -0
  238. package/src/nile-inline-sidebar-panel-group/index.ts +1 -0
  239. package/src/nile-inline-sidebar-panel-group/nile-inline-sidebar-panel-group.css.ts +41 -0
  240. package/src/nile-inline-sidebar-panel-group/nile-inline-sidebar-panel-group.ts +101 -0
  241. package/src/nile-nav-tab/index.ts +1 -0
  242. package/src/nile-nav-tab/nile-nav-tab.css.ts +201 -0
  243. package/src/nile-nav-tab/nile-nav-tab.test.ts +768 -0
  244. package/src/nile-nav-tab/nile-nav-tab.ts +198 -0
  245. package/src/nile-nav-tab-group/index.ts +1 -0
  246. package/src/nile-nav-tab-group/nile-nav-tab-group.css.ts +682 -0
  247. package/src/nile-nav-tab-group/nile-nav-tab-group.test.ts +1009 -0
  248. package/src/nile-nav-tab-group/nile-nav-tab-group.ts +845 -0
  249. package/src/nile-nav-tab-panel/index.ts +1 -0
  250. package/src/nile-nav-tab-panel/nile-nav-tab-panel.css.ts +39 -0
  251. package/src/nile-nav-tab-panel/nile-nav-tab-panel.test.ts +797 -0
  252. package/src/nile-nav-tab-panel/nile-nav-tab-panel.ts +78 -0
  253. package/src/nile-stepper-item/nile-stepper-item.ts +1 -1
  254. package/src/nile-vertical-stepper-item/nile-vertical-stepper-item.ts +1 -1
  255. package/vscode-html-custom-data.json +273 -3
@@ -0,0 +1,797 @@
1
+ import { expect, fixture, html } from '@open-wc/testing';
2
+ import './nile-nav-tab-panel';
3
+ import type { NileNavTabPanel } from './nile-nav-tab-panel';
4
+
5
+ describe('NileNavTabPanel', () => {
6
+ // ---- Rendering ----
7
+
8
+ it('renders with shadow root and base panel class', async () => {
9
+ const el = await fixture<NileNavTabPanel>(
10
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
11
+ );
12
+ expect(el).to.exist;
13
+ expect(el.shadowRoot).to.not.be.null;
14
+ const panel = el.shadowRoot?.querySelector('.nav-tab-panel');
15
+ expect(panel).to.exist;
16
+ expect(panel?.isConnected).to.be.true;
17
+ });
18
+
19
+ it('inner wrapper exposes part base', async () => {
20
+ const el = await fixture<NileNavTabPanel>(
21
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
22
+ );
23
+ const inner = el.shadowRoot?.querySelector('[part="base"]');
24
+ expect(inner).to.exist;
25
+ expect(inner?.parentNode).to.equal(el.shadowRoot);
26
+ expect(inner?.classList.contains('nav-tab-panel')).to.be.true;
27
+ });
28
+
29
+ it('renders default slot content', async () => {
30
+ const el = await fixture<NileNavTabPanel>(
31
+ html`<nile-nav-tab-panel>Panel body</nile-nav-tab-panel>`
32
+ );
33
+ expect(el.textContent).to.contain('Panel body');
34
+ expect(el.shadowRoot!.querySelector('slot')).to.exist;
35
+ });
36
+
37
+ it('applies active class when active is true', async () => {
38
+ const el = await fixture<NileNavTabPanel>(
39
+ html`<nile-nav-tab-panel active></nile-nav-tab-panel>`
40
+ );
41
+ expect(el.shadowRoot!.querySelector('.nav-tab-panel--active')).to.exist;
42
+ });
43
+
44
+ it('does not add active class when inactive', async () => {
45
+ const el = await fixture<NileNavTabPanel>(
46
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
47
+ );
48
+ expect(el.shadowRoot!.querySelector('.nav-tab-panel--active')).to.be.null;
49
+ });
50
+
51
+ it('open shadow mode', async () => {
52
+ const el = await fixture<NileNavTabPanel>(
53
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
54
+ );
55
+ expect(el.shadowRoot!.mode).to.equal('open');
56
+ });
57
+
58
+ it('localName is nile-nav-tab-panel', async () => {
59
+ const el = await fixture<NileNavTabPanel>(
60
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
61
+ );
62
+ expect(el.localName).to.equal('nile-nav-tab-panel');
63
+ });
64
+
65
+ it('tagName lowercases to nile-nav-tab-panel', async () => {
66
+ const el = await fixture<NileNavTabPanel>(
67
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
68
+ );
69
+ expect(el.tagName.toLowerCase()).to.equal('nile-nav-tab-panel');
70
+ });
71
+
72
+ // ---- Defaults & reflection ----
73
+
74
+ it('defaults name to empty and active to false', async () => {
75
+ const el = await fixture<NileNavTabPanel>(
76
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
77
+ );
78
+ expect(el.name).to.equal('');
79
+ expect(el.active).to.be.false;
80
+ });
81
+
82
+ it('reflects name and active attributes', async () => {
83
+ const el = await fixture<NileNavTabPanel>(
84
+ html`<nile-nav-tab-panel name="general" active></nile-nav-tab-panel>`
85
+ );
86
+ expect(el.getAttribute('name')).to.equal('general');
87
+ expect(el.hasAttribute('active')).to.be.true;
88
+ });
89
+
90
+ it('updates name when property set', async () => {
91
+ const el = await fixture<NileNavTabPanel>(
92
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
93
+ );
94
+ el.name = 'settings';
95
+ await el.updateComplete;
96
+ expect(el.getAttribute('name')).to.equal('settings');
97
+ });
98
+
99
+ it('creates via document.createElement and upgrades', async () => {
100
+ const el = document.createElement('nile-nav-tab-panel') as NileNavTabPanel;
101
+ document.body.appendChild(el);
102
+ await el.updateComplete;
103
+ expect(el.shadowRoot).to.not.be.null;
104
+ document.body.removeChild(el);
105
+ });
106
+
107
+ // ---- Accessibility ----
108
+
109
+ it('sets role to tabpanel on connect', async () => {
110
+ const el = await fixture<NileNavTabPanel>(
111
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
112
+ );
113
+ expect(el.getAttribute('role')).to.equal('tabpanel');
114
+ });
115
+
116
+ it('sets aria-hidden=true and tabindex=-1 when inactive', async () => {
117
+ const el = await fixture<NileNavTabPanel>(
118
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
119
+ );
120
+ expect(el.getAttribute('aria-hidden')).to.equal('true');
121
+ expect(el.getAttribute('tabindex')).to.equal('-1');
122
+ });
123
+
124
+ it('exposes tabIndex property -1 when inactive', async () => {
125
+ const el = await fixture<NileNavTabPanel>(
126
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
127
+ );
128
+ expect(el.tabIndex).to.equal(-1);
129
+ });
130
+
131
+ it('sets aria-hidden=false and tabindex=0 when active', async () => {
132
+ const el = await fixture<NileNavTabPanel>(
133
+ html`<nile-nav-tab-panel active></nile-nav-tab-panel>`
134
+ );
135
+ expect(el.getAttribute('aria-hidden')).to.equal('false');
136
+ expect(el.getAttribute('tabindex')).to.equal('0');
137
+ });
138
+
139
+ it('exposes tabIndex 0 when active', async () => {
140
+ const el = await fixture<NileNavTabPanel>(
141
+ html`<nile-nav-tab-panel active></nile-nav-tab-panel>`
142
+ );
143
+ expect(el.tabIndex).to.equal(0);
144
+ });
145
+
146
+ it('updates aria-hidden/tabindex when active changes dynamically', async () => {
147
+ const el = await fixture<NileNavTabPanel>(
148
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
149
+ );
150
+ el.active = true;
151
+ await el.updateComplete;
152
+ expect(el.getAttribute('aria-hidden')).to.equal('false');
153
+ expect(el.getAttribute('tabindex')).to.equal('0');
154
+
155
+ el.active = false;
156
+ await el.updateComplete;
157
+ expect(el.getAttribute('aria-hidden')).to.equal('true');
158
+ expect(el.getAttribute('tabindex')).to.equal('-1');
159
+ });
160
+
161
+ // ---- ID behavior ----
162
+
163
+ it('assigns an auto-generated id when id is not provided', async () => {
164
+ const el = await fixture<NileNavTabPanel>(
165
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
166
+ );
167
+ expect(el.id).to.match(/^nile-nav-tab-panel-/);
168
+ });
169
+
170
+ it('preserves provided id', async () => {
171
+ const el = await fixture<NileNavTabPanel>(
172
+ html`<nile-nav-tab-panel id="panel-1"></nile-nav-tab-panel>`
173
+ );
174
+ expect(el.id).to.equal('panel-1');
175
+ });
176
+
177
+ it('two instances receive distinct auto ids', async () => {
178
+ const wrap = await fixture(html`
179
+ <div>
180
+ <nile-nav-tab-panel></nile-nav-tab-panel>
181
+ <nile-nav-tab-panel></nile-nav-tab-panel>
182
+ </div>
183
+ `);
184
+ const nodes = wrap.querySelectorAll('nile-nav-tab-panel');
185
+ expect(nodes[0].id).to.not.equal(nodes[1].id);
186
+ });
187
+
188
+ // ---- Module registration ----
189
+
190
+ it('exposes static styles', async () => {
191
+ const mod = await import('./nile-nav-tab-panel');
192
+ expect(mod.NileNavTabPanel.styles).to.exist;
193
+ });
194
+
195
+ it('registers custom element', () => {
196
+ expect(customElements.get('nile-nav-tab-panel')).to.exist;
197
+ });
198
+
199
+ it('default export matches named class', async () => {
200
+ const mod = await import('./nile-nav-tab-panel');
201
+ expect(mod.default).to.equal(mod.NileNavTabPanel);
202
+ });
203
+
204
+ // ---- DOM & computed display ----
205
+
206
+ it('inactive host uses display none from stylesheet', async () => {
207
+ const el = await fixture<NileNavTabPanel>(
208
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
209
+ );
210
+ expect(getComputedStyle(el).display).to.equal('none');
211
+ });
212
+
213
+ it('active host uses display block from stylesheet', async () => {
214
+ const el = await fixture<NileNavTabPanel>(
215
+ html`<nile-nav-tab-panel active></nile-nav-tab-panel>`
216
+ );
217
+ expect(getComputedStyle(el).display).to.equal('block');
218
+ });
219
+
220
+ it('isConnected after fixture', async () => {
221
+ const el = await fixture<NileNavTabPanel>(
222
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
223
+ );
224
+ expect(el.isConnected).to.be.true;
225
+ });
226
+
227
+ it('remove disconnects from document', async () => {
228
+ const el = await fixture<NileNavTabPanel>(
229
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
230
+ );
231
+ el.remove();
232
+ expect(el.isConnected).to.be.false;
233
+ });
234
+
235
+ it('closest finds self', async () => {
236
+ const el = await fixture<NileNavTabPanel>(
237
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
238
+ );
239
+ expect(el.closest('nile-nav-tab-panel')).to.equal(el);
240
+ });
241
+
242
+ it('updateComplete resolves true', async () => {
243
+ const el = await fixture<NileNavTabPanel>(
244
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
245
+ );
246
+ expect(await el.updateComplete).to.be.true;
247
+ });
248
+
249
+ it('requestUpdate triggers re-render', async () => {
250
+ const el = await fixture<NileNavTabPanel>(
251
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
252
+ );
253
+ el.active = true;
254
+ el.requestUpdate();
255
+ await el.updateComplete;
256
+ expect(el.shadowRoot!.querySelector('.nav-tab-panel--active')).to.exist;
257
+ });
258
+
259
+ it('hidden attribute can be set on host', async () => {
260
+ const el = await fixture<NileNavTabPanel>(
261
+ html`<nile-nav-tab-panel hidden></nile-nav-tab-panel>`
262
+ );
263
+ expect(el.hidden).to.be.true;
264
+ });
265
+
266
+ it('classList on host accepts utility class', async () => {
267
+ const el = await fixture<NileNavTabPanel>(
268
+ html`<nile-nav-tab-panel class="p1"></nile-nav-tab-panel>`
269
+ );
270
+ expect(el.classList.contains('p1')).to.be.true;
271
+ });
272
+
273
+ it('dataset attributes are readable', async () => {
274
+ const el = await fixture<NileNavTabPanel>(
275
+ html`<nile-nav-tab-panel data-test="x"></nile-nav-tab-panel>`
276
+ );
277
+ expect(el.dataset.test).to.equal('x');
278
+ });
279
+
280
+ it('nodeType is ELEMENT_NODE', async () => {
281
+ const el = await fixture<NileNavTabPanel>(
282
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
283
+ );
284
+ expect(el.nodeType).to.equal(Node.ELEMENT_NODE);
285
+ });
286
+
287
+ it('ownerDocument is current document', async () => {
288
+ const el = await fixture<NileNavTabPanel>(
289
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
290
+ );
291
+ expect(el.ownerDocument).to.equal(document);
292
+ });
293
+
294
+ it('getBoundingClientRect returns numeric box when active', async () => {
295
+ const el = await fixture<NileNavTabPanel>(
296
+ html`<nile-nav-tab-panel active>Hi</nile-nav-tab-panel>`
297
+ );
298
+ const r = el.getBoundingClientRect();
299
+ expect(r.width).to.be.a('number');
300
+ expect(r.height).to.be.a('number');
301
+ });
302
+
303
+ it('dispatchEvent receives listeners', async () => {
304
+ const el = await fixture<NileNavTabPanel>(
305
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
306
+ );
307
+ let ok = false;
308
+ el.addEventListener('panel-test', () => {
309
+ ok = true;
310
+ });
311
+ el.dispatchEvent(new Event('panel-test'));
312
+ expect(ok).to.be.true;
313
+ });
314
+
315
+ it('slotted nodes remain in light DOM', async () => {
316
+ const el = await fixture<NileNavTabPanel>(html`
317
+ <nile-nav-tab-panel active><span id="inner">x</span></nile-nav-tab-panel>
318
+ `);
319
+ expect(el.contains(el.querySelector('#inner'))).to.be.true;
320
+ });
321
+
322
+ it('dir attribute passes through', async () => {
323
+ const el = await fixture<NileNavTabPanel>(
324
+ html`<nile-nav-tab-panel dir="rtl" active></nile-nav-tab-panel>`
325
+ );
326
+ expect(el.dir).to.equal('rtl');
327
+ });
328
+
329
+ it('lang attribute passes through', async () => {
330
+ const el = await fixture<NileNavTabPanel>(
331
+ html`<nile-nav-tab-panel lang="en" active></nile-nav-tab-panel>`
332
+ );
333
+ expect(el.lang).to.equal('en');
334
+ });
335
+
336
+ it('aria-describedby on host is preserved', async () => {
337
+ const el = await fixture<NileNavTabPanel>(html`
338
+ <nile-nav-tab-panel active aria-describedby="help"></nile-nav-tab-panel>
339
+ `);
340
+ expect(el.getAttribute('aria-describedby')).to.equal('help');
341
+ });
342
+
343
+ it('cloneNode preserves tag name', async () => {
344
+ const el = await fixture<NileNavTabPanel>(
345
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
346
+ );
347
+ const copy = el.cloneNode(false) as NileNavTabPanel;
348
+ expect(copy.localName).to.equal('nile-nav-tab-panel');
349
+ });
350
+
351
+ it('matches selector for host class', async () => {
352
+ const el = await fixture<NileNavTabPanel>(
353
+ html`<nile-nav-tab-panel class="x"></nile-nav-tab-panel>`
354
+ );
355
+ expect(el.matches('nile-nav-tab-panel.x')).to.be.true;
356
+ });
357
+
358
+ it('inactive then active toggles inner active class', async () => {
359
+ const el = await fixture<NileNavTabPanel>(
360
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
361
+ );
362
+ el.active = true;
363
+ await el.updateComplete;
364
+ expect(el.shadowRoot!.querySelector('.nav-tab-panel--active')).to.exist;
365
+ el.active = false;
366
+ await el.updateComplete;
367
+ expect(el.shadowRoot!.querySelector('.nav-tab-panel--active')).to.be.null;
368
+ });
369
+
370
+ it('style attribute on host is applied', async () => {
371
+ const el = await fixture<NileNavTabPanel>(html`
372
+ <nile-nav-tab-panel active style="opacity: 0.99"></nile-nav-tab-panel>
373
+ `);
374
+ expect(el.style.opacity).to.equal('0.99');
375
+ });
376
+
377
+ it('shadowRoot host references the element', async () => {
378
+ const el = await fixture<NileNavTabPanel>(
379
+ html`<nile-nav-tab-panel active></nile-nav-tab-panel>`
380
+ );
381
+ expect(el.shadowRoot!.host).to.equal(el);
382
+ });
383
+
384
+ it('outerHTML includes component tag', async () => {
385
+ const el = await fixture<NileNavTabPanel>(
386
+ html`<nile-nav-tab-panel name="x"></nile-nav-tab-panel>`
387
+ );
388
+ expect(el.outerHTML.toLowerCase()).to.include('nile-nav-tab-panel');
389
+ });
390
+
391
+ it('scrollIntoView is available on host', async () => {
392
+ const el = await fixture<NileNavTabPanel>(
393
+ html`<nile-nav-tab-panel active></nile-nav-tab-panel>`
394
+ );
395
+ expect(el.scrollIntoView).to.be.a('function');
396
+ });
397
+
398
+ it('reflects active attribute when toggled in JS', async () => {
399
+ const el = await fixture<NileNavTabPanel>(
400
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
401
+ );
402
+ el.active = true;
403
+ await el.updateComplete;
404
+ expect(el.hasAttribute('active')).to.be.true;
405
+ el.active = false;
406
+ await el.updateComplete;
407
+ expect(el.hasAttribute('active')).to.be.false;
408
+ });
409
+
410
+ // ---- Extended coverage ----
411
+
412
+ it('name with underscores reflects', async () => {
413
+ const el = await fixture<NileNavTabPanel>(
414
+ html`<nile-nav-tab-panel name="panel_a"></nile-nav-tab-panel>`
415
+ );
416
+ expect(el.name).to.equal('panel_a');
417
+ });
418
+
419
+ it('clears name when set to empty string', async () => {
420
+ const el = await fixture<NileNavTabPanel>(
421
+ html`<nile-nav-tab-panel name="x"></nile-nav-tab-panel>`
422
+ );
423
+ el.name = '';
424
+ await el.updateComplete;
425
+ expect(el.getAttribute('name')).to.equal('');
426
+ });
427
+
428
+ it('role tabpanel persists after active toggle', async () => {
429
+ const el = await fixture<NileNavTabPanel>(
430
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
431
+ );
432
+ el.active = true;
433
+ await el.updateComplete;
434
+ expect(el.getAttribute('role')).to.equal('tabpanel');
435
+ el.active = false;
436
+ await el.updateComplete;
437
+ expect(el.getAttribute('role')).to.equal('tabpanel');
438
+ });
439
+
440
+ it('slot element exists in shadow', async () => {
441
+ const el = await fixture<NileNavTabPanel>(
442
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
443
+ );
444
+ expect(el.shadowRoot!.querySelector('slot')).to.exist;
445
+ });
446
+
447
+ it('active class toggles twice without throwing', async () => {
448
+ const el = await fixture<NileNavTabPanel>(
449
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
450
+ );
451
+ for (let i = 0; i < 3; i++) {
452
+ el.active = i % 2 === 1;
453
+ await el.updateComplete;
454
+ }
455
+ expect(el.active).to.be.false;
456
+ });
457
+
458
+ it('inner base part remains when inactive', async () => {
459
+ const el = await fixture<NileNavTabPanel>(
460
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
461
+ );
462
+ expect(el.shadowRoot!.querySelector('[part="base"]')).to.exist;
463
+ });
464
+
465
+ it('tabIndex property mirrors attribute when activated', async () => {
466
+ const el = await fixture<NileNavTabPanel>(
467
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
468
+ );
469
+ el.setAttribute('active', '');
470
+ await el.updateComplete;
471
+ expect(el.tabIndex).to.equal(0);
472
+ });
473
+
474
+ it('removeAttribute name clears binding', async () => {
475
+ const el = await fixture<NileNavTabPanel>(
476
+ html`<nile-nav-tab-panel name="z"></nile-nav-tab-panel>`
477
+ );
478
+ el.removeAttribute('name');
479
+ await el.updateComplete;
480
+ expect(el.getAttribute('name')).to.be.null;
481
+ expect(el.name ?? '').to.equal('');
482
+ });
483
+
484
+ it('textContent aggregates slotted string', async () => {
485
+ const el = await fixture<NileNavTabPanel>(
486
+ html`<nile-nav-tab-panel active>Hello panel</nile-nav-tab-panel>`
487
+ );
488
+ expect(el.textContent).to.contain('Hello panel');
489
+ });
490
+
491
+ it('insertAdjacentHTML not used but innerHTML on host is empty for component', async () => {
492
+ const el = await fixture<NileNavTabPanel>(
493
+ html`<nile-nav-tab-panel active><b>bold</b></nile-nav-tab-panel>`
494
+ );
495
+ expect(el.querySelector('b')).to.exist;
496
+ });
497
+
498
+ it('getAttribute role is tabpanel', async () => {
499
+ const el = await fixture<NileNavTabPanel>(
500
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
501
+ );
502
+ expect(el.getAttribute('role')).to.equal('tabpanel');
503
+ });
504
+
505
+ it('attributes.getNamedItem name returns attr node', async () => {
506
+ const el = await fixture<NileNavTabPanel>(
507
+ html`<nile-nav-tab-panel name="n1"></nile-nav-tab-panel>`
508
+ );
509
+ expect(el.attributes.getNamedItem('name')?.value).to.equal('n1');
510
+ });
511
+
512
+ it('isConnected true when nested in div', async () => {
513
+ const wrap = await fixture(html`
514
+ <div><nile-nav-tab-panel></nile-nav-tab-panel></div>
515
+ `);
516
+ expect(wrap.querySelector('nile-nav-tab-panel')!.isConnected).to.be.true;
517
+ });
518
+
519
+ it('parentElement is wrapper when nested', async () => {
520
+ const wrap = await fixture(html`
521
+ <div id="p"><nile-nav-tab-panel></nile-nav-tab-panel></div>
522
+ `);
523
+ const p = wrap.querySelector('nile-nav-tab-panel')!;
524
+ expect(p.parentElement!.id).to.equal('p');
525
+ });
526
+
527
+ it('compareDocumentPosition against document', async () => {
528
+ const el = await fixture<NileNavTabPanel>(
529
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
530
+ );
531
+ expect(el.compareDocumentPosition(document.documentElement)).to.be.greaterThan(0);
532
+ });
533
+
534
+ it('lookupPrefix returns null for plain host', async () => {
535
+ const el = await fixture<NileNavTabPanel>(
536
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
537
+ );
538
+ expect(el.lookupPrefix('http://x')).to.be.null;
539
+ });
540
+
541
+ it('contains returns false for detached nodes', async () => {
542
+ const el = await fixture<NileNavTabPanel>(
543
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
544
+ );
545
+ const orphan = document.createElement('span');
546
+ expect(el.contains(orphan)).to.be.false;
547
+ });
548
+
549
+ it('active true keeps display block', async () => {
550
+ const el = await fixture<NileNavTabPanel>(
551
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
552
+ );
553
+ el.active = true;
554
+ await el.updateComplete;
555
+ expect(getComputedStyle(el).display).to.equal('block');
556
+ });
557
+
558
+ it('inactive keeps display none', async () => {
559
+ const el = await fixture<NileNavTabPanel>(
560
+ html`<nile-nav-tab-panel active></nile-nav-tab-panel>`
561
+ );
562
+ el.active = false;
563
+ await el.updateComplete;
564
+ expect(getComputedStyle(el).display).to.equal('none');
565
+ });
566
+
567
+ it('id can be set after connect', async () => {
568
+ const el = await fixture<NileNavTabPanel>(
569
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
570
+ );
571
+ el.id = 'late-id';
572
+ expect(el.id).to.equal('late-id');
573
+ });
574
+
575
+ it('auto id still matches pattern when no explicit id', async () => {
576
+ const el = await fixture<NileNavTabPanel>(
577
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
578
+ );
579
+ expect(el.id).to.match(/^nile-nav-tab-panel-\d+$/);
580
+ });
581
+
582
+ it('requestUpdate twice resolves once', async () => {
583
+ const el = await fixture<NileNavTabPanel>(
584
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
585
+ );
586
+ el.requestUpdate();
587
+ el.requestUpdate();
588
+ await el.updateComplete;
589
+ expect(await el.updateComplete).to.be.true;
590
+ });
591
+
592
+ it('shadowRoot exposes adoptedStyleSheets array', async () => {
593
+ const el = await fixture<NileNavTabPanel>(
594
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
595
+ );
596
+ expect(el.shadowRoot!.adoptedStyleSheets).to.be.an('array');
597
+ });
598
+
599
+ it('toggleAttribute active reflects', async () => {
600
+ const el = await fixture<NileNavTabPanel>(
601
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
602
+ );
603
+ el.toggleAttribute('active', true);
604
+ await el.updateComplete;
605
+ expect(el.active).to.be.true;
606
+ });
607
+
608
+ it('inner part has nav-tab-panel class even when inactive', async () => {
609
+ const el = await fixture<NileNavTabPanel>(
610
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
611
+ );
612
+ const inner = el.shadowRoot!.querySelector('.nav-tab-panel');
613
+ expect(inner!.classList.contains('nav-tab-panel')).to.be.true;
614
+ expect(inner!.classList.contains('nav-tab-panel--active')).to.be.false;
615
+ });
616
+
617
+ it('accessKey can be assigned on host', async () => {
618
+ const el = await fixture<NileNavTabPanel>(
619
+ html`<nile-nav-tab-panel accesskey="p" active></nile-nav-tab-panel>`
620
+ );
621
+ expect(el.accessKey).to.equal('p');
622
+ });
623
+
624
+ it('title attribute passes through', async () => {
625
+ const el = await fixture<NileNavTabPanel>(
626
+ html`<nile-nav-tab-panel title="tip" active></nile-nav-tab-panel>`
627
+ );
628
+ expect(el.title).to.equal('tip');
629
+ });
630
+
631
+ it('contentEditable false on host by default', async () => {
632
+ const el = await fixture<NileNavTabPanel>(
633
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
634
+ );
635
+ expect(el.isContentEditable).to.be.false;
636
+ });
637
+
638
+ it('nonce attribute if set is readable', async () => {
639
+ const el = await fixture<NileNavTabPanel>(
640
+ html`<nile-nav-tab-panel nonce="abc" active></nile-nav-tab-panel>`
641
+ );
642
+ expect(el.getAttribute('nonce')).to.equal('abc');
643
+ });
644
+
645
+ it('part base div wraps single slot', async () => {
646
+ const el = await fixture<NileNavTabPanel>(
647
+ html`<nile-nav-tab-panel active>X</nile-nav-tab-panel>`
648
+ );
649
+ const base = el.shadowRoot?.querySelector('[part="base"]');
650
+ expect(base).to.exist;
651
+ expect(base?.querySelectorAll('slot').length).to.equal(1);
652
+ });
653
+
654
+ it('cloneNode deep copies light children', async () => {
655
+ const el = await fixture<NileNavTabPanel>(
656
+ html`<nile-nav-tab-panel active><span id="c">c</span></nile-nav-tab-panel>`
657
+ );
658
+ const copy = el.cloneNode(true) as NileNavTabPanel;
659
+ expect(copy.querySelector('#c')).to.exist;
660
+ });
661
+
662
+ it('hasAttributes is true when name set', async () => {
663
+ const el = await fixture<NileNavTabPanel>(
664
+ html`<nile-nav-tab-panel name="a"></nile-nav-tab-panel>`
665
+ );
666
+ expect(el.hasAttributes()).to.be.true;
667
+ });
668
+
669
+ it('getAttributeNames includes role', async () => {
670
+ const el = await fixture<NileNavTabPanel>(
671
+ html`<nile-nav-tab-panel name="b"></nile-nav-tab-panel>`
672
+ );
673
+ expect(el.getAttributeNames()).to.include('role');
674
+ });
675
+
676
+ it('prepend light DOM child remains queryable', async () => {
677
+ const el = await fixture<NileNavTabPanel>(
678
+ html`<nile-nav-tab-panel active></nile-nav-tab-panel>`
679
+ );
680
+ const s = document.createElement('span');
681
+ s.id = 'prep';
682
+ el.prepend(s);
683
+ expect(el.querySelector('#prep')).to.equal(s);
684
+ });
685
+
686
+ it('append light DOM child after default slot content', async () => {
687
+ const el = await fixture<NileNavTabPanel>(
688
+ html`<nile-nav-tab-panel active>One</nile-nav-tab-panel>`
689
+ );
690
+ const s = document.createElement('span');
691
+ s.id = 'app';
692
+ el.append(s);
693
+ expect(el.querySelector('#app')).to.exist;
694
+ });
695
+
696
+ it('replaceChildren clears slotted content', async () => {
697
+ const el = await fixture<NileNavTabPanel>(
698
+ html`<nile-nav-tab-panel active>Old</nile-nav-tab-panel>`
699
+ );
700
+ el.replaceChildren();
701
+ await el.updateComplete;
702
+ expect(el.textContent?.trim()).to.equal('');
703
+ });
704
+
705
+ it('toggleAttribute active off clears active', async () => {
706
+ const el = await fixture<NileNavTabPanel>(
707
+ html`<nile-nav-tab-panel active></nile-nav-tab-panel>`
708
+ );
709
+ el.toggleAttribute('active', false);
710
+ await el.updateComplete;
711
+ expect(el.active).to.be.false;
712
+ });
713
+
714
+ /**
715
+ * 100 generated cases — `yarn tsc` emits dist/src/nile-nav-tab-panel/nile-nav-tab-panel.test.js.
716
+ */
717
+ describe('bulk generated coverage (100 cases)', () => {
718
+ for (let i = 0; i < 10; i++) {
719
+ it(`bulk case ${i + 1}/100 (mode ${i % 10})`, async () => {
720
+ const suffix = `${i}`;
721
+ const mode = i % 10;
722
+
723
+ if (mode === 0) {
724
+ const el = await fixture<NileNavTabPanel>(
725
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
726
+ );
727
+ el.name = `panel-${suffix}`;
728
+ await el.updateComplete;
729
+ expect(el.getAttribute('name')).to.equal(`panel-${suffix}`);
730
+ expect(el.name).to.equal(`panel-${suffix}`);
731
+ } else if (mode === 1) {
732
+ const el = await fixture<NileNavTabPanel>(
733
+ html`<nile-nav-tab-panel active></nile-nav-tab-panel>`
734
+ );
735
+ await el.updateComplete;
736
+ expect(el.getAttribute('aria-hidden')).to.equal('false');
737
+ expect(el.getAttribute('tabindex')).to.equal('0');
738
+ expect(el.tabIndex).to.equal(0);
739
+ } else if (mode === 2) {
740
+ const el = await fixture<NileNavTabPanel>(
741
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
742
+ );
743
+ await el.updateComplete;
744
+ expect(el.getAttribute('aria-hidden')).to.equal('true');
745
+ expect(el.getAttribute('tabindex')).to.equal('-1');
746
+ } else if (mode === 3) {
747
+ const el = await fixture<NileNavTabPanel>(
748
+ html`<nile-nav-tab-panel name="n-${suffix}"></nile-nav-tab-panel>`
749
+ );
750
+ expect(el.getAttribute('role')).to.equal('tabpanel');
751
+ } else if (mode === 4) {
752
+ const el = await fixture<NileNavTabPanel>(
753
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
754
+ );
755
+ const base = el.shadowRoot!.querySelector('[part="base"]');
756
+ expect(base).to.exist;
757
+ expect(base!.classList.contains('nav-tab-panel')).to.be.true;
758
+ } else if (mode === 5) {
759
+ const el = await fixture<NileNavTabPanel>(
760
+ html`<nile-nav-tab-panel active></nile-nav-tab-panel>`
761
+ );
762
+ await el.updateComplete;
763
+ expect(el.shadowRoot!.querySelector('.nav-tab-panel--active')).to.exist;
764
+ } else if (mode === 6) {
765
+ const show = i % 2 === 0;
766
+ const el = await fixture<NileNavTabPanel>(
767
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
768
+ );
769
+ el.active = show;
770
+ await el.updateComplete;
771
+ expect(getComputedStyle(el).display).to.equal(show ? 'block' : 'none');
772
+ } else if (mode === 7) {
773
+ const el = await fixture<NileNavTabPanel>(
774
+ html`<nile-nav-tab-panel active>C-${suffix}</nile-nav-tab-panel>`
775
+ );
776
+ await el.updateComplete;
777
+ expect(el.shadowRoot!.querySelector('slot')).to.exist;
778
+ expect(el.textContent).to.contain(`C-${suffix}`);
779
+ } else if (mode === 8) {
780
+ const el = await fixture<NileNavTabPanel>(
781
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
782
+ );
783
+ await el.updateComplete;
784
+ expect(el.id).to.match(/^nile-nav-tab-panel-\d+$/);
785
+ } else {
786
+ const el = await fixture<NileNavTabPanel>(
787
+ html`<nile-nav-tab-panel></nile-nav-tab-panel>`
788
+ );
789
+ el.setAttribute('name', `bulk-${suffix}`);
790
+ await el.updateComplete;
791
+ expect(el.name).to.equal(`bulk-${suffix}`);
792
+ }
793
+ });
794
+ }
795
+ });
796
+ });
797
+