@nova-design-system/nova-webcomponents 3.23.0 → 3.24.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.
- package/dist/cjs/app-globals-V2Kpy_OQ.js.map +1 -1
- package/dist/cjs/events.utils-BE6R5q9C.js +33 -0
- package/dist/cjs/events.utils-BE6R5q9C.js.map +1 -0
- package/dist/cjs/{grow.animation-BrWzyoUA.js → grow.animation-ynu_HmA_.js} +2 -30
- package/dist/cjs/grow.animation-ynu_HmA_.js.map +1 -0
- package/dist/cjs/{i18n.utils-BizoXo6c.js → i18n.utils-ku0bScip.js} +16 -20
- package/dist/cjs/{i18n.utils-BizoXo6c.js.map → i18n.utils-ku0bScip.js.map} +1 -1
- package/dist/cjs/index-B1na8x6M.js +12 -4
- package/dist/cjs/index.cjs.js +5 -2
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/cjs/index.esm-CG1TVKfu.js +540 -0
- package/dist/cjs/index.esm-CG1TVKfu.js.map +1 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/native.cjs.js +1 -1
- package/dist/cjs/nv-accordion.cjs.entry.js +2 -7
- package/dist/cjs/nv-accordion.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-alert.cjs.entry.js +1 -2
- package/dist/cjs/nv-alert.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-badge_2.cjs.entry.js +1 -1
- package/dist/cjs/nv-button.cjs.entry.js +3 -5
- package/dist/cjs/nv-button.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-calendar.cjs.entry.js +14 -24
- package/dist/cjs/nv-calendar.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-datagrid.cjs.entry.js +67 -72
- package/dist/cjs/nv-datagrid.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-dialog.cjs.entry.js +6 -538
- package/dist/cjs/nv-dialog.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-drawer.cjs.entry.js +443 -0
- package/dist/cjs/nv-drawer.entry.cjs.js.map +1 -0
- package/dist/cjs/nv-drawerfooter.nv-drawerheader.entry.cjs.js.map +1 -0
- package/dist/cjs/nv-drawerfooter_2.cjs.entry.js +144 -0
- package/dist/cjs/nv-fieldcheckbox.cjs.entry.js +6 -6
- package/dist/cjs/nv-fieldcheckbox.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-fielddate.cjs.entry.js +12 -15
- package/dist/cjs/nv-fielddate.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-fielddaterange.cjs.entry.js +12 -13
- package/dist/cjs/nv-fielddaterange.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-fielddropdown.cjs.entry.js +24 -33
- package/dist/cjs/nv-fielddropdown.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-fielddropdownitem.cjs.entry.js +2 -3
- package/dist/cjs/nv-fielddropdownitem.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-fieldmultiselect.cjs.entry.js +19 -27
- package/dist/cjs/nv-fieldmultiselect.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-fieldnumber.cjs.entry.js +6 -6
- package/dist/cjs/nv-fieldnumber.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-fieldpassword.cjs.entry.js +6 -6
- package/dist/cjs/nv-fieldpassword.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-fieldradio.cjs.entry.js +4 -4
- package/dist/cjs/nv-fieldradio.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-fieldselect.cjs.entry.js +8 -8
- package/dist/cjs/nv-fieldselect.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-fieldslider.cjs.entry.js +5 -5
- package/dist/cjs/nv-fieldslider.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-fieldtext.cjs.entry.js +6 -6
- package/dist/cjs/nv-fieldtext.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-fieldtextarea.cjs.entry.js +6 -7
- package/dist/cjs/nv-fieldtextarea.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-fieldtime.cjs.entry.js +27 -35
- package/dist/cjs/nv-fieldtime.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-icon.cjs.entry.js +2 -2
- package/dist/cjs/nv-icon.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-iconbutton.nv-loader.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-iconbutton_2.cjs.entry.js +5 -6
- package/dist/cjs/nv-menu.cjs.entry.js +3 -4
- package/dist/cjs/nv-menu.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-menuitem.cjs.entry.js +1 -1
- package/dist/cjs/nv-notification-bullet.cjs.entry.js +1 -2
- package/dist/cjs/nv-notification-bullet.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-notification.cjs.entry.js +6 -9
- package/dist/cjs/nv-notification.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-notificationcontainer.cjs.entry.js +1 -1
- package/dist/cjs/nv-popover.cjs.entry.js +12 -12
- package/dist/cjs/nv-popover.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-row.cjs.entry.js +1 -1
- package/dist/cjs/nv-sidebar.cjs.entry.js +3 -3
- package/dist/cjs/nv-sidebar.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-sidebarcontent.cjs.entry.js +1 -1
- package/dist/cjs/nv-sidebardivider.cjs.entry.js +1 -1
- package/dist/cjs/nv-sidebarfooter.cjs.entry.js +1 -1
- package/dist/cjs/nv-sidebargroup.cjs.entry.js +1 -1
- package/dist/cjs/nv-sidebarheader.cjs.entry.js +1 -1
- package/dist/cjs/nv-sidebarlogo.cjs.entry.js +1 -1
- package/dist/cjs/nv-sidebarnavitem.cjs.entry.js +4 -5
- package/dist/cjs/nv-sidebarnavitem.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-sidebarnavsubitem.cjs.entry.js +1 -1
- package/dist/cjs/nv-split.cjs.entry.js +43 -41
- package/dist/cjs/nv-split.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-stack.cjs.entry.js +1 -1
- package/dist/cjs/nv-table.cjs.entry.js +6 -8
- package/dist/cjs/nv-table.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-tableheader.cjs.entry.js +2 -2
- package/dist/cjs/nv-tableheader.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-toggle.cjs.entry.js +2 -2
- package/dist/cjs/nv-togglebutton.cjs.entry.js +2 -2
- package/dist/cjs/nv-togglebutton.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-togglebuttongroup.cjs.entry.js +3 -4
- package/dist/cjs/nv-togglebuttongroup.entry.cjs.js.map +1 -1
- package/dist/cjs/nv-tooltip.cjs.entry.js +1 -1
- package/dist/collection/collection-manifest.json +3 -0
- package/dist/collection/components/nv-accordion/nv-accordion.docs.js +66 -40
- package/dist/collection/components/nv-accordion/nv-accordion.docs.js.map +1 -1
- package/dist/collection/components/nv-accordion/nv-accordion.js +2 -7
- package/dist/collection/components/nv-accordion/nv-accordion.js.map +1 -1
- package/dist/collection/components/nv-alert/nv-alert.docs.js +18 -1
- package/dist/collection/components/nv-alert/nv-alert.docs.js.map +1 -1
- package/dist/collection/components/nv-alert/nv-alert.js +1 -2
- package/dist/collection/components/nv-alert/nv-alert.js.map +1 -1
- package/dist/collection/components/nv-avatar/nv-avatar.docs.js +56 -0
- package/dist/collection/components/nv-avatar/nv-avatar.docs.js.map +1 -1
- package/dist/collection/components/nv-badge/nv-badge.docs.js +64 -15
- package/dist/collection/components/nv-badge/nv-badge.docs.js.map +1 -1
- package/dist/collection/components/nv-breadcrumbs/nv-breadcrumbs.docs.js +10 -1
- package/dist/collection/components/nv-breadcrumbs/nv-breadcrumbs.docs.js.map +1 -1
- package/dist/collection/components/nv-button/nv-button.docs.js +38 -4
- package/dist/collection/components/nv-button/nv-button.docs.js.map +1 -1
- package/dist/collection/components/nv-button/nv-button.js +3 -5
- package/dist/collection/components/nv-button/nv-button.js.map +1 -1
- package/dist/collection/components/nv-buttongroup/nv-buttongroup.docs.js +22 -0
- package/dist/collection/components/nv-buttongroup/nv-buttongroup.docs.js.map +1 -1
- package/dist/collection/components/nv-calendar/nv-calendar.docs.js +269 -14
- package/dist/collection/components/nv-calendar/nv-calendar.docs.js.map +1 -1
- package/dist/collection/components/nv-calendar/nv-calendar.js +13 -22
- package/dist/collection/components/nv-calendar/nv-calendar.js.map +1 -1
- package/dist/collection/components/nv-calendar/partials/week-numbers.js +1 -2
- package/dist/collection/components/nv-calendar/partials/week-numbers.js.map +1 -1
- package/dist/collection/components/nv-calendar/test/nv-calendar.utils.test.js +11 -11
- package/dist/collection/components/nv-calendar/test/nv-calendar.utils.test.js.map +1 -1
- package/dist/collection/components/nv-calendar/test/partials/calendar-grid.logic.test.js +2 -2
- package/dist/collection/components/nv-calendar/test/partials/calendar-grid.logic.test.js.map +1 -1
- package/dist/collection/components/nv-calendar/test/partials/calendar-shortcuts.logic.test.js +6 -5
- package/dist/collection/components/nv-calendar/test/partials/calendar-shortcuts.logic.test.js.map +1 -1
- package/dist/collection/components/nv-calendar/test/partials/day-cell.logic.test.js +10 -1
- package/dist/collection/components/nv-calendar/test/partials/day-cell.logic.test.js.map +1 -1
- package/dist/collection/components/nv-col/nv-col.docs.js +8 -0
- package/dist/collection/components/nv-col/nv-col.docs.js.map +1 -1
- package/dist/collection/components/nv-datagrid/nv-datagrid.docs.js +290 -286
- package/dist/collection/components/nv-datagrid/nv-datagrid.docs.js.map +1 -1
- package/dist/collection/components/nv-datagrid/nv-datagrid.js +67 -72
- package/dist/collection/components/nv-datagrid/nv-datagrid.js.map +1 -1
- package/dist/collection/components/nv-dialog/nv-dialog.docs.js +64 -13
- package/dist/collection/components/nv-dialog/nv-dialog.docs.js.map +1 -1
- package/dist/collection/components/nv-drawer/nv-drawer.css +114 -0
- package/dist/collection/components/nv-drawer/nv-drawer.docs.js +145 -0
- package/dist/collection/components/nv-drawer/nv-drawer.docs.js.map +1 -0
- package/dist/collection/components/nv-drawer/nv-drawer.js +719 -0
- package/dist/collection/components/nv-drawer/nv-drawer.js.map +1 -0
- package/dist/collection/components/nv-drawerfooter/nv-drawerfooter.css +8 -0
- package/dist/collection/components/nv-drawerfooter/nv-drawerfooter.docs.js +6 -0
- package/dist/collection/components/nv-drawerfooter/nv-drawerfooter.docs.js.map +1 -0
- package/dist/collection/components/nv-drawerfooter/nv-drawerfooter.js +325 -0
- package/dist/collection/components/nv-drawerfooter/nv-drawerfooter.js.map +1 -0
- package/dist/collection/components/nv-drawerheader/nv-drawerheader.css +32 -0
- package/dist/collection/components/nv-drawerheader/nv-drawerheader.docs.js +6 -0
- package/dist/collection/components/nv-drawerheader/nv-drawerheader.docs.js.map +1 -0
- package/dist/collection/components/nv-drawerheader/nv-drawerheader.js +92 -0
- package/dist/collection/components/nv-drawerheader/nv-drawerheader.js.map +1 -0
- package/dist/collection/components/nv-fieldcheckbox/nv-fieldcheckbox.docs.js +186 -136
- package/dist/collection/components/nv-fieldcheckbox/nv-fieldcheckbox.docs.js.map +1 -1
- package/dist/collection/components/nv-fieldcheckbox/nv-fieldcheckbox.js +6 -6
- package/dist/collection/components/nv-fieldcheckbox/nv-fieldcheckbox.js.map +1 -1
- package/dist/collection/components/nv-fielddate/nv-fielddate.docs.js +300 -109
- package/dist/collection/components/nv-fielddate/nv-fielddate.docs.js.map +1 -1
- package/dist/collection/components/nv-fielddate/nv-fielddate.js +11 -14
- package/dist/collection/components/nv-fielddate/nv-fielddate.js.map +1 -1
- package/dist/collection/components/nv-fielddate/styles/nv-fielddate.css +1 -1
- package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.docs.js +406 -1
- package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.docs.js.map +1 -1
- package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.js +11 -12
- package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.js.map +1 -1
- package/dist/collection/components/nv-fielddaterange/styles/nv-fielddaterange.css +1 -1
- package/dist/collection/components/nv-fielddropdown/nv-fielddropdown.docs.js +210 -118
- package/dist/collection/components/nv-fielddropdown/nv-fielddropdown.docs.js.map +1 -1
- package/dist/collection/components/nv-fielddropdown/nv-fielddropdown.js +22 -31
- package/dist/collection/components/nv-fielddropdown/nv-fielddropdown.js.map +1 -1
- package/dist/collection/components/nv-fielddropdown/styles/nv-fielddropdown.css +1 -1
- package/dist/collection/components/nv-fielddropdownitem/nv-fielddropdownitem.js +2 -3
- package/dist/collection/components/nv-fielddropdownitem/nv-fielddropdownitem.js.map +1 -1
- package/dist/collection/components/nv-fielddropdownitemcheck/nv-fielddropdownitemcheck.js +1 -1
- package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.docs.js +462 -322
- package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.docs.js.map +1 -1
- package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.js +17 -25
- package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.js.map +1 -1
- package/dist/collection/components/nv-fieldmultiselect/styles/nv-fieldmultiselect.css +1 -1
- package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.css +1 -1
- package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.docs.js +70 -7
- package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.docs.js.map +1 -1
- package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.js +5 -5
- package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.js.map +1 -1
- package/dist/collection/components/nv-fieldpassword/nv-fieldpassword.css +1 -1
- package/dist/collection/components/nv-fieldpassword/nv-fieldpassword.docs.js +79 -6
- package/dist/collection/components/nv-fieldpassword/nv-fieldpassword.docs.js.map +1 -1
- package/dist/collection/components/nv-fieldpassword/nv-fieldpassword.js +5 -5
- package/dist/collection/components/nv-fieldpassword/nv-fieldpassword.js.map +1 -1
- package/dist/collection/components/nv-fieldradio/nv-fieldradio.docs.js +58 -6
- package/dist/collection/components/nv-fieldradio/nv-fieldradio.docs.js.map +1 -1
- package/dist/collection/components/nv-fieldradio/nv-fieldradio.js +4 -4
- package/dist/collection/components/nv-fieldradio/nv-fieldradio.js.map +1 -1
- package/dist/collection/components/nv-fieldselect/nv-fieldselect.docs.js +138 -30
- package/dist/collection/components/nv-fieldselect/nv-fieldselect.docs.js.map +1 -1
- package/dist/collection/components/nv-fieldselect/nv-fieldselect.js +7 -7
- package/dist/collection/components/nv-fieldselect/nv-fieldselect.js.map +1 -1
- package/dist/collection/components/nv-fieldselect/styles/nv-fieldselect.css +1 -1
- package/dist/collection/components/nv-fieldslider/nv-fieldslider.docs.js +138 -30
- package/dist/collection/components/nv-fieldslider/nv-fieldslider.docs.js.map +1 -1
- package/dist/collection/components/nv-fieldslider/nv-fieldslider.js +3 -3
- package/dist/collection/components/nv-fieldslider/partials/field-input.js +1 -1
- package/dist/collection/components/nv-fieldslider/partials/field-input.js.map +1 -1
- package/dist/collection/components/nv-fieldslider/styles/nv-fieldslider.css +1 -1
- package/dist/collection/components/nv-fieldtext/nv-fieldtext.css +1 -1
- package/dist/collection/components/nv-fieldtext/nv-fieldtext.docs.js +92 -16
- package/dist/collection/components/nv-fieldtext/nv-fieldtext.docs.js.map +1 -1
- package/dist/collection/components/nv-fieldtext/nv-fieldtext.js +5 -5
- package/dist/collection/components/nv-fieldtext/nv-fieldtext.js.map +1 -1
- package/dist/collection/components/nv-fieldtextarea/nv-fieldtextarea.docs.js +64 -3
- package/dist/collection/components/nv-fieldtextarea/nv-fieldtextarea.docs.js.map +1 -1
- package/dist/collection/components/nv-fieldtextarea/nv-fieldtextarea.js +6 -7
- package/dist/collection/components/nv-fieldtextarea/nv-fieldtextarea.js.map +1 -1
- package/dist/collection/components/nv-fieldtime/nv-fieldtime.docs.js +41 -22
- package/dist/collection/components/nv-fieldtime/nv-fieldtime.docs.js.map +1 -1
- package/dist/collection/components/nv-fieldtime/nv-fieldtime.js +25 -33
- package/dist/collection/components/nv-fieldtime/nv-fieldtime.js.map +1 -1
- package/dist/collection/components/nv-fieldtime/styles/nv-fieldtime.css +1 -1
- package/dist/collection/components/nv-fieldtime/utils/format-utils.js +1 -1
- package/dist/collection/components/nv-fieldtime/utils/format-utils.js.map +1 -1
- package/dist/collection/components/nv-icon/nv-icon.docs.js +46 -0
- package/dist/collection/components/nv-icon/nv-icon.docs.js.map +1 -1
- package/dist/collection/components/nv-icon/nv-icon.js +1 -1
- package/dist/collection/components/nv-icon/nv-icons.js +2 -0
- package/dist/collection/components/nv-icon/nv-icons.js.map +1 -1
- package/dist/collection/components/nv-iconbutton/nv-iconbutton.css +4 -4
- package/dist/collection/components/nv-iconbutton/nv-iconbutton.docs.js +18 -1
- package/dist/collection/components/nv-iconbutton/nv-iconbutton.docs.js.map +1 -1
- package/dist/collection/components/nv-iconbutton/nv-iconbutton.js +3 -4
- package/dist/collection/components/nv-iconbutton/nv-iconbutton.js.map +1 -1
- package/dist/collection/components/nv-loader/nv-loader.docs.js +8 -4
- package/dist/collection/components/nv-loader/nv-loader.docs.js.map +1 -1
- package/dist/collection/components/nv-loader/nv-loader.js +1 -1
- package/dist/collection/components/nv-menu/nv-menu.docs.js +17 -5
- package/dist/collection/components/nv-menu/nv-menu.docs.js.map +1 -1
- package/dist/collection/components/nv-menu/nv-menu.js +3 -4
- package/dist/collection/components/nv-menu/nv-menu.js.map +1 -1
- package/dist/collection/components/nv-menuitem/nv-menuitem.js +2 -2
- package/dist/collection/components/nv-notification/nv-notification.docs.js +34 -3
- package/dist/collection/components/nv-notification/nv-notification.docs.js.map +1 -1
- package/dist/collection/components/nv-notification/nv-notification.js +6 -9
- package/dist/collection/components/nv-notification/nv-notification.js.map +1 -1
- package/dist/collection/components/nv-notification-bullet/nv-notification-bullet.docs.js +60 -0
- package/dist/collection/components/nv-notification-bullet/nv-notification-bullet.docs.js.map +1 -1
- package/dist/collection/components/nv-notification-bullet/nv-notification-bullet.js +1 -2
- package/dist/collection/components/nv-notification-bullet/nv-notification-bullet.js.map +1 -1
- package/dist/collection/components/nv-notificationcontainer/nv-notificationcontainer.js +1 -1
- package/dist/collection/components/nv-popover/nv-popover.docs.js +35 -10
- package/dist/collection/components/nv-popover/nv-popover.docs.js.map +1 -1
- package/dist/collection/components/nv-popover/nv-popover.js +2 -3
- package/dist/collection/components/nv-popover/nv-popover.js.map +1 -1
- package/dist/collection/components/nv-row/nv-row.docs.js +7 -0
- package/dist/collection/components/nv-row/nv-row.docs.js.map +1 -1
- package/dist/collection/components/nv-row/nv-row.js +1 -1
- package/dist/collection/components/nv-sidebar/nv-sidebar.docs.js +39 -0
- package/dist/collection/components/nv-sidebar/nv-sidebar.docs.js.map +1 -1
- package/dist/collection/components/nv-sidebar/nv-sidebar.js +3 -3
- package/dist/collection/components/nv-sidebar/nv-sidebar.js.map +1 -1
- package/dist/collection/components/nv-sidebarcontent/nv-sidebarcontent.js +1 -1
- package/dist/collection/components/nv-sidebardivider/nv-sidebardivider.js +1 -1
- package/dist/collection/components/nv-sidebarfooter/nv-sidebarfooter.js +1 -1
- package/dist/collection/components/nv-sidebargroup/nv-sidebargroup.js +1 -1
- package/dist/collection/components/nv-sidebarheader/nv-sidebarheader.js +1 -1
- package/dist/collection/components/nv-sidebarlogo/nv-sidebarlogo.js +1 -1
- package/dist/collection/components/nv-sidebarnavitem/nv-sidebarnavitem.js +5 -6
- package/dist/collection/components/nv-sidebarnavitem/nv-sidebarnavitem.js.map +1 -1
- package/dist/collection/components/nv-sidebarnavsubitem/nv-sidebarnavsubitem.js +1 -1
- package/dist/collection/components/nv-split/nv-split.docs.js +38 -2
- package/dist/collection/components/nv-split/nv-split.docs.js.map +1 -1
- package/dist/collection/components/nv-split/nv-split.js +44 -42
- package/dist/collection/components/nv-split/nv-split.js.map +1 -1
- package/dist/collection/components/nv-split/styles/nv-split.css +2 -0
- package/dist/collection/components/nv-stack/nv-stack.docs.js +13 -0
- package/dist/collection/components/nv-stack/nv-stack.docs.js.map +1 -1
- package/dist/collection/components/nv-stack/nv-stack.js +1 -1
- package/dist/collection/components/nv-table/nv-table.docs.js +12 -0
- package/dist/collection/components/nv-table/nv-table.docs.js.map +1 -1
- package/dist/collection/components/nv-table/nv-table.js +1 -1
- package/dist/collection/components/nv-table/nv-table.utils.js +5 -7
- package/dist/collection/components/nv-table/nv-table.utils.js.map +1 -1
- package/dist/collection/components/nv-table/test/nv-table.utils.test.js +4 -5
- package/dist/collection/components/nv-table/test/nv-table.utils.test.js.map +1 -1
- package/dist/collection/components/nv-tableheader/nv-tableheader.docs.js +29 -1
- package/dist/collection/components/nv-tableheader/nv-tableheader.docs.js.map +1 -1
- package/dist/collection/components/nv-tableheader/nv-tableheader.js +2 -2
- package/dist/collection/components/nv-tableheader/nv-tableheader.js.map +1 -1
- package/dist/collection/components/nv-toggle/nv-toggle.docs.js +31 -0
- package/dist/collection/components/nv-toggle/nv-toggle.docs.js.map +1 -1
- package/dist/collection/components/nv-toggle/nv-toggle.js +2 -2
- package/dist/collection/components/nv-togglebutton/nv-togglebutton.js +1 -1
- package/dist/collection/components/nv-togglebutton/styles/nv-togglebutton.css +16 -12
- package/dist/collection/components/nv-togglebuttongroup/nv-togglebuttongroup.docs.js +20 -7
- package/dist/collection/components/nv-togglebuttongroup/nv-togglebuttongroup.docs.js.map +1 -1
- package/dist/collection/components/nv-togglebuttongroup/nv-togglebuttongroup.js +2 -3
- package/dist/collection/components/nv-togglebuttongroup/nv-togglebuttongroup.js.map +1 -1
- package/dist/collection/components/nv-togglebuttongroup/styles/nv-togglebuttongroup.css +4 -12
- package/dist/collection/components/nv-tooltip/nv-tooltip.docs.js +33 -6
- package/dist/collection/components/nv-tooltip/nv-tooltip.docs.js.map +1 -1
- package/dist/collection/components/nv-tooltip/nv-tooltip.js +1 -1
- package/dist/collection/templates/navigation.docs.js +1 -1
- package/dist/collection/templates/navigation.docs.js.map +1 -1
- package/dist/collection/utils/i18n.utils.js +1 -2
- package/dist/collection/utils/i18n.utils.js.map +1 -1
- package/dist/collection/utils/search-engine/strategies/fuzzy.js +2 -2
- package/dist/collection/utils/search-engine/strategies/fuzzy.js.map +1 -1
- package/dist/collection/utils/search-engine/strategies/smart.js +2 -2
- package/dist/collection/utils/search-engine/strategies/smart.js.map +1 -1
- package/dist/collection/utils/search-engine/strategies/strict.js +2 -2
- package/dist/collection/utils/search-engine/strategies/strict.js.map +1 -1
- package/dist/collection/utils/search-engine/worker/worker-client.js +7 -10
- package/dist/collection/utils/search-engine/worker/worker-client.js.map +1 -1
- package/dist/components/index.js +4 -2
- package/dist/components/index.js.map +1 -1
- package/dist/components/nv-accordion-item.js +1 -1
- package/dist/components/nv-accordion.js +6 -11
- package/dist/components/nv-accordion.js.map +1 -1
- package/dist/components/nv-alert.js +2 -3
- package/dist/components/nv-alert.js.map +1 -1
- package/dist/components/nv-avatar.js +1 -1
- package/dist/components/nv-badge.js +1 -1
- package/dist/components/nv-breadcrumb.js +2 -2
- package/dist/components/nv-button.js +1 -1
- package/dist/components/nv-calendar.js +1 -1
- package/dist/components/nv-datagrid.js +69 -74
- package/dist/components/nv-datagrid.js.map +1 -1
- package/dist/components/nv-dialog.js +7 -539
- package/dist/components/nv-dialog.js.map +1 -1
- package/dist/components/nv-dialogfooter.js +1 -1
- package/dist/components/nv-drawer.d.ts +11 -0
- package/dist/components/nv-drawer.js +507 -0
- package/dist/components/nv-drawer.js.map +1 -0
- package/dist/components/nv-drawerfooter.d.ts +11 -0
- package/dist/components/nv-drawerfooter.js +9 -0
- package/dist/components/nv-drawerfooter.js.map +1 -0
- package/dist/components/nv-drawerheader.d.ts +11 -0
- package/dist/components/nv-drawerheader.js +9 -0
- package/dist/components/nv-drawerheader.js.map +1 -0
- package/dist/components/nv-fieldcheckbox.js +1 -1
- package/dist/components/nv-fielddate.js +18 -21
- package/dist/components/nv-fielddate.js.map +1 -1
- package/dist/components/nv-fielddaterange.js +18 -19
- package/dist/components/nv-fielddaterange.js.map +1 -1
- package/dist/components/nv-fielddropdown.js +29 -38
- package/dist/components/nv-fielddropdown.js.map +1 -1
- package/dist/components/nv-fielddropdownitem.js +1 -1
- package/dist/components/nv-fielddropdownitemcheck.js +1 -1
- package/dist/components/nv-fieldmultiselect.js +26 -34
- package/dist/components/nv-fieldmultiselect.js.map +1 -1
- package/dist/components/nv-fieldnumber.js +1 -1
- package/dist/components/nv-fieldpassword.js +9 -9
- package/dist/components/nv-fieldpassword.js.map +1 -1
- package/dist/components/nv-fieldradio.js +4 -4
- package/dist/components/nv-fieldradio.js.map +1 -1
- package/dist/components/nv-fieldselect.js +11 -11
- package/dist/components/nv-fieldselect.js.map +1 -1
- package/dist/components/nv-fieldslider.js +9 -9
- package/dist/components/nv-fieldslider.js.map +1 -1
- package/dist/components/nv-fieldtext.js +1 -1
- package/dist/components/nv-fieldtextarea.js +6 -7
- package/dist/components/nv-fieldtextarea.js.map +1 -1
- package/dist/components/nv-fieldtime.js +31 -39
- package/dist/components/nv-fieldtime.js.map +1 -1
- package/dist/components/nv-icon.js +1 -1
- package/dist/components/nv-iconbutton.js +1 -1
- package/dist/components/nv-loader.js +1 -1
- package/dist/components/nv-menu.js +6 -7
- package/dist/components/nv-menu.js.map +1 -1
- package/dist/components/nv-menuitem.js +1 -1
- package/dist/components/nv-notification-bullet.js +1 -1
- package/dist/components/nv-notification.js +7 -10
- package/dist/components/nv-notification.js.map +1 -1
- package/dist/components/nv-notificationcontainer.js +1 -1
- package/dist/components/nv-popover.js +1 -1
- package/dist/components/nv-row.js +1 -1
- package/dist/components/nv-sidebar.js +4 -4
- package/dist/components/nv-sidebar.js.map +1 -1
- package/dist/components/nv-sidebarcontent.js +1 -1
- package/dist/components/nv-sidebardivider.js +1 -1
- package/dist/components/nv-sidebarfooter.js +1 -1
- package/dist/components/nv-sidebargroup.js +1 -1
- package/dist/components/nv-sidebarheader.js +1 -1
- package/dist/components/nv-sidebarlogo.js +1 -1
- package/dist/components/nv-sidebarnavitem.js +6 -7
- package/dist/components/nv-sidebarnavitem.js.map +1 -1
- package/dist/components/nv-sidebarnavsubitem.js +1 -1
- package/dist/components/nv-split.js +43 -41
- package/dist/components/nv-split.js.map +1 -1
- package/dist/components/nv-stack.js +1 -1
- package/dist/components/nv-table.js +6 -8
- package/dist/components/nv-table.js.map +1 -1
- package/dist/components/nv-tableheader.js +5 -5
- package/dist/components/nv-tableheader.js.map +1 -1
- package/dist/components/nv-toggle.js +2 -2
- package/dist/components/nv-togglebutton.js +2 -2
- package/dist/components/nv-togglebutton.js.map +1 -1
- package/dist/components/nv-togglebuttongroup.js +3 -4
- package/dist/components/nv-togglebuttongroup.js.map +1 -1
- package/dist/components/nv-tooltip.js +1 -1
- package/dist/components/{p-D1i2OAGe.js → p-B45HbBWe.js} +6 -8
- package/dist/components/p-B45HbBWe.js.map +1 -0
- package/dist/components/p-B6GgGra-.js +29 -0
- package/dist/components/p-B6GgGra-.js.map +1 -0
- package/dist/components/{p-Dk8ekxr_.js → p-B7VlEQVW.js} +16 -26
- package/dist/components/p-B7VlEQVW.js.map +1 -0
- package/dist/components/{p-B-3kAnun.js → p-B9i3m6rk.js} +6 -6
- package/dist/components/p-B9i3m6rk.js.map +1 -0
- package/dist/components/{p-BQo7AMPX.js → p-BILd3Ta-.js} +9 -9
- package/dist/components/p-BILd3Ta-.js.map +1 -0
- package/dist/components/{p-Dc_0pr83.js → p-BISctfud.js} +8 -8
- package/dist/components/p-BISctfud.js.map +1 -0
- package/dist/components/{p-CIyQBhTX.js → p-BVOv1zgq.js} +4 -4
- package/dist/components/{p-CIyQBhTX.js.map → p-BVOv1zgq.js.map} +1 -1
- package/dist/components/{p-B6EYOx_n.js → p-Bg_l3jn1.js} +3 -3
- package/dist/components/{p-B6EYOx_n.js.map → p-Bg_l3jn1.js.map} +1 -1
- package/dist/components/{p-CBvZjfqs.js → p-C2QAWGhf.js} +4 -4
- package/dist/components/{p-CBvZjfqs.js.map → p-C2QAWGhf.js.map} +1 -1
- package/dist/components/{p-DzUXTCUy.js → p-COnt5ux_.js} +3 -3
- package/dist/components/{p-DzUXTCUy.js.map → p-COnt5ux_.js.map} +1 -1
- package/dist/components/{p-KUIQrV3D.js → p-Cc7XnqPp.js} +5 -5
- package/dist/components/{p-KUIQrV3D.js.map → p-Cc7XnqPp.js.map} +1 -1
- package/dist/components/{p-CmwaW0q4.js → p-D02w_Ru6.js} +3 -28
- package/dist/components/p-D02w_Ru6.js.map +1 -0
- package/dist/components/p-D3eWMME9.js +538 -0
- package/dist/components/p-D3eWMME9.js.map +1 -0
- package/dist/components/{p--iYGZN4R.js → p-D6APFL6N.js} +11 -11
- package/dist/components/p-D6APFL6N.js.map +1 -0
- package/dist/components/{p-DstpaOhw.js → p-DZJHk4fr.js} +3 -3
- package/dist/components/{p-DstpaOhw.js.map → p-DZJHk4fr.js.map} +1 -1
- package/dist/components/{p-Da9WgE5U.js → p-DiUP3TzF.js} +5 -5
- package/dist/components/{p-Da9WgE5U.js.map → p-DiUP3TzF.js.map} +1 -1
- package/dist/components/{p-DWG6az-u.js → p-DpDooigg.js} +5 -6
- package/dist/components/p-DpDooigg.js.map +1 -0
- package/dist/components/{p-BKfPh2in.js → p-Dr-67WvG.js} +4 -4
- package/dist/components/{p-BKfPh2in.js.map → p-Dr-67WvG.js.map} +1 -1
- package/dist/components/{p-DaiLIZ8f.js → p-DvapDVBj.js} +8 -9
- package/dist/components/p-DvapDVBj.js.map +1 -0
- package/dist/components/{p-DOZbXX2L.js → p-IlwlcG9l.js} +16 -20
- package/dist/components/p-IlwlcG9l.js.map +1 -0
- package/dist/components/p-W6vOfMC9.js +63 -0
- package/dist/components/p-W6vOfMC9.js.map +1 -0
- package/dist/components/{p-CBOuqJTb.js → p-nfYynlVq.js} +4 -4
- package/dist/components/{p-CBOuqJTb.js.map → p-nfYynlVq.js.map} +1 -1
- package/dist/components/{p-CBF8V1L7.js → p-tyaJ-nGV.js} +3 -4
- package/dist/components/p-tyaJ-nGV.js.map +1 -0
- package/dist/components/p-u-maNLLs.js +145 -0
- package/dist/components/p-u-maNLLs.js.map +1 -0
- package/dist/esm/app-globals-DQuL1Twl.js.map +1 -1
- package/dist/esm/events.utils-B6GgGra-.js +29 -0
- package/dist/esm/events.utils-B6GgGra-.js.map +1 -0
- package/dist/esm/{grow.animation-CvHGHBL4.js → grow.animation-D7ep_aVl.js} +3 -28
- package/dist/esm/grow.animation-D7ep_aVl.js.map +1 -0
- package/dist/esm/{i18n.utils-DOZbXX2L.js → i18n.utils-IlwlcG9l.js} +16 -20
- package/dist/esm/{i18n.utils-DOZbXX2L.js.map → i18n.utils-IlwlcG9l.js.map} +1 -1
- package/dist/esm/index-CasQushP.js +12 -4
- package/dist/esm/index.esm-D3eWMME9.js +538 -0
- package/dist/esm/index.esm-D3eWMME9.js.map +1 -0
- package/dist/esm/index.js +4 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/native.js +1 -1
- package/dist/esm/nv-accordion.entry.js +2 -7
- package/dist/esm/nv-accordion.entry.js.map +1 -1
- package/dist/esm/nv-alert.entry.js +1 -2
- package/dist/esm/nv-alert.entry.js.map +1 -1
- package/dist/esm/nv-badge_2.entry.js +1 -1
- package/dist/esm/nv-button.entry.js +3 -5
- package/dist/esm/nv-button.entry.js.map +1 -1
- package/dist/esm/nv-calendar.entry.js +14 -24
- package/dist/esm/nv-calendar.entry.js.map +1 -1
- package/dist/esm/nv-datagrid.entry.js +67 -72
- package/dist/esm/nv-datagrid.entry.js.map +1 -1
- package/dist/esm/nv-dialog.entry.js +3 -535
- package/dist/esm/nv-dialog.entry.js.map +1 -1
- package/dist/esm/nv-drawer.entry.js +441 -0
- package/dist/esm/nv-drawer.entry.js.map +1 -0
- package/dist/esm/nv-drawerfooter.nv-drawerheader.entry.js.map +1 -0
- package/dist/esm/nv-drawerfooter_2.entry.js +141 -0
- package/dist/esm/nv-fieldcheckbox.entry.js +6 -6
- package/dist/esm/nv-fieldcheckbox.entry.js.map +1 -1
- package/dist/esm/nv-fielddate.entry.js +12 -15
- package/dist/esm/nv-fielddate.entry.js.map +1 -1
- package/dist/esm/nv-fielddaterange.entry.js +12 -13
- package/dist/esm/nv-fielddaterange.entry.js.map +1 -1
- package/dist/esm/nv-fielddropdown.entry.js +24 -33
- package/dist/esm/nv-fielddropdown.entry.js.map +1 -1
- package/dist/esm/nv-fielddropdownitem.entry.js +2 -3
- package/dist/esm/nv-fielddropdownitem.entry.js.map +1 -1
- package/dist/esm/nv-fieldmultiselect.entry.js +19 -27
- package/dist/esm/nv-fieldmultiselect.entry.js.map +1 -1
- package/dist/esm/nv-fieldnumber.entry.js +6 -6
- package/dist/esm/nv-fieldnumber.entry.js.map +1 -1
- package/dist/esm/nv-fieldpassword.entry.js +6 -6
- package/dist/esm/nv-fieldpassword.entry.js.map +1 -1
- package/dist/esm/nv-fieldradio.entry.js +4 -4
- package/dist/esm/nv-fieldradio.entry.js.map +1 -1
- package/dist/esm/nv-fieldselect.entry.js +8 -8
- package/dist/esm/nv-fieldselect.entry.js.map +1 -1
- package/dist/esm/nv-fieldslider.entry.js +5 -5
- package/dist/esm/nv-fieldslider.entry.js.map +1 -1
- package/dist/esm/nv-fieldtext.entry.js +6 -6
- package/dist/esm/nv-fieldtext.entry.js.map +1 -1
- package/dist/esm/nv-fieldtextarea.entry.js +6 -7
- package/dist/esm/nv-fieldtextarea.entry.js.map +1 -1
- package/dist/esm/nv-fieldtime.entry.js +27 -35
- package/dist/esm/nv-fieldtime.entry.js.map +1 -1
- package/dist/esm/nv-icon.entry.js +2 -2
- package/dist/esm/nv-icon.entry.js.map +1 -1
- package/dist/esm/nv-iconbutton.nv-loader.entry.js.map +1 -1
- package/dist/esm/nv-iconbutton_2.entry.js +5 -6
- package/dist/esm/nv-menu.entry.js +3 -4
- package/dist/esm/nv-menu.entry.js.map +1 -1
- package/dist/esm/nv-menuitem.entry.js +1 -1
- package/dist/esm/nv-notification-bullet.entry.js +1 -2
- package/dist/esm/nv-notification-bullet.entry.js.map +1 -1
- package/dist/esm/nv-notification.entry.js +6 -9
- package/dist/esm/nv-notification.entry.js.map +1 -1
- package/dist/esm/nv-notificationcontainer.entry.js +1 -1
- package/dist/esm/nv-popover.entry.js +4 -4
- package/dist/esm/nv-popover.entry.js.map +1 -1
- package/dist/esm/nv-row.entry.js +1 -1
- package/dist/esm/nv-sidebar.entry.js +3 -3
- package/dist/esm/nv-sidebar.entry.js.map +1 -1
- package/dist/esm/nv-sidebarcontent.entry.js +1 -1
- package/dist/esm/nv-sidebardivider.entry.js +1 -1
- package/dist/esm/nv-sidebarfooter.entry.js +1 -1
- package/dist/esm/nv-sidebargroup.entry.js +1 -1
- package/dist/esm/nv-sidebarheader.entry.js +1 -1
- package/dist/esm/nv-sidebarlogo.entry.js +1 -1
- package/dist/esm/nv-sidebarnavitem.entry.js +4 -5
- package/dist/esm/nv-sidebarnavitem.entry.js.map +1 -1
- package/dist/esm/nv-sidebarnavsubitem.entry.js +1 -1
- package/dist/esm/nv-split.entry.js +43 -41
- package/dist/esm/nv-split.entry.js.map +1 -1
- package/dist/esm/nv-stack.entry.js +1 -1
- package/dist/esm/nv-table.entry.js +6 -8
- package/dist/esm/nv-table.entry.js.map +1 -1
- package/dist/esm/nv-tableheader.entry.js +2 -2
- package/dist/esm/nv-tableheader.entry.js.map +1 -1
- package/dist/esm/nv-toggle.entry.js +2 -2
- package/dist/esm/nv-togglebutton.entry.js +2 -2
- package/dist/esm/nv-togglebutton.entry.js.map +1 -1
- package/dist/esm/nv-togglebuttongroup.entry.js +3 -4
- package/dist/esm/nv-togglebuttongroup.entry.js.map +1 -1
- package/dist/esm/nv-tooltip.entry.js +1 -1
- package/dist/lib/generators/angular-output.js +9 -7
- package/dist/lib/generators/angular-output.js.map +1 -1
- package/dist/lib/generators/docs-blazor.js +32 -14
- package/dist/lib/generators/docs-blazor.js.map +1 -1
- package/dist/lib/generators/vue-output.js +10 -11
- package/dist/lib/generators/vue-output.js.map +1 -1
- package/dist/lib/utils/componentBinding.js +9 -10
- package/dist/lib/utils/componentBinding.js.map +1 -1
- package/dist/lib/utils/parseToCSharpTypes.js +3 -16
- package/dist/lib/utils/parseToCSharpTypes.js.map +1 -1
- package/dist/lib/utils/spread.js +3 -4
- package/dist/lib/utils/spread.js.map +1 -1
- package/dist/native/index.esm.js +1 -1
- package/dist/native/index.esm.js.map +1 -1
- package/dist/native/native.css +1 -1
- package/dist/native/native.esm.js +1 -1
- package/dist/native/nv-accordion.entry.esm.js.map +1 -1
- package/dist/native/nv-alert.entry.esm.js.map +1 -1
- package/dist/native/nv-button.entry.esm.js.map +1 -1
- package/dist/native/nv-calendar.entry.esm.js.map +1 -1
- package/dist/native/nv-datagrid.entry.esm.js.map +1 -1
- package/dist/native/nv-dialog.entry.esm.js.map +1 -1
- package/dist/native/nv-drawer.entry.esm.js.map +1 -0
- package/dist/native/nv-drawerfooter.nv-drawerheader.entry.esm.js.map +1 -0
- package/dist/native/nv-fieldcheckbox.entry.esm.js.map +1 -1
- package/dist/native/nv-fielddate.entry.esm.js.map +1 -1
- package/dist/native/nv-fielddaterange.entry.esm.js.map +1 -1
- package/dist/native/nv-fielddropdown.entry.esm.js.map +1 -1
- package/dist/native/nv-fielddropdownitem.entry.esm.js.map +1 -1
- package/dist/native/nv-fieldmultiselect.entry.esm.js.map +1 -1
- package/dist/native/nv-fieldnumber.entry.esm.js.map +1 -1
- package/dist/native/nv-fieldpassword.entry.esm.js.map +1 -1
- package/dist/native/nv-fieldradio.entry.esm.js.map +1 -1
- package/dist/native/nv-fieldselect.entry.esm.js.map +1 -1
- package/dist/native/nv-fieldslider.entry.esm.js.map +1 -1
- package/dist/native/nv-fieldtext.entry.esm.js.map +1 -1
- package/dist/native/nv-fieldtextarea.entry.esm.js.map +1 -1
- package/dist/native/nv-fieldtime.entry.esm.js.map +1 -1
- package/dist/native/nv-icon.entry.esm.js.map +1 -1
- package/dist/native/nv-iconbutton.nv-loader.entry.esm.js.map +1 -1
- package/dist/native/nv-menu.entry.esm.js.map +1 -1
- package/dist/native/nv-notification-bullet.entry.esm.js.map +1 -1
- package/dist/native/nv-notification.entry.esm.js.map +1 -1
- package/dist/native/nv-popover.entry.esm.js.map +1 -1
- package/dist/native/nv-sidebar.entry.esm.js.map +1 -1
- package/dist/native/nv-sidebarnavitem.entry.esm.js.map +1 -1
- package/dist/native/nv-split.entry.esm.js.map +1 -1
- package/dist/native/nv-table.entry.esm.js.map +1 -1
- package/dist/native/nv-tableheader.entry.esm.js.map +1 -1
- package/dist/native/nv-togglebutton.entry.esm.js.map +1 -1
- package/dist/native/nv-togglebuttongroup.entry.esm.js.map +1 -1
- package/dist/native/{p-b21e38a3.entry.js → p-04a2fe7f.entry.js} +2 -2
- package/dist/native/p-08204da4.entry.js +2 -0
- package/dist/native/{p-bd6ae5f3.entry.js.map → p-08204da4.entry.js.map} +1 -1
- package/dist/native/{p-e0adb05d.entry.js → p-0e07b91b.entry.js} +2 -2
- package/dist/native/p-0e07b91b.entry.js.map +1 -0
- package/dist/native/p-136dfb3e.entry.js +2 -0
- package/dist/native/p-136dfb3e.entry.js.map +1 -0
- package/dist/native/p-1f2dd37f.entry.js +2 -0
- package/dist/native/p-1f2dd37f.entry.js.map +1 -0
- package/dist/native/p-255a0482.entry.js +2 -0
- package/dist/native/p-255a0482.entry.js.map +1 -0
- package/dist/native/{p-f73e9752.entry.js → p-3305a7e6.entry.js} +2 -2
- package/dist/native/p-3305a7e6.entry.js.map +1 -0
- package/dist/native/p-36b0a6f0.entry.js +2 -0
- package/dist/native/p-36b0a6f0.entry.js.map +1 -0
- package/dist/native/p-434bc910.entry.js +2 -0
- package/dist/native/p-434bc910.entry.js.map +1 -0
- package/dist/native/{p-ea98ba7a.entry.js → p-436029a5.entry.js} +2 -2
- package/dist/native/p-460fdf02.entry.js +2 -0
- package/dist/native/p-460fdf02.entry.js.map +1 -0
- package/dist/native/p-477e02cf.entry.js +2 -0
- package/dist/native/p-477e02cf.entry.js.map +1 -0
- package/dist/native/{p-28afb852.entry.js → p-4efb582b.entry.js} +2 -2
- package/dist/native/p-4efb582b.entry.js.map +1 -0
- package/dist/native/p-4f1dfa32.entry.js +2 -0
- package/dist/native/p-4f1dfa32.entry.js.map +1 -0
- package/dist/native/p-51b7de55.entry.js +13 -0
- package/dist/native/p-51b7de55.entry.js.map +1 -0
- package/dist/native/{p-37c6d559.entry.js → p-5dd120dc.entry.js} +2 -2
- package/dist/native/p-5dd120dc.entry.js.map +1 -0
- package/dist/native/{p-5acf105e.entry.js → p-67181258.entry.js} +2 -2
- package/dist/native/p-6a81884b.entry.js +2 -0
- package/dist/native/p-6a81884b.entry.js.map +1 -0
- package/dist/native/p-6aa483de.entry.js +2 -0
- package/dist/native/{p-b1a917c7.entry.js → p-6fc79712.entry.js} +2 -2
- package/dist/native/{p-ee04ea09.entry.js → p-729589cb.entry.js} +2 -2
- package/dist/native/p-729589cb.entry.js.map +1 -0
- package/dist/native/p-78bf7650.entry.js +2 -0
- package/dist/native/p-7e6e9ea2.entry.js +2 -0
- package/dist/native/p-8f1cd9e2.entry.js +2 -0
- package/dist/native/p-8f1cd9e2.entry.js.map +1 -0
- package/dist/native/{p-4cf47e1a.entry.js → p-910cd685.entry.js} +2 -2
- package/dist/native/p-91eaf02e.entry.js +2 -0
- package/dist/native/p-91eaf02e.entry.js.map +1 -0
- package/dist/native/p-93e35975.entry.js +2 -0
- package/dist/native/p-93e35975.entry.js.map +1 -0
- package/dist/native/{p-9d8257dc.entry.js → p-96c45604.entry.js} +2 -2
- package/dist/native/{p-6f456ae4.entry.js → p-9b6ad782.entry.js} +2 -2
- package/dist/native/{p-6f456ae4.entry.js.map → p-9b6ad782.entry.js.map} +1 -1
- package/dist/native/{p-fd872d54.entry.js → p-9f32c3ea.entry.js} +2 -2
- package/dist/native/p-B6GgGra-.js +2 -0
- package/dist/native/p-B6GgGra-.js.map +1 -0
- package/dist/native/p-Blc6XEY7.js +2 -0
- package/dist/native/p-Blc6XEY7.js.map +1 -0
- package/dist/native/p-D3eWMME9.js +6 -0
- package/dist/native/p-D3eWMME9.js.map +1 -0
- package/dist/native/p-DQuL1Twl.js.map +1 -1
- package/dist/native/p-IlwlcG9l.js +2 -0
- package/dist/native/{p-DOZbXX2L.js.map → p-IlwlcG9l.js.map} +1 -1
- package/dist/native/{p-b0935c49.entry.js → p-a6fea322.entry.js} +2 -2
- package/dist/native/p-ae279ae9.entry.js +2 -0
- package/dist/native/p-ae279ae9.entry.js.map +1 -0
- package/dist/native/p-ba1286aa.entry.js +2 -0
- package/dist/native/p-ba1286aa.entry.js.map +1 -0
- package/dist/native/p-bb52a5a9.entry.js +2 -0
- package/dist/native/p-bb52a5a9.entry.js.map +1 -0
- package/dist/native/p-bc90247e.entry.js +2 -0
- package/dist/native/p-bc90247e.entry.js.map +1 -0
- package/dist/native/{p-0493fb6d.entry.js → p-c2a73a5a.entry.js} +2 -2
- package/dist/native/p-c4c11549.entry.js +2 -0
- package/dist/native/{p-3c54e422.entry.js → p-c5ecdc49.entry.js} +2 -2
- package/dist/native/p-c5ecdc49.entry.js.map +1 -0
- package/dist/native/{p-527e9b56.entry.js → p-cb1b9edb.entry.js} +2 -2
- package/dist/native/p-cb1b9edb.entry.js.map +1 -0
- package/dist/native/p-cdaf54b0.entry.js +2 -0
- package/dist/native/p-cdaf54b0.entry.js.map +1 -0
- package/dist/native/{p-e7dc36d9.entry.js → p-ceb8fe8a.entry.js} +2 -2
- package/dist/native/p-daf7541b.entry.js +2 -0
- package/dist/native/p-daf7541b.entry.js.map +1 -0
- package/dist/native/{p-da893df2.entry.js → p-ded4be77.entry.js} +2 -2
- package/dist/native/p-ded4be77.entry.js.map +1 -0
- package/dist/native/p-e1fc5f8c.entry.js +2 -0
- package/dist/native/p-e1fc5f8c.entry.js.map +1 -0
- package/dist/native/{p-d4f95c86.entry.js → p-e6c69f7d.entry.js} +2 -2
- package/dist/native/p-e6c69f7d.entry.js.map +1 -0
- package/dist/native/p-e83603f1.entry.js +2 -0
- package/dist/native/p-e83603f1.entry.js.map +1 -0
- package/dist/native/p-ec217581.entry.js +2 -0
- package/dist/native/p-ec217581.entry.js.map +1 -0
- package/dist/native/p-ee694832.entry.js +2 -0
- package/dist/native/p-ee694832.entry.js.map +1 -0
- package/dist/native/{p-b1ef2f25.entry.js → p-f7e0146e.entry.js} +2 -2
- package/dist/native/p-f7e0146e.entry.js.map +1 -0
- package/dist/types/components/nv-drawer/nv-drawer.d.ts +161 -0
- package/dist/types/components/nv-drawer/nv-drawer.docs.d.ts +4 -0
- package/dist/types/components/nv-drawerfooter/nv-drawerfooter.d.ts +76 -0
- package/dist/types/components/nv-drawerfooter/nv-drawerfooter.docs.d.ts +4 -0
- package/dist/types/components/nv-drawerheader/nv-drawerheader.d.ts +20 -0
- package/dist/types/components/nv-drawerheader/nv-drawerheader.docs.d.ts +4 -0
- package/dist/types/components/nv-icon/nv-icons.d.ts +1 -1
- package/dist/types/components/nv-split/nv-split.d.ts +4 -4
- package/dist/types/components.d.ts +292 -5
- package/dist/vscode-data.json +153 -1
- package/hydrate/index.js +969 -408
- package/hydrate/index.mjs +969 -408
- package/package.json +13 -1
- package/dist/cjs/grow.animation-BrWzyoUA.js.map +0 -1
- package/dist/components/p--iYGZN4R.js.map +0 -1
- package/dist/components/p-B-3kAnun.js.map +0 -1
- package/dist/components/p-BQo7AMPX.js.map +0 -1
- package/dist/components/p-CBF8V1L7.js.map +0 -1
- package/dist/components/p-CmwaW0q4.js.map +0 -1
- package/dist/components/p-D1i2OAGe.js.map +0 -1
- package/dist/components/p-DOZbXX2L.js.map +0 -1
- package/dist/components/p-DWG6az-u.js.map +0 -1
- package/dist/components/p-DaiLIZ8f.js.map +0 -1
- package/dist/components/p-Dc_0pr83.js.map +0 -1
- package/dist/components/p-Dk8ekxr_.js.map +0 -1
- package/dist/esm/grow.animation-CvHGHBL4.js.map +0 -1
- package/dist/native/p-02df60a5.entry.js +0 -2
- package/dist/native/p-02df60a5.entry.js.map +0 -1
- package/dist/native/p-0b8d6777.entry.js +0 -13
- package/dist/native/p-0b8d6777.entry.js.map +0 -1
- package/dist/native/p-0e7e693f.entry.js +0 -2
- package/dist/native/p-0e7e693f.entry.js.map +0 -1
- package/dist/native/p-0fe60a9d.entry.js +0 -2
- package/dist/native/p-0fe60a9d.entry.js.map +0 -1
- package/dist/native/p-14b0bf14.entry.js +0 -2
- package/dist/native/p-14b0bf14.entry.js.map +0 -1
- package/dist/native/p-28afb852.entry.js.map +0 -1
- package/dist/native/p-2cf77850.entry.js +0 -2
- package/dist/native/p-2cf77850.entry.js.map +0 -1
- package/dist/native/p-31a12d8a.entry.js +0 -2
- package/dist/native/p-31a12d8a.entry.js.map +0 -1
- package/dist/native/p-37c6d559.entry.js.map +0 -1
- package/dist/native/p-3c54e422.entry.js.map +0 -1
- package/dist/native/p-3c9b22ff.entry.js +0 -2
- package/dist/native/p-3c9b22ff.entry.js.map +0 -1
- package/dist/native/p-4a71f223.entry.js +0 -2
- package/dist/native/p-4a71f223.entry.js.map +0 -1
- package/dist/native/p-527e9b56.entry.js.map +0 -1
- package/dist/native/p-5bce524d.entry.js +0 -2
- package/dist/native/p-5bce524d.entry.js.map +0 -1
- package/dist/native/p-63bc0a05.entry.js +0 -2
- package/dist/native/p-63bc0a05.entry.js.map +0 -1
- package/dist/native/p-63bf86de.entry.js +0 -2
- package/dist/native/p-6a3c1413.entry.js +0 -2
- package/dist/native/p-7e274db7.entry.js +0 -7
- package/dist/native/p-7e274db7.entry.js.map +0 -1
- package/dist/native/p-86b2b071.entry.js +0 -2
- package/dist/native/p-86b2b071.entry.js.map +0 -1
- package/dist/native/p-8b278fce.entry.js +0 -2
- package/dist/native/p-8b278fce.entry.js.map +0 -1
- package/dist/native/p-9c543ab2.entry.js +0 -2
- package/dist/native/p-9c543ab2.entry.js.map +0 -1
- package/dist/native/p-DOZbXX2L.js +0 -2
- package/dist/native/p-DS5GOtQ3.js +0 -2
- package/dist/native/p-DS5GOtQ3.js.map +0 -1
- package/dist/native/p-a2aa6872.entry.js +0 -2
- package/dist/native/p-b1ef2f25.entry.js.map +0 -1
- package/dist/native/p-b2ed6d34.entry.js +0 -2
- package/dist/native/p-b2ed6d34.entry.js.map +0 -1
- package/dist/native/p-bd6ae5f3.entry.js +0 -2
- package/dist/native/p-c98b9ce4.entry.js +0 -2
- package/dist/native/p-c98b9ce4.entry.js.map +0 -1
- package/dist/native/p-cc305619.entry.js +0 -2
- package/dist/native/p-cc305619.entry.js.map +0 -1
- package/dist/native/p-d1cfdc3e.entry.js +0 -2
- package/dist/native/p-d1cfdc3e.entry.js.map +0 -1
- package/dist/native/p-d3b1bd81.entry.js +0 -2
- package/dist/native/p-d424b9aa.entry.js +0 -2
- package/dist/native/p-d424b9aa.entry.js.map +0 -1
- package/dist/native/p-d4f95c86.entry.js.map +0 -1
- package/dist/native/p-da893df2.entry.js.map +0 -1
- package/dist/native/p-e0adb05d.entry.js.map +0 -1
- package/dist/native/p-e6a37207.entry.js +0 -2
- package/dist/native/p-e6a37207.entry.js.map +0 -1
- package/dist/native/p-ee04ea09.entry.js.map +0 -1
- package/dist/native/p-f73e9752.entry.js.map +0 -1
- /package/dist/native/{p-b21e38a3.entry.js.map → p-04a2fe7f.entry.js.map} +0 -0
- /package/dist/native/{p-ea98ba7a.entry.js.map → p-436029a5.entry.js.map} +0 -0
- /package/dist/native/{p-5acf105e.entry.js.map → p-67181258.entry.js.map} +0 -0
- /package/dist/native/{p-63bf86de.entry.js.map → p-6aa483de.entry.js.map} +0 -0
- /package/dist/native/{p-b1a917c7.entry.js.map → p-6fc79712.entry.js.map} +0 -0
- /package/dist/native/{p-d3b1bd81.entry.js.map → p-78bf7650.entry.js.map} +0 -0
- /package/dist/native/{p-a2aa6872.entry.js.map → p-7e6e9ea2.entry.js.map} +0 -0
- /package/dist/native/{p-4cf47e1a.entry.js.map → p-910cd685.entry.js.map} +0 -0
- /package/dist/native/{p-9d8257dc.entry.js.map → p-96c45604.entry.js.map} +0 -0
- /package/dist/native/{p-fd872d54.entry.js.map → p-9f32c3ea.entry.js.map} +0 -0
- /package/dist/native/{p-b0935c49.entry.js.map → p-a6fea322.entry.js.map} +0 -0
- /package/dist/native/{p-0493fb6d.entry.js.map → p-c2a73a5a.entry.js.map} +0 -0
- /package/dist/native/{p-6a3c1413.entry.js.map → p-c4c11549.entry.js.map} +0 -0
- /package/dist/native/{p-e7dc36d9.entry.js.map → p-ceb8fe8a.entry.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"week-numbers.js","sourceRoot":"","sources":["../../../../../src/components/nv-calendar/partials/week-numbers.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,CAAC,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AA0BrD;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAA0C,KAAK,CAAC,EAAE;IACxE,MAAM,EACJ,KAAK,EACL,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,aAAa,GACd,GAAG,KAAK,CAAC;IAEV;;;OAGG;IACH,MAAM,eAAe,GAAG,CAAC,IAAqB,EAAE,EAAE;QAChD,IAAI,aAAa,KAAK,OAAO,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACpC,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QACrC,CAAC;IACH,CAAC,CAAC;IAEF;;;;OAIG;IACH,MAAM,iBAAiB,GAAG,CAAC,IAAqB,EAAE,EAAE;QAClD,OAAO,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF,OAAO,CACL,WAAK,KAAK,EAAC,cAAc;QACvB,WAAK,KAAK,EAAC,aAAa,IAAE,iBAAiB,CAAO;QACjD,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE
|
|
1
|
+
{"version":3,"file":"week-numbers.js","sourceRoot":"","sources":["../../../../../src/components/nv-calendar/partials/week-numbers.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,CAAC,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AA0BrD;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAA0C,KAAK,CAAC,EAAE;IACxE,MAAM,EACJ,KAAK,EACL,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,aAAa,GACd,GAAG,KAAK,CAAC;IAEV;;;OAGG;IACH,MAAM,eAAe,GAAG,CAAC,IAAqB,EAAE,EAAE;QAChD,IAAI,aAAa,KAAK,OAAO,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACpC,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QACrC,CAAC;IACH,CAAC,CAAC;IAEF;;;;OAIG;IACH,MAAM,iBAAiB,GAAG,CAAC,IAAqB,EAAE,EAAE;QAClD,OAAO,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF,OAAO,CACL,WAAK,KAAK,EAAC,cAAc;QACvB,WAAK,KAAK,EAAC,aAAa,IAAE,iBAAiB,CAAO;QACjD,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;YAC7B,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACpE,MAAM,UAAU,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC;YACnD,MAAM,WAAW,GAAG,aAAa,KAAK,OAAO,CAAC;YAE9C,OAAO,CACL,WACE,KAAK,EAAE,eAAe,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,EACtD,OAAO,EAAE,iBAAiB,CAAC,IAAI,CAAC,EAChC,GAAG,EAAE,QAAQ,SAAS,EAAE,EACxB,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EACxC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,IAEpC,UAAU,CACP,CACP,CAAC;QACJ,CAAC,CAAC,CACE,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { FunctionalComponent, h } from '@stencil/core';\nimport { getWeekNumber } from '../nv-calendar.utils';\n\n/**\n * Week data structure\n */\ninterface WeekData {\n /** Date object for this day */\n date: Date;\n}\n\n/**\n * Props for the WeekNumbers component\n */\ninterface WeekNumbersProps {\n /** Array of weeks with their days */\n weeks: Array<Array<WeekData>>;\n /** Localized text for \"week\" abbreviation */\n localizedWeekText: string;\n /** Current selection type */\n selectionType: 'single' | 'range';\n /** Handler for week selection in range mode */\n onWeekSelect: (dates: Date[], calendarIndex: number) => void;\n /** Calendar index for multi-calendar setups */\n calendarIndex: number;\n}\n\n/**\n * Renders the week numbers column for the calendar\n * @param {WeekNumbersProps} props - Component properties\n * @returns {JSX.Element} JSX element representing the week numbers\n */\nexport const WeekNumbers: FunctionalComponent<WeekNumbersProps> = props => {\n const {\n weeks,\n localizedWeekText,\n selectionType,\n onWeekSelect,\n calendarIndex,\n } = props;\n\n /**\n * Handles click on a week number for range selection\n * @param {Array<WeekData>} week - Week data\n */\n const handleWeekClick = (week: Array<WeekData>) => {\n if (selectionType === 'range') {\n const dates = week.map(d => d.date);\n onWeekSelect(dates, calendarIndex);\n }\n };\n\n /**\n * Creates a click handler for a specific week\n * @param {Array<WeekData>} week - Week data\n * @returns {() => void} Click handler function\n */\n const createWeekHandler = (week: Array<WeekData>) => {\n return () => handleWeekClick(week);\n };\n\n return (\n <div class=\"week-numbers\">\n <div class=\"week-header\">{localizedWeekText}</div>\n {weeks.map((week, weekIndex) => {\n const firstDayWithDate = week.find(d => d.date)?.date || new Date();\n const weekNumber = getWeekNumber(firstDayWithDate);\n const isClickable = selectionType === 'range';\n\n return (\n <div\n class={`week-number ${isClickable ? 'clickable' : ''}`}\n onClick={createWeekHandler(week)}\n key={`week-${weekIndex}`}\n role={isClickable ? 'button' : undefined}\n tabindex={isClickable ? 0 : undefined}\n >\n {weekNumber}\n </div>\n );\n })}\n </div>\n );\n};\n"]}
|
|
@@ -267,7 +267,7 @@ describe('nv-calendar.utils - Comprehensive Tests', () => {
|
|
|
267
267
|
const isoString = '2024-06-15T12:00:00.123Z';
|
|
268
268
|
const result = parseDate(isoString, 'YYYY-MM-DD');
|
|
269
269
|
expect(result).toBeInstanceOf(Date);
|
|
270
|
-
expect(result
|
|
270
|
+
expect(result?.toISOString()).toBe(isoString);
|
|
271
271
|
});
|
|
272
272
|
it('should handle invalid ISO strings gracefully', () => {
|
|
273
273
|
const result = parseDate('invalid-iso-string', 'YYYY-MM-DD');
|
|
@@ -280,7 +280,7 @@ describe('nv-calendar.utils - Comprehensive Tests', () => {
|
|
|
280
280
|
const unixSeconds = '1718452800'; // 2024-06-15T12:00:00Z
|
|
281
281
|
const result = parseDate(unixSeconds, 'X');
|
|
282
282
|
expect(result).toBeInstanceOf(Date);
|
|
283
|
-
expect(result
|
|
283
|
+
expect(result?.getTime()).toBe(1718452800000);
|
|
284
284
|
});
|
|
285
285
|
it('should parse Unix seconds in UTC mode', () => {
|
|
286
286
|
const unixSeconds = '1718452800';
|
|
@@ -292,7 +292,7 @@ describe('nv-calendar.utils - Comprehensive Tests', () => {
|
|
|
292
292
|
const unixMs = '1718452800123';
|
|
293
293
|
const result = parseDate(unixMs, 'x');
|
|
294
294
|
expect(result).toBeInstanceOf(Date);
|
|
295
|
-
expect(result
|
|
295
|
+
expect(result?.getTime()).toBe(1718452800123);
|
|
296
296
|
});
|
|
297
297
|
it('should handle invalid Unix timestamps', () => {
|
|
298
298
|
expect(parseDate('invalid', 'X')).toBeNull();
|
|
@@ -319,9 +319,9 @@ describe('nv-calendar.utils - Comprehensive Tests', () => {
|
|
|
319
319
|
it('should parse custom date formats', () => {
|
|
320
320
|
const result = parseDate('15/06/2024', 'DD/MM/YYYY');
|
|
321
321
|
expect(result).toBeInstanceOf(Date);
|
|
322
|
-
expect(result
|
|
323
|
-
expect(result
|
|
324
|
-
expect(result
|
|
322
|
+
expect(result?.getFullYear()).toBe(2024);
|
|
323
|
+
expect(result?.getMonth()).toBe(5); // June is month 5 (0-indexed)
|
|
324
|
+
expect(result?.getDate()).toBe(15);
|
|
325
325
|
});
|
|
326
326
|
it('should parse with strict mode', () => {
|
|
327
327
|
// Valid format
|
|
@@ -341,8 +341,8 @@ describe('nv-calendar.utils - Comprehensive Tests', () => {
|
|
|
341
341
|
it('should handle leap year parsing', () => {
|
|
342
342
|
const result = parseDate('29/02/2024', 'DD/MM/YYYY');
|
|
343
343
|
expect(result).toBeInstanceOf(Date);
|
|
344
|
-
expect(result
|
|
345
|
-
expect(result
|
|
344
|
+
expect(result?.getMonth()).toBe(1); // February
|
|
345
|
+
expect(result?.getDate()).toBe(29);
|
|
346
346
|
});
|
|
347
347
|
it('should handle year boundaries', () => {
|
|
348
348
|
const newYear = parseDate('01/01/2024', 'DD/MM/YYYY');
|
|
@@ -353,9 +353,9 @@ describe('nv-calendar.utils - Comprehensive Tests', () => {
|
|
|
353
353
|
it('should handle various time formats', () => {
|
|
354
354
|
const withTime = parseDate('2024-06-15 14:30:45', 'YYYY-MM-DD HH:mm:ss');
|
|
355
355
|
expect(withTime).toBeInstanceOf(Date);
|
|
356
|
-
expect(withTime
|
|
357
|
-
expect(withTime
|
|
358
|
-
expect(withTime
|
|
356
|
+
expect(withTime?.getHours()).toBe(14);
|
|
357
|
+
expect(withTime?.getMinutes()).toBe(30);
|
|
358
|
+
expect(withTime?.getSeconds()).toBe(45);
|
|
359
359
|
});
|
|
360
360
|
});
|
|
361
361
|
});
|
|
@@ -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 } 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"]}
|
|
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 } 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"]}
|
|
@@ -75,12 +75,12 @@ function isDateSelected(date, selectedDate, selectedRange, selectionType = 'sing
|
|
|
75
75
|
return false;
|
|
76
76
|
}
|
|
77
77
|
function isRangeStart(date, selectedRange) {
|
|
78
|
-
return
|
|
78
|
+
return selectedRange?.start
|
|
79
79
|
? date.getTime() === selectedRange.start.getTime()
|
|
80
80
|
: false;
|
|
81
81
|
}
|
|
82
82
|
function isRangeEnd(date, selectedRange) {
|
|
83
|
-
return
|
|
83
|
+
return selectedRange?.end
|
|
84
84
|
? date.getTime() === selectedRange.end.getTime()
|
|
85
85
|
: false;
|
|
86
86
|
}
|
package/dist/collection/components/nv-calendar/test/partials/calendar-grid.logic.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar-grid.logic.test.js","sourceRoot":"","sources":["../../../../../../src/components/nv-calendar/test/partials/calendar-grid.logic.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\nimport { describe, it, expect } from 'vitest';\n\n/**\n * Logic tests for the CalendarGrid partial\n *\n * These tests validate the calendar grid logic:\n * - Month days generation\n * - Previous/next days calculation\n * - Selection logic (single/range)\n * - Cell states (disabled, selected, in-range)\n */\n\nfunction getDaysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\nfunction getFirstDayOfMonth(year: number, month: number): number {\n return new Date(year, month, 1).getDay();\n}\n\nfunction generateCalendarDays(\n year: number,\n month: number,\n firstDayOfWeek = 0,\n): Array<{ date: Date; isCurrentMonth: boolean; dayOfMonth: number }> {\n const daysInMonth = getDaysInMonth(year, month);\n const firstDay = getFirstDayOfMonth(year, month);\n const daysToShow = [];\n\n // Adjust first day based on first day of week setting\n const adjustedFirstDay = (firstDay - firstDayOfWeek + 7) % 7;\n\n // Previous month days\n const prevMonth = month === 0 ? 11 : month - 1;\n const prevYear = month === 0 ? year - 1 : year;\n const daysInPrevMonth = getDaysInMonth(prevYear, prevMonth);\n\n for (let i = adjustedFirstDay - 1; i >= 0; i--) {\n const dayOfMonth = daysInPrevMonth - i;\n daysToShow.push({\n date: new Date(prevYear, prevMonth, dayOfMonth),\n isCurrentMonth: false,\n dayOfMonth,\n });\n }\n\n // Current month days\n for (let day = 1; day <= daysInMonth; day++) {\n daysToShow.push({\n date: new Date(year, month, day),\n isCurrentMonth: true,\n dayOfMonth: day,\n });\n }\n\n // Next month days to fill the grid (42 days = 6 weeks)\n const totalCells = 42;\n const remainingCells = totalCells - daysToShow.length;\n const nextMonth = month === 11 ? 0 : month + 1;\n const nextYear = month === 11 ? year + 1 : year;\n\n for (let day = 1; day <= remainingCells; day++) {\n daysToShow.push({\n date: new Date(nextYear, nextMonth, day),\n isCurrentMonth: false,\n dayOfMonth: day,\n });\n }\n\n return daysToShow;\n}\n\nfunction isDateInRange(date: Date, startDate?: Date, endDate?: Date): boolean {\n if (!startDate || !endDate) return false;\n return date >= startDate && date <= endDate;\n}\n\nfunction isDateSelected(\n date: Date,\n selectedDate?: Date,\n selectedRange?: { start?: Date; end?: Date },\n selectionType: 'single' | 'range' = 'single',\n): boolean {\n if (selectionType === 'single') {\n return selectedDate ? date.getTime() === selectedDate.getTime() : false;\n }\n\n if (selectionType === 'range' && selectedRange) {\n if (selectedRange.start && selectedRange.end) {\n return isDateInRange(date, selectedRange.start, selectedRange.end);\n }\n if (selectedRange.start) {\n return date.getTime() === selectedRange.start.getTime();\n }\n }\n\n return false;\n}\n\nfunction isRangeStart(\n date: Date,\n selectedRange?: { start?: Date; end?: Date },\n): boolean {\n return selectedRange?.start\n ? date.getTime() === selectedRange.start.getTime()\n : false;\n}\n\nfunction isRangeEnd(\n date: Date,\n selectedRange?: { start?: Date; end?: Date },\n): boolean {\n return selectedRange?.end\n ? date.getTime() === selectedRange.end.getTime()\n : false;\n}\n\nfunction isDateDisabled(\n date: Date,\n disabledDates?: string[],\n minDate?: Date,\n maxDate?: Date,\n): boolean {\n // Check min/max dates\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n\n // Check disabled dates array\n if (disabledDates) {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n const dateString = `${year}-${month}-${day}`;\n return disabledDates.includes(dateString);\n }\n\n return false;\n}\n\ndescribe('CalendarGrid - Logic Tests', () => {\n const testYear = 2024;\n const testMonth = 5; // June (0-indexed)\n\n describe('Date Calculations', () => {\n it('should calculate days in month correctly', () => {\n expect(getDaysInMonth(2024, 0)).toBe(31); // January\n expect(getDaysInMonth(2024, 1)).toBe(29); // February (leap year)\n expect(getDaysInMonth(2023, 1)).toBe(28); // February (non-leap year)\n expect(getDaysInMonth(2024, 3)).toBe(30); // April\n expect(getDaysInMonth(2024, 11)).toBe(31); // December\n });\n\n it('should calculate first day of month correctly', () => {\n expect(getFirstDayOfMonth(2024, 0)).toBe(1); // January 1, 2024 is Monday\n expect(getFirstDayOfMonth(2024, 5)).toBe(6); // June 1, 2024 is Saturday\n });\n\n it('should handle leap year correctly', () => {\n expect(getDaysInMonth(2024, 1)).toBe(29); // 2024 is leap year\n expect(getDaysInMonth(2023, 1)).toBe(28); // 2023 is not leap year\n expect(getDaysInMonth(2000, 1)).toBe(29); // 2000 is leap year\n expect(getDaysInMonth(1900, 1)).toBe(28); // 1900 is not leap year\n });\n });\n\n describe('Calendar Grid Generation', () => {\n it('should generate correct number of days', () => {\n const days = generateCalendarDays(testYear, testMonth);\n expect(days.length).toBe(42); // Always 6 weeks\n });\n\n it('should include current month days', () => {\n const days = generateCalendarDays(testYear, testMonth);\n const currentMonthDays = days.filter(day => day.isCurrentMonth);\n\n expect(currentMonthDays.length).toBe(30); // June has 30 days\n expect(currentMonthDays[0].dayOfMonth).toBe(1);\n expect(currentMonthDays[29].dayOfMonth).toBe(30);\n });\n\n it('should include previous month days when needed', () => {\n const days = generateCalendarDays(testYear, testMonth);\n const prevMonthDays = days.filter(\n day =>\n !day.isCurrentMonth && day.date < new Date(testYear, testMonth, 1),\n );\n\n expect(prevMonthDays.length).toBeGreaterThan(0);\n });\n\n it('should include next month days to fill grid', () => {\n const days = generateCalendarDays(testYear, testMonth);\n const nextMonthDays = days.filter(\n day =>\n !day.isCurrentMonth &&\n day.date > new Date(testYear, testMonth + 1, 0),\n );\n\n expect(nextMonthDays.length).toBeGreaterThan(0);\n });\n\n it('should respect first day of week setting', () => {\n // Test with Monday as first day (1)\n const daysMonday = generateCalendarDays(testYear, testMonth, 1);\n const daysSunday = generateCalendarDays(testYear, testMonth, 0);\n\n // Structure should be different\n expect(daysMonday[0].date.getDay()).not.toBe(daysSunday[0].date.getDay());\n });\n });\n\n describe('Selection Logic', () => {\n const testDate = new Date(2024, 5, 15);\n const selectedDate = new Date(2024, 5, 15);\n const selectedRange = {\n start: new Date(2024, 5, 10),\n end: new Date(2024, 5, 20),\n };\n\n it('should detect single date selection', () => {\n expect(isDateSelected(testDate, selectedDate, undefined, 'single')).toBe(\n true,\n );\n expect(\n isDateSelected(\n new Date(2024, 5, 16),\n selectedDate,\n undefined,\n 'single',\n ),\n ).toBe(false);\n });\n\n it('should detect range selection', () => {\n const inRangeDate = new Date(2024, 5, 15);\n const outOfRangeDate = new Date(2024, 5, 25);\n\n expect(\n isDateSelected(inRangeDate, undefined, selectedRange, 'range'),\n ).toBe(true);\n expect(\n isDateSelected(outOfRangeDate, undefined, selectedRange, 'range'),\n ).toBe(false);\n });\n\n it('should detect range start and end', () => {\n expect(isRangeStart(selectedRange.start!, selectedRange)).toBe(true);\n expect(isRangeStart(selectedRange.end!, selectedRange)).toBe(false);\n\n expect(isRangeEnd(selectedRange.end!, selectedRange)).toBe(true);\n expect(isRangeEnd(selectedRange.start!, selectedRange)).toBe(false);\n });\n\n it('should handle incomplete range selection', () => {\n const incompleteRange = { start: new Date(2024, 5, 10) };\n\n expect(\n isDateSelected(\n incompleteRange.start,\n undefined,\n incompleteRange,\n 'range',\n ),\n ).toBe(true);\n expect(\n isDateSelected(\n new Date(2024, 5, 15),\n undefined,\n incompleteRange,\n 'range',\n ),\n ).toBe(false);\n });\n });\n\n describe('Date Validation Logic', () => {\n const testDate = new Date(2024, 5, 15);\n const minDate = new Date(2024, 5, 1);\n const maxDate = new Date(2024, 5, 30);\n const disabledDates = ['2024-06-10', '2024-06-20'];\n\n it('should detect dates outside min/max range', () => {\n const beforeMin = new Date(2024, 4, 31);\n const afterMax = new Date(2024, 6, 1);\n\n expect(isDateDisabled(beforeMin, undefined, minDate, maxDate)).toBe(true);\n expect(isDateDisabled(afterMax, undefined, minDate, maxDate)).toBe(true);\n expect(isDateDisabled(testDate, undefined, minDate, maxDate)).toBe(false);\n });\n\n it('should detect specifically disabled dates', () => {\n const disabledDate = new Date(2024, 5, 10);\n const enabledDate = new Date(2024, 5, 15);\n\n expect(isDateDisabled(disabledDate, disabledDates)).toBe(true);\n expect(isDateDisabled(enabledDate, disabledDates)).toBe(false);\n });\n\n it('should handle multiple validation conditions', () => {\n const beforeMinAndDisabled = new Date(2024, 4, 31);\n\n expect(\n isDateDisabled(beforeMinAndDisabled, disabledDates, minDate, maxDate),\n ).toBe(true);\n });\n });\n\n describe('Edge Cases', () => {\n it('should handle month boundaries correctly', () => {\n // Test December to January transition\n const decemberDays = generateCalendarDays(2024, 11);\n const currentMonthDays = decemberDays.filter(day => day.isCurrentMonth);\n\n expect(currentMonthDays.length).toBe(31);\n });\n\n it('should handle year boundaries correctly', () => {\n // Test December 2024 to January 2025\n const days = generateCalendarDays(2024, 11);\n const nextYearDays = days.filter(day => day.date.getFullYear() === 2025);\n\n expect(nextYearDays.length).toBeGreaterThan(0);\n });\n\n it('should handle leap year February correctly', () => {\n const februaryDays = generateCalendarDays(2024, 1); // February 2024\n const currentMonthDays = februaryDays.filter(day => day.isCurrentMonth);\n\n expect(currentMonthDays.length).toBe(29); // Leap year\n });\n\n it('should handle different first day of week values', () => {\n const firstDayValues = [0, 1, 2, 3, 4, 5, 6];\n\n firstDayValues.forEach(firstDay => {\n const days = generateCalendarDays(testYear, testMonth, firstDay);\n expect(days.length).toBe(42);\n });\n });\n\n it('should handle empty selections gracefully', () => {\n const testDate = new Date(2024, 5, 15);\n\n expect(isDateSelected(testDate, undefined, undefined, 'single')).toBe(\n false,\n );\n expect(isDateSelected(testDate, undefined, undefined, 'range')).toBe(\n false,\n );\n expect(isRangeStart(testDate, undefined)).toBe(false);\n expect(isRangeEnd(testDate, undefined)).toBe(false);\n });\n });\n\n describe('Integration Scenarios', () => {\n it('should generate complete calendar data for a month', () => {\n const days = generateCalendarDays(testYear, testMonth);\n const selectedRange = {\n start: new Date(2024, 5, 10),\n end: new Date(2024, 5, 15),\n };\n const disabledDates = ['2024-06-20'];\n\n days.forEach(day => {\n const isSelected = isDateSelected(\n day.date,\n undefined,\n selectedRange,\n 'range',\n );\n const isDisabled = isDateDisabled(day.date, disabledDates);\n const isStart = isRangeStart(day.date, selectedRange);\n const isEnd = isRangeEnd(day.date, selectedRange);\n\n expect(typeof isSelected).toBe('boolean');\n expect(typeof isDisabled).toBe('boolean');\n expect(typeof isStart).toBe('boolean');\n expect(typeof isEnd).toBe('boolean');\n });\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"calendar-grid.logic.test.js","sourceRoot":"","sources":["../../../../../../src/components/nv-calendar/test/partials/calendar-grid.logic.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\nimport { describe, it, expect } from 'vitest';\n\n/**\n * Logic tests for the CalendarGrid partial\n *\n * These tests validate the calendar grid logic:\n * - Month days generation\n * - Previous/next days calculation\n * - Selection logic (single/range)\n * - Cell states (disabled, selected, in-range)\n */\n\nfunction getDaysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\nfunction getFirstDayOfMonth(year: number, month: number): number {\n return new Date(year, month, 1).getDay();\n}\n\nfunction generateCalendarDays(\n year: number,\n month: number,\n firstDayOfWeek = 0,\n): Array<{ date: Date; isCurrentMonth: boolean; dayOfMonth: number }> {\n const daysInMonth = getDaysInMonth(year, month);\n const firstDay = getFirstDayOfMonth(year, month);\n const daysToShow = [];\n\n // Adjust first day based on first day of week setting\n const adjustedFirstDay = (firstDay - firstDayOfWeek + 7) % 7;\n\n // Previous month days\n const prevMonth = month === 0 ? 11 : month - 1;\n const prevYear = month === 0 ? year - 1 : year;\n const daysInPrevMonth = getDaysInMonth(prevYear, prevMonth);\n\n for (let i = adjustedFirstDay - 1; i >= 0; i--) {\n const dayOfMonth = daysInPrevMonth - i;\n daysToShow.push({\n date: new Date(prevYear, prevMonth, dayOfMonth),\n isCurrentMonth: false,\n dayOfMonth,\n });\n }\n\n // Current month days\n for (let day = 1; day <= daysInMonth; day++) {\n daysToShow.push({\n date: new Date(year, month, day),\n isCurrentMonth: true,\n dayOfMonth: day,\n });\n }\n\n // Next month days to fill the grid (42 days = 6 weeks)\n const totalCells = 42;\n const remainingCells = totalCells - daysToShow.length;\n const nextMonth = month === 11 ? 0 : month + 1;\n const nextYear = month === 11 ? year + 1 : year;\n\n for (let day = 1; day <= remainingCells; day++) {\n daysToShow.push({\n date: new Date(nextYear, nextMonth, day),\n isCurrentMonth: false,\n dayOfMonth: day,\n });\n }\n\n return daysToShow;\n}\n\nfunction isDateInRange(date: Date, startDate?: Date, endDate?: Date): boolean {\n if (!startDate || !endDate) return false;\n return date >= startDate && date <= endDate;\n}\n\nfunction isDateSelected(\n date: Date,\n selectedDate?: Date,\n selectedRange?: { start?: Date; end?: Date },\n selectionType: 'single' | 'range' = 'single',\n): boolean {\n if (selectionType === 'single') {\n return selectedDate ? date.getTime() === selectedDate.getTime() : false;\n }\n\n if (selectionType === 'range' && selectedRange) {\n if (selectedRange.start && selectedRange.end) {\n return isDateInRange(date, selectedRange.start, selectedRange.end);\n }\n if (selectedRange.start) {\n return date.getTime() === selectedRange.start.getTime();\n }\n }\n\n return false;\n}\n\nfunction isRangeStart(\n date: Date,\n selectedRange?: { start?: Date; end?: Date },\n): boolean {\n return selectedRange?.start\n ? date.getTime() === selectedRange.start.getTime()\n : false;\n}\n\nfunction isRangeEnd(\n date: Date,\n selectedRange?: { start?: Date; end?: Date },\n): boolean {\n return selectedRange?.end\n ? date.getTime() === selectedRange.end.getTime()\n : false;\n}\n\nfunction isDateDisabled(\n date: Date,\n disabledDates?: string[],\n minDate?: Date,\n maxDate?: Date,\n): boolean {\n // Check min/max dates\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n\n // Check disabled dates array\n if (disabledDates) {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n const dateString = `${year}-${month}-${day}`;\n return disabledDates.includes(dateString);\n }\n\n return false;\n}\n\ndescribe('CalendarGrid - Logic Tests', () => {\n const testYear = 2024;\n const testMonth = 5; // June (0-indexed)\n\n describe('Date Calculations', () => {\n it('should calculate days in month correctly', () => {\n expect(getDaysInMonth(2024, 0)).toBe(31); // January\n expect(getDaysInMonth(2024, 1)).toBe(29); // February (leap year)\n expect(getDaysInMonth(2023, 1)).toBe(28); // February (non-leap year)\n expect(getDaysInMonth(2024, 3)).toBe(30); // April\n expect(getDaysInMonth(2024, 11)).toBe(31); // December\n });\n\n it('should calculate first day of month correctly', () => {\n expect(getFirstDayOfMonth(2024, 0)).toBe(1); // January 1, 2024 is Monday\n expect(getFirstDayOfMonth(2024, 5)).toBe(6); // June 1, 2024 is Saturday\n });\n\n it('should handle leap year correctly', () => {\n expect(getDaysInMonth(2024, 1)).toBe(29); // 2024 is leap year\n expect(getDaysInMonth(2023, 1)).toBe(28); // 2023 is not leap year\n expect(getDaysInMonth(2000, 1)).toBe(29); // 2000 is leap year\n expect(getDaysInMonth(1900, 1)).toBe(28); // 1900 is not leap year\n });\n });\n\n describe('Calendar Grid Generation', () => {\n it('should generate correct number of days', () => {\n const days = generateCalendarDays(testYear, testMonth);\n expect(days.length).toBe(42); // Always 6 weeks\n });\n\n it('should include current month days', () => {\n const days = generateCalendarDays(testYear, testMonth);\n const currentMonthDays = days.filter(day => day.isCurrentMonth);\n\n expect(currentMonthDays.length).toBe(30); // June has 30 days\n expect(currentMonthDays[0].dayOfMonth).toBe(1);\n expect(currentMonthDays[29].dayOfMonth).toBe(30);\n });\n\n it('should include previous month days when needed', () => {\n const days = generateCalendarDays(testYear, testMonth);\n const prevMonthDays = days.filter(\n day =>\n !day.isCurrentMonth && day.date < new Date(testYear, testMonth, 1),\n );\n\n expect(prevMonthDays.length).toBeGreaterThan(0);\n });\n\n it('should include next month days to fill grid', () => {\n const days = generateCalendarDays(testYear, testMonth);\n const nextMonthDays = days.filter(\n day =>\n !day.isCurrentMonth &&\n day.date > new Date(testYear, testMonth + 1, 0),\n );\n\n expect(nextMonthDays.length).toBeGreaterThan(0);\n });\n\n it('should respect first day of week setting', () => {\n // Test with Monday as first day (1)\n const daysMonday = generateCalendarDays(testYear, testMonth, 1);\n const daysSunday = generateCalendarDays(testYear, testMonth, 0);\n\n // Structure should be different\n expect(daysMonday[0].date.getDay()).not.toBe(daysSunday[0].date.getDay());\n });\n });\n\n describe('Selection Logic', () => {\n const testDate = new Date(2024, 5, 15);\n const selectedDate = new Date(2024, 5, 15);\n const selectedRange = {\n start: new Date(2024, 5, 10),\n end: new Date(2024, 5, 20),\n };\n\n it('should detect single date selection', () => {\n expect(isDateSelected(testDate, selectedDate, undefined, 'single')).toBe(\n true,\n );\n expect(\n isDateSelected(\n new Date(2024, 5, 16),\n selectedDate,\n undefined,\n 'single',\n ),\n ).toBe(false);\n });\n\n it('should detect range selection', () => {\n const inRangeDate = new Date(2024, 5, 15);\n const outOfRangeDate = new Date(2024, 5, 25);\n\n expect(\n isDateSelected(inRangeDate, undefined, selectedRange, 'range'),\n ).toBe(true);\n expect(\n isDateSelected(outOfRangeDate, undefined, selectedRange, 'range'),\n ).toBe(false);\n });\n\n it('should detect range start and end', () => {\n expect(isRangeStart(selectedRange.start!, selectedRange)).toBe(true);\n expect(isRangeStart(selectedRange.end!, selectedRange)).toBe(false);\n\n expect(isRangeEnd(selectedRange.end!, selectedRange)).toBe(true);\n expect(isRangeEnd(selectedRange.start!, selectedRange)).toBe(false);\n });\n\n it('should handle incomplete range selection', () => {\n const incompleteRange = { start: new Date(2024, 5, 10) };\n\n expect(\n isDateSelected(\n incompleteRange.start,\n undefined,\n incompleteRange,\n 'range',\n ),\n ).toBe(true);\n expect(\n isDateSelected(\n new Date(2024, 5, 15),\n undefined,\n incompleteRange,\n 'range',\n ),\n ).toBe(false);\n });\n });\n\n describe('Date Validation Logic', () => {\n const testDate = new Date(2024, 5, 15);\n const minDate = new Date(2024, 5, 1);\n const maxDate = new Date(2024, 5, 30);\n const disabledDates = ['2024-06-10', '2024-06-20'];\n\n it('should detect dates outside min/max range', () => {\n const beforeMin = new Date(2024, 4, 31);\n const afterMax = new Date(2024, 6, 1);\n\n expect(isDateDisabled(beforeMin, undefined, minDate, maxDate)).toBe(true);\n expect(isDateDisabled(afterMax, undefined, minDate, maxDate)).toBe(true);\n expect(isDateDisabled(testDate, undefined, minDate, maxDate)).toBe(false);\n });\n\n it('should detect specifically disabled dates', () => {\n const disabledDate = new Date(2024, 5, 10);\n const enabledDate = new Date(2024, 5, 15);\n\n expect(isDateDisabled(disabledDate, disabledDates)).toBe(true);\n expect(isDateDisabled(enabledDate, disabledDates)).toBe(false);\n });\n\n it('should handle multiple validation conditions', () => {\n const beforeMinAndDisabled = new Date(2024, 4, 31);\n\n expect(\n isDateDisabled(beforeMinAndDisabled, disabledDates, minDate, maxDate),\n ).toBe(true);\n });\n });\n\n describe('Edge Cases', () => {\n it('should handle month boundaries correctly', () => {\n // Test December to January transition\n const decemberDays = generateCalendarDays(2024, 11);\n const currentMonthDays = decemberDays.filter(day => day.isCurrentMonth);\n\n expect(currentMonthDays.length).toBe(31);\n });\n\n it('should handle year boundaries correctly', () => {\n // Test December 2024 to January 2025\n const days = generateCalendarDays(2024, 11);\n const nextYearDays = days.filter(day => day.date.getFullYear() === 2025);\n\n expect(nextYearDays.length).toBeGreaterThan(0);\n });\n\n it('should handle leap year February correctly', () => {\n const februaryDays = generateCalendarDays(2024, 1); // February 2024\n const currentMonthDays = februaryDays.filter(day => day.isCurrentMonth);\n\n expect(currentMonthDays.length).toBe(29); // Leap year\n });\n\n it('should handle different first day of week values', () => {\n const firstDayValues = [0, 1, 2, 3, 4, 5, 6];\n\n firstDayValues.forEach(firstDay => {\n const days = generateCalendarDays(testYear, testMonth, firstDay);\n expect(days.length).toBe(42);\n });\n });\n\n it('should handle empty selections gracefully', () => {\n const testDate = new Date(2024, 5, 15);\n\n expect(isDateSelected(testDate, undefined, undefined, 'single')).toBe(\n false,\n );\n expect(isDateSelected(testDate, undefined, undefined, 'range')).toBe(\n false,\n );\n expect(isRangeStart(testDate, undefined)).toBe(false);\n expect(isRangeEnd(testDate, undefined)).toBe(false);\n });\n });\n\n describe('Integration Scenarios', () => {\n it('should generate complete calendar data for a month', () => {\n const days = generateCalendarDays(testYear, testMonth);\n const selectedRange = {\n start: new Date(2024, 5, 10),\n end: new Date(2024, 5, 15),\n };\n const disabledDates = ['2024-06-20'];\n\n days.forEach(day => {\n const isSelected = isDateSelected(\n day.date,\n undefined,\n selectedRange,\n 'range',\n );\n const isDisabled = isDateDisabled(day.date, disabledDates);\n const isStart = isRangeStart(day.date, selectedRange);\n const isEnd = isRangeEnd(day.date, selectedRange);\n\n expect(typeof isSelected).toBe('boolean');\n expect(typeof isDisabled).toBe('boolean');\n expect(typeof isStart).toBe('boolean');\n expect(typeof isEnd).toBe('boolean');\n });\n });\n });\n});\n"]}
|
package/dist/collection/components/nv-calendar/test/partials/calendar-shortcuts.logic.test.js
CHANGED
|
@@ -116,11 +116,12 @@ describe('CalendarShortcuts - Logic Tests', () => {
|
|
|
116
116
|
});
|
|
117
117
|
});
|
|
118
118
|
it('should generate chronologically correct shortcuts', () => {
|
|
119
|
-
var _a, _b, _c;
|
|
120
119
|
const shortcuts = generateDefaultShortcuts();
|
|
121
|
-
const today =
|
|
122
|
-
const tomorrow =
|
|
123
|
-
|
|
120
|
+
const today = shortcuts.find(s => s.label === 'Today')?.dates;
|
|
121
|
+
const tomorrow = shortcuts.find(s => s.label === 'Tomorrow')
|
|
122
|
+
?.dates;
|
|
123
|
+
const yesterday = shortcuts.find(s => s.label === 'Yesterday')
|
|
124
|
+
?.dates;
|
|
124
125
|
expect(yesterday.getTime()).toBeLessThan(today.getTime());
|
|
125
126
|
expect(today.getTime()).toBeLessThan(tomorrow.getTime());
|
|
126
127
|
});
|
|
@@ -186,7 +187,7 @@ describe('CalendarShortcuts - Logic Tests', () => {
|
|
|
186
187
|
};
|
|
187
188
|
const singleShortcut = { label: 'Test Single', dates: testDate };
|
|
188
189
|
it('should disable shortcuts explicitly marked as disabled', () => {
|
|
189
|
-
const disabledShortcut =
|
|
190
|
+
const disabledShortcut = { ...singleShortcut, disabled: true };
|
|
190
191
|
expect(isShortcutDisabled(disabledShortcut)).toBe(true);
|
|
191
192
|
});
|
|
192
193
|
it('should disable single date shortcuts outside date range', () => {
|