@nova-design-system/nova-webcomponents 3.2.0 → 3.3.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 (386) hide show
  1. package/dist/cjs/{index-108ddff0.js → index-c56424e5.js} +16 -184
  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 +371 -138
  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 +1 -1
  16. package/dist/cjs/nv-datagridcolumn.cjs.entry.js +1 -1
  17. package/dist/cjs/nv-dialog.cjs.entry.js +1 -1
  18. package/dist/cjs/nv-dialogfooter_2.cjs.entry.js +1 -1
  19. package/dist/cjs/nv-fieldcheckbox.cjs.entry.js +1 -1
  20. package/dist/cjs/nv-fielddate.cjs.entry.js +45 -11
  21. package/dist/cjs/nv-fielddate.cjs.entry.js.map +1 -1
  22. package/dist/cjs/nv-fielddaterange.cjs.entry.js +75 -44
  23. package/dist/cjs/nv-fielddaterange.cjs.entry.js.map +1 -1
  24. package/dist/cjs/nv-fielddropdown.cjs.entry.js +2 -2
  25. package/dist/cjs/nv-fielddropdown.cjs.entry.js.map +1 -1
  26. package/dist/cjs/nv-fielddropdownitem.cjs.entry.js +1 -1
  27. package/dist/cjs/nv-fieldmultiselect.cjs.entry.js +2 -2
  28. package/dist/cjs/nv-fieldmultiselect.cjs.entry.js.map +1 -1
  29. package/dist/cjs/nv-fieldnumber.cjs.entry.js +2 -2
  30. package/dist/cjs/nv-fieldnumber.cjs.entry.js.map +1 -1
  31. package/dist/cjs/nv-fieldpassword.cjs.entry.js +2 -2
  32. package/dist/cjs/nv-fieldpassword.cjs.entry.js.map +1 -1
  33. package/dist/cjs/nv-fieldradio.cjs.entry.js +1 -1
  34. package/dist/cjs/nv-fieldselect.cjs.entry.js +2 -2
  35. package/dist/cjs/nv-fieldselect.cjs.entry.js.map +1 -1
  36. package/dist/cjs/nv-fieldslider.cjs.entry.js +25 -20
  37. package/dist/cjs/nv-fieldslider.cjs.entry.js.map +1 -1
  38. package/dist/cjs/nv-fieldtext.cjs.entry.js +2 -2
  39. package/dist/cjs/nv-fieldtext.cjs.entry.js.map +1 -1
  40. package/dist/cjs/nv-fieldtextarea.cjs.entry.js +2 -2
  41. package/dist/cjs/nv-fieldtextarea.cjs.entry.js.map +1 -1
  42. package/dist/cjs/nv-fieldtime.cjs.entry.js +2 -2
  43. package/dist/cjs/nv-fieldtime.cjs.entry.js.map +1 -1
  44. package/dist/cjs/nv-icon.cjs.entry.js +1 -1
  45. package/dist/cjs/nv-iconbutton_2.cjs.entry.js +1 -1
  46. package/dist/cjs/nv-menu.cjs.entry.js +1 -1
  47. package/dist/cjs/nv-menuitem.cjs.entry.js +1 -1
  48. package/dist/cjs/nv-popover.cjs.entry.js +1 -1
  49. package/dist/cjs/nv-row.cjs.entry.js +1 -1
  50. package/dist/cjs/nv-stack.cjs.entry.js +1 -1
  51. package/dist/cjs/nv-table.cjs.entry.js +1 -1
  52. package/dist/cjs/nv-tablecolumn.cjs.entry.js +1 -1
  53. package/dist/cjs/nv-toggle.cjs.entry.js +1 -1
  54. package/dist/cjs/nv-tooltip.cjs.entry.js +1 -1
  55. package/dist/collection/components/nv-calendar/nv-calendar.js +235 -136
  56. package/dist/collection/components/nv-calendar/nv-calendar.js.map +1 -1
  57. package/dist/collection/components/nv-calendar/nv-calendar.utils.js +12 -3
  58. package/dist/collection/components/nv-calendar/nv-calendar.utils.js.map +1 -1
  59. package/dist/collection/components/nv-calendar/partials/calendar-actions.js +11 -0
  60. package/dist/collection/components/nv-calendar/partials/calendar-actions.js.map +1 -0
  61. package/dist/collection/components/nv-calendar/partials/calendar-grid.js +24 -0
  62. package/dist/collection/components/nv-calendar/partials/calendar-grid.js.map +1 -0
  63. package/dist/collection/components/nv-calendar/partials/calendar-header.js +38 -0
  64. package/dist/collection/components/nv-calendar/partials/calendar-header.js.map +1 -0
  65. package/dist/collection/components/nv-calendar/partials/calendar-shortcuts.js +22 -0
  66. package/dist/collection/components/nv-calendar/partials/calendar-shortcuts.js.map +1 -0
  67. package/dist/collection/components/nv-calendar/partials/day-cell.js +31 -0
  68. package/dist/collection/components/nv-calendar/partials/day-cell.js.map +1 -0
  69. package/dist/collection/components/nv-calendar/partials/index.js +7 -0
  70. package/dist/collection/components/nv-calendar/partials/index.js.map +1 -0
  71. package/dist/collection/components/nv-calendar/partials/week-numbers.js +36 -0
  72. package/dist/collection/components/nv-calendar/partials/week-numbers.js.map +1 -0
  73. package/dist/collection/components/nv-calendar/test/nv-calendar.utils.test.js +692 -651
  74. package/dist/collection/components/nv-calendar/test/nv-calendar.utils.test.js.map +1 -1
  75. package/dist/collection/components/nv-calendar/test/partials/calendar-actions.logic.test.js +169 -0
  76. package/dist/collection/components/nv-calendar/test/partials/calendar-actions.logic.test.js.map +1 -0
  77. package/dist/collection/components/nv-calendar/test/partials/calendar-grid.logic.test.js +262 -0
  78. package/dist/collection/components/nv-calendar/test/partials/calendar-grid.logic.test.js.map +1 -0
  79. package/dist/collection/components/nv-calendar/test/partials/calendar-header.logic.test.js +208 -0
  80. package/dist/collection/components/nv-calendar/test/partials/calendar-header.logic.test.js.map +1 -0
  81. package/dist/collection/components/nv-calendar/test/partials/calendar-shortcuts.logic.test.js +355 -0
  82. package/dist/collection/components/nv-calendar/test/partials/calendar-shortcuts.logic.test.js.map +1 -0
  83. package/dist/collection/components/nv-calendar/test/partials/day-cell.logic.test.js +250 -0
  84. package/dist/collection/components/nv-calendar/test/partials/day-cell.logic.test.js.map +1 -0
  85. package/dist/collection/components/nv-calendar/test/partials/week-numbers.logic.test.js +217 -0
  86. package/dist/collection/components/nv-calendar/test/partials/week-numbers.logic.test.js.map +1 -0
  87. package/dist/collection/components/nv-fielddate/nv-fielddate.js +56 -16
  88. package/dist/collection/components/nv-fielddate/nv-fielddate.js.map +1 -1
  89. package/dist/collection/components/nv-fielddate/styles/nv-fielddate.css +44 -0
  90. package/dist/collection/components/nv-fielddate/test/nv-fielddate.logic.test.js +196 -0
  91. package/dist/collection/components/nv-fielddate/test/nv-fielddate.logic.test.js.map +1 -0
  92. package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.js +99 -43
  93. package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.js.map +1 -1
  94. package/dist/collection/components/nv-fielddaterange/styles/nv-fielddaterange.css +44 -0
  95. package/dist/collection/components/nv-fielddaterange/test/nv-fielddaterange.logic.test.js +137 -0
  96. package/dist/collection/components/nv-fielddaterange/test/nv-fielddaterange.logic.test.js.map +1 -0
  97. package/dist/collection/components/nv-fielddropdown/styles/nv-fielddropdown.css +46 -0
  98. package/dist/collection/components/nv-fieldmultiselect/styles/nv-fieldmultiselect.css +46 -0
  99. package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.css +44 -0
  100. package/dist/collection/components/nv-fieldpassword/nv-fieldpassword.css +44 -0
  101. package/dist/collection/components/nv-fieldselect/nv-fieldselect.css +44 -0
  102. package/dist/collection/components/nv-fieldslider/nv-fieldslider.docs.js +22 -22
  103. package/dist/collection/components/nv-fieldslider/nv-fieldslider.docs.js.map +1 -1
  104. package/dist/collection/components/nv-fieldslider/nv-fieldslider.js +30 -29
  105. package/dist/collection/components/nv-fieldslider/nv-fieldslider.js.map +1 -1
  106. package/dist/collection/components/nv-fieldslider/styles/nv-fieldslider.css +91 -20
  107. package/dist/collection/components/nv-fieldtext/nv-fieldtext.css +44 -0
  108. package/dist/collection/components/nv-fieldtextarea/nv-fieldtextarea.css +38 -0
  109. package/dist/collection/components/nv-fieldtime/styles/nv-fieldtime.css +44 -0
  110. package/dist/components/index.js +1 -1
  111. package/dist/components/nv-alert.js +2 -2
  112. package/dist/components/nv-avatar.js +2 -2
  113. package/dist/components/nv-badge.js +1 -1
  114. package/dist/components/nv-breadcrumb.js +3 -3
  115. package/dist/components/nv-breadcrumbs.js +1 -1
  116. package/dist/components/nv-button.js +1 -1
  117. package/dist/components/nv-calendar.js +1 -1
  118. package/dist/components/nv-col.js +1 -1
  119. package/dist/components/nv-datagrid.js +3 -3
  120. package/dist/components/nv-datagridcolumn.js +1 -1
  121. package/dist/components/nv-dialog.js +6 -6
  122. package/dist/components/nv-dialogfooter.js +1 -1
  123. package/dist/components/nv-dialogheader.js +1 -1
  124. package/dist/components/nv-fieldcheckbox.js +1 -1
  125. package/dist/components/nv-fielddate.js +53 -25
  126. package/dist/components/nv-fielddate.js.map +1 -1
  127. package/dist/components/nv-fielddaterange.js +85 -61
  128. package/dist/components/nv-fielddaterange.js.map +1 -1
  129. package/dist/components/nv-fielddropdown.js +7 -7
  130. package/dist/components/nv-fielddropdown.js.map +1 -1
  131. package/dist/components/nv-fielddropdownitem.js +1 -1
  132. package/dist/components/nv-fielddropdownitemcheck.js +1 -1
  133. package/dist/components/nv-fieldmultiselect.js +9 -9
  134. package/dist/components/nv-fieldmultiselect.js.map +1 -1
  135. package/dist/components/nv-fieldnumber.js +5 -5
  136. package/dist/components/nv-fieldnumber.js.map +1 -1
  137. package/dist/components/nv-fieldpassword.js +5 -5
  138. package/dist/components/nv-fieldpassword.js.map +1 -1
  139. package/dist/components/nv-fieldradio.js +1 -1
  140. package/dist/components/nv-fieldselect.js +5 -5
  141. package/dist/components/nv-fieldselect.js.map +1 -1
  142. package/dist/components/nv-fieldslider.js +27 -22
  143. package/dist/components/nv-fieldslider.js.map +1 -1
  144. package/dist/components/nv-fieldtext.js +1 -1
  145. package/dist/components/nv-fieldtextarea.js +2 -2
  146. package/dist/components/nv-fieldtextarea.js.map +1 -1
  147. package/dist/components/nv-fieldtime.js +6 -6
  148. package/dist/components/nv-fieldtime.js.map +1 -1
  149. package/dist/components/nv-icon.js +1 -1
  150. package/dist/components/nv-iconbutton.js +1 -1
  151. package/dist/components/nv-loader.js +1 -1
  152. package/dist/components/nv-menu.js +4 -4
  153. package/dist/components/nv-menuitem.js +1 -1
  154. package/dist/components/nv-popover.js +1 -1
  155. package/dist/components/nv-row.js +1 -1
  156. package/dist/components/nv-stack.js +1 -1
  157. package/dist/components/nv-table.js +1 -1
  158. package/dist/components/nv-tablecolumn.js +1 -1
  159. package/dist/components/nv-toggle.js +1 -1
  160. package/dist/components/nv-tooltip.js +1 -1
  161. package/dist/components/{p-d63f1cbe.js → p-2ae214d2.js} +3 -3
  162. package/dist/components/{p-d63f1cbe.js.map → p-2ae214d2.js.map} +1 -1
  163. package/dist/components/{p-c0a91091.js → p-3e32b5a1.js} +3 -3
  164. package/dist/components/{p-c0a91091.js.map → p-3e32b5a1.js.map} +1 -1
  165. package/dist/components/{p-4656efae.js → p-5e90b9b8.js} +376 -165
  166. package/dist/components/p-5e90b9b8.js.map +1 -0
  167. package/dist/components/{p-cbe9521f.js → p-5ee4015d.js} +3 -3
  168. package/dist/components/{p-cbe9521f.js.map → p-5ee4015d.js.map} +1 -1
  169. package/dist/components/{p-33e231f4.js → p-6277f746.js} +2 -2
  170. package/dist/components/{p-33e231f4.js.map → p-6277f746.js.map} +1 -1
  171. package/dist/components/{p-f0a5e7e4.js → p-7935c1cb.js} +4 -4
  172. package/dist/components/{p-f0a5e7e4.js.map → p-7935c1cb.js.map} +1 -1
  173. package/dist/components/{p-f1859ddc.js → p-8d92f0e1.js} +3 -3
  174. package/dist/components/{p-f1859ddc.js.map → p-8d92f0e1.js.map} +1 -1
  175. package/dist/components/{p-cbdc2c8b.js → p-95a7581c.js} +5 -5
  176. package/dist/components/{p-cbdc2c8b.js.map → p-95a7581c.js.map} +1 -1
  177. package/dist/components/{p-dd2273a3.js → p-9e6e26cb.js} +2 -2
  178. package/dist/components/{p-dd2273a3.js.map → p-9e6e26cb.js.map} +1 -1
  179. package/dist/components/{p-76a30bf1.js → p-9fa0de38.js} +2 -2
  180. package/dist/components/{p-76a30bf1.js.map → p-9fa0de38.js.map} +1 -1
  181. package/dist/components/{p-679e0fa9.js → p-aff3ed68.js} +10 -175
  182. package/dist/components/p-aff3ed68.js.map +1 -0
  183. package/dist/components/{p-d19b41d2.js → p-b6d858b2.js} +2 -2
  184. package/dist/components/{p-d19b41d2.js.map → p-b6d858b2.js.map} +1 -1
  185. package/dist/components/{p-83c8873a.js → p-bb6d1e4e.js} +2 -2
  186. package/dist/components/{p-83c8873a.js.map → p-bb6d1e4e.js.map} +1 -1
  187. package/dist/components/{p-581e67cc.js → p-c07c32d2.js} +3 -3
  188. package/dist/components/{p-581e67cc.js.map → p-c07c32d2.js.map} +1 -1
  189. package/dist/components/{p-04cb3a6f.js → p-c9006520.js} +4 -4
  190. package/dist/components/{p-04cb3a6f.js.map → p-c9006520.js.map} +1 -1
  191. package/dist/components/{p-07a89754.js → p-e28c4707.js} +3 -3
  192. package/dist/components/{p-07a89754.js.map → p-e28c4707.js.map} +1 -1
  193. package/dist/components/{p-0ab80d95.js → p-eabbc885.js} +2 -2
  194. package/dist/components/{p-0ab80d95.js.map → p-eabbc885.js.map} +1 -1
  195. package/dist/esm/{constants-b97e736d.js → constants-4faa1fae.js} +2 -2
  196. package/dist/esm/{constants-b97e736d.js.map → constants-4faa1fae.js.map} +1 -1
  197. package/dist/esm/{index-8f0e5f19.js → index-a1936cd0.js} +17 -184
  198. package/dist/esm/index-a1936cd0.js.map +1 -0
  199. package/dist/esm/index.js +1 -1
  200. package/dist/esm/loader.js +3 -3
  201. package/dist/esm/native.js +3 -24
  202. package/dist/esm/native.js.map +1 -1
  203. package/dist/esm/nv-alert.entry.js +2 -2
  204. package/dist/esm/nv-avatar.entry.js +2 -2
  205. package/dist/esm/nv-badge_2.entry.js +1 -1
  206. package/dist/esm/nv-breadcrumb.entry.js +1 -1
  207. package/dist/esm/nv-breadcrumbs.entry.js +1 -1
  208. package/dist/esm/nv-button.entry.js +2 -2
  209. package/dist/esm/nv-calendar.entry.js +372 -139
  210. package/dist/esm/nv-calendar.entry.js.map +1 -1
  211. package/dist/esm/nv-col.entry.js +1 -1
  212. package/dist/esm/nv-datagrid.entry.js +2 -2
  213. package/dist/esm/nv-datagridcolumn.entry.js +1 -1
  214. package/dist/esm/nv-dialog.entry.js +2 -2
  215. package/dist/esm/nv-dialogfooter_2.entry.js +2 -2
  216. package/dist/esm/nv-fieldcheckbox.entry.js +1 -1
  217. package/dist/esm/nv-fielddate.entry.js +45 -11
  218. package/dist/esm/nv-fielddate.entry.js.map +1 -1
  219. package/dist/esm/nv-fielddaterange.entry.js +75 -44
  220. package/dist/esm/nv-fielddaterange.entry.js.map +1 -1
  221. package/dist/esm/nv-fielddropdown.entry.js +2 -2
  222. package/dist/esm/nv-fielddropdown.entry.js.map +1 -1
  223. package/dist/esm/nv-fielddropdownitem.entry.js +1 -1
  224. package/dist/esm/nv-fieldmultiselect.entry.js +2 -2
  225. package/dist/esm/nv-fieldmultiselect.entry.js.map +1 -1
  226. package/dist/esm/nv-fieldnumber.entry.js +2 -2
  227. package/dist/esm/nv-fieldnumber.entry.js.map +1 -1
  228. package/dist/esm/nv-fieldpassword.entry.js +2 -2
  229. package/dist/esm/nv-fieldpassword.entry.js.map +1 -1
  230. package/dist/esm/nv-fieldradio.entry.js +1 -1
  231. package/dist/esm/nv-fieldselect.entry.js +2 -2
  232. package/dist/esm/nv-fieldselect.entry.js.map +1 -1
  233. package/dist/esm/nv-fieldslider.entry.js +25 -20
  234. package/dist/esm/nv-fieldslider.entry.js.map +1 -1
  235. package/dist/esm/nv-fieldtext.entry.js +2 -2
  236. package/dist/esm/nv-fieldtext.entry.js.map +1 -1
  237. package/dist/esm/nv-fieldtextarea.entry.js +2 -2
  238. package/dist/esm/nv-fieldtextarea.entry.js.map +1 -1
  239. package/dist/esm/nv-fieldtime.entry.js +3 -3
  240. package/dist/esm/nv-fieldtime.entry.js.map +1 -1
  241. package/dist/esm/nv-icon.entry.js +2 -2
  242. package/dist/esm/nv-iconbutton_2.entry.js +1 -1
  243. package/dist/esm/nv-menu.entry.js +1 -1
  244. package/dist/esm/nv-menuitem.entry.js +1 -1
  245. package/dist/esm/nv-popover.entry.js +1 -1
  246. package/dist/esm/nv-row.entry.js +1 -1
  247. package/dist/esm/nv-stack.entry.js +1 -1
  248. package/dist/esm/nv-table.entry.js +1 -1
  249. package/dist/esm/nv-tablecolumn.entry.js +1 -1
  250. package/dist/esm/nv-toggle.entry.js +1 -1
  251. package/dist/esm/nv-tooltip.entry.js +1 -1
  252. package/dist/native/index.esm.js +1 -1
  253. package/dist/native/native.css +1 -1
  254. package/dist/native/native.esm.js +1 -1
  255. package/dist/native/native.esm.js.map +1 -1
  256. package/dist/native/p-050d6c6c.entry.js +2 -0
  257. package/dist/native/{p-adc96c3a.entry.js.map → p-050d6c6c.entry.js.map} +1 -1
  258. package/dist/native/{p-519b4819.entry.js → p-08ca678c.entry.js} +2 -2
  259. package/dist/native/p-1a5d3b87.entry.js +2 -0
  260. package/dist/native/{p-7c676f2c.entry.js.map → p-1a5d3b87.entry.js.map} +1 -1
  261. package/dist/native/{p-0323daf6.entry.js → p-1c1ecd38.entry.js} +2 -2
  262. package/dist/native/{p-16a4cdf3.entry.js → p-1d98477d.entry.js} +2 -2
  263. package/dist/native/{p-19fb0fd0.entry.js → p-2006f5d4.entry.js} +2 -2
  264. package/dist/native/p-26cf4938.entry.js +2 -0
  265. package/dist/native/p-26cf4938.entry.js.map +1 -0
  266. package/dist/native/p-3817efb2.entry.js +2 -0
  267. package/dist/native/{p-fb897f7d.entry.js.map → p-3817efb2.entry.js.map} +1 -1
  268. package/dist/native/p-45459dbb.entry.js +2 -0
  269. package/dist/native/{p-5382eab2.entry.js.map → p-45459dbb.entry.js.map} +1 -1
  270. package/dist/native/p-45cbe6e4.entry.js +2 -0
  271. package/dist/native/p-46428304.entry.js +2 -0
  272. package/dist/native/p-46428304.entry.js.map +1 -0
  273. package/dist/native/{p-7092a675.entry.js → p-4f9cdf0b.entry.js} +2 -2
  274. package/dist/native/{p-cfe0a6c6.entry.js → p-58bb90ad.entry.js} +2 -2
  275. package/dist/native/p-59b07b36.entry.js +2 -0
  276. package/dist/native/{p-987c79d8.entry.js.map → p-59b07b36.entry.js.map} +1 -1
  277. package/dist/native/{p-4c0d81b0.entry.js → p-5b6c59e0.entry.js} +2 -2
  278. package/dist/native/p-6029e51b.entry.js +2 -0
  279. package/dist/native/{p-fc3bea07.entry.js.map → p-6029e51b.entry.js.map} +1 -1
  280. package/dist/native/{p-a2c0f1a7.entry.js → p-60c64f2b.entry.js} +2 -2
  281. package/dist/native/{p-3f2b6a22.entry.js → p-64a76565.entry.js} +2 -2
  282. package/dist/native/{p-c930adb7.entry.js → p-83288db0.entry.js} +2 -2
  283. package/dist/native/p-838f7842.entry.js +2 -0
  284. package/dist/native/{p-b0fc08e7.entry.js.map → p-838f7842.entry.js.map} +1 -1
  285. package/dist/native/{p-407fc32d.entry.js → p-86ab23ea.entry.js} +2 -2
  286. package/dist/native/p-87784622.entry.js +2 -0
  287. package/dist/native/p-8fb4e5c0.entry.js +2 -0
  288. package/dist/native/{p-5ba3fc3c.entry.js.map → p-8fb4e5c0.entry.js.map} +1 -1
  289. package/dist/native/{p-05d95d4d.entry.js → p-914da1e1.entry.js} +2 -2
  290. package/dist/native/p-abbe5d69.entry.js +2 -0
  291. package/dist/native/{p-7c6edd1c.entry.js.map → p-abbe5d69.entry.js.map} +1 -1
  292. package/dist/native/p-abc251aa.entry.js +2 -0
  293. package/dist/native/p-abc251aa.entry.js.map +1 -0
  294. package/dist/native/{p-221b8f72.entry.js → p-ad128108.entry.js} +2 -2
  295. package/dist/native/{p-f0ddf60b.entry.js → p-b5b9190a.entry.js} +2 -2
  296. package/dist/native/{p-de2c07a6.entry.js → p-b8f2c1e7.entry.js} +2 -2
  297. package/dist/native/{p-9fba8663.entry.js → p-d040bd61.entry.js} +2 -2
  298. package/dist/native/p-d0a33e64.js +3 -0
  299. package/dist/native/p-d0a33e64.js.map +1 -0
  300. package/dist/native/{p-ed488498.entry.js → p-d21b2da2.entry.js} +3 -3
  301. package/dist/native/{p-0ec1e2e3.entry.js → p-d53e8795.entry.js} +2 -2
  302. package/dist/native/p-dc7dd7f3.entry.js +2 -0
  303. package/dist/native/{p-21e7132f.entry.js.map → p-dc7dd7f3.entry.js.map} +1 -1
  304. package/dist/native/p-e2c1992e.entry.js +2 -0
  305. package/dist/native/{p-60b204ac.entry.js.map → p-e2c1992e.entry.js.map} +1 -1
  306. package/dist/native/{p-f85c08f1.js → p-e2d0a77d.js} +2 -2
  307. package/dist/native/p-ed6019fe.entry.js +2 -0
  308. package/dist/native/p-ed6019fe.entry.js.map +1 -0
  309. package/dist/native/p-f94d7054.entry.js +2 -0
  310. package/dist/native/{p-aa86af25.entry.js.map → p-f94d7054.entry.js.map} +1 -1
  311. package/dist/native/p-fdea17ce.entry.js +2 -0
  312. package/dist/native/{p-ef76178b.entry.js.map → p-fdea17ce.entry.js.map} +1 -1
  313. package/dist/types/components/nv-calendar/nv-calendar.d.ts +25 -45
  314. package/dist/types/components/nv-calendar/partials/calendar-actions.d.ts +19 -0
  315. package/dist/types/components/nv-calendar/partials/calendar-grid.d.ts +46 -0
  316. package/dist/types/components/nv-calendar/partials/calendar-header.d.ts +38 -0
  317. package/dist/types/components/nv-calendar/partials/calendar-shortcuts.d.ts +35 -0
  318. package/dist/types/components/nv-calendar/partials/day-cell.d.ts +35 -0
  319. package/dist/types/components/nv-calendar/partials/index.d.ts +6 -0
  320. package/dist/types/components/nv-calendar/partials/week-numbers.d.ts +30 -0
  321. package/dist/types/components/nv-calendar/test/partials/calendar-actions.logic.test.d.ts +1 -0
  322. package/dist/types/components/nv-calendar/test/partials/calendar-grid.logic.test.d.ts +1 -0
  323. package/dist/types/components/nv-calendar/test/partials/calendar-header.logic.test.d.ts +1 -0
  324. package/dist/types/components/nv-calendar/test/partials/calendar-shortcuts.logic.test.d.ts +1 -0
  325. package/dist/types/components/nv-calendar/test/partials/day-cell.logic.test.d.ts +1 -0
  326. package/dist/types/components/nv-calendar/test/partials/week-numbers.logic.test.d.ts +1 -0
  327. package/dist/types/components/nv-fielddate/nv-fielddate.d.ts +21 -9
  328. package/dist/types/components/nv-fielddate/test/nv-fielddate.logic.test.d.ts +1 -0
  329. package/dist/types/components/nv-fielddaterange/nv-fielddaterange.d.ts +17 -6
  330. package/dist/types/components/nv-fielddaterange/test/nv-fielddaterange.logic.test.d.ts +1 -0
  331. package/dist/types/components/nv-fieldslider/nv-fieldslider.d.ts +5 -6
  332. package/dist/types/components.d.ts +37 -38
  333. package/dist/vscode-data.json +4 -4
  334. package/hydrate/index.js +530 -229
  335. package/hydrate/index.mjs +530 -229
  336. package/package.json +1 -1
  337. package/dist/cjs/index-108ddff0.js.map +0 -1
  338. package/dist/components/p-4656efae.js.map +0 -1
  339. package/dist/components/p-679e0fa9.js.map +0 -1
  340. package/dist/esm/index-8f0e5f19.js.map +0 -1
  341. package/dist/native/p-1e3d3374.entry.js +0 -2
  342. package/dist/native/p-21e7132f.entry.js +0 -2
  343. package/dist/native/p-2805f9f2.entry.js +0 -2
  344. package/dist/native/p-2805f9f2.entry.js.map +0 -1
  345. package/dist/native/p-5382eab2.entry.js +0 -2
  346. package/dist/native/p-5ba3fc3c.entry.js +0 -2
  347. package/dist/native/p-60b204ac.entry.js +0 -2
  348. package/dist/native/p-711a7778.js +0 -3
  349. package/dist/native/p-711a7778.js.map +0 -1
  350. package/dist/native/p-759c9ce4.entry.js +0 -2
  351. package/dist/native/p-759c9ce4.entry.js.map +0 -1
  352. package/dist/native/p-7c676f2c.entry.js +0 -2
  353. package/dist/native/p-7c6edd1c.entry.js +0 -2
  354. package/dist/native/p-987c79d8.entry.js +0 -2
  355. package/dist/native/p-aa86af25.entry.js +0 -2
  356. package/dist/native/p-adc96c3a.entry.js +0 -2
  357. package/dist/native/p-b0fc08e7.entry.js +0 -2
  358. package/dist/native/p-d07ab618.entry.js +0 -2
  359. package/dist/native/p-dac0089b.entry.js +0 -2
  360. package/dist/native/p-dac0089b.entry.js.map +0 -1
  361. package/dist/native/p-ef76178b.entry.js +0 -2
  362. package/dist/native/p-f39803d9.entry.js +0 -2
  363. package/dist/native/p-f39803d9.entry.js.map +0 -1
  364. package/dist/native/p-fb897f7d.entry.js +0 -2
  365. package/dist/native/p-fc3bea07.entry.js +0 -2
  366. /package/dist/native/{p-519b4819.entry.js.map → p-08ca678c.entry.js.map} +0 -0
  367. /package/dist/native/{p-0323daf6.entry.js.map → p-1c1ecd38.entry.js.map} +0 -0
  368. /package/dist/native/{p-16a4cdf3.entry.js.map → p-1d98477d.entry.js.map} +0 -0
  369. /package/dist/native/{p-19fb0fd0.entry.js.map → p-2006f5d4.entry.js.map} +0 -0
  370. /package/dist/native/{p-1e3d3374.entry.js.map → p-45cbe6e4.entry.js.map} +0 -0
  371. /package/dist/native/{p-7092a675.entry.js.map → p-4f9cdf0b.entry.js.map} +0 -0
  372. /package/dist/native/{p-cfe0a6c6.entry.js.map → p-58bb90ad.entry.js.map} +0 -0
  373. /package/dist/native/{p-4c0d81b0.entry.js.map → p-5b6c59e0.entry.js.map} +0 -0
  374. /package/dist/native/{p-a2c0f1a7.entry.js.map → p-60c64f2b.entry.js.map} +0 -0
  375. /package/dist/native/{p-3f2b6a22.entry.js.map → p-64a76565.entry.js.map} +0 -0
  376. /package/dist/native/{p-c930adb7.entry.js.map → p-83288db0.entry.js.map} +0 -0
  377. /package/dist/native/{p-407fc32d.entry.js.map → p-86ab23ea.entry.js.map} +0 -0
  378. /package/dist/native/{p-d07ab618.entry.js.map → p-87784622.entry.js.map} +0 -0
  379. /package/dist/native/{p-05d95d4d.entry.js.map → p-914da1e1.entry.js.map} +0 -0
  380. /package/dist/native/{p-221b8f72.entry.js.map → p-ad128108.entry.js.map} +0 -0
  381. /package/dist/native/{p-f0ddf60b.entry.js.map → p-b5b9190a.entry.js.map} +0 -0
  382. /package/dist/native/{p-de2c07a6.entry.js.map → p-b8f2c1e7.entry.js.map} +0 -0
  383. /package/dist/native/{p-9fba8663.entry.js.map → p-d040bd61.entry.js.map} +0 -0
  384. /package/dist/native/{p-ed488498.entry.js.map → p-d21b2da2.entry.js.map} +0 -0
  385. /package/dist/native/{p-0ec1e2e3.entry.js.map → p-d53e8795.entry.js.map} +0 -0
  386. /package/dist/native/{p-f85c08f1.js.map → p-e2d0a77d.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
@@ -232,6 +241,175 @@ function parseDate(dateInput, dateFormat) {
232
241
  return parsed.toDate();
233
242
  }
234
243
 
244
+ /**
245
+ * Renders a single day cell in the calendar grid
246
+ * @param {DayCellProps} props - Component properties
247
+ * @returns {JSX.Element} JSX element representing a day cell
248
+ */
249
+ const DayCell = props => {
250
+ const { date, dayOfMonth, isCurrentMonth, isSelected, isInRange, isStart, isEnd, isToday, isDisabled, onClick, } = props;
251
+ // Build CSS classes for the day cell
252
+ const dayClasses = [
253
+ 'day',
254
+ isSelected ? 'selected' : '',
255
+ isStart ? 'range-start' : '',
256
+ isEnd ? 'range-end' : '',
257
+ isInRange ? 'in-range' : '',
258
+ isDisabled ? 'disabled' : '',
259
+ !isCurrentMonth ? 'outside-month' : '',
260
+ isToday ? 'is-today' : '',
261
+ ]
262
+ .filter(Boolean)
263
+ .join(' ');
264
+ const handleClick = () => {
265
+ if (!isDisabled && onClick) {
266
+ onClick(date);
267
+ }
268
+ };
269
+ return (
270
+ // eslint-disable-next-line react/jsx-no-bind
271
+ h("div", { class: dayClasses, onClick: handleClick, "aria-disabled": isDisabled }, dayOfMonth));
272
+ };
273
+
274
+ /**
275
+ * Renders the action buttons for the calendar (Cancel/OK)
276
+ * @param {CalendarActionsProps} props - Component properties
277
+ * @returns {JSX.Element} JSX element representing the action buttons
278
+ */
279
+ const CalendarActions = props => {
280
+ const { onReset, onConfirm, useSlot = false } = props;
281
+ return (h("div", { class: "datepicker-actions" }, useSlot ? (h("slot", { name: "actions" },
282
+ h("nv-button", { emphasis: "low", size: "xs", onClick: onReset }, "Cancel"),
283
+ h("nv-button", { size: "xs", onClick: onConfirm }, "OK"))) : (h("div", null,
284
+ h("nv-button", { emphasis: "low", size: "xs", onClick: onReset }, "Cancel"),
285
+ h("nv-button", { size: "xs", onClick: onConfirm }, "OK")))));
286
+ };
287
+
288
+ /**
289
+ * Renders the week numbers column for the calendar
290
+ * @param {WeekNumbersProps} props - Component properties
291
+ * @returns {JSX.Element} JSX element representing the week numbers
292
+ */
293
+ const WeekNumbers = props => {
294
+ const { weeks, localizedWeekText, selectionType, onWeekSelect, calendarIndex, } = props;
295
+ /**
296
+ * Handles click on a week number for range selection
297
+ * @param {Array<WeekData>} week - Week data
298
+ */
299
+ const handleWeekClick = (week) => {
300
+ if (selectionType === 'range') {
301
+ const dates = week.map(d => d.date);
302
+ onWeekSelect(dates, calendarIndex);
303
+ }
304
+ };
305
+ /**
306
+ * Creates a click handler for a specific week
307
+ * @param {Array<WeekData>} week - Week data
308
+ * @returns {() => void} Click handler function
309
+ */
310
+ const createWeekHandler = (week) => {
311
+ return () => handleWeekClick(week);
312
+ };
313
+ return (h("div", { class: "week-numbers" },
314
+ h("div", { class: "week-header" }, localizedWeekText),
315
+ weeks.map((week, weekIndex) => {
316
+ var _a;
317
+ const firstDayWithDate = ((_a = week.find(d => d.date)) === null || _a === void 0 ? void 0 : _a.date) || new Date();
318
+ const weekNumber = getWeekNumber(firstDayWithDate);
319
+ const isClickable = selectionType === 'range';
320
+ return (h("div", { class: `week-number ${isClickable ? 'clickable' : ''}`, onClick: createWeekHandler(week), key: `week-${weekIndex}`, role: isClickable ? 'button' : undefined, tabindex: isClickable ? 0 : undefined }, weekNumber));
321
+ })));
322
+ };
323
+
324
+ /**
325
+ * Renders the shortcuts for quick date selection
326
+ * @param {CalendarShortcutsProps} props - Component properties
327
+ * @returns {JSX.Element | null} JSX element representing the shortcuts or null if no shortcuts
328
+ */
329
+ const CalendarShortcuts = props => {
330
+ const { shortcuts, placement, onShortcutClick } = props;
331
+ if (!shortcuts || shortcuts.length === 0) {
332
+ return null;
333
+ }
334
+ /**
335
+ * Creates a click handler for a specific shortcut
336
+ * @param {ShortcutData} shortcut - The shortcut data
337
+ * @returns {() => void} Click handler function
338
+ */
339
+ const createShortcutHandler = (shortcut) => {
340
+ return () => onShortcutClick(shortcut);
341
+ };
342
+ 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)))));
343
+ };
344
+
345
+ /**
346
+ * Renders the calendar header with navigation and date controls
347
+ * @param {CalendarHeaderProps} props - Component properties
348
+ * @returns {JSX.Element} JSX element representing the calendar header
349
+ */
350
+ const CalendarHeader = props => {
351
+ const { currentDate, months, numberOfCalendars, calendarIndex, monthOffset, onMonthChange, onMonthSelect, onYearChange, } = props;
352
+ /**
353
+ * Creates navigation handler for month change
354
+ * @param {number} direction - Direction of navigation (-1 or 1)
355
+ * @returns {() => void} Navigation handler function
356
+ */
357
+ const createNavigationHandler = (direction) => {
358
+ return () => onMonthChange(direction);
359
+ };
360
+ /**
361
+ * Creates month selection handler
362
+ * @param {number} offset - Month offset
363
+ * @returns {(event: Event) => void} Month selection handler function
364
+ */
365
+ const createMonthSelectHandler = (offset) => {
366
+ return (event) => onMonthSelect(event, offset);
367
+ };
368
+ /**
369
+ * Creates year change handler
370
+ * @param {number} offset - Month offset
371
+ * @returns {(event: Event) => void} Year change handler function
372
+ */
373
+ const createYearChangeHandler = (offset) => {
374
+ return (event) => onYearChange(event, offset);
375
+ };
376
+ const currentMonth = (currentDate.getUTCMonth() + monthOffset) % 12;
377
+ const currentYear = currentDate.getUTCFullYear() +
378
+ Math.floor((currentDate.getUTCMonth() + monthOffset) / 12);
379
+ return (h("div", { class: "header" },
380
+ numberOfCalendars > 1 && calendarIndex === 0 && (h("nv-iconbutton", { class: "nav-left", emphasis: "lower", name: "chevron-left", onClick: createNavigationHandler(-1) })),
381
+ h("div", { class: "date-controls" },
382
+ 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)))),
383
+ h("input", { type: "number", class: "year-input", min: "1950", max: "2100", value: currentYear, onChange: createYearChangeHandler(monthOffset) })),
384
+ numberOfCalendars === 1 && (h("div", { class: "nav-buttons" },
385
+ h("nv-iconbutton", { emphasis: "lower", name: "chevron-left", onClick: createNavigationHandler(-1) }),
386
+ h("nv-iconbutton", { emphasis: "lower", name: "chevron-right", onClick: createNavigationHandler(1) }))),
387
+ numberOfCalendars > 1 && calendarIndex === numberOfCalendars - 1 && (h("nv-iconbutton", { emphasis: "lower", name: "chevron-right", onClick: createNavigationHandler(1), class: "nav-right" }))));
388
+ };
389
+
390
+ /**
391
+ * Renders the calendar grid with day headers and day cells
392
+ * @param {CalendarGridProps} props - Component properties
393
+ * @returns {JSX.Element} JSX element representing the calendar grid
394
+ */
395
+ const CalendarGrid = props => {
396
+ const { days, dayNames, selectionType, selectedDate, startDate, endDate, isUTCMode, onDayClick, isDateInRange, isToday, } = props;
397
+ return (h("div", { class: "days-container" },
398
+ h("div", { class: "days-header" }, dayNames.map((day, index) => (h("div", { class: "day-header", key: `day-header-${index}` }, day)))),
399
+ h("div", { class: "days-grid" }, days.map(day => {
400
+ const date = day.date;
401
+ if (!date)
402
+ return null;
403
+ const isSelected = selectionType === 'single' &&
404
+ isSameDate(date, selectedDate, { isUTCMode });
405
+ const isInRange = isDateInRange(date);
406
+ const isStart = isSameDate(date, startDate, { isUTCMode });
407
+ const isEnd = isSameDate(date, endDate, { isUTCMode });
408
+ const isTodayDate = isToday(date);
409
+ 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 }));
410
+ }))));
411
+ };
412
+
235
413
  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
