@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
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as registerInstance, c as createEvent,
|
|
2
|
-
import { C as CUSTOM_DAY_NAMES,
|
|
1
|
+
import { h, r as registerInstance, c as createEvent, H as Host, g as getElement } from './index-a1936cd0.js';
|
|
2
|
+
import { C as CUSTOM_DAY_NAMES, d as CUSTOM_MONTH_NAMES, W as WEEK_ABBREVIATIONS } from './constants-4faa1fae.js';
|
|
3
3
|
import { c as commonjsGlobal } from './_commonjsHelpers-1789f0cf.js';
|
|
4
4
|
|
|
5
5
|
var dayjs_min = {exports: {}};
|
|
@@ -156,9 +156,18 @@ function isSameOrAfter(date, compareDate, options) {
|
|
|
156
156
|
* @returns {number} Week number
|
|
157
157
|
*/
|
|
158
158
|
function getWeekNumber(date) {
|
|
159
|
-
|
|
160
|
-
const
|
|
161
|
-
|
|
159
|
+
// Create a copy of the date to avoid modifying the original
|
|
160
|
+
const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
|
|
161
|
+
// Adjust to the same week Thursday (ISO 8601)
|
|
162
|
+
d.setUTCDate(d.getUTCDate() + 3 - ((d.getUTCDay() + 6) % 7));
|
|
163
|
+
// Calculate the first Thursday of the year
|
|
164
|
+
const week1 = new Date(Date.UTC(d.getUTCFullYear(), 0, 4));
|
|
165
|
+
// Calculate the week number
|
|
166
|
+
return (1 +
|
|
167
|
+
Math.round(((d.getTime() - week1.getTime()) / 86400000 -
|
|
168
|
+
3 +
|
|
169
|
+
((week1.getUTCDay() + 6) % 7)) /
|
|
170
|
+
7));
|
|
162
171
|
}
|
|
163
172
|
/**
|
|
164
173
|
* Convert a date string/Date to a Date without timezone offset
|
|
@@ -223,15 +232,200 @@ function parseDate(dateInput, dateFormat) {
|
|
|
223
232
|
parsed = dayjs(dateInput, dateFormat, true);
|
|
224
233
|
}
|
|
225
234
|
if (!parsed.isValid()) {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
235
|
+
// Check if the date input contains placeholder characters (incomplete input from Inputmask)
|
|
236
|
+
// This specifically targets partial dates being typed with placeholder characters
|
|
237
|
+
const hasPlaceholderChars = typeof dateInput === 'string' &&
|
|
238
|
+
(dateInput.includes('_') ||
|
|
239
|
+
dateInput.includes('-_') ||
|
|
240
|
+
dateInput.includes('/_') ||
|
|
241
|
+
dateInput.includes('._'));
|
|
242
|
+
// Check if it looks like a partial date being typed (starts with valid pattern)
|
|
243
|
+
const looksLikePartialDate = typeof dateInput === 'string' &&
|
|
244
|
+
dateInput.length < dateFormat.length &&
|
|
245
|
+
/^[\d\-/.]*$/.test(dateInput) && // Only contains digits and date separators
|
|
246
|
+
dateInput.length > 0;
|
|
247
|
+
const isIncompleteInput = hasPlaceholderChars || looksLikePartialDate;
|
|
248
|
+
// Only log error if it's not an incomplete input (to avoid spam during typing)
|
|
249
|
+
if (!isIncompleteInput) {
|
|
250
|
+
console.error(`Parsing error:`, {
|
|
251
|
+
dateInput,
|
|
252
|
+
dateFormat: dateFormat,
|
|
253
|
+
});
|
|
254
|
+
}
|
|
230
255
|
return null;
|
|
231
256
|
}
|
|
232
257
|
return parsed.toDate();
|
|
233
258
|
}
|
|
234
259
|
|
|
260
|
+
/**
|
|
261
|
+
* Renders a single day cell in the calendar grid
|
|
262
|
+
* @param {DayCellProps} props - Component properties
|
|
263
|
+
* @returns {JSX.Element} JSX element representing a day cell
|
|
264
|
+
*/
|
|
265
|
+
const DayCell = props => {
|
|
266
|
+
const { date, dayOfMonth, isCurrentMonth, isSelected, isInRange, isStart, isEnd, isToday, isDisabled, onClick, } = props;
|
|
267
|
+
// Build CSS classes for the day cell
|
|
268
|
+
const dayClasses = [
|
|
269
|
+
'day',
|
|
270
|
+
isSelected ? 'selected' : '',
|
|
271
|
+
isStart ? 'range-start' : '',
|
|
272
|
+
isEnd ? 'range-end' : '',
|
|
273
|
+
isInRange ? 'in-range' : '',
|
|
274
|
+
isDisabled ? 'disabled' : '',
|
|
275
|
+
!isCurrentMonth ? 'outside-month' : '',
|
|
276
|
+
isToday ? 'is-today' : '',
|
|
277
|
+
]
|
|
278
|
+
.filter(Boolean)
|
|
279
|
+
.join(' ');
|
|
280
|
+
const handleClick = () => {
|
|
281
|
+
if (!isDisabled && onClick) {
|
|
282
|
+
onClick(date);
|
|
283
|
+
}
|
|
284
|
+
};
|
|
285
|
+
return (
|
|
286
|
+
// eslint-disable-next-line react/jsx-no-bind
|
|
287
|
+
h("div", { class: dayClasses, onClick: handleClick, "aria-disabled": isDisabled }, dayOfMonth));
|
|
288
|
+
};
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* Renders the action buttons for the calendar (Cancel/OK)
|
|
292
|
+
* @param {CalendarActionsProps} props - Component properties
|
|
293
|
+
* @returns {JSX.Element} JSX element representing the action buttons
|
|
294
|
+
*/
|
|
295
|
+
const CalendarActions = props => {
|
|
296
|
+
const { onReset, onConfirm, useSlot = false } = props;
|
|
297
|
+
return (h("div", { class: "datepicker-actions" }, useSlot ? (h("slot", { name: "actions" },
|
|
298
|
+
h("nv-button", { emphasis: "low", size: "xs", onClick: onReset }, "Cancel"),
|
|
299
|
+
h("nv-button", { size: "xs", onClick: onConfirm }, "OK"))) : (h("div", null,
|
|
300
|
+
h("nv-button", { emphasis: "low", size: "xs", onClick: onReset }, "Cancel"),
|
|
301
|
+
h("nv-button", { size: "xs", onClick: onConfirm }, "OK")))));
|
|
302
|
+
};
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* Renders the week numbers column for the calendar
|
|
306
|
+
* @param {WeekNumbersProps} props - Component properties
|
|
307
|
+
* @returns {JSX.Element} JSX element representing the week numbers
|
|
308
|
+
*/
|
|
309
|
+
const WeekNumbers = props => {
|
|
310
|
+
const { weeks, localizedWeekText, selectionType, onWeekSelect, calendarIndex, } = props;
|
|
311
|
+
/**
|
|
312
|
+
* Handles click on a week number for range selection
|
|
313
|
+
* @param {Array<WeekData>} week - Week data
|
|
314
|
+
*/
|
|
315
|
+
const handleWeekClick = (week) => {
|
|
316
|
+
if (selectionType === 'range') {
|
|
317
|
+
const dates = week.map(d => d.date);
|
|
318
|
+
onWeekSelect(dates, calendarIndex);
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
/**
|
|
322
|
+
* Creates a click handler for a specific week
|
|
323
|
+
* @param {Array<WeekData>} week - Week data
|
|
324
|
+
* @returns {() => void} Click handler function
|
|
325
|
+
*/
|
|
326
|
+
const createWeekHandler = (week) => {
|
|
327
|
+
return () => handleWeekClick(week);
|
|
328
|
+
};
|
|
329
|
+
return (h("div", { class: "week-numbers" },
|
|
330
|
+
h("div", { class: "week-header" }, localizedWeekText),
|
|
331
|
+
weeks.map((week, weekIndex) => {
|
|
332
|
+
var _a;
|
|
333
|
+
const firstDayWithDate = ((_a = week.find(d => d.date)) === null || _a === void 0 ? void 0 : _a.date) || new Date();
|
|
334
|
+
const weekNumber = getWeekNumber(firstDayWithDate);
|
|
335
|
+
const isClickable = selectionType === 'range';
|
|
336
|
+
return (h("div", { class: `week-number ${isClickable ? 'clickable' : ''}`, onClick: createWeekHandler(week), key: `week-${weekIndex}`, role: isClickable ? 'button' : undefined, tabindex: isClickable ? 0 : undefined }, weekNumber));
|
|
337
|
+
})));
|
|
338
|
+
};
|
|
339
|
+
|
|
340
|
+
/**
|
|
341
|
+
* Renders the shortcuts for quick date selection
|
|
342
|
+
* @param {CalendarShortcutsProps} props - Component properties
|
|
343
|
+
* @returns {JSX.Element | null} JSX element representing the shortcuts or null if no shortcuts
|
|
344
|
+
*/
|
|
345
|
+
const CalendarShortcuts = props => {
|
|
346
|
+
const { shortcuts, placement, onShortcutClick } = props;
|
|
347
|
+
if (!shortcuts || shortcuts.length === 0) {
|
|
348
|
+
return null;
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Creates a click handler for a specific shortcut
|
|
352
|
+
* @param {ShortcutData} shortcut - The shortcut data
|
|
353
|
+
* @returns {() => void} Click handler function
|
|
354
|
+
*/
|
|
355
|
+
const createShortcutHandler = (shortcut) => {
|
|
356
|
+
return () => onShortcutClick(shortcut);
|
|
357
|
+
};
|
|
358
|
+
return (h("div", { class: `shortcuts-container shortcuts-placement-${placement}` }, shortcuts.map((shortcut, index) => (h("nv-button", { key: `shortcut-${index}`, emphasis: "lower", size: "xs", "aria-label": shortcut.label, onClick: createShortcutHandler(shortcut) }, shortcut.label)))));
|
|
359
|
+
};
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* Renders the calendar header with navigation and date controls
|
|
363
|
+
* @param {CalendarHeaderProps} props - Component properties
|
|
364
|
+
* @returns {JSX.Element} JSX element representing the calendar header
|
|
365
|
+
*/
|
|
366
|
+
const CalendarHeader = props => {
|
|
367
|
+
const { currentDate, months, numberOfCalendars, calendarIndex, monthOffset, onMonthChange, onMonthSelect, onYearChange, } = props;
|
|
368
|
+
/**
|
|
369
|
+
* Creates navigation handler for month change
|
|
370
|
+
* @param {number} direction - Direction of navigation (-1 or 1)
|
|
371
|
+
* @returns {() => void} Navigation handler function
|
|
372
|
+
*/
|
|
373
|
+
const createNavigationHandler = (direction) => {
|
|
374
|
+
return () => onMonthChange(direction);
|
|
375
|
+
};
|
|
376
|
+
/**
|
|
377
|
+
* Creates month selection handler
|
|
378
|
+
* @param {number} offset - Month offset
|
|
379
|
+
* @returns {(event: Event) => void} Month selection handler function
|
|
380
|
+
*/
|
|
381
|
+
const createMonthSelectHandler = (offset) => {
|
|
382
|
+
return (event) => onMonthSelect(event, offset);
|
|
383
|
+
};
|
|
384
|
+
/**
|
|
385
|
+
* Creates year change handler
|
|
386
|
+
* @param {number} offset - Month offset
|
|
387
|
+
* @returns {(event: Event) => void} Year change handler function
|
|
388
|
+
*/
|
|
389
|
+
const createYearChangeHandler = (offset) => {
|
|
390
|
+
return (event) => onYearChange(event, offset);
|
|
391
|
+
};
|
|
392
|
+
const currentMonth = (currentDate.getUTCMonth() + monthOffset) % 12;
|
|
393
|
+
const currentYear = currentDate.getUTCFullYear() +
|
|
394
|
+
Math.floor((currentDate.getUTCMonth() + monthOffset) / 12);
|
|
395
|
+
return (h("div", { class: "header" },
|
|
396
|
+
numberOfCalendars > 1 && calendarIndex === 0 && (h("nv-iconbutton", { class: "nav-left", emphasis: "lower", name: "chevron-left", onClick: createNavigationHandler(-1) })),
|
|
397
|
+
h("div", { class: "date-controls" },
|
|
398
|
+
h("select", { class: "month-select mr-4", onChange: createMonthSelectHandler(monthOffset) }, months.map(month => (h("option", { key: month.value, value: month.value, selected: month.value === currentMonth }, month.label)))),
|
|
399
|
+
h("input", { type: "number", class: "year-input", min: "1950", max: "2100", value: currentYear, onChange: createYearChangeHandler(monthOffset) })),
|
|
400
|
+
numberOfCalendars === 1 && (h("div", { class: "nav-buttons" },
|
|
401
|
+
h("nv-iconbutton", { emphasis: "lower", name: "chevron-left", onClick: createNavigationHandler(-1) }),
|
|
402
|
+
h("nv-iconbutton", { emphasis: "lower", name: "chevron-right", onClick: createNavigationHandler(1) }))),
|
|
403
|
+
numberOfCalendars > 1 && calendarIndex === numberOfCalendars - 1 && (h("nv-iconbutton", { emphasis: "lower", name: "chevron-right", onClick: createNavigationHandler(1), class: "nav-right" }))));
|
|
404
|
+
};
|
|
405
|
+
|
|
406
|
+
/**
|
|
407
|
+
* Renders the calendar grid with day headers and day cells
|
|
408
|
+
* @param {CalendarGridProps} props - Component properties
|
|
409
|
+
* @returns {JSX.Element} JSX element representing the calendar grid
|
|
410
|
+
*/
|
|
411
|
+
const CalendarGrid = props => {
|
|
412
|
+
const { days, dayNames, selectionType, selectedDate, startDate, endDate, isUTCMode, onDayClick, isDateInRange, isToday, } = props;
|
|
413
|
+
return (h("div", { class: "days-container" },
|
|
414
|
+
h("div", { class: "days-header" }, dayNames.map((day, index) => (h("div", { class: "day-header", key: `day-header-${index}` }, day)))),
|
|
415
|
+
h("div", { class: "days-grid" }, days.map(day => {
|
|
416
|
+
const date = day.date;
|
|
417
|
+
if (!date)
|
|
418
|
+
return null;
|
|
419
|
+
const isSelected = selectionType === 'single' &&
|
|
420
|
+
isSameDate(date, selectedDate, { isUTCMode });
|
|
421
|
+
const isInRange = isDateInRange(date);
|
|
422
|
+
const isStart = isSameDate(date, startDate, { isUTCMode });
|
|
423
|
+
const isEnd = isSameDate(date, endDate, { isUTCMode });
|
|
424
|
+
const isTodayDate = isToday(date);
|
|
425
|
+
return (h(DayCell, { date: date, dayOfMonth: day.dayOfMonth, isCurrentMonth: day.isCurrentMonth, isSelected: isSelected, isInRange: isInRange, isStart: isStart, isEnd: isEnd, isToday: isTodayDate, isDisabled: day.isDisabled, selectionType: selectionType, onClick: onDayClick }));
|
|
426
|
+
}))));
|
|
427
|
+
};
|
|
428
|
+
|
|
235
429
|
const nvCalendarCss = "nv-calendar{display:block}.datepicker-root{display:flex;justify-content:center;align-items:flex-start;width:auto}.datepicker-container{font-family:system-ui, sans-serif;display:flex;flex-direction:column;align-items:stretch;background:var(--components-calendar-background);border-radius:var(--calendar-radius);padding:var(--calendar-padding);box-shadow:0px var(--shadow-y-axis-md-1) var(--shadow-blur-md-1) var(--shadow-spread-md, 0) var(--shadow-color-opacity-0), 0px var(--shadow-y-axis-md-2) var(--shadow-blur-md-2) var(--shadow-spread-md, 0) var(--shadow-color-opacity-2);border:1px solid var(--components-calendar-border);width:auto;max-width:100%}.datepicker-container-single{max-width:300px}.datepicker-container-single .datepicker-wrapper:has(.shortcuts-placement-left),.datepicker-container-single .datepicker-wrapper:has(.shortcuts-placement-right){max-width:410px !important}.datepicker-container-single:has(.shortcuts-placement-left),.datepicker-container-single:has(.shortcuts-placement-right){max-width:410px !important}.datepicker-wrapper{display:flex;justify-content:center;align-items:flex-start;gap:var(--calendar-gap-x);width:auto;overflow-x:hidden}.datepicker-wrapper::-webkit-scrollbar{width:6px;height:6px}.datepicker-wrapper::-webkit-scrollbar-track{background-color:var(--color-level-10-background);border-radius:9999px}.datepicker-wrapper::-webkit-scrollbar-thumb{background-color:var(--color-gray-200);border-radius:9999px}.datepicker-wrapper.single{justify-content:center}.calendar-container{display:flex;flex-direction:column;align-items:center;padding:var(--calendar-padding);width:auto;position:relative}.calendar-separator{width:1px;background:var(--components-calendar-border);height:auto;min-height:100%;margin:0 10px}.header{display:flex;justify-content:start;align-items:center;margin-bottom:var(--calendar-header-margin-bottom);width:100%}.header nv-iconbutton{width:var(--calendar-header-button-size);height:var(--calendar-header-button-size)}.nav-buttons{display:flex;gap:var(--spacing-0);margin-left:auto}.nav-left{order:-1}.date-controls{display:flex;gap:var(--spacing-1);align-items:center;min-height:34px;justify-content:center}.datepicker-container-single .date-controls{justify-content:flex-start}.datepicker-container:not(.datepicker-container-single) .date-controls{justify-content:start;flex-grow:1}.date-controls .month-select,.date-controls .year-input{background:transparent !important}.calendar-wrapper:nth-child(n+2) .datepicker-container{margin-left:42px}.calendar-grid{display:grid;grid-template-columns:auto 1fr;column-gap:var(--calendar-weeks-calendar-gap-x);position:relative}.calendar-grid.slide-left{animation:slideLeft 0.3s ease-out}.calendar-grid.slide-right{animation:slideRight 0.3s ease-out}.week-numbers{display:grid;grid-template-rows:var(--calendar-cell-size) repeat(6, var(--calendar-cell-size));background:var(--components-calendar-weeks-background);color:var(--components-calendar-weeks-text);border-radius:var(--calendar-weeks-radius);width:var(--calendar-weeks-size);row-gap:var(--calendar-grid-gap-y)}.week-numbers .clickable{cursor:pointer}.week-numbers .clickable:hover{background-color:var(--components-calendar-weeks-background-hover);color:var(--components-calendar-weeks-text-hover);border-radius:var(--calendar-radius)}.week-header,.week-number{display:grid;place-items:center;font-size:var(--calendar-cell-font-size)}.week-header{font-weight:700;color:var(--components-calendar-weeks-text)}.week-number{color:var(--components-calendar-cell-text)}.days-container{display:grid;grid-template-rows:auto 1fr;row-gap:var(--calendar-grid-gap-y)}.days-header{display:grid;grid-template-columns:repeat(7, var(--calendar-cell-size));height:var(--calendar-cell-size)}.day-header{display:grid;place-items:center;font-size:var(--calendar-cell-font-size);color:var(--components-calendar-cell-text)}.days-grid{display:grid;grid-template-columns:repeat(7, var(--calendar-cell-size));grid-template-rows:repeat(6, var(--calendar-cell-size));animation:fadeIn 0.2s ease-in;row-gap:var(--calendar-grid-gap-y);z-index:0}.day{display:grid;place-items:center;width:var(--calendar-cell-size);height:var(--calendar-cell-size);font-size:var(--calendar-cell-font-size);border-radius:var(--calendar-cell-radius);cursor:pointer;border:none;background:transparent;transition:all 0.2s ease;text-align:center;animation:scaleIn 0.2s ease-out}.day:hover:not(.disabled,.empty,.selected){background:var(--components-calendar-cell-background-hover);color:var(--components-calendar-cell-text-hover)}.day.selected,.day.selected:hover .day.is-today.selected,.day.is-today.selected:hover{background:var(--components-calendar-cell-background-selected);color:var(--components-calendar-cell-text-selected) !important}.day.disabled{opacity:var(--opacity-disabled);cursor:not-allowed}.day.outside-month{color:var(--components-calendar-cell-text);opacity:var(--opacity-disabled)}.day.outside-month.selected{opacity:1 !important;color:var(--components-calendar-cell-text-selected)}.day.outside-month.in-range{opacity:0.5 !important;background-color:var(--components-calendar-cell-background-in-range);color:var(--components-calendar-cell-text-in-range)}.day.outside-month.in-range:hover{opacity:0.7 !important;background-color:var(--components-calendar-cell-background-in-range)}.day.in-range{background:var(--components-calendar-cell-background-in-range);color:var(--components-calendar-cell-text-in-range);border-radius:0;position:relative}.day.range-start,.day.range-start:focus,.day.range-start:hover,.day.range-end,.day.range-end:focus,.day.range-end:hover{background-color:var(--components-calendar-cell-background-selected) !important;color:var(--components-calendar-cell-text-selected) !important}.day.range-start,.day.range-end,.day.range-start.is-today,.day.range-end.is-today{background:var(--components-calendar-cell-background-selected);color:var(--components-calendar-cell-text-selected);position:relative;border-radius:var(--radius-rounded-full)}.day.range-start:hover,.day.range-end:hover,.day.range-start.is-today:hover,.day.range-end.is-today:hover{color:var(--components-calendar-cell-text-today)}.day.range-start:before,.day.range-end:before,.day.range-start.is-today:before,.day.range-end.is-today:before{content:\"\";position:absolute;bottom:0;left:0;right:0;top:0;z-index:-1;background-color:var(--components-calendar-cell-background-in-range);border-radius:var(--radius-rounded-full);width:auto;height:auto}.day.range-start:has(~.range-end):before,.day.range-start:has(+.in-range):before{border-top-right-radius:0;border-bottom-right-radius:0}.day.range-end:before{border-top-left-radius:0 !important;border-bottom-left-radius:0 !important}.day.outside-month.range-start,.day.outside-month.range-end{opacity:1 !important;background:var(--components-calendar-cell-background-selected) !important;color:var(--components-calendar-cell-text-selected)}.day.is-today{font-weight:700;position:relative;color:var(--components-calendar-cell-text-today)}.day.is-today.range-start,.day.is-today.range-end{color:var(--components-calendar-cell-text-selected)}.day.is-today.range-start:hover,.day.is-today.range-end:hover{color:var(--components-calendar-cell-text-today)}.day.is-today::after{content:\"\";position:absolute;bottom:var(--spacing-1);left:50%;transform:translateX(-50%);width:var(--calendar-cell-dot-size);height:var(--calendar-cell-dot-size);background-color:currentColor;border-radius:50%}.day.is-today.selected::after{color:var(--components-calendar-cell-text-selected)}.day.is-today.selected::after::after{background-color:var(--components-calendar-cell-dot-selected)}.calendar-footer{display:flex;gap:var(--spacing-1);justify-content:flex-start;width:100%;flex-wrap:wrap}.footer-placement-left{justify-content:flex-start}.footer-placement-right{justify-content:flex-end}.footer-placement-center{justify-content:center}.datepicker-controls{display:flex;flex-direction:column;border-top:1px solid var(--components-calendar-border);padding:var(--calendar-controls-padding-top) var(--calendar-padding) var(--calendar-padding);gap:var(--calendar-grid-gap-y);margin-top:var(--calendar-controls-margin-top)}.datepicker-actions{display:flex;justify-content:flex-end;gap:var(--spacing-1);width:100%}.datepicker-actions slot-fb{display:contents !important}.calendar-footer+.datepicker-actions{margin-top:0}.shortcuts-placement-left,.shortcuts-placement-right{display:flex;flex-direction:column;gap:var(--spacing-1);margin-top:var(--spacing-4)}.shortcuts-placement-left{align-items:flex-end}.shortcuts-placement-right{align-items:flex-start}@keyframes slideLeft{from{opacity:0;transform:translateX(20px)}to{opacity:1;transform:translateX(0)}}@keyframes slideRight{from{opacity:0;transform:translateX(-20px)}to{opacity:1;transform:translateX(0)}}@keyframes fadeIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes scaleIn{from{opacity:0;transform:scale(0.9)}to{opacity:1;transform:scale(1)}}";
|
|
236
430
|
const NvCalendarStyle0 = nvCalendarCss;
|
|
237
431
|
|
|
@@ -240,18 +434,28 @@ const NvCalendar = class {
|
|
|
240
434
|
registerInstance(this, hostRef);
|
|
241
435
|
this.singleDateChange = createEvent(this, "singleDateChange", 7);
|
|
242
436
|
this.rangeDateChange = createEvent(this, "rangeDateChange", 7);
|
|
437
|
+
this.valueChanged = createEvent(this, "valueChanged", 7);
|
|
243
438
|
/****************************************************************************/
|
|
244
439
|
//#region PROPERTIES
|
|
245
440
|
/**
|
|
246
441
|
* First day of the week (0 = Sunday, 1 = Monday, etc.)
|
|
247
|
-
* @default
|
|
442
|
+
* @default 1
|
|
248
443
|
*/
|
|
249
|
-
this.firstDayOfWeek =
|
|
444
|
+
this.firstDayOfWeek = 1;
|
|
250
445
|
/**
|
|
251
446
|
* Number of calendars to display
|
|
252
447
|
* @default 1
|
|
253
448
|
*/
|
|
254
449
|
this.numberOfCalendars = 1;
|
|
450
|
+
/**
|
|
451
|
+
* Selected date value. For single mode: ISO date string. For range mode: comma-separated ISO date strings.
|
|
452
|
+
* Examples:
|
|
453
|
+
* - Single: "2025-03-15"
|
|
454
|
+
* - Range: "2025-03-15,2025-03-20"
|
|
455
|
+
* @default ""
|
|
456
|
+
*/
|
|
457
|
+
// eslint-disable-next-line @stencil-community/strict-mutable
|
|
458
|
+
this.value = '';
|
|
255
459
|
/**
|
|
256
460
|
* Locale for date formatting
|
|
257
461
|
* @default 'en-BE'
|
|
@@ -289,6 +493,75 @@ const NvCalendar = class {
|
|
|
289
493
|
this.endDate = null;
|
|
290
494
|
/** List of formatted months for the selector */
|
|
291
495
|
this.months = [];
|
|
496
|
+
/**
|
|
497
|
+
* Parses the unified value prop and synchronizes with internal state
|
|
498
|
+
* @param {string} value - Value to parse
|
|
499
|
+
*/
|
|
500
|
+
this.parseUnifiedValue = (value) => {
|
|
501
|
+
if (!value) {
|
|
502
|
+
// Reset all selections
|
|
503
|
+
this.selectedDate = null;
|
|
504
|
+
this.startDate = null;
|
|
505
|
+
this.endDate = null;
|
|
506
|
+
return;
|
|
507
|
+
}
|
|
508
|
+
const values = value
|
|
509
|
+
.split(',')
|
|
510
|
+
.map(v => v.trim())
|
|
511
|
+
.filter(Boolean);
|
|
512
|
+
if (this.selectionType === 'single' && values.length >= 1) {
|
|
513
|
+
const parsedDate = parseDate(values[0], this.dateFormat);
|
|
514
|
+
if (parsedDate) {
|
|
515
|
+
this.selectedDate = parsedDate;
|
|
516
|
+
// Only sync with legacy prop if not using actions (immediate mode)
|
|
517
|
+
if (!this.showActions) {
|
|
518
|
+
this.singleValue = values[0];
|
|
519
|
+
}
|
|
520
|
+
// Navigate to the date if not prevented
|
|
521
|
+
const preventNavigation = this.el.getAttribute('data-prevent-navigation') === 'true';
|
|
522
|
+
if (!preventNavigation) {
|
|
523
|
+
this.currentDate = parsedDate;
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
else {
|
|
527
|
+
// Handle malformed date gracefully - reset state
|
|
528
|
+
console.warn(`Invalid date format: ${values[0]}`);
|
|
529
|
+
this.selectedDate = null;
|
|
530
|
+
if (!this.showActions) {
|
|
531
|
+
this.singleValue = '';
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
else if (this.selectionType === 'range' && values.length >= 2) {
|
|
536
|
+
const startDate = parseDate(values[0], this.dateFormat);
|
|
537
|
+
const endDate = parseDate(values[1], this.dateFormat);
|
|
538
|
+
if (startDate && endDate) {
|
|
539
|
+
this.startDate = startDate;
|
|
540
|
+
this.endDate = endDate;
|
|
541
|
+
// Only sync with legacy prop if not using actions (immediate mode)
|
|
542
|
+
if (!this.showActions) {
|
|
543
|
+
this.rangeValue = {
|
|
544
|
+
start: values[0],
|
|
545
|
+
end: values[1],
|
|
546
|
+
};
|
|
547
|
+
}
|
|
548
|
+
// Navigate to start date if not prevented
|
|
549
|
+
const preventNavigation = this.el.getAttribute('data-prevent-navigation') === 'true';
|
|
550
|
+
if (!preventNavigation) {
|
|
551
|
+
this.currentDate = startDate;
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
else {
|
|
555
|
+
// Handle malformed dates gracefully - reset state
|
|
556
|
+
console.warn(`Invalid date range format: ${values[0]}, ${values[1]}`);
|
|
557
|
+
this.startDate = null;
|
|
558
|
+
this.endDate = null;
|
|
559
|
+
if (!this.showActions) {
|
|
560
|
+
this.rangeValue = { start: '', end: '' };
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
};
|
|
292
565
|
/**
|
|
293
566
|
* Change the displayed month
|
|
294
567
|
* @param {number} offset - Month offset (-1 for previous, 1 for next)
|
|
@@ -336,7 +609,14 @@ const NvCalendar = class {
|
|
|
336
609
|
return;
|
|
337
610
|
const formattedDate = formatDate(date, { dateFormat: this.dateFormat });
|
|
338
611
|
this.selectedDate = date;
|
|
339
|
-
|
|
612
|
+
// Update the unified value prop (like nv-fieldslider)
|
|
613
|
+
this.value = formattedDate;
|
|
614
|
+
this.valueChanged.emit(formattedDate);
|
|
615
|
+
// Legacy support (deprecated) - only sync props if not using actions
|
|
616
|
+
if (!this.showActions) {
|
|
617
|
+
this.singleValue = formattedDate;
|
|
618
|
+
this.singleDateChange.emit(formattedDate);
|
|
619
|
+
}
|
|
340
620
|
};
|
|
341
621
|
/**
|
|
342
622
|
* Handles range date selection
|
|
@@ -344,18 +624,32 @@ const NvCalendar = class {
|
|
|
344
624
|
*/
|
|
345
625
|
this.handleRangeSelection = (date) => {
|
|
346
626
|
if (!this.startDate || (this.startDate && this.endDate)) {
|
|
627
|
+
// Start new range selection
|
|
347
628
|
this.startDate = date;
|
|
348
629
|
this.endDate = null;
|
|
349
630
|
}
|
|
350
631
|
else {
|
|
632
|
+
// Complete range selection
|
|
351
633
|
this.endDate = date;
|
|
634
|
+
// Ensure correct order
|
|
352
635
|
if (this.startDate > this.endDate) {
|
|
353
636
|
[this.startDate, this.endDate] = [this.endDate, this.startDate];
|
|
354
637
|
}
|
|
355
|
-
this.
|
|
356
|
-
|
|
357
|
-
|
|
638
|
+
const startFormatted = formatDate(this.startDate, {
|
|
639
|
+
dateFormat: this.dateFormat,
|
|
640
|
+
});
|
|
641
|
+
const endFormatted = formatDate(this.endDate, {
|
|
642
|
+
dateFormat: this.dateFormat,
|
|
358
643
|
});
|
|
644
|
+
// Update the unified value prop (like nv-fieldslider)
|
|
645
|
+
this.value = `${startFormatted},${endFormatted}`;
|
|
646
|
+
this.valueChanged.emit(this.value);
|
|
647
|
+
// Legacy support (deprecated) - only sync props if not using actions
|
|
648
|
+
if (!this.showActions) {
|
|
649
|
+
const legacyRange = { start: startFormatted, end: endFormatted };
|
|
650
|
+
this.rangeDateChange.emit(legacyRange);
|
|
651
|
+
this.rangeValue = legacyRange;
|
|
652
|
+
}
|
|
359
653
|
}
|
|
360
654
|
};
|
|
361
655
|
/**
|
|
@@ -414,23 +708,35 @@ const NvCalendar = class {
|
|
|
414
708
|
* @returns {string[]} Array of short day names
|
|
415
709
|
*/
|
|
416
710
|
this.getDayNames = () => {
|
|
711
|
+
let days;
|
|
417
712
|
// If we have custom day names for this locale
|
|
418
713
|
if (CUSTOM_DAY_NAMES[this.locale]) {
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
714
|
+
// Custom day names are expected to start with Monday (index 0 = Monday)
|
|
715
|
+
days = [...CUSTOM_DAY_NAMES[this.locale]];
|
|
716
|
+
}
|
|
717
|
+
else {
|
|
718
|
+
// Generate days using Intl.DateTimeFormat, starting from Monday
|
|
719
|
+
const formatter = new Intl.DateTimeFormat(this.locale, {
|
|
720
|
+
weekday: 'short',
|
|
721
|
+
});
|
|
722
|
+
// Generate days starting from Monday (2023-01-02 was a Monday)
|
|
723
|
+
days = [...Array(7)].map((_, i) => formatter.format(new Date(2023, 0, i + 2)).toUpperCase());
|
|
724
|
+
}
|
|
725
|
+
// Now reorganize based on firstDayOfWeek
|
|
726
|
+
// 0 = Sunday, 1 = Monday (default), 2 = Tuesday, etc.
|
|
727
|
+
if (this.firstDayOfWeek === 0) {
|
|
728
|
+
// If Sunday is first day, move Sunday (last element) to the beginning
|
|
729
|
+
return [days[6], ...days.slice(0, 6)];
|
|
730
|
+
}
|
|
731
|
+
else if (this.firstDayOfWeek === 1) {
|
|
732
|
+
// If Monday is first day, return as-is (since our array starts with Monday)
|
|
733
|
+
return days;
|
|
734
|
+
}
|
|
735
|
+
else {
|
|
736
|
+
// For other first days (Tuesday=2, Wednesday=3, etc.)
|
|
737
|
+
const offset = this.firstDayOfWeek - 1; // Convert to 0-based offset from Monday
|
|
738
|
+
return [...days.slice(offset), ...days.slice(0, offset)];
|
|
424
739
|
}
|
|
425
|
-
// Otherwise, use the default behavior
|
|
426
|
-
const formatter = new Intl.DateTimeFormat(this.locale, {
|
|
427
|
-
weekday: 'short',
|
|
428
|
-
});
|
|
429
|
-
const days = [...Array(7)].map((_, i) => formatter.format(new Date(2023, 0, i + 1)).toUpperCase());
|
|
430
|
-
// Reorganize the days based on the first day of the week
|
|
431
|
-
const firstDays = days.slice(0, this.firstDayOfWeek);
|
|
432
|
-
const remainingDays = days.slice(this.firstDayOfWeek);
|
|
433
|
-
return [...remainingDays, ...firstDays];
|
|
434
740
|
};
|
|
435
741
|
/**
|
|
436
742
|
* Generates the days of the current month
|
|
@@ -611,8 +917,15 @@ const NvCalendar = class {
|
|
|
611
917
|
if (shortcut.singleValue) {
|
|
612
918
|
const newDate = parseDate(shortcut.singleValue, this.dateFormat);
|
|
613
919
|
this.selectedDate = newDate;
|
|
614
|
-
|
|
615
|
-
|
|
920
|
+
const formattedDate = formatDate(newDate, {
|
|
921
|
+
dateFormat: this.dateFormat,
|
|
922
|
+
});
|
|
923
|
+
// Update the unified value prop (like nv-fieldslider)
|
|
924
|
+
this.value = formattedDate;
|
|
925
|
+
this.valueChanged.emit(formattedDate);
|
|
926
|
+
// Legacy support (deprecated) - sync props
|
|
927
|
+
this.singleValue = formattedDate;
|
|
928
|
+
this.singleDateChange.emit(formattedDate);
|
|
616
929
|
if (!this.showActions) {
|
|
617
930
|
const event = new CustomEvent('closePopover', {
|
|
618
931
|
bubbles: true,
|
|
@@ -627,14 +940,18 @@ const NvCalendar = class {
|
|
|
627
940
|
const end = parseDate(shortcut.rangeValue.end, this.dateFormat);
|
|
628
941
|
this.startDate = start;
|
|
629
942
|
this.endDate = end;
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
end: formatDate(end, { dateFormat: this.dateFormat }),
|
|
943
|
+
const startFormatted = formatDate(start, {
|
|
944
|
+
dateFormat: this.dateFormat,
|
|
633
945
|
});
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
946
|
+
const endFormatted = formatDate(end, { dateFormat: this.dateFormat });
|
|
947
|
+
// Update the unified value prop (like nv-fieldslider)
|
|
948
|
+
this.value = `${startFormatted},${endFormatted}`;
|
|
949
|
+
this.valueChanged.emit(this.value);
|
|
950
|
+
// Legacy support (deprecated) - sync props
|
|
951
|
+
const legacyRange = { start: startFormatted, end: endFormatted };
|
|
952
|
+
this.rangeDateChange.emit(legacyRange);
|
|
953
|
+
// eslint-disable-next-line @stencil-community/strict-mutable
|
|
954
|
+
this.rangeValue = legacyRange;
|
|
638
955
|
if (!this.showActions) {
|
|
639
956
|
const event = new CustomEvent('closePopover', {
|
|
640
957
|
bubbles: true,
|
|
@@ -652,79 +969,28 @@ const NvCalendar = class {
|
|
|
652
969
|
this.forceCalendarUpdate = newDate => {
|
|
653
970
|
this.currentDate = new Date(newDate);
|
|
654
971
|
};
|
|
655
|
-
/**
|
|
656
|
-
* Handles month change with an offset
|
|
657
|
-
* @param {number} direction - Direction (-1 for previous, 1 for next)
|
|
658
|
-
* @returns {Function} Change month handler
|
|
659
|
-
*/
|
|
660
|
-
this.getChangeMonthHandler = (direction) => {
|
|
661
|
-
return () => this.changeMonth(direction);
|
|
662
|
-
};
|
|
663
|
-
/**
|
|
664
|
-
* Handles month change from an event (ex: dropdown)
|
|
665
|
-
* @param {number} offset - Month offset (0 by default)
|
|
666
|
-
* @returns {Function} Change month handler
|
|
667
|
-
*/
|
|
668
|
-
this.getHandleMonthChange = (offset) => {
|
|
669
|
-
return (event) => this.handleMonthChange(event, offset);
|
|
670
|
-
};
|
|
671
|
-
/**
|
|
672
|
-
* Handles year change from an event (ex: dropdown)
|
|
673
|
-
* @param {number} offset - Year offset (0 by default)
|
|
674
|
-
* @returns {Function} Change year handler
|
|
675
|
-
*/
|
|
676
|
-
this.getHandleYearChange = (offset) => {
|
|
677
|
-
return (event) => this.handleYearChange(event, offset);
|
|
678
|
-
};
|
|
679
|
-
/**
|
|
680
|
-
* Handles day click
|
|
681
|
-
* @param {Date} date - Date to handle
|
|
682
|
-
* @param {boolean} isDisabled - Whether the date is disabled
|
|
683
|
-
* @returns {Function} Day click handler
|
|
684
|
-
*/
|
|
685
|
-
this.getDayClickHandler = (date, isDisabled) => {
|
|
686
|
-
return isDisabled ? undefined : () => this.handleDateSelection(date);
|
|
687
|
-
};
|
|
688
|
-
/**
|
|
689
|
-
* Handles shortcut selection
|
|
690
|
-
* @param {Object} shortcut - Shortcut to handle
|
|
691
|
-
* @param {string | Date} shortcut.singleValue - Selected date value
|
|
692
|
-
* @param {Object} shortcut.rangeValue - Start and end date values
|
|
693
|
-
* @param {string | Date} shortcut.rangeValue.start - Start date value
|
|
694
|
-
* @param {string | Date} shortcut.rangeValue.end - End date value
|
|
695
|
-
* @param {string} shortcut.label - Label
|
|
696
|
-
* @returns {Function} Shortcut selection handler
|
|
697
|
-
*/
|
|
698
|
-
this.getShortcutHandler = (shortcut) => {
|
|
699
|
-
return () => this.applyShortcut(shortcut);
|
|
700
|
-
};
|
|
701
|
-
/**
|
|
702
|
-
* Handles week selection
|
|
703
|
-
* @param {Date[]} dates - Dates to handle
|
|
704
|
-
* @param {number} index - Calendar index
|
|
705
|
-
* @returns {Function} Week selection handler
|
|
706
|
-
*/
|
|
707
|
-
this.getWeekSelectionHandler = (dates, index) => {
|
|
708
|
-
return () => {
|
|
709
|
-
if (this.selectionType === 'range') {
|
|
710
|
-
this.handleWeekSelection(dates, index);
|
|
711
|
-
}
|
|
712
|
-
};
|
|
713
|
-
};
|
|
714
972
|
/**
|
|
715
973
|
* Resets the current selection
|
|
716
974
|
*/
|
|
717
975
|
this.resetSelection = () => {
|
|
718
976
|
if (this.selectionType === 'single') {
|
|
719
977
|
this.selectedDate = null;
|
|
978
|
+
// eslint-disable-next-line @stencil-community/strict-mutable
|
|
720
979
|
this.singleValue = null;
|
|
980
|
+
// eslint-disable-next-line @stencil-community/strict-mutable
|
|
981
|
+
this.value = '';
|
|
721
982
|
this.singleDateChange.emit('');
|
|
983
|
+
this.valueChanged.emit('');
|
|
722
984
|
}
|
|
723
985
|
else {
|
|
724
986
|
this.startDate = null;
|
|
725
987
|
this.endDate = null;
|
|
988
|
+
// eslint-disable-next-line @stencil-community/strict-mutable
|
|
726
989
|
this.rangeValue = null;
|
|
990
|
+
// eslint-disable-next-line @stencil-community/strict-mutable
|
|
991
|
+
this.value = '';
|
|
727
992
|
this.rangeDateChange.emit({ start: '', end: '' });
|
|
993
|
+
this.valueChanged.emit('');
|
|
728
994
|
}
|
|
729
995
|
};
|
|
730
996
|
/**
|
|
@@ -736,6 +1002,7 @@ const NvCalendar = class {
|
|
|
736
1002
|
dateFormat: this.dateFormat,
|
|
737
1003
|
});
|
|
738
1004
|
this.singleDateChange.emit(dateStr);
|
|
1005
|
+
// eslint-disable-next-line @stencil-community/strict-mutable
|
|
739
1006
|
this.singleValue = dateStr;
|
|
740
1007
|
const event = new CustomEvent('closePopover', {
|
|
741
1008
|
bubbles: true,
|
|
@@ -750,6 +1017,7 @@ const NvCalendar = class {
|
|
|
750
1017
|
start: formatDate(this.startDate, { dateFormat: this.dateFormat }),
|
|
751
1018
|
end: formatDate(this.endDate, { dateFormat: this.dateFormat }),
|
|
752
1019
|
});
|
|
1020
|
+
// eslint-disable-next-line @stencil-community/strict-mutable
|
|
753
1021
|
this.rangeValue = {
|
|
754
1022
|
start: formatDate(this.startDate, { dateFormat: this.dateFormat }),
|
|
755
1023
|
end: formatDate(this.endDate, { dateFormat: this.dateFormat }),
|
|
@@ -772,8 +1040,7 @@ const NvCalendar = class {
|
|
|
772
1040
|
* @description Renders the header of the calendar
|
|
773
1041
|
*/
|
|
774
1042
|
this.renderHeader = (offset, index) => {
|
|
775
|
-
return (h(
|
|
776
|
-
Math.floor((this.currentDate.getUTCMonth() + offset) / 12), onChange: this.getHandleYearChange(offset) })), this.numberOfCalendars === 1 && (h("div", { class: "nav-buttons" }, h("nv-iconbutton", { emphasis: "lower", name: "chevron-left", onClick: this.getChangeMonthHandler(-1) }), h("nv-iconbutton", { emphasis: "lower", name: "chevron-right", onClick: this.getChangeMonthHandler(1) }))), this.numberOfCalendars > 1 && index === this.numberOfCalendars - 1 && (h("nv-iconbutton", { emphasis: "lower", name: "chevron-right", onClick: this.getChangeMonthHandler(1), class: "nav-right" }))));
|
|
1043
|
+
return (h(CalendarHeader, { currentDate: this.currentDate, months: this.months, numberOfCalendars: this.numberOfCalendars, calendarIndex: index, monthOffset: offset, onMonthChange: this.changeMonth, onMonthSelect: this.handleMonthChange, onYearChange: this.handleYearChange }));
|
|
777
1044
|
};
|
|
778
1045
|
/**
|
|
779
1046
|
* Renders the week numbers
|
|
@@ -787,42 +1054,7 @@ const NvCalendar = class {
|
|
|
787
1054
|
weeks,
|
|
788
1055
|
/** Calendar index */
|
|
789
1056
|
index) => {
|
|
790
|
-
return (h(
|
|
791
|
-
var _a;
|
|
792
|
-
const dates = week.map(d => d.date);
|
|
793
|
-
return (h("div", { class: `week-number ${this.selectionType === 'range' ? 'clickable' : ''}`, onClick: this.getWeekSelectionHandler(dates, index), key: `week-${weekIndex}` }, getWeekNumber(((_a = week.find(d => d.date)) === null || _a === void 0 ? void 0 : _a.date) || new Date())));
|
|
794
|
-
})));
|
|
795
|
-
};
|
|
796
|
-
this.renderDaysGrid = (
|
|
797
|
-
/** Days to render */
|
|
798
|
-
days) => {
|
|
799
|
-
return (h("div", { class: "days-grid" }, days.map(day => {
|
|
800
|
-
const date = day.date;
|
|
801
|
-
if (!date)
|
|
802
|
-
return null;
|
|
803
|
-
const isSelected = this.selectionType === 'single' &&
|
|
804
|
-
isSameDate(date, this.selectedDate, { isUTCMode: this.isUTCMode });
|
|
805
|
-
const isInRange = this.isDateInRange(date);
|
|
806
|
-
const isStart = isSameDate(date, this.startDate, {
|
|
807
|
-
isUTCMode: this.isUTCMode,
|
|
808
|
-
});
|
|
809
|
-
const isEnd = isSameDate(date, this.endDate, {
|
|
810
|
-
isUTCMode: this.isUTCMode,
|
|
811
|
-
});
|
|
812
|
-
const isToday = this.isToday(date);
|
|
813
|
-
const isOutsideMonth = !day.isCurrentMonth;
|
|
814
|
-
const dayClasses = [
|
|
815
|
-
'day',
|
|
816
|
-
isSelected ? 'selected' : '',
|
|
817
|
-
isStart ? 'range-start' : '',
|
|
818
|
-
isEnd ? 'range-end' : '',
|
|
819
|
-
isInRange ? 'in-range' : '',
|
|
820
|
-
day.isDisabled ? 'disabled' : '',
|
|
821
|
-
isOutsideMonth ? 'outside-month' : '',
|
|
822
|
-
isToday ? 'is-today' : '',
|
|
823
|
-
];
|
|
824
|
-
return (h("div", { class: dayClasses.filter(Boolean).join(' '), onClick: this.getDayClickHandler(date, day.isDisabled), "aria-disabled": day.isDisabled, key: `day-${date.toISOString()}` }, day.dayOfMonth));
|
|
825
|
-
})));
|
|
1057
|
+
return (h(WeekNumbers, { weeks: weeks, localizedWeekText: this.getLocalizedWeekText(), selectionType: this.selectionType, onWeekSelect: this.handleWeekSelection, calendarIndex: index }));
|
|
826
1058
|
};
|
|
827
1059
|
/**
|
|
828
1060
|
* Renders the calendar
|
|
@@ -841,7 +1073,7 @@ const NvCalendar = class {
|
|
|
841
1073
|
for (let i = 0; i < days.length; i += 7) {
|
|
842
1074
|
weeks.push(days.slice(i, i + 7));
|
|
843
1075
|
}
|
|
844
|
-
return (h("div", { class: "calendar-wrapper" }, h("div", { class: "calendar-container", key: `calendar-${index}` }, this.renderHeader(offset, index), h("div", { class: "calendar-grid" }, this.showWeekNumbers && this.renderWeekNumbers(weeks, index), h(
|
|
1076
|
+
return (h("div", { class: "calendar-wrapper" }, h("div", { class: "calendar-container", key: `calendar-${index}` }, this.renderHeader(offset, index), h("div", { class: "calendar-grid" }, this.showWeekNumbers && this.renderWeekNumbers(weeks, index), h(CalendarGrid, { days: days, dayNames: this.getDayNames(), selectionType: this.selectionType, selectedDate: this.selectedDate, startDate: this.startDate, endDate: this.endDate, isUTCMode: this.isUTCMode, onDayClick: this.handleDateSelection, isDateInRange: this.isDateInRange, isToday: this.isToday }))), index < this.numberOfCalendars - 1 && (h("div", { class: "calendar-separator" }))));
|
|
845
1077
|
};
|
|
846
1078
|
/**
|
|
847
1079
|
* Renders the shortcuts
|
|
@@ -852,7 +1084,7 @@ const NvCalendar = class {
|
|
|
852
1084
|
if (!this.hasShortcuts) {
|
|
853
1085
|
return null;
|
|
854
1086
|
}
|
|
855
|
-
return (h(
|
|
1087
|
+
return (h(CalendarShortcuts, { shortcuts: this.shortcuts, placement: this.shortcutsPlacement, onShortcutClick: this.applyShortcut }));
|
|
856
1088
|
};
|
|
857
1089
|
/**
|
|
858
1090
|
* Renders the actions
|
|
@@ -861,7 +1093,7 @@ const NvCalendar = class {
|
|
|
861
1093
|
* @slot actions - Child content of the component.
|
|
862
1094
|
*/
|
|
863
1095
|
this.renderActions = () => {
|
|
864
|
-
return (h("div", { class: "datepicker-actions" }, h("slot", { name: "actions" }, h(
|
|
1096
|
+
return (h("div", { class: "datepicker-actions" }, h("slot", { name: "actions" }, h(CalendarActions, { onReset: this.resetSelection, onConfirm: this.confirmSelection, useSlot: false }))));
|
|
865
1097
|
};
|
|
866
1098
|
}
|
|
867
1099
|
//#endregion EVENTS
|
|
@@ -925,12 +1157,26 @@ const NvCalendar = class {
|
|
|
925
1157
|
}
|
|
926
1158
|
}
|
|
927
1159
|
}
|
|
1160
|
+
/**
|
|
1161
|
+
* Watches the changes of the unified value prop
|
|
1162
|
+
* @param {string} newValue - New value
|
|
1163
|
+
* @param {string} oldValue - Old value
|
|
1164
|
+
*/
|
|
1165
|
+
onValueChange(newValue, oldValue) {
|
|
1166
|
+
if (newValue !== oldValue) {
|
|
1167
|
+
this.parseUnifiedValue(newValue);
|
|
1168
|
+
}
|
|
1169
|
+
}
|
|
928
1170
|
//#endregion WATCHERS
|
|
929
1171
|
/****************************************************************************/
|
|
930
1172
|
//#region LIFECYCLE
|
|
931
1173
|
componentWillLoad() {
|
|
932
1174
|
this.parseDisabledDates();
|
|
933
|
-
|
|
1175
|
+
// Initialize from unified value prop if provided
|
|
1176
|
+
if (this.value) {
|
|
1177
|
+
this.parseUnifiedValue(this.value);
|
|
1178
|
+
}
|
|
1179
|
+
else if (this.selectionType === 'single' && this.singleValue) {
|
|
934
1180
|
this.selectedDate = parseDate(this.singleValue, this.dateFormat);
|
|
935
1181
|
this.currentDate = this.selectedDate;
|
|
936
1182
|
}
|
|
@@ -943,6 +1189,7 @@ const NvCalendar = class {
|
|
|
943
1189
|
this.currentDate = startDate;
|
|
944
1190
|
if (swapped) {
|
|
945
1191
|
// If dates were swapped, update the rangeValue property
|
|
1192
|
+
// eslint-disable-next-line @stencil-community/strict-mutable
|
|
946
1193
|
this.rangeValue = {
|
|
947
1194
|
start: formatDate(startDate, { dateFormat: this.dateFormat }),
|
|
948
1195
|
end: formatDate(endDate, { dateFormat: this.dateFormat }),
|
|
@@ -954,7 +1201,8 @@ const NvCalendar = class {
|
|
|
954
1201
|
console.error('Invalid rangeValue:', error);
|
|
955
1202
|
}
|
|
956
1203
|
}
|
|
957
|
-
|
|
1204
|
+
// Ensure currentDate is always initialized
|
|
1205
|
+
if (!this.currentDate) {
|
|
958
1206
|
this.currentDate = new Date();
|
|
959
1207
|
}
|
|
960
1208
|
this.initializeMonths();
|
|
@@ -1024,15 +1272,16 @@ const NvCalendar = class {
|
|
|
1024
1272
|
* @slot default - Child content of the component.
|
|
1025
1273
|
*/
|
|
1026
1274
|
render() {
|
|
1027
|
-
return (h(Host, { key: '
|
|
1028
|
-
this.hasActions) && (h("div", { key: '
|
|
1275
|
+
return (h(Host, { key: '43d4f3ab9199e9c5f15e853f15283fa59e4a436d' }, h("div", { key: 'b9956225cb2c16d997aa44266af8f8c8222ea968', class: "datepicker-root" }, h("div", { key: '05b63935bc5ebf500bb52d10688385f994b47fb4', class: `datepicker-container ${this.numberOfCalendars === 1 ? 'datepicker-container-single' : ''}` }, h("div", { key: 'd7af15b9ce051026cf841b3be361b32d8db41fc1', class: `datepicker-wrapper ${this.numberOfCalendars === 1 ? 'single' : ''}` }, this.shortcutsPlacement === 'left' && this.renderShortcuts(), Array.from({ length: this.numberOfCalendars }, (_, index) => this.renderCalendar(index, index)), this.shortcutsPlacement === 'right' && this.renderShortcuts()), ((this.hasShortcuts && this.shortcutsPlacement === 'bottom') ||
|
|
1276
|
+
this.hasActions) && (h("div", { key: '1765334bf15564bc9886b210c54bddba64c7042e', class: "datepicker-controls" }, this.shortcutsPlacement === 'bottom' && this.renderShortcuts(), this.hasActions && this.renderActions())))), h("slot", { key: '0ac3446394b8c23b859e5f0065370b95b6fd05d2' })));
|
|
1029
1277
|
}
|
|
1030
1278
|
get el() { return getElement(this); }
|
|
1031
1279
|
static get watchers() { return {
|
|
1032
1280
|
"numberOfCalendars": ["validateNumberOfCalendars"],
|
|
1033
1281
|
"rangeValue": ["onRangeValueChange"],
|
|
1034
1282
|
"disabledDates": ["handleDisabledDatesChange"],
|
|
1035
|
-
"singleValue": ["onSingleValueChange"]
|
|
1283
|
+
"singleValue": ["onSingleValueChange"],
|
|
1284
|
+
"value": ["onValueChange"]
|
|
1036
1285
|
}; }
|
|
1037
1286
|
};
|
|
1038
1287
|
NvCalendar.style = NvCalendarStyle0;
|