@nova-design-system/nova-webcomponents 3.5.0 → 3.7.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 (467) hide show
  1. package/dist/cjs/{timeline.animation-dbb9c5ea.js → collapse.animation-a129dc3f.js} +5 -26
  2. package/dist/cjs/collapse.animation-a129dc3f.js.map +1 -0
  3. package/dist/cjs/fade.animation-644b5c4d.js +70 -0
  4. package/dist/cjs/fade.animation-644b5c4d.js.map +1 -0
  5. package/dist/cjs/{grow.animation-a1f0bc22.js → grow.animation-6d003803.js} +5 -5
  6. package/dist/cjs/{grow.animation-a1f0bc22.js.map → grow.animation-6d003803.js.map} +1 -1
  7. package/dist/cjs/index-c56424e5.js +8 -0
  8. package/dist/cjs/index.cjs.js +6 -4
  9. package/dist/cjs/index.cjs.js.map +1 -1
  10. package/dist/cjs/loader.cjs.js +1 -1
  11. package/dist/cjs/native.cjs.js +1 -1
  12. package/dist/cjs/nv-accordion-item.cjs.entry.js +181 -0
  13. package/dist/cjs/nv-accordion-item.cjs.entry.js.map +1 -0
  14. package/dist/cjs/nv-accordion.cjs.entry.js +167 -0
  15. package/dist/cjs/nv-accordion.cjs.entry.js.map +1 -0
  16. package/dist/cjs/nv-alert.cjs.entry.js +6 -4
  17. package/dist/cjs/nv-alert.cjs.entry.js.map +1 -1
  18. package/dist/cjs/nv-avatar.cjs.entry.js +1 -1
  19. package/dist/cjs/nv-badge_2.cjs.entry.js +9 -7
  20. package/dist/cjs/nv-badge_2.cjs.entry.js.map +1 -1
  21. package/dist/cjs/nv-breadcrumb.cjs.entry.js +1 -1
  22. package/dist/cjs/nv-breadcrumbs.cjs.entry.js +1 -1
  23. package/dist/cjs/nv-button.cjs.entry.js +1 -1
  24. package/dist/cjs/nv-calendar.cjs.entry.js +96 -66
  25. package/dist/cjs/nv-calendar.cjs.entry.js.map +1 -1
  26. package/dist/cjs/nv-col.cjs.entry.js +1 -1
  27. package/dist/cjs/nv-datagrid.cjs.entry.js +2 -2
  28. package/dist/cjs/nv-datagridcolumn.cjs.entry.js +1 -1
  29. package/dist/cjs/nv-dialog.cjs.entry.js +19 -6
  30. package/dist/cjs/nv-dialog.cjs.entry.js.map +1 -1
  31. package/dist/cjs/nv-dialogfooter_2.cjs.entry.js +2 -2
  32. package/dist/cjs/nv-fieldcheckbox.cjs.entry.js +4 -4
  33. package/dist/cjs/nv-fieldcheckbox.cjs.entry.js.map +1 -1
  34. package/dist/cjs/nv-fielddate.cjs.entry.js +121 -35
  35. package/dist/cjs/nv-fielddate.cjs.entry.js.map +1 -1
  36. package/dist/cjs/nv-fielddaterange.cjs.entry.js +32 -4
  37. package/dist/cjs/nv-fielddaterange.cjs.entry.js.map +1 -1
  38. package/dist/cjs/nv-fielddropdown.cjs.entry.js +3 -3
  39. package/dist/cjs/nv-fielddropdownitem.cjs.entry.js +1 -1
  40. package/dist/cjs/nv-fieldmultiselect.cjs.entry.js +95 -102
  41. package/dist/cjs/nv-fieldmultiselect.cjs.entry.js.map +1 -1
  42. package/dist/cjs/nv-fieldnumber.cjs.entry.js +3 -3
  43. package/dist/cjs/nv-fieldpassword.cjs.entry.js +3 -3
  44. package/dist/cjs/nv-fieldradio.cjs.entry.js +3 -3
  45. package/dist/cjs/nv-fieldselect.cjs.entry.js +5 -5
  46. package/dist/cjs/nv-fieldslider.cjs.entry.js +53 -9
  47. package/dist/cjs/nv-fieldslider.cjs.entry.js.map +1 -1
  48. package/dist/cjs/nv-fieldtext.cjs.entry.js +3 -3
  49. package/dist/cjs/nv-fieldtextarea.cjs.entry.js +3 -3
  50. package/dist/cjs/nv-fieldtime.cjs.entry.js +10 -10
  51. package/dist/cjs/nv-fieldtime.cjs.entry.js.map +1 -1
  52. package/dist/cjs/nv-icon.cjs.entry.js +1 -1
  53. package/dist/cjs/nv-iconbutton_2.cjs.entry.js +2 -2
  54. package/dist/cjs/nv-menu.cjs.entry.js +1 -1
  55. package/dist/cjs/nv-menuitem.cjs.entry.js +1 -1
  56. package/dist/cjs/nv-popover.cjs.entry.js +4 -3
  57. package/dist/cjs/nv-popover.cjs.entry.js.map +1 -1
  58. package/dist/cjs/nv-row.cjs.entry.js +1 -1
  59. package/dist/cjs/nv-stack.cjs.entry.js +1 -1
  60. package/dist/cjs/nv-table.cjs.entry.js +2 -2
  61. package/dist/cjs/nv-toggle.cjs.entry.js +2 -2
  62. package/dist/cjs/nv-tooltip.cjs.entry.js +3 -2
  63. package/dist/cjs/nv-tooltip.cjs.entry.js.map +1 -1
  64. package/dist/cjs/{fade.animation-0d33d198.js → stylefire.es-717e022a.js} +1 -65
  65. package/dist/cjs/stylefire.es-717e022a.js.map +1 -0
  66. package/dist/cjs/timeline.animation-155e8839.js +25 -0
  67. package/dist/cjs/timeline.animation-155e8839.js.map +1 -0
  68. package/dist/collection/collection-manifest.json +2 -0
  69. package/dist/collection/components/nv-accordion/nv-accordion.docs.js +153 -0
  70. package/dist/collection/components/nv-accordion/nv-accordion.docs.js.map +1 -0
  71. package/dist/collection/components/nv-accordion/nv-accordion.js +310 -0
  72. package/dist/collection/components/nv-accordion/nv-accordion.js.map +1 -0
  73. package/dist/collection/components/nv-accordion/styles/nv-accordion.css +15 -0
  74. package/dist/collection/components/nv-accordion-item/nv-accordion-item.docs.js +6 -0
  75. package/dist/collection/components/nv-accordion-item/nv-accordion-item.docs.js.map +1 -0
  76. package/dist/collection/components/nv-accordion-item/nv-accordion-item.js +353 -0
  77. package/dist/collection/components/nv-accordion-item/nv-accordion-item.js.map +1 -0
  78. package/dist/collection/components/nv-accordion-item/styles/nv-accordion-item.css +66 -0
  79. package/dist/collection/components/nv-alert/nv-alert.js +1 -1
  80. package/dist/collection/components/nv-avatar/nv-avatar.js +1 -1
  81. package/dist/collection/components/nv-badge/nv-badge.js +2 -2
  82. package/dist/collection/components/nv-breadcrumb/nv-breadcrumb.js +1 -1
  83. package/dist/collection/components/nv-breadcrumbs/nv-breadcrumbs.js +1 -1
  84. package/dist/collection/components/nv-button/nv-button.js +1 -1
  85. package/dist/collection/components/nv-calendar/nv-calendar.css +10 -0
  86. package/dist/collection/components/nv-calendar/nv-calendar.js +110 -43
  87. package/dist/collection/components/nv-calendar/nv-calendar.js.map +1 -1
  88. package/dist/collection/components/nv-calendar/nv-calendar.utils.js +0 -20
  89. package/dist/collection/components/nv-calendar/nv-calendar.utils.js.map +1 -1
  90. package/dist/collection/components/nv-calendar/partials/calendar-grid.js +6 -2
  91. package/dist/collection/components/nv-calendar/partials/calendar-grid.js.map +1 -1
  92. package/dist/collection/components/nv-calendar/test/nv-calendar.utils.test.js +5 -31
  93. package/dist/collection/components/nv-calendar/test/nv-calendar.utils.test.js.map +1 -1
  94. package/dist/collection/components/nv-col/nv-col.js +1 -1
  95. package/dist/collection/components/nv-datagrid/nv-datagrid.js +2 -2
  96. package/dist/collection/components/nv-datagridcolumn/nv-datagridcolumn.js +1 -1
  97. package/dist/collection/components/nv-dialog/nv-dialog.css +1 -1
  98. package/dist/collection/components/nv-dialog/nv-dialog.js +38 -5
  99. package/dist/collection/components/nv-dialog/nv-dialog.js.map +1 -1
  100. package/dist/collection/components/nv-dialogfooter/nv-dialogfooter.js +1 -1
  101. package/dist/collection/components/nv-dialogheader/nv-dialogheader.js +1 -1
  102. package/dist/collection/components/nv-fieldcheckbox/nv-fieldcheckbox.js +6 -4
  103. package/dist/collection/components/nv-fieldcheckbox/nv-fieldcheckbox.js.map +1 -1
  104. package/dist/collection/components/nv-fielddate/nv-fielddate.js +148 -34
  105. package/dist/collection/components/nv-fielddate/nv-fielddate.js.map +1 -1
  106. package/dist/collection/components/nv-fielddate/styles/nv-fielddate.css +2 -0
  107. package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.js +61 -4
  108. package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.js.map +1 -1
  109. package/dist/collection/components/nv-fielddropdown/nv-fielddropdown.js +3 -3
  110. package/dist/collection/components/nv-fielddropdownitem/nv-fielddropdownitem.js +1 -1
  111. package/dist/collection/components/nv-fielddropdownitemcheck/nv-fielddropdownitemcheck.js +7 -1
  112. package/dist/collection/components/nv-fielddropdownitemcheck/nv-fielddropdownitemcheck.js.map +1 -1
  113. package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.docs.js +44 -34
  114. package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.docs.js.map +1 -1
  115. package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.js +127 -117
  116. package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.js.map +1 -1
  117. package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.js +3 -3
  118. package/dist/collection/components/nv-fieldpassword/nv-fieldpassword.js +3 -3
  119. package/dist/collection/components/nv-fieldradio/nv-fieldradio.js +3 -3
  120. package/dist/collection/components/nv-fieldselect/nv-fieldselect.js +5 -5
  121. package/dist/collection/components/nv-fieldslider/nv-fieldslider.js +3 -3
  122. package/dist/collection/components/nv-fieldslider/nv-fieldslider.js.map +1 -1
  123. package/dist/collection/components/nv-fieldslider/nv-fieldslider.utils.js +45 -1
  124. package/dist/collection/components/nv-fieldslider/nv-fieldslider.utils.js.map +1 -1
  125. package/dist/collection/components/nv-fieldslider/partials/range-thumb.js +4 -4
  126. package/dist/collection/components/nv-fieldslider/partials/range-thumb.js.map +1 -1
  127. package/dist/collection/components/nv-fieldslider/partials/single-thumb.js +3 -3
  128. package/dist/collection/components/nv-fieldslider/partials/single-thumb.js.map +1 -1
  129. package/dist/collection/components/nv-fieldslider/test/nv-fieldslider.utils.test.js +42 -1
  130. package/dist/collection/components/nv-fieldslider/test/nv-fieldslider.utils.test.js.map +1 -1
  131. package/dist/collection/components/nv-fieldtext/nv-fieldtext.js +3 -3
  132. package/dist/collection/components/nv-fieldtextarea/nv-fieldtextarea.js +3 -3
  133. package/dist/collection/components/nv-fieldtime/nv-fieldtime.js +9 -9
  134. package/dist/collection/components/nv-fieldtime/nv-fieldtime.js.map +1 -1
  135. package/dist/collection/components/nv-fieldtime/styles/nv-fieldtime.css +11 -13
  136. package/dist/collection/components/nv-icon/nv-icon.js +1 -1
  137. package/dist/collection/components/nv-iconbutton/nv-iconbutton.js +1 -1
  138. package/dist/collection/components/nv-loader/nv-loader.js +1 -1
  139. package/dist/collection/components/nv-menu/nv-menu.js +1 -1
  140. package/dist/collection/components/nv-menuitem/nv-menuitem.js +1 -1
  141. package/dist/collection/components/nv-popover/nv-popover.js +1 -1
  142. package/dist/collection/components/nv-row/nv-row.js +1 -1
  143. package/dist/collection/components/nv-stack/nv-stack.js +1 -1
  144. package/dist/collection/components/nv-table/nv-table.js +2 -2
  145. package/dist/collection/components/nv-toggle/nv-toggle.js +2 -2
  146. package/dist/collection/components/nv-tooltip/nv-tooltip.js +21 -3
  147. package/dist/collection/components/nv-tooltip/nv-tooltip.js.map +1 -1
  148. package/dist/components/index.js +4 -3
  149. package/dist/components/index.js.map +1 -1
  150. package/dist/components/nv-accordion-item.d.ts +11 -0
  151. package/dist/components/nv-accordion-item.js +8 -0
  152. package/dist/components/nv-accordion-item.js.map +1 -0
  153. package/dist/components/nv-accordion.d.ts +11 -0
  154. package/dist/components/nv-accordion.js +212 -0
  155. package/dist/components/nv-accordion.js.map +1 -0
  156. package/dist/components/nv-alert.js +6 -4
  157. package/dist/components/nv-alert.js.map +1 -1
  158. package/dist/components/nv-avatar.js +2 -2
  159. package/dist/components/nv-badge.js +1 -1
  160. package/dist/components/nv-breadcrumb.js +3 -3
  161. package/dist/components/nv-breadcrumbs.js +1 -1
  162. package/dist/components/nv-button.js +1 -1
  163. package/dist/components/nv-calendar.js +1 -1
  164. package/dist/components/nv-col.js +1 -1
  165. package/dist/components/nv-datagrid.js +4 -4
  166. package/dist/components/nv-datagridcolumn.js +1 -1
  167. package/dist/components/nv-dialog.js +25 -11
  168. package/dist/components/nv-dialog.js.map +1 -1
  169. package/dist/components/nv-dialogfooter.js +1 -1
  170. package/dist/components/nv-dialogheader.js +1 -1
  171. package/dist/components/nv-fieldcheckbox.js +1 -1
  172. package/dist/components/nv-fielddate.js +130 -42
  173. package/dist/components/nv-fielddate.js.map +1 -1
  174. package/dist/components/nv-fielddaterange.js +40 -11
  175. package/dist/components/nv-fielddaterange.js.map +1 -1
  176. package/dist/components/nv-fielddropdown.js +8 -8
  177. package/dist/components/nv-fielddropdownitem.js +1 -1
  178. package/dist/components/nv-fielddropdownitemcheck.js +1 -1
  179. package/dist/components/nv-fieldmultiselect.js +104 -112
  180. package/dist/components/nv-fieldmultiselect.js.map +1 -1
  181. package/dist/components/nv-fieldnumber.js +1 -1
  182. package/dist/components/nv-fieldpassword.js +6 -6
  183. package/dist/components/nv-fieldradio.js +3 -3
  184. package/dist/components/nv-fieldselect.js +8 -8
  185. package/dist/components/nv-fieldslider.js +57 -13
  186. package/dist/components/nv-fieldslider.js.map +1 -1
  187. package/dist/components/nv-fieldtext.js +1 -1
  188. package/dist/components/nv-fieldtextarea.js +3 -3
  189. package/dist/components/nv-fieldtime.js +14 -14
  190. package/dist/components/nv-fieldtime.js.map +1 -1
  191. package/dist/components/nv-icon.js +1 -1
  192. package/dist/components/nv-iconbutton.js +1 -1
  193. package/dist/components/nv-loader.js +1 -1
  194. package/dist/components/nv-menu.js +4 -4
  195. package/dist/components/nv-menuitem.js +1 -1
  196. package/dist/components/nv-popover.js +1 -1
  197. package/dist/components/nv-row.js +1 -1
  198. package/dist/components/nv-stack.js +1 -1
  199. package/dist/components/nv-table.js +2 -2
  200. package/dist/components/nv-toggle.js +2 -2
  201. package/dist/components/nv-tooltip.js +1 -1
  202. package/dist/components/{p-9e6e26cb.js → p-0143cee0.js} +5 -5
  203. package/dist/components/p-0143cee0.js.map +1 -0
  204. package/dist/components/{p-e8c083e3.js → p-07550eac.js} +3 -3
  205. package/dist/components/{p-e8c083e3.js.map → p-07550eac.js.map} +1 -1
  206. package/dist/components/{p-1daca48a.js → p-09cdd71f.js} +2 -65
  207. package/dist/components/p-09cdd71f.js.map +1 -0
  208. package/dist/components/{p-919b5237.js → p-12258eef.js} +5 -5
  209. package/dist/components/{p-919b5237.js.map → p-12258eef.js.map} +1 -1
  210. package/dist/components/{p-05c19c9a.js → p-144e80f0.js} +4 -4
  211. package/dist/components/{p-05c19c9a.js.map → p-144e80f0.js.map} +1 -1
  212. package/dist/components/p-15aeab4d.js +23 -0
  213. package/dist/components/p-15aeab4d.js.map +1 -0
  214. package/dist/components/p-1cbacdba.js +68 -0
  215. package/dist/components/p-1cbacdba.js.map +1 -0
  216. package/dist/components/p-44df0d22.js +223 -0
  217. package/dist/components/p-44df0d22.js.map +1 -0
  218. package/dist/components/{p-cebdbb40.js → p-5d5668f0.js} +3 -3
  219. package/dist/components/{p-cebdbb40.js.map → p-5d5668f0.js.map} +1 -1
  220. package/dist/components/{p-001c888b.js → p-8067d283.js} +5 -4
  221. package/dist/components/p-8067d283.js.map +1 -0
  222. package/dist/components/{p-4badc1d2.js → p-8b82a6f4.js} +7 -7
  223. package/dist/components/{p-4badc1d2.js.map → p-8b82a6f4.js.map} +1 -1
  224. package/dist/components/{p-c1765831.js → p-8d45dbfe.js} +2 -2
  225. package/dist/components/{p-c1765831.js.map → p-8d45dbfe.js.map} +1 -1
  226. package/dist/components/{p-9f1e8ef3.js → p-91a558eb.js} +2 -2
  227. package/dist/components/{p-9f1e8ef3.js.map → p-91a558eb.js.map} +1 -1
  228. package/dist/components/{p-42301d8f.js → p-9a263d0e.js} +3 -23
  229. package/dist/components/p-9a263d0e.js.map +1 -0
  230. package/dist/components/{p-5bee0141.js → p-ba87d9d5.js} +6 -5
  231. package/dist/components/p-ba87d9d5.js.map +1 -0
  232. package/dist/components/{p-6277f746.js → p-ca130ad2.js} +2 -2
  233. package/dist/components/{p-6277f746.js.map → p-ca130ad2.js.map} +1 -1
  234. package/dist/components/{p-a0d7e0cd.js → p-d32b75ac.js} +99 -68
  235. package/dist/components/p-d32b75ac.js.map +1 -0
  236. package/dist/components/{p-970cd9b1.js → p-d576d64f.js} +5 -5
  237. package/dist/components/{p-970cd9b1.js.map → p-d576d64f.js.map} +1 -1
  238. package/dist/components/{p-e072f051.js → p-dd7ff995.js} +2 -2
  239. package/dist/components/{p-e072f051.js.map → p-dd7ff995.js.map} +1 -1
  240. package/dist/components/{p-918bb719.js → p-dfd2d4f0.js} +2 -2
  241. package/dist/components/{p-918bb719.js.map → p-dfd2d4f0.js.map} +1 -1
  242. package/dist/components/{p-44f0039b.js → p-e104c58a.js} +4 -4
  243. package/dist/components/p-e104c58a.js.map +1 -0
  244. package/dist/components/{p-00ac701f.js → p-e8e6f88a.js} +8 -6
  245. package/dist/components/p-e8e6f88a.js.map +1 -0
  246. package/dist/components/{p-d56b30ab.js → p-f97d1cb1.js} +3 -3
  247. package/dist/components/{p-d56b30ab.js.map → p-f97d1cb1.js.map} +1 -1
  248. package/dist/esm/{timeline.animation-1b88f052.js → collapse.animation-16e3af45.js} +3 -23
  249. package/dist/esm/collapse.animation-16e3af45.js.map +1 -0
  250. package/dist/esm/fade.animation-71e8e34c.js +68 -0
  251. package/dist/esm/fade.animation-71e8e34c.js.map +1 -0
  252. package/dist/esm/{grow.animation-cac164da.js → grow.animation-f7b26024.js} +2 -2
  253. package/dist/esm/{grow.animation-cac164da.js.map → grow.animation-f7b26024.js.map} +1 -1
  254. package/dist/esm/index-a1936cd0.js +8 -0
  255. package/dist/esm/index.js +5 -3
  256. package/dist/esm/index.js.map +1 -1
  257. package/dist/esm/loader.js +1 -1
  258. package/dist/esm/native.js +1 -1
  259. package/dist/esm/nv-accordion-item.entry.js +177 -0
  260. package/dist/esm/nv-accordion-item.entry.js.map +1 -0
  261. package/dist/esm/nv-accordion.entry.js +163 -0
  262. package/dist/esm/nv-accordion.entry.js.map +1 -0
  263. package/dist/esm/nv-alert.entry.js +5 -3
  264. package/dist/esm/nv-alert.entry.js.map +1 -1
  265. package/dist/esm/nv-avatar.entry.js +1 -1
  266. package/dist/esm/nv-badge_2.entry.js +7 -5
  267. package/dist/esm/nv-badge_2.entry.js.map +1 -1
  268. package/dist/esm/nv-breadcrumb.entry.js +1 -1
  269. package/dist/esm/nv-breadcrumbs.entry.js +1 -1
  270. package/dist/esm/nv-button.entry.js +1 -1
  271. package/dist/esm/nv-calendar.entry.js +96 -66
  272. package/dist/esm/nv-calendar.entry.js.map +1 -1
  273. package/dist/esm/nv-col.entry.js +1 -1
  274. package/dist/esm/nv-datagrid.entry.js +2 -2
  275. package/dist/esm/nv-datagridcolumn.entry.js +1 -1
  276. package/dist/esm/nv-dialog.entry.js +19 -6
  277. package/dist/esm/nv-dialog.entry.js.map +1 -1
  278. package/dist/esm/nv-dialogfooter_2.entry.js +2 -2
  279. package/dist/esm/nv-fieldcheckbox.entry.js +4 -4
  280. package/dist/esm/nv-fieldcheckbox.entry.js.map +1 -1
  281. package/dist/esm/nv-fielddate.entry.js +121 -35
  282. package/dist/esm/nv-fielddate.entry.js.map +1 -1
  283. package/dist/esm/nv-fielddaterange.entry.js +32 -4
  284. package/dist/esm/nv-fielddaterange.entry.js.map +1 -1
  285. package/dist/esm/nv-fielddropdown.entry.js +3 -3
  286. package/dist/esm/nv-fielddropdownitem.entry.js +1 -1
  287. package/dist/esm/nv-fieldmultiselect.entry.js +95 -102
  288. package/dist/esm/nv-fieldmultiselect.entry.js.map +1 -1
  289. package/dist/esm/nv-fieldnumber.entry.js +3 -3
  290. package/dist/esm/nv-fieldpassword.entry.js +3 -3
  291. package/dist/esm/nv-fieldradio.entry.js +3 -3
  292. package/dist/esm/nv-fieldselect.entry.js +5 -5
  293. package/dist/esm/nv-fieldslider.entry.js +53 -9
  294. package/dist/esm/nv-fieldslider.entry.js.map +1 -1
  295. package/dist/esm/nv-fieldtext.entry.js +3 -3
  296. package/dist/esm/nv-fieldtextarea.entry.js +3 -3
  297. package/dist/esm/nv-fieldtime.entry.js +10 -10
  298. package/dist/esm/nv-fieldtime.entry.js.map +1 -1
  299. package/dist/esm/nv-icon.entry.js +1 -1
  300. package/dist/esm/nv-iconbutton_2.entry.js +2 -2
  301. package/dist/esm/nv-menu.entry.js +1 -1
  302. package/dist/esm/nv-menuitem.entry.js +1 -1
  303. package/dist/esm/nv-popover.entry.js +4 -3
  304. package/dist/esm/nv-popover.entry.js.map +1 -1
  305. package/dist/esm/nv-row.entry.js +1 -1
  306. package/dist/esm/nv-stack.entry.js +1 -1
  307. package/dist/esm/nv-table.entry.js +2 -2
  308. package/dist/esm/nv-toggle.entry.js +2 -2
  309. package/dist/esm/nv-tooltip.entry.js +4 -3
  310. package/dist/esm/nv-tooltip.entry.js.map +1 -1
  311. package/dist/esm/{fade.animation-2a077983.js → stylefire.es-74da334a.js} +2 -65
  312. package/dist/esm/stylefire.es-74da334a.js.map +1 -0
  313. package/dist/esm/timeline.animation-adf35ecb.js +23 -0
  314. package/dist/esm/timeline.animation-adf35ecb.js.map +1 -0
  315. package/dist/native/index.esm.js +1 -1
  316. package/dist/native/index.esm.js.map +1 -1
  317. package/dist/native/native.css +1 -1
  318. package/dist/native/native.esm.js +1 -1
  319. package/dist/native/native.esm.js.map +1 -1
  320. package/dist/native/p-051db87c.entry.js +2 -0
  321. package/dist/native/p-051db87c.entry.js.map +1 -0
  322. package/dist/native/{p-a0505695.entry.js → p-08452012.entry.js} +2 -2
  323. package/dist/native/p-09cdd71f.js +16 -0
  324. package/dist/native/p-09cdd71f.js.map +1 -0
  325. package/dist/native/p-0e005d95.entry.js +2 -0
  326. package/dist/native/{p-d4bf2587.entry.js.map → p-0e005d95.entry.js.map} +1 -1
  327. package/dist/native/p-10ce53ea.entry.js +2 -0
  328. package/dist/native/{p-54198779.entry.js → p-12039da4.entry.js} +2 -2
  329. package/dist/native/p-1235c007.entry.js +2 -0
  330. package/dist/native/p-15aeab4d.js +2 -0
  331. package/dist/native/p-15aeab4d.js.map +1 -0
  332. package/dist/native/{p-003b6377.entry.js → p-16ef7dd4.entry.js} +2 -2
  333. package/dist/native/{p-1d98477d.entry.js → p-1ad1bff9.entry.js} +2 -2
  334. package/dist/native/p-1cbacdba.js +2 -0
  335. package/dist/native/p-1cbacdba.js.map +1 -0
  336. package/dist/native/{p-914da1e1.entry.js → p-1f932a4b.entry.js} +2 -2
  337. package/dist/native/p-2a6783ca.entry.js +2 -0
  338. package/dist/native/p-2a6783ca.entry.js.map +1 -0
  339. package/dist/native/{p-a5c72bd3.entry.js → p-34bf336f.entry.js} +2 -2
  340. package/dist/native/{p-e293b3fe.entry.js → p-3f139780.entry.js} +2 -2
  341. package/dist/native/{p-dd256ea3.entry.js → p-40fa3328.entry.js} +2 -2
  342. package/dist/native/{p-a983e6a0.entry.js → p-4b15cff3.entry.js} +2 -2
  343. package/dist/native/p-516da423.entry.js +2 -0
  344. package/dist/native/p-516da423.entry.js.map +1 -0
  345. package/dist/native/{p-08ca678c.entry.js → p-51a57a3a.entry.js} +2 -2
  346. package/dist/native/{p-5b06f4b5.entry.js → p-64cb38e6.entry.js} +2 -2
  347. package/dist/native/{p-af1e6035.entry.js → p-67c34b8c.entry.js} +2 -2
  348. package/dist/native/{p-e9962dac.entry.js → p-68edb2e8.entry.js} +2 -2
  349. package/dist/native/p-73c08f3b.entry.js +2 -0
  350. package/dist/native/p-73c08f3b.entry.js.map +1 -0
  351. package/dist/native/p-7703c736.entry.js +2 -0
  352. package/dist/native/p-7703c736.entry.js.map +1 -0
  353. package/dist/native/{p-6029e51b.entry.js → p-85a54ef2.entry.js} +2 -2
  354. package/dist/native/p-8d45dbfe.js +2 -0
  355. package/dist/native/p-916acbd3.entry.js +2 -0
  356. package/dist/native/p-916acbd3.entry.js.map +1 -0
  357. package/dist/native/p-9a263d0e.js +2 -0
  358. package/dist/native/p-9a263d0e.js.map +1 -0
  359. package/dist/native/{p-1a5d3b87.entry.js → p-9dc1c3e7.entry.js} +2 -2
  360. package/dist/native/p-a36dc25a.entry.js +2 -0
  361. package/dist/native/{p-ad128108.entry.js.map → p-a36dc25a.entry.js.map} +1 -1
  362. package/dist/native/p-a50f3850.entry.js +2 -0
  363. package/dist/native/{p-19f484a0.entry.js → p-a73fa60a.entry.js} +2 -2
  364. package/dist/native/p-b3f9db23.entry.js +2 -0
  365. package/dist/native/{p-82568ec7.entry.js.map → p-b3f9db23.entry.js.map} +1 -1
  366. package/dist/native/p-baddee4c.entry.js +7 -0
  367. package/dist/native/p-baddee4c.entry.js.map +1 -0
  368. package/dist/native/p-bba5cc9b.entry.js +2 -0
  369. package/dist/native/p-bba5cc9b.entry.js.map +1 -0
  370. package/dist/native/{p-1e0df2d3.entry.js → p-bee62b2b.entry.js} +2 -2
  371. package/dist/native/p-dc34da69.entry.js +2 -0
  372. package/dist/native/p-dc34da69.entry.js.map +1 -0
  373. package/dist/native/p-ec92ee7a.entry.js +2 -0
  374. package/dist/native/{p-6ea1c78b.entry.js → p-f00a4552.entry.js} +2 -2
  375. package/dist/native/{p-dd6b1d79.entry.js → p-f540db71.entry.js} +2 -2
  376. package/dist/native/{p-be9aeed4.entry.js → p-f687e05c.entry.js} +2 -2
  377. package/dist/native/p-f687e05c.entry.js.map +1 -0
  378. package/dist/native/{p-b5b9190a.entry.js → p-fa81b77f.entry.js} +2 -2
  379. package/dist/native/p-fa81b77f.entry.js.map +1 -0
  380. package/dist/native/{p-2d98d4f0.entry.js → p-fcd52432.entry.js} +2 -2
  381. package/dist/types/components/nv-accordion/nv-accordion.d.ts +82 -0
  382. package/dist/types/components/nv-accordion/nv-accordion.docs.d.ts +4 -0
  383. package/dist/types/components/nv-accordion-item/nv-accordion-item.d.ts +79 -0
  384. package/dist/types/components/nv-accordion-item/nv-accordion-item.docs.d.ts +4 -0
  385. package/dist/types/components/nv-calendar/nv-calendar.d.ts +7 -1
  386. package/dist/types/components/nv-calendar/partials/calendar-grid.d.ts +6 -2
  387. package/dist/types/components/nv-dialog/nv-dialog.d.ts +7 -0
  388. package/dist/types/components/nv-fieldcheckbox/nv-fieldcheckbox.d.ts +2 -0
  389. package/dist/types/components/nv-fielddate/nv-fielddate.d.ts +27 -2
  390. package/dist/types/components/nv-fielddaterange/nv-fielddaterange.d.ts +5 -0
  391. package/dist/types/components/nv-fielddropdownitemcheck/nv-fielddropdownitemcheck.d.ts +6 -0
  392. package/dist/types/components/nv-fieldmultiselect/nv-fieldmultiselect.d.ts +17 -16
  393. package/dist/types/components/nv-fieldslider/nv-fieldslider.utils.d.ts +13 -0
  394. package/dist/types/components/nv-fieldslider/partials/range-thumb.d.ts +2 -0
  395. package/dist/types/components/nv-fieldslider/partials/single-thumb.d.ts +2 -0
  396. package/dist/types/components/nv-tooltip/nv-tooltip.d.ts +7 -0
  397. package/dist/types/components.d.ts +287 -10
  398. package/dist/vscode-data.json +71 -5
  399. package/hydrate/index.js +1461 -879
  400. package/hydrate/index.mjs +1461 -879
  401. package/package.json +1 -1
  402. package/readme.md +6 -0
  403. package/dist/cjs/fade.animation-0d33d198.js.map +0 -1
  404. package/dist/cjs/timeline.animation-dbb9c5ea.js.map +0 -1
  405. package/dist/components/p-001c888b.js.map +0 -1
  406. package/dist/components/p-00ac701f.js.map +0 -1
  407. package/dist/components/p-1daca48a.js.map +0 -1
  408. package/dist/components/p-42301d8f.js.map +0 -1
  409. package/dist/components/p-44f0039b.js.map +0 -1
  410. package/dist/components/p-5bee0141.js.map +0 -1
  411. package/dist/components/p-9e6e26cb.js.map +0 -1
  412. package/dist/components/p-a0d7e0cd.js.map +0 -1
  413. package/dist/esm/fade.animation-2a077983.js.map +0 -1
  414. package/dist/esm/timeline.animation-1b88f052.js.map +0 -1
  415. package/dist/native/p-0493c51a.entry.js +0 -2
  416. package/dist/native/p-1daca48a.js +0 -16
  417. package/dist/native/p-1daca48a.js.map +0 -1
  418. package/dist/native/p-42301d8f.js +0 -2
  419. package/dist/native/p-42301d8f.js.map +0 -1
  420. package/dist/native/p-45cbe6e4.entry.js +0 -2
  421. package/dist/native/p-46428304.entry.js +0 -2
  422. package/dist/native/p-46428304.entry.js.map +0 -1
  423. package/dist/native/p-58f4dc0e.entry.js +0 -2
  424. package/dist/native/p-58f4dc0e.entry.js.map +0 -1
  425. package/dist/native/p-59b07b36.entry.js +0 -2
  426. package/dist/native/p-59b07b36.entry.js.map +0 -1
  427. package/dist/native/p-82568ec7.entry.js +0 -2
  428. package/dist/native/p-82c4bf56.entry.js +0 -2
  429. package/dist/native/p-82c4bf56.entry.js.map +0 -1
  430. package/dist/native/p-86ab23ea.entry.js +0 -2
  431. package/dist/native/p-ad128108.entry.js +0 -2
  432. package/dist/native/p-b5b9190a.entry.js.map +0 -1
  433. package/dist/native/p-b9c7b644.entry.js +0 -2
  434. package/dist/native/p-b9c7b644.entry.js.map +0 -1
  435. package/dist/native/p-be9aeed4.entry.js.map +0 -1
  436. package/dist/native/p-bee972c7.entry.js +0 -2
  437. package/dist/native/p-c1765831.js +0 -2
  438. package/dist/native/p-d21b2da2.entry.js +0 -7
  439. package/dist/native/p-d21b2da2.entry.js.map +0 -1
  440. package/dist/native/p-d4bf2587.entry.js +0 -2
  441. package/dist/native/p-eaf51f2c.entry.js +0 -2
  442. package/dist/native/p-eaf51f2c.entry.js.map +0 -1
  443. /package/dist/native/{p-a0505695.entry.js.map → p-08452012.entry.js.map} +0 -0
  444. /package/dist/native/{p-0493c51a.entry.js.map → p-10ce53ea.entry.js.map} +0 -0
  445. /package/dist/native/{p-54198779.entry.js.map → p-12039da4.entry.js.map} +0 -0
  446. /package/dist/native/{p-86ab23ea.entry.js.map → p-1235c007.entry.js.map} +0 -0
  447. /package/dist/native/{p-003b6377.entry.js.map → p-16ef7dd4.entry.js.map} +0 -0
  448. /package/dist/native/{p-1d98477d.entry.js.map → p-1ad1bff9.entry.js.map} +0 -0
  449. /package/dist/native/{p-914da1e1.entry.js.map → p-1f932a4b.entry.js.map} +0 -0
  450. /package/dist/native/{p-a5c72bd3.entry.js.map → p-34bf336f.entry.js.map} +0 -0
  451. /package/dist/native/{p-e293b3fe.entry.js.map → p-3f139780.entry.js.map} +0 -0
  452. /package/dist/native/{p-dd256ea3.entry.js.map → p-40fa3328.entry.js.map} +0 -0
  453. /package/dist/native/{p-a983e6a0.entry.js.map → p-4b15cff3.entry.js.map} +0 -0
  454. /package/dist/native/{p-08ca678c.entry.js.map → p-51a57a3a.entry.js.map} +0 -0
  455. /package/dist/native/{p-5b06f4b5.entry.js.map → p-64cb38e6.entry.js.map} +0 -0
  456. /package/dist/native/{p-af1e6035.entry.js.map → p-67c34b8c.entry.js.map} +0 -0
  457. /package/dist/native/{p-e9962dac.entry.js.map → p-68edb2e8.entry.js.map} +0 -0
  458. /package/dist/native/{p-6029e51b.entry.js.map → p-85a54ef2.entry.js.map} +0 -0
  459. /package/dist/native/{p-c1765831.js.map → p-8d45dbfe.js.map} +0 -0
  460. /package/dist/native/{p-1a5d3b87.entry.js.map → p-9dc1c3e7.entry.js.map} +0 -0
  461. /package/dist/native/{p-bee972c7.entry.js.map → p-a50f3850.entry.js.map} +0 -0
  462. /package/dist/native/{p-19f484a0.entry.js.map → p-a73fa60a.entry.js.map} +0 -0
  463. /package/dist/native/{p-1e0df2d3.entry.js.map → p-bee62b2b.entry.js.map} +0 -0
  464. /package/dist/native/{p-45cbe6e4.entry.js.map → p-ec92ee7a.entry.js.map} +0 -0
  465. /package/dist/native/{p-6ea1c78b.entry.js.map → p-f00a4552.entry.js.map} +0 -0
  466. /package/dist/native/{p-dd6b1d79.entry.js.map → p-f540db71.entry.js.map} +0 -0
  467. /package/dist/native/{p-2d98d4f0.entry.js.map → p-fcd52432.entry.js.map} +0 -0