414
  const NvCalendarStyle0 = nvCalendarCss;
237
415
 
@@ -240,18 +418,28 @@ const NvCalendar = class {
240
418
  registerInstance(this, hostRef);
241
419
  this.singleDateChange = createEvent(this, "singleDateChange", 7);
242
420
  this.rangeDateChange = createEvent(this, "rangeDateChange", 7);
421
+ this.valueChanged = createEvent(this, "valueChanged", 7);
243
422
  /****************************************************************************/
244
423
  //#region PROPERTIES
245
424
  /**
246
425
  * First day of the week (0 = Sunday, 1 = Monday, etc.)
247
- * @default 0
426
+ * @default 1
248
427
  */
249
- this.firstDayOfWeek = 0;
428
+ this.firstDayOfWeek = 1;
250
429
  /**
251
430
  * Number of calendars to display
252
431
  * @default 1
253
432
  */
254
433
  this.numberOfCalendars = 1;
434
+ /**
435
+ * Selected date value. For single mode: ISO date string. For range mode: comma-separated ISO date strings.
436
+ * Examples:
437
+ * - Single: "2025-03-15"
438
+ * - Range: "2025-03-15,2025-03-20"
439
+ * @default ""
440
+ */
441
+ // eslint-disable-next-line @stencil-community/strict-mutable
442
+ this.value = '';
255
443
  /**
256
444
  * Locale for date formatting
257
445
  * @default 'en-BE'
@@ -289,6 +477,75 @@ const NvCalendar = class {
289
477
  this.endDate = null;
290
478
  /** List of formatted months for the selector */
291
479
  this.months = [];
480
+ /**
481
+ * Parses the unified value prop and synchronizes with internal state
482
+ * @param {string} value - Value to parse
483
+ */
484
+ this.parseUnifiedValue = (value) => {
485
+ if (!value) {
486
+ // Reset all selections
487
+ this.selectedDate = null;
488
+ this.startDate = null;
489
+ this.endDate = null;
490
+ return;
491
+ }
492
+ const values = value
493
+ .split(',')
494
+ .map(v => v.trim())
495
+ .filter(Boolean);
496
+ if (this.selectionType === 'single' && values.length >= 1) {
497
+ const parsedDate = parseDate(values[0], this.dateFormat);
498
+ if (parsedDate) {
499
+ this.selectedDate = parsedDate;
500
+ // Only sync with legacy prop if not using actions (immediate mode)
501
+ if (!this.showActions) {
502
+ this.singleValue = values[0];
503
+ }
504
+ // Navigate to the date if not prevented
505
+ const preventNavigation = this.el.getAttribute('data-prevent-navigation') === 'true';
506
+ if (!preventNavigation) {
507
+ this.currentDate = parsedDate;
508
+ }
509
+ }
510
+ else {
511
+ // Handle malformed date gracefully - reset state
512
+ console.warn(`Invalid date format: ${values[0]}`);
513
+ this.selectedDate = null;
514
+ if (!this.showActions) {
515
+ this.singleValue = '';
516
+ }
517
+ }
518
+ }
519
+ else if (this.selectionType === 'range' && values.length >= 2) {
520
+ const startDate = parseDate(values[0], this.dateFormat);
521
+ const endDate = parseDate(values[1], this.dateFormat);
522
+ if (startDate && endDate) {
523
+ this.startDate = startDate;
524
+ this.endDate = endDate;
525
+ // Only sync with legacy prop if not using actions (immediate mode)
526
+ if (!this.showActions) {
527
+ this.rangeValue = {
528
+ start: values[0],
529
+ end: values[1],
530
+ };
531
+ }
532
+ // Navigate to start date if not prevented
533
+ const preventNavigation = this.el.getAttribute('data-prevent-navigation') === 'true';
534
+ if (!preventNavigation) {
535
+ this.currentDate = startDate;
536
+ }
537
+ }
538
+ else {
539
+ // Handle malformed dates gracefully - reset state
540
+ console.warn(`Invalid date range format: ${values[0]}, ${values[1]}`);
541
+ this.startDate = null;
542
+ this.endDate = null;
543
+ if (!this.showActions) {
544
+ this.rangeValue = { start: '', end: '' };
545
+ }
546
+ }
547
+ }
548
+ };
292
549
  /**
293
550
  * Change the displayed month
294
551
  * @param {number} offset - Month offset (-1 for previous, 1 for next)
@@ -336,7 +593,14 @@ const NvCalendar = class {
336
593
  return;
337
594
  const formattedDate = formatDate(date, { dateFormat: this.dateFormat });
338
595
  this.selectedDate = date;
339
- this.singleDateChange.emit(formattedDate);
596
+ // Update the unified value prop (like nv-fieldslider)
597
+ this.value = formattedDate;
598
+ this.valueChanged.emit(formattedDate);
599
+ // Legacy support (deprecated) - only sync props if not using actions
600
+ if (!this.showActions) {
601
+ this.singleValue = formattedDate;
602
+ this.singleDateChange.emit(formattedDate);
603
+ }
340
604
  };
341
605
  /**
342
606
  * Handles range date selection
@@ -344,18 +608,32 @@ const NvCalendar = class {
344
608
  */
345
609
  this.handleRangeSelection = (date) => {
346
610
  if (!this.startDate || (this.startDate && this.endDate)) {
611
+ // Start new range selection
347
612
  this.startDate = date;
348
613
  this.endDate = null;
349
614
  }
350
615
  else {
616
+ // Complete range selection
351
617
  this.endDate = date;
618
+ // Ensure correct order
352
619
  if (this.startDate > this.endDate) {
353
620
  [this.startDate, this.endDate] = [this.endDate, this.startDate];
354
621
  }
355
- this.rangeDateChange.emit({
356
- start: formatDate(this.startDate, { dateFormat: this.dateFormat }),
357
- end: formatDate(this.endDate, { dateFormat: this.dateFormat }),
622
+ const startFormatted = formatDate(this.startDate, {
623
+ dateFormat: this.dateFormat,
624
+ });
625
+ const endFormatted = formatDate(this.endDate, {
626
+ dateFormat: this.dateFormat,
358
627
  });
628
+ // Update the unified value prop (like nv-fieldslider)
629
+ this.value = `${startFormatted},${endFormatted}`;
630
+ this.valueChanged.emit(this.value);
631
+ // Legacy support (deprecated) - only sync props if not using actions
632
+ if (!this.showActions) {
633
+ const legacyRange = { start: startFormatted, end: endFormatted };
634
+ this.rangeDateChange.emit(legacyRange);
635
+ this.rangeValue = legacyRange;
636
+ }
359
637
  }
360
638
  };
361
639
  /**
@@ -414,23 +692,35 @@ const NvCalendar = class {
414
692
  * @returns {string[]} Array of short day names
415
693
  */
416
694
  this.getDayNames = () => {
695
+ let days;
417
696
  // If we have custom day names for this locale
418
697
  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];
698
+ // Custom day names are expected to start with Monday (index 0 = Monday)
699
+ days = [...CUSTOM_DAY_NAMES[this.locale]];
700
+ }
701
+ else {
702
+ // Generate days using Intl.DateTimeFormat, starting from Monday
703
+ const formatter = new Intl.DateTimeFormat(this.locale, {
704
+ weekday: 'short',
705
+ });
706
+ // Generate days starting from Monday (2023-01-02 was a Monday)
707
+ days = [...Array(7)].map((_, i) => formatter.format(new Date(2023, 0, i + 2)).toUpperCase());
708
+ }
709
+ // Now reorganize based on firstDayOfWeek
710
+ // 0 = Sunday, 1 = Monday (default), 2 = Tuesday, etc.
711
+ if (this.firstDayOfWeek === 0) {
712
+ // If Sunday is first day, move Sunday (last element) to the beginning
713
+ return [days[6], ...days.slice(0, 6)];
714
+ }
715
+ else if (this.firstDayOfWeek === 1) {
716
+ // If Monday is first day, return as-is (since our array starts with Monday)
717
+ return days;
718
+ }
719
+ else {
720
+ // For other first days (Tuesday=2, Wednesday=3, etc.)
721
+ const offset = this.firstDayOfWeek - 1; // Convert to 0-based offset from Monday
722
+ return [...days.slice(offset), ...days.slice(0, offset)];
424
723
  }
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
724
  };
435
725
  /**
436
726
  * Generates the days of the current month
@@ -611,8 +901,15 @@ const NvCalendar = class {
611
901
  if (shortcut.singleValue) {
612
902
  const newDate = parseDate(shortcut.singleValue, this.dateFormat);
613
903
  this.selectedDate = newDate;
614
- this.singleDateChange.emit(formatDate(newDate, { dateFormat: this.dateFormat }));
615
- this.singleValue = formatDate(newDate, { dateFormat: this.dateFormat });
904
+ const formattedDate = formatDate(newDate, {
905
+ dateFormat: this.dateFormat,
906
+ });
907
+ // Update the unified value prop (like nv-fieldslider)
908
+ this.value = formattedDate;
909
+ this.valueChanged.emit(formattedDate);
910
+ // Legacy support (deprecated) - sync props
911
+ this.singleValue = formattedDate;
912
+ this.singleDateChange.emit(formattedDate);
616
913
  if (!this.showActions) {
617
914
  const event = new CustomEvent('closePopover', {
618
915
  bubbles: true,
@@ -627,14 +924,18 @@ const NvCalendar = class {
627
924
  const end = parseDate(shortcut.rangeValue.end, this.dateFormat);
628
925
  this.startDate = start;
629
926
  this.endDate = end;
630
- this.rangeDateChange.emit({
631
- start: formatDate(start, { dateFormat: this.dateFormat }),
632
- end: formatDate(end, { dateFormat: this.dateFormat }),
927
+ const startFormatted = formatDate(start, {
928
+ dateFormat: this.dateFormat,
633
929
  });
634
- this.rangeValue = {
635
- start: formatDate(start, { dateFormat: this.dateFormat }),
636
- end: formatDate(end, { dateFormat: this.dateFormat }),
637
- };
930
+ const endFormatted = formatDate(end, { dateFormat: this.dateFormat });
931
+ // Update the unified value prop (like nv-fieldslider)
932
+ this.value = `${startFormatted},${endFormatted}`;
933
+ this.valueChanged.emit(this.value);
934
+ // Legacy support (deprecated) - sync props
935
+ const legacyRange = { start: startFormatted, end: endFormatted };
936
+ this.rangeDateChange.emit(legacyRange);
937
+ // eslint-disable-next-line @stencil-community/strict-mutable
938
+ this.rangeValue = legacyRange;
638
939
  if (!this.showActions) {
639
940
  const event = new CustomEvent('closePopover', {
640
941
  bubbles: true,
@@ -652,79 +953,28 @@ const NvCalendar = class {
652
953
  this.forceCalendarUpdate = newDate => {
653
954
  this.currentDate = new Date(newDate);
654
955
  };
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
956
  /**
715
957
  * Resets the current selection
716
958
  */
717
959
  this.resetSelection = () => {
718
960
  if (this.selectionType === 'single') {
719
961
  this.selectedDate = null;
962
+ // eslint-disable-next-line @stencil-community/strict-mutable
720
963
  this.singleValue = null;
964
+ // eslint-disable-next-line @stencil-community/strict-mutable
965
+ this.value = '';
721
966
  this.singleDateChange.emit('');
967
+ this.valueChanged.emit('');
722
968
  }
723
969
  else {
724
970
  this.startDate = null;
725
971
  this.endDate = null;
972
+ // eslint-disable-next-line @stencil-community/strict-mutable
726
973
  this.rangeValue = null;
974
+ // eslint-disable-next-line @stencil-community/strict-mutable
975
+ this.value = '';
727
976
  this.rangeDateChange.emit({ start: '', end: '' });
977
+ this.valueChanged.emit('');
728
978
  }
729
979
  };
730
980
  /**
@@ -736,6 +986,7 @@ const NvCalendar = class {
736
986
  dateFormat: this.dateFormat,
737
987
  });
738
988
  this.singleDateChange.emit(dateStr);
989
+ // eslint-disable-next-line @stencil-community/strict-mutable
739
990
  this.singleValue = dateStr;
740
991
  const event = new CustomEvent('closePopover', {
741
992
  bubbles: true,
@@ -750,6 +1001,7 @@ const NvCalendar = class {
750
1001
  start: formatDate(this.startDate, { dateFormat: this.dateFormat }),
751
1002
  end: formatDate(this.endDate, { dateFormat: this.dateFormat }),
752
1003
  });
1004
+ // eslint-disable-next-line @stencil-community/strict-mutable
753
1005
  this.rangeValue = {
754
1006
  start: formatDate(this.startDate, { dateFormat: this.dateFormat }),
755
1007
  end: formatDate(this.endDate, { dateFormat: this.dateFormat }),
@@ -772,8 +1024,7 @@ const NvCalendar = class {
772
1024
  * @description Renders the header of the calendar
773
1025
  */
774
1026
  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" }))));
1027
+ 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
1028
  };
