@nova-design-system/nova-webcomponents 3.2.0 → 3.4.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 (431) hide show
  1. package/dist/cjs/{index-108ddff0.js → index-c56424e5.js} +18 -186
  2. package/dist/cjs/index-c56424e5.js.map +1 -0
  3. package/dist/cjs/loader.cjs.js +2 -2
  4. package/dist/cjs/native.cjs.js +2 -23
  5. package/dist/cjs/native.cjs.js.map +1 -1
  6. package/dist/cjs/nv-alert.cjs.entry.js +1 -1
  7. package/dist/cjs/nv-avatar.cjs.entry.js +1 -1
  8. package/dist/cjs/nv-badge_2.cjs.entry.js +1 -1
  9. package/dist/cjs/nv-breadcrumb.cjs.entry.js +1 -1
  10. package/dist/cjs/nv-breadcrumbs.cjs.entry.js +1 -1
  11. package/dist/cjs/nv-button.cjs.entry.js +1 -1
  12. package/dist/cjs/nv-calendar.cjs.entry.js +391 -142
  13. package/dist/cjs/nv-calendar.cjs.entry.js.map +1 -1
  14. package/dist/cjs/nv-col.cjs.entry.js +1 -1
  15. package/dist/cjs/nv-datagrid.cjs.entry.js +45 -12
  16. package/dist/cjs/nv-datagrid.cjs.entry.js.map +1 -1
  17. package/dist/cjs/nv-datagridcolumn.cjs.entry.js +1 -1
  18. package/dist/cjs/nv-dialog.cjs.entry.js +1 -1
  19. package/dist/cjs/nv-dialogfooter_2.cjs.entry.js +1 -1
  20. package/dist/cjs/nv-fieldcheckbox.cjs.entry.js +1 -1
  21. package/dist/cjs/nv-fielddate.cjs.entry.js +45 -11
  22. package/dist/cjs/nv-fielddate.cjs.entry.js.map +1 -1
  23. package/dist/cjs/nv-fielddaterange.cjs.entry.js +98 -44
  24. package/dist/cjs/nv-fielddaterange.cjs.entry.js.map +1 -1
  25. package/dist/cjs/nv-fielddropdown.cjs.entry.js +2 -2
  26. package/dist/cjs/nv-fielddropdown.cjs.entry.js.map +1 -1
  27. package/dist/cjs/nv-fielddropdownitem.cjs.entry.js +1 -1
  28. package/dist/cjs/nv-fieldmultiselect.cjs.entry.js +2 -2
  29. package/dist/cjs/nv-fieldmultiselect.cjs.entry.js.map +1 -1
  30. package/dist/cjs/nv-fieldnumber.cjs.entry.js +5 -5
  31. package/dist/cjs/nv-fieldnumber.cjs.entry.js.map +1 -1
  32. package/dist/cjs/nv-fieldpassword.cjs.entry.js +5 -5
  33. package/dist/cjs/nv-fieldpassword.cjs.entry.js.map +1 -1
  34. package/dist/cjs/nv-fieldradio.cjs.entry.js +4 -4
  35. package/dist/cjs/nv-fieldselect.cjs.entry.js +7 -7
  36. package/dist/cjs/nv-fieldselect.cjs.entry.js.map +1 -1
  37. package/dist/cjs/nv-fieldslider.cjs.entry.js +28 -23
  38. package/dist/cjs/nv-fieldslider.cjs.entry.js.map +1 -1
  39. package/dist/cjs/nv-fieldtext.cjs.entry.js +5 -5
  40. package/dist/cjs/nv-fieldtext.cjs.entry.js.map +1 -1
  41. package/dist/cjs/nv-fieldtextarea.cjs.entry.js +5 -5
  42. package/dist/cjs/nv-fieldtextarea.cjs.entry.js.map +1 -1
  43. package/dist/cjs/nv-fieldtime.cjs.entry.js +11 -11
  44. package/dist/cjs/nv-fieldtime.cjs.entry.js.map +1 -1
  45. package/dist/cjs/nv-icon.cjs.entry.js +2 -2
  46. package/dist/cjs/nv-iconbutton_2.cjs.entry.js +3 -3
  47. package/dist/cjs/nv-menu.cjs.entry.js +2 -2
  48. package/dist/cjs/nv-menuitem.cjs.entry.js +2 -2
  49. package/dist/cjs/nv-popover.cjs.entry.js +3 -3
  50. package/dist/cjs/nv-popover.cjs.entry.js.map +1 -1
  51. package/dist/cjs/nv-row.cjs.entry.js +2 -2
  52. package/dist/cjs/nv-stack.cjs.entry.js +2 -2
  53. package/dist/cjs/nv-table.cjs.entry.js +3 -3
  54. package/dist/cjs/nv-tablecolumn.cjs.entry.js +1 -1
  55. package/dist/cjs/nv-toggle.cjs.entry.js +3 -3
  56. package/dist/cjs/nv-tooltip.cjs.entry.js +2 -2
  57. package/dist/collection/components/nv-calendar/nv-calendar.js +235 -136
  58. package/dist/collection/components/nv-calendar/nv-calendar.js.map +1 -1
  59. package/dist/collection/components/nv-calendar/nv-calendar.utils.js +32 -7
  60. package/dist/collection/components/nv-calendar/nv-calendar.utils.js.map +1 -1
  61. package/dist/collection/components/nv-calendar/partials/calendar-actions.js +11 -0
  62. package/dist/collection/components/nv-calendar/partials/calendar-actions.js.map +1 -0
  63. package/dist/collection/components/nv-calendar/partials/calendar-grid.js +24 -0
  64. package/dist/collection/components/nv-calendar/partials/calendar-grid.js.map +1 -0
  65. package/dist/collection/components/nv-calendar/partials/calendar-header.js +38 -0
  66. package/dist/collection/components/nv-calendar/partials/calendar-header.js.map +1 -0
  67. package/dist/collection/components/nv-calendar/partials/calendar-shortcuts.js +22 -0
  68. package/dist/collection/components/nv-calendar/partials/calendar-shortcuts.js.map +1 -0
  69. package/dist/collection/components/nv-calendar/partials/day-cell.js +31 -0
  70. package/dist/collection/components/nv-calendar/partials/day-cell.js.map +1 -0
  71. package/dist/collection/components/nv-calendar/partials/index.js +7 -0
  72. package/dist/collection/components/nv-calendar/partials/index.js.map +1 -0
  73. package/dist/collection/components/nv-calendar/partials/week-numbers.js +36 -0
  74. package/dist/collection/components/nv-calendar/partials/week-numbers.js.map +1 -0
  75. package/dist/collection/components/nv-calendar/test/nv-calendar.utils.test.js +692 -651
  76. package/dist/collection/components/nv-calendar/test/nv-calendar.utils.test.js.map +1 -1
  77. package/dist/collection/components/nv-calendar/test/partials/calendar-actions.logic.test.js +169 -0
  78. package/dist/collection/components/nv-calendar/test/partials/calendar-actions.logic.test.js.map +1 -0
  79. package/dist/collection/components/nv-calendar/test/partials/calendar-grid.logic.test.js +262 -0
  80. package/dist/collection/components/nv-calendar/test/partials/calendar-grid.logic.test.js.map +1 -0
  81. package/dist/collection/components/nv-calendar/test/partials/calendar-header.logic.test.js +208 -0
  82. package/dist/collection/components/nv-calendar/test/partials/calendar-header.logic.test.js.map +1 -0
  83. package/dist/collection/components/nv-calendar/test/partials/calendar-shortcuts.logic.test.js +355 -0
  84. package/dist/collection/components/nv-calendar/test/partials/calendar-shortcuts.logic.test.js.map +1 -0
  85. package/dist/collection/components/nv-calendar/test/partials/day-cell.logic.test.js +250 -0
  86. package/dist/collection/components/nv-calendar/test/partials/day-cell.logic.test.js.map +1 -0
  87. package/dist/collection/components/nv-calendar/test/partials/week-numbers.logic.test.js +217 -0
  88. package/dist/collection/components/nv-calendar/test/partials/week-numbers.logic.test.js.map +1 -0
  89. package/dist/collection/components/nv-datagrid/nv-datagrid.docs.js +88 -2
  90. package/dist/collection/components/nv-datagrid/nv-datagrid.docs.js.map +1 -1
  91. package/dist/collection/components/nv-datagrid/nv-datagrid.js +89 -10
  92. package/dist/collection/components/nv-datagrid/nv-datagrid.js.map +1 -1
  93. package/dist/collection/components/nv-fielddate/nv-fielddate.js +56 -16
  94. package/dist/collection/components/nv-fielddate/nv-fielddate.js.map +1 -1
  95. package/dist/collection/components/nv-fielddate/styles/nv-fielddate.css +44 -0
  96. package/dist/collection/components/nv-fielddate/test/nv-fielddate.logic.test.js +196 -0
  97. package/dist/collection/components/nv-fielddate/test/nv-fielddate.logic.test.js.map +1 -0
  98. package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.docs.js +0 -1
  99. package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.docs.js.map +1 -1
  100. package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.js +125 -42
  101. package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.js.map +1 -1
  102. package/dist/collection/components/nv-fielddaterange/styles/nv-fielddaterange.css +44 -0
  103. package/dist/collection/components/nv-fielddaterange/test/nv-fielddaterange.logic.test.js +137 -0
  104. package/dist/collection/components/nv-fielddaterange/test/nv-fielddaterange.logic.test.js.map +1 -0
  105. package/dist/collection/components/nv-fielddropdown/styles/nv-fielddropdown.css +46 -0
  106. package/dist/collection/components/nv-fieldmultiselect/styles/nv-fieldmultiselect.css +46 -0
  107. package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.css +44 -0
  108. package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.docs.js +8 -0
  109. package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.docs.js.map +1 -1
  110. package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.js +4 -3
  111. package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.js.map +1 -1
  112. package/dist/collection/components/nv-fieldpassword/nv-fieldpassword.css +44 -0
  113. package/dist/collection/components/nv-fieldpassword/nv-fieldpassword.js +3 -3
  114. package/dist/collection/components/nv-fieldradio/nv-fieldradio.js +3 -3
  115. package/dist/collection/components/nv-fieldselect/nv-fieldselect.css +44 -0
  116. package/dist/collection/components/nv-fieldselect/nv-fieldselect.js +5 -5
  117. package/dist/collection/components/nv-fieldslider/nv-fieldslider.docs.js +22 -22
  118. package/dist/collection/components/nv-fieldslider/nv-fieldslider.docs.js.map +1 -1
  119. package/dist/collection/components/nv-fieldslider/nv-fieldslider.js +30 -29
  120. package/dist/collection/components/nv-fieldslider/nv-fieldslider.js.map +1 -1
  121. package/dist/collection/components/nv-fieldslider/partials/field-input.js +1 -1
  122. package/dist/collection/components/nv-fieldslider/partials/field-input.js.map +1 -1
  123. package/dist/collection/components/nv-fieldslider/styles/nv-fieldslider.css +99 -20
  124. package/dist/collection/components/nv-fieldtext/nv-fieldtext.css +44 -0
  125. package/dist/collection/components/nv-fieldtext/nv-fieldtext.js +3 -3
  126. package/dist/collection/components/nv-fieldtextarea/nv-fieldtextarea.css +38 -0
  127. package/dist/collection/components/nv-fieldtextarea/nv-fieldtextarea.js +3 -3
  128. package/dist/collection/components/nv-fieldtime/nv-fieldtime.js +9 -9
  129. package/dist/collection/components/nv-fieldtime/styles/nv-fieldtime.css +44 -0
  130. package/dist/collection/components/nv-icon/nv-icon.js +1 -1
  131. package/dist/collection/components/nv-iconbutton/nv-iconbutton.js +1 -1
  132. package/dist/collection/components/nv-loader/nv-loader.js +1 -1
  133. package/dist/collection/components/nv-menu/nv-menu.js +1 -1
  134. package/dist/collection/components/nv-menuitem/nv-menuitem.js +1 -1
  135. package/dist/collection/components/nv-popover/nv-popover.js +3 -3
  136. package/dist/collection/components/nv-popover/nv-popover.js.map +1 -1
  137. package/dist/collection/components/nv-row/nv-row.js +1 -1
  138. package/dist/collection/components/nv-stack/nv-stack.js +1 -1
  139. package/dist/collection/components/nv-table/nv-table.js +2 -2
  140. package/dist/collection/components/nv-toggle/nv-toggle.js +2 -2
  141. package/dist/collection/components/nv-tooltip/nv-tooltip.js +1 -1
  142. package/dist/collection/templates/navigation.docs.js +1 -1
  143. package/dist/collection/templates/navigation.docs.js.map +1 -1
  144. package/dist/components/index.js +1 -1
  145. package/dist/components/nv-alert.js +2 -2
  146. package/dist/components/nv-avatar.js +2 -2
  147. package/dist/components/nv-badge.js +1 -1
  148. package/dist/components/nv-breadcrumb.js +3 -3
  149. package/dist/components/nv-breadcrumbs.js +1 -1
  150. package/dist/components/nv-button.js +1 -1
  151. package/dist/components/nv-calendar.js +1 -1
  152. package/dist/components/nv-col.js +1 -1
  153. package/dist/components/nv-datagrid.js +54 -19
  154. package/dist/components/nv-datagrid.js.map +1 -1
  155. package/dist/components/nv-datagridcolumn.js +1 -1
  156. package/dist/components/nv-dialog.js +6 -6
  157. package/dist/components/nv-dialogfooter.js +1 -1
  158. package/dist/components/nv-dialogheader.js +1 -1
  159. package/dist/components/nv-fieldcheckbox.js +1 -1
  160. package/dist/components/nv-fielddate.js +53 -25
  161. package/dist/components/nv-fielddate.js.map +1 -1
  162. package/dist/components/nv-fielddaterange.js +110 -62
  163. package/dist/components/nv-fielddaterange.js.map +1 -1
  164. package/dist/components/nv-fielddropdown.js +7 -7
  165. package/dist/components/nv-fielddropdown.js.map +1 -1
  166. package/dist/components/nv-fielddropdownitem.js +1 -1
  167. package/dist/components/nv-fielddropdownitemcheck.js +1 -1
  168. package/dist/components/nv-fieldmultiselect.js +9 -9
  169. package/dist/components/nv-fieldmultiselect.js.map +1 -1
  170. package/dist/components/nv-fieldnumber.js +1 -180
  171. package/dist/components/nv-fieldnumber.js.map +1 -1
  172. package/dist/components/nv-fieldpassword.js +8 -8
  173. package/dist/components/nv-fieldpassword.js.map +1 -1
  174. package/dist/components/nv-fieldradio.js +4 -4
  175. package/dist/components/nv-fieldselect.js +10 -10
  176. package/dist/components/nv-fieldselect.js.map +1 -1
  177. package/dist/components/nv-fieldslider.js +49 -26
  178. package/dist/components/nv-fieldslider.js.map +1 -1
  179. package/dist/components/nv-fieldtext.js +1 -1
  180. package/dist/components/nv-fieldtextarea.js +5 -5
  181. package/dist/components/nv-fieldtextarea.js.map +1 -1
  182. package/dist/components/nv-fieldtime.js +15 -15
  183. package/dist/components/nv-fieldtime.js.map +1 -1
  184. package/dist/components/nv-icon.js +1 -1
  185. package/dist/components/nv-iconbutton.js +1 -1
  186. package/dist/components/nv-loader.js +1 -1
  187. package/dist/components/nv-menu.js +5 -5
  188. package/dist/components/nv-menuitem.js +1 -1
  189. package/dist/components/nv-popover.js +1 -1
  190. package/dist/components/nv-row.js +2 -2
  191. package/dist/components/nv-stack.js +2 -2
  192. package/dist/components/nv-table.js +3 -3
  193. package/dist/components/nv-tablecolumn.js +1 -1
  194. package/dist/components/nv-toggle.js +3 -3
  195. package/dist/components/nv-tooltip.js +1 -1
  196. package/dist/components/{p-0ab80d95.js → p-131e5140.js} +4 -4
  197. package/dist/components/{p-0ab80d95.js.map → p-131e5140.js.map} +1 -1
  198. package/dist/components/{p-cbdc2c8b.js → p-3f567fde.js} +5 -5
  199. package/dist/components/{p-cbdc2c8b.js.map → p-3f567fde.js.map} +1 -1
  200. package/dist/components/p-3f58525b.js +167 -0
  201. package/dist/components/{p-f0a5e7e4.js.map → p-3f58525b.js.map} +1 -1
  202. package/dist/components/{p-33e231f4.js → p-6277f746.js} +2 -2
  203. package/dist/components/{p-33e231f4.js.map → p-6277f746.js.map} +1 -1
  204. package/dist/components/{p-07a89754.js → p-953d8b4d.js} +3 -3
  205. package/dist/components/{p-07a89754.js.map → p-953d8b4d.js.map} +1 -1
  206. package/dist/components/{p-dd2273a3.js → p-9e6e26cb.js} +2 -2
  207. package/dist/components/{p-dd2273a3.js.map → p-9e6e26cb.js.map} +1 -1
  208. package/dist/components/{p-d19b41d2.js → p-9f1e8ef3.js} +2 -2
  209. package/dist/components/{p-d19b41d2.js.map → p-9f1e8ef3.js.map} +1 -1
  210. package/dist/components/{p-4656efae.js → p-a0d7e0cd.js} +396 -169
  211. package/dist/components/p-a0d7e0cd.js.map +1 -0
  212. package/dist/components/{p-f1859ddc.js → p-a1438b39.js} +4 -4
  213. package/dist/components/{p-f1859ddc.js.map → p-a1438b39.js.map} +1 -1
  214. package/dist/components/{p-04cb3a6f.js → p-a189d074.js} +5 -5
  215. package/dist/components/{p-04cb3a6f.js.map → p-a189d074.js.map} +1 -1
  216. package/dist/components/p-a29a9396.js +184 -0
  217. package/dist/components/p-a29a9396.js.map +1 -0
  218. package/dist/components/{p-679e0fa9.js → p-aff3ed68.js} +10 -175
  219. package/dist/components/p-aff3ed68.js.map +1 -0
  220. package/dist/components/{p-76a30bf1.js → p-b207be02.js} +3 -3
  221. package/dist/components/{p-76a30bf1.js.map → p-b207be02.js.map} +1 -1
  222. package/dist/components/{p-581e67cc.js → p-c07c32d2.js} +3 -3
  223. package/dist/components/{p-581e67cc.js.map → p-c07c32d2.js.map} +1 -1
  224. package/dist/components/{p-cbe9521f.js → p-dcaf9010.js} +3 -3
  225. package/dist/components/{p-cbe9521f.js.map → p-dcaf9010.js.map} +1 -1
  226. package/dist/components/{p-83c8873a.js → p-dec6fc68.js} +3 -3
  227. package/dist/components/{p-83c8873a.js.map → p-dec6fc68.js.map} +1 -1
  228. package/dist/components/{p-d63f1cbe.js → p-df465ef2.js} +3 -3
  229. package/dist/components/{p-d63f1cbe.js.map → p-df465ef2.js.map} +1 -1
  230. package/dist/components/{p-c0a91091.js → p-f7c7a406.js} +4 -4
  231. package/dist/components/{p-c0a91091.js.map → p-f7c7a406.js.map} +1 -1
  232. package/dist/esm/{constants-b97e736d.js → constants-4faa1fae.js} +2 -2
  233. package/dist/esm/{constants-b97e736d.js.map → constants-4faa1fae.js.map} +1 -1
  234. package/dist/esm/{index-8f0e5f19.js → index-a1936cd0.js} +19 -186
  235. package/dist/esm/index-a1936cd0.js.map +1 -0
  236. package/dist/esm/index.js +1 -1
  237. package/dist/esm/loader.js +3 -3
  238. package/dist/esm/native.js +3 -24
  239. package/dist/esm/native.js.map +1 -1
  240. package/dist/esm/nv-alert.entry.js +2 -2
  241. package/dist/esm/nv-avatar.entry.js +2 -2
  242. package/dist/esm/nv-badge_2.entry.js +1 -1
  243. package/dist/esm/nv-breadcrumb.entry.js +1 -1
  244. package/dist/esm/nv-breadcrumbs.entry.js +1 -1
  245. package/dist/esm/nv-button.entry.js +2 -2
  246. package/dist/esm/nv-calendar.entry.js +392 -143
  247. package/dist/esm/nv-calendar.entry.js.map +1 -1
  248. package/dist/esm/nv-col.entry.js +1 -1
  249. package/dist/esm/nv-datagrid.entry.js +46 -13
  250. package/dist/esm/nv-datagrid.entry.js.map +1 -1
  251. package/dist/esm/nv-datagridcolumn.entry.js +1 -1
  252. package/dist/esm/nv-dialog.entry.js +2 -2
  253. package/dist/esm/nv-dialogfooter_2.entry.js +2 -2
  254. package/dist/esm/nv-fieldcheckbox.entry.js +1 -1
  255. package/dist/esm/nv-fielddate.entry.js +45 -11
  256. package/dist/esm/nv-fielddate.entry.js.map +1 -1
  257. package/dist/esm/nv-fielddaterange.entry.js +98 -44
  258. package/dist/esm/nv-fielddaterange.entry.js.map +1 -1
  259. package/dist/esm/nv-fielddropdown.entry.js +2 -2
  260. package/dist/esm/nv-fielddropdown.entry.js.map +1 -1
  261. package/dist/esm/nv-fielddropdownitem.entry.js +1 -1
  262. package/dist/esm/nv-fieldmultiselect.entry.js +2 -2
  263. package/dist/esm/nv-fieldmultiselect.entry.js.map +1 -1
  264. package/dist/esm/nv-fieldnumber.entry.js +5 -5
  265. package/dist/esm/nv-fieldnumber.entry.js.map +1 -1
  266. package/dist/esm/nv-fieldpassword.entry.js +5 -5
  267. package/dist/esm/nv-fieldpassword.entry.js.map +1 -1
  268. package/dist/esm/nv-fieldradio.entry.js +4 -4
  269. package/dist/esm/nv-fieldselect.entry.js +7 -7
  270. package/dist/esm/nv-fieldselect.entry.js.map +1 -1
  271. package/dist/esm/nv-fieldslider.entry.js +28 -23
  272. package/dist/esm/nv-fieldslider.entry.js.map +1 -1
  273. package/dist/esm/nv-fieldtext.entry.js +5 -5
  274. package/dist/esm/nv-fieldtext.entry.js.map +1 -1
  275. package/dist/esm/nv-fieldtextarea.entry.js +5 -5
  276. package/dist/esm/nv-fieldtextarea.entry.js.map +1 -1
  277. package/dist/esm/nv-fieldtime.entry.js +12 -12
  278. package/dist/esm/nv-fieldtime.entry.js.map +1 -1
  279. package/dist/esm/nv-icon.entry.js +3 -3
  280. package/dist/esm/nv-iconbutton_2.entry.js +3 -3
  281. package/dist/esm/nv-menu.entry.js +2 -2
  282. package/dist/esm/nv-menuitem.entry.js +2 -2
  283. package/dist/esm/nv-popover.entry.js +3 -3
  284. package/dist/esm/nv-popover.entry.js.map +1 -1
  285. package/dist/esm/nv-row.entry.js +2 -2
  286. package/dist/esm/nv-stack.entry.js +2 -2
  287. package/dist/esm/nv-table.entry.js +3 -3
  288. package/dist/esm/nv-tablecolumn.entry.js +1 -1
  289. package/dist/esm/nv-toggle.entry.js +3 -3
  290. package/dist/esm/nv-tooltip.entry.js +2 -2
  291. package/dist/native/index.esm.js +1 -1
  292. package/dist/native/native.css +1 -1
  293. package/dist/native/native.esm.js +1 -1
  294. package/dist/native/native.esm.js.map +1 -1
  295. package/dist/native/p-01164e86.entry.js +2 -0
  296. package/dist/native/{p-5382eab2.entry.js.map → p-01164e86.entry.js.map} +1 -1
  297. package/dist/native/p-0410facd.entry.js +2 -0
  298. package/dist/native/p-0410facd.entry.js.map +1 -0
  299. package/dist/native/{p-519b4819.entry.js → p-08ca678c.entry.js} +2 -2
  300. package/dist/native/{p-cfe0a6c6.entry.js → p-0ec2d430.entry.js} +2 -2
  301. package/dist/native/{p-cfe0a6c6.entry.js.map → p-0ec2d430.entry.js.map} +1 -1
  302. package/dist/native/p-14895e84.entry.js +2 -0
  303. package/dist/native/p-14895e84.entry.js.map +1 -0
  304. package/dist/native/p-1a5d3b87.entry.js +2 -0
  305. package/dist/native/{p-7c676f2c.entry.js.map → p-1a5d3b87.entry.js.map} +1 -1
  306. package/dist/native/{p-0323daf6.entry.js → p-1c1ecd38.entry.js} +2 -2
  307. package/dist/native/{p-16a4cdf3.entry.js → p-1d98477d.entry.js} +2 -2
  308. package/dist/native/{p-19fb0fd0.entry.js → p-2006f5d4.entry.js} +2 -2
  309. package/dist/native/p-24659a85.entry.js +2 -0
  310. package/dist/native/{p-ef76178b.entry.js.map → p-24659a85.entry.js.map} +1 -1
  311. package/dist/native/p-2b1e7675.entry.js +2 -0
  312. package/dist/native/{p-b0fc08e7.entry.js.map → p-2b1e7675.entry.js.map} +1 -1
  313. package/dist/native/{p-9fba8663.entry.js → p-2bc7d66a.entry.js} +2 -2
  314. package/dist/native/p-2c3fb8cc.entry.js +2 -0
  315. package/dist/native/p-2c3fb8cc.entry.js.map +1 -0
  316. package/dist/native/p-45cbe6e4.entry.js +2 -0
  317. package/dist/native/p-46428304.entry.js +2 -0
  318. package/dist/native/p-46428304.entry.js.map +1 -0
  319. package/dist/native/{p-c930adb7.entry.js → p-55df8bf9.entry.js} +2 -2
  320. package/dist/native/p-59b07b36.entry.js +2 -0
  321. package/dist/native/{p-987c79d8.entry.js.map → p-59b07b36.entry.js.map} +1 -1
  322. package/dist/native/p-6029e51b.entry.js +2 -0
  323. package/dist/native/{p-fc3bea07.entry.js.map → p-6029e51b.entry.js.map} +1 -1
  324. package/dist/native/{p-4c0d81b0.entry.js → p-7ba03c5d.entry.js} +2 -2
  325. package/dist/native/p-82c4bf56.entry.js +2 -0
  326. package/dist/native/p-82c4bf56.entry.js.map +1 -0
  327. package/dist/native/{p-407fc32d.entry.js → p-86ab23ea.entry.js} +2 -2
  328. package/dist/native/p-87784622.entry.js +2 -0
  329. package/dist/native/{p-05d95d4d.entry.js → p-914da1e1.entry.js} +2 -2
  330. package/dist/native/p-9850c1d7.entry.js +2 -0
  331. package/dist/native/{p-5ba3fc3c.entry.js.map → p-9850c1d7.entry.js.map} +1 -1
  332. package/dist/native/{p-de2c07a6.entry.js → p-a0505695.entry.js} +3 -3
  333. package/dist/native/p-a0505695.entry.js.map +1 -0
  334. package/dist/native/p-a30206c1.entry.js +2 -0
  335. package/dist/native/{p-aa86af25.entry.js.map → p-a30206c1.entry.js.map} +1 -1
  336. package/dist/native/p-abbe5d69.entry.js +2 -0
  337. package/dist/native/{p-7c6edd1c.entry.js.map → p-abbe5d69.entry.js.map} +1 -1
  338. package/dist/native/{p-221b8f72.entry.js → p-ad128108.entry.js} +2 -2
  339. package/dist/native/{p-f0ddf60b.entry.js → p-b5b9190a.entry.js} +2 -2
  340. package/dist/native/p-c7b8b7ba.entry.js +2 -0
  341. package/dist/native/{p-fb897f7d.entry.js.map → p-c7b8b7ba.entry.js.map} +1 -1
  342. package/dist/native/p-c92d55f9.entry.js +2 -0
  343. package/dist/native/{p-3f2b6a22.entry.js → p-c9d3de9c.entry.js} +2 -2
  344. package/dist/native/p-cbca9326.entry.js +2 -0
  345. package/dist/native/{p-60b204ac.entry.js.map → p-cbca9326.entry.js.map} +1 -1
  346. package/dist/native/p-d0a33e64.js +3 -0
  347. package/dist/native/p-d0a33e64.js.map +1 -0
  348. package/dist/native/{p-ed488498.entry.js → p-d21b2da2.entry.js} +3 -3
  349. package/dist/native/{p-f85c08f1.js → p-e2d0a77d.js} +2 -2
  350. package/dist/native/{p-a2c0f1a7.entry.js → p-ec87200a.entry.js} +2 -2
  351. package/dist/native/{p-0ec1e2e3.entry.js → p-f377b285.entry.js} +2 -2
  352. package/dist/native/p-ff0f3794.entry.js +2 -0
  353. package/dist/native/{p-adc96c3a.entry.js.map → p-ff0f3794.entry.js.map} +1 -1
  354. package/dist/types/components/nv-calendar/nv-calendar.d.ts +25 -45
  355. package/dist/types/components/nv-calendar/partials/calendar-actions.d.ts +19 -0
  356. package/dist/types/components/nv-calendar/partials/calendar-grid.d.ts +46 -0
  357. package/dist/types/components/nv-calendar/partials/calendar-header.d.ts +38 -0
  358. package/dist/types/components/nv-calendar/partials/calendar-shortcuts.d.ts +35 -0
  359. package/dist/types/components/nv-calendar/partials/day-cell.d.ts +35 -0
  360. package/dist/types/components/nv-calendar/partials/index.d.ts +6 -0
  361. package/dist/types/components/nv-calendar/partials/week-numbers.d.ts +30 -0
  362. package/dist/types/components/nv-calendar/test/partials/calendar-actions.logic.test.d.ts +1 -0
  363. package/dist/types/components/nv-calendar/test/partials/calendar-grid.logic.test.d.ts +1 -0
  364. package/dist/types/components/nv-calendar/test/partials/calendar-header.logic.test.d.ts +1 -0
  365. package/dist/types/components/nv-calendar/test/partials/calendar-shortcuts.logic.test.d.ts +1 -0
  366. package/dist/types/components/nv-calendar/test/partials/day-cell.logic.test.d.ts +1 -0
  367. package/dist/types/components/nv-calendar/test/partials/week-numbers.logic.test.d.ts +1 -0
  368. package/dist/types/components/nv-datagrid/nv-datagrid.d.ts +106 -2
  369. package/dist/types/components/nv-fielddate/nv-fielddate.d.ts +21 -9
  370. package/dist/types/components/nv-fielddate/test/nv-fielddate.logic.test.d.ts +1 -0
  371. package/dist/types/components/nv-fielddaterange/nv-fielddaterange.d.ts +19 -6
  372. package/dist/types/components/nv-fielddaterange/test/nv-fielddaterange.logic.test.d.ts +1 -0
  373. package/dist/types/components/nv-fieldnumber/nv-fieldnumber.d.ts +1 -0
  374. package/dist/types/components/nv-fieldslider/nv-fieldslider.d.ts +5 -6
  375. package/dist/types/components.d.ts +175 -38
  376. package/dist/vscode-data.json +4 -4
  377. package/hydrate/index.js +666 -291
  378. package/hydrate/index.mjs +666 -291
  379. package/package.json +10 -2
  380. package/dist/cjs/index-108ddff0.js.map +0 -1
  381. package/dist/components/p-4656efae.js.map +0 -1
  382. package/dist/components/p-679e0fa9.js.map +0 -1
  383. package/dist/components/p-f0a5e7e4.js +0 -167
  384. package/dist/esm/index-8f0e5f19.js.map +0 -1
  385. package/dist/native/p-1e3d3374.entry.js +0 -2
  386. package/dist/native/p-21e7132f.entry.js +0 -2
  387. package/dist/native/p-21e7132f.entry.js.map +0 -1
  388. package/dist/native/p-2805f9f2.entry.js +0 -2
  389. package/dist/native/p-2805f9f2.entry.js.map +0 -1
  390. package/dist/native/p-5382eab2.entry.js +0 -2
  391. package/dist/native/p-5ba3fc3c.entry.js +0 -2
  392. package/dist/native/p-60b204ac.entry.js +0 -2
  393. package/dist/native/p-7092a675.entry.js +0 -2
  394. package/dist/native/p-711a7778.js +0 -3
  395. package/dist/native/p-711a7778.js.map +0 -1
  396. package/dist/native/p-759c9ce4.entry.js +0 -2
  397. package/dist/native/p-759c9ce4.entry.js.map +0 -1
  398. package/dist/native/p-7c676f2c.entry.js +0 -2
  399. package/dist/native/p-7c6edd1c.entry.js +0 -2
  400. package/dist/native/p-987c79d8.entry.js +0 -2
  401. package/dist/native/p-aa86af25.entry.js +0 -2
  402. package/dist/native/p-adc96c3a.entry.js +0 -2
  403. package/dist/native/p-b0fc08e7.entry.js +0 -2
  404. package/dist/native/p-d07ab618.entry.js +0 -2
  405. package/dist/native/p-dac0089b.entry.js +0 -2
  406. package/dist/native/p-dac0089b.entry.js.map +0 -1
  407. package/dist/native/p-de2c07a6.entry.js.map +0 -1
  408. package/dist/native/p-ef76178b.entry.js +0 -2
  409. package/dist/native/p-f39803d9.entry.js +0 -2
  410. package/dist/native/p-f39803d9.entry.js.map +0 -1
  411. package/dist/native/p-fb897f7d.entry.js +0 -2
  412. package/dist/native/p-fc3bea07.entry.js +0 -2
  413. /package/dist/native/{p-519b4819.entry.js.map → p-08ca678c.entry.js.map} +0 -0
  414. /package/dist/native/{p-0323daf6.entry.js.map → p-1c1ecd38.entry.js.map} +0 -0
  415. /package/dist/native/{p-16a4cdf3.entry.js.map → p-1d98477d.entry.js.map} +0 -0
  416. /package/dist/native/{p-19fb0fd0.entry.js.map → p-2006f5d4.entry.js.map} +0 -0
  417. /package/dist/native/{p-9fba8663.entry.js.map → p-2bc7d66a.entry.js.map} +0 -0
  418. /package/dist/native/{p-1e3d3374.entry.js.map → p-45cbe6e4.entry.js.map} +0 -0
  419. /package/dist/native/{p-c930adb7.entry.js.map → p-55df8bf9.entry.js.map} +0 -0
  420. /package/dist/native/{p-4c0d81b0.entry.js.map → p-7ba03c5d.entry.js.map} +0 -0
  421. /package/dist/native/{p-407fc32d.entry.js.map → p-86ab23ea.entry.js.map} +0 -0
  422. /package/dist/native/{p-d07ab618.entry.js.map → p-87784622.entry.js.map} +0 -0
  423. /package/dist/native/{p-05d95d4d.entry.js.map → p-914da1e1.entry.js.map} +0 -0
  424. /package/dist/native/{p-221b8f72.entry.js.map → p-ad128108.entry.js.map} +0 -0
  425. /package/dist/native/{p-f0ddf60b.entry.js.map → p-b5b9190a.entry.js.map} +0 -0
  426. /package/dist/native/{p-7092a675.entry.js.map → p-c92d55f9.entry.js.map} +0 -0
  427. /package/dist/native/{p-3f2b6a22.entry.js.map → p-c9d3de9c.entry.js.map} +0 -0
  428. /package/dist/native/{p-ed488498.entry.js.map → p-d21b2da2.entry.js.map} +0 -0
  429. /package/dist/native/{p-f85c08f1.js.map → p-e2d0a77d.js.map} +0 -0
  430. /package/dist/native/{p-a2c0f1a7.entry.js.map → p-ec87200a.entry.js.map} +0 -0
  431. /package/dist/native/{p-0ec1e2e3.entry.js.map → p-f377b285.entry.js.map} +0 -0
