@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,9 +1,5 @@
1
- import { p as proxyCustomElement, H, c as createEvent, h, d as Host } from './p-679e0fa9.js';
1
+ import { h, p as proxyCustomElement, H, c as createEvent, d as Host } from './p-aff3ed68.js';
2
2
  import { C as CUSTOM_DAY_NAMES, b as CUSTOM_MONTH_NAMES, W as WEEK_ABBREVIATIONS } from './p-1f505531.js';
3
- import { d as defineCustomElement$4 } from './p-cbe9521f.js';
4
- import { d as defineCustomElement$3 } from './p-76a30bf1.js';
5
- import { d as defineCustomElement$2 } from './p-04cb3a6f.js';
6
- import { d as defineCustomElement$1 } from './p-83c8873a.js';
7
3
 
8
4
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
9
5
 
@@ -165,9 +161,18 @@ function isSameOrAfter(date, compareDate, options) {
165
161
  * @returns {number} Week number
166
162
  */
167
163
  function getWeekNumber(date) {
168
- const startOfYear = new Date(date.getFullYear(), 0, 1);
169
- const pastDaysOfYear = (date.getTime() - startOfYear.getTime()) / 86400000;
170
- return Math.ceil((pastDaysOfYear + startOfYear.getDay() + 1) / 7);
164
+ // Create a copy of the date to avoid modifying the original
165
+ const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
166
+ // Adjust to the same week Thursday (ISO 8601)
167
+ d.setUTCDate(d.getUTCDate() + 3 - ((d.getUTCDay() + 6) % 7));
168
+ // Calculate the first Thursday of the year
169
+ const week1 = new Date(Date.UTC(d.getUTCFullYear(), 0, 4));
170
+ // Calculate the week number
171
+ return (1 +
172
+ Math.round(((d.getTime() - week1.getTime()) / 86400000 -
173
+ 3 +
174
+ ((week1.getUTCDay() + 6) % 7)) /
175
+ 7));
171
176
  }
172
177
  /**
173
178
  * Convert a date string/Date to a Date without timezone offset
@@ -241,6 +246,175 @@ function parseDate(dateInput, dateFormat) {
241
246
  return parsed.toDate();
242
247
  }
243
248
 
249
+ /**
250
+ * Renders a single day cell in the calendar grid
251
+ * @param {DayCellProps} props - Component properties
252
+ * @returns {JSX.Element} JSX element representing a day cell
253
+ */
254
+ const DayCell = props => {
255
+ const { date, dayOfMonth, isCurrentMonth, isSelected, isInRange, isStart, isEnd, isToday, isDisabled, onClick, } = props;
256
+ // Build CSS classes for the day cell
257
+ const dayClasses = [
258
+ 'day',
259
+ isSelected ? 'selected' : '',
260
+ isStart ? 'range-start' : '',
261
+ isEnd ? 'range-end' : '',
262
+ isInRange ? 'in-range' : '',
263
+ isDisabled ? 'disabled' : '',
264
+ !isCurrentMonth ? 'outside-month' : '',
265
+ isToday ? 'is-today' : '',
266
+ ]
267
+ .filter(Boolean)
268
+ .join(' ');
269
+ const handleClick = () => {
270
+ if (!isDisabled && onClick) {
271
+ onClick(date);
272
+ }
273
+ };
274
+ return (
275
+ // eslint-disable-next-line react/jsx-no-bind
276
+ h("div", { class: dayClasses, onClick: handleClick, "aria-disabled": isDisabled }, dayOfMonth));
277
+ };
278
+
279
+ /**
280
+ * Renders the action buttons for the calendar (Cancel/OK)
281
+ * @param {CalendarActionsProps} props - Component properties
282
+ * @returns {JSX.Element} JSX element representing the action buttons
283
+ */
284
+ const CalendarActions = props => {
285
+ const { onReset, onConfirm, useSlot = false } = props;
286
+ return (h("div", { class: "datepicker-actions" }, useSlot ? (h("slot", { name: "actions" },
287
+ h("nv-button", { emphasis: "low", size: "xs", onClick: onReset }, "Cancel"),
288
+ h("nv-button", { size: "xs", onClick: onConfirm }, "OK"))) : (h("div", null,
289
+ h("nv-button", { emphasis: "low", size: "xs", onClick: onReset }, "Cancel"),
290
+ h("nv-button", { size: "xs", onClick: onConfirm }, "OK")))));
291
+ };
292
+
293
+ /**
294
+ * Renders the week numbers column for the calendar
295
+ * @param {WeekNumbersProps} props - Component properties
296
+ * @returns {JSX.Element} JSX element representing the week numbers
297
+ */
298
+ const WeekNumbers = props => {
299
+ const { weeks, localizedWeekText, selectionType, onWeekSelect, calendarIndex, } = props;
300
+ /**
301
+ * Handles click on a week number for range selection
302
+ * @param {Array<WeekData>} week - Week data
303
+ */
304
+ const handleWeekClick = (week) => {
305
+ if (selectionType === 'range') {
306
+ const dates = week.map(d => d.date);
307
+ onWeekSelect(dates, calendarIndex);
308
+ }
309
+ };
310
+ /**
311
+ * Creates a click handler for a specific week
312
+ * @param {Array<WeekData>} week - Week data
313
+ * @returns {() => void} Click handler function
314
+ */
315
+ const createWeekHandler = (week) => {
316
+ return () => handleWeekClick(week);
317
+ };
318
+ return (h("div", { class: "week-numbers" },
319
+ h("div", { class: "week-header" }, localizedWeekText),
320
+ weeks.map((week, weekIndex) => {
321
+ var _a;
322
+ const firstDayWithDate = ((_a = week.find(d => d.date)) === null || _a === void 0 ? void 0 : _a.date) || new Date();
323
+ const weekNumber = getWeekNumber(firstDayWithDate);
324
+ const isClickable = selectionType === 'range';
325
+ return (h("div", { class: `week-number ${isClickable ? 'clickable' : ''}`, onClick: createWeekHandler(week), key: `week-${weekIndex}`, role: isClickable ? 'button' : undefined, tabindex: isClickable ? 0 : undefined }, weekNumber));
326
+ })));
327
+ };
328
+
329
+ /**
330
+ * Renders the shortcuts for quick date selection
331
+ * @param {CalendarShortcutsProps} props - Component properties
332
+ * @returns {JSX.Element | null} JSX element representing the shortcuts or null if no shortcuts
333
+ */
334
+ const CalendarShortcuts = props => {
335
+ const { shortcuts, placement, onShortcutClick } = props;
336
+ if (!shortcuts || shortcuts.length === 0) {
337
+ return null;
338
+ }
339
+ /**
340
+ * Creates a click handler for a specific shortcut
341
+ * @param {ShortcutData} shortcut - The shortcut data
342
+ * @returns {() => void} Click handler function
343
+ */
344
+ const createShortcutHandler = (shortcut) => {
345
+ return () => onShortcutClick(shortcut);
346
+ };
347
+ 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)))));
348
+ };
349
+
350
+ /**
351
+ * Renders the calendar header with navigation and date controls
352
+ * @param {CalendarHeaderProps} props - Component properties
353
+ * @returns {JSX.Element} JSX element representing the calendar header
354
+ */
355
+ const CalendarHeader = props => {
356
+ const { currentDate, months, numberOfCalendars, calendarIndex, monthOffset, onMonthChange, onMonthSelect, onYearChange, } = props;
357
+ /**
358
+ * Creates navigation handler for month change
359
+ * @param {number} direction - Direction of navigation (-1 or 1)
360
+ * @returns {() => void} Navigation handler function
361
+ */
362
+ const createNavigationHandler = (direction) => {
363
+ return () => onMonthChange(direction);
364
+ };
365
+ /**
366
+ * Creates month selection handler
367
+ * @param {number} offset - Month offset
368
+ * @returns {(event: Event) => void} Month selection handler function
369
+ */
370
+ const createMonthSelectHandler = (offset) => {
371
+ return (event) => onMonthSelect(event, offset);
372
+ };
373
+ /**
374
+ * Creates year change handler
375
+ * @param {number} offset - Month offset
376
+ * @returns {(event: Event) => void} Year change handler function
377
+ */
378
+ const createYearChangeHandler = (offset) => {
379
+ return (event) => onYearChange(event, offset);
380
+ };
381
+ const currentMonth = (currentDate.getUTCMonth() + monthOffset) % 12;
382
+ const currentYear = currentDate.getUTCFullYear() +
383
+ Math.floor((currentDate.getUTCMonth() + monthOffset) / 12);
384
+ return (h("div", { class: "header" },
385
+ numberOfCalendars > 1 && calendarIndex === 0 && (h("nv-iconbutton", { class: "nav-left", emphasis: "lower", name: "chevron-left", onClick: createNavigationHandler(-1) })),
386
+ h("div", { class: "date-controls" },
387
+ 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)))),
388
+ h("input", { type: "number", class: "year-input", min: "1950", max: "2100", value: currentYear, onChange: createYearChangeHandler(monthOffset) })),
389
+ numberOfCalendars === 1 && (h("div", { class: "nav-buttons" },
390
+ h("nv-iconbutton", { emphasis: "lower", name: "chevron-left", onClick: createNavigationHandler(-1) }),
391
+ h("nv-iconbutton", { emphasis: "lower", name: "chevron-right", onClick: createNavigationHandler(1) }))),
392
+ numberOfCalendars > 1 && calendarIndex === numberOfCalendars - 1 && (h("nv-iconbutton", { emphasis: "lower", name: "chevron-right", onClick: createNavigationHandler(1), class: "nav-right" }))));
393
+ };
394
+
395
+ /**
396
+ * Renders the calendar grid with day headers and day cells
397
+ * @param {CalendarGridProps} props - Component properties
398
+ * @returns {JSX.Element} JSX element representing the calendar grid
399
+ */
400
+ const CalendarGrid = props => {
401
+ const { days, dayNames, selectionType, selectedDate, startDate, endDate, isUTCMode, onDayClick, isDateInRange, isToday, } = props;
402
+ return (h("div", { class: "days-container" },
403
+ h("div", { class: "days-header" }, dayNames.map((day, index) => (h("div", { class: "day-header", key: `day-header-${index}` }, day)))),
404
+ h("div", { class: "days-grid" }, days.map(day => {
405
+ const date = day.date;
406
+ if (!date)
407
+ return null;
408
+ const isSelected = selectionType === 'single' &&
409
+ isSameDate(date, selectedDate, { isUTCMode });
410
+ const isInRange = isDateInRange(date);
411
+ const isStart = isSameDate(date, startDate, { isUTCMode });
412
+ const isEnd = isSameDate(date, endDate, { isUTCMode });
413
+ const isTodayDate = isToday(date);
414
+ 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 }));
415
+ }))));
416
+ };
417
+
244
418
  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)}}";
