@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
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- const index = require('./index-108ddff0.js');
5
+ const index = require('./index-c56424e5.js');
6
6
  const constants = require('./constants-8fb8ccc0.js');
7
7
  const _commonjsHelpers = require('./_commonjsHelpers-b3309d7b.js');
8
8
 
@@ -160,9 +160,18 @@ function isSameOrAfter(date, compareDate, options) {
160
160
  * @returns {number} Week number
161
161
  */
162
162
  function getWeekNumber(date) {
163
- const startOfYear = new Date(date.getFullYear(), 0, 1);
164
- const pastDaysOfYear = (date.getTime() - startOfYear.getTime()) / 86400000;
165
- return Math.ceil((pastDaysOfYear + startOfYear.getDay() + 1) / 7);
163
+ // Create a copy of the date to avoid modifying the original
164
+ const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
165
+ // Adjust to the same week Thursday (ISO 8601)
166
+ d.setUTCDate(d.getUTCDate() + 3 - ((d.getUTCDay() + 6) % 7));
167
+ // Calculate the first Thursday of the year
168
+ const week1 = new Date(Date.UTC(d.getUTCFullYear(), 0, 4));
169
+ // Calculate the week number
170
+ return (1 +
171
+ Math.round(((d.getTime() - week1.getTime()) / 86400000 -
172
+ 3 +
173
+ ((week1.getUTCDay() + 6) % 7)) /
174
+ 7));
166
175
  }
167
176
  /**
168
177
  * Convert a date string/Date to a Date without timezone offset
@@ -227,15 +236,200 @@ function parseDate(dateInput, dateFormat) {
227
236
  parsed = dayjs(dateInput, dateFormat, true);
228
237
  }
229
238
  if (!parsed.isValid()) {
230
- console.error(`Parsing error:`, {
231
- dateInput,
232
- dateFormat: dateFormat,
233
- });
239
+ // Check if the date input contains placeholder characters (incomplete input from Inputmask)
240
+ // This specifically targets partial dates being typed with placeholder characters
241
+ const hasPlaceholderChars = typeof dateInput === 'string' &&
242
+ (dateInput.includes('_') ||
243
+ dateInput.includes('-_') ||
244
+ dateInput.includes('/_') ||
245
+ dateInput.includes('._'));
246
+ // Check if it looks like a partial date being typed (starts with valid pattern)
247
+ const looksLikePartialDate = typeof dateInput === 'string' &&
248
+ dateInput.length < dateFormat.length &&
249
+ /^[\d\-/.]*$/.test(dateInput) && // Only contains digits and date separators
250
+ dateInput.length > 0;
251
+ const isIncompleteInput = hasPlaceholderChars || looksLikePartialDate;
252
+ // Only log error if it's not an incomplete input (to avoid spam during typing)
253
+ if (!isIncompleteInput) {
254
+ console.error(`Parsing error:`, {
255
+ dateInput,
256
+ dateFormat: dateFormat,
257
+ });
258
+ }
234
259
  return null;
235
260
  }
236
261
  return parsed.toDate();
237
262
  }
238
263
 
264
+ /**
265
+ * Renders a single day cell in the calendar grid
266
+ * @param {DayCellProps} props - Component properties
267
+ * @returns {JSX.Element} JSX element representing a day cell
268
+ */
269
+ const DayCell = props => {
270
+ const { date, dayOfMonth, isCurrentMonth, isSelected, isInRange, isStart, isEnd, isToday, isDisabled, onClick, } = props;
271
+ // Build CSS classes for the day cell
272
+ const dayClasses = [
273
+ 'day',
274
+ isSelected ? 'selected' : '',
275
+ isStart ? 'range-start' : '',
276
+ isEnd ? 'range-end' : '',
277
+ isInRange ? 'in-range' : '',
278
+ isDisabled ? 'disabled' : '',
279
+ !isCurrentMonth ? 'outside-month' : '',
280
+ isToday ? 'is-today' : '',
281
+ ]
282
+ .filter(Boolean)
283
+ .join(' ');
284
+ const handleClick = () => {
285
+ if (!isDisabled && onClick) {
286
+ onClick(date);
287
+ }
288
+ };
289
+ return (
290
+ // eslint-disable-next-line react/jsx-no-bind
291
+ index.h("div", { class: dayClasses, onClick: handleClick, "aria-disabled": isDisabled }, dayOfMonth));
292
+ };
293
+
294
+ /**
295
+ * Renders the action buttons for the calendar (Cancel/OK)
296
+ * @param {CalendarActionsProps} props - Component properties
297
+ * @returns {JSX.Element} JSX element representing the action buttons
298
+ */
299
+ const CalendarActions = props => {
300
+ const { onReset, onConfirm, useSlot = false } = props;
301
+ return (index.h("div", { class: "datepicker-actions" }, useSlot ? (index.h("slot", { name: "actions" },
302
+ index.h("nv-button", { emphasis: "low", size: "xs", onClick: onReset }, "Cancel"),
303
+ index.h("nv-button", { size: "xs", onClick: onConfirm }, "OK"))) : (index.h("div", null,
304
+ index.h("nv-button", { emphasis: "low", size: "xs", onClick: onReset }, "Cancel"),
305
+ index.h("nv-button", { size: "xs", onClick: onConfirm }, "OK")))));
306
+ };
307
+
308
+ /**
309
+ * Renders the week numbers column for the calendar
310
+ * @param {WeekNumbersProps} props - Component properties
311
+ * @returns {JSX.Element} JSX element representing the week numbers
312
+ */
313
+ const WeekNumbers = props => {
314
+ const { weeks, localizedWeekText, selectionType, onWeekSelect, calendarIndex, } = props;
315
+ /**
316
+ * Handles click on a week number for range selection
317
+ * @param {Array<WeekData>} week - Week data
318
+ */
319
+ const handleWeekClick = (week) => {
320
+ if (selectionType === 'range') {
321
+ const dates = week.map(d => d.date);
322
+ onWeekSelect(dates, calendarIndex);
323
+ }
324
+ };
325
+ /**
326
+ * Creates a click handler for a specific week
327
+ * @param {Array<WeekData>} week - Week data
328
+ * @returns {() => void} Click handler function
329
+ */
330
+ const createWeekHandler = (week) => {
331
+ return () => handleWeekClick(week);
332
+ };
333
+ return (index.h("div", { class: "week-numbers" },
334
+ index.h("div", { class: "week-header" }, localizedWeekText),
335
+ weeks.map((week, weekIndex) => {
336
+ var _a;
337
+ const firstDayWithDate = ((_a = week.find(d => d.date)) === null || _a === void 0 ? void 0 : _a.date) || new Date();
338
+ const weekNumber = getWeekNumber(firstDayWithDate);
339
+ const isClickable = selectionType === 'range';
340
+ return (index.h("div", { class: `week-number ${isClickable ? 'clickable' : ''}`, onClick: createWeekHandler(week), key: `week-${weekIndex}`, role: isClickable ? 'button' : undefined, tabindex: isClickable ? 0 : undefined }, weekNumber));
341
+ })));
342
+ };
343
+
344
+ /**
345
+ * Renders the shortcuts for quick date selection
346
+ * @param {CalendarShortcutsProps} props - Component properties
347
+ * @returns {JSX.Element | null} JSX element representing the shortcuts or null if no shortcuts
348
+ */
349
+ const CalendarShortcuts = props => {
350
+ const { shortcuts, placement, onShortcutClick } = props;
351
+ if (!shortcuts || shortcuts.length === 0) {
352
+ return null;
353
+ }
354
+ /**
355
+ * Creates a click handler for a specific shortcut
356
+ * @param {ShortcutData} shortcut - The shortcut data
357
+ * @returns {() => void} Click handler function
358
+ */
359
+ const createShortcutHandler = (shortcut) => {
360
+ return () => onShortcutClick(shortcut);
361
+ };
362
+ return (index.h("div", { class: `shortcuts-container shortcuts-placement-${placement}` }, shortcuts.map((shortcut, index$1) => (index.h("nv-button", { key: `shortcut-${index$1}`, emphasis: "lower", size: "xs", "aria-label": shortcut.label, onClick: createShortcutHandler(shortcut) }, shortcut.label)))));
363
+ };
364
+
365
+ /**
366
+ * Renders the calendar header with navigation and date controls
367
+ * @param {CalendarHeaderProps} props - Component properties
368
+ * @returns {JSX.Element} JSX element representing the calendar header
369
+ */
370
+ const CalendarHeader = props => {
371
+ const { currentDate, months, numberOfCalendars, calendarIndex, monthOffset, onMonthChange, onMonthSelect, onYearChange, } = props;
372
+ /**
373
+ * Creates navigation handler for month change
374
+ * @param {number} direction - Direction of navigation (-1 or 1)
375
+ * @returns {() => void} Navigation handler function
376
+ */
377
+ const createNavigationHandler = (direction) => {
378
+ return () => onMonthChange(direction);
379
+ };
380
+ /**
381
+ * Creates month selection handler
382
+ * @param {number} offset - Month offset
383
+ * @returns {(event: Event) => void} Month selection handler function
384
+ */
385
+ const createMonthSelectHandler = (offset) => {
386
+ return (event) => onMonthSelect(event, offset);
387
+ };
388
+ /**
389
+ * Creates year change handler
390
+ * @param {number} offset - Month offset
391
+ * @returns {(event: Event) => void} Year change handler function
392
+ */
393
+ const createYearChangeHandler = (offset) => {
394
+ return (event) => onYearChange(event, offset);
395
+ };
396
+ const currentMonth = (currentDate.getUTCMonth() + monthOffset) % 12;
397
+ const currentYear = currentDate.getUTCFullYear() +
398
+ Math.floor((currentDate.getUTCMonth() + monthOffset) / 12);
399
+ return (index.h("div", { class: "header" },
400
+ numberOfCalendars > 1 && calendarIndex === 0 && (index.h("nv-iconbutton", { class: "nav-left", emphasis: "lower", name: "chevron-left", onClick: createNavigationHandler(-1) })),
401
+ index.h("div", { class: "date-controls" },
402
+ index.h("select", { class: "month-select mr-4", onChange: createMonthSelectHandler(monthOffset) }, months.map(month => (index.h("option", { key: month.value, value: month.value, selected: month.value === currentMonth }, month.label)))),
403
+ index.h("input", { type: "number", class: "year-input", min: "1950", max: "2100", value: currentYear, onChange: createYearChangeHandler(monthOffset) })),
404
+ numberOfCalendars === 1 && (index.h("div", { class: "nav-buttons" },
405
+ index.h("nv-iconbutton", { emphasis: "lower", name: "chevron-left", onClick: createNavigationHandler(-1) }),
406
+ index.h("nv-iconbutton", { emphasis: "lower", name: "chevron-right", onClick: createNavigationHandler(1) }))),
407
+ numberOfCalendars > 1 && calendarIndex === numberOfCalendars - 1 && (index.h("nv-iconbutton", { emphasis: "lower", name: "chevron-right", onClick: createNavigationHandler(1), class: "nav-right" }))));
408
+ };
409
+
410
+ /**
411
+ * Renders the calendar grid with day headers and day cells
412
+ * @param {CalendarGridProps} props - Component properties
413
+ * @returns {JSX.Element} JSX element representing the calendar grid
414
+ */
415
+ const CalendarGrid = props => {
416
+ const { days, dayNames, selectionType, selectedDate, startDate, endDate, isUTCMode, onDayClick, isDateInRange, isToday, } = props;
417
+ return (index.h("div", { class: "days-container" },
418
+ index.h("div", { class: "days-header" }, dayNames.map((day, index$1) => (index.h("div", { class: "day-header", key: `day-header-${index$1}` }, day)))),
419
+ index.h("div", { class: "days-grid" }, days.map(day => {
420
+ const date = day.date;
421
+ if (!date)
422
+ return null;
423
+ const isSelected = selectionType === 'single' &&
424
+ isSameDate(date, selectedDate, { isUTCMode });
425
+ const isInRange = isDateInRange(date);
426
+ const isStart = isSameDate(date, startDate, { isUTCMode });
427
+ const isEnd = isSameDate(date, endDate, { isUTCMode });
428
+ const isTodayDate = isToday(date);
429
+ return (index.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 }));
430
+ }))));
431
+ };
432
+
239
433
  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)}}";