@@ -200,26 +200,6 @@ export function parseDate(dateInput, dateFormat) {
200
200
  parsed = dayjs(dateInput, dateFormat, true);
201
201
  }
202
202
  if (!parsed.isValid()) {
203
- // Check if the date input contains placeholder characters (incomplete input from Inputmask)
204
- // This specifically targets partial dates being typed with placeholder characters
205
- const hasPlaceholderChars = typeof dateInput === 'string' &&
206
- (dateInput.includes('_') ||
207
- dateInput.includes('-_') ||
208
- dateInput.includes('/_') ||
209
- dateInput.includes('._'));
210
- // Check if it looks like a partial date being typed (starts with valid pattern)
211
- const looksLikePartialDate = typeof dateInput === 'string' &&
212
- dateInput.length < dateFormat.length &&
213
- /^[\d\-/.]*$/.test(dateInput) && // Only contains digits and date separators
214
- dateInput.length > 0;
215
- const isIncompleteInput = hasPlaceholderChars || looksLikePartialDate;
216
- // Only log error if it's not an incomplete input (to avoid spam during typing)
217
- if (!isIncompleteInput) {
218
- console.error(`Parsing error:`, {
219
- dateInput,
220
- dateFormat: dateFormat,
221
- });
222
- }
223
203
  return null;
224
204
  }
225
205
  return parsed.toDate();
