@nova-design-system/nova-webcomponents 3.9.0 → 3.10.0

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 (444) hide show
  1. package/dist/cjs/{constants-8fb8ccc0.js → constants-3b6beb66.js} +15 -1
  2. package/dist/cjs/constants-3b6beb66.js.map +1 -0
  3. package/dist/cjs/index-c56424e5.js +12 -0
  4. package/dist/cjs/index.cjs.js +7 -1
  5. package/dist/cjs/index.cjs.js.map +1 -1
  6. package/dist/cjs/loader.cjs.js +1 -1
  7. package/dist/cjs/native.cjs.js +1 -1
  8. package/dist/cjs/nv-accordion-item.cjs.entry.js +1 -1
  9. package/dist/cjs/nv-accordion-item.cjs.entry.js.map +1 -1
  10. package/dist/cjs/nv-alert.cjs.entry.js +2 -2
  11. package/dist/cjs/nv-alert.cjs.entry.js.map +1 -1
  12. package/dist/cjs/nv-avatar.cjs.entry.js +1 -1
  13. package/dist/cjs/nv-badge_2.cjs.entry.js +2 -2
  14. package/dist/cjs/nv-badge_2.cjs.entry.js.map +1 -1
  15. package/dist/cjs/nv-breadcrumb.cjs.entry.js +1 -1
  16. package/dist/cjs/nv-breadcrumb.cjs.entry.js.map +1 -1
  17. package/dist/cjs/nv-button.cjs.entry.js +2 -2
  18. package/dist/cjs/nv-button.cjs.entry.js.map +1 -1
  19. package/dist/cjs/nv-buttongroup.cjs.entry.js +198 -0
  20. package/dist/cjs/nv-buttongroup.cjs.entry.js.map +1 -0
  21. package/dist/cjs/nv-calendar.cjs.entry.js +121 -38
  22. package/dist/cjs/nv-calendar.cjs.entry.js.map +1 -1
  23. package/dist/cjs/nv-col.cjs.entry.js +1 -1
  24. package/dist/cjs/nv-datagrid.cjs.entry.js +4 -4
  25. package/dist/cjs/nv-datagrid.cjs.entry.js.map +1 -1
  26. package/dist/cjs/nv-datagridcolumn.cjs.entry.js +1 -1
  27. package/dist/cjs/nv-dialog.cjs.entry.js +2 -2
  28. package/dist/cjs/nv-dialogfooter_2.cjs.entry.js +3 -3
  29. package/dist/cjs/nv-fieldcheckbox.cjs.entry.js +5 -5
  30. package/dist/cjs/nv-fieldcheckbox.cjs.entry.js.map +1 -1
  31. package/dist/cjs/nv-fielddate.cjs.entry.js +62 -94
  32. package/dist/cjs/nv-fielddate.cjs.entry.js.map +1 -1
  33. package/dist/cjs/nv-fielddaterange.cjs.entry.js +52 -33
  34. package/dist/cjs/nv-fielddaterange.cjs.entry.js.map +1 -1
  35. package/dist/cjs/nv-fielddropdown.cjs.entry.js +3 -3
  36. package/dist/cjs/nv-fielddropdownitem.cjs.entry.js +1 -1
  37. package/dist/cjs/nv-fieldmultiselect.cjs.entry.js +377 -27
  38. package/dist/cjs/nv-fieldmultiselect.cjs.entry.js.map +1 -1
  39. package/dist/cjs/nv-fieldnumber.cjs.entry.js +3 -3
  40. package/dist/cjs/nv-fieldpassword.cjs.entry.js +3 -3
  41. package/dist/cjs/nv-fieldradio.cjs.entry.js +4 -4
  42. package/dist/cjs/nv-fieldradio.cjs.entry.js.map +1 -1
  43. package/dist/cjs/nv-fieldselect.cjs.entry.js +5 -5
  44. package/dist/cjs/nv-fieldslider.cjs.entry.js +3 -3
  45. package/dist/cjs/nv-fieldtext.cjs.entry.js +3 -3
  46. package/dist/cjs/nv-fieldtextarea.cjs.entry.js +3 -3
  47. package/dist/cjs/nv-fieldtime.cjs.entry.js +10 -10
  48. package/dist/cjs/nv-icon.cjs.entry.js +3 -3
  49. package/dist/cjs/nv-icon.cjs.entry.js.map +1 -1
  50. package/dist/cjs/nv-iconbutton_2.cjs.entry.js +3 -3
  51. package/dist/cjs/nv-iconbutton_2.cjs.entry.js.map +1 -1
  52. package/dist/cjs/nv-menu.cjs.entry.js +1 -1
  53. package/dist/cjs/nv-menuitem.cjs.entry.js +1 -1
  54. package/dist/cjs/nv-popover.cjs.entry.js +1 -1
  55. package/dist/cjs/nv-row.cjs.entry.js +1 -1
  56. package/dist/cjs/nv-stack.cjs.entry.js +1 -1
  57. package/dist/cjs/nv-table.cjs.entry.js +2 -2
  58. package/dist/cjs/nv-toggle.cjs.entry.js +3 -3
  59. package/dist/cjs/nv-toggle.cjs.entry.js.map +1 -1
  60. package/dist/cjs/nv-togglebutton.cjs.entry.js +58 -0
  61. package/dist/cjs/nv-togglebutton.cjs.entry.js.map +1 -0
  62. package/dist/cjs/nv-togglebuttongroup.cjs.entry.js +172 -0
  63. package/dist/cjs/nv-togglebuttongroup.cjs.entry.js.map +1 -0
  64. package/dist/cjs/nv-tooltip.cjs.entry.js +1 -1
  65. package/dist/collection/collection-manifest.json +3 -0
  66. package/dist/collection/components/nv-accordion-item/nv-accordion-item.js +1 -1
  67. package/dist/collection/components/nv-accordion-item/nv-accordion-item.js.map +1 -1
  68. package/dist/collection/components/nv-alert/nv-alert.css +5 -0
  69. package/dist/collection/components/nv-badge/nv-badge.css +21 -0
  70. package/dist/collection/components/nv-breadcrumb/nv-breadcrumb.css +2 -0
  71. package/dist/collection/components/nv-button/styles/nv-button.css +8 -0
  72. package/dist/collection/components/nv-buttongroup/nv-buttongroup.docs.js +43 -0
  73. package/dist/collection/components/nv-buttongroup/nv-buttongroup.docs.js.map +1 -0
  74. package/dist/collection/components/nv-buttongroup/nv-buttongroup.js +217 -0
  75. package/dist/collection/components/nv-buttongroup/nv-buttongroup.js.map +1 -0
  76. package/dist/collection/components/nv-buttongroup/nv-buttongroup.utils.js +86 -0
  77. package/dist/collection/components/nv-buttongroup/nv-buttongroup.utils.js.map +1 -0
  78. package/dist/collection/components/nv-buttongroup/styles/nv-buttongroup.css +73 -0
  79. package/dist/collection/components/nv-buttongroup/test/nv-buttongroup.utils.test.js +312 -0
  80. package/dist/collection/components/nv-buttongroup/test/nv-buttongroup.utils.test.js.map +1 -0
  81. package/dist/collection/components/nv-calendar/nv-calendar.css +9 -0
  82. package/dist/collection/components/nv-calendar/nv-calendar.js +44 -25
  83. package/dist/collection/components/nv-calendar/nv-calendar.js.map +1 -1
  84. package/dist/collection/components/nv-calendar/nv-calendar.utils.js +68 -0
  85. package/dist/collection/components/nv-calendar/nv-calendar.utils.js.map +1 -1
  86. package/dist/collection/components/nv-calendar/partials/calendar-grid.js +5 -3
  87. package/dist/collection/components/nv-calendar/partials/calendar-grid.js.map +1 -1
  88. package/dist/collection/components/nv-calendar/partials/day-cell.js +4 -9
  89. package/dist/collection/components/nv-calendar/partials/day-cell.js.map +1 -1
  90. package/dist/collection/components/nv-col/nv-col.js +1 -1
  91. package/dist/collection/components/nv-datagrid/nv-datagrid.css +1 -0
  92. package/dist/collection/components/nv-datagrid/nv-datagrid.js +2 -2
  93. package/dist/collection/components/nv-datagridcolumn/nv-datagridcolumn.js +1 -1
  94. package/dist/collection/components/nv-dialog/nv-dialog.js +1 -1
  95. package/dist/collection/components/nv-dialogfooter/nv-dialogfooter.js +1 -1
  96. package/dist/collection/components/nv-dialogheader/nv-dialogheader.js +1 -1
  97. package/dist/collection/components/nv-fieldcheckbox/nv-fieldcheckbox.css +1 -0
  98. package/dist/collection/components/nv-fieldcheckbox/nv-fieldcheckbox.js +4 -4
  99. package/dist/collection/components/nv-fielddate/nv-fielddate.js +63 -94
  100. package/dist/collection/components/nv-fielddate/nv-fielddate.js.map +1 -1
  101. package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.js +52 -33
  102. package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.js.map +1 -1
  103. package/dist/collection/components/nv-fielddropdown/nv-fielddropdown.js +3 -3
  104. package/dist/collection/components/nv-fielddropdownitem/nv-fielddropdownitem.js +1 -1
  105. package/dist/collection/components/nv-fielddropdownitemcheck/nv-fielddropdownitemcheck.js +1 -1
  106. package/dist/collection/components/nv-fielddropdownitemcheck/nv-fielddropdownitemcheck.js.map +1 -1
  107. package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.docs.js +885 -122
  108. package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.docs.js.map +1 -1
  109. package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.js +561 -89
  110. package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.js.map +1 -1
  111. package/dist/collection/components/nv-fieldmultiselect/styles/nv-fieldmultiselect.css +70 -16
  112. package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.js +3 -3
  113. package/dist/collection/components/nv-fieldpassword/nv-fieldpassword.js +3 -3
  114. package/dist/collection/components/nv-fieldradio/nv-fieldradio.css +1 -0
  115. package/dist/collection/components/nv-fieldradio/nv-fieldradio.js +3 -3
  116. package/dist/collection/components/nv-fieldselect/nv-fieldselect.js +5 -5
  117. package/dist/collection/components/nv-fieldslider/nv-fieldslider.js +3 -3
  118. package/dist/collection/components/nv-fieldtext/nv-fieldtext.js +3 -3
  119. package/dist/collection/components/nv-fieldtextarea/nv-fieldtextarea.js +3 -3
  120. package/dist/collection/components/nv-fieldtime/nv-fieldtime.js +9 -9
  121. package/dist/collection/components/nv-icon/nv-icon.js +1 -1
  122. package/dist/collection/components/nv-icon/nv-icons.js +6 -0
  123. package/dist/collection/components/nv-icon/nv-icons.js.map +1 -1
  124. package/dist/collection/components/nv-iconbutton/nv-iconbutton.css +4 -0
  125. package/dist/collection/components/nv-iconbutton/nv-iconbutton.js +1 -1
  126. package/dist/collection/components/nv-loader/nv-loader.js +1 -1
  127. package/dist/collection/components/nv-menu/nv-menu.js +1 -1
  128. package/dist/collection/components/nv-menuitem/nv-menuitem.js +2 -2
  129. package/dist/collection/components/nv-popover/nv-popover.js +1 -1
  130. package/dist/collection/components/nv-row/nv-row.js +1 -1
  131. package/dist/collection/components/nv-stack/nv-stack.js +1 -1
  132. package/dist/collection/components/nv-table/nv-table.js +2 -2
  133. package/dist/collection/components/nv-toggle/nv-toggle.css +1 -0
  134. package/dist/collection/components/nv-toggle/nv-toggle.js +2 -2
  135. package/dist/collection/components/nv-togglebutton/nv-togglebutton.docs.js +6 -0
  136. package/dist/collection/components/nv-togglebutton/nv-togglebutton.docs.js.map +1 -0
  137. package/dist/collection/components/nv-togglebutton/nv-togglebutton.js +191 -0
  138. package/dist/collection/components/nv-togglebutton/nv-togglebutton.js.map +1 -0
  139. package/dist/collection/components/nv-togglebutton/styles/nv-togglebutton.css +135 -0
  140. package/dist/collection/components/nv-togglebuttongroup/nv-togglebuttongroup.docs.js +56 -0
  141. package/dist/collection/components/nv-togglebuttongroup/nv-togglebuttongroup.docs.js.map +1 -0
  142. package/dist/collection/components/nv-togglebuttongroup/nv-togglebuttongroup.js +324 -0
  143. package/dist/collection/components/nv-togglebuttongroup/nv-togglebuttongroup.js.map +1 -0
  144. package/dist/collection/components/nv-togglebuttongroup/styles/nv-togglebuttongroup.css +45 -0
  145. package/dist/collection/components/nv-tooltip/nv-tooltip.js +1 -1
  146. package/dist/collection/utils/constants.js +12 -0
  147. package/dist/collection/utils/constants.js.map +1 -1
  148. package/dist/components/index.js +7 -1
  149. package/dist/components/index.js.map +1 -1
  150. package/dist/components/nv-accordion-item.js +1 -1
  151. package/dist/components/nv-accordion.js +4 -4
  152. package/dist/components/nv-alert.js +3 -3
  153. package/dist/components/nv-alert.js.map +1 -1
  154. package/dist/components/nv-avatar.js +2 -2
  155. package/dist/components/nv-badge.js +1 -1
  156. package/dist/components/nv-breadcrumb.js +3 -3
  157. package/dist/components/nv-breadcrumb.js.map +1 -1
  158. package/dist/components/nv-button.js +1 -1
  159. package/dist/components/nv-buttongroup.d.ts +11 -0
  160. package/dist/components/nv-buttongroup.js +221 -0
  161. package/dist/components/nv-buttongroup.js.map +1 -0
  162. package/dist/components/nv-calendar.js +1 -1
  163. package/dist/components/nv-col.js +1 -1
  164. package/dist/components/nv-datagrid.js +6 -6
  165. package/dist/components/nv-datagrid.js.map +1 -1
  166. package/dist/components/nv-datagridcolumn.js +1 -1
  167. package/dist/components/nv-dialog.js +7 -7
  168. package/dist/components/nv-dialogfooter.js +1 -1
  169. package/dist/components/nv-dialogheader.js +1 -1
  170. package/dist/components/nv-fieldcheckbox.js +1 -1
  171. package/dist/components/nv-fielddate.js +70 -102
  172. package/dist/components/nv-fielddate.js.map +1 -1
  173. package/dist/components/nv-fielddaterange.js +58 -39
  174. package/dist/components/nv-fielddaterange.js.map +1 -1
  175. package/dist/components/nv-fielddropdown.js +8 -8
  176. package/dist/components/nv-fielddropdownitem.js +1 -1
  177. package/dist/components/nv-fielddropdownitemcheck.js +1 -1
  178. package/dist/components/nv-fieldmultiselect.js +399 -41
  179. package/dist/components/nv-fieldmultiselect.js.map +1 -1
  180. package/dist/components/nv-fieldnumber.js +1 -1
  181. package/dist/components/nv-fieldpassword.js +6 -6
  182. package/dist/components/nv-fieldradio.js +4 -4
  183. package/dist/components/nv-fieldradio.js.map +1 -1
  184. package/dist/components/nv-fieldselect.js +8 -8
  185. package/dist/components/nv-fieldslider.js +7 -7
  186. package/dist/components/nv-fieldtext.js +1 -1
  187. package/dist/components/nv-fieldtextarea.js +3 -3
  188. package/dist/components/nv-fieldtime.js +14 -14
  189. package/dist/components/nv-icon.js +1 -1
  190. package/dist/components/nv-iconbutton.js +1 -1
  191. package/dist/components/nv-loader.js +1 -1
  192. package/dist/components/nv-menu.js +4 -4
  193. package/dist/components/nv-menuitem.js +1 -1
  194. package/dist/components/nv-popover.js +1 -1
  195. package/dist/components/nv-row.js +1 -1
  196. package/dist/components/nv-stack.js +1 -1
  197. package/dist/components/nv-table.js +2 -2
  198. package/dist/components/nv-toggle.js +3 -3
  199. package/dist/components/nv-toggle.js.map +1 -1
  200. package/dist/components/nv-togglebutton.d.ts +11 -0
  201. package/dist/components/nv-togglebutton.js +78 -0
  202. package/dist/components/nv-togglebutton.js.map +1 -0
  203. package/dist/components/nv-togglebuttongroup.d.ts +11 -0
  204. package/dist/components/nv-togglebuttongroup.js +196 -0
  205. package/dist/components/nv-togglebuttongroup.js.map +1 -0
  206. package/dist/components/nv-tooltip.js +1 -1
  207. package/dist/components/{p-68ff562f.js → p-0ffb4785.js} +5 -5
  208. package/dist/components/{p-68ff562f.js.map → p-0ffb4785.js.map} +1 -1
  209. package/dist/components/{p-8067d283.js → p-195f46f3.js} +2 -2
  210. package/dist/components/{p-8067d283.js.map → p-195f46f3.js.map} +1 -1
  211. package/dist/components/{p-e4e1a926.js → p-1bb737fa.js} +3 -3
  212. package/dist/components/{p-e4e1a926.js.map → p-1bb737fa.js.map} +1 -1
  213. package/dist/components/{p-db4ba1d9.js → p-2db5d1ab.js} +7 -7
  214. package/dist/components/{p-db4ba1d9.js.map → p-2db5d1ab.js.map} +1 -1
  215. package/dist/components/{p-ba87d9d5.js → p-2ef4fb88.js} +3 -3
  216. package/dist/components/{p-ba87d9d5.js.map → p-2ef4fb88.js.map} +1 -1
  217. package/dist/components/{p-91a558eb.js → p-32e8e42e.js} +2 -2
  218. package/dist/components/{p-91a558eb.js.map → p-32e8e42e.js.map} +1 -1
  219. package/dist/components/{p-6de6866c.js → p-45a625fb.js} +6 -6
  220. package/dist/components/{p-6de6866c.js.map → p-45a625fb.js.map} +1 -1
  221. package/dist/components/{p-025b8a78.js → p-50d0db7b.js} +5 -5
  222. package/dist/components/{p-025b8a78.js.map → p-50d0db7b.js.map} +1 -1
  223. package/dist/components/{p-ed6686a1.js → p-51876ca1.js} +2 -2
  224. package/dist/components/{p-ed6686a1.js.map → p-51876ca1.js.map} +1 -1
  225. package/dist/components/{p-e104c58a.js → p-51a156ff.js} +3 -3
  226. package/dist/components/p-51a156ff.js.map +1 -0
  227. package/dist/components/p-8011513c.js +189 -0
  228. package/dist/components/{p-60064345.js.map → p-8011513c.js.map} +1 -1
  229. package/dist/components/{p-d32b75ac.js → p-8aee1010.js} +123 -39
  230. package/dist/components/p-8aee1010.js.map +1 -0
  231. package/dist/components/{p-79e6b6a2.js → p-9fdaea9a.js} +5 -5
  232. package/dist/components/p-9fdaea9a.js.map +1 -0
  233. package/dist/components/{p-6460318d.js → p-a1fe0a5d.js} +4 -4
  234. package/dist/components/p-a1fe0a5d.js.map +1 -0
  235. package/dist/components/{p-1f505531.js → p-a3ddec4c.js} +15 -1
  236. package/dist/components/p-a3ddec4c.js.map +1 -0
  237. package/dist/components/{p-0143cee0.js → p-a5002d14.js} +6 -6
  238. package/dist/components/{p-0143cee0.js.map → p-a5002d14.js.map} +1 -1
  239. package/dist/components/{p-30f970c3.js → p-b659b999.js} +3 -3
  240. package/dist/components/{p-30f970c3.js.map → p-b659b999.js.map} +1 -1
  241. package/dist/components/{p-5d5668f0.js → p-cf06032d.js} +4 -4
  242. package/dist/components/{p-5d5668f0.js.map → p-cf06032d.js.map} +1 -1
  243. package/dist/components/{p-dfd2d4f0.js → p-fda58a76.js} +2 -2
  244. package/dist/components/{p-dfd2d4f0.js.map → p-fda58a76.js.map} +1 -1
  245. package/dist/esm/{constants-4faa1fae.js → constants-23aaef7b.js} +15 -1
  246. package/dist/esm/constants-23aaef7b.js.map +1 -0
  247. package/dist/esm/index-a1936cd0.js +12 -0
  248. package/dist/esm/index.js +7 -1
  249. package/dist/esm/index.js.map +1 -1
  250. package/dist/esm/loader.js +1 -1
  251. package/dist/esm/native.js +1 -1
  252. package/dist/esm/nv-accordion-item.entry.js +1 -1
  253. package/dist/esm/nv-accordion-item.entry.js.map +1 -1
  254. package/dist/esm/nv-alert.entry.js +2 -2
  255. package/dist/esm/nv-alert.entry.js.map +1 -1
  256. package/dist/esm/nv-avatar.entry.js +1 -1
  257. package/dist/esm/nv-badge_2.entry.js +2 -2
  258. package/dist/esm/nv-badge_2.entry.js.map +1 -1
  259. package/dist/esm/nv-breadcrumb.entry.js +1 -1
  260. package/dist/esm/nv-breadcrumb.entry.js.map +1 -1
  261. package/dist/esm/nv-button.entry.js +2 -2
  262. package/dist/esm/nv-button.entry.js.map +1 -1
  263. package/dist/esm/nv-buttongroup.entry.js +194 -0
  264. package/dist/esm/nv-buttongroup.entry.js.map +1 -0
  265. package/dist/esm/nv-calendar.entry.js +121 -38
  266. package/dist/esm/nv-calendar.entry.js.map +1 -1
  267. package/dist/esm/nv-col.entry.js +1 -1
  268. package/dist/esm/nv-datagrid.entry.js +4 -4
  269. package/dist/esm/nv-datagrid.entry.js.map +1 -1
  270. package/dist/esm/nv-datagridcolumn.entry.js +1 -1
  271. package/dist/esm/nv-dialog.entry.js +2 -2
  272. package/dist/esm/nv-dialogfooter_2.entry.js +3 -3
  273. package/dist/esm/nv-fieldcheckbox.entry.js +5 -5
  274. package/dist/esm/nv-fieldcheckbox.entry.js.map +1 -1
  275. package/dist/esm/nv-fielddate.entry.js +62 -94
  276. package/dist/esm/nv-fielddate.entry.js.map +1 -1
  277. package/dist/esm/nv-fielddaterange.entry.js +52 -33
  278. package/dist/esm/nv-fielddaterange.entry.js.map +1 -1
  279. package/dist/esm/nv-fielddropdown.entry.js +3 -3
  280. package/dist/esm/nv-fielddropdownitem.entry.js +1 -1
  281. package/dist/esm/nv-fieldmultiselect.entry.js +378 -28
  282. package/dist/esm/nv-fieldmultiselect.entry.js.map +1 -1
  283. package/dist/esm/nv-fieldnumber.entry.js +3 -3
  284. package/dist/esm/nv-fieldpassword.entry.js +3 -3
  285. package/dist/esm/nv-fieldradio.entry.js +4 -4
  286. package/dist/esm/nv-fieldradio.entry.js.map +1 -1
  287. package/dist/esm/nv-fieldselect.entry.js +5 -5
  288. package/dist/esm/nv-fieldslider.entry.js +3 -3
  289. package/dist/esm/nv-fieldtext.entry.js +3 -3
  290. package/dist/esm/nv-fieldtextarea.entry.js +3 -3
  291. package/dist/esm/nv-fieldtime.entry.js +10 -10
  292. package/dist/esm/nv-icon.entry.js +3 -3
  293. package/dist/esm/nv-icon.entry.js.map +1 -1
  294. package/dist/esm/nv-iconbutton_2.entry.js +3 -3
  295. package/dist/esm/nv-iconbutton_2.entry.js.map +1 -1
  296. package/dist/esm/nv-menu.entry.js +1 -1
  297. package/dist/esm/nv-menuitem.entry.js +1 -1
  298. package/dist/esm/nv-popover.entry.js +1 -1
  299. package/dist/esm/nv-row.entry.js +1 -1
  300. package/dist/esm/nv-stack.entry.js +1 -1
  301. package/dist/esm/nv-table.entry.js +2 -2
  302. package/dist/esm/nv-toggle.entry.js +3 -3
  303. package/dist/esm/nv-toggle.entry.js.map +1 -1
  304. package/dist/esm/nv-togglebutton.entry.js +54 -0
  305. package/dist/esm/nv-togglebutton.entry.js.map +1 -0
  306. package/dist/esm/nv-togglebuttongroup.entry.js +168 -0
  307. package/dist/esm/nv-togglebuttongroup.entry.js.map +1 -0
  308. package/dist/esm/nv-tooltip.entry.js +1 -1
  309. package/dist/native/index.esm.js +1 -1
  310. package/dist/native/index.esm.js.map +1 -1
  311. package/dist/native/native.css +1 -1
  312. package/dist/native/native.esm.js +1 -1
  313. package/dist/native/native.esm.js.map +1 -1
  314. package/dist/native/{p-2a6783ca.entry.js → p-0da8f0d1.entry.js} +2 -2
  315. package/dist/native/{p-2a6783ca.entry.js.map → p-0da8f0d1.entry.js.map} +1 -1
  316. package/dist/native/p-0ef94dae.entry.js +2 -0
  317. package/dist/native/{p-1ad1bff9.entry.js.map → p-0ef94dae.entry.js.map} +1 -1
  318. package/dist/native/p-13032ec1.entry.js +2 -0
  319. package/dist/native/p-13032ec1.entry.js.map +1 -0
  320. package/dist/native/p-184032cb.entry.js +2 -0
  321. package/dist/native/{p-a73fa60a.entry.js.map → p-184032cb.entry.js.map} +1 -1
  322. package/dist/native/p-2197ffdf.entry.js +2 -0
  323. package/dist/native/{p-fa81b77f.entry.js.map → p-2197ffdf.entry.js.map} +1 -1
  324. package/dist/native/p-234cfa2e.entry.js +2 -0
  325. package/dist/native/p-2a3325fb.entry.js +2 -0
  326. package/dist/native/p-2a3325fb.entry.js.map +1 -0
  327. package/dist/native/{p-3f139780.entry.js → p-2d647761.entry.js} +2 -2
  328. package/dist/native/{p-ff248eb8.entry.js → p-348c6bb4.entry.js} +2 -2
  329. package/dist/native/p-397c0fca.entry.js +2 -0
  330. package/dist/native/{p-51a57a3a.entry.js.map → p-397c0fca.entry.js.map} +1 -1
  331. package/dist/native/{p-f687e05c.entry.js → p-3da64006.entry.js} +2 -2
  332. package/dist/native/p-3da64006.entry.js.map +1 -0
  333. package/dist/native/p-3ed84cd9.entry.js +2 -0
  334. package/dist/native/{p-fcd52432.entry.js.map → p-3ed84cd9.entry.js.map} +1 -1
  335. package/dist/native/{p-3ff7a912.entry.js → p-3fcaac6d.entry.js} +2 -2
  336. package/dist/native/{p-b7ec9a1b.entry.js → p-4302824a.entry.js} +2 -2
  337. package/dist/native/p-43071c3b.entry.js +2 -0
  338. package/dist/native/p-44dd9a4c.entry.js +2 -0
  339. package/dist/native/p-44dd9a4c.entry.js.map +1 -0
  340. package/dist/native/p-464bb197.entry.js +2 -0
  341. package/dist/native/p-464bb197.entry.js.map +1 -0
  342. package/dist/native/{p-916acbd3.entry.js → p-49504fd6.entry.js} +2 -2
  343. package/dist/native/{p-bc77cac1.entry.js → p-553778e6.entry.js} +2 -2
  344. package/dist/native/p-553778e6.entry.js.map +1 -0
  345. package/dist/native/{p-bee62b2b.entry.js → p-5f0776cb.entry.js} +2 -2
  346. package/dist/native/p-62032cd9.entry.js +2 -0
  347. package/dist/native/p-62032cd9.entry.js.map +1 -0
  348. package/dist/native/{p-11012998.entry.js → p-676447d7.entry.js} +3 -3
  349. package/dist/native/{p-16ef7dd4.entry.js → p-681f2bac.entry.js} +2 -2
  350. package/dist/native/{p-4b15cff3.entry.js → p-7f0d576b.entry.js} +2 -2
  351. package/dist/native/{p-68edb2e8.entry.js → p-85f8f11a.entry.js} +2 -2
  352. package/dist/native/{p-0e005d95.entry.js → p-888ad58e.entry.js} +2 -2
  353. package/dist/native/{p-34bf336f.entry.js → p-92931ab8.entry.js} +2 -2
  354. package/dist/native/{p-f00a4552.entry.js → p-94dc9c41.entry.js} +2 -2
  355. package/dist/native/{p-85a54ef2.entry.js → p-9c5d6827.entry.js} +2 -2
  356. package/dist/native/{p-08452012.entry.js → p-9f451b8a.entry.js} +3 -3
  357. package/dist/native/{p-08452012.entry.js.map → p-9f451b8a.entry.js.map} +1 -1
  358. package/dist/native/{p-1f932a4b.entry.js → p-aacd8789.entry.js} +2 -2
  359. package/dist/native/p-ac5496e7.entry.js +2 -0
  360. package/dist/native/{p-516da423.entry.js → p-ad2cc829.entry.js} +2 -2
  361. package/dist/native/p-ad2cc829.entry.js.map +1 -0
  362. package/dist/native/p-b2442d4b.entry.js +2 -0
  363. package/dist/native/{p-a36dc25a.entry.js.map → p-b2442d4b.entry.js.map} +1 -1
  364. package/dist/native/{p-67c34b8c.entry.js → p-b58fb522.entry.js} +2 -2
  365. package/dist/native/p-ba9906b7.entry.js +2 -0
  366. package/dist/native/{p-64cb38e6.entry.js.map → p-ba9906b7.entry.js.map} +1 -1
  367. package/dist/native/{p-f540db71.entry.js → p-dd023fd6.entry.js} +2 -2
  368. package/dist/native/p-f033c4ce.entry.js +2 -0
  369. package/dist/native/p-f033c4ce.entry.js.map +1 -0
  370. package/dist/native/{p-051db87c.entry.js → p-fb672f90.entry.js} +2 -2
  371. package/dist/native/p-fc9564b3.js +2 -0
  372. package/dist/native/p-fc9564b3.js.map +1 -0
  373. package/dist/types/components/nv-buttongroup/nv-buttongroup.d.ts +50 -0
  374. package/dist/types/components/nv-buttongroup/nv-buttongroup.docs.d.ts +4 -0
  375. package/dist/types/components/nv-buttongroup/nv-buttongroup.utils.d.ts +25 -0
  376. package/dist/types/components/nv-buttongroup/test/nv-buttongroup.utils.test.d.ts +1 -0
  377. package/dist/types/components/nv-calendar/nv-calendar.d.ts +11 -1
  378. package/dist/types/components/nv-calendar/nv-calendar.utils.d.ts +31 -0
  379. package/dist/types/components/nv-calendar/partials/calendar-grid.d.ts +11 -1
  380. package/dist/types/components/nv-calendar/partials/day-cell.d.ts +7 -1
  381. package/dist/types/components/nv-fielddate/nv-fielddate.d.ts +4 -19
  382. package/dist/types/components/nv-fielddaterange/nv-fielddaterange.d.ts +1 -0
  383. package/dist/types/components/nv-fieldmultiselect/nv-fieldmultiselect.d.ts +116 -23
  384. package/dist/types/components/nv-icon/nv-icons.d.ts +1 -1
  385. package/dist/types/components/nv-togglebutton/nv-togglebutton.d.ts +46 -0
  386. package/dist/types/components/nv-togglebutton/nv-togglebutton.docs.d.ts +4 -0
  387. package/dist/types/components/nv-togglebuttongroup/nv-togglebuttongroup.d.ts +80 -0
  388. package/dist/types/components/nv-togglebuttongroup/nv-togglebuttongroup.docs.d.ts +4 -0
  389. package/dist/types/components.d.ts +289 -2
  390. package/dist/types/utils/constants.d.ts +10 -0
  391. package/dist/vscode-data.json +189 -0
  392. package/hydrate/index.js +1167 -271
  393. package/hydrate/index.mjs +1167 -271
  394. package/package.json +14 -2
  395. package/dist/cjs/constants-8fb8ccc0.js.map +0 -1
  396. package/dist/components/p-1f505531.js.map +0 -1
  397. package/dist/components/p-60064345.js +0 -189
  398. package/dist/components/p-6460318d.js.map +0 -1
  399. package/dist/components/p-79e6b6a2.js.map +0 -1
  400. package/dist/components/p-d32b75ac.js.map +0 -1
  401. package/dist/components/p-e104c58a.js.map +0 -1
  402. package/dist/esm/constants-4faa1fae.js.map +0 -1
  403. package/dist/native/p-10ce53ea.entry.js +0 -2
  404. package/dist/native/p-1ad1bff9.entry.js +0 -2
  405. package/dist/native/p-516da423.entry.js.map +0 -1
  406. package/dist/native/p-51a57a3a.entry.js +0 -2
  407. package/dist/native/p-64cb38e6.entry.js +0 -2
  408. package/dist/native/p-73c08f3b.entry.js +0 -2
  409. package/dist/native/p-73c08f3b.entry.js.map +0 -1
  410. package/dist/native/p-a36dc25a.entry.js +0 -2
  411. package/dist/native/p-a50f3850.entry.js +0 -2
  412. package/dist/native/p-a73fa60a.entry.js +0 -2
  413. package/dist/native/p-b3f9db23.entry.js +0 -2
  414. package/dist/native/p-b3f9db23.entry.js.map +0 -1
  415. package/dist/native/p-bc77cac1.entry.js.map +0 -1
  416. package/dist/native/p-dc34da69.entry.js +0 -2
  417. package/dist/native/p-dc34da69.entry.js.map +0 -1
  418. package/dist/native/p-e2d0a77d.js +0 -2
  419. package/dist/native/p-e2d0a77d.js.map +0 -1
  420. package/dist/native/p-ec92ee7a.entry.js +0 -2
  421. package/dist/native/p-f687e05c.entry.js.map +0 -1
  422. package/dist/native/p-fa81b77f.entry.js +0 -2
  423. package/dist/native/p-fcd52432.entry.js +0 -2
  424. /package/dist/native/{p-ec92ee7a.entry.js.map → p-234cfa2e.entry.js.map} +0 -0
  425. /package/dist/native/{p-3f139780.entry.js.map → p-2d647761.entry.js.map} +0 -0
  426. /package/dist/native/{p-ff248eb8.entry.js.map → p-348c6bb4.entry.js.map} +0 -0
  427. /package/dist/native/{p-3ff7a912.entry.js.map → p-3fcaac6d.entry.js.map} +0 -0
  428. /package/dist/native/{p-b7ec9a1b.entry.js.map → p-4302824a.entry.js.map} +0 -0
  429. /package/dist/native/{p-10ce53ea.entry.js.map → p-43071c3b.entry.js.map} +0 -0
  430. /package/dist/native/{p-916acbd3.entry.js.map → p-49504fd6.entry.js.map} +0 -0
  431. /package/dist/native/{p-bee62b2b.entry.js.map → p-5f0776cb.entry.js.map} +0 -0
  432. /package/dist/native/{p-11012998.entry.js.map → p-676447d7.entry.js.map} +0 -0
  433. /package/dist/native/{p-16ef7dd4.entry.js.map → p-681f2bac.entry.js.map} +0 -0
  434. /package/dist/native/{p-4b15cff3.entry.js.map → p-7f0d576b.entry.js.map} +0 -0
  435. /package/dist/native/{p-68edb2e8.entry.js.map → p-85f8f11a.entry.js.map} +0 -0
  436. /package/dist/native/{p-0e005d95.entry.js.map → p-888ad58e.entry.js.map} +0 -0
  437. /package/dist/native/{p-34bf336f.entry.js.map → p-92931ab8.entry.js.map} +0 -0
  438. /package/dist/native/{p-f00a4552.entry.js.map → p-94dc9c41.entry.js.map} +0 -0
  439. /package/dist/native/{p-85a54ef2.entry.js.map → p-9c5d6827.entry.js.map} +0 -0
  440. /package/dist/native/{p-1f932a4b.entry.js.map → p-aacd8789.entry.js.map} +0 -0
  441. /package/dist/native/{p-a50f3850.entry.js.map → p-ac5496e7.entry.js.map} +0 -0
  442. /package/dist/native/{p-67c34b8c.entry.js.map → p-b58fb522.entry.js.map} +0 -0
  443. /package/dist/native/{p-f540db71.entry.js.map → p-dd023fd6.entry.js.map} +0 -0
  444. /package/dist/native/{p-051db87c.entry.js.map → p-fb672f90.entry.js.map} +0 -0