240
434
  const NvCalendarStyle0 = nvCalendarCss;
241
435
 
@@ -244,18 +438,28 @@ const NvCalendar = class {
244
438
  index.registerInstance(this, hostRef);
245
439
  this.singleDateChange = index.createEvent(this, "singleDateChange", 7);
246
440
  this.rangeDateChange = index.createEvent(this, "rangeDateChange", 7);
441
+ this.valueChanged = index.createEvent(this, "valueChanged", 7);
247
442
  /****************************************************************************/
248
443
  //#region PROPERTIES
249
444
  /**
250
445
  * First day of the week (0 = Sunday, 1 = Monday, etc.)
251
- * @default 0
446
+ * @default 1
252
447
  */
253
- this.firstDayOfWeek = 0;
448
+ this.firstDayOfWeek = 1;
254
449
  /**
255
450
  * Number of calendars to display
256
451
  * @default 1
257
452
  */
258
453
  this.numberOfCalendars = 1;
454
+ /**
455
+ * Selected date value. For single mode: ISO date string. For range mode: comma-separated ISO date strings.
456
+ * Examples:
457
+ * - Single: "2025-03-15"
458
+ * - Range: "2025-03-15,2025-03-20"
459
+ * @default ""
460
+ */
461
+ // eslint-disable-next-line @stencil-community/strict-mutable
462
+ this.value = '';
259
463
  /**
260
464
  * Locale for date formatting
261
465
  * @default 'en-BE'
@@ -293,6 +497,75 @@ const NvCalendar = class {
293
497
  this.endDate = null;
294
498
  /** List of formatted months for the selector */
295
499
  this.months = [];
500
+ /**
501
+ * Parses the unified value prop and synchronizes with internal state
502
+ * @param {string} value - Value to parse
503
+ */
504
+ this.parseUnifiedValue = (value) => {
505
+ if (!value) {
506
+ // Reset all selections
507
+ this.selectedDate = null;
508
+ this.startDate = null;
509
+ this.endDate = null;
510
+ return;
511
+ }
512
+ const values = value
513
+ .split(',')
514
+ .map(v => v.trim())
515
+ .filter(Boolean);
516
+ if (this.selectionType === 'single' && values.length >= 1) {
517
+ const parsedDate = parseDate(values[0], this.dateFormat);
518
+ if (parsedDate) {
519
+ this.selectedDate = parsedDate;
520
+ // Only sync with legacy prop if not using actions (immediate mode)
521
+ if (!this.showActions) {
522
+ this.singleValue = values[0];
523
+ }
524
+ // Navigate to the date if not prevented
525
+ const preventNavigation = this.el.getAttribute('data-prevent-navigation') === 'true';
526
+ if (!preventNavigation) {
527
+ this.currentDate = parsedDate;
528
+ }
529
+ }
530
+ else {
531
+ // Handle malformed date gracefully - reset state
532
+ console.warn(`Invalid date format: ${values[0]}`);
533
+ this.selectedDate = null;
534
+ if (!this.showActions) {
535
+ this.singleValue = '';
536
+ }
537
+ }
538
+ }
539
+ else if (this.selectionType === 'range' && values.length >= 2) {
540
+ const startDate = parseDate(values[0], this.dateFormat);
541
+ const endDate = parseDate(values[1], this.dateFormat);
542
+ if (startDate && endDate) {
543
+ this.startDate = startDate;
544
+ this.endDate = endDate;
545
+ // Only sync with legacy prop if not using actions (immediate mode)
546
+ if (!this.showActions) {
547
+ this.rangeValue = {
548
+ start: values[0],
549
+ end: values[1],
550
+ };
551
+ }
552
+ // Navigate to start date if not prevented
553
+ const preventNavigation = this.el.getAttribute('data-prevent-navigation') === 'true';
554
+ if (!preventNavigation) {
555
+ this.currentDate = startDate;
556
+ }
557
+ }
558
+ else {
559
+ // Handle malformed dates gracefully - reset state
560
+ console.warn(`Invalid date range format: ${values[0]}, ${values[1]}`);
561
+ this.startDate = null;
562
+ this.endDate = null;
563
+ if (!this.showActions) {
564
+ this.rangeValue = { start: '', end: '' };
565
+ }
566
+ }
567
+ }
568
+ };
296
569
  /**
297
570
  * Change the displayed month
298
571
  * @param {number} offset - Month offset (-1 for previous, 1 for next)
@@ -340,7 +613,14 @@ const NvCalendar = class {
340
613
  return;
341
614
  const formattedDate = formatDate(date, { dateFormat: this.dateFormat });
342
615
  this.selectedDate = date;
343
- this.singleDateChange.emit(formattedDate);
616
+ // Update the unified value prop (like nv-fieldslider)
617
+ this.value = formattedDate;
618
+ this.valueChanged.emit(formattedDate);
619
+ // Legacy support (deprecated) - only sync props if not using actions
620
+ if (!this.showActions) {
621
+ this.singleValue = formattedDate;
622
+ this.singleDateChange.emit(formattedDate);
623
+ }
344
624
  };
345
625
  /**
346
626
  * Handles range date selection
@@ -348,18 +628,32 @@ const NvCalendar = class {
348
628
  */
349
629
  this.handleRangeSelection = (date) => {
350
630
  if (!this.startDate || (this.startDate && this.endDate)) {
631
+ // Start new range selection
351
632
  this.startDate = date;
352
633
  this.endDate = null;
353
634
  }
354
635
  else {
636
+ // Complete range selection
355
637
  this.endDate = date;
638
+ // Ensure correct order
356
639
  if (this.startDate > this.endDate) {
357
640
  [this.startDate, this.endDate] = [this.endDate, this.startDate];
358
641
  }
359
- this.rangeDateChange.emit({
360
- start: formatDate(this.startDate, { dateFormat: this.dateFormat }),
361
- end: formatDate(this.endDate, { dateFormat: this.dateFormat }),
642
+ const startFormatted = formatDate(this.startDate, {
643
+ dateFormat: this.dateFormat,
644
+ });
645
+ const endFormatted = formatDate(this.endDate, {
646
+ dateFormat: this.dateFormat,
362
647
  });
648
+ // Update the unified value prop (like nv-fieldslider)
649
+ this.value = `${startFormatted},${endFormatted}`;
650
+ this.valueChanged.emit(this.value);
651
+ // Legacy support (deprecated) - only sync props if not using actions
652
+ if (!this.showActions) {
653
+ const legacyRange = { start: startFormatted, end: endFormatted };
654
+ this.rangeDateChange.emit(legacyRange);
655
+ this.rangeValue = legacyRange;
656
+ }
363
657
  }
364
658
  };
365
659
  /**
@@ -418,23 +712,35 @@ const NvCalendar = class {
418
712
  * @returns {string[]} Array of short day names
419
713
  */
420
714
  this.getDayNames = () => {
715
+ let days;
421
716
  // If we have custom day names for this locale
422
717
  if (constants.CUSTOM_DAY_NAMES[this.locale]) {
423
- const days = [...constants.CUSTOM_DAY_NAMES[this.locale]];
424
- // Reorganize the days based on the first day of the week
425
- const firstDays = days.slice(0, this.firstDayOfWeek);
426
- const remainingDays = days.slice(this.firstDayOfWeek);
427
- return [...remainingDays, ...firstDays];
718
+ // Custom day names are expected to start with Monday (index 0 = Monday)
719
+ days = [...constants.CUSTOM_DAY_NAMES[this.locale]];
720
+ }
721
+ else {
722
+ // Generate days using Intl.DateTimeFormat, starting from Monday
723
+ const formatter = new Intl.DateTimeFormat(this.locale, {
724
+ weekday: 'short',
725
+ });
726
+ // Generate days starting from Monday (2023-01-02 was a Monday)
727
+ days = [...Array(7)].map((_, i) => formatter.format(new Date(2023, 0, i + 2)).toUpperCase());
728
+ }
729
+ // Now reorganize based on firstDayOfWeek
730
+ // 0 = Sunday, 1 = Monday (default), 2 = Tuesday, etc.
731
+ if (this.firstDayOfWeek === 0) {
732
+ // If Sunday is first day, move Sunday (last element) to the beginning
733
+ return [days[6], ...days.slice(0, 6)];
734
+ }
735
+ else if (this.firstDayOfWeek === 1) {
736
+ // If Monday is first day, return as-is (since our array starts with Monday)
737
+ return days;
738
+ }
739
+ else {
740
+ // For other first days (Tuesday=2, Wednesday=3, etc.)
741
+ const offset = this.firstDayOfWeek - 1; // Convert to 0-based offset from Monday
742
+ return [...days.slice(offset), ...days.slice(0, offset)];
428
743
  }
429
- // Otherwise, use the default behavior
430
- const formatter = new Intl.DateTimeFormat(this.locale, {
431
- weekday: 'short',
432
- });
433
- const days = [...Array(7)].map((_, i) => formatter.format(new Date(2023, 0, i + 1)).toUpperCase());
434
- // Reorganize the days based on the first day of the week
435
- const firstDays = days.slice(0, this.firstDayOfWeek);
436
- const remainingDays = days.slice(this.firstDayOfWeek);
437
- return [...remainingDays, ...firstDays];
438
744
  };
439
745
  /**
440
746
  * Generates the days of the current month
@@ -615,8 +921,15 @@ const NvCalendar = class {
615
921
  if (shortcut.singleValue) {
616
922
  const newDate = parseDate(shortcut.singleValue, this.dateFormat);
617
923
  this.selectedDate = newDate;
618
- this.singleDateChange.emit(formatDate(newDate, { dateFormat: this.dateFormat }));
619
- this.singleValue = formatDate(newDate, { dateFormat: this.dateFormat });
924
+ const formattedDate = formatDate(newDate, {
925
+ dateFormat: this.dateFormat,
926
+ });
927
+ // Update the unified value prop (like nv-fieldslider)
928
+ this.value = formattedDate;
929
+ this.valueChanged.emit(formattedDate);
930
+ // Legacy support (deprecated) - sync props
931
+ this.singleValue = formattedDate;
932
+ this.singleDateChange.emit(formattedDate);
620
933
  if (!this.showActions) {
621
934
  const event = new CustomEvent('closePopover', {
622
935
  bubbles: true,
@@ -631,14 +944,18 @@ const NvCalendar = class {
631
944
  const end = parseDate(shortcut.rangeValue.end, this.dateFormat);
632
945
  this.startDate = start;
633
946
  this.endDate = end;
634
- this.rangeDateChange.emit({
635
- start: formatDate(start, { dateFormat: this.dateFormat }),
636
- end: formatDate(end, { dateFormat: this.dateFormat }),
947
+ const startFormatted = formatDate(start, {
948
+ dateFormat: this.dateFormat,
637
949
  });
638
- this.rangeValue = {
639
- start: formatDate(start, { dateFormat: this.dateFormat }),
640
- end: formatDate(end, { dateFormat: this.dateFormat }),
641
- };
950
+ const endFormatted = formatDate(end, { dateFormat: this.dateFormat });
951
+ // Update the unified value prop (like nv-fieldslider)
952
+ this.value = `${startFormatted},${endFormatted}`;
953
+ this.valueChanged.emit(this.value);
954
+ // Legacy support (deprecated) - sync props
955
+ const legacyRange = { start: startFormatted, end: endFormatted };
956
+ this.rangeDateChange.emit(legacyRange);
957
+ // eslint-disable-next-line @stencil-community/strict-mutable
958
+ this.rangeValue = legacyRange;
642
959
  if (!this.showActions) {
643
960
  const event = new CustomEvent('closePopover', {
644
961
  bubbles: true,
@@ -656,79 +973,28 @@ const NvCalendar = class {
656
973
  this.forceCalendarUpdate = newDate => {
657
974
  this.currentDate = new Date(newDate);
658
975
  };
659
- /**
660
- * Handles month change with an offset
661
- * @param {number} direction - Direction (-1 for previous, 1 for next)
662
- * @returns {Function} Change month handler
663
- */
664
- this.getChangeMonthHandler = (direction) => {
665
- return () => this.changeMonth(direction);
666
- };
667
- /**
668
- * Handles month change from an event (ex: dropdown)
669
- * @param {number} offset - Month offset (0 by default)
670
- * @returns {Function} Change month handler
671
- */
672
- this.getHandleMonthChange = (offset) => {
673
- return (event) => this.handleMonthChange(event, offset);
674
- };
675
- /**
676
- * Handles year change from an event (ex: dropdown)
677
- * @param {number} offset - Year offset (0 by default)
678
- * @returns {Function} Change year handler
679
- */
680
- this.getHandleYearChange = (offset) => {
681
- return (event) => this.handleYearChange(event, offset);
682
- };
683
- /**
684
- * Handles day click
685
- * @param {Date} date - Date to handle
686
- * @param {boolean} isDisabled - Whether the date is disabled
687
- * @returns {Function} Day click handler
688
- */
689
- this.getDayClickHandler = (date, isDisabled) => {
690
- return isDisabled ? undefined : () => this.handleDateSelection(date);
691
- };
692
- /**
693
- * Handles shortcut selection
694
- * @param {Object} shortcut - Shortcut to handle
695
- * @param {string | Date} shortcut.singleValue - Selected date value
696
- * @param {Object} shortcut.rangeValue - Start and end date values
697
- * @param {string | Date} shortcut.rangeValue.start - Start date value
698
- * @param {string | Date} shortcut.rangeValue.end - End date value
699
- * @param {string} shortcut.label - Label
700
- * @returns {Function} Shortcut selection handler
701
- */
702
- this.getShortcutHandler = (shortcut) => {
703
- return () => this.applyShortcut(shortcut);
704
- };
705
- /**
706
- * Handles week selection
707
- * @param {Date[]} dates - Dates to handle
708
- * @param {number} index - Calendar index
709
- * @returns {Function} Week selection handler
710
- */
711
- this.getWeekSelectionHandler = (dates, index) => {
712
- return () => {
713
- if (this.selectionType === 'range') {
714
- this.handleWeekSelection(dates, index);
715
- }
716
- };
717
- };
718
976
  /**
719
977
  * Resets the current selection
720
978
  */
721
979
  this.resetSelection = () => {
722
980
  if (this.selectionType === 'single') {
723
981
  this.selectedDate = null;
982
+ // eslint-disable-next-line @stencil-community/strict-mutable
724
983
  this.singleValue = null;
984
+ // eslint-disable-next-line @stencil-community/strict-mutable
985
+ this.value = '';
725
986
  this.singleDateChange.emit('');
987
+ this.valueChanged.emit('');
726
988
  }
727
989
  else {
728
990
  this.startDate = null;
729
991
  this.endDate = null;
992
+ // eslint-disable-next-line @stencil-community/strict-mutable
730
993
  this.rangeValue = null;
994
+ // eslint-disable-next-line @stencil-community/strict-mutable
995
+ this.value = '';
731
996
  this.rangeDateChange.emit({ start: '', end: '' });
997
+ this.valueChanged.emit('');
732
998
  }
733
999
  };
734
1000
  /**
@@ -740,6 +1006,7 @@ const NvCalendar = class {
740
1006
  dateFormat: this.dateFormat,
741
1007
  });
742
1008
  this.singleDateChange.emit(dateStr);
1009
+ // eslint-disable-next-line @stencil-community/strict-mutable
743
1010
  this.singleValue = dateStr;
744
1011
  const event = new CustomEvent('closePopover', {
745
1012
  bubbles: true,
@@ -754,6 +1021,7 @@ const NvCalendar = class {
754
1021
  start: formatDate(this.startDate, { dateFormat: this.dateFormat }),
755
1022
  end: formatDate(this.endDate, { dateFormat: this.dateFormat }),
756
1023
  });
1024
+ // eslint-disable-next-line @stencil-community/strict-mutable
757
1025
  this.rangeValue = {
758
1026
  start: formatDate(this.startDate, { dateFormat: this.dateFormat }),
759
1027
  end: formatDate(this.endDate, { dateFormat: this.dateFormat }),
@@ -776,8 +1044,7 @@ const NvCalendar = class {
776
1044
  * @description Renders the header of the calendar
777
1045
  */
778
1046
  this.renderHeader = (offset, index$1) => {
779
- return (index.h("div", { class: "header" }, this.numberOfCalendars > 1 && index$1 === 0 && (index.h("nv-iconbutton", { class: "nav-left", emphasis: "lower", name: "chevron-left", onClick: this.getChangeMonthHandler(-1) })), index.h("div", { class: "date-controls" }, index.h("select", { class: "month-select mr-4", onChange: this.getHandleMonthChange(offset) }, this.months.map(month => (index.h("option", { key: month.value, value: month.value, selected: month.value === (this.currentDate.getUTCMonth() + offset) % 12 }, month.label)))), index.h("input", { type: "number", class: "year-input", min: "1950", max: "2100", value: this.currentDate.getUTCFullYear() +
780
- Math.floor((this.currentDate.getUTCMonth() + offset) / 12), onChange: this.getHandleYearChange(offset) })), this.numberOfCalendars === 1 && (index.h("div", { class: "nav-buttons" }, index.h("nv-iconbutton", { emphasis: "lower", name: "chevron-left", onClick: this.getChangeMonthHandler(-1) }), index.h("nv-iconbutton", { emphasis: "lower", name: "chevron-right", onClick: this.getChangeMonthHandler(1) }))), this.numberOfCalendars > 1 && index$1 === this.numberOfCalendars - 1 && (index.h("nv-iconbutton", { emphasis: "lower", name: "chevron-right", onClick: this.getChangeMonthHandler(1), class: "nav-right" }))));
1047
+ return (index.h(CalendarHeader, { currentDate: this.currentDate, months: this.months, numberOfCalendars: this.numberOfCalendars, calendarIndex: index$1, monthOffset: offset, onMonthChange: this.changeMonth, onMonthSelect: this.handleMonthChange, onYearChange: this.handleYearChange }));
781
1048
  };
782
1049
  /**
783
1050
  * Renders the week numbers
@@ -791,42 +1058,7 @@ const NvCalendar = class {
791
1058
  weeks,
792
1059
  /** Calendar index */
793
1060
  index$1) => {
794
- return (index.h("div", { class: "week-numbers" }, index.h("div", { class: "week-header" }, this.getLocalizedWeekText()), weeks.map((week, weekIndex) => {
795
- var _a;
796
- const dates = week.map(d => d.date);
797
- return (index.h("div", { class: `week-number ${this.selectionType === 'range' ? 'clickable' : ''}`, onClick: this.getWeekSelectionHandler(dates, index$1), key: `week-${weekIndex}` }, getWeekNumber(((_a = week.find(d => d.date)) === null || _a === void 0 ? void 0 : _a.date) || new Date())));
798
- })));
799
- };
800
- this.renderDaysGrid = (
801
- /** Days to render */
802
- days) => {
803
- return (index.h("div", { class: "days-grid" }, days.map(day => {
804
- const date = day.date;
805
- if (!date)
806
- return null;
807
- const isSelected = this.selectionType === 'single' &&
808
- isSameDate(date, this.selectedDate, { isUTCMode: this.isUTCMode });
809
- const isInRange = this.isDateInRange(date);
810
- const isStart = isSameDate(date, this.startDate, {
811
- isUTCMode: this.isUTCMode,
812
- });
813
- const isEnd = isSameDate(date, this.endDate, {
814
- isUTCMode: this.isUTCMode,
815
- });
816
- const isToday = this.isToday(date);
817
- const isOutsideMonth = !day.isCurrentMonth;
818
- const dayClasses = [
819
- 'day',
820
- isSelected ? 'selected' : '',
821
- isStart ? 'range-start' : '',
822
- isEnd ? 'range-end' : '',
823
- isInRange ? 'in-range' : '',
824
- day.isDisabled ? 'disabled' : '',
825
- isOutsideMonth ? 'outside-month' : '',
826
- isToday ? 'is-today' : '',
827
- ];
828
- return (index.h("div", { class: dayClasses.filter(Boolean).join(' '), onClick: this.getDayClickHandler(date, day.isDisabled), "aria-disabled": day.isDisabled, key: `day-${date.toISOString()}` }, day.dayOfMonth));
829
- })));
1061
+ return (index.h(WeekNumbers, { weeks: weeks, localizedWeekText: this.getLocalizedWeekText(), selectionType: this.selectionType, onWeekSelect: this.handleWeekSelection, calendarIndex: index$1 }));
830
1062
  };
831
1063
  /**
832
1064
  * Renders the calendar
@@ -845,7 +1077,7 @@ const NvCalendar = class {
845
1077
  for (let i = 0; i < days.length; i += 7) {
846
1078
  weeks.push(days.slice(i, i + 7));
847
1079
  }
848
- return (index.h("div", { class: "calendar-wrapper" }, index.h("div", { class: "calendar-container", key: `calendar-${index$1}` }, this.renderHeader(offset, index$1), index.h("div", { class: "calendar-grid" }, this.showWeekNumbers && this.renderWeekNumbers(weeks, index$1), index.h("div", { class: "days-container" }, index.h("div", { class: "days-header" }, this.getDayNames().map(day => (index.h("div", { class: "day-header" }, day)))), this.renderDaysGrid(days)))), index$1 < this.numberOfCalendars - 1 && (index.h("div", { class: "calendar-separator" }))));
1080
+ return (index.h("div", { class: "calendar-wrapper" }, index.h("div", { class: "calendar-container", key: `calendar-${index$1}` }, this.renderHeader(offset, index$1), index.h("div", { class: "calendar-grid" }, this.showWeekNumbers && this.renderWeekNumbers(weeks, index$1), 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$1 < this.numberOfCalendars - 1 && (index.h("div", { class: "calendar-separator" }))));
849
1081
  };
850
1082
  /**
851
1083
  * Renders the shortcuts
@@ -856,7 +1088,7 @@ const NvCalendar = class {
856
1088
  if (!this.hasShortcuts) {
857
1089
  return null;
858
1090
  }
859
- return (index.h("div", { class: `shortcuts-container shortcuts-placement-${this.shortcutsPlacement}` }, this.shortcuts.map(shortcut => (index.h("nv-button", { emphasis: "lower", size: "xs", "aria-label": shortcut.label, onClick: this.getShortcutHandler(shortcut) }, shortcut.label)))));
1091
+ return (index.h(CalendarShortcuts, { shortcuts: this.shortcuts, placement: this.shortcutsPlacement, onShortcutClick: this.applyShortcut }));
860
1092
  };
861
1093
  /**
862
1094
  * Renders the actions
@@ -865,7 +1097,7 @@ const NvCalendar = class {
865
1097
  * @slot actions - Child content of the component.
866
1098
  */
867
1099
  this.renderActions = () => {
868
- return (index.h("div", { class: "datepicker-actions" }, index.h("slot", { name: "actions" }, index.h("nv-button", { emphasis: "low", size: "xs", onClick: this.resetSelection }, "Cancel"), index.h("nv-button", { size: "xs", onClick: this.confirmSelection }, "OK"))));
1100
+ return (index.h("div", { class: "datepicker-actions" }, index.h("slot", { name: "actions" }, index.h(CalendarActions, { onReset: this.resetSelection, onConfirm: this.confirmSelection, useSlot: false }))));
869
1101
  };
870
1102
  }
871
1103
  //#endregion EVENTS
@@ -929,12 +1161,26 @@ const NvCalendar = class {
929
1161
  }
930
1162
  }
