@nova-design-system/nova-webcomponents 3.9.1 → 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 (432) 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 +114 -37
  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 +6 -6
  32. package/dist/cjs/nv-fielddaterange.cjs.entry.js +6 -6
  33. package/dist/cjs/nv-fielddropdown.cjs.entry.js +3 -3
  34. package/dist/cjs/nv-fielddropdownitem.cjs.entry.js +1 -1
  35. package/dist/cjs/nv-fieldmultiselect.cjs.entry.js +377 -27
  36. package/dist/cjs/nv-fieldmultiselect.cjs.entry.js.map +1 -1
  37. package/dist/cjs/nv-fieldnumber.cjs.entry.js +3 -3
  38. package/dist/cjs/nv-fieldpassword.cjs.entry.js +3 -3
  39. package/dist/cjs/nv-fieldradio.cjs.entry.js +4 -4
  40. package/dist/cjs/nv-fieldradio.cjs.entry.js.map +1 -1
  41. package/dist/cjs/nv-fieldselect.cjs.entry.js +5 -5
  42. package/dist/cjs/nv-fieldslider.cjs.entry.js +3 -3
  43. package/dist/cjs/nv-fieldtext.cjs.entry.js +3 -3
  44. package/dist/cjs/nv-fieldtextarea.cjs.entry.js +3 -3
  45. package/dist/cjs/nv-fieldtime.cjs.entry.js +10 -10
  46. package/dist/cjs/nv-icon.cjs.entry.js +3 -3
  47. package/dist/cjs/nv-icon.cjs.entry.js.map +1 -1
  48. package/dist/cjs/nv-iconbutton_2.cjs.entry.js +3 -3
  49. package/dist/cjs/nv-iconbutton_2.cjs.entry.js.map +1 -1
  50. package/dist/cjs/nv-menu.cjs.entry.js +1 -1
  51. package/dist/cjs/nv-menuitem.cjs.entry.js +1 -1
  52. package/dist/cjs/nv-popover.cjs.entry.js +1 -1
  53. package/dist/cjs/nv-row.cjs.entry.js +1 -1
  54. package/dist/cjs/nv-stack.cjs.entry.js +1 -1
  55. package/dist/cjs/nv-table.cjs.entry.js +2 -2
  56. package/dist/cjs/nv-toggle.cjs.entry.js +3 -3
  57. package/dist/cjs/nv-toggle.cjs.entry.js.map +1 -1
  58. package/dist/cjs/nv-togglebutton.cjs.entry.js +58 -0
  59. package/dist/cjs/nv-togglebutton.cjs.entry.js.map +1 -0
  60. package/dist/cjs/nv-togglebuttongroup.cjs.entry.js +172 -0
  61. package/dist/cjs/nv-togglebuttongroup.cjs.entry.js.map +1 -0
  62. package/dist/cjs/nv-tooltip.cjs.entry.js +1 -1
  63. package/dist/collection/collection-manifest.json +3 -0
  64. package/dist/collection/components/nv-accordion-item/nv-accordion-item.js +1 -1
  65. package/dist/collection/components/nv-accordion-item/nv-accordion-item.js.map +1 -1
  66. package/dist/collection/components/nv-alert/nv-alert.css +5 -0
  67. package/dist/collection/components/nv-badge/nv-badge.css +21 -0
  68. package/dist/collection/components/nv-breadcrumb/nv-breadcrumb.css +2 -0
  69. package/dist/collection/components/nv-button/styles/nv-button.css +8 -0
  70. package/dist/collection/components/nv-buttongroup/nv-buttongroup.docs.js +43 -0
  71. package/dist/collection/components/nv-buttongroup/nv-buttongroup.docs.js.map +1 -0
  72. package/dist/collection/components/nv-buttongroup/nv-buttongroup.js +217 -0
  73. package/dist/collection/components/nv-buttongroup/nv-buttongroup.js.map +1 -0
  74. package/dist/collection/components/nv-buttongroup/nv-buttongroup.utils.js +86 -0
  75. package/dist/collection/components/nv-buttongroup/nv-buttongroup.utils.js.map +1 -0
  76. package/dist/collection/components/nv-buttongroup/styles/nv-buttongroup.css +73 -0
  77. package/dist/collection/components/nv-buttongroup/test/nv-buttongroup.utils.test.js +312 -0
  78. package/dist/collection/components/nv-buttongroup/test/nv-buttongroup.utils.test.js.map +1 -0
  79. package/dist/collection/components/nv-calendar/nv-calendar.css +9 -0
  80. package/dist/collection/components/nv-calendar/nv-calendar.js +37 -24
  81. package/dist/collection/components/nv-calendar/nv-calendar.js.map +1 -1
  82. package/dist/collection/components/nv-calendar/nv-calendar.utils.js +68 -0
  83. package/dist/collection/components/nv-calendar/nv-calendar.utils.js.map +1 -1
  84. package/dist/collection/components/nv-calendar/partials/calendar-grid.js +5 -3
  85. package/dist/collection/components/nv-calendar/partials/calendar-grid.js.map +1 -1
  86. package/dist/collection/components/nv-calendar/partials/day-cell.js +4 -9
  87. package/dist/collection/components/nv-calendar/partials/day-cell.js.map +1 -1
  88. package/dist/collection/components/nv-col/nv-col.js +1 -1
  89. package/dist/collection/components/nv-datagrid/nv-datagrid.css +1 -0
  90. package/dist/collection/components/nv-datagrid/nv-datagrid.js +2 -2
  91. package/dist/collection/components/nv-datagridcolumn/nv-datagridcolumn.js +1 -1
  92. package/dist/collection/components/nv-dialog/nv-dialog.js +1 -1
  93. package/dist/collection/components/nv-dialogfooter/nv-dialogfooter.js +1 -1
  94. package/dist/collection/components/nv-dialogheader/nv-dialogheader.js +1 -1
  95. package/dist/collection/components/nv-fieldcheckbox/nv-fieldcheckbox.css +1 -0
  96. package/dist/collection/components/nv-fieldcheckbox/nv-fieldcheckbox.js +4 -4
  97. package/dist/collection/components/nv-fielddate/nv-fielddate.js +6 -6
  98. package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.js +6 -6
  99. package/dist/collection/components/nv-fielddropdown/nv-fielddropdown.js +3 -3
  100. package/dist/collection/components/nv-fielddropdownitem/nv-fielddropdownitem.js +1 -1
  101. package/dist/collection/components/nv-fielddropdownitemcheck/nv-fielddropdownitemcheck.js +1 -1
  102. package/dist/collection/components/nv-fielddropdownitemcheck/nv-fielddropdownitemcheck.js.map +1 -1
  103. package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.docs.js +885 -122
  104. package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.docs.js.map +1 -1
  105. package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.js +561 -89
  106. package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.js.map +1 -1
  107. package/dist/collection/components/nv-fieldmultiselect/styles/nv-fieldmultiselect.css +70 -16
  108. package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.js +3 -3
  109. package/dist/collection/components/nv-fieldpassword/nv-fieldpassword.js +3 -3
  110. package/dist/collection/components/nv-fieldradio/nv-fieldradio.css +1 -0
  111. package/dist/collection/components/nv-fieldradio/nv-fieldradio.js +3 -3
  112. package/dist/collection/components/nv-fieldselect/nv-fieldselect.js +5 -5
  113. package/dist/collection/components/nv-fieldslider/nv-fieldslider.js +3 -3
  114. package/dist/collection/components/nv-fieldtext/nv-fieldtext.js +3 -3
  115. package/dist/collection/components/nv-fieldtextarea/nv-fieldtextarea.js +3 -3
  116. package/dist/collection/components/nv-fieldtime/nv-fieldtime.js +9 -9
  117. package/dist/collection/components/nv-icon/nv-icon.js +1 -1
  118. package/dist/collection/components/nv-icon/nv-icons.js +6 -0
  119. package/dist/collection/components/nv-icon/nv-icons.js.map +1 -1
  120. package/dist/collection/components/nv-iconbutton/nv-iconbutton.css +4 -0
  121. package/dist/collection/components/nv-iconbutton/nv-iconbutton.js +1 -1
  122. package/dist/collection/components/nv-loader/nv-loader.js +1 -1
  123. package/dist/collection/components/nv-menu/nv-menu.js +1 -1
  124. package/dist/collection/components/nv-menuitem/nv-menuitem.js +2 -2
  125. package/dist/collection/components/nv-popover/nv-popover.js +1 -1
  126. package/dist/collection/components/nv-row/nv-row.js +1 -1
  127. package/dist/collection/components/nv-stack/nv-stack.js +1 -1
  128. package/dist/collection/components/nv-table/nv-table.js +2 -2
  129. package/dist/collection/components/nv-toggle/nv-toggle.css +1 -0
  130. package/dist/collection/components/nv-toggle/nv-toggle.js +2 -2
  131. package/dist/collection/components/nv-togglebutton/nv-togglebutton.docs.js +6 -0
  132. package/dist/collection/components/nv-togglebutton/nv-togglebutton.docs.js.map +1 -0
  133. package/dist/collection/components/nv-togglebutton/nv-togglebutton.js +191 -0
  134. package/dist/collection/components/nv-togglebutton/nv-togglebutton.js.map +1 -0
  135. package/dist/collection/components/nv-togglebutton/styles/nv-togglebutton.css +135 -0
  136. package/dist/collection/components/nv-togglebuttongroup/nv-togglebuttongroup.docs.js +56 -0
  137. package/dist/collection/components/nv-togglebuttongroup/nv-togglebuttongroup.docs.js.map +1 -0
  138. package/dist/collection/components/nv-togglebuttongroup/nv-togglebuttongroup.js +324 -0
  139. package/dist/collection/components/nv-togglebuttongroup/nv-togglebuttongroup.js.map +1 -0
  140. package/dist/collection/components/nv-togglebuttongroup/styles/nv-togglebuttongroup.css +45 -0
  141. package/dist/collection/components/nv-tooltip/nv-tooltip.js +1 -1
  142. package/dist/collection/utils/constants.js +12 -0
  143. package/dist/collection/utils/constants.js.map +1 -1
  144. package/dist/components/index.js +7 -1
  145. package/dist/components/index.js.map +1 -1
  146. package/dist/components/nv-accordion-item.js +1 -1
  147. package/dist/components/nv-accordion.js +4 -4
  148. package/dist/components/nv-alert.js +3 -3
  149. package/dist/components/nv-alert.js.map +1 -1
  150. package/dist/components/nv-avatar.js +2 -2
  151. package/dist/components/nv-badge.js +1 -1
  152. package/dist/components/nv-breadcrumb.js +3 -3
  153. package/dist/components/nv-breadcrumb.js.map +1 -1
  154. package/dist/components/nv-button.js +1 -1
  155. package/dist/components/nv-buttongroup.d.ts +11 -0
  156. package/dist/components/nv-buttongroup.js +221 -0
  157. package/dist/components/nv-buttongroup.js.map +1 -0
  158. package/dist/components/nv-calendar.js +1 -1
  159. package/dist/components/nv-col.js +1 -1
  160. package/dist/components/nv-datagrid.js +6 -6
  161. package/dist/components/nv-datagrid.js.map +1 -1
  162. package/dist/components/nv-datagridcolumn.js +1 -1
  163. package/dist/components/nv-dialog.js +7 -7
  164. package/dist/components/nv-dialogfooter.js +1 -1
  165. package/dist/components/nv-dialogheader.js +1 -1
  166. package/dist/components/nv-fieldcheckbox.js +1 -1
  167. package/dist/components/nv-fielddate.js +12 -12
  168. package/dist/components/nv-fielddaterange.js +12 -12
  169. package/dist/components/nv-fielddropdown.js +8 -8
  170. package/dist/components/nv-fielddropdownitem.js +1 -1
  171. package/dist/components/nv-fielddropdownitemcheck.js +1 -1
  172. package/dist/components/nv-fieldmultiselect.js +399 -41
  173. package/dist/components/nv-fieldmultiselect.js.map +1 -1
  174. package/dist/components/nv-fieldnumber.js +1 -1
  175. package/dist/components/nv-fieldpassword.js +6 -6
  176. package/dist/components/nv-fieldradio.js +4 -4
  177. package/dist/components/nv-fieldradio.js.map +1 -1
  178. package/dist/components/nv-fieldselect.js +8 -8
  179. package/dist/components/nv-fieldslider.js +7 -7
  180. package/dist/components/nv-fieldtext.js +1 -1
  181. package/dist/components/nv-fieldtextarea.js +3 -3
  182. package/dist/components/nv-fieldtime.js +14 -14
  183. package/dist/components/nv-icon.js +1 -1
  184. package/dist/components/nv-iconbutton.js +1 -1
  185. package/dist/components/nv-loader.js +1 -1
  186. package/dist/components/nv-menu.js +4 -4
  187. package/dist/components/nv-menuitem.js +1 -1
  188. package/dist/components/nv-popover.js +1 -1
  189. package/dist/components/nv-row.js +1 -1
  190. package/dist/components/nv-stack.js +1 -1
  191. package/dist/components/nv-table.js +2 -2
  192. package/dist/components/nv-toggle.js +3 -3
  193. package/dist/components/nv-toggle.js.map +1 -1
  194. package/dist/components/nv-togglebutton.d.ts +11 -0
  195. package/dist/components/nv-togglebutton.js +78 -0
  196. package/dist/components/nv-togglebutton.js.map +1 -0
  197. package/dist/components/nv-togglebuttongroup.d.ts +11 -0
  198. package/dist/components/nv-togglebuttongroup.js +196 -0
  199. package/dist/components/nv-togglebuttongroup.js.map +1 -0
  200. package/dist/components/nv-tooltip.js +1 -1
  201. package/dist/components/{p-68ff562f.js → p-0ffb4785.js} +5 -5
  202. package/dist/components/{p-68ff562f.js.map → p-0ffb4785.js.map} +1 -1
  203. package/dist/components/{p-8067d283.js → p-195f46f3.js} +2 -2
  204. package/dist/components/{p-8067d283.js.map → p-195f46f3.js.map} +1 -1
  205. package/dist/components/{p-e4e1a926.js → p-1bb737fa.js} +3 -3
  206. package/dist/components/{p-e4e1a926.js.map → p-1bb737fa.js.map} +1 -1
  207. package/dist/components/{p-db4ba1d9.js → p-2db5d1ab.js} +7 -7
  208. package/dist/components/{p-db4ba1d9.js.map → p-2db5d1ab.js.map} +1 -1
  209. package/dist/components/{p-ba87d9d5.js → p-2ef4fb88.js} +3 -3
  210. package/dist/components/{p-ba87d9d5.js.map → p-2ef4fb88.js.map} +1 -1
  211. package/dist/components/{p-f1df2634.js → p-32e8e42e.js} +2 -2
  212. package/dist/components/{p-f1df2634.js.map → p-32e8e42e.js.map} +1 -1
  213. package/dist/components/{p-6de6866c.js → p-45a625fb.js} +6 -6
  214. package/dist/components/{p-6de6866c.js.map → p-45a625fb.js.map} +1 -1
  215. package/dist/components/{p-025b8a78.js → p-50d0db7b.js} +5 -5
  216. package/dist/components/{p-025b8a78.js.map → p-50d0db7b.js.map} +1 -1
  217. package/dist/components/{p-ed6686a1.js → p-51876ca1.js} +2 -2
  218. package/dist/components/{p-ed6686a1.js.map → p-51876ca1.js.map} +1 -1
  219. package/dist/components/{p-e104c58a.js → p-51a156ff.js} +3 -3
  220. package/dist/components/p-51a156ff.js.map +1 -0
  221. package/dist/components/p-8011513c.js +189 -0
  222. package/dist/components/{p-60064345.js.map → p-8011513c.js.map} +1 -1
  223. package/dist/components/{p-82e5674c.js → p-8aee1010.js} +116 -38
  224. package/dist/components/p-8aee1010.js.map +1 -0
  225. package/dist/components/{p-79e6b6a2.js → p-9fdaea9a.js} +5 -5
  226. package/dist/components/p-9fdaea9a.js.map +1 -0
  227. package/dist/components/{p-6460318d.js → p-a1fe0a5d.js} +4 -4
  228. package/dist/components/p-a1fe0a5d.js.map +1 -0
  229. package/dist/components/{p-1f505531.js → p-a3ddec4c.js} +15 -1
  230. package/dist/components/p-a3ddec4c.js.map +1 -0
  231. package/dist/components/{p-0143cee0.js → p-a5002d14.js} +6 -6
  232. package/dist/components/{p-0143cee0.js.map → p-a5002d14.js.map} +1 -1
  233. package/dist/components/{p-30f970c3.js → p-b659b999.js} +3 -3
  234. package/dist/components/{p-30f970c3.js.map → p-b659b999.js.map} +1 -1
  235. package/dist/components/{p-5d5668f0.js → p-cf06032d.js} +4 -4
  236. package/dist/components/{p-5d5668f0.js.map → p-cf06032d.js.map} +1 -1
  237. package/dist/components/{p-dfd2d4f0.js → p-fda58a76.js} +2 -2
  238. package/dist/components/{p-dfd2d4f0.js.map → p-fda58a76.js.map} +1 -1
  239. package/dist/esm/{constants-4faa1fae.js → constants-23aaef7b.js} +15 -1
  240. package/dist/esm/constants-23aaef7b.js.map +1 -0
  241. package/dist/esm/index-a1936cd0.js +12 -0
  242. package/dist/esm/index.js +7 -1
  243. package/dist/esm/index.js.map +1 -1
  244. package/dist/esm/loader.js +1 -1
  245. package/dist/esm/native.js +1 -1
  246. package/dist/esm/nv-accordion-item.entry.js +1 -1
  247. package/dist/esm/nv-accordion-item.entry.js.map +1 -1
  248. package/dist/esm/nv-alert.entry.js +2 -2
  249. package/dist/esm/nv-alert.entry.js.map +1 -1
  250. package/dist/esm/nv-avatar.entry.js +1 -1
  251. package/dist/esm/nv-badge_2.entry.js +2 -2
  252. package/dist/esm/nv-badge_2.entry.js.map +1 -1
  253. package/dist/esm/nv-breadcrumb.entry.js +1 -1
  254. package/dist/esm/nv-breadcrumb.entry.js.map +1 -1
  255. package/dist/esm/nv-button.entry.js +2 -2
  256. package/dist/esm/nv-button.entry.js.map +1 -1
  257. package/dist/esm/nv-buttongroup.entry.js +194 -0
  258. package/dist/esm/nv-buttongroup.entry.js.map +1 -0
  259. package/dist/esm/nv-calendar.entry.js +114 -37
  260. package/dist/esm/nv-calendar.entry.js.map +1 -1
  261. package/dist/esm/nv-col.entry.js +1 -1
  262. package/dist/esm/nv-datagrid.entry.js +4 -4
  263. package/dist/esm/nv-datagrid.entry.js.map +1 -1
  264. package/dist/esm/nv-datagridcolumn.entry.js +1 -1
  265. package/dist/esm/nv-dialog.entry.js +2 -2
  266. package/dist/esm/nv-dialogfooter_2.entry.js +3 -3
  267. package/dist/esm/nv-fieldcheckbox.entry.js +5 -5
  268. package/dist/esm/nv-fieldcheckbox.entry.js.map +1 -1
  269. package/dist/esm/nv-fielddate.entry.js +6 -6
  270. package/dist/esm/nv-fielddaterange.entry.js +6 -6
  271. package/dist/esm/nv-fielddropdown.entry.js +3 -3
  272. package/dist/esm/nv-fielddropdownitem.entry.js +1 -1
  273. package/dist/esm/nv-fieldmultiselect.entry.js +378 -28
  274. package/dist/esm/nv-fieldmultiselect.entry.js.map +1 -1
  275. package/dist/esm/nv-fieldnumber.entry.js +3 -3
  276. package/dist/esm/nv-fieldpassword.entry.js +3 -3
  277. package/dist/esm/nv-fieldradio.entry.js +4 -4
  278. package/dist/esm/nv-fieldradio.entry.js.map +1 -1
  279. package/dist/esm/nv-fieldselect.entry.js +5 -5
  280. package/dist/esm/nv-fieldslider.entry.js +3 -3
  281. package/dist/esm/nv-fieldtext.entry.js +3 -3
  282. package/dist/esm/nv-fieldtextarea.entry.js +3 -3
  283. package/dist/esm/nv-fieldtime.entry.js +10 -10
  284. package/dist/esm/nv-icon.entry.js +3 -3
  285. package/dist/esm/nv-icon.entry.js.map +1 -1
  286. package/dist/esm/nv-iconbutton_2.entry.js +3 -3
  287. package/dist/esm/nv-iconbutton_2.entry.js.map +1 -1
  288. package/dist/esm/nv-menu.entry.js +1 -1
  289. package/dist/esm/nv-menuitem.entry.js +1 -1
  290. package/dist/esm/nv-popover.entry.js +1 -1
  291. package/dist/esm/nv-row.entry.js +1 -1
  292. package/dist/esm/nv-stack.entry.js +1 -1
  293. package/dist/esm/nv-table.entry.js +2 -2
  294. package/dist/esm/nv-toggle.entry.js +3 -3
  295. package/dist/esm/nv-toggle.entry.js.map +1 -1
  296. package/dist/esm/nv-togglebutton.entry.js +54 -0
  297. package/dist/esm/nv-togglebutton.entry.js.map +1 -0
  298. package/dist/esm/nv-togglebuttongroup.entry.js +168 -0
  299. package/dist/esm/nv-togglebuttongroup.entry.js.map +1 -0
  300. package/dist/esm/nv-tooltip.entry.js +1 -1
  301. package/dist/native/index.esm.js +1 -1
  302. package/dist/native/index.esm.js.map +1 -1
  303. package/dist/native/native.css +1 -1
  304. package/dist/native/native.esm.js +1 -1
  305. package/dist/native/native.esm.js.map +1 -1
  306. package/dist/native/{p-2a6783ca.entry.js → p-0da8f0d1.entry.js} +2 -2
  307. package/dist/native/{p-2a6783ca.entry.js.map → p-0da8f0d1.entry.js.map} +1 -1
  308. package/dist/native/p-0ef94dae.entry.js +2 -0
  309. package/dist/native/{p-1ad1bff9.entry.js.map → p-0ef94dae.entry.js.map} +1 -1
  310. package/dist/native/p-13032ec1.entry.js +2 -0
  311. package/dist/native/p-13032ec1.entry.js.map +1 -0
  312. package/dist/native/p-184032cb.entry.js +2 -0
  313. package/dist/native/{p-a73fa60a.entry.js.map → p-184032cb.entry.js.map} +1 -1
  314. package/dist/native/p-2197ffdf.entry.js +2 -0
  315. package/dist/native/{p-fa81b77f.entry.js.map → p-2197ffdf.entry.js.map} +1 -1
  316. package/dist/native/p-234cfa2e.entry.js +2 -0
  317. package/dist/native/p-2a3325fb.entry.js +2 -0
  318. package/dist/native/p-2a3325fb.entry.js.map +1 -0
  319. package/dist/native/{p-3f139780.entry.js → p-2d647761.entry.js} +2 -2
  320. package/dist/native/{p-ff248eb8.entry.js → p-348c6bb4.entry.js} +2 -2
  321. package/dist/native/p-397c0fca.entry.js +2 -0
  322. package/dist/native/{p-51a57a3a.entry.js.map → p-397c0fca.entry.js.map} +1 -1
  323. package/dist/native/{p-55cd3d62.entry.js → p-3da64006.entry.js} +2 -2
  324. package/dist/native/p-3ed84cd9.entry.js +2 -0
  325. package/dist/native/{p-fcd52432.entry.js.map → p-3ed84cd9.entry.js.map} +1 -1
  326. package/dist/native/{p-3ff7a912.entry.js → p-3fcaac6d.entry.js} +2 -2
  327. package/dist/native/{p-b7ec9a1b.entry.js → p-4302824a.entry.js} +2 -2
  328. package/dist/native/p-43071c3b.entry.js +2 -0
  329. package/dist/native/p-44dd9a4c.entry.js +2 -0
  330. package/dist/native/p-44dd9a4c.entry.js.map +1 -0
  331. package/dist/native/p-464bb197.entry.js +2 -0
  332. package/dist/native/p-464bb197.entry.js.map +1 -0
  333. package/dist/native/{p-916acbd3.entry.js → p-49504fd6.entry.js} +2 -2
  334. package/dist/native/{p-bc77cac1.entry.js → p-553778e6.entry.js} +2 -2
  335. package/dist/native/p-553778e6.entry.js.map +1 -0
  336. package/dist/native/{p-bee62b2b.entry.js → p-5f0776cb.entry.js} +2 -2
  337. package/dist/native/p-62032cd9.entry.js +2 -0
  338. package/dist/native/p-62032cd9.entry.js.map +1 -0
  339. package/dist/native/{p-11012998.entry.js → p-676447d7.entry.js} +3 -3
  340. package/dist/native/{p-16ef7dd4.entry.js → p-681f2bac.entry.js} +2 -2
  341. package/dist/native/{p-4b15cff3.entry.js → p-7f0d576b.entry.js} +2 -2
  342. package/dist/native/{p-68edb2e8.entry.js → p-85f8f11a.entry.js} +2 -2
  343. package/dist/native/{p-0e005d95.entry.js → p-888ad58e.entry.js} +2 -2
  344. package/dist/native/{p-34bf336f.entry.js → p-92931ab8.entry.js} +2 -2
  345. package/dist/native/{p-f00a4552.entry.js → p-94dc9c41.entry.js} +2 -2
  346. package/dist/native/{p-85a54ef2.entry.js → p-9c5d6827.entry.js} +2 -2
  347. package/dist/native/{p-08452012.entry.js → p-9f451b8a.entry.js} +3 -3
  348. package/dist/native/{p-08452012.entry.js.map → p-9f451b8a.entry.js.map} +1 -1
  349. package/dist/native/{p-1f932a4b.entry.js → p-aacd8789.entry.js} +2 -2
  350. package/dist/native/p-ac5496e7.entry.js +2 -0
  351. package/dist/native/{p-9ea3d30d.entry.js → p-ad2cc829.entry.js} +2 -2
  352. package/dist/native/p-b2442d4b.entry.js +2 -0
  353. package/dist/native/{p-a36dc25a.entry.js.map → p-b2442d4b.entry.js.map} +1 -1
  354. package/dist/native/{p-67c34b8c.entry.js → p-b58fb522.entry.js} +2 -2
  355. package/dist/native/p-ba9906b7.entry.js +2 -0
  356. package/dist/native/{p-64cb38e6.entry.js.map → p-ba9906b7.entry.js.map} +1 -1
  357. package/dist/native/{p-f540db71.entry.js → p-dd023fd6.entry.js} +2 -2
  358. package/dist/native/p-f033c4ce.entry.js +2 -0
  359. package/dist/native/p-f033c4ce.entry.js.map +1 -0
  360. package/dist/native/{p-051db87c.entry.js → p-fb672f90.entry.js} +2 -2
  361. package/dist/native/p-fc9564b3.js +2 -0
  362. package/dist/native/p-fc9564b3.js.map +1 -0
  363. package/dist/types/components/nv-buttongroup/nv-buttongroup.d.ts +50 -0
  364. package/dist/types/components/nv-buttongroup/nv-buttongroup.docs.d.ts +4 -0
  365. package/dist/types/components/nv-buttongroup/nv-buttongroup.utils.d.ts +25 -0
  366. package/dist/types/components/nv-buttongroup/test/nv-buttongroup.utils.test.d.ts +1 -0
  367. package/dist/types/components/nv-calendar/nv-calendar.d.ts +11 -1
  368. package/dist/types/components/nv-calendar/nv-calendar.utils.d.ts +31 -0
  369. package/dist/types/components/nv-calendar/partials/calendar-grid.d.ts +11 -1
  370. package/dist/types/components/nv-calendar/partials/day-cell.d.ts +7 -1
  371. package/dist/types/components/nv-fieldmultiselect/nv-fieldmultiselect.d.ts +116 -23
  372. package/dist/types/components/nv-icon/nv-icons.d.ts +1 -1
  373. package/dist/types/components/nv-togglebutton/nv-togglebutton.d.ts +46 -0
  374. package/dist/types/components/nv-togglebutton/nv-togglebutton.docs.d.ts +4 -0
  375. package/dist/types/components/nv-togglebuttongroup/nv-togglebuttongroup.d.ts +80 -0
  376. package/dist/types/components/nv-togglebuttongroup/nv-togglebuttongroup.docs.d.ts +4 -0
  377. package/dist/types/components.d.ts +289 -2
  378. package/dist/types/utils/constants.d.ts +10 -0
  379. package/dist/vscode-data.json +189 -0
  380. package/hydrate/index.js +1058 -154
  381. package/hydrate/index.mjs +1058 -154
  382. package/package.json +14 -2
  383. package/dist/cjs/constants-8fb8ccc0.js.map +0 -1
  384. package/dist/components/p-1f505531.js.map +0 -1
  385. package/dist/components/p-60064345.js +0 -189
  386. package/dist/components/p-6460318d.js.map +0 -1
  387. package/dist/components/p-79e6b6a2.js.map +0 -1
  388. package/dist/components/p-82e5674c.js.map +0 -1
  389. package/dist/components/p-e104c58a.js.map +0 -1
  390. package/dist/esm/constants-4faa1fae.js.map +0 -1
  391. package/dist/native/p-10ce53ea.entry.js +0 -2
  392. package/dist/native/p-1ad1bff9.entry.js +0 -2
  393. package/dist/native/p-4a533dd8.entry.js +0 -2
  394. package/dist/native/p-4a533dd8.entry.js.map +0 -1
  395. package/dist/native/p-51a57a3a.entry.js +0 -2
  396. package/dist/native/p-64cb38e6.entry.js +0 -2
  397. package/dist/native/p-73c08f3b.entry.js +0 -2
  398. package/dist/native/p-73c08f3b.entry.js.map +0 -1
  399. package/dist/native/p-a36dc25a.entry.js +0 -2
  400. package/dist/native/p-a50f3850.entry.js +0 -2
  401. package/dist/native/p-a73fa60a.entry.js +0 -2
  402. package/dist/native/p-b3f9db23.entry.js +0 -2
  403. package/dist/native/p-b3f9db23.entry.js.map +0 -1
  404. package/dist/native/p-bc77cac1.entry.js.map +0 -1
  405. package/dist/native/p-e2d0a77d.js +0 -2
  406. package/dist/native/p-e2d0a77d.js.map +0 -1
  407. package/dist/native/p-ec92ee7a.entry.js +0 -2
  408. package/dist/native/p-fa81b77f.entry.js +0 -2
  409. package/dist/native/p-fcd52432.entry.js +0 -2
  410. /package/dist/native/{p-ec92ee7a.entry.js.map → p-234cfa2e.entry.js.map} +0 -0
  411. /package/dist/native/{p-3f139780.entry.js.map → p-2d647761.entry.js.map} +0 -0
  412. /package/dist/native/{p-ff248eb8.entry.js.map → p-348c6bb4.entry.js.map} +0 -0
  413. /package/dist/native/{p-55cd3d62.entry.js.map → p-3da64006.entry.js.map} +0 -0
  414. /package/dist/native/{p-3ff7a912.entry.js.map → p-3fcaac6d.entry.js.map} +0 -0
  415. /package/dist/native/{p-b7ec9a1b.entry.js.map → p-4302824a.entry.js.map} +0 -0
  416. /package/dist/native/{p-10ce53ea.entry.js.map → p-43071c3b.entry.js.map} +0 -0
  417. /package/dist/native/{p-916acbd3.entry.js.map → p-49504fd6.entry.js.map} +0 -0
  418. /package/dist/native/{p-bee62b2b.entry.js.map → p-5f0776cb.entry.js.map} +0 -0
  419. /package/dist/native/{p-11012998.entry.js.map → p-676447d7.entry.js.map} +0 -0
  420. /package/dist/native/{p-16ef7dd4.entry.js.map → p-681f2bac.entry.js.map} +0 -0
  421. /package/dist/native/{p-4b15cff3.entry.js.map → p-7f0d576b.entry.js.map} +0 -0
  422. /package/dist/native/{p-68edb2e8.entry.js.map → p-85f8f11a.entry.js.map} +0 -0
  423. /package/dist/native/{p-0e005d95.entry.js.map → p-888ad58e.entry.js.map} +0 -0
  424. /package/dist/native/{p-34bf336f.entry.js.map → p-92931ab8.entry.js.map} +0 -0
  425. /package/dist/native/{p-f00a4552.entry.js.map → p-94dc9c41.entry.js.map} +0 -0
  426. /package/dist/native/{p-85a54ef2.entry.js.map → p-9c5d6827.entry.js.map} +0 -0
  427. /package/dist/native/{p-1f932a4b.entry.js.map → p-aacd8789.entry.js.map} +0 -0
  428. /package/dist/native/{p-a50f3850.entry.js.map → p-ac5496e7.entry.js.map} +0 -0
  429. /package/dist/native/{p-9ea3d30d.entry.js.map → p-ad2cc829.entry.js.map} +0 -0
  430. /package/dist/native/{p-67c34b8c.entry.js.map → p-b58fb522.entry.js.map} +0 -0
  431. /package/dist/native/{p-f540db71.entry.js.map → p-dd023fd6.entry.js.map} +0 -0
  432. /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":"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","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
  /**
@@ -161,11 +162,29 @@ export class NvCalendar {
161
162
  });
162
163
  this.currentDate = newDate;
163
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
+ };
164
178
  /**
165
179
  * Handles date selection based on the mode
166
- * @param {Date} date - Selected date
180
+ * @param {MouseEvent} event - The mouse event from the click.
167
181
  */
