@nova-design-system/nova-webcomponents 3.2.0 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/{index-108ddff0.js → index-c56424e5.js} +18 -186
- package/dist/cjs/index-c56424e5.js.map +1 -0
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/native.cjs.js +2 -23
- package/dist/cjs/native.cjs.js.map +1 -1
- package/dist/cjs/nv-alert.cjs.entry.js +1 -1
- package/dist/cjs/nv-avatar.cjs.entry.js +1 -1
- package/dist/cjs/nv-badge_2.cjs.entry.js +1 -1
- package/dist/cjs/nv-breadcrumb.cjs.entry.js +1 -1
- package/dist/cjs/nv-breadcrumbs.cjs.entry.js +1 -1
- package/dist/cjs/nv-button.cjs.entry.js +1 -1
- package/dist/cjs/nv-calendar.cjs.entry.js +391 -142
- package/dist/cjs/nv-calendar.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-col.cjs.entry.js +1 -1
- package/dist/cjs/nv-datagrid.cjs.entry.js +45 -12
- package/dist/cjs/nv-datagrid.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-datagridcolumn.cjs.entry.js +1 -1
- package/dist/cjs/nv-dialog.cjs.entry.js +1 -1
- package/dist/cjs/nv-dialogfooter_2.cjs.entry.js +1 -1
- package/dist/cjs/nv-fieldcheckbox.cjs.entry.js +1 -1
- package/dist/cjs/nv-fielddate.cjs.entry.js +45 -11
- package/dist/cjs/nv-fielddate.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-fielddaterange.cjs.entry.js +98 -44
- package/dist/cjs/nv-fielddaterange.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-fielddropdown.cjs.entry.js +2 -2
- package/dist/cjs/nv-fielddropdown.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-fielddropdownitem.cjs.entry.js +1 -1
- package/dist/cjs/nv-fieldmultiselect.cjs.entry.js +2 -2
- package/dist/cjs/nv-fieldmultiselect.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-fieldnumber.cjs.entry.js +5 -5
- package/dist/cjs/nv-fieldnumber.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-fieldpassword.cjs.entry.js +5 -5
- package/dist/cjs/nv-fieldpassword.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-fieldradio.cjs.entry.js +4 -4
- package/dist/cjs/nv-fieldselect.cjs.entry.js +7 -7
- package/dist/cjs/nv-fieldselect.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-fieldslider.cjs.entry.js +28 -23
- package/dist/cjs/nv-fieldslider.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-fieldtext.cjs.entry.js +5 -5
- package/dist/cjs/nv-fieldtext.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-fieldtextarea.cjs.entry.js +5 -5
- package/dist/cjs/nv-fieldtextarea.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-fieldtime.cjs.entry.js +11 -11
- package/dist/cjs/nv-fieldtime.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-icon.cjs.entry.js +2 -2
- package/dist/cjs/nv-iconbutton_2.cjs.entry.js +3 -3
- package/dist/cjs/nv-menu.cjs.entry.js +2 -2
- package/dist/cjs/nv-menuitem.cjs.entry.js +2 -2
- package/dist/cjs/nv-popover.cjs.entry.js +3 -3
- package/dist/cjs/nv-popover.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-row.cjs.entry.js +2 -2
- package/dist/cjs/nv-stack.cjs.entry.js +2 -2
- package/dist/cjs/nv-table.cjs.entry.js +3 -3
- package/dist/cjs/nv-tablecolumn.cjs.entry.js +1 -1
- package/dist/cjs/nv-toggle.cjs.entry.js +3 -3
- package/dist/cjs/nv-tooltip.cjs.entry.js +2 -2
- package/dist/collection/components/nv-calendar/nv-calendar.js +235 -136
- package/dist/collection/components/nv-calendar/nv-calendar.js.map +1 -1
- package/dist/collection/components/nv-calendar/nv-calendar.utils.js +32 -7
- package/dist/collection/components/nv-calendar/nv-calendar.utils.js.map +1 -1
- package/dist/collection/components/nv-calendar/partials/calendar-actions.js +11 -0
- package/dist/collection/components/nv-calendar/partials/calendar-actions.js.map +1 -0
- package/dist/collection/components/nv-calendar/partials/calendar-grid.js +24 -0
- package/dist/collection/components/nv-calendar/partials/calendar-grid.js.map +1 -0
- package/dist/collection/components/nv-calendar/partials/calendar-header.js +38 -0
- package/dist/collection/components/nv-calendar/partials/calendar-header.js.map +1 -0
- package/dist/collection/components/nv-calendar/partials/calendar-shortcuts.js +22 -0
- package/dist/collection/components/nv-calendar/partials/calendar-shortcuts.js.map +1 -0
- package/dist/collection/components/nv-calendar/partials/day-cell.js +31 -0
- package/dist/collection/components/nv-calendar/partials/day-cell.js.map +1 -0
- package/dist/collection/components/nv-calendar/partials/index.js +7 -0
- package/dist/collection/components/nv-calendar/partials/index.js.map +1 -0
- package/dist/collection/components/nv-calendar/partials/week-numbers.js +36 -0
- package/dist/collection/components/nv-calendar/partials/week-numbers.js.map +1 -0
- package/dist/collection/components/nv-calendar/test/nv-calendar.utils.test.js +692 -651
- package/dist/collection/components/nv-calendar/test/nv-calendar.utils.test.js.map +1 -1
- package/dist/collection/components/nv-calendar/test/partials/calendar-actions.logic.test.js +169 -0
- package/dist/collection/components/nv-calendar/test/partials/calendar-actions.logic.test.js.map +1 -0
- package/dist/collection/components/nv-calendar/test/partials/calendar-grid.logic.test.js +262 -0
- package/dist/collection/components/nv-calendar/test/partials/calendar-grid.logic.test.js.map +1 -0
- package/dist/collection/components/nv-calendar/test/partials/calendar-header.logic.test.js +208 -0
- package/dist/collection/components/nv-calendar/test/partials/calendar-header.logic.test.js.map +1 -0
- package/dist/collection/components/nv-calendar/test/partials/calendar-shortcuts.logic.test.js +355 -0
- package/dist/collection/components/nv-calendar/test/partials/calendar-shortcuts.logic.test.js.map +1 -0
- package/dist/collection/components/nv-calendar/test/partials/day-cell.logic.test.js +250 -0
- package/dist/collection/components/nv-calendar/test/partials/day-cell.logic.test.js.map +1 -0
- package/dist/collection/components/nv-calendar/test/partials/week-numbers.logic.test.js +217 -0
- package/dist/collection/components/nv-calendar/test/partials/week-numbers.logic.test.js.map +1 -0
- package/dist/collection/components/nv-datagrid/nv-datagrid.docs.js +88 -2
- package/dist/collection/components/nv-datagrid/nv-datagrid.docs.js.map +1 -1
- package/dist/collection/components/nv-datagrid/nv-datagrid.js +89 -10
- package/dist/collection/components/nv-datagrid/nv-datagrid.js.map +1 -1
- package/dist/collection/components/nv-fielddate/nv-fielddate.js +56 -16
- package/dist/collection/components/nv-fielddate/nv-fielddate.js.map +1 -1
- package/dist/collection/components/nv-fielddate/styles/nv-fielddate.css +44 -0
- package/dist/collection/components/nv-fielddate/test/nv-fielddate.logic.test.js +196 -0
- package/dist/collection/components/nv-fielddate/test/nv-fielddate.logic.test.js.map +1 -0
- package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.docs.js +0 -1
- package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.docs.js.map +1 -1
- package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.js +125 -42
- package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.js.map +1 -1
- package/dist/collection/components/nv-fielddaterange/styles/nv-fielddaterange.css +44 -0
- package/dist/collection/components/nv-fielddaterange/test/nv-fielddaterange.logic.test.js +137 -0
- package/dist/collection/components/nv-fielddaterange/test/nv-fielddaterange.logic.test.js.map +1 -0
- package/dist/collection/components/nv-fielddropdown/styles/nv-fielddropdown.css +46 -0
- package/dist/collection/components/nv-fieldmultiselect/styles/nv-fieldmultiselect.css +46 -0
- package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.css +44 -0
- package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.docs.js +8 -0
- package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.docs.js.map +1 -1
- package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.js +4 -3
- package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.js.map +1 -1
- package/dist/collection/components/nv-fieldpassword/nv-fieldpassword.css +44 -0
- package/dist/collection/components/nv-fieldpassword/nv-fieldpassword.js +3 -3
- package/dist/collection/components/nv-fieldradio/nv-fieldradio.js +3 -3
- package/dist/collection/components/nv-fieldselect/nv-fieldselect.css +44 -0
- package/dist/collection/components/nv-fieldselect/nv-fieldselect.js +5 -5
- package/dist/collection/components/nv-fieldslider/nv-fieldslider.docs.js +22 -22
- package/dist/collection/components/nv-fieldslider/nv-fieldslider.docs.js.map +1 -1
- package/dist/collection/components/nv-fieldslider/nv-fieldslider.js +30 -29
- package/dist/collection/components/nv-fieldslider/nv-fieldslider.js.map +1 -1
- 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 +99 -20
- package/dist/collection/components/nv-fieldtext/nv-fieldtext.css +44 -0
- package/dist/collection/components/nv-fieldtext/nv-fieldtext.js +3 -3
- package/dist/collection/components/nv-fieldtextarea/nv-fieldtextarea.css +38 -0
- package/dist/collection/components/nv-fieldtextarea/nv-fieldtextarea.js +3 -3
- package/dist/collection/components/nv-fieldtime/nv-fieldtime.js +9 -9
- package/dist/collection/components/nv-fieldtime/styles/nv-fieldtime.css +44 -0
- package/dist/collection/components/nv-icon/nv-icon.js +1 -1
- package/dist/collection/components/nv-iconbutton/nv-iconbutton.js +1 -1
- package/dist/collection/components/nv-loader/nv-loader.js +1 -1
- package/dist/collection/components/nv-menu/nv-menu.js +1 -1
- package/dist/collection/components/nv-menuitem/nv-menuitem.js +1 -1
- package/dist/collection/components/nv-popover/nv-popover.js +3 -3
- package/dist/collection/components/nv-popover/nv-popover.js.map +1 -1
- package/dist/collection/components/nv-row/nv-row.js +1 -1
- package/dist/collection/components/nv-stack/nv-stack.js +1 -1
- package/dist/collection/components/nv-table/nv-table.js +2 -2
- package/dist/collection/components/nv-toggle/nv-toggle.js +2 -2
- 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/components/index.js +1 -1
- package/dist/components/nv-alert.js +2 -2
- package/dist/components/nv-avatar.js +2 -2
- package/dist/components/nv-badge.js +1 -1
- package/dist/components/nv-breadcrumb.js +3 -3
- package/dist/components/nv-breadcrumbs.js +1 -1
- package/dist/components/nv-button.js +1 -1
- package/dist/components/nv-calendar.js +1 -1
- package/dist/components/nv-col.js +1 -1
- package/dist/components/nv-datagrid.js +54 -19
- package/dist/components/nv-datagrid.js.map +1 -1
- package/dist/components/nv-datagridcolumn.js +1 -1
- package/dist/components/nv-dialog.js +6 -6
- package/dist/components/nv-dialogfooter.js +1 -1
- package/dist/components/nv-dialogheader.js +1 -1
- package/dist/components/nv-fieldcheckbox.js +1 -1
- package/dist/components/nv-fielddate.js +53 -25
- package/dist/components/nv-fielddate.js.map +1 -1
- package/dist/components/nv-fielddaterange.js +110 -62
- package/dist/components/nv-fielddaterange.js.map +1 -1
- package/dist/components/nv-fielddropdown.js +7 -7
- 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 +9 -9
- package/dist/components/nv-fieldmultiselect.js.map +1 -1
- package/dist/components/nv-fieldnumber.js +1 -180
- package/dist/components/nv-fieldnumber.js.map +1 -1
- package/dist/components/nv-fieldpassword.js +8 -8
- package/dist/components/nv-fieldpassword.js.map +1 -1
- package/dist/components/nv-fieldradio.js +4 -4
- package/dist/components/nv-fieldselect.js +10 -10
- package/dist/components/nv-fieldselect.js.map +1 -1
- package/dist/components/nv-fieldslider.js +49 -26
- package/dist/components/nv-fieldslider.js.map +1 -1
- package/dist/components/nv-fieldtext.js +1 -1
- package/dist/components/nv-fieldtextarea.js +5 -5
- package/dist/components/nv-fieldtextarea.js.map +1 -1
- package/dist/components/nv-fieldtime.js +15 -15
- 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 +5 -5
- package/dist/components/nv-menuitem.js +1 -1
- package/dist/components/nv-popover.js +1 -1
- package/dist/components/nv-row.js +2 -2
- package/dist/components/nv-stack.js +2 -2
- package/dist/components/nv-table.js +3 -3
- package/dist/components/nv-tablecolumn.js +1 -1
- package/dist/components/nv-toggle.js +3 -3
- package/dist/components/nv-tooltip.js +1 -1
- package/dist/components/{p-0ab80d95.js → p-131e5140.js} +4 -4
- package/dist/components/{p-0ab80d95.js.map → p-131e5140.js.map} +1 -1
- package/dist/components/{p-cbdc2c8b.js → p-3f567fde.js} +5 -5
- package/dist/components/{p-cbdc2c8b.js.map → p-3f567fde.js.map} +1 -1
- package/dist/components/p-3f58525b.js +167 -0
- package/dist/components/{p-f0a5e7e4.js.map → p-3f58525b.js.map} +1 -1
- package/dist/components/{p-33e231f4.js → p-6277f746.js} +2 -2
- package/dist/components/{p-33e231f4.js.map → p-6277f746.js.map} +1 -1
- package/dist/components/{p-07a89754.js → p-953d8b4d.js} +3 -3
- package/dist/components/{p-07a89754.js.map → p-953d8b4d.js.map} +1 -1
- package/dist/components/{p-dd2273a3.js → p-9e6e26cb.js} +2 -2
- package/dist/components/{p-dd2273a3.js.map → p-9e6e26cb.js.map} +1 -1
- package/dist/components/{p-d19b41d2.js → p-9f1e8ef3.js} +2 -2
- package/dist/components/{p-d19b41d2.js.map → p-9f1e8ef3.js.map} +1 -1
- package/dist/components/{p-4656efae.js → p-a0d7e0cd.js} +396 -169
- package/dist/components/p-a0d7e0cd.js.map +1 -0
- package/dist/components/{p-f1859ddc.js → p-a1438b39.js} +4 -4
- package/dist/components/{p-f1859ddc.js.map → p-a1438b39.js.map} +1 -1
- package/dist/components/{p-04cb3a6f.js → p-a189d074.js} +5 -5
- package/dist/components/{p-04cb3a6f.js.map → p-a189d074.js.map} +1 -1
- package/dist/components/p-a29a9396.js +184 -0
- package/dist/components/p-a29a9396.js.map +1 -0
- package/dist/components/{p-679e0fa9.js → p-aff3ed68.js} +10 -175
- package/dist/components/p-aff3ed68.js.map +1 -0
- package/dist/components/{p-76a30bf1.js → p-b207be02.js} +3 -3
- package/dist/components/{p-76a30bf1.js.map → p-b207be02.js.map} +1 -1
- package/dist/components/{p-581e67cc.js → p-c07c32d2.js} +3 -3
- package/dist/components/{p-581e67cc.js.map → p-c07c32d2.js.map} +1 -1
- package/dist/components/{p-cbe9521f.js → p-dcaf9010.js} +3 -3
- package/dist/components/{p-cbe9521f.js.map → p-dcaf9010.js.map} +1 -1
- package/dist/components/{p-83c8873a.js → p-dec6fc68.js} +3 -3
- package/dist/components/{p-83c8873a.js.map → p-dec6fc68.js.map} +1 -1
- package/dist/components/{p-d63f1cbe.js → p-df465ef2.js} +3 -3
- package/dist/components/{p-d63f1cbe.js.map → p-df465ef2.js.map} +1 -1
- package/dist/components/{p-c0a91091.js → p-f7c7a406.js} +4 -4
- package/dist/components/{p-c0a91091.js.map → p-f7c7a406.js.map} +1 -1
- package/dist/esm/{constants-b97e736d.js → constants-4faa1fae.js} +2 -2
- package/dist/esm/{constants-b97e736d.js.map → constants-4faa1fae.js.map} +1 -1
- package/dist/esm/{index-8f0e5f19.js → index-a1936cd0.js} +19 -186
- package/dist/esm/index-a1936cd0.js.map +1 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/loader.js +3 -3
- package/dist/esm/native.js +3 -24
- package/dist/esm/native.js.map +1 -1
- package/dist/esm/nv-alert.entry.js +2 -2
- package/dist/esm/nv-avatar.entry.js +2 -2
- package/dist/esm/nv-badge_2.entry.js +1 -1
- package/dist/esm/nv-breadcrumb.entry.js +1 -1
- package/dist/esm/nv-breadcrumbs.entry.js +1 -1
- package/dist/esm/nv-button.entry.js +2 -2
- package/dist/esm/nv-calendar.entry.js +392 -143
- package/dist/esm/nv-calendar.entry.js.map +1 -1
- package/dist/esm/nv-col.entry.js +1 -1
- package/dist/esm/nv-datagrid.entry.js +46 -13
- package/dist/esm/nv-datagrid.entry.js.map +1 -1
- package/dist/esm/nv-datagridcolumn.entry.js +1 -1
- package/dist/esm/nv-dialog.entry.js +2 -2
- package/dist/esm/nv-dialogfooter_2.entry.js +2 -2
- package/dist/esm/nv-fieldcheckbox.entry.js +1 -1
- package/dist/esm/nv-fielddate.entry.js +45 -11
- package/dist/esm/nv-fielddate.entry.js.map +1 -1
- package/dist/esm/nv-fielddaterange.entry.js +98 -44
- package/dist/esm/nv-fielddaterange.entry.js.map +1 -1
- package/dist/esm/nv-fielddropdown.entry.js +2 -2
- package/dist/esm/nv-fielddropdown.entry.js.map +1 -1
- package/dist/esm/nv-fielddropdownitem.entry.js +1 -1
- package/dist/esm/nv-fieldmultiselect.entry.js +2 -2
- package/dist/esm/nv-fieldmultiselect.entry.js.map +1 -1
- package/dist/esm/nv-fieldnumber.entry.js +5 -5
- package/dist/esm/nv-fieldnumber.entry.js.map +1 -1
- package/dist/esm/nv-fieldpassword.entry.js +5 -5
- package/dist/esm/nv-fieldpassword.entry.js.map +1 -1
- package/dist/esm/nv-fieldradio.entry.js +4 -4
- package/dist/esm/nv-fieldselect.entry.js +7 -7
- package/dist/esm/nv-fieldselect.entry.js.map +1 -1
- package/dist/esm/nv-fieldslider.entry.js +28 -23
- package/dist/esm/nv-fieldslider.entry.js.map +1 -1
- package/dist/esm/nv-fieldtext.entry.js +5 -5
- package/dist/esm/nv-fieldtext.entry.js.map +1 -1
- package/dist/esm/nv-fieldtextarea.entry.js +5 -5
- package/dist/esm/nv-fieldtextarea.entry.js.map +1 -1
- package/dist/esm/nv-fieldtime.entry.js +12 -12
- package/dist/esm/nv-fieldtime.entry.js.map +1 -1
- package/dist/esm/nv-icon.entry.js +3 -3
- package/dist/esm/nv-iconbutton_2.entry.js +3 -3
- package/dist/esm/nv-menu.entry.js +2 -2
- package/dist/esm/nv-menuitem.entry.js +2 -2
- package/dist/esm/nv-popover.entry.js +3 -3
- package/dist/esm/nv-popover.entry.js.map +1 -1
- package/dist/esm/nv-row.entry.js +2 -2
- package/dist/esm/nv-stack.entry.js +2 -2
- package/dist/esm/nv-table.entry.js +3 -3
- package/dist/esm/nv-tablecolumn.entry.js +1 -1
- package/dist/esm/nv-toggle.entry.js +3 -3
- package/dist/esm/nv-tooltip.entry.js +2 -2
- package/dist/native/index.esm.js +1 -1
- package/dist/native/native.css +1 -1
- package/dist/native/native.esm.js +1 -1
- package/dist/native/native.esm.js.map +1 -1
- package/dist/native/p-01164e86.entry.js +2 -0
- package/dist/native/{p-5382eab2.entry.js.map → p-01164e86.entry.js.map} +1 -1
- package/dist/native/p-0410facd.entry.js +2 -0
- package/dist/native/p-0410facd.entry.js.map +1 -0
- package/dist/native/{p-519b4819.entry.js → p-08ca678c.entry.js} +2 -2
- package/dist/native/{p-cfe0a6c6.entry.js → p-0ec2d430.entry.js} +2 -2
- package/dist/native/{p-cfe0a6c6.entry.js.map → p-0ec2d430.entry.js.map} +1 -1
- package/dist/native/p-14895e84.entry.js +2 -0
- package/dist/native/p-14895e84.entry.js.map +1 -0
- package/dist/native/p-1a5d3b87.entry.js +2 -0
- package/dist/native/{p-7c676f2c.entry.js.map → p-1a5d3b87.entry.js.map} +1 -1
- package/dist/native/{p-0323daf6.entry.js → p-1c1ecd38.entry.js} +2 -2
- package/dist/native/{p-16a4cdf3.entry.js → p-1d98477d.entry.js} +2 -2
- package/dist/native/{p-19fb0fd0.entry.js → p-2006f5d4.entry.js} +2 -2
- package/dist/native/p-24659a85.entry.js +2 -0
- package/dist/native/{p-ef76178b.entry.js.map → p-24659a85.entry.js.map} +1 -1
- package/dist/native/p-2b1e7675.entry.js +2 -0
- package/dist/native/{p-b0fc08e7.entry.js.map → p-2b1e7675.entry.js.map} +1 -1
- package/dist/native/{p-9fba8663.entry.js → p-2bc7d66a.entry.js} +2 -2
- package/dist/native/p-2c3fb8cc.entry.js +2 -0
- package/dist/native/p-2c3fb8cc.entry.js.map +1 -0
- package/dist/native/p-45cbe6e4.entry.js +2 -0
- package/dist/native/p-46428304.entry.js +2 -0
- package/dist/native/p-46428304.entry.js.map +1 -0
- package/dist/native/{p-c930adb7.entry.js → p-55df8bf9.entry.js} +2 -2
- package/dist/native/p-59b07b36.entry.js +2 -0
- package/dist/native/{p-987c79d8.entry.js.map → p-59b07b36.entry.js.map} +1 -1
- package/dist/native/p-6029e51b.entry.js +2 -0
- package/dist/native/{p-fc3bea07.entry.js.map → p-6029e51b.entry.js.map} +1 -1
- package/dist/native/{p-4c0d81b0.entry.js → p-7ba03c5d.entry.js} +2 -2
- package/dist/native/p-82c4bf56.entry.js +2 -0
- package/dist/native/p-82c4bf56.entry.js.map +1 -0
- package/dist/native/{p-407fc32d.entry.js → p-86ab23ea.entry.js} +2 -2
- package/dist/native/p-87784622.entry.js +2 -0
- package/dist/native/{p-05d95d4d.entry.js → p-914da1e1.entry.js} +2 -2
- package/dist/native/p-9850c1d7.entry.js +2 -0
- package/dist/native/{p-5ba3fc3c.entry.js.map → p-9850c1d7.entry.js.map} +1 -1
- package/dist/native/{p-de2c07a6.entry.js → p-a0505695.entry.js} +3 -3
- package/dist/native/p-a0505695.entry.js.map +1 -0
- package/dist/native/p-a30206c1.entry.js +2 -0
- package/dist/native/{p-aa86af25.entry.js.map → p-a30206c1.entry.js.map} +1 -1
- package/dist/native/p-abbe5d69.entry.js +2 -0
- package/dist/native/{p-7c6edd1c.entry.js.map → p-abbe5d69.entry.js.map} +1 -1
- package/dist/native/{p-221b8f72.entry.js → p-ad128108.entry.js} +2 -2
- package/dist/native/{p-f0ddf60b.entry.js → p-b5b9190a.entry.js} +2 -2
- package/dist/native/p-c7b8b7ba.entry.js +2 -0
- package/dist/native/{p-fb897f7d.entry.js.map → p-c7b8b7ba.entry.js.map} +1 -1
- package/dist/native/p-c92d55f9.entry.js +2 -0
- package/dist/native/{p-3f2b6a22.entry.js → p-c9d3de9c.entry.js} +2 -2
- package/dist/native/p-cbca9326.entry.js +2 -0
- package/dist/native/{p-60b204ac.entry.js.map → p-cbca9326.entry.js.map} +1 -1
- package/dist/native/p-d0a33e64.js +3 -0
- package/dist/native/p-d0a33e64.js.map +1 -0
- package/dist/native/{p-ed488498.entry.js → p-d21b2da2.entry.js} +3 -3
- package/dist/native/{p-f85c08f1.js → p-e2d0a77d.js} +2 -2
- package/dist/native/{p-a2c0f1a7.entry.js → p-ec87200a.entry.js} +2 -2
- package/dist/native/{p-0ec1e2e3.entry.js → p-f377b285.entry.js} +2 -2
- package/dist/native/p-ff0f3794.entry.js +2 -0
- package/dist/native/{p-adc96c3a.entry.js.map → p-ff0f3794.entry.js.map} +1 -1
- package/dist/types/components/nv-calendar/nv-calendar.d.ts +25 -45
- package/dist/types/components/nv-calendar/partials/calendar-actions.d.ts +19 -0
- package/dist/types/components/nv-calendar/partials/calendar-grid.d.ts +46 -0
- package/dist/types/components/nv-calendar/partials/calendar-header.d.ts +38 -0
- package/dist/types/components/nv-calendar/partials/calendar-shortcuts.d.ts +35 -0
- package/dist/types/components/nv-calendar/partials/day-cell.d.ts +35 -0
- package/dist/types/components/nv-calendar/partials/index.d.ts +6 -0
- package/dist/types/components/nv-calendar/partials/week-numbers.d.ts +30 -0
- package/dist/types/components/nv-calendar/test/partials/calendar-actions.logic.test.d.ts +1 -0
- package/dist/types/components/nv-calendar/test/partials/calendar-grid.logic.test.d.ts +1 -0
- package/dist/types/components/nv-calendar/test/partials/calendar-header.logic.test.d.ts +1 -0
- package/dist/types/components/nv-calendar/test/partials/calendar-shortcuts.logic.test.d.ts +1 -0
- package/dist/types/components/nv-calendar/test/partials/day-cell.logic.test.d.ts +1 -0
- package/dist/types/components/nv-calendar/test/partials/week-numbers.logic.test.d.ts +1 -0
- package/dist/types/components/nv-datagrid/nv-datagrid.d.ts +106 -2
- package/dist/types/components/nv-fielddate/nv-fielddate.d.ts +21 -9
- package/dist/types/components/nv-fielddate/test/nv-fielddate.logic.test.d.ts +1 -0
- package/dist/types/components/nv-fielddaterange/nv-fielddaterange.d.ts +19 -6
- package/dist/types/components/nv-fielddaterange/test/nv-fielddaterange.logic.test.d.ts +1 -0
- package/dist/types/components/nv-fieldnumber/nv-fieldnumber.d.ts +1 -0
- package/dist/types/components/nv-fieldslider/nv-fieldslider.d.ts +5 -6
- package/dist/types/components.d.ts +175 -38
- package/dist/vscode-data.json +4 -4
- package/hydrate/index.js +666 -291
- package/hydrate/index.mjs +666 -291
- package/package.json +10 -2
- package/dist/cjs/index-108ddff0.js.map +0 -1
- package/dist/components/p-4656efae.js.map +0 -1
- package/dist/components/p-679e0fa9.js.map +0 -1
- package/dist/components/p-f0a5e7e4.js +0 -167
- package/dist/esm/index-8f0e5f19.js.map +0 -1
- package/dist/native/p-1e3d3374.entry.js +0 -2
- package/dist/native/p-21e7132f.entry.js +0 -2
- package/dist/native/p-21e7132f.entry.js.map +0 -1
- package/dist/native/p-2805f9f2.entry.js +0 -2
- package/dist/native/p-2805f9f2.entry.js.map +0 -1
- package/dist/native/p-5382eab2.entry.js +0 -2
- package/dist/native/p-5ba3fc3c.entry.js +0 -2
- package/dist/native/p-60b204ac.entry.js +0 -2
- package/dist/native/p-7092a675.entry.js +0 -2
- package/dist/native/p-711a7778.js +0 -3
- package/dist/native/p-711a7778.js.map +0 -1
- package/dist/native/p-759c9ce4.entry.js +0 -2
- package/dist/native/p-759c9ce4.entry.js.map +0 -1
- package/dist/native/p-7c676f2c.entry.js +0 -2
- package/dist/native/p-7c6edd1c.entry.js +0 -2
- package/dist/native/p-987c79d8.entry.js +0 -2
- package/dist/native/p-aa86af25.entry.js +0 -2
- package/dist/native/p-adc96c3a.entry.js +0 -2
- package/dist/native/p-b0fc08e7.entry.js +0 -2
- package/dist/native/p-d07ab618.entry.js +0 -2
- package/dist/native/p-dac0089b.entry.js +0 -2
- package/dist/native/p-dac0089b.entry.js.map +0 -1
- package/dist/native/p-de2c07a6.entry.js.map +0 -1
- package/dist/native/p-ef76178b.entry.js +0 -2
- package/dist/native/p-f39803d9.entry.js +0 -2
- package/dist/native/p-f39803d9.entry.js.map +0 -1
- package/dist/native/p-fb897f7d.entry.js +0 -2
- package/dist/native/p-fc3bea07.entry.js +0 -2
- /package/dist/native/{p-519b4819.entry.js.map → p-08ca678c.entry.js.map} +0 -0
- /package/dist/native/{p-0323daf6.entry.js.map → p-1c1ecd38.entry.js.map} +0 -0
- /package/dist/native/{p-16a4cdf3.entry.js.map → p-1d98477d.entry.js.map} +0 -0
- /package/dist/native/{p-19fb0fd0.entry.js.map → p-2006f5d4.entry.js.map} +0 -0
- /package/dist/native/{p-9fba8663.entry.js.map → p-2bc7d66a.entry.js.map} +0 -0
- /package/dist/native/{p-1e3d3374.entry.js.map → p-45cbe6e4.entry.js.map} +0 -0
- /package/dist/native/{p-c930adb7.entry.js.map → p-55df8bf9.entry.js.map} +0 -0
- /package/dist/native/{p-4c0d81b0.entry.js.map → p-7ba03c5d.entry.js.map} +0 -0
- /package/dist/native/{p-407fc32d.entry.js.map → p-86ab23ea.entry.js.map} +0 -0
- /package/dist/native/{p-d07ab618.entry.js.map → p-87784622.entry.js.map} +0 -0
- /package/dist/native/{p-05d95d4d.entry.js.map → p-914da1e1.entry.js.map} +0 -0
- /package/dist/native/{p-221b8f72.entry.js.map → p-ad128108.entry.js.map} +0 -0
- /package/dist/native/{p-f0ddf60b.entry.js.map → p-b5b9190a.entry.js.map} +0 -0
- /package/dist/native/{p-7092a675.entry.js.map → p-c92d55f9.entry.js.map} +0 -0
- /package/dist/native/{p-3f2b6a22.entry.js.map → p-c9d3de9c.entry.js.map} +0 -0
- /package/dist/native/{p-ed488498.entry.js.map → p-d21b2da2.entry.js.map} +0 -0
- /package/dist/native/{p-f85c08f1.js.map → p-e2d0a77d.js.map} +0 -0
- /package/dist/native/{p-a2c0f1a7.entry.js.map → p-ec87200a.entry.js.map} +0 -0
- /package/dist/native/{p-0ec1e2e3.entry.js.map → p-f377b285.entry.js.map} +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
const index = require('./index-
|
|
5
|
+
const index = require('./index-c56424e5.js');
|
|
6
6
|
const constants = require('./constants-8fb8ccc0.js');
|
|
7
7
|
const _commonjsHelpers = require('./_commonjsHelpers-b3309d7b.js');
|
|
8
8
|
|
|
@@ -160,9 +160,18 @@ function isSameOrAfter(date, compareDate, options) {
|
|
|
160
160
|
* @returns {number} Week number
|
|
161
161
|
*/
|
|
162
162
|
function getWeekNumber(date) {
|
|
163
|
-
|
|
164
|
-
const
|
|
165
|
-
|
|
163
|
+
// Create a copy of the date to avoid modifying the original
|
|
164
|
+
const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
|
|
165
|
+
// Adjust to the same week Thursday (ISO 8601)
|
|
166
|
+
d.setUTCDate(d.getUTCDate() + 3 - ((d.getUTCDay() + 6) % 7));
|
|
167
|
+
// Calculate the first Thursday of the year
|
|
168
|
+
const week1 = new Date(Date.UTC(d.getUTCFullYear(), 0, 4));
|
|
169
|
+
// Calculate the week number
|
|
170
|
+
return (1 +
|
|
171
|
+
Math.round(((d.getTime() - week1.getTime()) / 86400000 -
|
|
172
|
+
3 +
|
|
173
|
+
((week1.getUTCDay() + 6) % 7)) /
|
|
174
|
+
7));
|
|
166
175
|
}
|
|
167
176
|
/**
|
|
168
177
|
* Convert a date string/Date to a Date without timezone offset
|
|
@@ -227,15 +236,200 @@ function parseDate(dateInput, dateFormat) {
|
|
|
227
236
|
parsed = dayjs(dateInput, dateFormat, true);
|
|
228
237
|
}
|
|
229
238
|
if (!parsed.isValid()) {
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
239
|
+
// Check if the date input contains placeholder characters (incomplete input from Inputmask)
|
|
240
|
+
// This specifically targets partial dates being typed with placeholder characters
|
|
241
|
+
const hasPlaceholderChars = typeof dateInput === 'string' &&
|
|
242
|
+
(dateInput.includes('_') ||
|
|
243
|
+
dateInput.includes('-_') ||
|
|
244
|
+
dateInput.includes('/_') ||
|
|
245
|
+
dateInput.includes('._'));
|
|
246
|
+
// Check if it looks like a partial date being typed (starts with valid pattern)
|
|
247
|
+
const looksLikePartialDate = typeof dateInput === 'string' &&
|
|
248
|
+
dateInput.length < dateFormat.length &&
|
|
249
|
+
/^[\d\-/.]*$/.test(dateInput) && // Only contains digits and date separators
|
|
250
|
+
dateInput.length > 0;
|
|
251
|
+
const isIncompleteInput = hasPlaceholderChars || looksLikePartialDate;
|
|
252
|
+
// Only log error if it's not an incomplete input (to avoid spam during typing)
|
|
253
|
+
if (!isIncompleteInput) {
|
|
254
|
+
console.error(`Parsing error:`, {
|
|
255
|
+
dateInput,
|
|
256
|
+
dateFormat: dateFormat,
|
|
257
|
+
});
|
|
258
|
+
}
|
|
234
259
|
return null;
|
|
235
260
|
}
|
|
236
261
|
return parsed.toDate();
|
|
237
262
|
}
|
|
238
263
|
|
|
264
|
+
/**
|
|
265
|
+
* Renders a single day cell in the calendar grid
|
|
266
|
+
* @param {DayCellProps} props - Component properties
|
|
267
|
+
* @returns {JSX.Element} JSX element representing a day cell
|
|
268
|
+
*/
|
|
269
|
+
const DayCell = props => {
|
|
270
|
+
const { date, dayOfMonth, isCurrentMonth, isSelected, isInRange, isStart, isEnd, isToday, isDisabled, onClick, } = props;
|
|
271
|
+
// Build CSS classes for the day cell
|
|
272
|
+
const dayClasses = [
|
|
273
|
+
'day',
|
|
274
|
+
isSelected ? 'selected' : '',
|
|
275
|
+
isStart ? 'range-start' : '',
|
|
276
|
+
isEnd ? 'range-end' : '',
|
|
277
|
+
isInRange ? 'in-range' : '',
|
|
278
|
+
isDisabled ? 'disabled' : '',
|
|
279
|
+
!isCurrentMonth ? 'outside-month' : '',
|
|
280
|
+
isToday ? 'is-today' : '',
|
|
281
|
+
]
|
|
282
|
+
.filter(Boolean)
|
|
283
|
+
.join(' ');
|
|
284
|
+
const handleClick = () => {
|
|
285
|
+
if (!isDisabled && onClick) {
|
|
286
|
+
onClick(date);
|
|
287
|
+
}
|
|
288
|
+
};
|
|
289
|
+
return (
|
|
290
|
+
// eslint-disable-next-line react/jsx-no-bind
|
|
291
|
+
index.h("div", { class: dayClasses, onClick: handleClick, "aria-disabled": isDisabled }, dayOfMonth));
|
|
292
|
+
};
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* Renders the action buttons for the calendar (Cancel/OK)
|
|
296
|
+
* @param {CalendarActionsProps} props - Component properties
|
|
297
|
+
* @returns {JSX.Element} JSX element representing the action buttons
|
|
298
|
+
*/
|
|
299
|
+
const CalendarActions = props => {
|
|
300
|
+
const { onReset, onConfirm, useSlot = false } = props;
|
|
301
|
+
return (index.h("div", { class: "datepicker-actions" }, useSlot ? (index.h("slot", { name: "actions" },
|
|
302
|
+
index.h("nv-button", { emphasis: "low", size: "xs", onClick: onReset }, "Cancel"),
|
|
303
|
+
index.h("nv-button", { size: "xs", onClick: onConfirm }, "OK"))) : (index.h("div", null,
|
|
304
|
+
index.h("nv-button", { emphasis: "low", size: "xs", onClick: onReset }, "Cancel"),
|
|
305
|
+
index.h("nv-button", { size: "xs", onClick: onConfirm }, "OK")))));
|
|
306
|
+
};
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* Renders the week numbers column for the calendar
|
|
310
|
+
* @param {WeekNumbersProps} props - Component properties
|
|
311
|
+
* @returns {JSX.Element} JSX element representing the week numbers
|
|
312
|
+
*/
|
|
313
|
+
const WeekNumbers = props => {
|
|
314
|
+
const { weeks, localizedWeekText, selectionType, onWeekSelect, calendarIndex, } = props;
|
|
315
|
+
/**
|
|
316
|
+
* Handles click on a week number for range selection
|
|
317
|
+
* @param {Array<WeekData>} week - Week data
|
|
318
|
+
*/
|
|
319
|
+
const handleWeekClick = (week) => {
|
|
320
|
+
if (selectionType === 'range') {
|
|
321
|
+
const dates = week.map(d => d.date);
|
|
322
|
+
onWeekSelect(dates, calendarIndex);
|
|
323
|
+
}
|
|
324
|
+
};
|
|
325
|
+
/**
|
|
326
|
+
* Creates a click handler for a specific week
|
|
327
|
+
* @param {Array<WeekData>} week - Week data
|
|
328
|
+
* @returns {() => void} Click handler function
|
|
329
|
+
*/
|
|
330
|
+
const createWeekHandler = (week) => {
|
|
331
|
+
return () => handleWeekClick(week);
|
|
332
|
+
};
|
|
333
|
+
return (index.h("div", { class: "week-numbers" },
|
|
334
|
+
index.h("div", { class: "week-header" }, localizedWeekText),
|
|
335
|
+
weeks.map((week, weekIndex) => {
|
|
336
|
+
var _a;
|
|
337
|
+
const firstDayWithDate = ((_a = week.find(d => d.date)) === null || _a === void 0 ? void 0 : _a.date) || new Date();
|
|
338
|
+
const weekNumber = getWeekNumber(firstDayWithDate);
|
|
339
|
+
const isClickable = selectionType === 'range';
|
|
340
|
+
return (index.h("div", { class: `week-number ${isClickable ? 'clickable' : ''}`, onClick: createWeekHandler(week), key: `week-${weekIndex}`, role: isClickable ? 'button' : undefined, tabindex: isClickable ? 0 : undefined }, weekNumber));
|
|
341
|
+
})));
|
|
342
|
+
};
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* Renders the shortcuts for quick date selection
|
|
346
|
+
* @param {CalendarShortcutsProps} props - Component properties
|
|
347
|
+
* @returns {JSX.Element | null} JSX element representing the shortcuts or null if no shortcuts
|
|
348
|
+
*/
|
|
349
|
+
const CalendarShortcuts = props => {
|
|
350
|
+
const { shortcuts, placement, onShortcutClick } = props;
|
|
351
|
+
if (!shortcuts || shortcuts.length === 0) {
|
|
352
|
+
return null;
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Creates a click handler for a specific shortcut
|
|
356
|
+
* @param {ShortcutData} shortcut - The shortcut data
|
|
357
|
+
* @returns {() => void} Click handler function
|
|
358
|
+
*/
|
|
359
|
+
const createShortcutHandler = (shortcut) => {
|
|
360
|
+
return () => onShortcutClick(shortcut);
|
|
361
|
+
};
|
|
362
|
+
return (index.h("div", { class: `shortcuts-container shortcuts-placement-${placement}` }, shortcuts.map((shortcut, index$1) => (index.h("nv-button", { key: `shortcut-${index$1}`, emphasis: "lower", size: "xs", "aria-label": shortcut.label, onClick: createShortcutHandler(shortcut) }, shortcut.label)))));
|
|
363
|
+
};
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* Renders the calendar header with navigation and date controls
|
|
367
|
+
* @param {CalendarHeaderProps} props - Component properties
|
|
368
|
+
* @returns {JSX.Element} JSX element representing the calendar header
|
|
369
|
+
*/
|
|
370
|
+
const CalendarHeader = props => {
|
|
371
|
+
const { currentDate, months, numberOfCalendars, calendarIndex, monthOffset, onMonthChange, onMonthSelect, onYearChange, } = props;
|
|
372
|
+
/**
|
|
373
|
+
* Creates navigation handler for month change
|
|
374
|
+
* @param {number} direction - Direction of navigation (-1 or 1)
|
|
375
|
+
* @returns {() => void} Navigation handler function
|
|
376
|
+
*/
|
|
377
|
+
const createNavigationHandler = (direction) => {
|
|
378
|
+
return () => onMonthChange(direction);
|
|
379
|
+
};
|
|
380
|
+
/**
|
|
381
|
+
* Creates month selection handler
|
|
382
|
+
* @param {number} offset - Month offset
|
|
383
|
+
* @returns {(event: Event) => void} Month selection handler function
|
|
384
|
+
*/
|
|
385
|
+
const createMonthSelectHandler = (offset) => {
|
|
386
|
+
return (event) => onMonthSelect(event, offset);
|
|
387
|
+
};
|
|
388
|
+
/**
|
|
389
|
+
* Creates year change handler
|
|
390
|
+
* @param {number} offset - Month offset
|
|
391
|
+
* @returns {(event: Event) => void} Year change handler function
|
|
392
|
+
*/
|
|
393
|
+
const createYearChangeHandler = (offset) => {
|
|
394
|
+
return (event) => onYearChange(event, offset);
|
|
395
|
+
};
|
|
396
|
+
const currentMonth = (currentDate.getUTCMonth() + monthOffset) % 12;
|
|
397
|
+
const currentYear = currentDate.getUTCFullYear() +
|
|
398
|
+
Math.floor((currentDate.getUTCMonth() + monthOffset) / 12);
|
|
399
|
+
return (index.h("div", { class: "header" },
|
|
400
|
+
numberOfCalendars > 1 && calendarIndex === 0 && (index.h("nv-iconbutton", { class: "nav-left", emphasis: "lower", name: "chevron-left", onClick: createNavigationHandler(-1) })),
|
|
401
|
+
index.h("div", { class: "date-controls" },
|
|
402
|
+
index.h("select", { class: "month-select mr-4", onChange: createMonthSelectHandler(monthOffset) }, months.map(month => (index.h("option", { key: month.value, value: month.value, selected: month.value === currentMonth }, month.label)))),
|
|
403
|
+
index.h("input", { type: "number", class: "year-input", min: "1950", max: "2100", value: currentYear, onChange: createYearChangeHandler(monthOffset) })),
|
|
404
|
+
numberOfCalendars === 1 && (index.h("div", { class: "nav-buttons" },
|
|
405
|
+
index.h("nv-iconbutton", { emphasis: "lower", name: "chevron-left", onClick: createNavigationHandler(-1) }),
|
|
406
|
+
index.h("nv-iconbutton", { emphasis: "lower", name: "chevron-right", onClick: createNavigationHandler(1) }))),
|
|
407
|
+
numberOfCalendars > 1 && calendarIndex === numberOfCalendars - 1 && (index.h("nv-iconbutton", { emphasis: "lower", name: "chevron-right", onClick: createNavigationHandler(1), class: "nav-right" }))));
|
|
408
|
+
};
|
|
409
|
+
|
|
410
|
+
/**
|
|
411
|
+
* Renders the calendar grid with day headers and day cells
|
|
412
|
+
* @param {CalendarGridProps} props - Component properties
|
|
413
|
+
* @returns {JSX.Element} JSX element representing the calendar grid
|
|
414
|
+
*/
|
|
415
|
+
const CalendarGrid = props => {
|
|
416
|
+
const { days, dayNames, selectionType, selectedDate, startDate, endDate, isUTCMode, onDayClick, isDateInRange, isToday, } = props;
|
|
417
|
+
return (index.h("div", { class: "days-container" },
|
|
418
|
+
index.h("div", { class: "days-header" }, dayNames.map((day, index$1) => (index.h("div", { class: "day-header", key: `day-header-${index$1}` }, day)))),
|
|
419
|
+
index.h("div", { class: "days-grid" }, days.map(day => {
|
|
420
|
+
const date = day.date;
|
|
421
|
+
if (!date)
|
|
422
|
+
return null;
|
|
423
|
+
const isSelected = selectionType === 'single' &&
|
|
424
|
+
isSameDate(date, selectedDate, { isUTCMode });
|
|
425
|
+
const isInRange = isDateInRange(date);
|
|
426
|
+
const isStart = isSameDate(date, startDate, { isUTCMode });
|
|
427
|
+
const isEnd = isSameDate(date, endDate, { isUTCMode });
|
|
428
|
+
const isTodayDate = isToday(date);
|
|
429
|
+
return (index.h(DayCell, { date: date, dayOfMonth: day.dayOfMonth, isCurrentMonth: day.isCurrentMonth, isSelected: isSelected, isInRange: isInRange, isStart: isStart, isEnd: isEnd, isToday: isTodayDate, isDisabled: day.isDisabled, selectionType: selectionType, onClick: onDayClick }));
|
|
430
|
+
}))));
|
|
431
|
+
};
|
|
432
|
+
|
|
239
433
|
const nvCalendarCss = "nv-calendar{display:block}.datepicker-root{display:flex;justify-content:center;align-items:flex-start;width:auto}.datepicker-container{font-family:system-ui, sans-serif;display:flex;flex-direction:column;align-items:stretch;background:var(--components-calendar-background);border-radius:var(--calendar-radius);padding:var(--calendar-padding);box-shadow:0px var(--shadow-y-axis-md-1) var(--shadow-blur-md-1) var(--shadow-spread-md, 0) var(--shadow-color-opacity-0), 0px var(--shadow-y-axis-md-2) var(--shadow-blur-md-2) var(--shadow-spread-md, 0) var(--shadow-color-opacity-2);border:1px solid var(--components-calendar-border);width:auto;max-width:100%}.datepicker-container-single{max-width:300px}.datepicker-container-single .datepicker-wrapper:has(.shortcuts-placement-left),.datepicker-container-single .datepicker-wrapper:has(.shortcuts-placement-right){max-width:410px !important}.datepicker-container-single:has(.shortcuts-placement-left),.datepicker-container-single:has(.shortcuts-placement-right){max-width:410px !important}.datepicker-wrapper{display:flex;justify-content:center;align-items:flex-start;gap:var(--calendar-gap-x);width:auto;overflow-x:hidden}.datepicker-wrapper::-webkit-scrollbar{width:6px;height:6px}.datepicker-wrapper::-webkit-scrollbar-track{background-color:var(--color-level-10-background);border-radius:9999px}.datepicker-wrapper::-webkit-scrollbar-thumb{background-color:var(--color-gray-200);border-radius:9999px}.datepicker-wrapper.single{justify-content:center}.calendar-container{display:flex;flex-direction:column;align-items:center;padding:var(--calendar-padding);width:auto;position:relative}.calendar-separator{width:1px;background:var(--components-calendar-border);height:auto;min-height:100%;margin:0 10px}.header{display:flex;justify-content:start;align-items:center;margin-bottom:var(--calendar-header-margin-bottom);width:100%}.header nv-iconbutton{width:var(--calendar-header-button-size);height:var(--calendar-header-button-size)}.nav-buttons{display:flex;gap:var(--spacing-0);margin-left:auto}.nav-left{order:-1}.date-controls{display:flex;gap:var(--spacing-1);align-items:center;min-height:34px;justify-content:center}.datepicker-container-single .date-controls{justify-content:flex-start}.datepicker-container:not(.datepicker-container-single) .date-controls{justify-content:start;flex-grow:1}.date-controls .month-select,.date-controls .year-input{background:transparent !important}.calendar-wrapper:nth-child(n+2) .datepicker-container{margin-left:42px}.calendar-grid{display:grid;grid-template-columns:auto 1fr;column-gap:var(--calendar-weeks-calendar-gap-x);position:relative}.calendar-grid.slide-left{animation:slideLeft 0.3s ease-out}.calendar-grid.slide-right{animation:slideRight 0.3s ease-out}.week-numbers{display:grid;grid-template-rows:var(--calendar-cell-size) repeat(6, var(--calendar-cell-size));background:var(--components-calendar-weeks-background);color:var(--components-calendar-weeks-text);border-radius:var(--calendar-weeks-radius);width:var(--calendar-weeks-size);row-gap:var(--calendar-grid-gap-y)}.week-numbers .clickable{cursor:pointer}.week-numbers .clickable:hover{background-color:var(--components-calendar-weeks-background-hover);color:var(--components-calendar-weeks-text-hover);border-radius:var(--calendar-radius)}.week-header,.week-number{display:grid;place-items:center;font-size:var(--calendar-cell-font-size)}.week-header{font-weight:700;color:var(--components-calendar-weeks-text)}.week-number{color:var(--components-calendar-cell-text)}.days-container{display:grid;grid-template-rows:auto 1fr;row-gap:var(--calendar-grid-gap-y)}.days-header{display:grid;grid-template-columns:repeat(7, var(--calendar-cell-size));height:var(--calendar-cell-size)}.day-header{display:grid;place-items:center;font-size:var(--calendar-cell-font-size);color:var(--components-calendar-cell-text)}.days-grid{display:grid;grid-template-columns:repeat(7, var(--calendar-cell-size));grid-template-rows:repeat(6, var(--calendar-cell-size));animation:fadeIn 0.2s ease-in;row-gap:var(--calendar-grid-gap-y);z-index:0}.day{display:grid;place-items:center;width:var(--calendar-cell-size);height:var(--calendar-cell-size);font-size:var(--calendar-cell-font-size);border-radius:var(--calendar-cell-radius);cursor:pointer;border:none;background:transparent;transition:all 0.2s ease;text-align:center;animation:scaleIn 0.2s ease-out}.day:hover:not(.disabled,.empty,.selected){background:var(--components-calendar-cell-background-hover);color:var(--components-calendar-cell-text-hover)}.day.selected,.day.selected:hover .day.is-today.selected,.day.is-today.selected:hover{background:var(--components-calendar-cell-background-selected);color:var(--components-calendar-cell-text-selected) !important}.day.disabled{opacity:var(--opacity-disabled);cursor:not-allowed}.day.outside-month{color:var(--components-calendar-cell-text);opacity:var(--opacity-disabled)}.day.outside-month.selected{opacity:1 !important;color:var(--components-calendar-cell-text-selected)}.day.outside-month.in-range{opacity:0.5 !important;background-color:var(--components-calendar-cell-background-in-range);color:var(--components-calendar-cell-text-in-range)}.day.outside-month.in-range:hover{opacity:0.7 !important;background-color:var(--components-calendar-cell-background-in-range)}.day.in-range{background:var(--components-calendar-cell-background-in-range);color:var(--components-calendar-cell-text-in-range);border-radius:0;position:relative}.day.range-start,.day.range-start:focus,.day.range-start:hover,.day.range-end,.day.range-end:focus,.day.range-end:hover{background-color:var(--components-calendar-cell-background-selected) !important;color:var(--components-calendar-cell-text-selected) !important}.day.range-start,.day.range-end,.day.range-start.is-today,.day.range-end.is-today{background:var(--components-calendar-cell-background-selected);color:var(--components-calendar-cell-text-selected);position:relative;border-radius:var(--radius-rounded-full)}.day.range-start:hover,.day.range-end:hover,.day.range-start.is-today:hover,.day.range-end.is-today:hover{color:var(--components-calendar-cell-text-today)}.day.range-start:before,.day.range-end:before,.day.range-start.is-today:before,.day.range-end.is-today:before{content:\"\";position:absolute;bottom:0;left:0;right:0;top:0;z-index:-1;background-color:var(--components-calendar-cell-background-in-range);border-radius:var(--radius-rounded-full);width:auto;height:auto}.day.range-start:has(~.range-end):before,.day.range-start:has(+.in-range):before{border-top-right-radius:0;border-bottom-right-radius:0}.day.range-end:before{border-top-left-radius:0 !important;border-bottom-left-radius:0 !important}.day.outside-month.range-start,.day.outside-month.range-end{opacity:1 !important;background:var(--components-calendar-cell-background-selected) !important;color:var(--components-calendar-cell-text-selected)}.day.is-today{font-weight:700;position:relative;color:var(--components-calendar-cell-text-today)}.day.is-today.range-start,.day.is-today.range-end{color:var(--components-calendar-cell-text-selected)}.day.is-today.range-start:hover,.day.is-today.range-end:hover{color:var(--components-calendar-cell-text-today)}.day.is-today::after{content:\"\";position:absolute;bottom:var(--spacing-1);left:50%;transform:translateX(-50%);width:var(--calendar-cell-dot-size);height:var(--calendar-cell-dot-size);background-color:currentColor;border-radius:50%}.day.is-today.selected::after{color:var(--components-calendar-cell-text-selected)}.day.is-today.selected::after::after{background-color:var(--components-calendar-cell-dot-selected)}.calendar-footer{display:flex;gap:var(--spacing-1);justify-content:flex-start;width:100%;flex-wrap:wrap}.footer-placement-left{justify-content:flex-start}.footer-placement-right{justify-content:flex-end}.footer-placement-center{justify-content:center}.datepicker-controls{display:flex;flex-direction:column;border-top:1px solid var(--components-calendar-border);padding:var(--calendar-controls-padding-top) var(--calendar-padding) var(--calendar-padding);gap:var(--calendar-grid-gap-y);margin-top:var(--calendar-controls-margin-top)}.datepicker-actions{display:flex;justify-content:flex-end;gap:var(--spacing-1);width:100%}.datepicker-actions slot-fb{display:contents !important}.calendar-footer+.datepicker-actions{margin-top:0}.shortcuts-placement-left,.shortcuts-placement-right{display:flex;flex-direction:column;gap:var(--spacing-1);margin-top:var(--spacing-4)}.shortcuts-placement-left{align-items:flex-end}.shortcuts-placement-right{align-items:flex-start}@keyframes slideLeft{from{opacity:0;transform:translateX(20px)}to{opacity:1;transform:translateX(0)}}@keyframes slideRight{from{opacity:0;transform:translateX(-20px)}to{opacity:1;transform:translateX(0)}}@keyframes fadeIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes scaleIn{from{opacity:0;transform:scale(0.9)}to{opacity:1;transform:scale(1)}}";
|
|
240
434
|
const NvCalendarStyle0 = nvCalendarCss;
|
|
241
435
|
|
|
@@ -244,18 +438,28 @@ const NvCalendar = class {
|
|
|
244
438
|
index.registerInstance(this, hostRef);
|
|
245
439
|
this.singleDateChange = index.createEvent(this, "singleDateChange", 7);
|
|
246
440
|
this.rangeDateChange = index.createEvent(this, "rangeDateChange", 7);
|
|
441
|
+
this.valueChanged = index.createEvent(this, "valueChanged", 7);
|
|
247
442
|
/****************************************************************************/
|
|
248
443
|
//#region PROPERTIES
|
|
249
444
|
/**
|
|
250
445
|
* First day of the week (0 = Sunday, 1 = Monday, etc.)
|
|
251
|
-
* @default
|
|
446
|
+
* @default 1
|
|
252
447
|
*/
|
|
253
|
-
this.firstDayOfWeek =
|
|
448
|
+
this.firstDayOfWeek = 1;
|
|
254
449
|
/**
|
|
255
450
|
* Number of calendars to display
|
|
256
451
|
* @default 1
|
|
257
452
|
*/
|
|
258
453
|
this.numberOfCalendars = 1;
|
|
454
|
+
/**
|
|
455
|
+
* Selected date value. For single mode: ISO date string. For range mode: comma-separated ISO date strings.
|
|
456
|
+
* Examples:
|
|
457
|
+
* - Single: "2025-03-15"
|
|
458
|
+
* - Range: "2025-03-15,2025-03-20"
|
|
459
|
+
* @default ""
|
|
460
|
+
*/
|
|
461
|
+
// eslint-disable-next-line @stencil-community/strict-mutable
|
|
462
|
+
this.value = '';
|
|
259
463
|
/**
|
|
260
464
|
* Locale for date formatting
|
|
261
465
|
* @default 'en-BE'
|
|
@@ -293,6 +497,75 @@ const NvCalendar = class {
|
|
|
293
497
|
this.endDate = null;
|
|
294
498
|
/** List of formatted months for the selector */
|
|
295
499
|
this.months = [];
|
|
500
|
+
/**
|
|
501
|
+
* Parses the unified value prop and synchronizes with internal state
|
|
502
|
+
* @param {string} value - Value to parse
|
|
503
|
+
*/
|
|
504
|
+
this.parseUnifiedValue = (value) => {
|
|
505
|
+
if (!value) {
|
|
506
|
+
// Reset all selections
|
|
507
|
+
this.selectedDate = null;
|
|
508
|
+
this.startDate = null;
|
|
509
|
+
this.endDate = null;
|
|
510
|
+
return;
|
|
511
|
+
}
|
|
512
|
+
const values = value
|
|
513
|
+
.split(',')
|
|
514
|
+
.map(v => v.trim())
|
|
515
|
+
.filter(Boolean);
|
|
516
|
+
if (this.selectionType === 'single' && values.length >= 1) {
|
|
517
|
+
const parsedDate = parseDate(values[0], this.dateFormat);
|
|
518
|
+
if (parsedDate) {
|
|
519
|
+
this.selectedDate = parsedDate;
|
|
520
|
+
// Only sync with legacy prop if not using actions (immediate mode)
|
|
521
|
+
if (!this.showActions) {
|
|
522
|
+
this.singleValue = values[0];
|
|
523
|
+
}
|
|
524
|
+
// Navigate to the date if not prevented
|
|
525
|
+
const preventNavigation = this.el.getAttribute('data-prevent-navigation') === 'true';
|
|
526
|
+
if (!preventNavigation) {
|
|
527
|
+
this.currentDate = parsedDate;
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
else {
|
|
531
|
+
// Handle malformed date gracefully - reset state
|
|
532
|
+
console.warn(`Invalid date format: ${values[0]}`);
|
|
533
|
+
this.selectedDate = null;
|
|
534
|
+
if (!this.showActions) {
|
|
535
|
+
this.singleValue = '';
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
else if (this.selectionType === 'range' && values.length >= 2) {
|
|
540
|
+
const startDate = parseDate(values[0], this.dateFormat);
|
|
541
|
+
const endDate = parseDate(values[1], this.dateFormat);
|
|
542
|
+
if (startDate && endDate) {
|
|
543
|
+
this.startDate = startDate;
|
|
544
|
+
this.endDate = endDate;
|
|
545
|
+
// Only sync with legacy prop if not using actions (immediate mode)
|
|
546
|
+
if (!this.showActions) {
|
|
547
|
+
this.rangeValue = {
|
|
548
|
+
start: values[0],
|
|
549
|
+
end: values[1],
|
|
550
|
+
};
|
|
551
|
+
}
|
|
552
|
+
// Navigate to start date if not prevented
|
|
553
|
+
const preventNavigation = this.el.getAttribute('data-prevent-navigation') === 'true';
|
|
554
|
+
if (!preventNavigation) {
|
|
555
|
+
this.currentDate = startDate;
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
else {
|
|
559
|
+
// Handle malformed dates gracefully - reset state
|
|
560
|
+
console.warn(`Invalid date range format: ${values[0]}, ${values[1]}`);
|
|
561
|
+
this.startDate = null;
|
|
562
|
+
this.endDate = null;
|
|
563
|
+
if (!this.showActions) {
|
|
564
|
+
this.rangeValue = { start: '', end: '' };
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
};
|
|
296
569
|
/**
|
|
297
570
|
* Change the displayed month
|
|
298
571
|
* @param {number} offset - Month offset (-1 for previous, 1 for next)
|
|
@@ -340,7 +613,14 @@ const NvCalendar = class {
|
|
|
340
613
|
return;
|
|
341
614
|
const formattedDate = formatDate(date, { dateFormat: this.dateFormat });
|
|
342
615
|
this.selectedDate = date;
|
|
343
|
-
|
|
616
|
+
// Update the unified value prop (like nv-fieldslider)
|
|
617
|
+
this.value = formattedDate;
|
|
618
|
+
this.valueChanged.emit(formattedDate);
|
|
619
|
+
// Legacy support (deprecated) - only sync props if not using actions
|
|
620
|
+
if (!this.showActions) {
|
|
621
|
+
this.singleValue = formattedDate;
|
|
622
|
+
this.singleDateChange.emit(formattedDate);
|
|
623
|
+
}
|
|
344
624
|
};
|
|
345
625
|
/**
|
|
346
626
|
* Handles range date selection
|
|
@@ -348,18 +628,32 @@ const NvCalendar = class {
|
|
|
348
628
|
*/
|
|
349
629
|
this.handleRangeSelection = (date) => {
|
|
350
630
|
if (!this.startDate || (this.startDate && this.endDate)) {
|
|
631
|
+
// Start new range selection
|
|
351
632
|
this.startDate = date;
|
|
352
633
|
this.endDate = null;
|
|
353
634
|
}
|
|
354
635
|
else {
|
|
636
|
+
// Complete range selection
|
|
355
637
|
this.endDate = date;
|
|
638
|
+
// Ensure correct order
|
|
356
639
|
if (this.startDate > this.endDate) {
|
|
357
640
|
[this.startDate, this.endDate] = [this.endDate, this.startDate];
|
|
358
641
|
}
|
|
359
|
-
this.
|
|
360
|
-
|
|
361
|
-
|
|
642
|
+
const startFormatted = formatDate(this.startDate, {
|
|
643
|
+
dateFormat: this.dateFormat,
|
|
644
|
+
});
|
|
645
|
+
const endFormatted = formatDate(this.endDate, {
|
|
646
|
+
dateFormat: this.dateFormat,
|
|
362
647
|
});
|
|
648
|
+
// Update the unified value prop (like nv-fieldslider)
|
|
649
|
+
this.value = `${startFormatted},${endFormatted}`;
|
|
650
|
+
this.valueChanged.emit(this.value);
|
|
651
|
+
// Legacy support (deprecated) - only sync props if not using actions
|
|
652
|
+
if (!this.showActions) {
|
|
653
|
+
const legacyRange = { start: startFormatted, end: endFormatted };
|
|
654
|
+
this.rangeDateChange.emit(legacyRange);
|
|
655
|
+
this.rangeValue = legacyRange;
|
|
656
|
+
}
|
|
363
657
|
}
|
|
364
658
|
};
|
|
365
659
|
/**
|
|
@@ -418,23 +712,35 @@ const NvCalendar = class {
|
|
|
418
712
|
* @returns {string[]} Array of short day names
|
|
419
713
|
*/
|
|
420
714
|
this.getDayNames = () => {
|
|
715
|
+
let days;
|
|
421
716
|
// If we have custom day names for this locale
|
|
422
717
|
if (constants.CUSTOM_DAY_NAMES[this.locale]) {
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
718
|
+
// Custom day names are expected to start with Monday (index 0 = Monday)
|
|
719
|
+
days = [...constants.CUSTOM_DAY_NAMES[this.locale]];
|
|
720
|
+
}
|
|
721
|
+
else {
|
|
722
|
+
// Generate days using Intl.DateTimeFormat, starting from Monday
|
|
723
|
+
const formatter = new Intl.DateTimeFormat(this.locale, {
|
|
724
|
+
weekday: 'short',
|
|
725
|
+
});
|
|
726
|
+
// Generate days starting from Monday (2023-01-02 was a Monday)
|
|
727
|
+
days = [...Array(7)].map((_, i) => formatter.format(new Date(2023, 0, i + 2)).toUpperCase());
|
|
728
|
+
}
|
|
729
|
+
// Now reorganize based on firstDayOfWeek
|
|
730
|
+
// 0 = Sunday, 1 = Monday (default), 2 = Tuesday, etc.
|
|
731
|
+
if (this.firstDayOfWeek === 0) {
|
|
732
|
+
// If Sunday is first day, move Sunday (last element) to the beginning
|
|
733
|
+
return [days[6], ...days.slice(0, 6)];
|
|
734
|
+
}
|
|
735
|
+
else if (this.firstDayOfWeek === 1) {
|
|
736
|
+
// If Monday is first day, return as-is (since our array starts with Monday)
|
|
737
|
+
return days;
|
|
738
|
+
}
|
|
739
|
+
else {
|
|
740
|
+
// For other first days (Tuesday=2, Wednesday=3, etc.)
|
|
741
|
+
const offset = this.firstDayOfWeek - 1; // Convert to 0-based offset from Monday
|
|
742
|
+
return [...days.slice(offset), ...days.slice(0, offset)];
|
|
428
743
|
}
|
|
429
|
-
// Otherwise, use the default behavior
|
|
430
|
-
const formatter = new Intl.DateTimeFormat(this.locale, {
|
|
431
|
-
weekday: 'short',
|
|
432
|
-
});
|
|
433
|
-
const days = [...Array(7)].map((_, i) => formatter.format(new Date(2023, 0, i + 1)).toUpperCase());
|
|
434
|
-
// Reorganize the days based on the first day of the week
|
|
435
|
-
const firstDays = days.slice(0, this.firstDayOfWeek);
|
|
436
|
-
const remainingDays = days.slice(this.firstDayOfWeek);
|
|
437
|
-
return [...remainingDays, ...firstDays];
|
|
438
744
|
};
|
|
439
745
|
/**
|
|
440
746
|
* Generates the days of the current month
|
|
@@ -615,8 +921,15 @@ const NvCalendar = class {
|
|
|
615
921
|
if (shortcut.singleValue) {
|
|
616
922
|
const newDate = parseDate(shortcut.singleValue, this.dateFormat);
|
|
617
923
|
this.selectedDate = newDate;
|
|
618
|
-
|
|
619
|
-
|
|
924
|
+
const formattedDate = formatDate(newDate, {
|
|
925
|
+
dateFormat: this.dateFormat,
|
|
926
|
+
});
|
|
927
|
+
// Update the unified value prop (like nv-fieldslider)
|
|
928
|
+
this.value = formattedDate;
|
|
929
|
+
this.valueChanged.emit(formattedDate);
|
|
930
|
+
// Legacy support (deprecated) - sync props
|
|
931
|
+
this.singleValue = formattedDate;
|
|
932
|
+
this.singleDateChange.emit(formattedDate);
|
|
620
933
|
if (!this.showActions) {
|
|
621
934
|
const event = new CustomEvent('closePopover', {
|
|
622
935
|
bubbles: true,
|
|
@@ -631,14 +944,18 @@ const NvCalendar = class {
|
|
|
631
944
|
const end = parseDate(shortcut.rangeValue.end, this.dateFormat);
|
|
632
945
|
this.startDate = start;
|
|
633
946
|
this.endDate = end;
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
end: formatDate(end, { dateFormat: this.dateFormat }),
|
|
947
|
+
const startFormatted = formatDate(start, {
|
|
948
|
+
dateFormat: this.dateFormat,
|
|
637
949
|
});
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
950
|
+
const endFormatted = formatDate(end, { dateFormat: this.dateFormat });
|
|
951
|
+
// Update the unified value prop (like nv-fieldslider)
|
|
952
|
+
this.value = `${startFormatted},${endFormatted}`;
|
|
953
|
+
this.valueChanged.emit(this.value);
|
|
954
|
+
// Legacy support (deprecated) - sync props
|
|
955
|
+
const legacyRange = { start: startFormatted, end: endFormatted };
|
|
956
|
+
this.rangeDateChange.emit(legacyRange);
|
|
957
|
+
// eslint-disable-next-line @stencil-community/strict-mutable
|
|
958
|
+
this.rangeValue = legacyRange;
|
|
642
959
|
if (!this.showActions) {
|
|
643
960
|
const event = new CustomEvent('closePopover', {
|
|
644
961
|
bubbles: true,
|
|
@@ -656,79 +973,28 @@ const NvCalendar = class {
|
|
|
656
973
|
this.forceCalendarUpdate = newDate => {
|
|
657
974
|
this.currentDate = new Date(newDate);
|
|
658
975
|
};
|
|
659
|
-
/**
|
|
660
|
-
* Handles month change with an offset
|
|
661
|
-
* @param {number} direction - Direction (-1 for previous, 1 for next)
|
|
662
|
-
* @returns {Function} Change month handler
|
|
663
|
-
*/
|
|
664
|
-
this.getChangeMonthHandler = (direction) => {
|
|
665
|
-
return () => this.changeMonth(direction);
|
|
666
|
-
};
|
|
667
|
-
/**
|
|
668
|
-
* Handles month change from an event (ex: dropdown)
|
|
669
|
-
* @param {number} offset - Month offset (0 by default)
|
|
670
|
-
* @returns {Function} Change month handler
|
|
671
|
-
*/
|
|
672
|
-
this.getHandleMonthChange = (offset) => {
|
|
673
|
-
return (event) => this.handleMonthChange(event, offset);
|
|
674
|
-
};
|
|
675
|
-
/**
|
|
676
|
-
* Handles year change from an event (ex: dropdown)
|
|
677
|
-
* @param {number} offset - Year offset (0 by default)
|
|
678
|
-
* @returns {Function} Change year handler
|
|
679
|
-
*/
|
|
680
|
-
this.getHandleYearChange = (offset) => {
|
|
681
|
-
return (event) => this.handleYearChange(event, offset);
|
|
682
|
-
};
|
|
683
|
-
/**
|
|
684
|
-
* Handles day click
|
|
685
|
-
* @param {Date} date - Date to handle
|
|
686
|
-
* @param {boolean} isDisabled - Whether the date is disabled
|
|
687
|
-
* @returns {Function} Day click handler
|
|
688
|
-
*/
|
|
689
|
-
this.getDayClickHandler = (date, isDisabled) => {
|
|
690
|
-
return isDisabled ? undefined : () => this.handleDateSelection(date);
|
|
691
|
-
};
|
|
692
|
-
/**
|
|
693
|
-
* Handles shortcut selection
|
|
694
|
-
* @param {Object} shortcut - Shortcut to handle
|
|
695
|
-
* @param {string | Date} shortcut.singleValue - Selected date value
|
|
696
|
-
* @param {Object} shortcut.rangeValue - Start and end date values
|
|
697
|
-
* @param {string | Date} shortcut.rangeValue.start - Start date value
|
|
698
|
-
* @param {string | Date} shortcut.rangeValue.end - End date value
|
|
699
|
-
* @param {string} shortcut.label - Label
|
|
700
|
-
* @returns {Function} Shortcut selection handler
|
|
701
|
-
*/
|
|
702
|
-
this.getShortcutHandler = (shortcut) => {
|
|
703
|
-
return () => this.applyShortcut(shortcut);
|
|
704
|
-
};
|
|
705
|
-
/**
|
|
706
|
-
* Handles week selection
|
|
707
|
-
* @param {Date[]} dates - Dates to handle
|
|
708
|
-
* @param {number} index - Calendar index
|
|
709
|
-
* @returns {Function} Week selection handler
|
|
710
|
-
*/
|
|
711
|
-
this.getWeekSelectionHandler = (dates, index) => {
|
|
712
|
-
return () => {
|
|
713
|
-
if (this.selectionType === 'range') {
|
|
714
|
-
this.handleWeekSelection(dates, index);
|
|
715
|
-
}
|
|
716
|
-
};
|
|
717
|
-
};
|
|
718
976
|
/**
|
|
719
977
|
* Resets the current selection
|
|
720
978
|
*/
|
|
721
979
|
this.resetSelection = () => {
|
|
722
980
|
if (this.selectionType === 'single') {
|
|
723
981
|
this.selectedDate = null;
|
|
982
|
+
// eslint-disable-next-line @stencil-community/strict-mutable
|
|
724
983
|
this.singleValue = null;
|
|
984
|
+
// eslint-disable-next-line @stencil-community/strict-mutable
|
|
985
|
+
this.value = '';
|
|
725
986
|
this.singleDateChange.emit('');
|
|
987
|
+
this.valueChanged.emit('');
|
|
726
988
|
}
|
|
727
989
|
else {
|
|
728
990
|
this.startDate = null;
|
|
729
991
|
this.endDate = null;
|
|
992
|
+
// eslint-disable-next-line @stencil-community/strict-mutable
|
|
730
993
|
this.rangeValue = null;
|
|
994
|
+
// eslint-disable-next-line @stencil-community/strict-mutable
|
|
995
|
+
this.value = '';
|
|
731
996
|
this.rangeDateChange.emit({ start: '', end: '' });
|
|
997
|
+
this.valueChanged.emit('');
|
|
732
998
|
}
|
|
733
999
|
};
|
|
734
1000
|
/**
|
|
@@ -740,6 +1006,7 @@ const NvCalendar = class {
|
|
|
740
1006
|
dateFormat: this.dateFormat,
|
|
741
1007
|
});
|
|
742
1008
|
this.singleDateChange.emit(dateStr);
|
|
1009
|
+
// eslint-disable-next-line @stencil-community/strict-mutable
|
|
743
1010
|
this.singleValue = dateStr;
|
|
744
1011
|
const event = new CustomEvent('closePopover', {
|
|
745
1012
|
bubbles: true,
|
|
@@ -754,6 +1021,7 @@ const NvCalendar = class {
|
|
|
754
1021
|
start: formatDate(this.startDate, { dateFormat: this.dateFormat }),
|
|
755
1022
|
end: formatDate(this.endDate, { dateFormat: this.dateFormat }),
|
|
756
1023
|
});
|
|
1024
|
+
// eslint-disable-next-line @stencil-community/strict-mutable
|
|
757
1025
|
this.rangeValue = {
|
|
758
1026
|
start: formatDate(this.startDate, { dateFormat: this.dateFormat }),
|
|
759
1027
|
end: formatDate(this.endDate, { dateFormat: this.dateFormat }),
|
|
@@ -776,8 +1044,7 @@ const NvCalendar = class {
|
|
|
776
1044
|
* @description Renders the header of the calendar
|
|
777
1045
|
*/
|
|
778
1046
|
this.renderHeader = (offset, index$1) => {
|
|
779
|
-
return (index.h(
|
|
780
|
-
Math.floor((this.currentDate.getUTCMonth() + offset) / 12), onChange: this.getHandleYearChange(offset) })), this.numberOfCalendars === 1 && (index.h("div", { class: "nav-buttons" }, index.h("nv-iconbutton", { emphasis: "lower", name: "chevron-left", onClick: this.getChangeMonthHandler(-1) }), index.h("nv-iconbutton", { emphasis: "lower", name: "chevron-right", onClick: this.getChangeMonthHandler(1) }))), this.numberOfCalendars > 1 && index$1 === this.numberOfCalendars - 1 && (index.h("nv-iconbutton", { emphasis: "lower", name: "chevron-right", onClick: this.getChangeMonthHandler(1), class: "nav-right" }))));
|
|
1047
|
+
return (index.h(CalendarHeader, { currentDate: this.currentDate, months: this.months, numberOfCalendars: this.numberOfCalendars, calendarIndex: index$1, monthOffset: offset, onMonthChange: this.changeMonth, onMonthSelect: this.handleMonthChange, onYearChange: this.handleYearChange }));
|
|
781
1048
|
};
|
|
782
1049
|
/**
|
|
783
1050
|
* Renders the week numbers
|
|
@@ -791,42 +1058,7 @@ const NvCalendar = class {
|
|
|
791
1058
|
weeks,
|
|
792
1059
|
/** Calendar index */
|
|
793
1060
|
index$1) => {
|
|
794
|
-
return (index.h(
|
|
795
|
-
var _a;
|
|
796
|
-
const dates = week.map(d => d.date);
|
|
797
|
-
return (index.h("div", { class: `week-number ${this.selectionType === 'range' ? 'clickable' : ''}`, onClick: this.getWeekSelectionHandler(dates, index$1), key: `week-${weekIndex}` }, getWeekNumber(((_a = week.find(d => d.date)) === null || _a === void 0 ? void 0 : _a.date) || new Date())));
|
|
798
|
-
})));
|
|
799
|
-
};
|
|
800
|
-
this.renderDaysGrid = (
|
|
801
|
-
/** Days to render */
|
|
802
|
-
days) => {
|
|
803
|
-
return (index.h("div", { class: "days-grid" }, days.map(day => {
|
|
804
|
-
const date = day.date;
|
|
805
|
-
if (!date)
|
|
806
|
-
return null;
|
|
807
|
-
const isSelected = this.selectionType === 'single' &&
|
|
808
|
-
isSameDate(date, this.selectedDate, { isUTCMode: this.isUTCMode });
|
|
809
|
-
const isInRange = this.isDateInRange(date);
|
|
810
|
-
const isStart = isSameDate(date, this.startDate, {
|
|
811
|
-
isUTCMode: this.isUTCMode,
|
|
812
|
-
});
|
|
813
|
-
const isEnd = isSameDate(date, this.endDate, {
|
|
814
|
-
isUTCMode: this.isUTCMode,
|
|
815
|
-
});
|
|
816
|
-
const isToday = this.isToday(date);
|
|
817
|
-
const isOutsideMonth = !day.isCurrentMonth;
|
|
818
|
-
const dayClasses = [
|
|
819
|
-
'day',
|
|
820
|
-
isSelected ? 'selected' : '',
|
|
821
|
-
isStart ? 'range-start' : '',
|
|
822
|
-
isEnd ? 'range-end' : '',
|
|
823
|
-
isInRange ? 'in-range' : '',
|
|
824
|
-
day.isDisabled ? 'disabled' : '',
|
|
825
|
-
isOutsideMonth ? 'outside-month' : '',
|
|
826
|
-
isToday ? 'is-today' : '',
|
|
827
|
-
];
|
|
828
|
-
return (index.h("div", { class: dayClasses.filter(Boolean).join(' '), onClick: this.getDayClickHandler(date, day.isDisabled), "aria-disabled": day.isDisabled, key: `day-${date.toISOString()}` }, day.dayOfMonth));
|
|
829
|
-
})));
|
|
1061
|
+
return (index.h(WeekNumbers, { weeks: weeks, localizedWeekText: this.getLocalizedWeekText(), selectionType: this.selectionType, onWeekSelect: this.handleWeekSelection, calendarIndex: index$1 }));
|
|
830
1062
|
};
|
|
831
1063
|
/**
|
|
832
1064
|
* Renders the calendar
|
|
@@ -845,7 +1077,7 @@ const NvCalendar = class {
|
|
|
845
1077
|
for (let i = 0; i < days.length; i += 7) {
|
|
846
1078
|
weeks.push(days.slice(i, i + 7));
|
|
847
1079
|
}
|
|
848
|
-
return (index.h("div", { class: "calendar-wrapper" }, index.h("div", { class: "calendar-container", key: `calendar-${index$1}` }, this.renderHeader(offset, index$1), index.h("div", { class: "calendar-grid" }, this.showWeekNumbers && this.renderWeekNumbers(weeks, index$1), index.h(
|
|
1080
|
+
return (index.h("div", { class: "calendar-wrapper" }, index.h("div", { class: "calendar-container", key: `calendar-${index$1}` }, this.renderHeader(offset, index$1), index.h("div", { class: "calendar-grid" }, this.showWeekNumbers && this.renderWeekNumbers(weeks, index$1), index.h(CalendarGrid, { days: days, dayNames: this.getDayNames(), selectionType: this.selectionType, selectedDate: this.selectedDate, startDate: this.startDate, endDate: this.endDate, isUTCMode: this.isUTCMode, onDayClick: this.handleDateSelection, isDateInRange: this.isDateInRange, isToday: this.isToday }))), index$1 < this.numberOfCalendars - 1 && (index.h("div", { class: "calendar-separator" }))));
|
|
849
1081
|
};
|
|
850
1082
|
/**
|
|
851
1083
|
* Renders the shortcuts
|
|
@@ -856,7 +1088,7 @@ const NvCalendar = class {
|
|
|
856
1088
|
if (!this.hasShortcuts) {
|
|
857
1089
|
return null;
|
|
858
1090
|
}
|
|
859
|
-
return (index.h(
|
|
1091
|
+
return (index.h(CalendarShortcuts, { shortcuts: this.shortcuts, placement: this.shortcutsPlacement, onShortcutClick: this.applyShortcut }));
|
|
860
1092
|
};
|
|
861
1093
|
/**
|
|
862
1094
|
* Renders the actions
|
|
@@ -865,7 +1097,7 @@ const NvCalendar = class {
|
|
|
865
1097
|
* @slot actions - Child content of the component.
|
|
866
1098
|
*/
|
|
867
1099
|
this.renderActions = () => {
|
|
868
|
-
return (index.h("div", { class: "datepicker-actions" }, index.h("slot", { name: "actions" }, index.h(
|
|
1100
|
+
return (index.h("div", { class: "datepicker-actions" }, index.h("slot", { name: "actions" }, index.h(CalendarActions, { onReset: this.resetSelection, onConfirm: this.confirmSelection, useSlot: false }))));
|
|
869
1101
|
};
|
|
870
1102
|
}
|
|
871
1103
|
//#endregion EVENTS
|
|
@@ -929,12 +1161,26 @@ const NvCalendar = class {
|
|
|
929
1161
|
}
|
|
930
1162
|
}
|
|
931
1163
|
}
|
|
1164
|
+
/**
|
|
1165
|
+
* Watches the changes of the unified value prop
|
|
1166
|
+
* @param {string} newValue - New value
|
|
1167
|
+
* @param {string} oldValue - Old value
|
|
1168
|
+
*/
|
|
1169
|
+
onValueChange(newValue, oldValue) {
|
|
1170
|
+
if (newValue !== oldValue) {
|
|
1171
|
+
this.parseUnifiedValue(newValue);
|
|
1172
|
+
}
|
|
1173
|
+
}
|
|
932
1174
|
//#endregion WATCHERS
|
|
933
1175
|
/****************************************************************************/
|
|
934
1176
|
//#region LIFECYCLE
|
|
935
1177
|
componentWillLoad() {
|
|
936
1178
|
this.parseDisabledDates();
|
|
937
|
-
|
|
1179
|
+
// Initialize from unified value prop if provided
|
|
1180
|
+
if (this.value) {
|
|
1181
|
+
this.parseUnifiedValue(this.value);
|
|
1182
|
+
}
|
|
1183
|
+
else if (this.selectionType === 'single' && this.singleValue) {
|
|
938
1184
|
this.selectedDate = parseDate(this.singleValue, this.dateFormat);
|
|
939
1185
|
this.currentDate = this.selectedDate;
|
|
940
1186
|
}
|
|
@@ -947,6 +1193,7 @@ const NvCalendar = class {
|
|
|
947
1193
|
this.currentDate = startDate;
|
|
948
1194
|
if (swapped) {
|
|
949
1195
|
// If dates were swapped, update the rangeValue property
|
|
1196
|
+
// eslint-disable-next-line @stencil-community/strict-mutable
|
|
950
1197
|
this.rangeValue = {
|
|
951
1198
|
start: formatDate(startDate, { dateFormat: this.dateFormat }),
|
|
952
1199
|
end: formatDate(endDate, { dateFormat: this.dateFormat }),
|
|
@@ -958,7 +1205,8 @@ const NvCalendar = class {
|
|
|
958
1205
|
console.error('Invalid rangeValue:', error);
|
|
959
1206
|
}
|
|
960
1207
|
}
|
|
961
|
-
|
|
1208
|
+
// Ensure currentDate is always initialized
|
|
1209
|
+
if (!this.currentDate) {
|
|
962
1210
|
this.currentDate = new Date();
|
|
963
1211
|
}
|
|
964
1212
|
this.initializeMonths();
|
|
@@ -1028,15 +1276,16 @@ const NvCalendar = class {
|
|
|
1028
1276
|
* @slot default - Child content of the component.
|
|
1029
1277
|
*/
|
|
1030
1278
|
render() {
|
|
1031
|
-
return (index.h(index.Host, { key: '
|
|
1032
|
-
this.hasActions) && (index.h("div", { key: '
|
|
1279
|
+
return (index.h(index.Host, { key: '43d4f3ab9199e9c5f15e853f15283fa59e4a436d' }, index.h("div", { key: 'b9956225cb2c16d997aa44266af8f8c8222ea968', class: "datepicker-root" }, index.h("div", { key: '05b63935bc5ebf500bb52d10688385f994b47fb4', class: `datepicker-container ${this.numberOfCalendars === 1 ? 'datepicker-container-single' : ''}` }, index.h("div", { key: 'd7af15b9ce051026cf841b3be361b32d8db41fc1', class: `datepicker-wrapper ${this.numberOfCalendars === 1 ? 'single' : ''}` }, this.shortcutsPlacement === 'left' && this.renderShortcuts(), Array.from({ length: this.numberOfCalendars }, (_, index) => this.renderCalendar(index, index)), this.shortcutsPlacement === 'right' && this.renderShortcuts()), ((this.hasShortcuts && this.shortcutsPlacement === 'bottom') ||
|
|
1280
|
+
this.hasActions) && (index.h("div", { key: '1765334bf15564bc9886b210c54bddba64c7042e', class: "datepicker-controls" }, this.shortcutsPlacement === 'bottom' && this.renderShortcuts(), this.hasActions && this.renderActions())))), index.h("slot", { key: '0ac3446394b8c23b859e5f0065370b95b6fd05d2' })));
|
|
1033
1281
|
}
|
|
1034
1282
|
get el() { return index.getElement(this); }
|
|
1035
1283
|
static get watchers() { return {
|
|
1036
1284
|
"numberOfCalendars": ["validateNumberOfCalendars"],
|
|
1037
1285
|
"rangeValue": ["onRangeValueChange"],
|
|
1038
1286
|
"disabledDates": ["handleDisabledDatesChange"],
|
|
1039
|
-
"singleValue": ["onSingleValueChange"]
|
|
1287
|
+
"singleValue": ["onSingleValueChange"],
|
|
1288
|
+
"value": ["onValueChange"]
|
|
1040
1289
|
}; }
|
|
1041
1290
|
};
|
|
1042
1291
|
NvCalendar.style = NvCalendarStyle0;
|