@@ -1 +1 @@
1
- {"version":3,"file":"nv-calendar.utils.js","sourceRoot":"","sources":["../../../src/components/nv-calendar/nv-calendar.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,iBAAiB,MAAM,gCAAgC,CAAC;AAC/D,OAAO,GAAG,MAAM,kBAAkB,CAAC;AACnC,OAAO,UAAU,MAAM,yBAAyB,CAAC;AAEjD,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAChC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAClB,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAEzB;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CACxB,IAAU,EACV,OAGC;IAED,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAErB,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,KAAK,0BAA0B,CAAC;IAE1E,4BAA4B;IAC5B,IAAI,eAAe,EAAE,CAAC;QACpB,wEAAwE;QACxE,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IAED,yDAAyD;IACzD,IAAI,OAAO,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK,GAAG,kBAAkB,CAAC;QAC1D,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC;IAED,sCAAsC;IACtC,IAAI,OAAO,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;IACvC,CAAC;IAED,2CAA2C;IAC3C,IAAI,OAAO,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;IACnC,CAAC;IAED,yDAAyD;IACzD,OAAO,SAAS;QACd,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;QAC9C,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CACxB,IAAiB,EACjB,WAAwB,EACxB,OAGC;IAED,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,OAAO,CACL,IAAI,CAAC,cAAc,EAAE,KAAK,WAAW,CAAC,cAAc,EAAE;YACtD,IAAI,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE;YAChD,IAAI,CAAC,UAAU,EAAE,KAAK,WAAW,CAAC,UAAU,EAAE,CAC/C,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CACL,IAAI,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE;YAChD,IAAI,CAAC,QAAQ,EAAE,KAAK,WAAW,CAAC,QAAQ,EAAE;YAC1C,IAAI,CAAC,OAAO,EAAE,KAAK,WAAW,CAAC,OAAO,EAAE,CACzC,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,IAAU,EACV,WAAiB,EACjB,OAGC;IAED,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IAExC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,OAAO,CACL,IAAI,CAAC,cAAc,EAAE,GAAG,WAAW,CAAC,cAAc,EAAE;YACpD,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,WAAW,CAAC,cAAc,EAAE;gBACrD,IAAI,CAAC,WAAW,EAAE,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;YACjD,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,WAAW,CAAC,cAAc,EAAE;gBACrD,IAAI,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE;gBAChD,IAAI,CAAC,UAAU,EAAE,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC,CACjD,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CACL,IAAI,CAAC,WAAW,EAAE,GAAG,WAAW,CAAC,WAAW,EAAE;YAC9C,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE;gBAC/C,IAAI,CAAC,QAAQ,EAAE,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC3C,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE;gBAC/C,IAAI,CAAC,QAAQ,EAAE,KAAK,WAAW,CAAC,QAAQ,EAAE;gBAC1C,IAAI,CAAC,OAAO,EAAE,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC,CAC3C,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAU,EACV,WAAiB,EACjB,OAGC;IAED,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IAExC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,OAAO,CACL,IAAI,CAAC,cAAc,EAAE,GAAG,WAAW,CAAC,cAAc,EAAE;YACpD,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,WAAW,CAAC,cAAc,EAAE;gBACrD,IAAI,CAAC,WAAW,EAAE,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;YACjD,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,WAAW,CAAC,cAAc,EAAE;gBACrD,IAAI,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE;gBAChD,IAAI,CAAC,UAAU,EAAE,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC,CACjD,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CACL,IAAI,CAAC,WAAW,EAAE,GAAG,WAAW,CAAC,WAAW,EAAE;YAC9C,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE;gBAC/C,IAAI,CAAC,QAAQ,EAAE,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC3C,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE;gBAC/C,IAAI,CAAC,QAAQ,EAAE,KAAK,WAAW,CAAC,QAAQ,EAAE;gBAC1C,IAAI,CAAC,OAAO,EAAE,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC,CAC3C,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAAU;IACtC,4DAA4D;IAC5D,MAAM,CAAC,GAAG,IAAI,IAAI,CAChB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAC9D,CAAC;IAEF,8CAA8C;IAC9C,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAE7D,2CAA2C;IAC3C,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAE3D,4BAA4B;IAC5B,OAAO,CACL,CAAC;QACD,IAAI,CAAC,KAAK,CACR,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,QAAQ;YACzC,CAAC;YACD,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9B,CAAC,CACJ,CACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CACvB,SAAwB,EACxB,UAAkB;IAElB,IAAI,SAAS,YAAY,IAAI;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE3C,+EAA+E;IAC/E,qEAAqE;IACrE,IACE,OAAO,SAAS,KAAK,QAAQ;QAC7B,8CAA8C,CAAC,IAAI,CAAC,SAAS,CAAC,EAC9D,CAAC;QACD,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBACjC,OAAO,UAAU,CAAC;YACpB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,2CAA2C;YAC3C,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,KAAK,CAAC,WAAW,CAAC;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO,SAAS;YACd,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE;YACxC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC;IACvC,CAAC;IAED,2CAA2C;IAC3C,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;QACvB,MAAM,gBAAgB,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,KAAK,CAAC,gBAAgB,CAAC;YAAE,OAAO,IAAI,CAAC;QACzC,OAAO,SAAS;YACd,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE;YACxC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,EAAE,CAAC;IACvC,CAAC;IAED,2BAA2B;IAC3B,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAChC,IAAI,KAAK,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9B,4DAA4D;QAC5D,MAAM,gBAAgB,GAAG,CAAC,KAAK,GAAG,kBAAkB,CAAC,GAAG,KAAK,CAAC;QAC9D,OAAO,SAAS;YACd,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE;YACxC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,EAAE,CAAC;IACvC,CAAC;IAED,8DAA8D;IAC9D,IAAI,MAAM,CAAC;IACX,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QACtB,4FAA4F;QAC5F,kFAAkF;QAClF,MAAM,mBAAmB,GACvB,OAAO,SAAS,KAAK,QAAQ;YAC7B,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;gBACtB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACxB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACxB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAE9B,gFAAgF;QAChF,MAAM,oBAAoB,GACxB,OAAO,SAAS,KAAK,QAAQ;YAC7B,SAAS,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM;YACpC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,2CAA2C;YAC5E,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QAEvB,MAAM,iBAAiB,GAAG,mBAAmB,IAAI,oBAAoB,CAAC;QAEtE,+EAA+E;QAC/E,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE;gBAC9B,SAAS;gBACT,UAAU,EAAE,UAAU;aACvB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;AACzB,CAAC","sourcesContent":["import dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport utc from 'dayjs/plugin/utc';\nimport weekOfYear from 'dayjs/plugin/weekOfYear';\n\ndayjs.extend(customParseFormat);\ndayjs.extend(utc);\ndayjs.extend(weekOfYear);\n\n/**\n * Formats a date to a string according to the format\n * @param {Date} date - Date to format\n * @returns {string} Formatted date\n * @param {Object} options - Additional options\n * @param {string} options.dateFormat - Date format (ex: 'YYYY-MM-DD', 'DD-MM-YYYY', etc.)\n */\nexport function formatDate(\n date: Date,\n options: {\n /** Date format (ex: 'YYYY-MM-DD', 'DD-MM-YYYY', etc.) */\n dateFormat: string;\n },\n): string {\n if (!date) return '';\n\n const isUTCMode = options.dateFormat.includes('Z');\n const isISO8601Format = options.dateFormat === 'YYYY-MM-DD[T]HH:mm:ss[Z]';\n\n // Special case for ISO 8601\n if (isISO8601Format) {\n // For the ISO 8601 format, use directly toISOString() which is standard\n return date.toISOString();\n }\n\n // If the format is \"Ticks\", convert the time to C# ticks\n if (options.dateFormat === 'Ticks') {\n const ticks = date.getTime() * 10000 + 621355968000000000;\n return ticks.toString();\n }\n\n // If the format is \"X\" (Unix Seconds)\n if (options.dateFormat === 'X') {\n return dayjs(date).unix().toString();\n }\n\n // If the format is \"x\" (Unix Milliseconds)\n if (options.dateFormat === 'x') {\n return date.getTime().toString();\n }\n\n // Otherwise, format according to the mode (UTC or local)\n return isUTCMode\n ? dayjs(date).utc().format(options.dateFormat)\n : dayjs(date).format(options.dateFormat);\n}\n\n/**\n * Checks if two dates are identical\n * @param {Date | null} date - First date\n * @param {Date | null} compareDate - Second date\n * @param {Object} options - Additional options\n * @param {boolean} options.isUTCMode - Whether the dates are in UTC mode\n * @returns {boolean} true if the dates are identical\n */\nexport function isSameDate(\n date: Date | null,\n compareDate: Date | null,\n options: {\n /** Whether the dates are in UTC mode */\n isUTCMode: boolean;\n },\n): boolean {\n if (!date || !compareDate) return false;\n if (options.isUTCMode) {\n return (\n date.getUTCFullYear() === compareDate.getUTCFullYear() &&\n date.getUTCMonth() === compareDate.getUTCMonth() &&\n date.getUTCDate() === compareDate.getUTCDate()\n );\n } else {\n return (\n date.getFullYear() === compareDate.getFullYear() &&\n date.getMonth() === compareDate.getMonth() &&\n date.getDate() === compareDate.getDate()\n );\n }\n}\n\n/**\n * Checks if a date is identical or before another date\n * @param {Date} date - Date to check\n * @param {Date} compareDate - Reference date\n * @param {Object} options - Additional options\n * @param {boolean} options.isUTCMode - Whether the dates are in UTC mode\n * @returns {boolean} true if `date` <= `compareDate`\n */\nexport function isSameOrBefore(\n date: Date,\n compareDate: Date,\n options: {\n /** Whether the dates are in UTC mode */\n isUTCMode: boolean;\n },\n): boolean {\n if (!date || !compareDate) return false;\n\n if (options.isUTCMode) {\n return (\n date.getUTCFullYear() < compareDate.getUTCFullYear() ||\n (date.getUTCFullYear() === compareDate.getUTCFullYear() &&\n date.getUTCMonth() < compareDate.getUTCMonth()) ||\n (date.getUTCFullYear() === compareDate.getUTCFullYear() &&\n date.getUTCMonth() === compareDate.getUTCMonth() &&\n date.getUTCDate() <= compareDate.getUTCDate())\n );\n } else {\n return (\n date.getFullYear() < compareDate.getFullYear() ||\n (date.getFullYear() === compareDate.getFullYear() &&\n date.getMonth() < compareDate.getMonth()) ||\n (date.getFullYear() === compareDate.getFullYear() &&\n date.getMonth() === compareDate.getMonth() &&\n date.getDate() <= compareDate.getDate())\n );\n }\n}\n\n/**\n * Checks if a date is identical or after another date\n * @param {Date} date - Date to check\n * @param {Date} compareDate - Reference date\n * @param {Object} options - Additional options\n * @param {boolean} options.isUTCMode - Whether the dates are in UTC mode\n * @returns {boolean} true if `date` >= `compareDate`\n */\nexport function isSameOrAfter(\n date: Date,\n compareDate: Date,\n options: {\n /** Whether the dates are in UTC mode */\n isUTCMode: boolean;\n },\n): boolean {\n if (!date || !compareDate) return false;\n\n if (options.isUTCMode) {\n return (\n date.getUTCFullYear() > compareDate.getUTCFullYear() ||\n (date.getUTCFullYear() === compareDate.getUTCFullYear() &&\n date.getUTCMonth() > compareDate.getUTCMonth()) ||\n (date.getUTCFullYear() === compareDate.getUTCFullYear() &&\n date.getUTCMonth() === compareDate.getUTCMonth() &&\n date.getUTCDate() >= compareDate.getUTCDate())\n );\n } else {\n return (\n date.getFullYear() > compareDate.getFullYear() ||\n (date.getFullYear() === compareDate.getFullYear() &&\n date.getMonth() > compareDate.getMonth()) ||\n (date.getFullYear() === compareDate.getFullYear() &&\n date.getMonth() === compareDate.getMonth() &&\n date.getDate() >= compareDate.getDate())\n );\n }\n}\n\n/**\n * Calculates the ISO week number\n * @param {Date} date - Date to calculate\n * @returns {number} Week number\n */\nexport function getWeekNumber(date: Date): number {\n // Create a copy of the date to avoid modifying the original\n const d = new Date(\n Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()),\n );\n\n // Adjust to the same week Thursday (ISO 8601)\n d.setUTCDate(d.getUTCDate() + 3 - ((d.getUTCDay() + 6) % 7));\n\n // Calculate the first Thursday of the year\n const week1 = new Date(Date.UTC(d.getUTCFullYear(), 0, 4));\n\n // Calculate the week number\n return (\n 1 +\n Math.round(\n ((d.getTime() - week1.getTime()) / 86400000 -\n 3 +\n ((week1.getUTCDay() + 6) % 7)) /\n 7,\n )\n );\n}\n\n/**\n * Convert a date string/Date to a Date without timezone offset\n * @param {string | Date} dateInput - Date under string or Date object form\n * @param {string} dateFormat - Date format (ex: 'YYYY-MM-DD', 'DD-MM-YYYY', etc.)\n * @returns {Date} Date in Date form without timezone offset\n */\nexport function parseDate(\n dateInput: string | Date,\n dateFormat: string,\n): Date | null {\n if (dateInput instanceof Date) return dateInput;\n const isUTCMode = dateFormat.includes('Z');\n\n // Attempt to automatically detect ISO 8601 format (generated by toISOString())\n // The regex checks the standard ISO format: YYYY-MM-DDTHH:mm:ss.sssZ\n if (\n typeof dateInput === 'string' &&\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/.test(dateInput)\n ) {\n try {\n const parsedDate = new Date(dateInput);\n if (!isNaN(parsedDate.getTime())) {\n return parsedDate;\n }\n } catch (error) {\n // If it fails, continue with other methods\n console.error('Error parsing ISO date:', error);\n }\n }\n\n // Handling Unix Seconds (\"X\") formats\n if (dateFormat === 'X') {\n const unixSeconds = Number(dateInput);\n if (isNaN(unixSeconds)) return null;\n return isUTCMode\n ? dayjs.unix(unixSeconds).utc().toDate()\n : dayjs.unix(unixSeconds).toDate();\n }\n\n // Handling Unix Milliseconds (\"x\") formats\n if (dateFormat === 'x') {\n const unixMilliseconds = Number(dateInput);\n if (isNaN(unixMilliseconds)) return null;\n return isUTCMode\n ? dayjs(unixMilliseconds).utc().toDate()\n : dayjs(unixMilliseconds).toDate();\n }\n\n // Handling C# Ticks format\n if (dateFormat === 'Ticks') {\n const ticks = Number(dateInput);\n if (isNaN(ticks)) return null;\n // Conversion of .NET ticks to milliseconds since Unix epoch\n const unixMilliseconds = (ticks - 621355968000000000) / 10000;\n return isUTCMode\n ? dayjs(unixMilliseconds).utc().toDate()\n : dayjs(unixMilliseconds).toDate();\n }\n\n // For all other formats, use customParseFormat in strict mode\n let parsed;\n if (isUTCMode) {\n parsed = dayjs.utc(dateInput, dateFormat, true);\n } else {\n parsed = dayjs(dateInput, dateFormat, true);\n }\n if (!parsed.isValid()) {\n // Check if the date input contains placeholder characters (incomplete input from Inputmask)\n // This specifically targets partial dates being typed with placeholder characters\n const hasPlaceholderChars =\n typeof dateInput === 'string' &&\n (dateInput.includes('_') ||\n dateInput.includes('-_') ||\n dateInput.includes('/_') ||\n dateInput.includes('._'));\n\n // Check if it looks like a partial date being typed (starts with valid pattern)\n const looksLikePartialDate =\n typeof dateInput === 'string' &&\n dateInput.length < dateFormat.length &&\n /^[\\d\\-/.]*$/.test(dateInput) && // Only contains digits and date separators\n dateInput.length > 0;\n\n const isIncompleteInput = hasPlaceholderChars || looksLikePartialDate;\n\n // Only log error if it's not an incomplete input (to avoid spam during typing)\n if (!isIncompleteInput) {\n console.error(`Parsing error:`, {\n dateInput,\n dateFormat: dateFormat,\n });\n }\n return null;\n }\n return parsed.toDate();\n}\n"]}
1
+ {"version":3,"file":"nv-calendar.utils.js","sourceRoot":"","sources":["../../../src/components/nv-calendar/nv-calendar.utils.ts"],"names":[],"mappings":"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","sourcesContent":["import dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport utc from 'dayjs/plugin/utc';\nimport weekOfYear from 'dayjs/plugin/weekOfYear';\n\ndayjs.extend(customParseFormat);\ndayjs.extend(utc);\ndayjs.extend(weekOfYear);\n\n/**\n * Formats a date to a string according to the format\n * @param {Date} date - Date to format\n * @returns {string} Formatted date\n * @param {Object} options - Additional options\n * @param {string} options.dateFormat - Date format (ex: 'YYYY-MM-DD', 'DD-MM-YYYY', etc.)\n */\nexport function formatDate(\n date: Date,\n options: {\n /** Date format (ex: 'YYYY-MM-DD', 'DD-MM-YYYY', etc.) */\n dateFormat: string;\n },\n): string {\n if (!date) return '';\n\n const isUTCMode = options.dateFormat.includes('Z');\n const isISO8601Format = options.dateFormat === 'YYYY-MM-DD[T]HH:mm:ss[Z]';\n\n // Special case for ISO 8601\n if (isISO8601Format) {\n // For the ISO 8601 format, use directly toISOString() which is standard\n return date.toISOString();\n }\n\n // If the format is \"Ticks\", convert the time to C# ticks\n if (options.dateFormat === 'Ticks') {\n const ticks = date.getTime() * 10000 + 621355968000000000;\n return ticks.toString();\n }\n\n // If the format is \"X\" (Unix Seconds)\n if (options.dateFormat === 'X') {\n return dayjs(date).unix().toString();\n }\n\n // If the format is \"x\" (Unix Milliseconds)\n if (options.dateFormat === 'x') {\n return date.getTime().toString();\n }\n\n // Otherwise, format according to the mode (UTC or local)\n return isUTCMode\n ? dayjs(date).utc().format(options.dateFormat)\n : dayjs(date).format(options.dateFormat);\n}\n\n/**\n * Checks if two dates are identical\n * @param {Date | null} date - First date\n * @param {Date | null} compareDate - Second date\n * @param {Object} options - Additional options\n * @param {boolean} options.isUTCMode - Whether the dates are in UTC mode\n * @returns {boolean} true if the dates are identical\n */\nexport function isSameDate(\n date: Date | null,\n compareDate: Date | null,\n options: {\n /** Whether the dates are in UTC mode */\n isUTCMode: boolean;\n },\n): boolean {\n if (!date || !compareDate) return false;\n if (options.isUTCMode) {\n return (\n date.getUTCFullYear() === compareDate.getUTCFullYear() &&\n date.getUTCMonth() === compareDate.getUTCMonth() &&\n date.getUTCDate() === compareDate.getUTCDate()\n );\n } else {\n return (\n date.getFullYear() === compareDate.getFullYear() &&\n date.getMonth() === compareDate.getMonth() &&\n date.getDate() === compareDate.getDate()\n );\n }\n}\n\n/**\n * Checks if a date is identical or before another date\n * @param {Date} date - Date to check\n * @param {Date} compareDate - Reference date\n * @param {Object} options - Additional options\n * @param {boolean} options.isUTCMode - Whether the dates are in UTC mode\n * @returns {boolean} true if `date` <= `compareDate`\n */\nexport function isSameOrBefore(\n date: Date,\n compareDate: Date,\n options: {\n /** Whether the dates are in UTC mode */\n isUTCMode: boolean;\n },\n): boolean {\n if (!date || !compareDate) return false;\n\n if (options.isUTCMode) {\n return (\n date.getUTCFullYear() < compareDate.getUTCFullYear() ||\n (date.getUTCFullYear() === compareDate.getUTCFullYear() &&\n date.getUTCMonth() < compareDate.getUTCMonth()) ||\n (date.getUTCFullYear() === compareDate.getUTCFullYear() &&\n date.getUTCMonth() === compareDate.getUTCMonth() &&\n date.getUTCDate() <= compareDate.getUTCDate())\n );\n } else {\n return (\n date.getFullYear() < compareDate.getFullYear() ||\n (date.getFullYear() === compareDate.getFullYear() &&\n date.getMonth() < compareDate.getMonth()) ||\n (date.getFullYear() === compareDate.getFullYear() &&\n date.getMonth() === compareDate.getMonth() &&\n date.getDate() <= compareDate.getDate())\n );\n }\n}\n\n/**\n * Checks if a date is identical or after another date\n * @param {Date} date - Date to check\n * @param {Date} compareDate - Reference date\n * @param {Object} options - Additional options\n * @param {boolean} options.isUTCMode - Whether the dates are in UTC mode\n * @returns {boolean} true if `date` >= `compareDate`\n */\nexport function isSameOrAfter(\n date: Date,\n compareDate: Date,\n options: {\n /** Whether the dates are in UTC mode */\n isUTCMode: boolean;\n },\n): boolean {\n if (!date || !compareDate) return false;\n\n if (options.isUTCMode) {\n return (\n date.getUTCFullYear() > compareDate.getUTCFullYear() ||\n (date.getUTCFullYear() === compareDate.getUTCFullYear() &&\n date.getUTCMonth() > compareDate.getUTCMonth()) ||\n (date.getUTCFullYear() === compareDate.getUTCFullYear() &&\n date.getUTCMonth() === compareDate.getUTCMonth() &&\n date.getUTCDate() >= compareDate.getUTCDate())\n );\n } else {\n return (\n date.getFullYear() > compareDate.getFullYear() ||\n (date.getFullYear() === compareDate.getFullYear() &&\n date.getMonth() > compareDate.getMonth()) ||\n (date.getFullYear() === compareDate.getFullYear() &&\n date.getMonth() === compareDate.getMonth() &&\n date.getDate() >= compareDate.getDate())\n );\n }\n}\n\n/**\n * Calculates the ISO week number\n * @param {Date} date - Date to calculate\n * @returns {number} Week number\n */\nexport function getWeekNumber(date: Date): number {\n // Create a copy of the date to avoid modifying the original\n const d = new Date(\n Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()),\n );\n\n // Adjust to the same week Thursday (ISO 8601)\n d.setUTCDate(d.getUTCDate() + 3 - ((d.getUTCDay() + 6) % 7));\n\n // Calculate the first Thursday of the year\n const week1 = new Date(Date.UTC(d.getUTCFullYear(), 0, 4));\n\n // Calculate the week number\n return (\n 1 +\n Math.round(\n ((d.getTime() - week1.getTime()) / 86400000 -\n 3 +\n ((week1.getUTCDay() + 6) % 7)) /\n 7,\n )\n );\n}\n\n/**\n * Convert a date string/Date to a Date without timezone offset\n * @param {string | Date} dateInput - Date under string or Date object form\n * @param {string} dateFormat - Date format (ex: 'YYYY-MM-DD', 'DD-MM-YYYY', etc.)\n * @returns {Date} Date in Date form without timezone offset\n */\nexport function parseDate(\n dateInput: string | Date,\n dateFormat: string,\n): Date | null {\n if (dateInput instanceof Date) return dateInput;\n const isUTCMode = dateFormat.includes('Z');\n\n // Attempt to automatically detect ISO 8601 format (generated by toISOString())\n // The regex checks the standard ISO format: YYYY-MM-DDTHH:mm:ss.sssZ\n if (\n typeof dateInput === 'string' &&\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/.test(dateInput)\n ) {\n try {\n const parsedDate = new Date(dateInput);\n if (!isNaN(parsedDate.getTime())) {\n return parsedDate;\n }\n } catch (error) {\n // If it fails, continue with other methods\n console.error('Error parsing ISO date:', error);\n }\n }\n\n // Handling Unix Seconds (\"X\") formats\n if (dateFormat === 'X') {\n const unixSeconds = Number(dateInput);\n if (isNaN(unixSeconds)) return null;\n return isUTCMode\n ? dayjs.unix(unixSeconds).utc().toDate()\n : dayjs.unix(unixSeconds).toDate();\n }\n\n // Handling Unix Milliseconds (\"x\") formats\n if (dateFormat === 'x') {\n const unixMilliseconds = Number(dateInput);\n if (isNaN(unixMilliseconds)) return null;\n return isUTCMode\n ? dayjs(unixMilliseconds).utc().toDate()\n : dayjs(unixMilliseconds).toDate();\n }\n\n // Handling C# Ticks format\n if (dateFormat === 'Ticks') {\n const ticks = Number(dateInput);\n if (isNaN(ticks)) return null;\n // Conversion of .NET ticks to milliseconds since Unix epoch\n const unixMilliseconds = (ticks - 621355968000000000) / 10000;\n return isUTCMode\n ? dayjs(unixMilliseconds).utc().toDate()\n : dayjs(unixMilliseconds).toDate();\n }\n\n // For all other formats, use customParseFormat in strict mode\n let parsed;\n if (isUTCMode) {\n parsed = dayjs.utc(dateInput, dateFormat, true);\n } else {\n parsed = dayjs(dateInput, dateFormat, true);\n }\n if (!parsed.isValid()) {\n return null;\n }\n return parsed.toDate();\n}\n"]}
@@ -9,9 +9,13 @@ import { isSameDate } from "../nv-calendar.utils";
9
9
  export const CalendarGrid = props => {
10
10
  const { days, dayNames, selectionType, selectedDate, startDate, endDate, isUTCMode, onDayClick, isDateInRange, isToday, } = props;
11
11
  return (h("div", { class: "days-container" }, h("div", { class: "days-header" }, dayNames.map((day, index) => (h("div", { class: "day-header", key: `day-header-${index}` }, day)))), h("div", { class: "days-grid" }, days.map(day => {
12
+ if (day.isBlank) {
13
+ return h("div", { class: "day day-blank" });
14
+ }
12
15
  const date = day.date;
13
- if (!date)
14
- return null;
16
+ if (!date || !day.dayOfMonth) {
17
+ return h("div", { class: "day-cell is-disabled is-empty" });
18
+ }
15
19
  const isSelected = selectionType === 'single' &&
16
20
  isSameDate(date, selectedDate, { isUTCMode });
17
21
  const isInRange = isDateInRange(date);
@@ -1 +1 @@
1
- {"version":3,"file":"calendar-grid.js","sourceRoot":"","sources":["../../../../src/components/nv-calendar/partials/calendar-grid.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,CAAC,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AA0ClD;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAA2C,KAAK,CAAC,EAAE;IAC1E,MAAM,EACJ,IAAI,EACJ,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,SAAS,EACT,OAAO,EACP,SAAS,EACT,UAAU,EACV,aAAa,EACb,OAAO,GACR,GAAG,KAAK,CAAC;IAEV,OAAO,CACL,WAAK,KAAK,EAAC,gBAAgB;QACzB,WAAK,KAAK,EAAC,aAAa,IACrB,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAC5B,WAAK,KAAK,EAAC,YAAY,EAAC,GAAG,EAAE,cAAc,KAAK,EAAE,IAC/C,GAAG,CACA,CACP,CAAC,CACE;QACN,WAAK,KAAK,EAAC,WAAW,IACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACd,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;YACtB,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YAEvB,MAAM,UAAU,GACd,aAAa,KAAK,QAAQ;gBAC1B,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YAChD,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YAC3D,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YACvD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAElC,OAAO,CACL,EAAC,OAAO,IACN,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,GAAG,CAAC,UAAU,EAC1B,cAAc,EAAE,GAAG,CAAC,cAAc,EAClC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,WAAW,EACpB,UAAU,EAAE,GAAG,CAAC,UAAU,EAC1B,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,UAAU,GACnB,CACH,CAAC;QACJ,CAAC,CAAC,CACE,CACF,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { FunctionalComponent, h } from '@stencil/core';\nimport { DayCell } from './day-cell';\nimport { isSameDate } from '../nv-calendar.utils';\n\n/**\n * Day data structure\n */\ninterface DayData {\n /** Day of the month (1-31) */\n dayOfMonth: number;\n /** Complete date */\n date: Date;\n /** If the day belongs to the current month */\n isCurrentMonth: boolean;\n /** If the day is disabled */\n isDisabled: boolean;\n}\n\n/**\n * Props for the CalendarGrid component\n */\ninterface CalendarGridProps {\n /** Array of day data for the month */\n days: DayData[];\n /** Array of localized day names */\n dayNames: string[];\n /** Current selection type */\n selectionType: 'single' | 'range';\n /** Selected date in single mode */\n selectedDate: Date | null;\n /** Start date in range mode */\n startDate: Date | null;\n /** End date in range mode */\n endDate: Date | null;\n /** Whether date format is in UTC mode */\n isUTCMode: boolean;\n /** Handler for day selection */\n onDayClick: (date: Date) => void;\n /** Function to check if date is in range */\n isDateInRange: (date: Date) => boolean;\n /** Function to check if date is today */\n isToday: (date: Date) => boolean;\n}\n\n/**\n * Renders the calendar grid with day headers and day cells\n * @param {CalendarGridProps} props - Component properties\n * @returns {JSX.Element} JSX element representing the calendar grid\n */\nexport const CalendarGrid: FunctionalComponent<CalendarGridProps> = props => {\n const {\n days,\n dayNames,\n selectionType,\n selectedDate,\n startDate,\n endDate,\n isUTCMode,\n onDayClick,\n isDateInRange,\n isToday,\n } = props;\n\n return (\n <div class=\"days-container\">\n <div class=\"days-header\">\n {dayNames.map((day, index) => (\n <div class=\"day-header\" key={`day-header-${index}`}>\n {day}\n </div>\n ))}\n </div>\n <div class=\"days-grid\">\n {days.map(day => {\n const date = day.date;\n if (!date) return null;\n\n const isSelected =\n selectionType === 'single' &&\n isSameDate(date, selectedDate, { isUTCMode });\n const isInRange = isDateInRange(date);\n const isStart = isSameDate(date, startDate, { isUTCMode });\n const isEnd = isSameDate(date, endDate, { isUTCMode });\n const isTodayDate = isToday(date);\n\n return (\n <DayCell\n date={date}\n dayOfMonth={day.dayOfMonth}\n isCurrentMonth={day.isCurrentMonth}\n isSelected={isSelected}\n isInRange={isInRange}\n isStart={isStart}\n isEnd={isEnd}\n isToday={isTodayDate}\n isDisabled={day.isDisabled}\n selectionType={selectionType}\n onClick={onDayClick}\n />\n );\n })}\n </div>\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"calendar-grid.js","sourceRoot":"","sources":["../../../../src/components/nv-calendar/partials/calendar-grid.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,CAAC,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AA8ClD;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAA2C,KAAK,CAAC,EAAE;IAC1E,MAAM,EACJ,IAAI,EACJ,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,SAAS,EACT,OAAO,EACP,SAAS,EACT,UAAU,EACV,aAAa,EACb,OAAO,GACR,GAAG,KAAK,CAAC;IAEV,OAAO,CACL,WAAK,KAAK,EAAC,gBAAgB;QACzB,WAAK,KAAK,EAAC,aAAa,IACrB,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAC5B,WAAK,KAAK,EAAC,YAAY,EAAC,GAAG,EAAE,cAAc,KAAK,EAAE,IAC/C,GAAG,CACA,CACP,CAAC,CACE;QACN,WAAK,KAAK,EAAC,WAAW,IACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACd,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,OAAO,WAAK,KAAK,EAAC,eAAe,GAAO,CAAC;YAC3C,CAAC;YAED,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;YACtB,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;gBAC7B,OAAO,WAAK,KAAK,EAAC,+BAA+B,GAAO,CAAC;YAC3D,CAAC;YAED,MAAM,UAAU,GACd,aAAa,KAAK,QAAQ;gBAC1B,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YAChD,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YAC3D,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YACvD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAElC,OAAO,CACL,EAAC,OAAO,IACN,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,GAAG,CAAC,UAAU,EAC1B,cAAc,EAAE,GAAG,CAAC,cAAc,EAClC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,WAAW,EACpB,UAAU,EAAE,GAAG,CAAC,UAAU,EAC1B,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,UAAU,GACnB,CACH,CAAC;QACJ,CAAC,CAAC,CACE,CACF,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { FunctionalComponent, h } from '@stencil/core';\nimport { DayCell } from './day-cell';\nimport { isSameDate } from '../nv-calendar.utils';\n\n/**\n * Day data structure\n * @internal\n */\ninterface DayData {\n /** Day of the month (1-31) */\n dayOfMonth: number | null;\n /** Complete date */\n date: Date | null;\n /** If the day belongs to the current month */\n isCurrentMonth: boolean;\n /** If the day is disabled */\n isDisabled: boolean;\n /** If the day is blank */\n isBlank: boolean;\n}\n\n/**\n * Props for the CalendarGrid component\n * @internal\n */\ninterface CalendarGridProps {\n /** Array of day data for the month */\n days: DayData[];\n /** Array of localized day names */\n dayNames: string[];\n /** Current selection type */\n selectionType: 'single' | 'range';\n /** Selected date in single mode */\n selectedDate: Date | null;\n /** Start date in range mode */\n startDate: Date | null;\n /** End date in range mode */\n endDate: Date | null;\n /** Whether date format is in UTC mode */\n isUTCMode: boolean;\n /** Handler for day selection */\n onDayClick: (date: Date) => void;\n /** Function to check if date is in range */\n isDateInRange: (date: Date) => boolean;\n /** Function to check if date is today */\n isToday: (date: Date) => boolean;\n}\n\n/**\n * Renders the calendar grid with day headers and day cells\n * @param {CalendarGridProps} props - Component properties\n * @returns {JSX.Element} JSX element representing the calendar grid\n */\nexport const CalendarGrid: FunctionalComponent<CalendarGridProps> = props => {\n const {\n days,\n dayNames,\n selectionType,\n selectedDate,\n startDate,\n endDate,\n isUTCMode,\n onDayClick,\n isDateInRange,\n isToday,\n } = props;\n\n return (\n <div class=\"days-container\">\n <div class=\"days-header\">\n {dayNames.map((day, index) => (\n <div class=\"day-header\" key={`day-header-${index}`}>\n {day}\n </div>\n ))}\n </div>\n <div class=\"days-grid\">\n {days.map(day => {\n if (day.isBlank) {\n return <div class=\"day day-blank\"></div>;\n }\n\n const date = day.date;\n if (!date || !day.dayOfMonth) {\n return <div class=\"day-cell is-disabled is-empty\"></div>;\n }\n\n const isSelected =\n selectionType === 'single' &&\n isSameDate(date, selectedDate, { isUTCMode });\n const isInRange = isDateInRange(date);\n const isStart = isSameDate(date, startDate, { isUTCMode });\n const isEnd = isSameDate(date, endDate, { isUTCMode });\n const isTodayDate = isToday(date);\n\n return (\n <DayCell\n date={date}\n dayOfMonth={day.dayOfMonth}\n isCurrentMonth={day.isCurrentMonth}\n isSelected={isSelected}\n isInRange={isInRange}\n isStart={isStart}\n isEnd={isEnd}\n isToday={isTodayDate}\n isDisabled={day.isDisabled}\n selectionType={selectionType}\n onClick={onDayClick}\n />\n );\n })}\n </div>\n </div>\n );\n};\n"]}
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable jsdoc/require-jsdoc */
2
- import { describe, it, expect, vi } from "vitest";
2
+ import { describe, it, expect } from "vitest";
3
3
  import { formatDate, isSameDate, isSameOrBefore, isSameOrAfter, getWeekNumber, parseDate, } from "../nv-calendar.utils";
4
4
  /**
5
5
  * Comprehensive tests for nv-calendar utilities
@@ -270,13 +270,9 @@ describe('nv-calendar.utils - Comprehensive Tests', () => {
270
270
  expect(result === null || result === void 0 ? void 0 : result.toISOString()).toBe(isoString);
271
271
  });
272
272
  it('should handle invalid ISO strings gracefully', () => {
273
- const consoleSpy = vi
274
- .spyOn(console, 'error')
275
- .mockImplementation(() => { });
276
273
  const result = parseDate('invalid-iso-string', 'YYYY-MM-DD');
277
274
  // Should continue with other parsing methods
278
275
  expect(result).toBeNull();
279
- consoleSpy.mockRestore();
280
276
  });
281
277
  });
282
278
  describe('Unix Format Parsing', () => {
@@ -332,12 +328,8 @@ describe('nv-calendar.utils - Comprehensive Tests', () => {
332
328
  const validResult = parseDate('2024-06-15', 'YYYY-MM-DD');
333
329
  expect(validResult).toBeInstanceOf(Date);
334
330
  // Invalid format should return null
335
- const consoleSpy = vi
336
- .spyOn(console, 'error')
337
- .mockImplementation(() => { });
338
331
  const invalidResult = parseDate('invalid-date', 'YYYY-MM-DD');
339
332
  expect(invalidResult).toBeNull();
340
- consoleSpy.mockRestore();
341
333
  });
342
334
  it('should handle UTC custom formats', () => {
343
335
  // Use a format that DayJS can actually parse
@@ -345,28 +337,6 @@ describe('nv-calendar.utils - Comprehensive Tests', () => {
345
337
  expect(result).toBeInstanceOf(Date);
346
338
  });
347
339
  });
348
- describe('Error Handling', () => {
349
- it('should handle parsing errors gracefully', () => {
350
- const consoleSpy = vi
351
- .spyOn(console, 'error')
352
- .mockImplementation(() => { });
353
- const result = parseDate('completely-invalid', 'YYYY-MM-DD');
354
- expect(result).toBeNull();
355
- expect(consoleSpy).toHaveBeenCalled();
356
- consoleSpy.mockRestore();
357
- });
358
- it('should log parsing errors with context', () => {
359
- const consoleSpy = vi
360
- .spyOn(console, 'error')
361
- .mockImplementation(() => { });
362
- parseDate('invalid', 'YYYY-MM-DD');
363
- expect(consoleSpy).toHaveBeenCalledWith('Parsing error:', {
364
- dateInput: 'invalid',
365
- dateFormat: 'YYYY-MM-DD',
366
- });
367
- consoleSpy.mockRestore();
368
- });
369
- });
370
340
  describe('Edge Cases', () => {
371
341
  it('should handle leap year parsing', () => {
372
342
  const result = parseDate('29/02/2024', 'DD/MM/YYYY');
@@ -400,6 +370,10 @@ describe('nv-calendar.utils - Comprehensive Tests', () => {
400
370
  expect(parsed).toBeInstanceOf(Date);
401
371
  // Should be same day (ignoring potential timezone differences)
402
372
  expect(isSameDate(originalDate, parsed, { isUTCMode: false })).toBe(true);
373
+ // Test Unix milliseconds roundtrip
374
+ const unixMsFormatted = formatDate(originalDate, { dateFormat: 'x' });
375
+ const unixMsParsed = parseDate(unixMsFormatted, 'x');
376
+ expect(originalDate.getTime()).toBe(unixMsParsed.getTime());
403
377
  });
404
378
  it('should handle complete date comparison workflow', () => {
405
379
  const date1 = new Date('2024-06-14T12:00:00Z');
@@ -1 +1 @@
1
- {"version":3,"file":"nv-calendar.utils.test.js","sourceRoot":"","sources":["../../../../src/components/nv-calendar/test/nv-calendar.utils.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\nimport { describe, it, expect, vi } from 'vitest';\nimport {\n formatDate,\n isSameDate,\n isSameOrBefore,\n isSameOrAfter,\n getWeekNumber,\n parseDate,\n} from '../nv-calendar.utils';\n\n/**\n * Comprehensive tests for nv-calendar utilities\n *\n * These tests validate all utility functions:\n * - Date formatting with various formats\n * - Date comparison logic (same, before, after)\n * - Week number calculation\n * - Date parsing from various formats\n * - UTC vs local timezone handling\n * - Edge cases and error conditions\n */\n\ndescribe('nv-calendar.utils - Comprehensive Tests', () => {\n describe('formatDate', () => {\n const testDate = new Date('2024-06-15T14:30:45.123Z');\n\n describe('Standard Date Formats', () => {\n it('should format basic date patterns', () => {\n expect(formatDate(testDate, { dateFormat: 'YYYY-MM-DD' })).toBe(\n '2024-06-15',\n );\n expect(formatDate(testDate, { dateFormat: 'DD/MM/YYYY' })).toBe(\n '15/06/2024',\n );\n expect(formatDate(testDate, { dateFormat: 'MM-DD-YYYY' })).toBe(\n '06-15-2024',\n );\n expect(formatDate(testDate, { dateFormat: 'YYYY' })).toBe('2024');\n expect(formatDate(testDate, { dateFormat: 'MM' })).toBe('06');\n expect(formatDate(testDate, { dateFormat: 'DD' })).toBe('15');\n });\n\n it('should format date with time patterns', () => {\n expect(\n formatDate(testDate, { dateFormat: 'YYYY-MM-DD HH:mm:ss' }),\n ).toMatch(/\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}/);\n expect(formatDate(testDate, { dateFormat: 'HH:mm' })).toMatch(\n /\\d{2}:\\d{2}/,\n );\n expect(formatDate(testDate, { dateFormat: 'HH:mm:ss' })).toMatch(\n /\\d{2}:\\d{2}:\\d{2}/,\n );\n });\n\n it('should handle empty date', () => {\n expect(\n formatDate(null as unknown as Date, { dateFormat: 'YYYY-MM-DD' }),\n ).toBe('');\n expect(\n formatDate(undefined as unknown as Date, {\n dateFormat: 'YYYY-MM-DD',\n }),\n ).toBe('');\n });\n });\n\n describe('Special Formats', () => {\n it('should handle ISO 8601 format', () => {\n const result = formatDate(testDate, {\n dateFormat: 'YYYY-MM-DD[T]HH:mm:ss[Z]',\n });\n expect(result).toBe(testDate.toISOString());\n expect(result).toMatch(/\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z/);\n });\n\n it('should handle Ticks format (C# compatibility)', () => {\n const result = formatDate(testDate, { dateFormat: 'Ticks' });\n expect(typeof result).toBe('string');\n expect(Number(result)).toBeGreaterThan(0);\n\n // Verify ticks calculation\n const expectedTicks = testDate.getTime() * 10000 + 621355968000000000;\n expect(result).toBe(expectedTicks.toString());\n });\n\n it('should handle Unix seconds format', () => {\n const result = formatDate(testDate, { dateFormat: 'X' });\n expect(typeof result).toBe('string');\n expect(Number(result)).toBeGreaterThan(0);\n\n // Unix seconds should be roughly testDate.getTime() / 1000\n const unixSeconds = Math.floor(testDate.getTime() / 1000);\n expect(Number(result)).toBe(unixSeconds);\n });\n\n it('should handle Unix milliseconds format', () => {\n const result = formatDate(testDate, { dateFormat: 'x' });\n expect(result).toBe(testDate.getTime().toString());\n });\n });\n\n describe('UTC Mode', () => {\n it('should handle UTC formats correctly', () => {\n const utcResult = formatDate(testDate, { dateFormat: 'YYYY-MM-DD[Z]' });\n expect(utcResult).toMatch(/\\d{4}-\\d{2}-\\d{2}Z/);\n\n const localResult = formatDate(testDate, { dateFormat: 'YYYY-MM-DD' });\n expect(localResult).toMatch(/\\d{4}-\\d{2}-\\d{2}/);\n });\n\n it('should handle UTC time formats', () => {\n const result = formatDate(testDate, { dateFormat: 'HH:mm:ss[Z]' });\n expect(result).toMatch(/\\d{2}:\\d{2}:\\d{2}Z/);\n });\n });\n\n describe('Edge Cases', () => {\n it('should handle leap year dates', () => {\n const leapDate = new Date('2024-02-29T12:00:00Z');\n expect(formatDate(leapDate, { dateFormat: 'YYYY-MM-DD' })).toBe(\n '2024-02-29',\n );\n });\n\n it('should handle year boundaries', () => {\n const newYear = new Date('2024-01-01T12:00:00Z'); // Use midday UTC to avoid timezone issues\n const endYear = new Date('2024-12-31T12:00:00Z'); // Use midday UTC to avoid timezone issues\n\n expect(formatDate(newYear, { dateFormat: 'YYYY-MM-DD' })).toBe(\n '2024-01-01',\n );\n expect(formatDate(endYear, { dateFormat: 'YYYY-MM-DD' })).toBe(\n '2024-12-31',\n );\n });\n\n it('should handle custom format patterns', () => {\n expect(\n formatDate(testDate, { dateFormat: '[Year] YYYY [Month] MM' }),\n ).toMatch(/Year \\d{4} Month \\d{2}/);\n // DayJS ordinals may behave differently, let's test a more generic pattern\n expect(formatDate(testDate, { dateFormat: 'DD MMMM YYYY' })).toMatch(\n /\\d{1,2} [A-Za-z]+ \\d{4}/,\n );\n });\n });\n });\n\n describe('isSameDate', () => {\n const date1 = new Date('2024-06-15T10:30:00Z');\n const date2 = new Date('2024-06-15T18:45:00Z'); // Same day, different time\n const date3 = new Date('2024-06-16T10:30:00Z'); // Different day\n\n describe('Local Mode', () => {\n it('should detect same dates in local mode', () => {\n expect(isSameDate(date1, date2, { isUTCMode: false })).toBe(true);\n expect(isSameDate(date1, date3, { isUTCMode: false })).toBe(false);\n });\n\n it('should ignore time differences in local mode', () => {\n const morning = new Date('2024-06-15T08:00:00');\n const evening = new Date('2024-06-15T20:00:00');\n\n expect(isSameDate(morning, evening, { isUTCMode: false })).toBe(true);\n });\n });\n\n describe('UTC Mode', () => {\n it('should detect same dates in UTC mode', () => {\n expect(isSameDate(date1, date2, { isUTCMode: true })).toBe(true);\n expect(isSameDate(date1, date3, { isUTCMode: true })).toBe(false);\n });\n\n it('should handle timezone differences correctly', () => {\n // In UTC mode, should compare UTC components\n // This test may be timezone dependent, let's use more reliable dates\n const utcDate1 = new Date('2024-06-15T12:00:00Z');\n const utcDate2 = new Date('2024-06-16T12:00:00Z');\n expect(isSameDate(utcDate1, utcDate2, { isUTCMode: true })).toBe(false);\n });\n });\n\n describe('Null/Invalid Dates', () => {\n it('should handle null dates', () => {\n expect(isSameDate(null, date1, { isUTCMode: false })).toBe(false);\n expect(isSameDate(date1, null, { isUTCMode: false })).toBe(false);\n expect(isSameDate(null, null, { isUTCMode: false })).toBe(false);\n });\n\n it('should handle same reference', () => {\n expect(isSameDate(date1, date1, { isUTCMode: false })).toBe(true);\n expect(isSameDate(date1, date1, { isUTCMode: true })).toBe(true);\n });\n });\n\n describe('Edge Cases', () => {\n it('should handle leap year dates', () => {\n const leap1 = new Date('2024-02-29T10:00:00Z');\n const leap2 = new Date('2024-02-29T20:00:00Z');\n\n expect(isSameDate(leap1, leap2, { isUTCMode: true })).toBe(true);\n });\n\n it('should handle year boundaries', () => {\n const endYear = new Date('2023-12-31T23:59:59Z');\n const startYear = new Date('2024-01-01T00:00:01Z');\n\n expect(isSameDate(endYear, startYear, { isUTCMode: true })).toBe(false);\n });\n });\n });\n\n describe('isSameOrBefore', () => {\n const baseDate = new Date('2024-06-15T12:00:00Z');\n const beforeDate = new Date('2024-06-14T12:00:00Z');\n const afterDate = new Date('2024-06-16T12:00:00Z');\n const sameDate = new Date('2024-06-15T18:00:00Z');\n\n describe('Local Mode', () => {\n it('should detect before dates correctly', () => {\n expect(isSameOrBefore(beforeDate, baseDate, { isUTCMode: false })).toBe(\n true,\n );\n expect(isSameOrBefore(afterDate, baseDate, { isUTCMode: false })).toBe(\n false,\n );\n expect(isSameOrBefore(sameDate, baseDate, { isUTCMode: false })).toBe(\n true,\n );\n });\n\n it('should handle same date different times', () => {\n const morning = new Date('2024-06-15T08:00:00');\n const evening = new Date('2024-06-15T20:00:00');\n\n expect(isSameOrBefore(morning, evening, { isUTCMode: false })).toBe(\n true,\n );\n expect(isSameOrBefore(evening, morning, { isUTCMode: false })).toBe(\n true,\n );\n });\n });\n\n describe('UTC Mode', () => {\n it('should compare UTC dates correctly', () => {\n expect(isSameOrBefore(beforeDate, baseDate, { isUTCMode: true })).toBe(\n true,\n );\n expect(isSameOrBefore(afterDate, baseDate, { isUTCMode: true })).toBe(\n false,\n );\n expect(isSameOrBefore(sameDate, baseDate, { isUTCMode: true })).toBe(\n true,\n );\n });\n });\n\n describe('Complex Comparisons', () => {\n it('should handle year comparisons', () => {\n const date2023 = new Date('2023-12-31T23:59:59Z');\n const date2024 = new Date('2024-01-01T00:00:01Z');\n\n expect(isSameOrBefore(date2023, date2024, { isUTCMode: true })).toBe(\n true,\n );\n expect(isSameOrBefore(date2024, date2023, { isUTCMode: true })).toBe(\n false,\n );\n });\n\n it('should handle month comparisons', () => {\n const january = new Date('2024-01-15T12:00:00Z');\n const february = new Date('2024-02-15T12:00:00Z');\n\n expect(isSameOrBefore(january, february, { isUTCMode: true })).toBe(\n true,\n );\n expect(isSameOrBefore(february, january, { isUTCMode: true })).toBe(\n false,\n );\n });\n });\n\n describe('Null/Invalid Dates', () => {\n it('should handle null dates', () => {\n expect(\n isSameOrBefore(null as unknown as Date, baseDate, {\n isUTCMode: false,\n }),\n ).toBe(false);\n expect(\n isSameOrBefore(baseDate, null as unknown as Date, {\n isUTCMode: false,\n }),\n ).toBe(false);\n });\n });\n });\n\n describe('isSameOrAfter', () => {\n const baseDate = new Date('2024-06-15T12:00:00Z');\n const beforeDate = new Date('2024-06-14T12:00:00Z');\n const afterDate = new Date('2024-06-16T12:00:00Z');\n const sameDate = new Date('2024-06-15T18:00:00Z');\n\n describe('Local Mode', () => {\n it('should detect after dates correctly', () => {\n expect(isSameOrAfter(afterDate, baseDate, { isUTCMode: false })).toBe(\n true,\n );\n expect(isSameOrAfter(beforeDate, baseDate, { isUTCMode: false })).toBe(\n false,\n );\n expect(isSameOrAfter(sameDate, baseDate, { isUTCMode: false })).toBe(\n true,\n );\n });\n });\n\n describe('UTC Mode', () => {\n it('should compare UTC dates correctly', () => {\n expect(isSameOrAfter(afterDate, baseDate, { isUTCMode: true })).toBe(\n true,\n );\n expect(isSameOrAfter(beforeDate, baseDate, { isUTCMode: true })).toBe(\n false,\n );\n expect(isSameOrAfter(sameDate, baseDate, { isUTCMode: true })).toBe(\n true,\n );\n });\n });\n\n describe('Null/Invalid Dates', () => {\n it('should handle null dates', () => {\n expect(\n isSameOrAfter(null as unknown as Date, baseDate, {\n isUTCMode: false,\n }),\n ).toBe(false);\n expect(\n isSameOrAfter(baseDate, null as unknown as Date, {\n isUTCMode: false,\n }),\n ).toBe(false);\n });\n });\n });\n\n describe('getWeekNumber', () => {\n describe('Standard Week Calculations', () => {\n it('should calculate correct week numbers for known dates', () => {\n expect(getWeekNumber(new Date('2024-01-01'))).toBe(1);\n expect(getWeekNumber(new Date('2024-01-07'))).toBe(1); // 7 January 2024 is still in week 1\n expect(getWeekNumber(new Date('2024-06-15'))).toBe(24);\n expect(getWeekNumber(new Date('2024-12-31'))).toBe(1); // 31 December 2024 is in week 1 of 2025\n });\n\n it('should handle different years', () => {\n expect(getWeekNumber(new Date('2023-01-01'))).toBe(52); // 1st January 2023 is in week 52 of 2022\n expect(getWeekNumber(new Date('2025-01-01'))).toBe(1);\n });\n });\n\n describe('Edge Cases', () => {\n it('should handle leap year correctly', () => {\n const leapYearDate = new Date('2024-02-29');\n expect(getWeekNumber(leapYearDate)).toBeGreaterThan(0);\n expect(getWeekNumber(leapYearDate)).toBeLessThanOrEqual(53);\n });\n\n it('should handle year boundaries', () => {\n const endOfYear = new Date('2024-12-31');\n const startOfYear = new Date('2024-01-01');\n\n expect(getWeekNumber(startOfYear)).toBe(1);\n expect(getWeekNumber(endOfYear)).toBe(1);\n });\n });\n });\n\n describe('parseDate', () => {\n describe('Date Object Input', () => {\n it('should return Date objects as-is', () => {\n const inputDate = new Date('2024-06-15T12:00:00Z');\n const result = parseDate(inputDate, 'YYYY-MM-DD');\n expect(result).toBe(inputDate);\n });\n });\n\n describe('ISO 8601 String Parsing', () => {\n it('should parse standard ISO 8601 strings', () => {\n const isoString = '2024-06-15T12:00:00.123Z';\n const result = parseDate(isoString, 'YYYY-MM-DD');\n\n expect(result).toBeInstanceOf(Date);\n expect(result?.toISOString()).toBe(isoString);\n });\n\n it('should handle invalid ISO strings gracefully', () => {\n const consoleSpy = vi\n .spyOn(console, 'error')\n .mockImplementation(() => {});\n\n const result = parseDate('invalid-iso-string', 'YYYY-MM-DD');\n // Should continue with other parsing methods\n expect(result).toBeNull();\n\n consoleSpy.mockRestore();\n });\n });\n\n describe('Unix Format Parsing', () => {\n it('should parse Unix seconds (X format)', () => {\n const unixSeconds = '1718452800'; // 2024-06-15T12:00:00Z\n const result = parseDate(unixSeconds, 'X');\n\n expect(result).toBeInstanceOf(Date);\n expect(result?.getTime()).toBe(1718452800000);\n });\n\n it('should parse Unix seconds in UTC mode', () => {\n const unixSeconds = '1718452800';\n // Remove Z from format as it causes parsing to fail\n const result = parseDate(unixSeconds, 'X');\n\n expect(result).toBeInstanceOf(Date);\n });\n\n it('should parse Unix milliseconds (x format)', () => {\n const unixMs = '1718452800123';\n const result = parseDate(unixMs, 'x');\n\n expect(result).toBeInstanceOf(Date);\n expect(result?.getTime()).toBe(1718452800123);\n });\n\n it('should handle invalid Unix timestamps', () => {\n expect(parseDate('invalid', 'X')).toBeNull();\n expect(parseDate('invalid', 'x')).toBeNull();\n });\n });\n\n describe('C# Ticks Format', () => {\n it('should parse C# Ticks format', () => {\n const ticks = '638544096000000000'; // Approximate ticks for a date\n const result = parseDate(ticks, 'Ticks');\n\n expect(result).toBeInstanceOf(Date);\n });\n\n it('should handle Ticks in UTC mode', () => {\n const ticks = '638544096000000000';\n // Remove Z from format as it causes parsing to fail\n const result = parseDate(ticks, 'Ticks');\n\n expect(result).toBeInstanceOf(Date);\n });\n\n it('should handle invalid Ticks', () => {\n expect(parseDate('invalid', 'Ticks')).toBeNull();\n });\n });\n\n describe('Custom Format Parsing', () => {\n it('should parse custom date formats', () => {\n const result = parseDate('15/06/2024', 'DD/MM/YYYY');\n\n expect(result).toBeInstanceOf(Date);\n expect(result?.getFullYear()).toBe(2024);\n expect(result?.getMonth()).toBe(5); // June is month 5 (0-indexed)\n expect(result?.getDate()).toBe(15);\n });\n\n it('should parse with strict mode', () => {\n // Valid format\n const validResult = parseDate('2024-06-15', 'YYYY-MM-DD');\n expect(validResult).toBeInstanceOf(Date);\n\n // Invalid format should return null\n const consoleSpy = vi\n .spyOn(console, 'error')\n .mockImplementation(() => {});\n const invalidResult = parseDate('invalid-date', 'YYYY-MM-DD');\n expect(invalidResult).toBeNull();\n consoleSpy.mockRestore();\n });\n\n it('should handle UTC custom formats', () => {\n // Use a format that DayJS can actually parse\n const result = parseDate(\n '2024-06-15T12:00:00Z',\n 'YYYY-MM-DD[T]HH:mm:ss[Z]',\n );\n expect(result).toBeInstanceOf(Date);\n });\n });\n\n describe('Error Handling', () => {\n it('should handle parsing errors gracefully', () => {\n const consoleSpy = vi\n .spyOn(console, 'error')\n .mockImplementation(() => {});\n\n const result = parseDate('completely-invalid', 'YYYY-MM-DD');\n expect(result).toBeNull();\n expect(consoleSpy).toHaveBeenCalled();\n\n consoleSpy.mockRestore();\n });\n\n it('should log parsing errors with context', () => {\n const consoleSpy = vi\n .spyOn(console, 'error')\n .mockImplementation(() => {});\n\n parseDate('invalid', 'YYYY-MM-DD');\n\n expect(consoleSpy).toHaveBeenCalledWith('Parsing error:', {\n dateInput: 'invalid',\n dateFormat: 'YYYY-MM-DD',\n });\n\n consoleSpy.mockRestore();\n });\n });\n\n describe('Edge Cases', () => {\n it('should handle leap year parsing', () => {\n const result = parseDate('29/02/2024', 'DD/MM/YYYY');\n expect(result).toBeInstanceOf(Date);\n expect(result?.getMonth()).toBe(1); // February\n expect(result?.getDate()).toBe(29);\n });\n\n it('should handle year boundaries', () => {\n const newYear = parseDate('01/01/2024', 'DD/MM/YYYY');\n const endYear = parseDate('31/12/2024', 'DD/MM/YYYY');\n\n expect(newYear).toBeInstanceOf(Date);\n expect(endYear).toBeInstanceOf(Date);\n });\n\n it('should handle various time formats', () => {\n const withTime = parseDate(\n '2024-06-15 14:30:45',\n 'YYYY-MM-DD HH:mm:ss',\n );\n expect(withTime).toBeInstanceOf(Date);\n expect(withTime?.getHours()).toBe(14);\n expect(withTime?.getMinutes()).toBe(30);\n expect(withTime?.getSeconds()).toBe(45);\n });\n });\n });\n\n describe('Integration Scenarios', () => {\n it('should work with format and parse roundtrip', () => {\n const originalDate = new Date('2024-06-15T12:30:45Z');\n\n // Format then parse back\n const formatted = formatDate(originalDate, {\n dateFormat: 'YYYY-MM-DD HH:mm:ss',\n });\n const parsed = parseDate(formatted, 'YYYY-MM-DD HH:mm:ss');\n\n expect(parsed).toBeInstanceOf(Date);\n // Should be same day (ignoring potential timezone differences)\n expect(isSameDate(originalDate, parsed!, { isUTCMode: false })).toBe(\n true,\n );\n });\n\n it('should handle complete date comparison workflow', () => {\n const date1 = new Date('2024-06-14T12:00:00Z');\n const date2 = new Date('2024-06-15T12:00:00Z');\n const date3 = new Date('2024-06-16T12:00:00Z');\n\n // Test all comparison functions\n expect(isSameDate(date1, date2, { isUTCMode: true })).toBe(false);\n expect(isSameOrBefore(date1, date2, { isUTCMode: true })).toBe(true);\n expect(isSameOrAfter(date3, date2, { isUTCMode: true })).toBe(true);\n });\n\n it('should handle special format roundtrips', () => {\n const originalDate = new Date('2024-06-15T12:00:00Z');\n\n // Test Unix seconds roundtrip\n const unixFormatted = formatDate(originalDate, { dateFormat: 'X' });\n const unixParsed = parseDate(unixFormatted, 'X');\n expect(\n Math.abs(originalDate.getTime() - unixParsed!.getTime()),\n ).toBeLessThan(1000); // Within 1 second\n\n // Test Unix milliseconds roundtrip\n const unixMsFormatted = formatDate(originalDate, { dateFormat: 'x' });\n const unixMsParsed = parseDate(unixMsFormatted, 'x');\n expect(originalDate.getTime()).toBe(unixMsParsed!.getTime());\n });\n });\n\n describe('Value Prop Integration Logic', () => {\n describe('Single Selection Value Parsing', () => {\n it('should parse single date value correctly', () => {\n const value = '2025-03-15';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n expect(values).toHaveLength(1);\n expect(values[0]).toBe('2025-03-15');\n\n const parsedDate = parseDate(values[0], 'YYYY-MM-DD');\n expect(parsedDate).toBeTruthy();\n expect(parsedDate.getFullYear()).toBe(2025);\n expect(parsedDate.getMonth()).toBe(2); // March (0-indexed)\n expect(parsedDate.getDate()).toBe(15);\n });\n\n it('should handle empty single value', () => {\n const value = '';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n expect(values).toHaveLength(0);\n });\n\n it('should handle malformed single date', () => {\n const value = 'invalid-date';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n expect(values).toHaveLength(1);\n const parsedDate = parseDate(values[0], 'YYYY-MM-DD');\n expect(parsedDate).toBeNull();\n });\n\n it('should format single date for emission', () => {\n const date = new Date('2025-03-15');\n const formatted = formatDate(date, { dateFormat: 'YYYY-MM-DD' });\n\n expect(formatted).toBe('2025-03-15');\n });\n });\n\n describe('Range Selection Value Parsing', () => {\n it('should parse range value correctly', () => {\n const value = '2025-03-15,2025-03-20';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n expect(values).toHaveLength(2);\n expect(values[0]).toBe('2025-03-15');\n expect(values[1]).toBe('2025-03-20');\n\n const startDate = parseDate(values[0], 'YYYY-MM-DD');\n const endDate = parseDate(values[1], 'YYYY-MM-DD');\n\n expect(startDate).toBeTruthy();\n expect(endDate).toBeTruthy();\n\n expect(startDate.getFullYear()).toBe(2025);\n expect(startDate.getMonth()).toBe(2); // March\n expect(startDate.getDate()).toBe(15);\n\n expect(endDate.getFullYear()).toBe(2025);\n expect(endDate.getMonth()).toBe(2); // March\n expect(endDate.getDate()).toBe(20);\n });\n\n it('should handle range with extra spaces', () => {\n const value = ' 2025-03-15 , 2025-03-20 ';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n expect(values).toHaveLength(2);\n expect(values[0]).toBe('2025-03-15');\n expect(values[1]).toBe('2025-03-20');\n });\n\n it('should handle incomplete range (only start date)', () => {\n const value = '2025-03-15,';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n expect(values).toHaveLength(1);\n expect(values[0]).toBe('2025-03-15');\n });\n\n it('should handle malformed range dates', () => {\n const value = 'invalid-start,invalid-end';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n expect(values).toHaveLength(2);\n const startDate = parseDate(values[0], 'YYYY-MM-DD');\n const endDate = parseDate(values[1], 'YYYY-MM-DD');\n\n expect(startDate).toBeNull();\n expect(endDate).toBeNull();\n });\n\n it('should format range dates for emission', () => {\n const startDate = new Date('2025-03-15');\n const endDate = new Date('2025-03-20');\n\n const startFormatted = formatDate(startDate, {\n dateFormat: 'YYYY-MM-DD',\n });\n const endFormatted = formatDate(endDate, { dateFormat: 'YYYY-MM-DD' });\n const unifiedValue = `${startFormatted},${endFormatted}`;\n\n expect(unifiedValue).toBe('2025-03-15,2025-03-20');\n });\n\n it('should handle date order validation', () => {\n const startDate = new Date('2025-03-20');\n const endDate = new Date('2025-03-15');\n\n // Simulate swapping logic\n const orderedDates =\n startDate > endDate ? [endDate, startDate] : [startDate, endDate];\n\n expect(orderedDates[0]).toEqual(endDate); // 2025-03-15\n expect(orderedDates[1]).toEqual(startDate); // 2025-03-20\n });\n });\n\n describe('Value Synchronization Logic', () => {\n it('should generate legacy single value from unified value', () => {\n const unifiedValue = '2025-03-15';\n const values = unifiedValue\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n if (values.length >= 1) {\n const parsedDate = parseDate(values[0], 'YYYY-MM-DD');\n const legacySingleValue = formatDate(parsedDate, {\n dateFormat: 'YYYY-MM-DD',\n });\n\n expect(legacySingleValue).toBe('2025-03-15');\n }\n });\n\n it('should generate legacy range value from unified value', () => {\n const unifiedValue = '2025-03-15,2025-03-20';\n const values = unifiedValue\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n if (values.length >= 2) {\n const startDate = parseDate(values[0], 'YYYY-MM-DD');\n const endDate = parseDate(values[1], 'YYYY-MM-DD');\n\n const legacyRangeValue = {\n start: formatDate(startDate, { dateFormat: 'YYYY-MM-DD' }),\n end: formatDate(endDate, { dateFormat: 'YYYY-MM-DD' }),\n };\n\n expect(legacyRangeValue).toEqual({\n start: '2025-03-15',\n end: '2025-03-20',\n });\n }\n });\n\n it('should generate unified value from legacy single value', () => {\n const legacySingleValue = '2025-03-15';\n const unifiedValue = legacySingleValue;\n\n expect(unifiedValue).toBe('2025-03-15');\n });\n\n it('should generate unified value from legacy range value', () => {\n const legacyRangeValue = {\n start: '2025-03-15',\n end: '2025-03-20',\n };\n const unifiedValue = `${legacyRangeValue.start},${legacyRangeValue.end}`;\n\n expect(unifiedValue).toBe('2025-03-15,2025-03-20');\n });\n });\n\n describe('Different Date Formats with Value Prop', () => {\n it('should handle DD-MM-YYYY format in value prop', () => {\n const value = '15-03-2025';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n const parsedDate = parseDate(values[0], 'DD-MM-YYYY');\n expect(parsedDate).toBeTruthy();\n expect(parsedDate.getFullYear()).toBe(2025);\n expect(parsedDate.getMonth()).toBe(2); // March\n expect(parsedDate.getDate()).toBe(15);\n\n const formatted = formatDate(parsedDate, { dateFormat: 'DD-MM-YYYY' });\n expect(formatted).toBe('15-03-2025');\n });\n\n it('should handle MM/DD/YYYY format in value prop', () => {\n const value = '03/15/2025';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n const parsedDate = parseDate(values[0], 'MM/DD/YYYY');\n expect(parsedDate).toBeTruthy();\n expect(parsedDate.getFullYear()).toBe(2025);\n expect(parsedDate.getMonth()).toBe(2); // March\n expect(parsedDate.getDate()).toBe(15);\n\n const formatted = formatDate(parsedDate, { dateFormat: 'MM/DD/YYYY' });\n expect(formatted).toBe('03/15/2025');\n });\n\n it('should handle range with custom format in value prop', () => {\n const value = '15-03-2025,20-03-2025';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n const startDate = parseDate(values[0], 'DD-MM-YYYY');\n const endDate = parseDate(values[1], 'DD-MM-YYYY');\n\n expect(startDate).toBeTruthy();\n expect(endDate).toBeTruthy();\n\n const startFormatted = formatDate(startDate, {\n dateFormat: 'DD-MM-YYYY',\n });\n const endFormatted = formatDate(endDate, { dateFormat: 'DD-MM-YYYY' });\n const unifiedValue = `${startFormatted},${endFormatted}`;\n\n expect(unifiedValue).toBe('15-03-2025,20-03-2025');\n });\n });\n\n describe('Value Prop Edge Cases', () => {\n it('should handle value with only commas', () => {\n const value = ',,,';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n expect(values).toHaveLength(0);\n });\n\n it('should handle value with trailing comma', () => {\n const value = '2025-03-15,';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n expect(values).toHaveLength(1);\n expect(values[0]).toBe('2025-03-15');\n });\n\n it('should handle value with leading comma', () => {\n const value = ',2025-03-15';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n expect(values).toHaveLength(1);\n expect(values[0]).toBe('2025-03-15');\n });\n\n it('should handle value with multiple commas between dates', () => {\n const value = '2025-03-15,,2025-03-20';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n expect(values).toHaveLength(2);\n expect(values[0]).toBe('2025-03-15');\n expect(values[1]).toBe('2025-03-20');\n });\n\n it('should handle range with more than 2 dates (take first 2)', () => {\n const value = '2025-03-15,2025-03-20,2025-03-25';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n expect(values).toHaveLength(3);\n\n // For range mode, only first 2 should be used\n const startDate = parseDate(values[0], 'YYYY-MM-DD');\n const endDate = parseDate(values[1], 'YYYY-MM-DD');\n\n expect(startDate).toBeTruthy();\n expect(endDate).toBeTruthy();\n expect(startDate.getDate()).toBe(15);\n expect(endDate.getDate()).toBe(20);\n });\n });\n\n describe('Value Priority Logic', () => {\n it('should prioritize unified value over legacy single value', () => {\n const unifiedValue = '2025-03-15';\n const legacySingleValue = '2025-01-01';\n\n // Simulate priority logic: if unifiedValue exists, use it\n const effectiveValue = unifiedValue || legacySingleValue;\n\n expect(effectiveValue).toBe('2025-03-15');\n });\n\n it('should prioritize unified value over legacy range value', () => {\n const unifiedValue = '2025-03-15,2025-03-20';\n const legacyRangeValue = { start: '2025-01-01', end: '2025-01-07' };\n\n // Simulate priority logic: if unifiedValue exists, use it\n const effectiveValue =\n unifiedValue || `${legacyRangeValue.start},${legacyRangeValue.end}`;\n\n expect(effectiveValue).toBe('2025-03-15,2025-03-20');\n });\n\n it('should fallback to legacy values when unified value is empty', () => {\n const unifiedValue = '';\n const legacySingleValue = '2025-01-01';\n\n const effectiveValue = unifiedValue || legacySingleValue;\n\n expect(effectiveValue).toBe('2025-01-01');\n });\n });\n });\n});\n"]}
1
+ {"version":3,"file":"nv-calendar.utils.test.js","sourceRoot":"","sources":["../../../../src/components/nv-calendar/test/nv-calendar.utils.test.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,UAAU,EACV,UAAU,EACV,cAAc,EACd,aAAa,EACb,aAAa,EACb,SAAS,GACV,MAAM,sBAAsB,CAAC;AAE9B;;;;;;;;;;GAUG;AAEH,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACvD,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAEtD,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;YACrC,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;gBAC3C,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAC7D,YAAY,CACb,CAAC;gBACF,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAC7D,YAAY,CACb,CAAC;gBACF,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAC7D,YAAY,CACb,CAAC;gBACF,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAClE,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC9D,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;gBAC/C,MAAM,CACJ,UAAU,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,qBAAqB,EAAE,CAAC,CAC5D,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;gBACjD,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAC3D,aAAa,CACd,CAAC;gBACF,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAC9D,mBAAmB,CACpB,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;gBAClC,MAAM,CACJ,UAAU,CAAC,IAAuB,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAClE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACX,MAAM,CACJ,UAAU,CAAC,SAA4B,EAAE;oBACvC,UAAU,EAAE,YAAY;iBACzB,CAAC,CACH,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACb,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;YAC/B,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;gBACvC,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,EAAE;oBAClC,UAAU,EAAE,0BAA0B;iBACvC,CAAC,CAAC;gBACH,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC;YACxE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;gBACvD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC7D,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACrC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBAE1C,2BAA2B;gBAC3B,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,KAAK,GAAG,kBAAkB,CAAC;gBACtE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;gBAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;gBACzD,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACrC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBAE1C,2DAA2D;gBAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;gBAC1D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;gBAChD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;gBACzD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;YACxB,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;gBAC7C,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,CAAC;gBACxE,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;gBAEhD,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;gBACvE,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;gBACxC,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC;gBACnE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;YAC1B,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;gBACvC,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;gBAClD,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAC7D,YAAY,CACb,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;gBACvC,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,0CAA0C;gBAC5F,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,0CAA0C;gBAE5F,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAC5D,YAAY,CACb,CAAC;gBACF,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAC5D,YAAY,CACb,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;gBAC9C,MAAM,CACJ,UAAU,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,wBAAwB,EAAE,CAAC,CAC/D,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;gBACpC,2EAA2E;gBAC3E,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,OAAO,CAClE,yBAAyB,CAC1B,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,2BAA2B;QAC3E,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,gBAAgB;QAEhE,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;YAC1B,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;gBAChD,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClE,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;gBACtD,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBAChD,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBAEhD,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;YACxB,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;gBAC9C,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjE,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;gBACtD,6CAA6C;gBAC7C,qEAAqE;gBACrE,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;gBAClD,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;gBAClD,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1E,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAClC,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;gBAClC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClE,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClE,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;gBACtC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClE,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;YAC1B,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;gBACvC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;gBAC/C,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;gBAE/C,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;gBACvC,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;gBACjD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;gBAEnD,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1E,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAElD,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;YAC1B,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;gBAC9C,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CACrE,IAAI,CACL,CAAC;gBACF,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CACpE,KAAK,CACN,CAAC;gBACF,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CACnE,IAAI,CACL,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;gBACjD,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBAChD,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBAEhD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CACjE,IAAI,CACL,CAAC;gBACF,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CACjE,IAAI,CACL,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;YACxB,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;gBAC5C,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CACpE,IAAI,CACL,CAAC;gBACF,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CACnE,KAAK,CACN,CAAC;gBACF,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAClE,IAAI,CACL,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;YACnC,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;gBACxC,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;gBAClD,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;gBAElD,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAClE,IAAI,CACL,CAAC;gBACF,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAClE,KAAK,CACN,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;gBACzC,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;gBACjD,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;gBAElD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CACjE,IAAI,CACL,CAAC;gBACF,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CACjE,KAAK,CACN,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAClC,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;gBAClC,MAAM,CACJ,cAAc,CAAC,IAAuB,EAAE,QAAQ,EAAE;oBAChD,SAAS,EAAE,KAAK;iBACjB,CAAC,CACH,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACd,MAAM,CACJ,cAAc,CAAC,QAAQ,EAAE,IAAuB,EAAE;oBAChD,SAAS,EAAE,KAAK;iBACjB,CAAC,CACH,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAElD,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;YAC1B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;gBAC7C,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CACnE,IAAI,CACL,CAAC;gBACF,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CACpE,KAAK,CACN,CAAC;gBACF,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAClE,IAAI,CACL,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;YACxB,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;gBAC5C,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAClE,IAAI,CACL,CAAC;gBACF,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CACnE,KAAK,CACN,CAAC;gBACF,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CACjE,IAAI,CACL,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAClC,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;gBAClC,MAAM,CACJ,aAAa,CAAC,IAAuB,EAAE,QAAQ,EAAE;oBAC/C,SAAS,EAAE,KAAK;iBACjB,CAAC,CACH,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACd,MAAM,CACJ,aAAa,CAAC,QAAQ,EAAE,IAAuB,EAAE;oBAC/C,SAAS,EAAE,KAAK;iBACjB,CAAC,CACH,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;YAC1C,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;gBAC/D,MAAM,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACtD,MAAM,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,oCAAoC;gBAC3F,MAAM,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACvD,MAAM,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,wCAAwC;YACjG,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;gBACvC,MAAM,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,yCAAyC;gBACjG,MAAM,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;YAC1B,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;gBAC3C,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC5C,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBACvD,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;gBACvC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;gBACzC,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;gBAE3C,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC3C,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;YACjC,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;gBAC1C,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;gBACnD,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;gBAClD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACvC,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;gBAChD,MAAM,SAAS,GAAG,0BAA0B,CAAC;gBAC7C,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;gBAElD,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;gBACtD,MAAM,MAAM,GAAG,SAAS,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC;gBAC7D,6CAA6C;gBAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;YACnC,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;gBAC9C,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,uBAAuB;gBACzD,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;gBAE3C,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;gBAC/C,MAAM,WAAW,GAAG,YAAY,CAAC;gBACjC,oDAAoD;gBACpD,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;gBAE3C,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;gBACnD,MAAM,MAAM,GAAG,eAAe,CAAC;gBAC/B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBAEtC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;gBAC/C,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC7C,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC/C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;YAC/B,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;gBACtC,MAAM,KAAK,GAAG,oBAAoB,CAAC,CAAC,+BAA+B;gBACnE,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAEzC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;gBACzC,MAAM,KAAK,GAAG,oBAAoB,CAAC;gBACnC,oDAAoD;gBACpD,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAEzC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;gBACrC,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACnD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;YACrC,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;gBAC1C,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;gBAErD,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzC,MAAM,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,8BAA8B;gBAClE,MAAM,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;gBACvC,eAAe;gBACf,MAAM,WAAW,GAAG,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;gBAC1D,MAAM,CAAC,WAAW,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBAEzC,oCAAoC;gBACpC,MAAM,aAAa,GAAG,SAAS,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;gBAC9D,MAAM,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC;YACnC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;gBAC1C,6CAA6C;gBAC7C,MAAM,MAAM,GAAG,SAAS,CACtB,sBAAsB,EACtB,0BAA0B,CAC3B,CAAC;gBACF,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;YAC1B,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;gBACzC,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;gBACrD,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW;gBAC/C,MAAM,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;gBACvC,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;gBACtD,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;gBACtD,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBACrC,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;gBAC5C,MAAM,QAAQ,GAAG,SAAS,CACxB,qBAAqB,EACrB,qBAAqB,CACtB,CAAC;gBACF,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBACtC,MAAM,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACtC,MAAM,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACxC,MAAM,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAEtD,yBAAyB;YACzB,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,EAAE;gBACzC,UAAU,EAAE,qBAAqB;aAClC,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;YAE3D,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACpC,+DAA+D;YAC/D,MAAM,CAAC,UAAU,CAAC,YAAY,EAAE,MAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAClE,IAAI,CACL,CAAC;YAEF,mCAAmC;YACnC,MAAM,eAAe,GAAG,UAAU,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;YACtE,MAAM,YAAY,GAAG,SAAS,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;YACrD,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,YAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAE/C,gCAAgC;YAChC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClE,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrE,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAEtD,8BAA8B;YAC9B,MAAM,aAAa,GAAG,UAAU,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;YACpE,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;YACjD,MAAM,CACJ,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,UAAW,CAAC,OAAO,EAAE,CAAC,CACzD,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB;YAExC,mCAAmC;YACnC,MAAM,eAAe,GAAG,UAAU,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;YACtE,MAAM,YAAY,GAAG,SAAS,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;YACrD,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,YAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC5C,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;YAC9C,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;gBAClD,MAAM,KAAK,GAAG,YAAY,CAAC;gBAC3B,MAAM,MAAM,GAAG,KAAK;qBACjB,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;qBAClB,MAAM,CAAC,OAAO,CAAC,CAAC;gBAEnB,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAErC,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;gBACtD,MAAM,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC;gBAChC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5C,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB;gBAC3D,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;gBAC1C,MAAM,KAAK,GAAG,EAAE,CAAC;gBACjB,MAAM,MAAM,GAAG,KAAK;qBACjB,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;qBAClB,MAAM,CAAC,OAAO,CAAC,CAAC;gBAEnB,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;gBAC7C,MAAM,KAAK,GAAG,cAAc,CAAC;gBAC7B,MAAM,MAAM,GAAG,KAAK;qBACjB,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;qBAClB,MAAM,CAAC,OAAO,CAAC,CAAC;gBAEnB,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;gBACtD,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC;YAChC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;gBAChD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;gBACpC,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;gBAEjE,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;YAC7C,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;gBAC5C,MAAM,KAAK,GAAG,uBAAuB,CAAC;gBACtC,MAAM,MAAM,GAAG,KAAK;qBACjB,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;qBAClB,MAAM,CAAC,OAAO,CAAC,CAAC;gBAEnB,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACrC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAErC,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;gBACrD,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;gBAEnD,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,CAAC;gBAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC;gBAE7B,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3C,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;gBAC9C,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAErC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;gBAC5C,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;gBAC/C,MAAM,KAAK,GAAG,2BAA2B,CAAC;gBAC1C,MAAM,MAAM,GAAG,KAAK;qBACjB,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;qBAClB,MAAM,CAAC,OAAO,CAAC,CAAC;gBAEnB,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACrC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;gBAC1D,MAAM,KAAK,GAAG,aAAa,CAAC;gBAC5B,MAAM,MAAM,GAAG,KAAK;qBACjB,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;qBAClB,MAAM,CAAC,OAAO,CAAC,CAAC;gBAEnB,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;gBAC7C,MAAM,KAAK,GAAG,2BAA2B,CAAC;gBAC1C,MAAM,MAAM,GAAG,KAAK;qBACjB,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;qBAClB,MAAM,CAAC,OAAO,CAAC,CAAC;gBAEnB,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;gBACrD,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;gBAEnD,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC7B,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC7B,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;gBAChD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;gBACzC,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;gBAEvC,MAAM,cAAc,GAAG,UAAU,CAAC,SAAS,EAAE;oBAC3C,UAAU,EAAE,YAAY;iBACzB,CAAC,CAAC;gBACH,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;gBACvE,MAAM,YAAY,GAAG,GAAG,cAAc,IAAI,YAAY,EAAE,CAAC;gBAEzD,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;gBAC7C,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;gBACzC,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;gBAEvC,0BAA0B;gBAC1B,MAAM,YAAY,GAChB,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAEpE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa;gBACvD,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa;YAC3D,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;YAC3C,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;gBAChE,MAAM,YAAY,GAAG,YAAY,CAAC;gBAClC,MAAM,MAAM,GAAG,YAAY;qBACxB,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;qBAClB,MAAM,CAAC,OAAO,CAAC,CAAC;gBAEnB,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;oBACvB,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;oBACtD,MAAM,iBAAiB,GAAG,UAAU,CAAC,UAAU,EAAE;wBAC/C,UAAU,EAAE,YAAY;qBACzB,CAAC,CAAC;oBAEH,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;gBAC/D,MAAM,YAAY,GAAG,uBAAuB,CAAC;gBAC7C,MAAM,MAAM,GAAG,YAAY;qBACxB,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;qBAClB,MAAM,CAAC,OAAO,CAAC,CAAC;gBAEnB,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;oBACvB,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;oBACrD,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;oBAEnD,MAAM,gBAAgB,GAAG;wBACvB,KAAK,EAAE,UAAU,CAAC,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;wBAC1D,GAAG,EAAE,UAAU,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;qBACvD,CAAC;oBAEF,MAAM,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC;wBAC/B,KAAK,EAAE,YAAY;wBACnB,GAAG,EAAE,YAAY;qBAClB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;gBAChE,MAAM,iBAAiB,GAAG,YAAY,CAAC;gBACvC,MAAM,YAAY,GAAG,iBAAiB,CAAC;gBAEvC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;gBAC/D,MAAM,gBAAgB,GAAG;oBACvB,KAAK,EAAE,YAAY;oBACnB,GAAG,EAAE,YAAY;iBAClB,CAAC;gBACF,MAAM,YAAY,GAAG,GAAG,gBAAgB,CAAC,KAAK,IAAI,gBAAgB,CAAC,GAAG,EAAE,CAAC;gBAEzE,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,wCAAwC,EAAE,GAAG,EAAE;YACtD,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;gBACvD,MAAM,KAAK,GAAG,YAAY,CAAC;gBAC3B,MAAM,MAAM,GAAG,KAAK;qBACjB,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;qBAClB,MAAM,CAAC,OAAO,CAAC,CAAC;gBAEnB,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;gBACtD,MAAM,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC;gBAChC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5C,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;gBAC/C,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAEtC,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;gBACvE,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;gBACvD,MAAM,KAAK,GAAG,YAAY,CAAC;gBAC3B,MAAM,MAAM,GAAG,KAAK;qBACjB,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;qBAClB,MAAM,CAAC,OAAO,CAAC,CAAC;gBAEnB,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;gBACtD,MAAM,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC;gBAChC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5C,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;gBAC/C,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAEtC,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;gBACvE,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;gBAC9D,MAAM,KAAK,GAAG,uBAAuB,CAAC;gBACtC,MAAM,MAAM,GAAG,KAAK;qBACjB,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;qBAClB,MAAM,CAAC,OAAO,CAAC,CAAC;gBAEnB,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;gBACrD,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;gBAEnD,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,CAAC;gBAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC;gBAE7B,MAAM,cAAc,GAAG,UAAU,CAAC,SAAS,EAAE;oBAC3C,UAAU,EAAE,YAAY;iBACzB,CAAC,CAAC;gBACH,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;gBACvE,MAAM,YAAY,GAAG,GAAG,cAAc,IAAI,YAAY,EAAE,CAAC;gBAEzD,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;YACrC,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;gBAC9C,MAAM,KAAK,GAAG,KAAK,CAAC;gBACpB,MAAM,MAAM,GAAG,KAAK;qBACjB,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;qBAClB,MAAM,CAAC,OAAO,CAAC,CAAC;gBAEnB,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;gBACjD,MAAM,KAAK,GAAG,aAAa,CAAC;gBAC5B,MAAM,MAAM,GAAG,KAAK;qBACjB,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;qBAClB,MAAM,CAAC,OAAO,CAAC,CAAC;gBAEnB,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;gBAChD,MAAM,KAAK,GAAG,aAAa,CAAC;gBAC5B,MAAM,MAAM,GAAG,KAAK;qBACjB,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;qBAClB,MAAM,CAAC,OAAO,CAAC,CAAC;gBAEnB,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;gBAChE,MAAM,KAAK,GAAG,wBAAwB,CAAC;gBACvC,MAAM,MAAM,GAAG,KAAK;qBACjB,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;qBAClB,MAAM,CAAC,OAAO,CAAC,CAAC;gBAEnB,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACrC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;gBACnE,MAAM,KAAK,GAAG,kCAAkC,CAAC;gBACjD,MAAM,MAAM,GAAG,KAAK;qBACjB,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;qBAClB,MAAM,CAAC,OAAO,CAAC,CAAC;gBAEnB,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAE/B,8CAA8C;gBAC9C,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;gBACrD,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;gBAEnD,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,CAAC;gBAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC;gBAC7B,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACrC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;YACpC,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;gBAClE,MAAM,YAAY,GAAG,YAAY,CAAC;gBAClC,MAAM,iBAAiB,GAAG,YAAY,CAAC;gBAEvC,0DAA0D;gBAC1D,MAAM,cAAc,GAAG,YAAY,IAAI,iBAAiB,CAAC;gBAEzD,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC5C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;gBACjE,MAAM,YAAY,GAAG,uBAAuB,CAAC;gBAC7C,MAAM,gBAAgB,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC;gBAEpE,0DAA0D;gBAC1D,MAAM,cAAc,GAClB,YAAY,IAAI,GAAG,gBAAgB,CAAC,KAAK,IAAI,gBAAgB,CAAC,GAAG,EAAE,CAAC;gBAEtE,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;gBACtE,MAAM,YAAY,GAAG,EAAE,CAAC;gBACxB,MAAM,iBAAiB,GAAG,YAAY,CAAC;gBAEvC,MAAM,cAAc,GAAG,YAAY,IAAI,iBAAiB,CAAC;gBAEzD,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC5C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\nimport { describe, it, expect } from 'vitest';\nimport {\n formatDate,\n isSameDate,\n isSameOrBefore,\n isSameOrAfter,\n getWeekNumber,\n parseDate,\n} from '../nv-calendar.utils';\n\n/**\n * Comprehensive tests for nv-calendar utilities\n *\n * These tests validate all utility functions:\n * - Date formatting with various formats\n * - Date comparison logic (same, before, after)\n * - Week number calculation\n * - Date parsing from various formats\n * - UTC vs local timezone handling\n * - Edge cases and error conditions\n */\n\ndescribe('nv-calendar.utils - Comprehensive Tests', () => {\n describe('formatDate', () => {\n const testDate = new Date('2024-06-15T14:30:45.123Z');\n\n describe('Standard Date Formats', () => {\n it('should format basic date patterns', () => {\n expect(formatDate(testDate, { dateFormat: 'YYYY-MM-DD' })).toBe(\n '2024-06-15',\n );\n expect(formatDate(testDate, { dateFormat: 'DD/MM/YYYY' })).toBe(\n '15/06/2024',\n );\n expect(formatDate(testDate, { dateFormat: 'MM-DD-YYYY' })).toBe(\n '06-15-2024',\n );\n expect(formatDate(testDate, { dateFormat: 'YYYY' })).toBe('2024');\n expect(formatDate(testDate, { dateFormat: 'MM' })).toBe('06');\n expect(formatDate(testDate, { dateFormat: 'DD' })).toBe('15');\n });\n\n it('should format date with time patterns', () => {\n expect(\n formatDate(testDate, { dateFormat: 'YYYY-MM-DD HH:mm:ss' }),\n ).toMatch(/\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}/);\n expect(formatDate(testDate, { dateFormat: 'HH:mm' })).toMatch(\n /\\d{2}:\\d{2}/,\n );\n expect(formatDate(testDate, { dateFormat: 'HH:mm:ss' })).toMatch(\n /\\d{2}:\\d{2}:\\d{2}/,\n );\n });\n\n it('should handle empty date', () => {\n expect(\n formatDate(null as unknown as Date, { dateFormat: 'YYYY-MM-DD' }),\n ).toBe('');\n expect(\n formatDate(undefined as unknown as Date, {\n dateFormat: 'YYYY-MM-DD',\n }),\n ).toBe('');\n });\n });\n\n describe('Special Formats', () => {\n it('should handle ISO 8601 format', () => {\n const result = formatDate(testDate, {\n dateFormat: 'YYYY-MM-DD[T]HH:mm:ss[Z]',\n });\n expect(result).toBe(testDate.toISOString());\n expect(result).toMatch(/\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z/);\n });\n\n it('should handle Ticks format (C# compatibility)', () => {\n const result = formatDate(testDate, { dateFormat: 'Ticks' });\n expect(typeof result).toBe('string');\n expect(Number(result)).toBeGreaterThan(0);\n\n // Verify ticks calculation\n const expectedTicks = testDate.getTime() * 10000 + 621355968000000000;\n expect(result).toBe(expectedTicks.toString());\n });\n\n it('should handle Unix seconds format', () => {\n const result = formatDate(testDate, { dateFormat: 'X' });\n expect(typeof result).toBe('string');\n expect(Number(result)).toBeGreaterThan(0);\n\n // Unix seconds should be roughly testDate.getTime() / 1000\n const unixSeconds = Math.floor(testDate.getTime() / 1000);\n expect(Number(result)).toBe(unixSeconds);\n });\n\n it('should handle Unix milliseconds format', () => {\n const result = formatDate(testDate, { dateFormat: 'x' });\n expect(result).toBe(testDate.getTime().toString());\n });\n });\n\n describe('UTC Mode', () => {\n it('should handle UTC formats correctly', () => {\n const utcResult = formatDate(testDate, { dateFormat: 'YYYY-MM-DD[Z]' });\n expect(utcResult).toMatch(/\\d{4}-\\d{2}-\\d{2}Z/);\n\n const localResult = formatDate(testDate, { dateFormat: 'YYYY-MM-DD' });\n expect(localResult).toMatch(/\\d{4}-\\d{2}-\\d{2}/);\n });\n\n it('should handle UTC time formats', () => {\n const result = formatDate(testDate, { dateFormat: 'HH:mm:ss[Z]' });\n expect(result).toMatch(/\\d{2}:\\d{2}:\\d{2}Z/);\n });\n });\n\n describe('Edge Cases', () => {\n it('should handle leap year dates', () => {\n const leapDate = new Date('2024-02-29T12:00:00Z');\n expect(formatDate(leapDate, { dateFormat: 'YYYY-MM-DD' })).toBe(\n '2024-02-29',\n );\n });\n\n it('should handle year boundaries', () => {\n const newYear = new Date('2024-01-01T12:00:00Z'); // Use midday UTC to avoid timezone issues\n const endYear = new Date('2024-12-31T12:00:00Z'); // Use midday UTC to avoid timezone issues\n\n expect(formatDate(newYear, { dateFormat: 'YYYY-MM-DD' })).toBe(\n '2024-01-01',\n );\n expect(formatDate(endYear, { dateFormat: 'YYYY-MM-DD' })).toBe(\n '2024-12-31',\n );\n });\n\n it('should handle custom format patterns', () => {\n expect(\n formatDate(testDate, { dateFormat: '[Year] YYYY [Month] MM' }),\n ).toMatch(/Year \\d{4} Month \\d{2}/);\n // DayJS ordinals may behave differently, let's test a more generic pattern\n expect(formatDate(testDate, { dateFormat: 'DD MMMM YYYY' })).toMatch(\n /\\d{1,2} [A-Za-z]+ \\d{4}/,\n );\n });\n });\n });\n\n describe('isSameDate', () => {\n const date1 = new Date('2024-06-15T10:30:00Z');\n const date2 = new Date('2024-06-15T18:45:00Z'); // Same day, different time\n const date3 = new Date('2024-06-16T10:30:00Z'); // Different day\n\n describe('Local Mode', () => {\n it('should detect same dates in local mode', () => {\n expect(isSameDate(date1, date2, { isUTCMode: false })).toBe(true);\n expect(isSameDate(date1, date3, { isUTCMode: false })).toBe(false);\n });\n\n it('should ignore time differences in local mode', () => {\n const morning = new Date('2024-06-15T08:00:00');\n const evening = new Date('2024-06-15T20:00:00');\n\n expect(isSameDate(morning, evening, { isUTCMode: false })).toBe(true);\n });\n });\n\n describe('UTC Mode', () => {\n it('should detect same dates in UTC mode', () => {\n expect(isSameDate(date1, date2, { isUTCMode: true })).toBe(true);\n expect(isSameDate(date1, date3, { isUTCMode: true })).toBe(false);\n });\n\n it('should handle timezone differences correctly', () => {\n // In UTC mode, should compare UTC components\n // This test may be timezone dependent, let's use more reliable dates\n const utcDate1 = new Date('2024-06-15T12:00:00Z');\n const utcDate2 = new Date('2024-06-16T12:00:00Z');\n expect(isSameDate(utcDate1, utcDate2, { isUTCMode: true })).toBe(false);\n });\n });\n\n describe('Null/Invalid Dates', () => {\n it('should handle null dates', () => {\n expect(isSameDate(null, date1, { isUTCMode: false })).toBe(false);\n expect(isSameDate(date1, null, { isUTCMode: false })).toBe(false);\n expect(isSameDate(null, null, { isUTCMode: false })).toBe(false);\n });\n\n it('should handle same reference', () => {\n expect(isSameDate(date1, date1, { isUTCMode: false })).toBe(true);\n expect(isSameDate(date1, date1, { isUTCMode: true })).toBe(true);\n });\n });\n\n describe('Edge Cases', () => {\n it('should handle leap year dates', () => {\n const leap1 = new Date('2024-02-29T10:00:00Z');\n const leap2 = new Date('2024-02-29T20:00:00Z');\n\n expect(isSameDate(leap1, leap2, { isUTCMode: true })).toBe(true);\n });\n\n it('should handle year boundaries', () => {\n const endYear = new Date('2023-12-31T23:59:59Z');\n const startYear = new Date('2024-01-01T00:00:01Z');\n\n expect(isSameDate(endYear, startYear, { isUTCMode: true })).toBe(false);\n });\n });\n });\n\n describe('isSameOrBefore', () => {\n const baseDate = new Date('2024-06-15T12:00:00Z');\n const beforeDate = new Date('2024-06-14T12:00:00Z');\n const afterDate = new Date('2024-06-16T12:00:00Z');\n const sameDate = new Date('2024-06-15T18:00:00Z');\n\n describe('Local Mode', () => {\n it('should detect before dates correctly', () => {\n expect(isSameOrBefore(beforeDate, baseDate, { isUTCMode: false })).toBe(\n true,\n );\n expect(isSameOrBefore(afterDate, baseDate, { isUTCMode: false })).toBe(\n false,\n );\n expect(isSameOrBefore(sameDate, baseDate, { isUTCMode: false })).toBe(\n true,\n );\n });\n\n it('should handle same date different times', () => {\n const morning = new Date('2024-06-15T08:00:00');\n const evening = new Date('2024-06-15T20:00:00');\n\n expect(isSameOrBefore(morning, evening, { isUTCMode: false })).toBe(\n true,\n );\n expect(isSameOrBefore(evening, morning, { isUTCMode: false })).toBe(\n true,\n );\n });\n });\n\n describe('UTC Mode', () => {\n it('should compare UTC dates correctly', () => {\n expect(isSameOrBefore(beforeDate, baseDate, { isUTCMode: true })).toBe(\n true,\n );\n expect(isSameOrBefore(afterDate, baseDate, { isUTCMode: true })).toBe(\n false,\n );\n expect(isSameOrBefore(sameDate, baseDate, { isUTCMode: true })).toBe(\n true,\n );\n });\n });\n\n describe('Complex Comparisons', () => {\n it('should handle year comparisons', () => {\n const date2023 = new Date('2023-12-31T23:59:59Z');\n const date2024 = new Date('2024-01-01T00:00:01Z');\n\n expect(isSameOrBefore(date2023, date2024, { isUTCMode: true })).toBe(\n true,\n );\n expect(isSameOrBefore(date2024, date2023, { isUTCMode: true })).toBe(\n false,\n );\n });\n\n it('should handle month comparisons', () => {\n const january = new Date('2024-01-15T12:00:00Z');\n const february = new Date('2024-02-15T12:00:00Z');\n\n expect(isSameOrBefore(january, february, { isUTCMode: true })).toBe(\n true,\n );\n expect(isSameOrBefore(february, january, { isUTCMode: true })).toBe(\n false,\n );\n });\n });\n\n describe('Null/Invalid Dates', () => {\n it('should handle null dates', () => {\n expect(\n isSameOrBefore(null as unknown as Date, baseDate, {\n isUTCMode: false,\n }),\n ).toBe(false);\n expect(\n isSameOrBefore(baseDate, null as unknown as Date, {\n isUTCMode: false,\n }),\n ).toBe(false);\n });\n });\n });\n\n describe('isSameOrAfter', () => {\n const baseDate = new Date('2024-06-15T12:00:00Z');\n const beforeDate = new Date('2024-06-14T12:00:00Z');\n const afterDate = new Date('2024-06-16T12:00:00Z');\n const sameDate = new Date('2024-06-15T18:00:00Z');\n\n describe('Local Mode', () => {\n it('should detect after dates correctly', () => {\n expect(isSameOrAfter(afterDate, baseDate, { isUTCMode: false })).toBe(\n true,\n );\n expect(isSameOrAfter(beforeDate, baseDate, { isUTCMode: false })).toBe(\n false,\n );\n expect(isSameOrAfter(sameDate, baseDate, { isUTCMode: false })).toBe(\n true,\n );\n });\n });\n\n describe('UTC Mode', () => {\n it('should compare UTC dates correctly', () => {\n expect(isSameOrAfter(afterDate, baseDate, { isUTCMode: true })).toBe(\n true,\n );\n expect(isSameOrAfter(beforeDate, baseDate, { isUTCMode: true })).toBe(\n false,\n );\n expect(isSameOrAfter(sameDate, baseDate, { isUTCMode: true })).toBe(\n true,\n );\n });\n });\n\n describe('Null/Invalid Dates', () => {\n it('should handle null dates', () => {\n expect(\n isSameOrAfter(null as unknown as Date, baseDate, {\n isUTCMode: false,\n }),\n ).toBe(false);\n expect(\n isSameOrAfter(baseDate, null as unknown as Date, {\n isUTCMode: false,\n }),\n ).toBe(false);\n });\n });\n });\n\n describe('getWeekNumber', () => {\n describe('Standard Week Calculations', () => {\n it('should calculate correct week numbers for known dates', () => {\n expect(getWeekNumber(new Date('2024-01-01'))).toBe(1);\n expect(getWeekNumber(new Date('2024-01-07'))).toBe(1); // 7 January 2024 is still in week 1\n expect(getWeekNumber(new Date('2024-06-15'))).toBe(24);\n expect(getWeekNumber(new Date('2024-12-31'))).toBe(1); // 31 December 2024 is in week 1 of 2025\n });\n\n it('should handle different years', () => {\n expect(getWeekNumber(new Date('2023-01-01'))).toBe(52); // 1st January 2023 is in week 52 of 2022\n expect(getWeekNumber(new Date('2025-01-01'))).toBe(1);\n });\n });\n\n describe('Edge Cases', () => {\n it('should handle leap year correctly', () => {\n const leapYearDate = new Date('2024-02-29');\n expect(getWeekNumber(leapYearDate)).toBeGreaterThan(0);\n expect(getWeekNumber(leapYearDate)).toBeLessThanOrEqual(53);\n });\n\n it('should handle year boundaries', () => {\n const endOfYear = new Date('2024-12-31');\n const startOfYear = new Date('2024-01-01');\n\n expect(getWeekNumber(startOfYear)).toBe(1);\n expect(getWeekNumber(endOfYear)).toBe(1);\n });\n });\n });\n\n describe('parseDate', () => {\n describe('Date Object Input', () => {\n it('should return Date objects as-is', () => {\n const inputDate = new Date('2024-06-15T12:00:00Z');\n const result = parseDate(inputDate, 'YYYY-MM-DD');\n expect(result).toBe(inputDate);\n });\n });\n\n describe('ISO 8601 String Parsing', () => {\n it('should parse standard ISO 8601 strings', () => {\n const isoString = '2024-06-15T12:00:00.123Z';\n const result = parseDate(isoString, 'YYYY-MM-DD');\n\n expect(result).toBeInstanceOf(Date);\n expect(result?.toISOString()).toBe(isoString);\n });\n\n it('should handle invalid ISO strings gracefully', () => {\n const result = parseDate('invalid-iso-string', 'YYYY-MM-DD');\n // Should continue with other parsing methods\n expect(result).toBeNull();\n });\n });\n\n describe('Unix Format Parsing', () => {\n it('should parse Unix seconds (X format)', () => {\n const unixSeconds = '1718452800'; // 2024-06-15T12:00:00Z\n const result = parseDate(unixSeconds, 'X');\n\n expect(result).toBeInstanceOf(Date);\n expect(result?.getTime()).toBe(1718452800000);\n });\n\n it('should parse Unix seconds in UTC mode', () => {\n const unixSeconds = '1718452800';\n // Remove Z from format as it causes parsing to fail\n const result = parseDate(unixSeconds, 'X');\n\n expect(result).toBeInstanceOf(Date);\n });\n\n it('should parse Unix milliseconds (x format)', () => {\n const unixMs = '1718452800123';\n const result = parseDate(unixMs, 'x');\n\n expect(result).toBeInstanceOf(Date);\n expect(result?.getTime()).toBe(1718452800123);\n });\n\n it('should handle invalid Unix timestamps', () => {\n expect(parseDate('invalid', 'X')).toBeNull();\n expect(parseDate('invalid', 'x')).toBeNull();\n });\n });\n\n describe('C# Ticks Format', () => {\n it('should parse C# Ticks format', () => {\n const ticks = '638544096000000000'; // Approximate ticks for a date\n const result = parseDate(ticks, 'Ticks');\n\n expect(result).toBeInstanceOf(Date);\n });\n\n it('should handle Ticks in UTC mode', () => {\n const ticks = '638544096000000000';\n // Remove Z from format as it causes parsing to fail\n const result = parseDate(ticks, 'Ticks');\n\n expect(result).toBeInstanceOf(Date);\n });\n\n it('should handle invalid Ticks', () => {\n expect(parseDate('invalid', 'Ticks')).toBeNull();\n });\n });\n\n describe('Custom Format Parsing', () => {\n it('should parse custom date formats', () => {\n const result = parseDate('15/06/2024', 'DD/MM/YYYY');\n\n expect(result).toBeInstanceOf(Date);\n expect(result?.getFullYear()).toBe(2024);\n expect(result?.getMonth()).toBe(5); // June is month 5 (0-indexed)\n expect(result?.getDate()).toBe(15);\n });\n\n it('should parse with strict mode', () => {\n // Valid format\n const validResult = parseDate('2024-06-15', 'YYYY-MM-DD');\n expect(validResult).toBeInstanceOf(Date);\n\n // Invalid format should return null\n const invalidResult = parseDate('invalid-date', 'YYYY-MM-DD');\n expect(invalidResult).toBeNull();\n });\n\n it('should handle UTC custom formats', () => {\n // Use a format that DayJS can actually parse\n const result = parseDate(\n '2024-06-15T12:00:00Z',\n 'YYYY-MM-DD[T]HH:mm:ss[Z]',\n );\n expect(result).toBeInstanceOf(Date);\n });\n });\n\n describe('Edge Cases', () => {\n it('should handle leap year parsing', () => {\n const result = parseDate('29/02/2024', 'DD/MM/YYYY');\n expect(result).toBeInstanceOf(Date);\n expect(result?.getMonth()).toBe(1); // February\n expect(result?.getDate()).toBe(29);\n });\n it('should handle year boundaries', () => {\n const newYear = parseDate('01/01/2024', 'DD/MM/YYYY');\n const endYear = parseDate('31/12/2024', 'DD/MM/YYYY');\n expect(newYear).toBeInstanceOf(Date);\n expect(endYear).toBeInstanceOf(Date);\n });\n it('should handle various time formats', () => {\n const withTime = parseDate(\n '2024-06-15 14:30:45',\n 'YYYY-MM-DD HH:mm:ss',\n );\n expect(withTime).toBeInstanceOf(Date);\n expect(withTime?.getHours()).toBe(14);\n expect(withTime?.getMinutes()).toBe(30);\n expect(withTime?.getSeconds()).toBe(45);\n });\n });\n });\n\n describe('Integration Scenarios', () => {\n it('should work with format and parse roundtrip', () => {\n const originalDate = new Date('2024-06-15T12:30:45Z');\n\n // Format then parse back\n const formatted = formatDate(originalDate, {\n dateFormat: 'YYYY-MM-DD HH:mm:ss',\n });\n const parsed = parseDate(formatted, 'YYYY-MM-DD HH:mm:ss');\n\n expect(parsed).toBeInstanceOf(Date);\n // Should be same day (ignoring potential timezone differences)\n expect(isSameDate(originalDate, parsed!, { isUTCMode: false })).toBe(\n true,\n );\n\n // Test Unix milliseconds roundtrip\n const unixMsFormatted = formatDate(originalDate, { dateFormat: 'x' });\n const unixMsParsed = parseDate(unixMsFormatted, 'x');\n expect(originalDate.getTime()).toBe(unixMsParsed!.getTime());\n });\n\n it('should handle complete date comparison workflow', () => {\n const date1 = new Date('2024-06-14T12:00:00Z');\n const date2 = new Date('2024-06-15T12:00:00Z');\n const date3 = new Date('2024-06-16T12:00:00Z');\n\n // Test all comparison functions\n expect(isSameDate(date1, date2, { isUTCMode: true })).toBe(false);\n expect(isSameOrBefore(date1, date2, { isUTCMode: true })).toBe(true);\n expect(isSameOrAfter(date3, date2, { isUTCMode: true })).toBe(true);\n });\n\n it('should handle special format roundtrips', () => {\n const originalDate = new Date('2024-06-15T12:00:00Z');\n\n // Test Unix seconds roundtrip\n const unixFormatted = formatDate(originalDate, { dateFormat: 'X' });\n const unixParsed = parseDate(unixFormatted, 'X');\n expect(\n Math.abs(originalDate.getTime() - unixParsed!.getTime()),\n ).toBeLessThan(1000); // Within 1 second\n\n // Test Unix milliseconds roundtrip\n const unixMsFormatted = formatDate(originalDate, { dateFormat: 'x' });\n const unixMsParsed = parseDate(unixMsFormatted, 'x');\n expect(originalDate.getTime()).toBe(unixMsParsed!.getTime());\n });\n });\n\n describe('Value Prop Integration Logic', () => {\n describe('Single Selection Value Parsing', () => {\n it('should parse single date value correctly', () => {\n const value = '2025-03-15';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n expect(values).toHaveLength(1);\n expect(values[0]).toBe('2025-03-15');\n\n const parsedDate = parseDate(values[0], 'YYYY-MM-DD');\n expect(parsedDate).toBeTruthy();\n expect(parsedDate.getFullYear()).toBe(2025);\n expect(parsedDate.getMonth()).toBe(2); // March (0-indexed)\n expect(parsedDate.getDate()).toBe(15);\n });\n\n it('should handle empty single value', () => {\n const value = '';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n expect(values).toHaveLength(0);\n });\n\n it('should handle malformed single date', () => {\n const value = 'invalid-date';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n expect(values).toHaveLength(1);\n const parsedDate = parseDate(values[0], 'YYYY-MM-DD');\n expect(parsedDate).toBeNull();\n });\n\n it('should format single date for emission', () => {\n const date = new Date('2025-03-15');\n const formatted = formatDate(date, { dateFormat: 'YYYY-MM-DD' });\n\n expect(formatted).toBe('2025-03-15');\n });\n });\n\n describe('Range Selection Value Parsing', () => {\n it('should parse range value correctly', () => {\n const value = '2025-03-15,2025-03-20';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n expect(values).toHaveLength(2);\n expect(values[0]).toBe('2025-03-15');\n expect(values[1]).toBe('2025-03-20');\n\n const startDate = parseDate(values[0], 'YYYY-MM-DD');\n const endDate = parseDate(values[1], 'YYYY-MM-DD');\n\n expect(startDate).toBeTruthy();\n expect(endDate).toBeTruthy();\n\n expect(startDate.getFullYear()).toBe(2025);\n expect(startDate.getMonth()).toBe(2); // March\n expect(startDate.getDate()).toBe(15);\n\n expect(endDate.getFullYear()).toBe(2025);\n expect(endDate.getMonth()).toBe(2); // March\n expect(endDate.getDate()).toBe(20);\n });\n\n it('should handle range with extra spaces', () => {\n const value = ' 2025-03-15 , 2025-03-20 ';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n expect(values).toHaveLength(2);\n expect(values[0]).toBe('2025-03-15');\n expect(values[1]).toBe('2025-03-20');\n });\n\n it('should handle incomplete range (only start date)', () => {\n const value = '2025-03-15,';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n expect(values).toHaveLength(1);\n expect(values[0]).toBe('2025-03-15');\n });\n\n it('should handle malformed range dates', () => {\n const value = 'invalid-start,invalid-end';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n expect(values).toHaveLength(2);\n const startDate = parseDate(values[0], 'YYYY-MM-DD');\n const endDate = parseDate(values[1], 'YYYY-MM-DD');\n\n expect(startDate).toBeNull();\n expect(endDate).toBeNull();\n });\n\n it('should format range dates for emission', () => {\n const startDate = new Date('2025-03-15');\n const endDate = new Date('2025-03-20');\n\n const startFormatted = formatDate(startDate, {\n dateFormat: 'YYYY-MM-DD',\n });\n const endFormatted = formatDate(endDate, { dateFormat: 'YYYY-MM-DD' });\n const unifiedValue = `${startFormatted},${endFormatted}`;\n\n expect(unifiedValue).toBe('2025-03-15,2025-03-20');\n });\n\n it('should handle date order validation', () => {\n const startDate = new Date('2025-03-20');\n const endDate = new Date('2025-03-15');\n\n // Simulate swapping logic\n const orderedDates =\n startDate > endDate ? [endDate, startDate] : [startDate, endDate];\n\n expect(orderedDates[0]).toEqual(endDate); // 2025-03-15\n expect(orderedDates[1]).toEqual(startDate); // 2025-03-20\n });\n });\n\n describe('Value Synchronization Logic', () => {\n it('should generate legacy single value from unified value', () => {\n const unifiedValue = '2025-03-15';\n const values = unifiedValue\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n if (values.length >= 1) {\n const parsedDate = parseDate(values[0], 'YYYY-MM-DD');\n const legacySingleValue = formatDate(parsedDate, {\n dateFormat: 'YYYY-MM-DD',\n });\n\n expect(legacySingleValue).toBe('2025-03-15');\n }\n });\n\n it('should generate legacy range value from unified value', () => {\n const unifiedValue = '2025-03-15,2025-03-20';\n const values = unifiedValue\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n if (values.length >= 2) {\n const startDate = parseDate(values[0], 'YYYY-MM-DD');\n const endDate = parseDate(values[1], 'YYYY-MM-DD');\n\n const legacyRangeValue = {\n start: formatDate(startDate, { dateFormat: 'YYYY-MM-DD' }),\n end: formatDate(endDate, { dateFormat: 'YYYY-MM-DD' }),\n };\n\n expect(legacyRangeValue).toEqual({\n start: '2025-03-15',\n end: '2025-03-20',\n });\n }\n });\n\n it('should generate unified value from legacy single value', () => {\n const legacySingleValue = '2025-03-15';\n const unifiedValue = legacySingleValue;\n\n expect(unifiedValue).toBe('2025-03-15');\n });\n\n it('should generate unified value from legacy range value', () => {\n const legacyRangeValue = {\n start: '2025-03-15',\n end: '2025-03-20',\n };\n const unifiedValue = `${legacyRangeValue.start},${legacyRangeValue.end}`;\n\n expect(unifiedValue).toBe('2025-03-15,2025-03-20');\n });\n });\n\n describe('Different Date Formats with Value Prop', () => {\n it('should handle DD-MM-YYYY format in value prop', () => {\n const value = '15-03-2025';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n const parsedDate = parseDate(values[0], 'DD-MM-YYYY');\n expect(parsedDate).toBeTruthy();\n expect(parsedDate.getFullYear()).toBe(2025);\n expect(parsedDate.getMonth()).toBe(2); // March\n expect(parsedDate.getDate()).toBe(15);\n\n const formatted = formatDate(parsedDate, { dateFormat: 'DD-MM-YYYY' });\n expect(formatted).toBe('15-03-2025');\n });\n\n it('should handle MM/DD/YYYY format in value prop', () => {\n const value = '03/15/2025';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n const parsedDate = parseDate(values[0], 'MM/DD/YYYY');\n expect(parsedDate).toBeTruthy();\n expect(parsedDate.getFullYear()).toBe(2025);\n expect(parsedDate.getMonth()).toBe(2); // March\n expect(parsedDate.getDate()).toBe(15);\n\n const formatted = formatDate(parsedDate, { dateFormat: 'MM/DD/YYYY' });\n expect(formatted).toBe('03/15/2025');\n });\n\n it('should handle range with custom format in value prop', () => {\n const value = '15-03-2025,20-03-2025';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n const startDate = parseDate(values[0], 'DD-MM-YYYY');\n const endDate = parseDate(values[1], 'DD-MM-YYYY');\n\n expect(startDate).toBeTruthy();\n expect(endDate).toBeTruthy();\n\n const startFormatted = formatDate(startDate, {\n dateFormat: 'DD-MM-YYYY',\n });\n const endFormatted = formatDate(endDate, { dateFormat: 'DD-MM-YYYY' });\n const unifiedValue = `${startFormatted},${endFormatted}`;\n\n expect(unifiedValue).toBe('15-03-2025,20-03-2025');\n });\n });\n\n describe('Value Prop Edge Cases', () => {\n it('should handle value with only commas', () => {\n const value = ',,,';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n expect(values).toHaveLength(0);\n });\n\n it('should handle value with trailing comma', () => {\n const value = '2025-03-15,';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n expect(values).toHaveLength(1);\n expect(values[0]).toBe('2025-03-15');\n });\n\n it('should handle value with leading comma', () => {\n const value = ',2025-03-15';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n expect(values).toHaveLength(1);\n expect(values[0]).toBe('2025-03-15');\n });\n\n it('should handle value with multiple commas between dates', () => {\n const value = '2025-03-15,,2025-03-20';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n expect(values).toHaveLength(2);\n expect(values[0]).toBe('2025-03-15');\n expect(values[1]).toBe('2025-03-20');\n });\n\n it('should handle range with more than 2 dates (take first 2)', () => {\n const value = '2025-03-15,2025-03-20,2025-03-25';\n const values = value\n .split(',')\n .map(v => v.trim())\n .filter(Boolean);\n\n expect(values).toHaveLength(3);\n\n // For range mode, only first 2 should be used\n const startDate = parseDate(values[0], 'YYYY-MM-DD');\n const endDate = parseDate(values[1], 'YYYY-MM-DD');\n\n expect(startDate).toBeTruthy();\n expect(endDate).toBeTruthy();\n expect(startDate.getDate()).toBe(15);\n expect(endDate.getDate()).toBe(20);\n });\n });\n\n describe('Value Priority Logic', () => {\n it('should prioritize unified value over legacy single value', () => {\n const unifiedValue = '2025-03-15';\n const legacySingleValue = '2025-01-01';\n\n // Simulate priority logic: if unifiedValue exists, use it\n const effectiveValue = unifiedValue || legacySingleValue;\n\n expect(effectiveValue).toBe('2025-03-15');\n });\n\n it('should prioritize unified value over legacy range value', () => {\n const unifiedValue = '2025-03-15,2025-03-20';\n const legacyRangeValue = { start: '2025-01-01', end: '2025-01-07' };\n\n // Simulate priority logic: if unifiedValue exists, use it\n const effectiveValue =\n unifiedValue || `${legacyRangeValue.start},${legacyRangeValue.end}`;\n\n expect(effectiveValue).toBe('2025-03-15,2025-03-20');\n });\n\n it('should fallback to legacy values when unified value is empty', () => {\n const unifiedValue = '';\n const legacySingleValue = '2025-01-01';\n\n const effectiveValue = unifiedValue || legacySingleValue;\n\n expect(effectiveValue).toBe('2025-01-01');\n });\n });\n });\n});\n"]}
@@ -22,7 +22,7 @@ export class NvCol {
22
22
  /****************************************************************************/
23
23
  //#region RENDER
24
24
  render() {
25
- return (h(Host, { key: '8f7112dc8ce8896d9e7265741f06b7449dd508df', class: clsx(this.getColSize()) }, h("slot", { key: '3bedff11752d04db2615a5f26d4d910d95dee76c' })));
25
+ return (h(Host, { key: 'e258bc3e01d3bd35bf64f14241c70ae044fac132', class: clsx(this.getColSize()) }, h("slot", { key: 'd36caf0fde38eae6cd37b62fb4c02e3de6b7225e' })));
26
26
  }
27
27
  static get is() { return "nv-col"; }
28
28
  static get originalStyleUrls() {
@@ -1017,7 +1017,7 @@ export class NvDatagrid {
1017
1017
  const rows = !this.table || this.table === undefined || this.parsedData.length === 0
1018
1018
  ? []
1019
1019
  : (_c = (_b = this.table) === null || _b === void 0 ? void 0 : _b.getRowModel()) === null || _c === void 0 ? void 0 : _c.rows;
1020
- return (h(Host, { key: '95d3cea67d17f1aab33e7bc054161760e6d6df54' }, h("div", { key: 'b6cbdf841ab4ba64d2ccbf49fc6caf9ef082c7ee', class: "hidden" }, h("slot", { key: '18dde7efeec5c1bc38a044a683910db41f70e22d' })), h("slot", { key: 'd3ffb496e938ee3c91c5a7422357cbee90100d84', name: "before" }), this.enableGlobalFilter && this.table && (h("div", { key: '0ab19e6c1c585d4e77004ec9238dba3baff83614', class: `search-container justify-${this.globalFilterPosition}` }, h("nv-fieldtext", { key: '76722d31da818102347278c7b62a93deaa9c29a1', value: this.globalFilterSearchTerm, onInput: this.handleGlobalFilteringOnInput, placeholder: "Search all columns..." }))), this.parsedColumns.length === 0 && this.parsedData.length === 0 ? (h("div", { class: "no-data" }, this.noColumnsNoDataMessage)) : (h("div", null, h("table", null, this.parsedColumns.length > 0 && headerGroups.length > 0 && (h("thead", null, this.parsedColumns.length > 0 && headerGroups
1020
+ return (h(Host, { key: 'b149279b85a3138e5be62b2f431a82fe5056b996' }, h("div", { key: '84ffd6a613a7e51539f0bc7e5ddff16a1769af5a', class: "hidden" }, h("slot", { key: 'cabafd2aab117816742972bd4eb6e7122c333ee9' })), h("slot", { key: '17a26ba154ddc2dea82f7576878107ede55a2043', name: "before" }), this.enableGlobalFilter && this.table && (h("div", { key: '822bb793cad6266810571dbb2c087c9e2b68958d', class: `search-container justify-${this.globalFilterPosition}` }, h("nv-fieldtext", { key: 'b9fd668a09b602ded195e4d10b79ae3d06c9a0f6', value: this.globalFilterSearchTerm, onInput: this.handleGlobalFilteringOnInput, placeholder: "Search all columns..." }))), this.parsedColumns.length === 0 && this.parsedData.length === 0 ? (h("div", { class: "no-data" }, this.noColumnsNoDataMessage)) : (h("div", null, h("table", null, this.parsedColumns.length > 0 && headerGroups.length > 0 && (h("thead", null, this.parsedColumns.length > 0 && headerGroups
1021
1021
  ? headerGroups === null || headerGroups === void 0 ? void 0 : headerGroups.map(headerGroup => (h("tr", { key: headerGroup.id }, headerGroup.headers.map(header => {
1022
1022
  return this.getHeaderCell(header);
1023
1023
  }))))
@@ -1028,7 +1028,7 @@ export class NvDatagrid {
1028
1028
  return (h("td", { key: cell.id, "data-row-id": rowId }, this.flexRender(cell.column.columnDef.cell, cell.getContext())));
1029
1029
  })));
1030
1030
  }))), this.table && this.enableRowSelection ? (h("tfoot", null, h("tr", null, h("td", { colSpan: 20 }, this.enableRowSelection && this.table ? (h("div", null, this.rowSelectionState &&
1031
- Object.keys(this.rowSelectionState).length > 0 ? (h("span", null, Object.keys(this.rowSelectionState).length, " of", ' ', ((_e = (_d = this.table.getPreFilteredRowModel()) === null || _d === void 0 ? void 0 : _d.rows) === null || _e === void 0 ? void 0 : _e.length) || 0, ' ', "Total Rows Selected")) : (h("span", null, "No rows selected")))) : null)))) : null), this.getPagination())), h("slot", { key: 'ee4cdbb4683a3da20154fd60580d694d8f78feb8', name: "after" })));
1031
+ Object.keys(this.rowSelectionState).length > 0 ? (h("span", null, Object.keys(this.rowSelectionState).length, " of", ' ', ((_e = (_d = this.table.getPreFilteredRowModel()) === null || _d === void 0 ? void 0 : _d.rows) === null || _e === void 0 ? void 0 : _e.length) || 0, ' ', "Total Rows Selected")) : (h("span", null, "No rows selected")))) : null)))) : null), this.getPagination())), h("slot", { key: 'f509745423857527f2983c5cce1289441cc1f7c7', name: "after" })));
1032
1032
  }
1033
1033
  static get is() { return "nv-datagrid"; }
1034
1034
  static get originalStyleUrls() {
@@ -14,7 +14,7 @@ export class NvDatagridcolumn {
14
14
  /****************************************************************************/
15
15
  //#region RENDER
16
16
  render() {
17
- return (h(Host, { key: 'daa7b24c99857d7467f0a5ce0b69dcbeb42577e7' }, h("slot", { key: '8c2fe1f1b806322cdf1c89b9243dd0d094e565eb', name: "header" }), h("slot", { key: '81ae95ccd66f88c05253fde0ec9e0d20e02e5304', name: "cell" })));
17
+ return (h(Host, { key: '49c4b8807b26a76cf26e9ac9567a5bca7de0aee7' }, h("slot", { key: '9e6c8b69a92fe4caec10025c941e39f1266b4f93', name: "header" }), h("slot", { key: '992fa9c1d00fe8ed65df5ad2157b78140d2794a0', name: "cell" })));
18
18
  }
19
19
  static get is() { return "nv-datagridcolumn"; }
20
20
  static get properties() {