778
1029
  /**
779
1030
  * Renders the week numbers
@@ -787,42 +1038,7 @@ const NvCalendar = class {
787
1038
  weeks,
788
1039
  /** Calendar index */
789
1040
  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
- })));
1041
+ return (h(WeekNumbers, { weeks: weeks, localizedWeekText: this.getLocalizedWeekText(), selectionType: this.selectionType, onWeekSelect: this.handleWeekSelection, calendarIndex: index }));
826
1042
  };
827
1043
  /**
828
1044
  * Renders the calendar
@@ -841,7 +1057,7 @@ const NvCalendar = class {
841
1057
  for (let i = 0; i < days.length; i += 7) {
842
1058
  weeks.push(days.slice(i, i + 7));
843
1059
  }
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" }))));
1060
+ 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
1061
  };
846
1062
  /**
847
1063
  * Renders the shortcuts
@@ -852,7 +1068,7 @@ const NvCalendar = class {
852
1068
  if (!this.hasShortcuts) {
853
1069
  return null;
854
1070
  }
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)))));
1071
+ return (h(CalendarShortcuts, { shortcuts: this.shortcuts, placement: this.shortcutsPlacement, onShortcutClick: this.applyShortcut }));
856
1072
  };
857
1073
  /**
858
1074
  * Renders the actions
@@ -861,7 +1077,7 @@ const NvCalendar = class {
861
1077
  * @slot actions - Child content of the component.
862
1078
  */