245
419
  const NvCalendarStyle0 = nvCalendarCss;
246
420
 
@@ -250,18 +424,28 @@ const NvCalendar = /*@__PURE__*/ proxyCustomElement(class NvCalendar extends H {
250
424
  this.__registerHost();
251
425
  this.singleDateChange = createEvent(this, "singleDateChange", 7);
252
426
  this.rangeDateChange = createEvent(this, "rangeDateChange", 7);
427
+ this.valueChanged = createEvent(this, "valueChanged", 7);
253
428
  /****************************************************************************/
254
429
  //#region PROPERTIES
255
430
  /**
256
431
  * First day of the week (0 = Sunday, 1 = Monday, etc.)
257
- * @default 0
432
+ * @default 1
258
433
  */
259
- this.firstDayOfWeek = 0;
434
+ this.firstDayOfWeek = 1;
260
435
  /**
261
436
  * Number of calendars to display
262
437
  * @default 1
263
438
  */
264
439
  this.numberOfCalendars = 1;
440
+ /**
441
+ * Selected date value. For single mode: ISO date string. For range mode: comma-separated ISO date strings.
442
+ * Examples:
443
+ * - Single: "2025-03-15"
444
+ * - Range: "2025-03-15,2025-03-20"
445
+ * @default ""
446
+ */
447
+ // eslint-disable-next-line @stencil-community/strict-mutable
448
+ this.value = '';
265
449
  /**
266
450
  * Locale for date formatting
267
451
  * @default 'en-BE'
@@ -299,6 +483,75 @@ const NvCalendar = /*@__PURE__*/ proxyCustomElement(class NvCalendar extends H {
299
483
  this.endDate = null;
300
484
  /** List of formatted months for the selector */
301
485
  this.months = [];
486
+ /**
487
+ * Parses the unified value prop and synchronizes with internal state
488
+ * @param {string} value - Value to parse
489
+ */
490
+ this.parseUnifiedValue = (value) => {
491
+ if (!value) {
492
+ // Reset all selections
493
+ this.selectedDate = null;
494
+ this.startDate = null;
495
+ this.endDate = null;
496
+ return;
497
+ }
498
+ const values = value
499
+ .split(',')
500
+ .map(v => v.trim())
501
+ .filter(Boolean);
502
+ if (this.selectionType === 'single' && values.length >= 1) {
503
+ const parsedDate = parseDate(values[0], this.dateFormat);
504
+ if (parsedDate) {
505
+ this.selectedDate = parsedDate;
506
+ // Only sync with legacy prop if not using actions (immediate mode)
507
+ if (!this.showActions) {
508
+ this.singleValue = values[0];
509
+ }
510
+ // Navigate to the date if not prevented
511
+ const preventNavigation = this.el.getAttribute('data-prevent-navigation') === 'true';
512
+ if (!preventNavigation) {
513
+ this.currentDate = parsedDate;
514
+ }
515
+ }
516
+ else {
517
+ // Handle malformed date gracefully - reset state
518
+ console.warn(`Invalid date format: ${values[0]}`);
519
+ this.selectedDate = null;
520
+ if (!this.showActions) {
521
+ this.singleValue = '';
522
+ }
523
+ }
524
+ }
525
+ else if (this.selectionType === 'range' && values.length >= 2) {
526
+ const startDate = parseDate(values[0], this.dateFormat);
527
+ const endDate = parseDate(values[1], this.dateFormat);
528
+ if (startDate && endDate) {
529
+ this.startDate = startDate;
530
+ this.endDate = endDate;
531
+ // Only sync with legacy prop if not using actions (immediate mode)
532
+ if (!this.showActions) {
533
+ this.rangeValue = {
534
+ start: values[0],
535
+ end: values[1],
536
+ };
537
+ }
538
+ // Navigate to start date if not prevented
539
+ const preventNavigation = this.el.getAttribute('data-prevent-navigation') === 'true';
540
+ if (!preventNavigation) {
541
+ this.currentDate = startDate;
542
+ }
543
+ }
544
+ else {
545
+ // Handle malformed dates gracefully - reset state
546
+ console.warn(`Invalid date range format: ${values[0]}, ${values[1]}`);
547
+ this.startDate = null;
548
+ this.endDate = null;
549
+ if (!this.showActions) {
550
+ this.rangeValue = { start: '', end: '' };
551
+ }
552
+ }
553
+ }
554
+ };
302
555
  /**
303
556
  * Change the displayed month
304
557
  * @param {number} offset - Month offset (-1 for previous, 1 for next)
@@ -346,7 +599,14 @@ const NvCalendar = /*@__PURE__*/ proxyCustomElement(class NvCalendar extends H {
346
599
  return;
347
600
  const formattedDate = formatDate(date, { dateFormat: this.dateFormat });
348
601
  this.selectedDate = date;
349
- this.singleDateChange.emit(formattedDate);
602
+ // Update the unified value prop (like nv-fieldslider)
603
+ this.value = formattedDate;
604
+ this.valueChanged.emit(formattedDate);
605
+ // Legacy support (deprecated) - only sync props if not using actions
606
+ if (!this.showActions) {
607
+ this.singleValue = formattedDate;
608
+ this.singleDateChange.emit(formattedDate);
609
+ }
350
610
  };
351
611
  /**
352
612
  * Handles range date selection
@@ -354,18 +614,32 @@ const NvCalendar = /*@__PURE__*/ proxyCustomElement(class NvCalendar extends H {
354
614
  */
355
615
  this.handleRangeSelection = (date) => {
356
616
  if (!this.startDate || (this.startDate && this.endDate)) {
617
+ // Start new range selection
357
618
  this.startDate = date;
358
619
  this.endDate = null;
359
620
  }
360
621
  else {
622
+ // Complete range selection
361
623
  this.endDate = date;
624
+ // Ensure correct order
362
625
  if (this.startDate > this.endDate) {
363
626
  [this.startDate, this.endDate] = [this.endDate, this.startDate];
364
627
  }
365
- this.rangeDateChange.emit({
366
- start: formatDate(this.startDate, { dateFormat: this.dateFormat }),
367
- end: formatDate(this.endDate, { dateFormat: this.dateFormat }),
628
+ const startFormatted = formatDate(this.startDate, {
629
+ dateFormat: this.dateFormat,
368
630
  });
631
+ const endFormatted = formatDate(this.endDate, {
632
+ dateFormat: this.dateFormat,
633
+ });
634
+ // Update the unified value prop (like nv-fieldslider)
635
+ this.value = `${startFormatted},${endFormatted}`;
636
+ this.valueChanged.emit(this.value);
637
+ // Legacy support (deprecated) - only sync props if not using actions
638
+ if (!this.showActions) {
639
+ const legacyRange = { start: startFormatted, end: endFormatted };
640
+ this.rangeDateChange.emit(legacyRange);
641
+ this.rangeValue = legacyRange;
642
+ }
369
643
  }
370
644
  };
371
645
  /**
@@ -424,23 +698,35 @@ const NvCalendar = /*@__PURE__*/ proxyCustomElement(class NvCalendar extends H {
424
698
  * @returns {string[]} Array of short day names
425
699
  */
426
700
  this.getDayNames = () => {
701
+ let days;
427
702
  // If we have custom day names for this locale
428
703
  if (CUSTOM_DAY_NAMES[this.locale]) {
429
- const days = [...CUSTOM_DAY_NAMES[this.locale]];
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];
704
+ // Custom day names are expected to start with Monday (index 0 = Monday)
705
+ days = [...CUSTOM_DAY_NAMES[this.locale]];
706
+ }
707
+ else {
708
+ // Generate days using Intl.DateTimeFormat, starting from Monday
709
+ const formatter = new Intl.DateTimeFormat(this.locale, {
710
+ weekday: 'short',
711
+ });
712
+ // Generate days starting from Monday (2023-01-02 was a Monday)
713
+ days = [...Array(7)].map((_, i) => formatter.format(new Date(2023, 0, i + 2)).toUpperCase());
714
+ }
715
+ // Now reorganize based on firstDayOfWeek
716
+ // 0 = Sunday, 1 = Monday (default), 2 = Tuesday, etc.
717
+ if (this.firstDayOfWeek === 0) {
718
+ // If Sunday is first day, move Sunday (last element) to the beginning
719
+ return [days[6], ...days.slice(0, 6)];
720
+ }
721
+ else if (this.firstDayOfWeek === 1) {
722
+ // If Monday is first day, return as-is (since our array starts with Monday)
723
+ return days;
724
+ }
725
+ else {
726
+ // For other first days (Tuesday=2, Wednesday=3, etc.)
727
+ const offset = this.firstDayOfWeek - 1; // Convert to 0-based offset from Monday
728
+ return [...days.slice(offset), ...days.slice(0, offset)];
434
729
  }
435
- // Otherwise, use the default behavior
436
- const formatter = new Intl.DateTimeFormat(this.locale, {
437
- weekday: 'short',
438
- });
439
- const days = [...Array(7)].map((_, i) => formatter.format(new Date(2023, 0, i + 1)).toUpperCase());
440
- // Reorganize the days based on the first day of the week
441
- const firstDays = days.slice(0, this.firstDayOfWeek);
442
- const remainingDays = days.slice(this.firstDayOfWeek);
443
- return [...remainingDays, ...firstDays];
444
730
  };
445
731
  /**
446
732
  * Generates the days of the current month
@@ -621,8 +907,15 @@ const NvCalendar = /*@__PURE__*/ proxyCustomElement(class NvCalendar extends H {
621
907
  if (shortcut.singleValue) {
622
908
  const newDate = parseDate(shortcut.singleValue, this.dateFormat);
623
909
  this.selectedDate = newDate;
624
- this.singleDateChange.emit(formatDate(newDate, { dateFormat: this.dateFormat }));
625
- this.singleValue = formatDate(newDate, { dateFormat: this.dateFormat });
910
+ const formattedDate = formatDate(newDate, {
911
+ dateFormat: this.dateFormat,
912
+ });
913
+ // Update the unified value prop (like nv-fieldslider)
914
+ this.value = formattedDate;
915
+ this.valueChanged.emit(formattedDate);
916
+ // Legacy support (deprecated) - sync props
917
+ this.singleValue = formattedDate;
918
+ this.singleDateChange.emit(formattedDate);
626
919
  if (!this.showActions) {
627
920
  const event = new CustomEvent('closePopover', {
628
921
  bubbles: true,
@@ -637,14 +930,18 @@ const NvCalendar = /*@__PURE__*/ proxyCustomElement(class NvCalendar extends H {
637
930
  const end = parseDate(shortcut.rangeValue.end, this.dateFormat);
638
931
  this.startDate = start;
639
932
  this.endDate = end;
640
- this.rangeDateChange.emit({
641
- start: formatDate(start, { dateFormat: this.dateFormat }),
642
- end: formatDate(end, { dateFormat: this.dateFormat }),
933
+ const startFormatted = formatDate(start, {
934
+ dateFormat: this.dateFormat,
643
935
  });
644
- this.rangeValue = {
645
- start: formatDate(start, { dateFormat: this.dateFormat }),
646
- end: formatDate(end, { dateFormat: this.dateFormat }),
647
- };
936
+ const endFormatted = formatDate(end, { dateFormat: this.dateFormat });
937
+ // Update the unified value prop (like nv-fieldslider)
938
+ this.value = `${startFormatted},${endFormatted}`;
939
+ this.valueChanged.emit(this.value);
940
+ // Legacy support (deprecated) - sync props
941
+ const legacyRange = { start: startFormatted, end: endFormatted };
942
+ this.rangeDateChange.emit(legacyRange);
943
+ // eslint-disable-next-line @stencil-community/strict-mutable
944
+ this.rangeValue = legacyRange;
648
945
  if (!this.showActions) {
649
946
  const event = new CustomEvent('closePopover', {
650
947
  bubbles: true,
@@ -662,79 +959,28 @@ const NvCalendar = /*@__PURE__*/ proxyCustomElement(class NvCalendar extends H {
662
959
  this.forceCalendarUpdate = newDate => {
663
960
  this.currentDate = new Date(newDate);
664
961
  };
665
- /**
666
- * Handles month change with an offset
667
- * @param {number} direction - Direction (-1 for previous, 1 for next)
668
- * @returns {Function} Change month handler
669
- */
670
- this.getChangeMonthHandler = (direction) => {
671
- return () => this.changeMonth(direction);
672
- };
673
- /**
674
- * Handles month change from an event (ex: dropdown)
675
- * @param {number} offset - Month offset (0 by default)
676
- * @returns {Function} Change month handler
677
- */
678
- this.getHandleMonthChange = (offset) => {
679
- return (event) => this.handleMonthChange(event, offset);
680
- };
681
- /**
682
- * Handles year change from an event (ex: dropdown)
683
- * @param {number} offset - Year offset (0 by default)
684
- * @returns {Function} Change year handler
685
- */
686
- this.getHandleYearChange = (offset) => {
687
- return (event) => this.handleYearChange(event, offset);
688
- };
689
- /**
690
- * Handles day click
691
- * @param {Date} date - Date to handle
692
- * @param {boolean} isDisabled - Whether the date is disabled
693
- * @returns {Function} Day click handler
694
- */
695
- this.getDayClickHandler = (date, isDisabled) => {
696
- return isDisabled ? undefined : () => this.handleDateSelection(date);
697
- };
698
- /**
699
- * Handles shortcut selection
700
- * @param {Object} shortcut - Shortcut to handle
701
- * @param {string | Date} shortcut.singleValue - Selected date value
702
- * @param {Object} shortcut.rangeValue - Start and end date values
703
- * @param {string | Date} shortcut.rangeValue.start - Start date value
704
- * @param {string | Date} shortcut.rangeValue.end - End date value
705
- * @param {string} shortcut.label - Label
706
- * @returns {Function} Shortcut selection handler
707
- */
708
- this.getShortcutHandler = (shortcut) => {
709
- return () => this.applyShortcut(shortcut);
710
- };
711
- /**
712
- * Handles week selection
713
- * @param {Date[]} dates - Dates to handle
714
- * @param {number} index - Calendar index
715
- * @returns {Function} Week selection handler
716
- */
717
- this.getWeekSelectionHandler = (dates, index) => {
718
- return () => {
719
- if (this.selectionType === 'range') {
720
- this.handleWeekSelection(dates, index);
721
- }
722
- };
723
- };
724
962
  /**
725
963
  * Resets the current selection
726
964
  */
727
965
  this.resetSelection = () => {
728
966
  if (this.selectionType === 'single') {
729
967
  this.selectedDate = null;
968
+ // eslint-disable-next-line @stencil-community/strict-mutable
730
969
  this.singleValue = null;
970
+ // eslint-disable-next-line @stencil-community/strict-mutable
971
+ this.value = '';
731
972
  this.singleDateChange.emit('');
973
+ this.valueChanged.emit('');
732
974
  }
733
975
  else {
734
976
  this.startDate = null;
735
977
  this.endDate = null;
978
+ // eslint-disable-next-line @stencil-community/strict-mutable
736
979
  this.rangeValue = null;
980
+ // eslint-disable-next-line @stencil-community/strict-mutable
981
+ this.value = '';
737
982
  this.rangeDateChange.emit({ start: '', end: '' });
983
+ this.valueChanged.emit('');
738
984
  }
739
985
  };
740
986
  /**
@@ -746,6 +992,7 @@ const NvCalendar = /*@__PURE__*/ proxyCustomElement(class NvCalendar extends H {
746
992
  dateFormat: this.dateFormat,
747
993
  });
748
994
  this.singleDateChange.emit(dateStr);
995
+ // eslint-disable-next-line @stencil-community/strict-mutable
749
996
  this.singleValue = dateStr;
750
997
  const event = new CustomEvent('closePopover', {
751
998
  bubbles: true,
@@ -760,6 +1007,7 @@ const NvCalendar = /*@__PURE__*/ proxyCustomElement(class NvCalendar extends H {
760
1007
  start: formatDate(this.startDate, { dateFormat: this.dateFormat }),
761
1008
  end: formatDate(this.endDate, { dateFormat: this.dateFormat }),
762
1009
  });
1010
+ // eslint-disable-next-line @stencil-community/strict-mutable
763
1011
  this.rangeValue = {
764
1012
  start: formatDate(this.startDate, { dateFormat: this.dateFormat }),
765
1013
  end: formatDate(this.endDate, { dateFormat: this.dateFormat }),
@@ -782,8 +1030,7 @@ const NvCalendar = /*@__PURE__*/ proxyCustomElement(class NvCalendar extends H {
782
1030
  * @description Renders the header of the calendar
783
1031
  */
784
1032
  this.renderHeader = (offset, index) => {
785
- 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() +
786
- 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" }))));
1033
+ 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 }));
787
1034
  };
788
1035
  /**
789
1036
  * Renders the week numbers
@@ -797,42 +1044,7 @@ const NvCalendar = /*@__PURE__*/ proxyCustomElement(class NvCalendar extends H {
797
1044
  weeks,
798
1045
  /** Calendar index */
799
1046
  index) => {
800
- return (h("div", { class: "week-numbers" }, h("div", { class: "week-header" }, this.getLocalizedWeekText()), weeks.map((week, weekIndex) => {
801
- var _a;
802
- const dates = week.map(d => d.date);
803
- 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())));
804
- })));
805
- };
806
- this.renderDaysGrid = (
807
- /** Days to render */
808
- days) => {
809
- return (h("div", { class: "days-grid" }, days.map(day => {
810
- const date = day.date;
811
- if (!date)
812
- return null;
813
- const isSelected = this.selectionType === 'single' &&
814
- isSameDate(date, this.selectedDate, { isUTCMode: this.isUTCMode });
815
- const isInRange = this.isDateInRange(date);
816
- const isStart = isSameDate(date, this.startDate, {
817
- isUTCMode: this.isUTCMode,
818
- });
819
- const isEnd = isSameDate(date, this.endDate, {
820
- isUTCMode: this.isUTCMode,
821
- });
822
- const isToday = this.isToday(date);
823
- const isOutsideMonth = !day.isCurrentMonth;
824
- const dayClasses = [
825
- 'day',
826
- isSelected ? 'selected' : '',
827
- isStart ? 'range-start' : '',
828
- isEnd ? 'range-end' : '',
829
- isInRange ? 'in-range' : '',
830
- day.isDisabled ? 'disabled' : '',
831
- isOutsideMonth ? 'outside-month' : '',
832
- isToday ? 'is-today' : '',
833
- ];
834
- return (h("div", { class: dayClasses.filter(Boolean).join(' '), onClick: this.getDayClickHandler(date, day.isDisabled), "aria-disabled": day.isDisabled, key: `day-${date.toISOString()}` }, day.dayOfMonth));
835
- })));
1047
+ return (h(WeekNumbers, { weeks: weeks, localizedWeekText: this.getLocalizedWeekText(), selectionType: this.selectionType, onWeekSelect: this.handleWeekSelection, calendarIndex: index }));
836
1048
  };
837
1049
  /**
838
1050
  * Renders the calendar
@@ -851,7 +1063,7 @@ const NvCalendar = /*@__PURE__*/ proxyCustomElement(class NvCalendar extends H {
851
1063
  for (let i = 0; i < days.length; i += 7) {
852
1064
  weeks.push(days.slice(i, i + 7));
853
1065
  }
854
- 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" }))));
1066
+ 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" }))));
855
1067
  };
856
1068
  /**
857
1069
  * Renders the shortcuts
@@ -862,7 +1074,7 @@ const NvCalendar = /*@__PURE__*/ proxyCustomElement(class NvCalendar extends H {
862
1074
  if (!this.hasShortcuts) {
863
1075
  return null;
864
1076
  }
865
- 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)))));
1077
+ return (h(CalendarShortcuts, { shortcuts: this.shortcuts, placement: this.shortcutsPlacement, onShortcutClick: this.applyShortcut }));
866
1078
  };
867
1079
  /**
868
1080
  * Renders the actions
@@ -871,7 +1083,7 @@ const NvCalendar = /*@__PURE__*/ proxyCustomElement(class NvCalendar extends H {
871
1083
  * @slot actions - Child content of the component.
872
1084
  */
873
1085
  this.renderActions = () => {
874
- 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"))));
1086
+ return (h("div", { class: "datepicker-actions" }, h("slot", { name: "actions" }, h(CalendarActions, { onReset: this.resetSelection, onConfirm: this.confirmSelection, useSlot: false }))));
875
1087
  };
876
1088
  }
877
1089
  //#endregion EVENTS
@@ -935,12 +1147,26 @@ const NvCalendar = /*@__PURE__*/ proxyCustomElement(class NvCalendar extends H {
935
1147
  }
936
1148
  }
937
1149
  }
1150
+ /**
1151
+ * Watches the changes of the unified value prop
1152
+ * @param {string} newValue - New value
1153
+ * @param {string} oldValue - Old value
1154
+ */
1155
+ onValueChange(newValue, oldValue) {
1156
+ if (newValue !== oldValue) {
1157
+ this.parseUnifiedValue(newValue);
1158
+ }
1159
+ }
938
1160
  //#endregion WATCHERS
939
1161
  /****************************************************************************/
940
1162
  //#region LIFECYCLE
941
1163
  componentWillLoad() {
942
1164
  this.parseDisabledDates();
943
- if (this.selectionType === 'single' && this.singleValue) {
1165
+ // Initialize from unified value prop if provided
1166
+ if (this.value) {
1167
+ this.parseUnifiedValue(this.value);
1168
+ }
1169
+ else if (this.selectionType === 'single' && this.singleValue) {
944
1170
  this.selectedDate = parseDate(this.singleValue, this.dateFormat);
945
1171
  this.currentDate = this.selectedDate;
946
1172
  }
@@ -953,6 +1179,7 @@ const NvCalendar = /*@__PURE__*/ proxyCustomElement(class NvCalendar extends H {
953
1179
  this.currentDate = startDate;
954
1180
  if (swapped) {
955
1181
  // If dates were swapped, update the rangeValue property
1182
+ // eslint-disable-next-line @stencil-community/strict-mutable
956
1183
  this.rangeValue = {
957
1184
  start: formatDate(startDate, { dateFormat: this.dateFormat }),
958
1185
  end: formatDate(endDate, { dateFormat: this.dateFormat }),
@@ -964,7 +1191,8 @@ const NvCalendar = /*@__PURE__*/ proxyCustomElement(class NvCalendar extends H {
964
1191
  console.error('Invalid rangeValue:', error);
965
1192
  }
966
1193
  }
967
- else {
1194
+ // Ensure currentDate is always initialized
1195
+ if (!this.currentDate) {
968
1196
  this.currentDate = new Date();
969
1197
  }
970
1198
  this.initializeMonths();
@@ -1034,20 +1262,22 @@ const NvCalendar = /*@__PURE__*/ proxyCustomElement(class NvCalendar extends H {
1034
1262
  * @slot default - Child content of the component.
1035
1263
  */
1036
1264
  render() {
1037
- 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') ||
1038
- this.hasActions) && (h("div", { key: '4431e3f1221e9d47807d58af380dcaa91bf05c48', class: "datepicker-controls" }, this.shortcutsPlacement === 'bottom' && this.renderShortcuts(), this.hasActions && this.renderActions())))), h("slot", { key: '30386356bda72f4f12a28351084ab498ec95f5b9' })));
1265
+ 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') ||
1266
+ this.hasActions) && (h("div", { key: '1765334bf15564bc9886b210c54bddba64c7042e', class: "datepicker-controls" }, this.shortcutsPlacement === 'bottom' && this.renderShortcuts(), this.hasActions && this.renderActions())))), h("slot", { key: '0ac3446394b8c23b859e5f0065370b95b6fd05d2' })));
1039
1267
  }
1040
1268
  get el() { return this; }
1041
1269
  static get watchers() { return {
1042
1270
  "numberOfCalendars": ["validateNumberOfCalendars"],
1043
1271
  "rangeValue": ["onRangeValueChange"],
1044
1272
  "disabledDates": ["handleDisabledDatesChange"],
1045
- "singleValue": ["onSingleValueChange"]
1273
+ "singleValue": ["onSingleValueChange"],
1274
+ "value": ["onValueChange"]
1046
1275
  }; }
1047
1276
  static get style() { return NvCalendarStyle0; }
1048
1277
  }, [4, "nv-calendar", {
1049
1278
  "firstDayOfWeek": [514, "first-day-of-week"],
1050
1279
  "numberOfCalendars": [1538, "number-of-calendars"],
1280
+ "value": [1537],
1051
1281
  "singleValue": [1537, "single-value"],
1052
1282
  "rangeValue": [1040],
1053
1283
  "min": [513],
@@ -1069,43 +1299,24 @@ const NvCalendar = /*@__PURE__*/ proxyCustomElement(class NvCalendar extends H {
1069
1299
  "numberOfCalendars": ["validateNumberOfCalendars"],
1070
1300
  "rangeValue": ["onRangeValueChange"],
1071
1301
  "disabledDates": ["handleDisabledDatesChange"],
1072
- "singleValue": ["onSingleValueChange"]
1302
+ "singleValue": ["onSingleValueChange"],
1303
+ "value": ["onValueChange"]
1073
1304
  }]);
1074
1305
  function defineCustomElement() {
1075
1306
  if (typeof customElements === "undefined") {
1076
1307
  return;
1077
1308
  }
1078
- const components = ["nv-calendar", "nv-button", "nv-icon", "nv-iconbutton", "nv-loader"];
1309
+ const components = ["nv-calendar"];
1079
1310
  components.forEach(tagName => { switch (tagName) {
1080
1311
  case "nv-calendar":
1081
1312
  if (!customElements.get(tagName)) {
1082
1313
  customElements.define(tagName, NvCalendar);
1083
1314
  }
1084
1315
  break;
1085
- case "nv-button":
1086
- if (!customElements.get(tagName)) {
1087
- defineCustomElement$4();
1088
- }
1089
- break;
1090
- case "nv-icon":
1091
- if (!customElements.get(tagName)) {
1092
- defineCustomElement$3();
1093
- }
1094
- break;
1095
- case "nv-iconbutton":
1096
- if (!customElements.get(tagName)) {
1097
- defineCustomElement$2();
1098
- }
1099
- break;
1100
- case "nv-loader":
1101
- if (!customElements.get(tagName)) {
1102
- defineCustomElement$1();
1103
- }
1104
- break;
1105
1316
  } });
1106
1317
  }
1107
1318
  defineCustomElement();
1108
1319
 
1109
1320
  export { NvCalendar as N, commonjsGlobal as c, defineCustomElement as d, getDefaultExportFromCjs as g };
1110
1321
 
1111
- //# sourceMappingURL=p-4656efae.js.map
1322
+ //# sourceMappingURL=p-5e90b9b8.js.map