@@ -0,0 +1,312 @@
1
+ // @vitest-environment happy-dom
2
+ /* eslint-disable jsdoc/require-jsdoc */
3
+ import { describe, it, expect, beforeEach } from "vitest";
4
+ import { findFirstButtonOrLink, forwardPropsToChildren, } from "../nv-buttongroup.utils";
5
+ describe('nv-buttongroup -> utils', () => {
6
+ describe('findFirstButtonOrLink', () => {
7
+ it('should return the element itself if it is an nv-button', () => {
8
+ const button = document.createElement('nv-button');
9
+ const result = findFirstButtonOrLink(button);
10
+ expect(result).toBe(button);
11
+ });
12
+ it('should return the element itself if it is an nv-iconbutton', () => {
13
+ const iconButton = document.createElement('nv-iconbutton');
14
+ const result = findFirstButtonOrLink(iconButton);
15
+ expect(result).toBe(iconButton);
16
+ });
17
+ it('should return the element itself if it is an anchor tag', () => {
18
+ const anchor = document.createElement('a');
19
+ const result = findFirstButtonOrLink(anchor);
20
+ expect(result).toBe(anchor);
21
+ });
22
+ it('should return null for non-matching elements', () => {
23
+ const div = document.createElement('div');
24
+ const result = findFirstButtonOrLink(div);
25
+ expect(result).toBe(null);
26
+ });
27
+ it('should find nested nv-button within multiple div layers', () => {
28
+ const container = document.createElement('div');
29
+ const wrapper = document.createElement('div');
30
+ const innerWrapper = document.createElement('div');
31
+ const button = document.createElement('nv-button');
32
+ container.appendChild(wrapper);
33
+ wrapper.appendChild(innerWrapper);
34
+ innerWrapper.appendChild(button);
35
+ const result = findFirstButtonOrLink(container);
36
+ expect(result).toBe(button);
37
+ });
38
+ it('should find nested nv-iconbutton within complex structure', () => {
39
+ const container = document.createElement('div');
40
+ const span = document.createElement('span');
41
+ const iconButton = document.createElement('nv-iconbutton');
42
+ container.appendChild(span);
43
+ span.appendChild(iconButton);
44
+ const result = findFirstButtonOrLink(container);
45
+ expect(result).toBe(iconButton);
46
+ });
47
+ it('should find nested anchor tag within container elements', () => {
48
+ const container = document.createElement('div');
49
+ const listItem = document.createElement('li');
50
+ const anchor = document.createElement('a');
51
+ container.appendChild(listItem);
52
+ listItem.appendChild(anchor);
53
+ const result = findFirstButtonOrLink(container);
54
+ expect(result).toBe(anchor);
55
+ });
56
+ it('should return the first found element when multiple exist', () => {
57
+ const container = document.createElement('div');
58
+ const firstButton = document.createElement('nv-button');
59
+ const secondButton = document.createElement('nv-iconbutton');
60
+ const anchor = document.createElement('a');
61
+ container.appendChild(firstButton);
62
+ container.appendChild(secondButton);
63
+ container.appendChild(anchor);
64
+ const result = findFirstButtonOrLink(container);
65
+ expect(result).toBe(firstButton);
66
+ });
67
+ it('should return null when no matching elements exist in deep structure', () => {
68
+ const container = document.createElement('div');
69
+ const wrapper = document.createElement('div');
70
+ const span = document.createElement('span');
71
+ const paragraph = document.createElement('p');
72
+ container.appendChild(wrapper);
73
+ wrapper.appendChild(span);
74
+ span.appendChild(paragraph);
75
+ const result = findFirstButtonOrLink(container);
76
+ expect(result).toBe(null);
77
+ });
78
+ it('should handle empty containers', () => {
79
+ const container = document.createElement('div');
80
+ const result = findFirstButtonOrLink(container);
81
+ expect(result).toBe(null);
82
+ });
83
+ it('should prioritize first occurrence in document order', () => {
84
+ const container = document.createElement('div');
85
+ const firstDiv = document.createElement('div');
86
+ const secondDiv = document.createElement('div');
87
+ const firstButton = document.createElement('nv-button');
88
+ const secondButton = document.createElement('nv-iconbutton');
89
+ // Add buttons to different branches
90
+ firstDiv.appendChild(firstButton);
91
+ secondDiv.appendChild(secondButton);
92
+ container.appendChild(firstDiv);
93
+ container.appendChild(secondDiv);
94
+ const result = findFirstButtonOrLink(container);
95
+ expect(result).toBe(firstButton);
96
+ });
97
+ });
98
+ describe('forwardPropsToChildren', () => {
99
+ let container;
100
+ let props;
101
+ beforeEach(() => {
102
+ container = document.createElement('div');
103
+ props = {
104
+ size: 'medium',
105
+ emphasis: 'high',
106
+ fluid: false,
107
+ };
108
+ });
109
+ it('should set size and emphasis attributes on nv-button elements', () => {
110
+ const button = document.createElement('nv-button');
111
+ container.appendChild(button);
112
+ forwardPropsToChildren(container, props);
113
+ expect(button.getAttribute('size')).toBe('medium');
114
+ expect(button.getAttribute('emphasis')).toBe('high');
115
+ });
116
+ it('should set size and emphasis attributes on nv-iconbutton elements', () => {
117
+ const iconButton = document.createElement('nv-iconbutton');
118
+ container.appendChild(iconButton);
119
+ forwardPropsToChildren(container, props);
120
+ expect(iconButton.getAttribute('size')).toBe('medium');
121
+ expect(iconButton.getAttribute('emphasis')).toBe('high');
122
+ });
123
+ it('should add CSS classes to anchor elements instead of attributes', () => {
124
+ const anchor = document.createElement('a');
125
+ container.appendChild(anchor);
126
+ forwardPropsToChildren(container, props);
127
+ expect(anchor.classList.contains('nv-button')).toBe(true);
128
+ expect(anchor.classList.contains('size-medium')).toBe(true);
129
+ expect(anchor.classList.contains('emphasis-high')).toBe(true);
130
+ expect(anchor.getAttribute('size')).toBe(null);
131
+ expect(anchor.getAttribute('emphasis')).toBe(null);
132
+ });
133
+ it('should handle fluid prop by adding fluid attribute to nv-button', () => {
134
+ const button = document.createElement('nv-button');
135
+ container.appendChild(button);
136
+ props.fluid = true;
137
+ forwardPropsToChildren(container, props);
138
+ expect(button.hasAttribute('fluid')).toBe(true);
139
+ });
140
+ it('should handle fluid prop by removing fluid attribute when false', () => {
141
+ const button = document.createElement('nv-button');
142
+ button.setAttribute('fluid', '');
143
+ container.appendChild(button);
144
+ props.fluid = false;
145
+ forwardPropsToChildren(container, props);
146
+ expect(button.hasAttribute('fluid')).toBe(false);
147
+ });
148
+ it('should add fluid CSS class to anchor elements when fluid is true', () => {
149
+ const anchor = document.createElement('a');
150
+ container.appendChild(anchor);
151
+ props.fluid = true;
152
+ forwardPropsToChildren(container, props);
153
+ expect(anchor.classList.contains('fluid')).toBe(true);
154
+ });
155
+ it('should remove fluid CSS class from anchor elements when fluid is false', () => {
156
+ const anchor = document.createElement('a');
157
+ anchor.classList.add('fluid');
158
+ container.appendChild(anchor);
159
+ props.fluid = false;
160
+ forwardPropsToChildren(container, props);
161
+ expect(anchor.classList.contains('fluid')).toBe(false);
162
+ });
163
+ it('should add first class to first button', () => {
164
+ const firstButton = document.createElement('nv-button');
165
+ const secondButton = document.createElement('nv-button');
166
+ container.appendChild(firstButton);
167
+ container.appendChild(secondButton);
168
+ forwardPropsToChildren(container, props);
169
+ expect(firstButton.classList.contains('first')).toBe(true);
170
+ expect(secondButton.classList.contains('first')).toBe(false);
171
+ });
172
+ it('should add last class to last button', () => {
173
+ const firstButton = document.createElement('nv-button');
174
+ const secondButton = document.createElement('nv-button');
175
+ container.appendChild(firstButton);
176
+ container.appendChild(secondButton);
177
+ forwardPropsToChildren(container, props);
178
+ expect(firstButton.classList.contains('last')).toBe(false);
179
+ expect(secondButton.classList.contains('last')).toBe(true);
180
+ });
181
+ it('should add group-item class to all buttons', () => {
182
+ const firstButton = document.createElement('nv-button');
183
+ const secondButton = document.createElement('nv-iconbutton');
184
+ const anchor = document.createElement('a');
185
+ container.appendChild(firstButton);
186
+ container.appendChild(secondButton);
187
+ container.appendChild(anchor);
188
+ forwardPropsToChildren(container, props);
189
+ expect(firstButton.classList.contains('group-item')).toBe(true);
190
+ expect(secondButton.classList.contains('group-item')).toBe(true);
191
+ expect(anchor.classList.contains('group-item')).toBe(true);
192
+ });
193
+ it('should remove existing positional classes before applying new ones', () => {
194
+ const button = document.createElement('nv-button');
195
+ button.classList.add('first', 'last', 'group-item');
196
+ container.appendChild(button);
197
+ forwardPropsToChildren(container, props);
198
+ // Should have been removed and re-added based on actual position
199
+ expect(button.classList.contains('first')).toBe(true);
200
+ expect(button.classList.contains('last')).toBe(true);
201
+ expect(button.classList.contains('group-item')).toBe(true);
202
+ });
203
+ it('should handle single button (both first and last)', () => {
204
+ const button = document.createElement('nv-button');
205
+ container.appendChild(button);
206
+ forwardPropsToChildren(container, props);
207
+ expect(button.classList.contains('first')).toBe(true);
208
+ expect(button.classList.contains('last')).toBe(true);
209
+ expect(button.classList.contains('group-item')).toBe(true);
210
+ });
211
+ it('should work with nested button elements', () => {
212
+ const wrapper = document.createElement('div');
213
+ const button = document.createElement('nv-button');
214
+ wrapper.appendChild(button);
215
+ container.appendChild(wrapper);
216
+ forwardPropsToChildren(container, props);
217
+ expect(button.getAttribute('size')).toBe('medium');
218
+ expect(button.getAttribute('emphasis')).toBe('high');
219
+ expect(button.classList.contains('first')).toBe(true);
220
+ expect(button.classList.contains('last')).toBe(true);
221
+ expect(button.classList.contains('group-item')).toBe(true);
222
+ });
223
+ it('should work with mixed element types (buttons + links)', () => {
224
+ const button = document.createElement('nv-button');
225
+ const iconButton = document.createElement('nv-iconbutton');
226
+ const anchor = document.createElement('a');
227
+ container.appendChild(button);
228
+ container.appendChild(iconButton);
229
+ container.appendChild(anchor);
230
+ forwardPropsToChildren(container, props);
231
+ // Check button attributes
232
+ expect(button.getAttribute('size')).toBe('medium');
233
+ expect(button.getAttribute('emphasis')).toBe('high');
234
+ expect(button.classList.contains('first')).toBe(true);
235
+ expect(button.classList.contains('group-item')).toBe(true);
236
+ // Check iconbutton attributes
237
+ expect(iconButton.getAttribute('size')).toBe('medium');
238
+ expect(iconButton.getAttribute('emphasis')).toBe('high');
239
+ expect(iconButton.classList.contains('group-item')).toBe(true);
240
+ // Check anchor classes
241
+ expect(anchor.classList.contains('nv-button')).toBe(true);
242
+ expect(anchor.classList.contains('size-medium')).toBe(true);
243
+ expect(anchor.classList.contains('emphasis-high')).toBe(true);
244
+ expect(anchor.classList.contains('last')).toBe(true);
245
+ expect(anchor.classList.contains('group-item')).toBe(true);
246
+ });
247
+ it('should work with empty containers', () => {
248
+ // Should not throw any errors
249
+ expect(() => forwardPropsToChildren(container, props)).not.toThrow();
250
+ });
251
+ it('should handle containers with no valid button/link children', () => {
252
+ const div = document.createElement('div');
253
+ const span = document.createElement('span');
254
+ container.appendChild(div);
255
+ container.appendChild(span);
256
+ // Should not throw any errors
257
+ expect(() => forwardPropsToChildren(container, props)).not.toThrow();
258
+ });
259
+ it('should handle all size values', () => {
260
+ const button = document.createElement('nv-button');
261
+ container.appendChild(button);
262
+ const sizeValues = ['small', 'medium', 'large'];
263
+ sizeValues.forEach(size => {
264
+ props.size = size;
265
+ forwardPropsToChildren(container, props);
266
+ expect(button.getAttribute('size')).toBe(size);
267
+ });
268
+ });
269
+ it('should handle all emphasis values', () => {
270
+ const button = document.createElement('nv-button');
271
+ container.appendChild(button);
272
+ const emphasisValues = ['low', 'medium', 'high'];
273
+ emphasisValues.forEach(emphasis => {
274
+ props.emphasis = emphasis;
275
+ forwardPropsToChildren(container, props);
276
+ expect(button.getAttribute('emphasis')).toBe(emphasis);
277
+ });
278
+ });
279
+ it('should apply different logic for nv-button vs anchor elements', () => {
280
+ const button = document.createElement('nv-button');
281
+ const anchor = document.createElement('a');
282
+ container.appendChild(button);
283
+ container.appendChild(anchor);
284
+ forwardPropsToChildren(container, props);
285
+ // Button should have attributes
286
+ expect(button.getAttribute('size')).toBe('medium');
287
+ expect(button.getAttribute('emphasis')).toBe('high');
288
+ expect(button.hasAttribute('fluid')).toBe(false);
289
+ // Anchor should have classes
290
+ expect(anchor.getAttribute('size')).toBe(null);
291
+ expect(anchor.getAttribute('emphasis')).toBe(null);
292
+ expect(anchor.classList.contains('size-medium')).toBe(true);
293
+ expect(anchor.classList.contains('emphasis-high')).toBe(true);
294
+ expect(anchor.classList.contains('fluid')).toBe(false);
295
+ });
296
+ it('should handle complex nested structures with multiple levels', () => {
297
+ const outerDiv = document.createElement('div');
298
+ const innerDiv = document.createElement('div');
299
+ const button = document.createElement('nv-button');
300
+ outerDiv.appendChild(innerDiv);
301
+ innerDiv.appendChild(button);
302
+ container.appendChild(outerDiv);
303
+ forwardPropsToChildren(container, props);
304
+ expect(button.getAttribute('size')).toBe('medium');
305
+ expect(button.getAttribute('emphasis')).toBe('high');
306
+ expect(button.classList.contains('first')).toBe(true);
307
+ expect(button.classList.contains('last')).toBe(true);
308
+ expect(button.classList.contains('group-item')).toBe(true);
309
+ });
310
+ });
311
+ });
312
+ //# sourceMappingURL=nv-buttongroup.utils.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nv-buttongroup.utils.test.js","sourceRoot":"","sources":["../../../../src/components/nv-buttongroup/test/nv-buttongroup.utils.test.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,wCAAwC;AAExC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AAEjC,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAChE,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAqB,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;YACpE,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,qBAAqB,CAAC,UAAyB,CAAC,CAAC;YAChE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAqB,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,qBAAqB,CAAC,GAAkB,CAAC,CAAC;YACzD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YAEnD,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC/B,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YAClC,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAEjC,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAwB,CAAC,CAAC;YAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;YACnE,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC5C,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;YAE3D,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YAE7B,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAwB,CAAC,CAAC;YAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAE3C,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAChC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAE7B,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAwB,CAAC,CAAC;YAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;YACnE,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YACxD,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;YAC7D,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAE3C,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YACnC,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YACpC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAE9B,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAwB,CAAC,CAAC;YAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;YAC9E,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC5C,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAE9C,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC/B,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAE5B,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAwB,CAAC,CAAC;YAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAwB,CAAC,CAAC;YAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC/C,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YACxD,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;YAE7D,oCAAoC;YACpC,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YAClC,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YACpC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAChC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAEjC,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAwB,CAAC,CAAC;YAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,IAAI,SAAsB,CAAC;QAC3B,IAAI,KAAyD,CAAC;QAE9D,UAAU,CAAC,GAAG,EAAE;YACd,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAgB,CAAC;YACzD,KAAK,GAAG;gBACN,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,KAAK;aACb,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;YACvE,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YACnD,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAE9B,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEzC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;YAC3E,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;YAC3D,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YAElC,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEzC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvD,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;YACzE,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAC3C,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAE9B,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEzC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1D,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9D,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;YACzE,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YACnD,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAE9B,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YACnB,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEzC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;YACzE,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YACnD,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACjC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAE9B,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;YACpB,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEzC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;YAC1E,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAC3C,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAE9B,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YACnB,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEzC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;YAChF,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAC3C,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC9B,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAE9B,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;YACpB,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEzC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YACxD,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YACzD,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YACnC,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YAEpC,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEzC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3D,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YACxD,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YACzD,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YACnC,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YAEpC,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEzC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3D,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YACxD,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;YAC7D,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAC3C,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YACnC,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YACpC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAE9B,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEzC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChE,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;YAC5E,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YACnD,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YACpD,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAE9B,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEzC,iEAAiE;YACjE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YACnD,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAE9B,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEzC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YACnD,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC5B,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAE/B,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEzC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAChE,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YACnD,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAE3C,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC9B,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YAClC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAE9B,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEzC,0BAA0B;YAC1B,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE3D,8BAA8B;YAC9B,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvD,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzD,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE/D,uBAAuB;YACvB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1D,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9D,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,8BAA8B;YAC9B,MAAM,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;YACrE,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC5C,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAC3B,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAE5B,8BAA8B;YAC9B,MAAM,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YACnD,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAE9B,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAEhD,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACxB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;gBAClB,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBACzC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YACnD,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAE9B,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAEjD,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAChC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBAC1B,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBACzC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;YACvE,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAC3C,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC9B,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAE9B,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEzC,gCAAgC;YAChC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEjD,6BAA6B;YAC7B,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9D,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;YACtE,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YAEnD,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC/B,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC7B,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAEhC,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEzC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["// @vitest-environment happy-dom\n/* eslint-disable jsdoc/require-jsdoc */\n\nimport { describe, it, expect, beforeEach } from 'vitest';\nimport {\n findFirstButtonOrLink,\n forwardPropsToChildren,\n} from '../nv-buttongroup.utils';\n\ndescribe('nv-buttongroup -> utils', () => {\n describe('findFirstButtonOrLink', () => {\n it('should return the element itself if it is an nv-button', () => {\n const button = document.createElement('nv-button');\n const result = findFirstButtonOrLink(button as HTMLElement);\n expect(result).toBe(button);\n });\n\n it('should return the element itself if it is an nv-iconbutton', () => {\n const iconButton = document.createElement('nv-iconbutton');\n const result = findFirstButtonOrLink(iconButton as HTMLElement);\n expect(result).toBe(iconButton);\n });\n\n it('should return the element itself if it is an anchor tag', () => {\n const anchor = document.createElement('a');\n const result = findFirstButtonOrLink(anchor as HTMLElement);\n expect(result).toBe(anchor);\n });\n\n it('should return null for non-matching elements', () => {\n const div = document.createElement('div');\n const result = findFirstButtonOrLink(div as HTMLElement);\n expect(result).toBe(null);\n });\n\n it('should find nested nv-button within multiple div layers', () => {\n const container = document.createElement('div');\n const wrapper = document.createElement('div');\n const innerWrapper = document.createElement('div');\n const button = document.createElement('nv-button');\n\n container.appendChild(wrapper);\n wrapper.appendChild(innerWrapper);\n innerWrapper.appendChild(button);\n\n const result = findFirstButtonOrLink(container as HTMLElement);\n expect(result).toBe(button);\n });\n\n it('should find nested nv-iconbutton within complex structure', () => {\n const container = document.createElement('div');\n const span = document.createElement('span');\n const iconButton = document.createElement('nv-iconbutton');\n\n container.appendChild(span);\n span.appendChild(iconButton);\n\n const result = findFirstButtonOrLink(container as HTMLElement);\n expect(result).toBe(iconButton);\n });\n\n it('should find nested anchor tag within container elements', () => {\n const container = document.createElement('div');\n const listItem = document.createElement('li');\n const anchor = document.createElement('a');\n\n container.appendChild(listItem);\n listItem.appendChild(anchor);\n\n const result = findFirstButtonOrLink(container as HTMLElement);\n expect(result).toBe(anchor);\n });\n\n it('should return the first found element when multiple exist', () => {\n const container = document.createElement('div');\n const firstButton = document.createElement('nv-button');\n const secondButton = document.createElement('nv-iconbutton');\n const anchor = document.createElement('a');\n\n container.appendChild(firstButton);\n container.appendChild(secondButton);\n container.appendChild(anchor);\n\n const result = findFirstButtonOrLink(container as HTMLElement);\n expect(result).toBe(firstButton);\n });\n\n it('should return null when no matching elements exist in deep structure', () => {\n const container = document.createElement('div');\n const wrapper = document.createElement('div');\n const span = document.createElement('span');\n const paragraph = document.createElement('p');\n\n container.appendChild(wrapper);\n wrapper.appendChild(span);\n span.appendChild(paragraph);\n\n const result = findFirstButtonOrLink(container as HTMLElement);\n expect(result).toBe(null);\n });\n\n it('should handle empty containers', () => {\n const container = document.createElement('div');\n const result = findFirstButtonOrLink(container as HTMLElement);\n expect(result).toBe(null);\n });\n\n it('should prioritize first occurrence in document order', () => {\n const container = document.createElement('div');\n const firstDiv = document.createElement('div');\n const secondDiv = document.createElement('div');\n const firstButton = document.createElement('nv-button');\n const secondButton = document.createElement('nv-iconbutton');\n\n // Add buttons to different branches\n firstDiv.appendChild(firstButton);\n secondDiv.appendChild(secondButton);\n container.appendChild(firstDiv);\n container.appendChild(secondDiv);\n\n const result = findFirstButtonOrLink(container as HTMLElement);\n expect(result).toBe(firstButton);\n });\n });\n\n describe('forwardPropsToChildren', () => {\n let container: HTMLElement;\n let props: { size: string; emphasis: string; fluid: boolean };\n\n beforeEach(() => {\n container = document.createElement('div') as HTMLElement;\n props = {\n size: 'medium',\n emphasis: 'high',\n fluid: false,\n };\n });\n\n it('should set size and emphasis attributes on nv-button elements', () => {\n const button = document.createElement('nv-button');\n container.appendChild(button);\n\n forwardPropsToChildren(container, props);\n\n expect(button.getAttribute('size')).toBe('medium');\n expect(button.getAttribute('emphasis')).toBe('high');\n });\n\n it('should set size and emphasis attributes on nv-iconbutton elements', () => {\n const iconButton = document.createElement('nv-iconbutton');\n container.appendChild(iconButton);\n\n forwardPropsToChildren(container, props);\n\n expect(iconButton.getAttribute('size')).toBe('medium');\n expect(iconButton.getAttribute('emphasis')).toBe('high');\n });\n\n it('should add CSS classes to anchor elements instead of attributes', () => {\n const anchor = document.createElement('a');\n container.appendChild(anchor);\n\n forwardPropsToChildren(container, props);\n\n expect(anchor.classList.contains('nv-button')).toBe(true);\n expect(anchor.classList.contains('size-medium')).toBe(true);\n expect(anchor.classList.contains('emphasis-high')).toBe(true);\n expect(anchor.getAttribute('size')).toBe(null);\n expect(anchor.getAttribute('emphasis')).toBe(null);\n });\n\n it('should handle fluid prop by adding fluid attribute to nv-button', () => {\n const button = document.createElement('nv-button');\n container.appendChild(button);\n\n props.fluid = true;\n forwardPropsToChildren(container, props);\n\n expect(button.hasAttribute('fluid')).toBe(true);\n });\n\n it('should handle fluid prop by removing fluid attribute when false', () => {\n const button = document.createElement('nv-button');\n button.setAttribute('fluid', '');\n container.appendChild(button);\n\n props.fluid = false;\n forwardPropsToChildren(container, props);\n\n expect(button.hasAttribute('fluid')).toBe(false);\n });\n\n it('should add fluid CSS class to anchor elements when fluid is true', () => {\n const anchor = document.createElement('a');\n container.appendChild(anchor);\n\n props.fluid = true;\n forwardPropsToChildren(container, props);\n\n expect(anchor.classList.contains('fluid')).toBe(true);\n });\n\n it('should remove fluid CSS class from anchor elements when fluid is false', () => {\n const anchor = document.createElement('a');\n anchor.classList.add('fluid');\n container.appendChild(anchor);\n\n props.fluid = false;\n forwardPropsToChildren(container, props);\n\n expect(anchor.classList.contains('fluid')).toBe(false);\n });\n\n it('should add first class to first button', () => {\n const firstButton = document.createElement('nv-button');\n const secondButton = document.createElement('nv-button');\n container.appendChild(firstButton);\n container.appendChild(secondButton);\n\n forwardPropsToChildren(container, props);\n\n expect(firstButton.classList.contains('first')).toBe(true);\n expect(secondButton.classList.contains('first')).toBe(false);\n });\n\n it('should add last class to last button', () => {\n const firstButton = document.createElement('nv-button');\n const secondButton = document.createElement('nv-button');\n container.appendChild(firstButton);\n container.appendChild(secondButton);\n\n forwardPropsToChildren(container, props);\n\n expect(firstButton.classList.contains('last')).toBe(false);\n expect(secondButton.classList.contains('last')).toBe(true);\n });\n\n it('should add group-item class to all buttons', () => {\n const firstButton = document.createElement('nv-button');\n const secondButton = document.createElement('nv-iconbutton');\n const anchor = document.createElement('a');\n container.appendChild(firstButton);\n container.appendChild(secondButton);\n container.appendChild(anchor);\n\n forwardPropsToChildren(container, props);\n\n expect(firstButton.classList.contains('group-item')).toBe(true);\n expect(secondButton.classList.contains('group-item')).toBe(true);\n expect(anchor.classList.contains('group-item')).toBe(true);\n });\n\n it('should remove existing positional classes before applying new ones', () => {\n const button = document.createElement('nv-button');\n button.classList.add('first', 'last', 'group-item');\n container.appendChild(button);\n\n forwardPropsToChildren(container, props);\n\n // Should have been removed and re-added based on actual position\n expect(button.classList.contains('first')).toBe(true);\n expect(button.classList.contains('last')).toBe(true);\n expect(button.classList.contains('group-item')).toBe(true);\n });\n\n it('should handle single button (both first and last)', () => {\n const button = document.createElement('nv-button');\n container.appendChild(button);\n\n forwardPropsToChildren(container, props);\n\n expect(button.classList.contains('first')).toBe(true);\n expect(button.classList.contains('last')).toBe(true);\n expect(button.classList.contains('group-item')).toBe(true);\n });\n\n it('should work with nested button elements', () => {\n const wrapper = document.createElement('div');\n const button = document.createElement('nv-button');\n wrapper.appendChild(button);\n container.appendChild(wrapper);\n\n forwardPropsToChildren(container, props);\n\n expect(button.getAttribute('size')).toBe('medium');\n expect(button.getAttribute('emphasis')).toBe('high');\n expect(button.classList.contains('first')).toBe(true);\n expect(button.classList.contains('last')).toBe(true);\n expect(button.classList.contains('group-item')).toBe(true);\n });\n\n it('should work with mixed element types (buttons + links)', () => {\n const button = document.createElement('nv-button');\n const iconButton = document.createElement('nv-iconbutton');\n const anchor = document.createElement('a');\n\n container.appendChild(button);\n container.appendChild(iconButton);\n container.appendChild(anchor);\n\n forwardPropsToChildren(container, props);\n\n // Check button attributes\n expect(button.getAttribute('size')).toBe('medium');\n expect(button.getAttribute('emphasis')).toBe('high');\n expect(button.classList.contains('first')).toBe(true);\n expect(button.classList.contains('group-item')).toBe(true);\n\n // Check iconbutton attributes\n expect(iconButton.getAttribute('size')).toBe('medium');\n expect(iconButton.getAttribute('emphasis')).toBe('high');\n expect(iconButton.classList.contains('group-item')).toBe(true);\n\n // Check anchor classes\n expect(anchor.classList.contains('nv-button')).toBe(true);\n expect(anchor.classList.contains('size-medium')).toBe(true);\n expect(anchor.classList.contains('emphasis-high')).toBe(true);\n expect(anchor.classList.contains('last')).toBe(true);\n expect(anchor.classList.contains('group-item')).toBe(true);\n });\n\n it('should work with empty containers', () => {\n // Should not throw any errors\n expect(() => forwardPropsToChildren(container, props)).not.toThrow();\n });\n\n it('should handle containers with no valid button/link children', () => {\n const div = document.createElement('div');\n const span = document.createElement('span');\n container.appendChild(div);\n container.appendChild(span);\n\n // Should not throw any errors\n expect(() => forwardPropsToChildren(container, props)).not.toThrow();\n });\n\n it('should handle all size values', () => {\n const button = document.createElement('nv-button');\n container.appendChild(button);\n\n const sizeValues = ['small', 'medium', 'large'];\n\n sizeValues.forEach(size => {\n props.size = size;\n forwardPropsToChildren(container, props);\n expect(button.getAttribute('size')).toBe(size);\n });\n });\n\n it('should handle all emphasis values', () => {\n const button = document.createElement('nv-button');\n container.appendChild(button);\n\n const emphasisValues = ['low', 'medium', 'high'];\n\n emphasisValues.forEach(emphasis => {\n props.emphasis = emphasis;\n forwardPropsToChildren(container, props);\n expect(button.getAttribute('emphasis')).toBe(emphasis);\n });\n });\n\n it('should apply different logic for nv-button vs anchor elements', () => {\n const button = document.createElement('nv-button');\n const anchor = document.createElement('a');\n container.appendChild(button);\n container.appendChild(anchor);\n\n forwardPropsToChildren(container, props);\n\n // Button should have attributes\n expect(button.getAttribute('size')).toBe('medium');\n expect(button.getAttribute('emphasis')).toBe('high');\n expect(button.hasAttribute('fluid')).toBe(false);\n\n // Anchor should have classes\n expect(anchor.getAttribute('size')).toBe(null);\n expect(anchor.getAttribute('emphasis')).toBe(null);\n expect(anchor.classList.contains('size-medium')).toBe(true);\n expect(anchor.classList.contains('emphasis-high')).toBe(true);\n expect(anchor.classList.contains('fluid')).toBe(false);\n });\n\n it('should handle complex nested structures with multiple levels', () => {\n const outerDiv = document.createElement('div');\n const innerDiv = document.createElement('div');\n const button = document.createElement('nv-button');\n\n outerDiv.appendChild(innerDiv);\n innerDiv.appendChild(button);\n container.appendChild(outerDiv);\n\n forwardPropsToChildren(container, props);\n\n expect(button.getAttribute('size')).toBe('medium');\n expect(button.getAttribute('emphasis')).toBe('high');\n expect(button.classList.contains('first')).toBe(true);\n expect(button.classList.contains('last')).toBe(true);\n expect(button.classList.contains('group-item')).toBe(true);\n });\n });\n});\n"]}
@@ -329,6 +329,15 @@ nv-calendar {
329
329
  .day.is-today.selected::after::after {
330
330
  background-color: var(--components-calendar-cell-dot-selected);
331
331
  }
332
+ .day.hover-range {
333
+ background-color: var(--components-calendar-cell-background-hover);
334
+ }
335
+ .day.hover-blocked {
336
+ background-color: var(--components-calendar-cell-background-hover);
337
+ }
338
+ .day.disabled.hover-blocked {
339
+ background-color: transparent;
340
+ }
332
341
 
333
342
  .calendar-footer {
334
343
  display: flex;
@@ -1,6 +1,6 @@
1
1
  import { Host, h, } from "@stencil/core";
2
2
  import { WEEK_ABBREVIATIONS, CUSTOM_DAY_NAMES, CUSTOM_MONTH_NAMES, } from "../../utils/constants";
3
- import { parseDate, isSameDate, formatDate, isSameOrAfter, isSameOrBefore, } from "./nv-calendar.utils";
3
+ import { parseDate, formatDate, isSameOrAfter, isSameOrBefore, isInHoverRange, isHoverRangeValid, isDateDisabledUtil, } from "./nv-calendar.utils";
4
4
  // Import partials
5
5
  import { CalendarHeader, CalendarGrid, WeekNumbers, CalendarShortcuts, CalendarActions, } from "./partials";
6
6
  /**
@@ -67,6 +67,7 @@ export class NvCalendar {
67
67
  this.selectedDate = null;
68
68
  this.startDate = null;
69
69
  this.endDate = null;
70
+ this.hoverDate = null;
70
71
  /** List of formatted months for the selector */
71
72
  this.months = [];
72
73
  /**
@@ -85,6 +86,12 @@ export class NvCalendar {
85
86
  .split(',')
86
87
  .map(v => v.trim())
87
88
  .filter(Boolean);
89
+ if (this.selectionType === 'range' && values.length < 2) {
90
+ console.warn(`Invalid date range format: ${value}`);
91
+ this.startDate = null;
92
+ this.endDate = null;
93
+ return;
94
+ }
88
95
  if (this.selectionType === 'single' && values.length >= 1) {
89
96
  const parsedDate = parseDate(values[0], this.dateFormat);
90
97
  if (parsedDate) {
@@ -129,7 +136,7 @@ export class NvCalendar {
129
136
  }
130
137
  else {
131
138
  // Handle malformed dates gracefully - reset state
132
- console.warn(`Invalid date range format: ${values[0]}, ${values[1]}`);
139
+ console.warn(`Invalid date range format: ${values === null || values === void 0 ? void 0 : values[0]}, ${values === null || values === void 0 ? void 0 : values[1]}`);
133
140
  this.startDate = null;
134
141
  this.endDate = null;
135
142
  if (!this.showActions) {
@@ -155,11 +162,29 @@ export class NvCalendar {
155
162
  });
156
163
  this.currentDate = newDate;
157
164
  };
165
+ this.handleMouseLeave = () => {
166
+ this.hoverDate = null;
167
+ };
168
+ this.handleDayHover = (event) => {
169
+ const target = event.target;
170
+ const dateStr = target.getAttribute('data-date');
171
+ if (dateStr &&
172
+ this.selectionType === 'range' &&
173
+ this.startDate &&
174
+ !this.endDate) {
175
+ this.hoverDate = new Date(dateStr);
176
+ }
177
+ };
158
178
  /**
159
179
  * Handles date selection based on the mode
160
- * @param {Date} date - Selected date
180
+ * @param {MouseEvent} event - The mouse event from the click.
161
181
  */
162
- this.handleDateSelection = (date) => {
182
+ this.handleDateSelection = (event) => {
183
+ const target = event.target;
184
+ const dateStr = target.getAttribute('data-date');
185
+ if (!dateStr)
186
+ return;
187
+ const date = new Date(dateStr);
163
188
  if (this.isDateDisabled(date)) {
164
189
  return;
165
190
  }
@@ -205,6 +230,7 @@ export class NvCalendar {
205
230
  else {
206
231
  // Complete range selection
207
232
  this.endDate = date;
233
+ this.hoverDate = null;
208
234
  // Ensure correct order
209
235
  if (this.startDate > this.endDate) {
210
236
  [this.startDate, this.endDate] = [this.endDate, this.startDate];
@@ -236,24 +262,7 @@ export class NvCalendar {
236
262
  * @returns {boolean} true if the date is disabled
237
263
  */
238
264
  this.isDateDisabled = (date) => {
239
- if (!date)
240
- return true;
241
- // Minimum bound check
242
- if (this.min) {
243
- const minDate = parseDate(this.min, this.dateFormat);
244
- if (minDate && date < minDate) {
245
- return true;
246
- }
247
- }
248
- // Maximum bound check
249
- if (this.max) {
250
- const maxDate = parseDate(this.max, this.dateFormat);
251
- if (maxDate && date > maxDate) {
252
- return true;
253
- }
254
- }
255
- // Check disabled dates
256
- return this.parsedDisabledDates.some(disabledDate => isSameDate(date, disabledDate, { isUTCMode: this.isUTCMode }));
265
+ return isDateDisabledUtil(date, this.min, this.max, this.parsedDisabledDates, this.dateFormat, this.isUTCMode);
257
266
  };
258
267
  /**
259
268
  * Checks if a date is in the selected range
@@ -650,6 +659,15 @@ export class NvCalendar {
650
659
  index) => {
651
660
  return (h(WeekNumbers, { weeks: weeks, localizedWeekText: this.getLocalizedWeekText(), selectionType: this.selectionType, onWeekSelect: this.handleWeekSelection, calendarIndex: index }));
652
661
  };
662
+ /**
663
+ * Checks if the hover range is valid
664
+ * @param {Date} startDate - Start date
665
+ * @param {Date | null} hoverDate - Hovered date
666
+ * @returns {boolean} true if the hover range is valid
667
+ */
668
+ this.isHoverRangeValidFn = (startDate, hoverDate) => {
669
+ return isHoverRangeValid(startDate, hoverDate, this.min, this.max, this.parsedDisabledDates, this.dateFormat, this.isUTCMode);
670
+ };
653
671
  /**
654
672
  * Renders the calendar
655
673
  * @param {number} index - Calendar index
@@ -672,7 +690,7 @@ export class NvCalendar {
672
690
  targetDate.setUTCMonth(targetDate.getUTCMonth() + offset);
673
691
  const year = targetDate.getUTCFullYear();
674
692
  const month = targetDate.getUTCMonth();
675
- return (h("div", { class: "calendar-wrapper" }, h("div", { class: "calendar-container", key: `calendar-${index}-${year}-${month}` }, this.renderHeader(offset, index), h("div", { class: "calendar-grid" }, this.showWeekNumbers && this.renderWeekNumbers(weeks, index), h(CalendarGrid, { days: days, dayNames: this.getDayNames(), selectionType: this.selectionType, selectedDate: this.selectedDate, startDate: this.startDate, endDate: this.endDate, isUTCMode: this.isUTCMode, onDayClick: this.handleDateSelection, isDateInRange: this.isDateInRange, isToday: this.isToday }))), index < this.numberOfCalendars - 1 && (h("div", { class: "calendar-separator" }))));
693
+ return (h("div", { class: "calendar-wrapper" }, h("div", { class: "calendar-container", key: `calendar-${index}-${year}-${month}` }, this.renderHeader(offset, index), h("div", { class: "calendar-grid" }, this.showWeekNumbers && this.renderWeekNumbers(weeks, index), h(CalendarGrid, { days: days, dayNames: this.getDayNames(), selectionType: this.selectionType, selectedDate: this.selectedDate, startDate: this.startDate, endDate: this.endDate, isUTCMode: this.isUTCMode, onDayClick: this.handleDateSelection, isDateInRange: this.isDateInRange, isToday: this.isToday, onDayHover: this.handleDayHover, onMouseLeave: this.handleMouseLeave, hoverDate: this.hoverDate, isInHoverRange: isInHoverRange, isHoverRangeValid: this.isHoverRangeValidFn }))), index < this.numberOfCalendars - 1 && (h("div", { class: "calendar-separator" }))));
676
694
  };
677
695
  /**
678
696
  * Renders the shortcuts
@@ -892,8 +910,8 @@ export class NvCalendar {
892
910
  * @slot default - Child content of the component.
893
911
  */
894
912
  render() {
895
- return (h(Host, { key: '7abeb96312f2bcf26eed3a133ef59d5d3b5b528f' }, h("div", { key: 'e0b2db720853551e3b6445e92b39b418123cb83e', class: "datepicker-root" }, h("div", { key: '1a83c285278c440c4e33ae770a033974e4924830', class: `datepicker-container ${this.numberOfCalendars === 1 ? 'datepicker-container-single' : ''}` }, h("div", { key: '3481fe780a3e1d8f0c1e22ffc82c3b7830721055', class: `datepicker-wrapper ${this.numberOfCalendars === 1 ? 'single' : ''}` }, this.shortcutsPlacement === 'left' && this.renderShortcuts(), Array.from({ length: this.numberOfCalendars }, (_, index) => this.renderCalendar(index, index)), this.shortcutsPlacement === 'right' && this.renderShortcuts()), ((this.hasShortcuts && this.shortcutsPlacement === 'bottom') ||
896
- this.hasActions) && (h("div", { key: '3a644bdc993142c181c45173756e362025d4a23a', class: "datepicker-controls" }, this.shortcutsPlacement === 'bottom' && this.renderShortcuts(), this.hasActions && this.renderActions())))), h("slot", { key: '4a4290ccf63429a9a88cfd95a33b4fdc34c8ef74' })));
913
+ return (h(Host, { key: '15aa3c2afb51ea1fbd16de597889d687fb8d1982' }, h("div", { key: '6492b58cb2b5c9bb7fd6c40e8f37e9c2142b5827', class: "datepicker-root" }, h("div", { key: '3cb216c3af4900b48c2dcd09a0a0034c7ebf622d', class: `datepicker-container ${this.numberOfCalendars === 1 ? 'datepicker-container-single' : ''}` }, h("div", { key: '0663841721d5db871e7ede0ec396affa560ea99d', class: `datepicker-wrapper ${this.numberOfCalendars === 1 ? 'single' : ''}` }, this.shortcutsPlacement === 'left' && this.renderShortcuts(), Array.from({ length: this.numberOfCalendars }, (_, index) => this.renderCalendar(index, index)), this.shortcutsPlacement === 'right' && this.renderShortcuts()), ((this.hasShortcuts && this.shortcutsPlacement === 'bottom') ||
914
+ this.hasActions) && (h("div", { key: '0a17a627cb1e4a4cb2b91aa104403b00d055bce5', class: "datepicker-controls" }, this.shortcutsPlacement === 'bottom' && this.renderShortcuts(), this.hasActions && this.renderActions())))), h("slot", { key: '3104795c8cc9c81a6aca7e426a145e3966a4361e' })));
897
915
  }
898
916
  static get is() { return "nv-calendar"; }
899
917
  static get originalStyleUrls() {
@@ -1240,6 +1258,7 @@ export class NvCalendar {
1240
1258
  "selectedDate": {},
1241
1259
  "startDate": {},
1242
1260
  "endDate": {},
1261
+ "hoverDate": {},
1243
1262
  "months": {}
1244
1263
  };
1245
1264
  }