863
1079
  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"))));
1080
+ return (h("div", { class: "datepicker-actions" }, h("slot", { name: "actions" }, h(CalendarActions, { onReset: this.resetSelection, onConfirm: this.confirmSelection, useSlot: false }))));
865
1081
  };
866
1082
  }
867
1083
  //#endregion EVENTS
@@ -925,12 +1141,26 @@ const NvCalendar = class {
925
1141
  }
926
1142
  }
927
1143
  }
1144
+ /**
1145
+ * Watches the changes of the unified value prop
1146
+ * @param {string} newValue - New value
1147
+ * @param {string} oldValue - Old value
1148
+ */
1149
+ onValueChange(newValue, oldValue) {
1150
+ if (newValue !== oldValue) {
1151
+ this.parseUnifiedValue(newValue);
1152
+ }
1153
+ }
928
1154
  //#endregion WATCHERS
929
1155
  /****************************************************************************/
930
1156
  //#region LIFECYCLE
931
1157
  componentWillLoad() {
932
1158
  this.parseDisabledDates();
933
- if (this.selectionType === 'single' && this.singleValue) {
1159
+ // Initialize from unified value prop if provided
1160
+ if (this.value) {
1161
+ this.parseUnifiedValue(this.value);
1162
+ }
1163
+ else if (this.selectionType === 'single' && this.singleValue) {
934
1164
  this.selectedDate = parseDate(this.singleValue, this.dateFormat);
935
1165
  this.currentDate = this.selectedDate;
936
1166
  }
@@ -943,6 +1173,7 @@ const NvCalendar = class {
943
1173
  this.currentDate = startDate;
944
1174
  if (swapped) {
945
1175
  // If dates were swapped, update the rangeValue property
1176
+ // eslint-disable-next-line @stencil-community/strict-mutable
946
1177
  this.rangeValue = {
947
1178
  start: formatDate(startDate, { dateFormat: this.dateFormat }),
948
1179
  end: formatDate(endDate, { dateFormat: this.dateFormat }),
@@ -954,7 +1185,8 @@ const NvCalendar = class {
954
1185
  console.error('Invalid rangeValue:', error);
955
1186
  }
956
1187
  }
957
- else {
1188
+ // Ensure currentDate is always initialized
1189
+ if (!this.currentDate) {
958
1190
  this.currentDate = new Date();
959
1191
  }
960
1192
  this.initializeMonths();
@@ -1024,15 +1256,16 @@ const NvCalendar = class {
1024
1256
  * @slot default - Child content of the component.
1025
1257
  */
1026
1258
  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' })));
1259
+ 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') ||
1260
+ this.hasActions) && (h("div", { key: '1765334bf15564bc9886b210c54bddba64c7042e', class: "datepicker-controls" }, this.shortcutsPlacement === 'bottom' && this.renderShortcuts(), this.hasActions && this.renderActions())))), h("slot", { key: '0ac3446394b8c23b859e5f0065370b95b6fd05d2' })));
1029
1261
  }
1030
1262
  get el() { return getElement(this); }
1031
1263
  static get watchers() { return {
1032
1264
  "numberOfCalendars": ["validateNumberOfCalendars"],
1033
1265
  "rangeValue": ["onRangeValueChange"],
1034
1266
  "disabledDates": ["handleDisabledDatesChange"],
1035
- "singleValue": ["onSingleValueChange"]
1267
+ "singleValue": ["onSingleValueChange"],
1268
+ "value": ["onValueChange"]
1036
1269
  }; }
1037
1270
  };
1038
1271
  NvCalendar.style = NvCalendarStyle0;