168
- 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);
169
188
  if (this.isDateDisabled(date)) {
170
189
  return;
171
190
  }
@@ -211,6 +230,7 @@ export class NvCalendar {
211
230
  else {
212
231
  // Complete range selection
213
232
  this.endDate = date;
233
+ this.hoverDate = null;
214
234
  // Ensure correct order
215
235
  if (this.startDate > this.endDate) {
216
236
  [this.startDate, this.endDate] = [this.endDate, this.startDate];
@@ -242,24 +262,7 @@ export class NvCalendar {
242
262
  * @returns {boolean} true if the date is disabled
243
263
  */
244
264
  this.isDateDisabled = (date) => {
245
- if (!date)
246
- return true;
247
- // Minimum bound check
248
- if (this.min) {
249
- const minDate = parseDate(this.min, this.dateFormat);
250
- if (minDate && date < minDate) {
251
- return true;
252
- }
253
- }
254
- // Maximum bound check
255
- if (this.max) {
256
- const maxDate = parseDate(this.max, this.dateFormat);
257
- if (maxDate && date > maxDate) {
258
- return true;
259
- }
260
- }
261
- // Check disabled dates
262
- 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);
263
266
  };
264
267
  /**
265
268
  * Checks if a date is in the selected range
@@ -656,6 +659,15 @@ export class NvCalendar {
656
659
  index) => {
657
660
  return (h(WeekNumbers, { weeks: weeks, localizedWeekText: this.getLocalizedWeekText(), selectionType: this.selectionType, onWeekSelect: this.handleWeekSelection, calendarIndex: index }));
658
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
+ };
659
671
  /**
660
672
  * Renders the calendar
661
673
  * @param {number} index - Calendar index
@@ -678,7 +690,7 @@ export class NvCalendar {
678
690
  targetDate.setUTCMonth(targetDate.getUTCMonth() + offset);
679
691
  const year = targetDate.getUTCFullYear();
680
692
  const month = targetDate.getUTCMonth();
681
- 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" }))));
682
694
  };
683
695
  /**
684
696
  * Renders the shortcuts
@@ -898,8 +910,8 @@ export class NvCalendar {
898
910
  * @slot default - Child content of the component.
899
911
  */
900
912
  render() {
901
- return (h(Host, { key: '492526a4a9ed114aba804db45f49847b1db58c9f' }, h("div", { key: '632759b4eb6c65c3b082b707fba75568ed351e49', class: "datepicker-root" }, h("div", { key: '8dc6160dec8ed46e2d2f70e3154cd73cbaeee586', class: `datepicker-container ${this.numberOfCalendars === 1 ? 'datepicker-container-single' : ''}` }, h("div", { key: '55b1c7f8bcda0785ca63a1572bfebc628a3971d5', 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') ||
902
- this.hasActions) && (h("div", { key: '7234a6d497fccdcab8923b5235f591f24061c92d', class: "datepicker-controls" }, this.shortcutsPlacement === 'bottom' && this.renderShortcuts(), this.hasActions && this.renderActions())))), h("slot", { key: '1a23c6e92ffbc8ca64b42ff41ed6d106a3697e7f' })));
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' })));
903
915
  }
904
916
  static get is() { return "nv-calendar"; }
905
917
  static get originalStyleUrls() {
@@ -1246,6 +1258,7 @@ export class NvCalendar {
1246
1258
  "selectedDate": {},
1247
1259
  "startDate": {},
1248
1260
  "endDate": {},
1261
+ "hoverDate": {},
1249
1262
  "months": {}
1250
1263
  };
1251
1264
  }