931
1163
  }
1164
+ /**
1165
+ * Watches the changes of the unified value prop
1166
+ * @param {string} newValue - New value
1167
+ * @param {string} oldValue - Old value
1168
+ */
1169
+ onValueChange(newValue, oldValue) {
1170
+ if (newValue !== oldValue) {
1171
+ this.parseUnifiedValue(newValue);
1172
+ }
1173
+ }
932
1174
  //#endregion WATCHERS
933
1175
  /****************************************************************************/
934
1176
  //#region LIFECYCLE
935
1177
  componentWillLoad() {
936
1178
  this.parseDisabledDates();
937
- if (this.selectionType === 'single' && this.singleValue) {
1179
+ // Initialize from unified value prop if provided
1180
+ if (this.value) {
1181
+ this.parseUnifiedValue(this.value);
1182
+ }
1183
+ else if (this.selectionType === 'single' && this.singleValue) {
938
1184
  this.selectedDate = parseDate(this.singleValue, this.dateFormat);
939
1185
  this.currentDate = this.selectedDate;
940
1186
  }
@@ -947,6 +1193,7 @@ const NvCalendar = class {
947
1193
  this.currentDate = startDate;
948
1194
  if (swapped) {
949
1195
  // If dates were swapped, update the rangeValue property
1196
+ // eslint-disable-next-line @stencil-community/strict-mutable
950
1197
  this.rangeValue = {
951
1198
  start: formatDate(startDate, { dateFormat: this.dateFormat }),
952
1199
  end: formatDate(endDate, { dateFormat: this.dateFormat }),
@@ -958,7 +1205,8 @@ const NvCalendar = class {
958
1205
  console.error('Invalid rangeValue:', error);
959
1206
  }
960
1207
  }
961
- else {
1208
+ // Ensure currentDate is always initialized
1209
+ if (!this.currentDate) {
962
1210
  this.currentDate = new Date();
963
1211
  }
964
1212
  this.initializeMonths();
@@ -1028,15 +1276,16 @@ const NvCalendar = class {
1028
1276
  * @slot default - Child content of the component.
1029
1277
  */
1030
1278
  render() {
1031
- return (index.h(index.Host, { key: '9804c486acf32e12f2d88f932a54ca6260365887' }, index.h("div", { key: '8503f585401191b904f2de248ed0c24b1fed1505', class: "datepicker-root" }, index.h("div", { key: '9da71618bd2031b44f5a3fd889d40b2580fcca58', class: `datepicker-container ${this.numberOfCalendars === 1 ? 'datepicker-container-single' : ''}` }, index.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') ||
1032
- this.hasActions) && (index.h("div", { key: '4431e3f1221e9d47807d58af380dcaa91bf05c48', class: "datepicker-controls" }, this.shortcutsPlacement === 'bottom' && this.renderShortcuts(), this.hasActions && this.renderActions())))), index.h("slot", { key: '30386356bda72f4f12a28351084ab498ec95f5b9' })));
1279
+ return (index.h(index.Host, { key: '43d4f3ab9199e9c5f15e853f15283fa59e4a436d' }, index.h("div", { key: 'b9956225cb2c16d997aa44266af8f8c8222ea968', class: "datepicker-root" }, index.h("div", { key: '05b63935bc5ebf500bb52d10688385f994b47fb4', class: `datepicker-container ${this.numberOfCalendars === 1 ? 'datepicker-container-single' : ''}` }, index.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') ||
1280
+ this.hasActions) && (index.h("div", { key: '1765334bf15564bc9886b210c54bddba64c7042e', class: "datepicker-controls" }, this.shortcutsPlacement === 'bottom' && this.renderShortcuts(), this.hasActions && this.renderActions())))), index.h("slot", { key: '0ac3446394b8c23b859e5f0065370b95b6fd05d2' })));
1033
1281
  }
1034
1282
  get el() { return index.getElement(this); }
1035
1283
  static get watchers() { return {
1036
1284
  "numberOfCalendars": ["validateNumberOfCalendars"],
1037
1285
  "rangeValue": ["onRangeValueChange"],
1038
1286
  "disabledDates": ["handleDisabledDatesChange"],
1039
- "singleValue": ["onSingleValueChange"]
1287
+ "singleValue": ["onSingleValueChange"],
1288
+ "value": ["onValueChange"]
1040
1289
  }; }
1041
1290
  };
1042
1291
  NvCalendar.style = NvCalendarStyle0;