@@ -1,5 +1,5 @@
1
- import { r as registerInstance, c as createEvent, h, a as Host, g as getElement } from './index-8f0e5f19.js';
2
- import { C as CUSTOM_DAY_NAMES, b as CUSTOM_MONTH_NAMES, W as WEEK_ABBREVIATIONS } from './constants-b97e736d.js';
1
+ import { h, r as registerInstance, c as createEvent, H as Host, g as getElement } from './index-a1936cd0.js';
2
+ import { C as CUSTOM_DAY_NAMES, d as CUSTOM_MONTH_NAMES, W as WEEK_ABBREVIATIONS } from './constants-4faa1fae.js';
3
3
  import { c as commonjsGlobal } from './_commonjsHelpers-1789f0cf.js';
4
4
 
5
5
  var dayjs_min = {exports: {}};
@@ -156,9 +156,18 @@ function isSameOrAfter(date, compareDate, options) {
156
156
  * @returns {number} Week number
157
157
  */
158
158
  function getWeekNumber(date) {
159
- const startOfYear = new Date(date.getFullYear(), 0, 1);
160
- const pastDaysOfYear = (date.getTime() - startOfYear.getTime()) / 86400000;
161
- return Math.ceil((pastDaysOfYear + startOfYear.getDay() + 1) / 7);
159
+ // Create a copy of the date to avoid modifying the original
160
+ const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
161
+ // Adjust to the same week Thursday (ISO 8601)
162
+ d.setUTCDate(d.getUTCDate() + 3 - ((d.getUTCDay() + 6) % 7));
163
+ // Calculate the first Thursday of the year
164
+ const week1 = new Date(Date.UTC(d.getUTCFullYear(), 0, 4));
165
+ // Calculate the week number
166
+ return (1 +
167
+ Math.round(((d.getTime() - week1.getTime()) / 86400000 -
168
+ 3 +
169
+ ((week1.getUTCDay() + 6) % 7)) /
170
+ 7));
162
171
  }
163
172
  /**
164
173
  * Convert a date string/Date to a Date without timezone offset
@@ -223,15 +232,200 @@ function parseDate(dateInput, dateFormat) {
223
232
  parsed = dayjs(dateInput, dateFormat, true);
224
233
  }
225
234
  if (!parsed.isValid()) {
226
- console.error(`Parsing error:`, {
227
- dateInput,
228
- dateFormat: dateFormat,
229
- });
235
+ // Check if the date input contains placeholder characters (incomplete input from Inputmask)
236
+ // This specifically targets partial dates being typed with placeholder characters
237
+ const hasPlaceholderChars = typeof dateInput === 'string' &&
238
+ (dateInput.includes('_') ||
239
+ dateInput.includes('-_') ||
240
+ dateInput.includes('/_') ||
241
+ dateInput.includes('._'));
242
+ // Check if it looks like a partial date being typed (starts with valid pattern)
243
+ const looksLikePartialDate = typeof dateInput === 'string' &&
244
+ dateInput.length < dateFormat.length &&
245
+ /^[\d\-/.]*$/.test(dateInput) && // Only contains digits and date separators
246
+ dateInput.length > 0;
247
+ const isIncompleteInput = hasPlaceholderChars || looksLikePartialDate;
248
+ // Only log error if it's not an incomplete input (to avoid spam during typing)
249
+ if (!isIncompleteInput) {
250
+ console.error(`Parsing error:`, {
251
+ dateInput,
252
+ dateFormat: dateFormat,
253
+ });
254
+ }
230
255
  return null;
231
256
  }
232
257
  return parsed.toDate();
233
258
  }
234
259
 
260
+ /**
261
+ * Renders a single day cell in the calendar grid
262
+ * @param {DayCellProps} props - Component properties
263
+ * @returns {JSX.Element} JSX element representing a day cell
264
+ */
265
+ const DayCell = props => {
266
+ const { date, dayOfMonth, isCurrentMonth, isSelected, isInRange, isStart, isEnd, isToday, isDisabled, onClick, } = props;
267
+ // Build CSS classes for the day cell
268
+ const dayClasses = [
269
+ 'day',
270
+ isSelected ? 'selected' : '',
271
+ isStart ? 'range-start' : '',
272
+ isEnd ? 'range-end' : '',
273
+ isInRange ? 'in-range' : '',
274
+ isDisabled ? 'disabled' : '',
275
+ !isCurrentMonth ? 'outside-month' : '',
276
+ isToday ? 'is-today' : '',
277
+ ]
278
+ .filter(Boolean)
279
+ .join(' ');
280
+ const handleClick = () => {
281
+ if (!isDisabled && onClick) {
282
+ onClick(date);
283
+ }
284
+ };
285
+ return (
286
+ // eslint-disable-next-line react/jsx-no-bind
287
+ h("div", { class: dayClasses, onClick: handleClick, "aria-disabled": isDisabled }, dayOfMonth));
288
+ };
289
+
290
+ /**
291
+ * Renders the action buttons for the calendar (Cancel/OK)
292
+ * @param {CalendarActionsProps} props - Component properties
293
+ * @returns {JSX.Element} JSX element representing the action buttons
294
+ */
295
+ const CalendarActions = props => {
296
+ const { onReset, onConfirm, useSlot = false } = props;
297
+ return (h("div", { class: "datepicker-actions" }, useSlot ? (h("slot", { name: "actions" },
298
+ h("nv-button", { emphasis: "low", size: "xs", onClick: onReset }, "Cancel"),
299
+ h("nv-button", { size: "xs", onClick: onConfirm }, "OK"))) : (h("div", null,
300
+ h("nv-button", { emphasis: "low", size: "xs", onClick: onReset }, "Cancel"),
301
+ h("nv-button", { size: "xs", onClick: onConfirm }, "OK")))));
302
+ };
303
+
304
+ /**
305
+ * Renders the week numbers column for the calendar
306
+ * @param {WeekNumbersProps} props - Component properties
307
+ * @returns {JSX.Element} JSX element representing the week numbers
308
+ */
309
+ const WeekNumbers = props => {
310
+ const { weeks, localizedWeekText, selectionType, onWeekSelect, calendarIndex, } = props;
311
+ /**
312
+ * Handles click on a week number for range selection
313
+ * @param {Array<WeekData>} week - Week data
314
+ */
315
+ const handleWeekClick = (week) => {
316
+ if (selectionType === 'range') {
317
+ const dates = week.map(d => d.date);
318
+ onWeekSelect(dates, calendarIndex);
319
+ }
320
+ };
321
+ /**
322
+ * Creates a click handler for a specific week
323
+ * @param {Array<WeekData>} week - Week data
324
+ * @returns {() => void} Click handler function
325
+ */
326
+ const createWeekHandler = (week) => {
327
+ return () => handleWeekClick(week);
328
+ };
329
+ return (h("div", { class: "week-numbers" },
330
+ h("div", { class: "week-header" }, localizedWeekText),
331
+ weeks.map((week, weekIndex) => {
332
+ var _a;
333
+ const firstDayWithDate = ((_a = week.find(d => d.date)) === null || _a === void 0 ? void 0 : _a.date) || new Date();
334
+ const weekNumber = getWeekNumber(firstDayWithDate);
335
+ const isClickable = selectionType === 'range';
336
+ return (h("div", { class: `week-number ${isClickable ? 'clickable' : ''}`, onClick: createWeekHandler(week), key: `week-${weekIndex}`, role: isClickable ? 'button' : undefined, tabindex: isClickable ? 0 : undefined }, weekNumber));
337
+ })));
338
+ };
339
+
340
+ /**
341
+ * Renders the shortcuts for quick date selection
342
+ * @param {CalendarShortcutsProps} props - Component properties
343
+ * @returns {JSX.Element | null} JSX element representing the shortcuts or null if no shortcuts
344
+ */
345
+ const CalendarShortcuts = props => {
346
+ const { shortcuts, placement, onShortcutClick } = props;
347
+ if (!shortcuts || shortcuts.length === 0) {
348
+ return null;
349
+ }
350
+ /**
351
+ * Creates a click handler for a specific shortcut
352
+ * @param {ShortcutData} shortcut - The shortcut data
353
+ * @returns {() => void} Click handler function
354
+ */
355
+ const createShortcutHandler = (shortcut) => {
356
+ return () => onShortcutClick(shortcut);
357
+ };
358
+ return (h("div", { class: `shortcuts-container shortcuts-placement-${placement}` }, shortcuts.map((shortcut, index) => (h("nv-button", { key: `shortcut-${index}`, emphasis: "lower", size: "xs", "aria-label": shortcut.label, onClick: createShortcutHandler(shortcut) }, shortcut.label)))));
359
+ };
360
+
361
+ /**
362
+ * Renders the calendar header with navigation and date controls
363
+ * @param {CalendarHeaderProps} props - Component properties
364
+ * @returns {JSX.Element} JSX element representing the calendar header
365
+ */
366
+ const CalendarHeader = props => {
367
+ const { currentDate, months, numberOfCalendars, calendarIndex, monthOffset, onMonthChange, onMonthSelect, onYearChange, } = props;
368
+ /**
369
+ * Creates navigation handler for month change
370
+ * @param {number} direction - Direction of navigation (-1 or 1)
371
+ * @returns {() => void} Navigation handler function
372
+ */
373
+ const createNavigationHandler = (direction) => {
374
+ return () => onMonthChange(direction);
375
+ };
376
+ /**
377
+ * Creates month selection handler
378
+ * @param {number} offset - Month offset
379
+ * @returns {(event: Event) => void} Month selection handler function
380
+ */
381
+ const createMonthSelectHandler = (offset) => {
382
+ return (event) => onMonthSelect(event, offset);
383
+ };
384
+ /**
385
+ * Creates year change handler
386
+ * @param {number} offset - Month offset
387
+ * @returns {(event: Event) => void} Year change handler function
388
+ */
389
+ const createYearChangeHandler = (offset) => {
390
+ return (event) => onYearChange(event, offset);
391
+ };
392
+ const currentMonth = (currentDate.getUTCMonth() + monthOffset) % 12;
393
+ const currentYear = currentDate.getUTCFullYear() +
394
+ Math.floor((currentDate.getUTCMonth() + monthOffset) / 12);
395
+ return (h("div", { class: "header" },
396
+ numberOfCalendars > 1 && calendarIndex === 0 && (h("nv-iconbutton", { class: "nav-left", emphasis: "lower", name: "chevron-left", onClick: createNavigationHandler(-1) })),
397
+ h("div", { class: "date-controls" },
398
+ h("select", { class: "month-select mr-4", onChange: createMonthSelectHandler(monthOffset) }, months.map(month => (h("option", { key: month.value, value: month.value, selected: month.value === currentMonth }, month.label)))),
399
+ h("input", { type: "number", class: "year-input", min: "1950", max: "2100", value: currentYear, onChange: createYearChangeHandler(monthOffset) })),
400
+ numberOfCalendars === 1 && (h("div", { class: "nav-buttons" },
401
+ h("nv-iconbutton", { emphasis: "lower", name: "chevron-left", onClick: createNavigationHandler(-1) }),
402
+ h("nv-iconbutton", { emphasis: "lower", name: "chevron-right", onClick: createNavigationHandler(1) }))),
403
+ numberOfCalendars > 1 && calendarIndex === numberOfCalendars - 1 && (h("nv-iconbutton", { emphasis: "lower", name: "chevron-right", onClick: createNavigationHandler(1), class: "nav-right" }))));
404
+ };
405
+
406
+ /**
407
+ * Renders the calendar grid with day headers and day cells
408
+ * @param {CalendarGridProps} props - Component properties
409
+ * @returns {JSX.Element} JSX element representing the calendar grid
410
+ */
411
+ const CalendarGrid = props => {
412
+ const { days, dayNames, selectionType, selectedDate, startDate, endDate, isUTCMode, onDayClick, isDateInRange, isToday, } = props;
413
+ return (h("div", { class: "days-container" },
414
+ h("div", { class: "days-header" }, dayNames.map((day, index) => (h("div", { class: "day-header", key: `day-header-${index}` }, day)))),
415
+ h("div", { class: "days-grid" }, days.map(day => {
416
+ const date = day.date;
417
+ if (!date)
418
+ return null;
419
+ const isSelected = selectionType === 'single' &&
420
+ isSameDate(date, selectedDate, { isUTCMode });
421
+ const isInRange = isDateInRange(date);
422
+ const isStart = isSameDate(date, startDate, { isUTCMode });
423
+ const isEnd = isSameDate(date, endDate, { isUTCMode });
424
+ const isTodayDate = isToday(date);
425
+ return (h(DayCell, { date: date, dayOfMonth: day.dayOfMonth, isCurrentMonth: day.isCurrentMonth, isSelected: isSelected, isInRange: isInRange, isStart: isStart, isEnd: isEnd, isToday: isTodayDate, isDisabled: day.isDisabled, selectionType: selectionType, onClick: onDayClick }));
426
+ }))));
427
+ };
428
+
235
429
  const nvCalendarCss = "nv-calendar{display:block}.datepicker-root{display:flex;justify-content:center;align-items:flex-start;width:auto}.datepicker-container{font-family:system-ui, sans-serif;display:flex;flex-direction:column;align-items:stretch;background:var(--components-calendar-background);border-radius:var(--calendar-radius);padding:var(--calendar-padding);box-shadow:0px var(--shadow-y-axis-md-1) var(--shadow-blur-md-1) var(--shadow-spread-md, 0) var(--shadow-color-opacity-0), 0px var(--shadow-y-axis-md-2) var(--shadow-blur-md-2) var(--shadow-spread-md, 0) var(--shadow-color-opacity-2);border:1px solid var(--components-calendar-border);width:auto;max-width:100%}.datepicker-container-single{max-width:300px}.datepicker-container-single .datepicker-wrapper:has(.shortcuts-placement-left),.datepicker-container-single .datepicker-wrapper:has(.shortcuts-placement-right){max-width:410px !important}.datepicker-container-single:has(.shortcuts-placement-left),.datepicker-container-single:has(.shortcuts-placement-right){max-width:410px !important}.datepicker-wrapper{display:flex;justify-content:center;align-items:flex-start;gap:var(--calendar-gap-x);width:auto;overflow-x:hidden}.datepicker-wrapper::-webkit-scrollbar{width:6px;height:6px}.datepicker-wrapper::-webkit-scrollbar-track{background-color:var(--color-level-10-background);border-radius:9999px}.datepicker-wrapper::-webkit-scrollbar-thumb{background-color:var(--color-gray-200);border-radius:9999px}.datepicker-wrapper.single{justify-content:center}.calendar-container{display:flex;flex-direction:column;align-items:center;padding:var(--calendar-padding);width:auto;position:relative}.calendar-separator{width:1px;background:var(--components-calendar-border);height:auto;min-height:100%;margin:0 10px}.header{display:flex;justify-content:start;align-items:center;margin-bottom:var(--calendar-header-margin-bottom);width:100%}.header nv-iconbutton{width:var(--calendar-header-button-size);height:var(--calendar-header-button-size)}.nav-buttons{display:flex;gap:var(--spacing-0);margin-left:auto}.nav-left{order:-1}.date-controls{display:flex;gap:var(--spacing-1);align-items:center;min-height:34px;justify-content:center}.datepicker-container-single .date-controls{justify-content:flex-start}.datepicker-container:not(.datepicker-container-single) .date-controls{justify-content:start;flex-grow:1}.date-controls .month-select,.date-controls .year-input{background:transparent !important}.calendar-wrapper:nth-child(n+2) .datepicker-container{margin-left:42px}.calendar-grid{display:grid;grid-template-columns:auto 1fr;column-gap:var(--calendar-weeks-calendar-gap-x);position:relative}.calendar-grid.slide-left{animation:slideLeft 0.3s ease-out}.calendar-grid.slide-right{animation:slideRight 0.3s ease-out}.week-numbers{display:grid;grid-template-rows:var(--calendar-cell-size) repeat(6, var(--calendar-cell-size));background:var(--components-calendar-weeks-background);color:var(--components-calendar-weeks-text);border-radius:var(--calendar-weeks-radius);width:var(--calendar-weeks-size);row-gap:var(--calendar-grid-gap-y)}.week-numbers .clickable{cursor:pointer}.week-numbers .clickable:hover{background-color:var(--components-calendar-weeks-background-hover);color:var(--components-calendar-weeks-text-hover);border-radius:var(--calendar-radius)}.week-header,.week-number{display:grid;place-items:center;font-size:var(--calendar-cell-font-size)}.week-header{font-weight:700;color:var(--components-calendar-weeks-text)}.week-number{color:var(--components-calendar-cell-text)}.days-container{display:grid;grid-template-rows:auto 1fr;row-gap:var(--calendar-grid-gap-y)}.days-header{display:grid;grid-template-columns:repeat(7, var(--calendar-cell-size));height:var(--calendar-cell-size)}.day-header{display:grid;place-items:center;font-size:var(--calendar-cell-font-size);color:var(--components-calendar-cell-text)}.days-grid{display:grid;grid-template-columns:repeat(7, var(--calendar-cell-size));grid-template-rows:repeat(6, var(--calendar-cell-size));animation:fadeIn 0.2s ease-in;row-gap:var(--calendar-grid-gap-y);z-index:0}.day{display:grid;place-items:center;width:var(--calendar-cell-size);height:var(--calendar-cell-size);font-size:var(--calendar-cell-font-size);border-radius:var(--calendar-cell-radius);cursor:pointer;border:none;background:transparent;transition:all 0.2s ease;text-align:center;animation:scaleIn 0.2s ease-out}.day:hover:not(.disabled,.empty,.selected){background:var(--components-calendar-cell-background-hover);color:var(--components-calendar-cell-text-hover)}.day.selected,.day.selected:hover .day.is-today.selected,.day.is-today.selected:hover{background:var(--components-calendar-cell-background-selected);color:var(--components-calendar-cell-text-selected) !important}.day.disabled{opacity:var(--opacity-disabled);cursor:not-allowed}.day.outside-month{color:var(--components-calendar-cell-text);opacity:var(--opacity-disabled)}.day.outside-month.selected{opacity:1 !important;color:var(--components-calendar-cell-text-selected)}.day.outside-month.in-range{opacity:0.5 !important;background-color:var(--components-calendar-cell-background-in-range);color:var(--components-calendar-cell-text-in-range)}.day.outside-month.in-range:hover{opacity:0.7 !important;background-color:var(--components-calendar-cell-background-in-range)}.day.in-range{background:var(--components-calendar-cell-background-in-range);color:var(--components-calendar-cell-text-in-range);border-radius:0;position:relative}.day.range-start,.day.range-start:focus,.day.range-start:hover,.day.range-end,.day.range-end:focus,.day.range-end:hover{background-color:var(--components-calendar-cell-background-selected) !important;color:var(--components-calendar-cell-text-selected) !important}.day.range-start,.day.range-end,.day.range-start.is-today,.day.range-end.is-today{background:var(--components-calendar-cell-background-selected);color:var(--components-calendar-cell-text-selected);position:relative;border-radius:var(--radius-rounded-full)}.day.range-start:hover,.day.range-end:hover,.day.range-start.is-today:hover,.day.range-end.is-today:hover{color:var(--components-calendar-cell-text-today)}.day.range-start:before,.day.range-end:before,.day.range-start.is-today:before,.day.range-end.is-today:before{content:\"\";position:absolute;bottom:0;left:0;right:0;top:0;z-index:-1;background-color:var(--components-calendar-cell-background-in-range);border-radius:var(--radius-rounded-full);width:auto;height:auto}.day.range-start:has(~.range-end):before,.day.range-start:has(+.in-range):before{border-top-right-radius:0;border-bottom-right-radius:0}.day.range-end:before{border-top-left-radius:0 !important;border-bottom-left-radius:0 !important}.day.outside-month.range-start,.day.outside-month.range-end{opacity:1 !important;background:var(--components-calendar-cell-background-selected) !important;color:var(--components-calendar-cell-text-selected)}.day.is-today{font-weight:700;position:relative;color:var(--components-calendar-cell-text-today)}.day.is-today.range-start,.day.is-today.range-end{color:var(--components-calendar-cell-text-selected)}.day.is-today.range-start:hover,.day.is-today.range-end:hover{color:var(--components-calendar-cell-text-today)}.day.is-today::after{content:\"\";position:absolute;bottom:var(--spacing-1);left:50%;transform:translateX(-50%);width:var(--calendar-cell-dot-size);height:var(--calendar-cell-dot-size);background-color:currentColor;border-radius:50%}.day.is-today.selected::after{color:var(--components-calendar-cell-text-selected)}.day.is-today.selected::after::after{background-color:var(--components-calendar-cell-dot-selected)}.calendar-footer{display:flex;gap:var(--spacing-1);justify-content:flex-start;width:100%;flex-wrap:wrap}.footer-placement-left{justify-content:flex-start}.footer-placement-right{justify-content:flex-end}.footer-placement-center{justify-content:center}.datepicker-controls{display:flex;flex-direction:column;border-top:1px solid var(--components-calendar-border);padding:var(--calendar-controls-padding-top) var(--calendar-padding) var(--calendar-padding);gap:var(--calendar-grid-gap-y);margin-top:var(--calendar-controls-margin-top)}.datepicker-actions{display:flex;justify-content:flex-end;gap:var(--spacing-1);width:100%}.datepicker-actions slot-fb{display:contents !important}.calendar-footer+.datepicker-actions{margin-top:0}.shortcuts-placement-left,.shortcuts-placement-right{display:flex;flex-direction:column;gap:var(--spacing-1);margin-top:var(--spacing-4)}.shortcuts-placement-left{align-items:flex-end}.shortcuts-placement-right{align-items:flex-start}@keyframes slideLeft{from{opacity:0;transform:translateX(20px)}to{opacity:1;transform:translateX(0)}}@keyframes slideRight{from{opacity:0;transform:translateX(-20px)}to{opacity:1;transform:translateX(0)}}@keyframes fadeIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes scaleIn{from{opacity:0;transform:scale(0.9)}to{opacity:1;transform:scale(1)}}";
236
430
  const NvCalendarStyle0 = nvCalendarCss;
237
431
 
@@ -240,18 +434,28 @@ const NvCalendar = class {
240
434
  registerInstance(this, hostRef);
241
435
  this.singleDateChange = createEvent(this, "singleDateChange", 7);
242
436
  this.rangeDateChange = createEvent(this, "rangeDateChange", 7);
437
+ this.valueChanged = createEvent(this, "valueChanged", 7);
243
438
  /****************************************************************************/
244
439
  //#region PROPERTIES
245
440
  /**
246
441
  * First day of the week (0 = Sunday, 1 = Monday, etc.)
247
- * @default 0
442
+ * @default 1
248
443
  */
249
- this.firstDayOfWeek = 0;
444
+ this.firstDayOfWeek = 1;
250
445
  /**
251
446
  * Number of calendars to display
252
447
  * @default 1
253
448
  */
254
449
  this.numberOfCalendars = 1;
450
+ /**
451
+ * Selected date value. For single mode: ISO date string. For range mode: comma-separated ISO date strings.
452
+ * Examples:
453
+ * - Single: "2025-03-15"
454
+ * - Range: "2025-03-15,2025-03-20"
455
+ * @default ""
456
+ */
457
+ // eslint-disable-next-line @stencil-community/strict-mutable
458
+ this.value = '';
255
459
  /**
256
460
  * Locale for date formatting
257
461
  * @default 'en-BE'
@@ -289,6 +493,75 @@ const NvCalendar = class {
289
493
  this.endDate = null;
290
494
  /** List of formatted months for the selector */
291
495
  this.months = [];
496
+ /**
497
+ * Parses the unified value prop and synchronizes with internal state
498
+ * @param {string} value - Value to parse
499
+ */
500
+ this.parseUnifiedValue = (value) => {
501
+ if (!value) {
502
+ // Reset all selections
503
+ this.selectedDate = null;
504
+ this.startDate = null;
505
+ this.endDate = null;
506
+ return;
507
+ }
508
+ const values = value
509
+ .split(',')
510
+ .map(v => v.trim())
511
+ .filter(Boolean);
512
+ if (this.selectionType === 'single' && values.length >= 1) {
513
+ const parsedDate = parseDate(values[0], this.dateFormat);
514
+ if (parsedDate) {
515
+ this.selectedDate = parsedDate;
516
+ // Only sync with legacy prop if not using actions (immediate mode)
517
+ if (!this.showActions) {
518
+ this.singleValue = values[0];
519
+ }
520
+ // Navigate to the date if not prevented
521
+ const preventNavigation = this.el.getAttribute('data-prevent-navigation') === 'true';
522
+ if (!preventNavigation) {
523
+ this.currentDate = parsedDate;
524
+ }
525
+ }
526
+ else {
527
+ // Handle malformed date gracefully - reset state
528
+ console.warn(`Invalid date format: ${values[0]}`);
529
+ this.selectedDate = null;
530
+ if (!this.showActions) {
531
+ this.singleValue = '';
532
+ }
533
+ }
534
+ }
535
+ else if (this.selectionType === 'range' && values.length >= 2) {
536
+ const startDate = parseDate(values[0], this.dateFormat);
537
+ const endDate = parseDate(values[1], this.dateFormat);
538
+ if (startDate && endDate) {
539
+ this.startDate = startDate;
540
+ this.endDate = endDate;
541
+ // Only sync with legacy prop if not using actions (immediate mode)
542
+ if (!this.showActions) {
543
+ this.rangeValue = {
544
+ start: values[0],
545
+ end: values[1],
546
+ };
547
+ }
548
+ // Navigate to start date if not prevented
549
+ const preventNavigation = this.el.getAttribute('data-prevent-navigation') === 'true';
550
+ if (!preventNavigation) {
551
+ this.currentDate = startDate;
552
+ }
553
+ }
554
+ else {
555
+ // Handle malformed dates gracefully - reset state
556
+ console.warn(`Invalid date range format: ${values[0]}, ${values[1]}`);
557
+ this.startDate = null;
558
+ this.endDate = null;
559
+ if (!this.showActions) {
560
+ this.rangeValue = { start: '', end: '' };
561
+ }
562
+ }
563
+ }
564
+ };
292
565
  /**
293
566
  * Change the displayed month
294
567
  * @param {number} offset - Month offset (-1 for previous, 1 for next)
@@ -336,7 +609,14 @@ const NvCalendar = class {
336
609
  return;
337
610
  const formattedDate = formatDate(date, { dateFormat: this.dateFormat });
338
611
  this.selectedDate = date;
339
- this.singleDateChange.emit(formattedDate);
612
+ // Update the unified value prop (like nv-fieldslider)
613
+ this.value = formattedDate;
614
+ this.valueChanged.emit(formattedDate);
615
+ // Legacy support (deprecated) - only sync props if not using actions
616
+ if (!this.showActions) {
617
+ this.singleValue = formattedDate;
618
+ this.singleDateChange.emit(formattedDate);
619
+ }
340
620
  };
341
621
  /**
342
622
  * Handles range date selection
@@ -344,18 +624,32 @@ const NvCalendar = class {
344
624
  */
345
625
  this.handleRangeSelection = (date) => {
346
626
  if (!this.startDate || (this.startDate && this.endDate)) {
627
+ // Start new range selection
347
628
  this.startDate = date;
348
629
  this.endDate = null;
349
630
  }
350
631
  else {
632
+ // Complete range selection
351
633
  this.endDate = date;
634
+ // Ensure correct order
352
635
  if (this.startDate > this.endDate) {
353
636
  [this.startDate, this.endDate] = [this.endDate, this.startDate];
354
637
  }
355
- this.rangeDateChange.emit({
356
- start: formatDate(this.startDate, { dateFormat: this.dateFormat }),
357
- end: formatDate(this.endDate, { dateFormat: this.dateFormat }),
638
+ const startFormatted = formatDate(this.startDate, {
639
+ dateFormat: this.dateFormat,
640
+ });
641
+ const endFormatted = formatDate(this.endDate, {
642
+ dateFormat: this.dateFormat,
358
643
  });
644
+ // Update the unified value prop (like nv-fieldslider)
645
+ this.value = `${startFormatted},${endFormatted}`;
646
+ this.valueChanged.emit(this.value);
647
+ // Legacy support (deprecated) - only sync props if not using actions
648
+ if (!this.showActions) {
649
+ const legacyRange = { start: startFormatted, end: endFormatted };
650
+ this.rangeDateChange.emit(legacyRange);
651
+ this.rangeValue = legacyRange;
652
+ }
359
653
  }
360
654
  };
361
655
  /**
@@ -414,23 +708,35 @@ const NvCalendar = class {
414
708
  * @returns {string[]} Array of short day names
415
709
  */
416
710
  this.getDayNames = () => {
711
+ let days;
417
712
  // If we have custom day names for this locale
418
713
  if (CUSTOM_DAY_NAMES[this.locale]) {
419
- const days = [...CUSTOM_DAY_NAMES[this.locale]];
420
- // Reorganize the days based on the first day of the week
421
- const firstDays = days.slice(0, this.firstDayOfWeek);
422
- const remainingDays = days.slice(this.firstDayOfWeek);
423
- return [...remainingDays, ...firstDays];
714
+ // Custom day names are expected to start with Monday (index 0 = Monday)
715
+ days = [...CUSTOM_DAY_NAMES[this.locale]];
716
+ }
717
+ else {
718
+ // Generate days using Intl.DateTimeFormat, starting from Monday
719
+ const formatter = new Intl.DateTimeFormat(this.locale, {
720
+ weekday: 'short',
721
+ });
722
+ // Generate days starting from Monday (2023-01-02 was a Monday)
723
+ days = [...Array(7)].map((_, i) => formatter.format(new Date(2023, 0, i + 2)).toUpperCase());
724
+ }
725
+ // Now reorganize based on firstDayOfWeek
726
+ // 0 = Sunday, 1 = Monday (default), 2 = Tuesday, etc.
727
+ if (this.firstDayOfWeek === 0) {
728
+ // If Sunday is first day, move Sunday (last element) to the beginning
729
+ return [days[6], ...days.slice(0, 6)];
730
+ }
731
+ else if (this.firstDayOfWeek === 1) {
732
+ // If Monday is first day, return as-is (since our array starts with Monday)
733
+ return days;
734
+ }
735
+ else {
736
+ // For other first days (Tuesday=2, Wednesday=3, etc.)
737
+ const offset = this.firstDayOfWeek - 1; // Convert to 0-based offset from Monday
738
+ return [...days.slice(offset), ...days.slice(0, offset)];
424
739
  }
425
- // Otherwise, use the default behavior
426
- const formatter = new Intl.DateTimeFormat(this.locale, {
427
- weekday: 'short',
428
- });
429
- const days = [...Array(7)].map((_, i) => formatter.format(new Date(2023, 0, i + 1)).toUpperCase());
430
- // Reorganize the days based on the first day of the week
431
- const firstDays = days.slice(0, this.firstDayOfWeek);
432
- const remainingDays = days.slice(this.firstDayOfWeek);
433
- return [...remainingDays, ...firstDays];
434
740
  };
435
741
  /**
436
742
  * Generates the days of the current month
@@ -611,8 +917,15 @@ const NvCalendar = class {
611
917
  if (shortcut.singleValue) {
612
918
  const newDate = parseDate(shortcut.singleValue, this.dateFormat);
613
919
  this.selectedDate = newDate;
614
- this.singleDateChange.emit(formatDate(newDate, { dateFormat: this.dateFormat }));
615
- this.singleValue = formatDate(newDate, { dateFormat: this.dateFormat });
920
+ const formattedDate = formatDate(newDate, {
921
+ dateFormat: this.dateFormat,
922
+ });
923
+ // Update the unified value prop (like nv-fieldslider)
924
+ this.value = formattedDate;
925
+ this.valueChanged.emit(formattedDate);
926
+ // Legacy support (deprecated) - sync props
927
+ this.singleValue = formattedDate;
928
+ this.singleDateChange.emit(formattedDate);
616
929
  if (!this.showActions) {
617
930
  const event = new CustomEvent('closePopover', {
618
931
  bubbles: true,
@@ -627,14 +940,18 @@ const NvCalendar = class {
627
940
  const end = parseDate(shortcut.rangeValue.end, this.dateFormat);
628
941
  this.startDate = start;
629
942
  this.endDate = end;
630
- this.rangeDateChange.emit({
631
- start: formatDate(start, { dateFormat: this.dateFormat }),
632
- end: formatDate(end, { dateFormat: this.dateFormat }),
943
+ const startFormatted = formatDate(start, {
944
+ dateFormat: this.dateFormat,
633
945
  });
634
- this.rangeValue = {
635
- start: formatDate(start, { dateFormat: this.dateFormat }),
636
- end: formatDate(end, { dateFormat: this.dateFormat }),
637
- };
946
+ const endFormatted = formatDate(end, { dateFormat: this.dateFormat });
947
+ // Update the unified value prop (like nv-fieldslider)
948
+ this.value = `${startFormatted},${endFormatted}`;
949
+ this.valueChanged.emit(this.value);
950
+ // Legacy support (deprecated) - sync props
951
+ const legacyRange = { start: startFormatted, end: endFormatted };
952
+ this.rangeDateChange.emit(legacyRange);
953
+ // eslint-disable-next-line @stencil-community/strict-mutable
954
+ this.rangeValue = legacyRange;
638
955
  if (!this.showActions) {
639
956
  const event = new CustomEvent('closePopover', {
640
957
  bubbles: true,
@@ -652,79 +969,28 @@ const NvCalendar = class {
652
969
  this.forceCalendarUpdate = newDate => {
653
970
  this.currentDate = new Date(newDate);
654
971
  };
655
- /**
656
- * Handles month change with an offset
657
- * @param {number} direction - Direction (-1 for previous, 1 for next)
658
- * @returns {Function} Change month handler
659
- */
660
- this.getChangeMonthHandler = (direction) => {
661
- return () => this.changeMonth(direction);
662
- };
663
- /**
664
- * Handles month change from an event (ex: dropdown)
665
- * @param {number} offset - Month offset (0 by default)
666
- * @returns {Function} Change month handler
667
- */
668
- this.getHandleMonthChange = (offset) => {
669
- return (event) => this.handleMonthChange(event, offset);
670
- };
671
- /**
672
- * Handles year change from an event (ex: dropdown)
673
- * @param {number} offset - Year offset (0 by default)
674
- * @returns {Function} Change year handler
675
- */
676
- this.getHandleYearChange = (offset) => {
677
- return (event) => this.handleYearChange(event, offset);
678
- };
679
- /**
680
- * Handles day click
681
- * @param {Date} date - Date to handle
682
- * @param {boolean} isDisabled - Whether the date is disabled
683
- * @returns {Function} Day click handler
684
- */
685
- this.getDayClickHandler = (date, isDisabled) => {
686
- return isDisabled ? undefined : () => this.handleDateSelection(date);
687
- };
688
- /**
689
- * Handles shortcut selection
690
- * @param {Object} shortcut - Shortcut to handle
691
- * @param {string | Date} shortcut.singleValue - Selected date value
692
- * @param {Object} shortcut.rangeValue - Start and end date values
693
- * @param {string | Date} shortcut.rangeValue.start - Start date value
694
- * @param {string | Date} shortcut.rangeValue.end - End date value
695
- * @param {string} shortcut.label - Label
696
- * @returns {Function} Shortcut selection handler
697
- */
698
- this.getShortcutHandler = (shortcut) => {
699
- return () => this.applyShortcut(shortcut);
700
- };
701
- /**
702
- * Handles week selection
703
- * @param {Date[]} dates - Dates to handle
704
- * @param {number} index - Calendar index
705
- * @returns {Function} Week selection handler
706
- */
707
- this.getWeekSelectionHandler = (dates, index) => {
708
- return () => {
709
- if (this.selectionType === 'range') {
710
- this.handleWeekSelection(dates, index);
711
- }
712
- };
713
- };
714
972
  /**
715
973
  * Resets the current selection
716
974
  */
717
975
  this.resetSelection = () => {
718
976
  if (this.selectionType === 'single') {
719
977
  this.selectedDate = null;
978
+ // eslint-disable-next-line @stencil-community/strict-mutable
720
979
  this.singleValue = null;
980
+ // eslint-disable-next-line @stencil-community/strict-mutable
981
+ this.value = '';
721
982
  this.singleDateChange.emit('');
983
+ this.valueChanged.emit('');
722
984
  }
723
985
  else {
724
986
  this.startDate = null;
725
987
  this.endDate = null;
988
+ // eslint-disable-next-line @stencil-community/strict-mutable
726
989
  this.rangeValue = null;
990
+ // eslint-disable-next-line @stencil-community/strict-mutable
991
+ this.value = '';
727
992
  this.rangeDateChange.emit({ start: '', end: '' });
993
+ this.valueChanged.emit('');
728
994
  }
729
995
  };
730
996
  /**
@@ -736,6 +1002,7 @@ const NvCalendar = class {
736
1002
  dateFormat: this.dateFormat,
737
1003
  });
738
1004
  this.singleDateChange.emit(dateStr);
1005
+ // eslint-disable-next-line @stencil-community/strict-mutable
739
1006
  this.singleValue = dateStr;
740
1007
  const event = new CustomEvent('closePopover', {
741
1008
  bubbles: true,
@@ -750,6 +1017,7 @@ const NvCalendar = class {
750
1017
  start: formatDate(this.startDate, { dateFormat: this.dateFormat }),
751
1018
  end: formatDate(this.endDate, { dateFormat: this.dateFormat }),
752
1019
  });
1020
+ // eslint-disable-next-line @stencil-community/strict-mutable
753
1021
  this.rangeValue = {
754
1022
  start: formatDate(this.startDate, { dateFormat: this.dateFormat }),
755
1023
  end: formatDate(this.endDate, { dateFormat: this.dateFormat }),
@@ -772,8 +1040,7 @@ const NvCalendar = class {
772
1040
  * @description Renders the header of the calendar
773
1041
  */
774
1042
  this.renderHeader = (offset, index) => {
775
- return (h("div", { class: "header" }, this.numberOfCalendars > 1 && index === 0 && (h("nv-iconbutton", { class: "nav-left", emphasis: "lower", name: "chevron-left", onClick: this.getChangeMonthHandler(-1) })), h("div", { class: "date-controls" }, h("select", { class: "month-select mr-4", onChange: this.getHandleMonthChange(offset) }, this.months.map(month => (h("option", { key: month.value, value: month.value, selected: month.value === (this.currentDate.getUTCMonth() + offset) % 12 }, month.label)))), h("input", { type: "number", class: "year-input", min: "1950", max: "2100", value: this.currentDate.getUTCFullYear() +
776
- Math.floor((this.currentDate.getUTCMonth() + offset) / 12), onChange: this.getHandleYearChange(offset) })), this.numberOfCalendars === 1 && (h("div", { class: "nav-buttons" }, h("nv-iconbutton", { emphasis: "lower", name: "chevron-left", onClick: this.getChangeMonthHandler(-1) }), h("nv-iconbutton", { emphasis: "lower", name: "chevron-right", onClick: this.getChangeMonthHandler(1) }))), this.numberOfCalendars > 1 && index === this.numberOfCalendars - 1 && (h("nv-iconbutton", { emphasis: "lower", name: "chevron-right", onClick: this.getChangeMonthHandler(1), class: "nav-right" }))));
1043
+ return (h(CalendarHeader, { currentDate: this.currentDate, months: this.months, numberOfCalendars: this.numberOfCalendars, calendarIndex: index, monthOffset: offset, onMonthChange: this.changeMonth, onMonthSelect: this.handleMonthChange, onYearChange: this.handleYearChange }));
777
1044
  };
778
1045
  /**
779
1046
  * Renders the week numbers
@@ -787,42 +1054,7 @@ const NvCalendar = class {
787
1054
  weeks,
788
1055
  /** Calendar index */
789
1056
  index) => {
790
- return (h("div", { class: "week-numbers" }, h("div", { class: "week-header" }, this.getLocalizedWeekText()), weeks.map((week, weekIndex) => {
791
- var _a;
792
- const dates = week.map(d => d.date);
793
- return (h("div", { class: `week-number ${this.selectionType === 'range' ? 'clickable' : ''}`, onClick: this.getWeekSelectionHandler(dates, index), key: `week-${weekIndex}` }, getWeekNumber(((_a = week.find(d => d.date)) === null || _a === void 0 ? void 0 : _a.date) || new Date())));
794
- })));
795
- };
796
- this.renderDaysGrid = (
797
- /** Days to render */
798
- days) => {
799
- return (h("div", { class: "days-grid" }, days.map(day => {
800
- const date = day.date;
801
- if (!date)
802
- return null;
803
- const isSelected = this.selectionType === 'single' &&
804
- isSameDate(date, this.selectedDate, { isUTCMode: this.isUTCMode });
805
- const isInRange = this.isDateInRange(date);
806
- const isStart = isSameDate(date, this.startDate, {
807
- isUTCMode: this.isUTCMode,
808
- });
809
- const isEnd = isSameDate(date, this.endDate, {
810
- isUTCMode: this.isUTCMode,
811
- });
812
- const isToday = this.isToday(date);
813
- const isOutsideMonth = !day.isCurrentMonth;
814
- const dayClasses = [
815
- 'day',
816
- isSelected ? 'selected' : '',
817
- isStart ? 'range-start' : '',
818
- isEnd ? 'range-end' : '',
819
- isInRange ? 'in-range' : '',
820
- day.isDisabled ? 'disabled' : '',
821
- isOutsideMonth ? 'outside-month' : '',
822
- isToday ? 'is-today' : '',
823
- ];
824
- return (h("div", { class: dayClasses.filter(Boolean).join(' '), onClick: this.getDayClickHandler(date, day.isDisabled), "aria-disabled": day.isDisabled, key: `day-${date.toISOString()}` }, day.dayOfMonth));
825
- })));
1057
+ return (h(WeekNumbers, { weeks: weeks, localizedWeekText: this.getLocalizedWeekText(), selectionType: this.selectionType, onWeekSelect: this.handleWeekSelection, calendarIndex: index }));
826
1058
  };
827
1059
  /**
828
1060
  * Renders the calendar
@@ -841,7 +1073,7 @@ const NvCalendar = class {
841
1073
  for (let i = 0; i < days.length; i += 7) {
842
1074
  weeks.push(days.slice(i, i + 7));
843
1075
  }
844
- return (h("div", { class: "calendar-wrapper" }, h("div", { class: "calendar-container", key: `calendar-${index}` }, this.renderHeader(offset, index), h("div", { class: "calendar-grid" }, this.showWeekNumbers && this.renderWeekNumbers(weeks, index), h("div", { class: "days-container" }, h("div", { class: "days-header" }, this.getDayNames().map(day => (h("div", { class: "day-header" }, day)))), this.renderDaysGrid(days)))), index < this.numberOfCalendars - 1 && (h("div", { class: "calendar-separator" }))));
1076
+ return (h("div", { class: "calendar-wrapper" }, h("div", { class: "calendar-container", key: `calendar-${index}` }, 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" }))));
845
1077
  };
846
1078
  /**
847
1079
  * Renders the shortcuts
@@ -852,7 +1084,7 @@ const NvCalendar = class {
852
1084
  if (!this.hasShortcuts) {
853
1085
  return null;
854
1086
  }
855
- return (h("div", { class: `shortcuts-container shortcuts-placement-${this.shortcutsPlacement}` }, this.shortcuts.map(shortcut => (h("nv-button", { emphasis: "lower", size: "xs", "aria-label": shortcut.label, onClick: this.getShortcutHandler(shortcut) }, shortcut.label)))));
1087
+ return (h(CalendarShortcuts, { shortcuts: this.shortcuts, placement: this.shortcutsPlacement, onShortcutClick: this.applyShortcut }));
856
1088
  };
857
1089
  /**
858
1090
  * Renders the actions
@@ -861,7 +1093,7 @@ const NvCalendar = class {
861
1093
  * @slot actions - Child content of the component.
862
1094
  */
863
1095
  this.renderActions = () => {
864
- return (h("div", { class: "datepicker-actions" }, h("slot", { name: "actions" }, h("nv-button", { emphasis: "low", size: "xs", onClick: this.resetSelection }, "Cancel"), h("nv-button", { size: "xs", onClick: this.confirmSelection }, "OK"))));
1096
+ return (h("div", { class: "datepicker-actions" }, h("slot", { name: "actions" }, h(CalendarActions, { onReset: this.resetSelection, onConfirm: this.confirmSelection, useSlot: false }))));
865
1097
  };
866
1098
  }
867
1099
  //#endregion EVENTS
@@ -925,12 +1157,26 @@ const NvCalendar = class {
925
1157
  }
926
1158
  }
927
1159
  }
1160
+ /**
1161
+ * Watches the changes of the unified value prop
1162
+ * @param {string} newValue - New value
1163
+ * @param {string} oldValue - Old value
1164
+ */
1165
+ onValueChange(newValue, oldValue) {
1166
+ if (newValue !== oldValue) {
1167
+ this.parseUnifiedValue(newValue);
1168
+ }
1169
+ }
928
1170
  //#endregion WATCHERS
929
1171
  /****************************************************************************/
930
1172
  //#region LIFECYCLE
931
1173
  componentWillLoad() {
932
1174
  this.parseDisabledDates();
933
- if (this.selectionType === 'single' && this.singleValue) {
1175
+ // Initialize from unified value prop if provided
1176
+ if (this.value) {
1177
+ this.parseUnifiedValue(this.value);
1178
+ }
1179
+ else if (this.selectionType === 'single' && this.singleValue) {
934
1180
  this.selectedDate = parseDate(this.singleValue, this.dateFormat);
935
1181
  this.currentDate = this.selectedDate;
936
1182
  }
@@ -943,6 +1189,7 @@ const NvCalendar = class {
943
1189
  this.currentDate = startDate;
944
1190
  if (swapped) {
945
1191
  // If dates were swapped, update the rangeValue property
1192
+ // eslint-disable-next-line @stencil-community/strict-mutable
946
1193
  this.rangeValue = {
947
1194
  start: formatDate(startDate, { dateFormat: this.dateFormat }),
948
1195
  end: formatDate(endDate, { dateFormat: this.dateFormat }),
@@ -954,7 +1201,8 @@ const NvCalendar = class {
954
1201
  console.error('Invalid rangeValue:', error);
955
1202
  }
956
1203
  }
957
- else {
1204
+ // Ensure currentDate is always initialized
1205
+ if (!this.currentDate) {
958
1206
  this.currentDate = new Date();
959
1207
  }
960
1208
  this.initializeMonths();
@@ -1024,15 +1272,16 @@ const NvCalendar = class {
1024
1272
  * @slot default - Child content of the component.
1025
1273
  */
1026
1274
  render() {
1027
- return (h(Host, { key: '9804c486acf32e12f2d88f932a54ca6260365887' }, h("div", { key: '8503f585401191b904f2de248ed0c24b1fed1505', class: "datepicker-root" }, h("div", { key: '9da71618bd2031b44f5a3fd889d40b2580fcca58', class: `datepicker-container ${this.numberOfCalendars === 1 ? 'datepicker-container-single' : ''}` }, h("div", { key: 'fbf71a34b520ca48f1440d8caeec442773b1e57a', 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') ||
1028
- this.hasActions) && (h("div", { key: '4431e3f1221e9d47807d58af380dcaa91bf05c48', class: "datepicker-controls" }, this.shortcutsPlacement === 'bottom' && this.renderShortcuts(), this.hasActions && this.renderActions())))), h("slot", { key: '30386356bda72f4f12a28351084ab498ec95f5b9' })));
1275
+ return (h(Host, { key: '43d4f3ab9199e9c5f15e853f15283fa59e4a436d' }, h("div", { key: 'b9956225cb2c16d997aa44266af8f8c8222ea968', class: "datepicker-root" }, h("div", { key: '05b63935bc5ebf500bb52d10688385f994b47fb4', class: `datepicker-container ${this.numberOfCalendars === 1 ? 'datepicker-container-single' : ''}` }, h("div", { key: 'd7af15b9ce051026cf841b3be361b32d8db41fc1', 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') ||
1276
+ this.hasActions) && (h("div", { key: '1765334bf15564bc9886b210c54bddba64c7042e', class: "datepicker-controls" }, this.shortcutsPlacement === 'bottom' && this.renderShortcuts(), this.hasActions && this.renderActions())))), h("slot", { key: '0ac3446394b8c23b859e5f0065370b95b6fd05d2' })));
1029
1277
  }
1030
1278
  get el() { return getElement(this); }
1031
1279
  static get watchers() { return {
1032
1280
  "numberOfCalendars": ["validateNumberOfCalendars"],
1033
1281
  "rangeValue": ["onRangeValueChange"],
1034
1282
  "disabledDates": ["handleDisabledDatesChange"],
1035
- "singleValue": ["onSingleValueChange"]
1283
+ "singleValue": ["onSingleValueChange"],
1284
+ "value": ["onValueChange"]
1036
1285
  }; }
1037
1286
  };
1038
1287
  NvCalendar.style = NvCalendarStyle0;