@nova-design-system/nova-webcomponents 3.1.0 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/{index-9bda5507.js → index-c56424e5.js} +34 -186
- package/dist/cjs/index-c56424e5.js.map +1 -0
- package/dist/cjs/index.cjs.js +1 -0
- package/dist/cjs/index.cjs.js.map +1 -1
- 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 +384 -172
- 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 +95 -103
- package/dist/cjs/nv-datagrid.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-datagridcolumn.cjs.entry.js +2 -2
- package/dist/cjs/nv-datagridcolumn.cjs.entry.js.map +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 +128 -42
- package/dist/cjs/nv-fielddaterange.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-fielddropdown.cjs.entry.js +84 -60
- 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 +116 -104
- package/dist/cjs/nv-fieldmultiselect.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-fieldnumber.cjs.entry.js +2 -2
- package/dist/cjs/nv-fieldnumber.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-fieldpassword.cjs.entry.js +2 -2
- package/dist/cjs/nv-fieldpassword.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-fieldradio.cjs.entry.js +1 -1
- package/dist/cjs/nv-fieldselect.cjs.entry.js +2 -2
- package/dist/cjs/nv-fieldselect.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-fieldslider.cjs.entry.js +668 -0
- package/dist/cjs/nv-fieldslider.cjs.entry.js.map +1 -0
- 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 +3 -3
- package/dist/cjs/nv-icon.cjs.entry.js.map +1 -1
- 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 +2 -2
- 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 +3 -3
- package/dist/cjs/nv-tooltip.cjs.entry.js.map +1 -1
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/nv-calendar/nv-calendar.css +6 -2
- package/dist/collection/components/nv-calendar/nv-calendar.js +247 -169
- package/dist/collection/components/nv-calendar/nv-calendar.js.map +1 -1
- package/dist/collection/components/nv-calendar/nv-calendar.utils.js +12 -3
- 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 +131 -48
- package/dist/collection/components/nv-datagrid/nv-datagrid.docs.js.map +1 -1
- package/dist/collection/components/nv-datagrid/nv-datagrid.js +94 -152
- package/dist/collection/components/nv-datagrid/nv-datagrid.js.map +1 -1
- package/dist/collection/components/nv-datagridcolumn/nv-datagridcolumn.js +20 -1
- package/dist/collection/components/nv-datagridcolumn/nv-datagridcolumn.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 +51 -1
- 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.js +165 -41
- package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.js.map +1 -1
- package/dist/collection/components/nv-fielddaterange/styles/nv-fielddaterange.css +51 -1
- 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/nv-fielddropdown.docs.js +8 -0
- package/dist/collection/components/nv-fielddropdown/nv-fielddropdown.docs.js.map +1 -1
- package/dist/collection/components/nv-fielddropdown/nv-fielddropdown.js +173 -106
- package/dist/collection/components/nv-fielddropdown/nv-fielddropdown.js.map +1 -1
- package/dist/collection/components/nv-fielddropdown/styles/nv-fielddropdown.css +77 -1
- package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.js +202 -190
- package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.js.map +1 -1
- package/dist/collection/components/nv-fieldmultiselect/{nv-fieldmultiselect.css → styles/nv-fieldmultiselect.css} +61 -4
- package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.css +51 -1
- package/dist/collection/components/nv-fieldpassword/nv-fieldpassword.css +51 -1
- package/dist/collection/components/nv-fieldselect/nv-fieldselect.css +51 -1
- package/dist/collection/components/nv-fieldslider/nv-fieldslider.docs.js +264 -0
- package/dist/collection/components/nv-fieldslider/nv-fieldslider.docs.js.map +1 -0
- package/dist/collection/components/nv-fieldslider/nv-fieldslider.js +1036 -0
- package/dist/collection/components/nv-fieldslider/nv-fieldslider.js.map +1 -0
- package/dist/collection/components/nv-fieldslider/nv-fieldslider.utils.js +77 -0
- package/dist/collection/components/nv-fieldslider/nv-fieldslider.utils.js.map +1 -0
- package/dist/collection/components/nv-fieldslider/partials/field-input.js +33 -0
- package/dist/collection/components/nv-fieldslider/partials/field-input.js.map +1 -0
- package/dist/collection/components/nv-fieldslider/partials/range-thumb.js +34 -0
- package/dist/collection/components/nv-fieldslider/partials/range-thumb.js.map +1 -0
- package/dist/collection/components/nv-fieldslider/partials/single-thumb.js +18 -0
- package/dist/collection/components/nv-fieldslider/partials/single-thumb.js.map +1 -0
- package/dist/collection/components/nv-fieldslider/partials/tick-marks.js +18 -0
- package/dist/collection/components/nv-fieldslider/partials/tick-marks.js.map +1 -0
- package/dist/collection/components/nv-fieldslider/styles/nv-fieldslider.css +338 -0
- package/dist/collection/components/nv-fieldslider/test/nv-fieldslider.utils.test.js +159 -0
- package/dist/collection/components/nv-fieldslider/test/nv-fieldslider.utils.test.js.map +1 -0
- package/dist/collection/components/nv-fieldtext/nv-fieldtext.css +59 -1
- package/dist/collection/components/nv-fieldtext/nv-fieldtext.docs.js +9 -1
- package/dist/collection/components/nv-fieldtext/nv-fieldtext.docs.js.map +1 -1
- package/dist/collection/components/nv-fieldtext/nv-fieldtext.js +4 -3
- package/dist/collection/components/nv-fieldtext/nv-fieldtext.js.map +1 -1
- package/dist/collection/components/nv-fieldtextarea/nv-fieldtextarea.css +45 -1
- 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 +51 -1
- package/dist/collection/components/nv-icon/nv-icon.js +1 -1
- package/dist/collection/components/nv-icon/nv-icons.js +1 -0
- package/dist/collection/components/nv-icon/nv-icons.js.map +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 +2 -2
- package/dist/collection/components/nv-popover/nv-popover.js +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.css +1 -0
- package/dist/collection/components/nv-tooltip/nv-tooltip.js +1 -1
- package/dist/collection/interfaces/Column.js.map +1 -1
- package/dist/components/index.js +2 -1
- package/dist/components/index.js.map +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 +97 -109
- package/dist/components/nv-datagrid.js.map +1 -1
- package/dist/components/nv-datagridcolumn.js +4 -3
- package/dist/components/nv-datagridcolumn.js.map +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 +137 -57
- package/dist/components/nv-fielddaterange.js.map +1 -1
- package/dist/components/nv-fielddropdown.js +98 -72
- 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 +132 -120
- package/dist/components/nv-fieldmultiselect.js.map +1 -1
- package/dist/components/nv-fieldnumber.js +5 -5
- package/dist/components/nv-fieldnumber.js.map +1 -1
- package/dist/components/nv-fieldpassword.js +5 -5
- package/dist/components/nv-fieldpassword.js.map +1 -1
- package/dist/components/nv-fieldradio.js +1 -1
- package/dist/components/nv-fieldselect.js +5 -5
- package/dist/components/nv-fieldselect.js.map +1 -1
- package/dist/components/nv-fieldslider.d.ts +11 -0
- package/dist/components/nv-fieldslider.js +731 -0
- package/dist/components/nv-fieldslider.js.map +1 -0
- 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-eb632278.js → p-2ae214d2.js} +3 -3
- package/dist/components/{p-eb632278.js.map → p-2ae214d2.js.map} +1 -1
- package/dist/components/{p-f76bb0c3.js → p-3e32b5a1.js} +5 -5
- package/dist/components/p-3e32b5a1.js.map +1 -0
- package/dist/components/{p-854c32dc.js → p-5e90b9b8.js} +389 -199
- package/dist/components/p-5e90b9b8.js.map +1 -0
- package/dist/components/{p-a2527411.js → p-5ee4015d.js} +3 -3
- package/dist/components/{p-a2527411.js.map → p-5ee4015d.js.map} +1 -1
- package/dist/components/{p-02752770.js → p-6277f746.js} +2 -2
- package/dist/components/{p-02752770.js.map → p-6277f746.js.map} +1 -1
- package/dist/components/p-7935c1cb.js +167 -0
- package/dist/components/p-7935c1cb.js.map +1 -0
- package/dist/components/{p-b48d5a94.js → p-8d92f0e1.js} +4 -4
- package/dist/components/{p-b48d5a94.js.map → p-8d92f0e1.js.map} +1 -1
- package/dist/components/{p-41c56ddc.js → p-95a7581c.js} +5 -5
- package/dist/components/{p-41c56ddc.js.map → p-95a7581c.js.map} +1 -1
- package/dist/components/{p-e00cbb8a.js → p-9e6e26cb.js} +2 -2
- package/dist/components/{p-e00cbb8a.js.map → p-9e6e26cb.js.map} +1 -1
- package/dist/components/p-9fa0de38.js +88 -0
- package/dist/components/p-9fa0de38.js.map +1 -0
- package/dist/components/{p-1c45c0f2.js → p-aff3ed68.js} +24 -177
- package/dist/components/p-aff3ed68.js.map +1 -0
- package/dist/components/{p-608eb9da.js → p-b6d858b2.js} +2 -2
- package/dist/components/{p-608eb9da.js.map → p-b6d858b2.js.map} +1 -1
- package/dist/components/{p-f5cb0a63.js → p-bb6d1e4e.js} +3 -3
- package/dist/components/{p-f5cb0a63.js.map → p-bb6d1e4e.js.map} +1 -1
- package/dist/components/{p-35a70c5e.js → p-c07c32d2.js} +3 -3
- package/dist/components/{p-35a70c5e.js.map → p-c07c32d2.js.map} +1 -1
- package/dist/components/{p-10faa938.js → p-c9006520.js} +5 -5
- package/dist/components/{p-10faa938.js.map → p-c9006520.js.map} +1 -1
- package/dist/components/{p-0a0f6daf.js → p-e28c4707.js} +3 -3
- package/dist/components/{p-0a0f6daf.js.map → p-e28c4707.js.map} +1 -1
- package/dist/components/{p-10b37876.js → p-eabbc885.js} +3 -3
- package/dist/components/{p-10b37876.js.map → p-eabbc885.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-1fb7a9a6.js → index-a1936cd0.js} +35 -186
- package/dist/esm/index-a1936cd0.js.map +1 -0
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +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 +385 -173
- 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 +96 -104
- package/dist/esm/nv-datagrid.entry.js.map +1 -1
- package/dist/esm/nv-datagridcolumn.entry.js +2 -2
- package/dist/esm/nv-datagridcolumn.entry.js.map +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 +128 -42
- package/dist/esm/nv-fielddaterange.entry.js.map +1 -1
- package/dist/esm/nv-fielddropdown.entry.js +84 -60
- 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 +116 -104
- package/dist/esm/nv-fieldmultiselect.entry.js.map +1 -1
- package/dist/esm/nv-fieldnumber.entry.js +2 -2
- package/dist/esm/nv-fieldnumber.entry.js.map +1 -1
- package/dist/esm/nv-fieldpassword.entry.js +2 -2
- package/dist/esm/nv-fieldpassword.entry.js.map +1 -1
- package/dist/esm/nv-fieldradio.entry.js +1 -1
- package/dist/esm/nv-fieldselect.entry.js +2 -2
- package/dist/esm/nv-fieldselect.entry.js.map +1 -1
- package/dist/esm/nv-fieldslider.entry.js +664 -0
- package/dist/esm/nv-fieldslider.entry.js.map +1 -0
- 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 +4 -4
- package/dist/esm/nv-icon.entry.js.map +1 -1
- 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 +2 -2
- 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 +3 -3
- package/dist/esm/nv-tooltip.entry.js.map +1 -1
- package/dist/native/index.esm.js +1 -1
- package/dist/native/index.esm.js.map +1 -1
- package/dist/native/native.css +1 -1
- package/dist/native/native.esm.js +1 -1
- package/dist/native/native.esm.js.map +1 -1
- package/dist/native/p-050d6c6c.entry.js +2 -0
- package/dist/native/{p-4d164ed6.entry.js.map → p-050d6c6c.entry.js.map} +1 -1
- package/dist/native/{p-615947e7.entry.js → p-08ca678c.entry.js} +2 -2
- package/dist/native/p-1a5d3b87.entry.js +2 -0
- package/dist/native/{p-efe6a46c.entry.js.map → p-1a5d3b87.entry.js.map} +1 -1
- package/dist/native/{p-7fd4d13d.entry.js → p-1c1ecd38.entry.js} +2 -2
- package/dist/native/{p-c7b201cd.entry.js → p-1d98477d.entry.js} +2 -2
- package/dist/native/{p-1da72182.entry.js → p-2006f5d4.entry.js} +2 -2
- package/dist/native/p-26cf4938.entry.js +2 -0
- package/dist/native/p-26cf4938.entry.js.map +1 -0
- package/dist/native/p-3817efb2.entry.js +2 -0
- package/dist/native/{p-fc97f071.entry.js.map → p-3817efb2.entry.js.map} +1 -1
- package/dist/native/p-45459dbb.entry.js +2 -0
- package/dist/native/{p-7042ba8a.entry.js.map → p-45459dbb.entry.js.map} +1 -1
- package/dist/native/p-45cbe6e4.entry.js +2 -0
- package/dist/native/{p-9135fdf5.entry.js.map → p-45cbe6e4.entry.js.map} +1 -1
- package/dist/native/p-46428304.entry.js +2 -0
- package/dist/native/p-46428304.entry.js.map +1 -0
- package/dist/native/p-4f9cdf0b.entry.js +2 -0
- package/dist/native/{p-3b7ef609.entry.js → p-58bb90ad.entry.js} +2 -2
- package/dist/native/p-59b07b36.entry.js +2 -0
- package/dist/native/p-59b07b36.entry.js.map +1 -0
- package/dist/native/{p-3cd77d82.entry.js → p-5b6c59e0.entry.js} +2 -2
- package/dist/native/p-6029e51b.entry.js +2 -0
- package/dist/native/{p-244f56ac.entry.js.map → p-6029e51b.entry.js.map} +1 -1
- package/dist/native/{p-08a75cfa.entry.js → p-60c64f2b.entry.js} +2 -2
- package/dist/native/p-64a76565.entry.js +2 -0
- package/dist/native/p-64a76565.entry.js.map +1 -0
- package/dist/native/{p-c67186f8.entry.js → p-83288db0.entry.js} +2 -2
- package/dist/native/p-838f7842.entry.js +2 -0
- package/dist/native/p-838f7842.entry.js.map +1 -0
- package/dist/native/{p-0245863d.entry.js → p-86ab23ea.entry.js} +2 -2
- package/dist/native/p-87784622.entry.js +2 -0
- package/dist/native/p-8fb4e5c0.entry.js +2 -0
- package/dist/native/{p-b94d9f0b.entry.js.map → p-8fb4e5c0.entry.js.map} +1 -1
- package/dist/native/{p-14c07207.entry.js → p-914da1e1.entry.js} +2 -2
- package/dist/native/p-abbe5d69.entry.js +2 -0
- package/dist/native/p-abbe5d69.entry.js.map +1 -0
- package/dist/native/p-abc251aa.entry.js +2 -0
- package/dist/native/p-abc251aa.entry.js.map +1 -0
- package/dist/native/{p-c0f79bac.entry.js → p-ad128108.entry.js} +2 -2
- package/dist/native/{p-e5de64d5.entry.js → p-b5b9190a.entry.js} +2 -2
- package/dist/native/{p-470588c2.entry.js → p-b8f2c1e7.entry.js} +3 -3
- package/dist/native/p-b8f2c1e7.entry.js.map +1 -0
- package/dist/native/{p-b8b6875d.entry.js → p-d040bd61.entry.js} +2 -2
- package/dist/native/p-d0a33e64.js +3 -0
- package/dist/native/p-d0a33e64.js.map +1 -0
- package/dist/native/{p-3953464e.entry.js → p-d21b2da2.entry.js} +3 -3
- package/dist/native/{p-90e6d9dd.entry.js → p-d53e8795.entry.js} +2 -2
- package/dist/native/p-dc7dd7f3.entry.js +2 -0
- package/dist/native/{p-ae7ab110.entry.js.map → p-dc7dd7f3.entry.js.map} +1 -1
- package/dist/native/p-e2c1992e.entry.js +2 -0
- package/dist/native/{p-656c56f0.entry.js.map → p-e2c1992e.entry.js.map} +1 -1
- package/dist/native/{p-f85c08f1.js → p-e2d0a77d.js} +2 -2
- package/dist/native/p-ed6019fe.entry.js +2 -0
- package/dist/native/p-ed6019fe.entry.js.map +1 -0
- package/dist/native/p-f94d7054.entry.js +2 -0
- package/dist/native/{p-49cac014.entry.js.map → p-f94d7054.entry.js.map} +1 -1
- package/dist/native/p-fdea17ce.entry.js +2 -0
- package/dist/native/p-fdea17ce.entry.js.map +1 -0
- package/dist/types/components/nv-calendar/nv-calendar.d.ts +26 -50
- 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 +0 -16
- package/dist/types/components/nv-datagridcolumn/nv-datagridcolumn.d.ts +4 -0
- 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 +24 -3
- package/dist/types/components/nv-fielddaterange/test/nv-fielddaterange.logic.test.d.ts +1 -0
- package/dist/types/components/nv-fielddropdown/nv-fielddropdown.d.ts +47 -26
- package/dist/types/components/nv-fieldmultiselect/nv-fieldmultiselect.d.ts +61 -55
- package/dist/types/components/nv-fieldslider/nv-fieldslider.d.ts +229 -0
- package/dist/types/components/nv-fieldslider/nv-fieldslider.docs.d.ts +4 -0
- package/dist/types/components/nv-fieldslider/nv-fieldslider.utils.d.ts +46 -0
- package/dist/types/components/nv-fieldslider/partials/field-input.d.ts +45 -0
- package/dist/types/components/nv-fieldslider/partials/range-thumb.d.ts +37 -0
- package/dist/types/components/nv-fieldslider/partials/single-thumb.d.ts +35 -0
- package/dist/types/components/nv-fieldslider/partials/tick-marks.d.ts +28 -0
- package/dist/types/components/nv-fieldslider/test/nv-fieldslider.utils.test.d.ts +1 -0
- package/dist/types/components/nv-fieldtext/nv-fieldtext.d.ts +1 -0
- package/dist/types/components/nv-icon/nv-icons.d.ts +1 -1
- package/dist/types/components.d.ts +402 -54
- package/dist/types/interfaces/Column.d.ts +5 -1
- package/dist/vscode-data.json +121 -9
- package/hydrate/index.js +1664 -584
- package/hydrate/index.mjs +1664 -584
- package/package.json +6 -2
- package/dist/cjs/index-9bda5507.js.map +0 -1
- package/dist/components/p-1c45c0f2.js.map +0 -1
- package/dist/components/p-76646ce9.js +0 -88
- package/dist/components/p-76646ce9.js.map +0 -1
- package/dist/components/p-854c32dc.js.map +0 -1
- package/dist/components/p-9decffb6.js +0 -167
- package/dist/components/p-9decffb6.js.map +0 -1
- package/dist/components/p-f76bb0c3.js.map +0 -1
- package/dist/esm/index-1fb7a9a6.js.map +0 -1
- package/dist/native/p-244f56ac.entry.js +0 -2
- package/dist/native/p-2523eead.entry.js +0 -2
- package/dist/native/p-2523eead.entry.js.map +0 -1
- package/dist/native/p-470588c2.entry.js.map +0 -1
- package/dist/native/p-49cac014.entry.js +0 -2
- package/dist/native/p-4d164ed6.entry.js +0 -2
- package/dist/native/p-4dc1d036.entry.js +0 -2
- package/dist/native/p-4e635fa7.entry.js +0 -2
- package/dist/native/p-4e635fa7.entry.js.map +0 -1
- package/dist/native/p-5d21532a.entry.js +0 -2
- package/dist/native/p-5d21532a.entry.js.map +0 -1
- package/dist/native/p-656c56f0.entry.js +0 -2
- package/dist/native/p-7042ba8a.entry.js +0 -2
- package/dist/native/p-7e154bfd.entry.js +0 -2
- package/dist/native/p-7e154bfd.entry.js.map +0 -1
- package/dist/native/p-7eba904e.entry.js +0 -2
- package/dist/native/p-7eba904e.entry.js.map +0 -1
- package/dist/native/p-9135fdf5.entry.js +0 -2
- package/dist/native/p-ab002252.js +0 -3
- package/dist/native/p-ab002252.js.map +0 -1
- package/dist/native/p-ae7ab110.entry.js +0 -2
- package/dist/native/p-b94d9f0b.entry.js +0 -2
- package/dist/native/p-c71c6f23.entry.js +0 -2
- package/dist/native/p-c71c6f23.entry.js.map +0 -1
- package/dist/native/p-d9a52884.entry.js +0 -2
- package/dist/native/p-d9a52884.entry.js.map +0 -1
- package/dist/native/p-efe6a46c.entry.js +0 -2
- package/dist/native/p-f2ef6771.entry.js +0 -2
- package/dist/native/p-f5f68992.entry.js +0 -2
- package/dist/native/p-f5f68992.entry.js.map +0 -1
- package/dist/native/p-fc97f071.entry.js +0 -2
- /package/dist/native/{p-615947e7.entry.js.map → p-08ca678c.entry.js.map} +0 -0
- /package/dist/native/{p-7fd4d13d.entry.js.map → p-1c1ecd38.entry.js.map} +0 -0
- /package/dist/native/{p-c7b201cd.entry.js.map → p-1d98477d.entry.js.map} +0 -0
- /package/dist/native/{p-1da72182.entry.js.map → p-2006f5d4.entry.js.map} +0 -0
- /package/dist/native/{p-f2ef6771.entry.js.map → p-4f9cdf0b.entry.js.map} +0 -0
- /package/dist/native/{p-3b7ef609.entry.js.map → p-58bb90ad.entry.js.map} +0 -0
- /package/dist/native/{p-3cd77d82.entry.js.map → p-5b6c59e0.entry.js.map} +0 -0
- /package/dist/native/{p-08a75cfa.entry.js.map → p-60c64f2b.entry.js.map} +0 -0
- /package/dist/native/{p-c67186f8.entry.js.map → p-83288db0.entry.js.map} +0 -0
- /package/dist/native/{p-0245863d.entry.js.map → p-86ab23ea.entry.js.map} +0 -0
- /package/dist/native/{p-4dc1d036.entry.js.map → p-87784622.entry.js.map} +0 -0
- /package/dist/native/{p-14c07207.entry.js.map → p-914da1e1.entry.js.map} +0 -0
- /package/dist/native/{p-c0f79bac.entry.js.map → p-ad128108.entry.js.map} +0 -0
- /package/dist/native/{p-e5de64d5.entry.js.map → p-b5b9190a.entry.js.map} +0 -0
- /package/dist/native/{p-b8b6875d.entry.js.map → p-d040bd61.entry.js.map} +0 -0
- /package/dist/native/{p-3953464e.entry.js.map → p-d21b2da2.entry.js.map} +0 -0
- /package/dist/native/{p-90e6d9dd.entry.js.map → p-d53e8795.entry.js.map} +0 -0
- /package/dist/native/{p-f85c08f1.js.map → p-e2d0a77d.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
|
|
@@ -236,7 +245,176 @@ function parseDate(dateInput, dateFormat) {
|
|
|
236
245
|
return parsed.toDate();
|
|
237
246
|
}
|
|
238
247
|
|
|
239
|
-
|
|
248
|
+
/**
|
|
249
|
+
* Renders a single day cell in the calendar grid
|
|
250
|
+
* @param {DayCellProps} props - Component properties
|
|
251
|
+
* @returns {JSX.Element} JSX element representing a day cell
|
|
252
|
+
*/
|
|
253
|
+
const DayCell = props => {
|
|
254
|
+
const { date, dayOfMonth, isCurrentMonth, isSelected, isInRange, isStart, isEnd, isToday, isDisabled, onClick, } = props;
|
|
255
|
+
// Build CSS classes for the day cell
|
|
256
|
+
const dayClasses = [
|
|
257
|
+
'day',
|
|
258
|
+
isSelected ? 'selected' : '',
|
|
259
|
+
isStart ? 'range-start' : '',
|
|
260
|
+
isEnd ? 'range-end' : '',
|
|
261
|
+
isInRange ? 'in-range' : '',
|
|
262
|
+
isDisabled ? 'disabled' : '',
|
|
263
|
+
!isCurrentMonth ? 'outside-month' : '',
|
|
264
|
+
isToday ? 'is-today' : '',
|
|
265
|
+
]
|
|
266
|
+
.filter(Boolean)
|
|
267
|
+
.join(' ');
|
|
268
|
+
const handleClick = () => {
|
|
269
|
+
if (!isDisabled && onClick) {
|
|
270
|
+
onClick(date);
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
return (
|
|
274
|
+
// eslint-disable-next-line react/jsx-no-bind
|
|
275
|
+
index.h("div", { class: dayClasses, onClick: handleClick, "aria-disabled": isDisabled }, dayOfMonth));
|
|
276
|
+
};
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Renders the action buttons for the calendar (Cancel/OK)
|
|
280
|
+
* @param {CalendarActionsProps} props - Component properties
|
|
281
|
+
* @returns {JSX.Element} JSX element representing the action buttons
|
|
282
|
+
*/
|
|
283
|
+
const CalendarActions = props => {
|
|
284
|
+
const { onReset, onConfirm, useSlot = false } = props;
|
|
285
|
+
return (index.h("div", { class: "datepicker-actions" }, useSlot ? (index.h("slot", { name: "actions" },
|
|
286
|
+
index.h("nv-button", { emphasis: "low", size: "xs", onClick: onReset }, "Cancel"),
|
|
287
|
+
index.h("nv-button", { size: "xs", onClick: onConfirm }, "OK"))) : (index.h("div", null,
|
|
288
|
+
index.h("nv-button", { emphasis: "low", size: "xs", onClick: onReset }, "Cancel"),
|
|
289
|
+
index.h("nv-button", { size: "xs", onClick: onConfirm }, "OK")))));
|
|
290
|
+
};
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Renders the week numbers column for the calendar
|
|
294
|
+
* @param {WeekNumbersProps} props - Component properties
|
|
295
|
+
* @returns {JSX.Element} JSX element representing the week numbers
|
|
296
|
+
*/
|
|
297
|
+
const WeekNumbers = props => {
|
|
298
|
+
const { weeks, localizedWeekText, selectionType, onWeekSelect, calendarIndex, } = props;
|
|
299
|
+
/**
|
|
300
|
+
* Handles click on a week number for range selection
|
|
301
|
+
* @param {Array<WeekData>} week - Week data
|
|
302
|
+
*/
|
|
303
|
+
const handleWeekClick = (week) => {
|
|
304
|
+
if (selectionType === 'range') {
|
|
305
|
+
const dates = week.map(d => d.date);
|
|
306
|
+
onWeekSelect(dates, calendarIndex);
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
/**
|
|
310
|
+
* Creates a click handler for a specific week
|
|
311
|
+
* @param {Array<WeekData>} week - Week data
|
|
312
|
+
* @returns {() => void} Click handler function
|
|
313
|
+
*/
|
|
314
|
+
const createWeekHandler = (week) => {
|
|
315
|
+
return () => handleWeekClick(week);
|
|
316
|
+
};
|
|
317
|
+
return (index.h("div", { class: "week-numbers" },
|
|
318
|
+
index.h("div", { class: "week-header" }, localizedWeekText),
|
|
319
|
+
weeks.map((week, weekIndex) => {
|
|
320
|
+
var _a;
|
|
321
|
+
const firstDayWithDate = ((_a = week.find(d => d.date)) === null || _a === void 0 ? void 0 : _a.date) || new Date();
|
|
322
|
+
const weekNumber = getWeekNumber(firstDayWithDate);
|
|
323
|
+
const isClickable = selectionType === 'range';
|
|
324
|
+
return (index.h("div", { class: `week-number ${isClickable ? 'clickable' : ''}`, onClick: createWeekHandler(week), key: `week-${weekIndex}`, role: isClickable ? 'button' : undefined, tabindex: isClickable ? 0 : undefined }, weekNumber));
|
|
325
|
+
})));
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* Renders the shortcuts for quick date selection
|
|
330
|
+
* @param {CalendarShortcutsProps} props - Component properties
|
|
331
|
+
* @returns {JSX.Element | null} JSX element representing the shortcuts or null if no shortcuts
|
|
332
|
+
*/
|
|
333
|
+
const CalendarShortcuts = props => {
|
|
334
|
+
const { shortcuts, placement, onShortcutClick } = props;
|
|
335
|
+
if (!shortcuts || shortcuts.length === 0) {
|
|
336
|
+
return null;
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Creates a click handler for a specific shortcut
|
|
340
|
+
* @param {ShortcutData} shortcut - The shortcut data
|
|
341
|
+
* @returns {() => void} Click handler function
|
|
342
|
+
*/
|
|
343
|
+
const createShortcutHandler = (shortcut) => {
|
|
344
|
+
return () => onShortcutClick(shortcut);
|
|
345
|
+
};
|
|
346
|
+
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)))));
|
|
347
|
+
};
|
|
348
|
+
|
|
349
|
+
/**
|
|
350
|
+
* Renders the calendar header with navigation and date controls
|
|
351
|
+
* @param {CalendarHeaderProps} props - Component properties
|
|
352
|
+
* @returns {JSX.Element} JSX element representing the calendar header
|
|
353
|
+
*/
|
|
354
|
+
const CalendarHeader = props => {
|
|
355
|
+
const { currentDate, months, numberOfCalendars, calendarIndex, monthOffset, onMonthChange, onMonthSelect, onYearChange, } = props;
|
|
356
|
+
/**
|
|
357
|
+
* Creates navigation handler for month change
|
|
358
|
+
* @param {number} direction - Direction of navigation (-1 or 1)
|
|
359
|
+
* @returns {() => void} Navigation handler function
|
|
360
|
+
*/
|
|
361
|
+
const createNavigationHandler = (direction) => {
|
|
362
|
+
return () => onMonthChange(direction);
|
|
363
|
+
};
|
|
364
|
+
/**
|
|
365
|
+
* Creates month selection handler
|
|
366
|
+
* @param {number} offset - Month offset
|
|
367
|
+
* @returns {(event: Event) => void} Month selection handler function
|
|
368
|
+
*/
|
|
369
|
+
const createMonthSelectHandler = (offset) => {
|
|
370
|
+
return (event) => onMonthSelect(event, offset);
|
|
371
|
+
};
|
|
372
|
+
/**
|
|
373
|
+
* Creates year change handler
|
|
374
|
+
* @param {number} offset - Month offset
|
|
375
|
+
* @returns {(event: Event) => void} Year change handler function
|
|
376
|
+
*/
|
|
377
|
+
const createYearChangeHandler = (offset) => {
|
|
378
|
+
return (event) => onYearChange(event, offset);
|
|
379
|
+
};
|
|
380
|
+
const currentMonth = (currentDate.getUTCMonth() + monthOffset) % 12;
|
|
381
|
+
const currentYear = currentDate.getUTCFullYear() +
|
|
382
|
+
Math.floor((currentDate.getUTCMonth() + monthOffset) / 12);
|
|
383
|
+
return (index.h("div", { class: "header" },
|
|
384
|
+
numberOfCalendars > 1 && calendarIndex === 0 && (index.h("nv-iconbutton", { class: "nav-left", emphasis: "lower", name: "chevron-left", onClick: createNavigationHandler(-1) })),
|
|
385
|
+
index.h("div", { class: "date-controls" },
|
|
386
|
+
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)))),
|
|
387
|
+
index.h("input", { type: "number", class: "year-input", min: "1950", max: "2100", value: currentYear, onChange: createYearChangeHandler(monthOffset) })),
|
|
388
|
+
numberOfCalendars === 1 && (index.h("div", { class: "nav-buttons" },
|
|
389
|
+
index.h("nv-iconbutton", { emphasis: "lower", name: "chevron-left", onClick: createNavigationHandler(-1) }),
|
|
390
|
+
index.h("nv-iconbutton", { emphasis: "lower", name: "chevron-right", onClick: createNavigationHandler(1) }))),
|
|
391
|
+
numberOfCalendars > 1 && calendarIndex === numberOfCalendars - 1 && (index.h("nv-iconbutton", { emphasis: "lower", name: "chevron-right", onClick: createNavigationHandler(1), class: "nav-right" }))));
|
|
392
|
+
};
|
|
393
|
+
|
|
394
|
+
/**
|
|
395
|
+
* Renders the calendar grid with day headers and day cells
|
|
396
|
+
* @param {CalendarGridProps} props - Component properties
|
|
397
|
+
* @returns {JSX.Element} JSX element representing the calendar grid
|
|
398
|
+
*/
|
|
399
|
+
const CalendarGrid = props => {
|
|
400
|
+
const { days, dayNames, selectionType, selectedDate, startDate, endDate, isUTCMode, onDayClick, isDateInRange, isToday, } = props;
|
|
401
|
+
return (index.h("div", { class: "days-container" },
|
|
402
|
+
index.h("div", { class: "days-header" }, dayNames.map((day, index$1) => (index.h("div", { class: "day-header", key: `day-header-${index$1}` }, day)))),
|
|
403
|
+
index.h("div", { class: "days-grid" }, days.map(day => {
|
|
404
|
+
const date = day.date;
|
|
405
|
+
if (!date)
|
|
406
|
+
return null;
|
|
407
|
+
const isSelected = selectionType === 'single' &&
|
|
408
|
+
isSameDate(date, selectedDate, { isUTCMode });
|
|
409
|
+
const isInRange = isDateInRange(date);
|
|
410
|
+
const isStart = isSameDate(date, startDate, { isUTCMode });
|
|
411
|
+
const isEnd = isSameDate(date, endDate, { isUTCMode });
|
|
412
|
+
const isTodayDate = isToday(date);
|
|
413
|
+
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 }));
|
|
414
|
+
}))));
|
|
415
|
+
};
|
|
416
|
+
|
|
417
|
+
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
418
|
const NvCalendarStyle0 = nvCalendarCss;
|
|
241
419
|
|
|
242
420
|
const NvCalendar = class {
|
|
@@ -244,18 +422,28 @@ const NvCalendar = class {
|
|
|
244
422
|
index.registerInstance(this, hostRef);
|
|
245
423
|
this.singleDateChange = index.createEvent(this, "singleDateChange", 7);
|
|
246
424
|
this.rangeDateChange = index.createEvent(this, "rangeDateChange", 7);
|
|
425
|
+
this.valueChanged = index.createEvent(this, "valueChanged", 7);
|
|
247
426
|
/****************************************************************************/
|
|
248
427
|
//#region PROPERTIES
|
|
249
428
|
/**
|
|
250
429
|
* First day of the week (0 = Sunday, 1 = Monday, etc.)
|
|
251
|
-
* @default
|
|
430
|
+
* @default 1
|
|
252
431
|
*/
|
|
253
|
-
this.firstDayOfWeek =
|
|
432
|
+
this.firstDayOfWeek = 1;
|
|
254
433
|
/**
|
|
255
434
|
* Number of calendars to display
|
|
256
435
|
* @default 1
|
|
257
436
|
*/
|
|
258
437
|
this.numberOfCalendars = 1;
|
|
438
|
+
/**
|
|
439
|
+
* Selected date value. For single mode: ISO date string. For range mode: comma-separated ISO date strings.
|
|
440
|
+
* Examples:
|
|
441
|
+
* - Single: "2025-03-15"
|
|
442
|
+
* - Range: "2025-03-15,2025-03-20"
|
|
443
|
+
* @default ""
|
|
444
|
+
*/
|
|
445
|
+
// eslint-disable-next-line @stencil-community/strict-mutable
|
|
446
|
+
this.value = '';
|
|
259
447
|
/**
|
|
260
448
|
* Locale for date formatting
|
|
261
449
|
* @default 'en-BE'
|
|
@@ -293,6 +481,75 @@ const NvCalendar = class {
|
|
|
293
481
|
this.endDate = null;
|
|
294
482
|
/** List of formatted months for the selector */
|
|
295
483
|
this.months = [];
|
|
484
|
+
/**
|
|
485
|
+
* Parses the unified value prop and synchronizes with internal state
|
|
486
|
+
* @param {string} value - Value to parse
|
|
487
|
+
*/
|
|
488
|
+
this.parseUnifiedValue = (value) => {
|
|
489
|
+
if (!value) {
|
|
490
|
+
// Reset all selections
|
|
491
|
+
this.selectedDate = null;
|
|
492
|
+
this.startDate = null;
|
|
493
|
+
this.endDate = null;
|
|
494
|
+
return;
|
|
495
|
+
}
|
|
496
|
+
const values = value
|
|
497
|
+
.split(',')
|
|
498
|
+
.map(v => v.trim())
|
|
499
|
+
.filter(Boolean);
|
|
500
|
+
if (this.selectionType === 'single' && values.length >= 1) {
|
|
501
|
+
const parsedDate = parseDate(values[0], this.dateFormat);
|
|
502
|
+
if (parsedDate) {
|
|
503
|
+
this.selectedDate = parsedDate;
|
|
504
|
+
// Only sync with legacy prop if not using actions (immediate mode)
|
|
505
|
+
if (!this.showActions) {
|
|
506
|
+
this.singleValue = values[0];
|
|
507
|
+
}
|
|
508
|
+
// Navigate to the date if not prevented
|
|
509
|
+
const preventNavigation = this.el.getAttribute('data-prevent-navigation') === 'true';
|
|
510
|
+
if (!preventNavigation) {
|
|
511
|
+
this.currentDate = parsedDate;
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
else {
|
|
515
|
+
// Handle malformed date gracefully - reset state
|
|
516
|
+
console.warn(`Invalid date format: ${values[0]}`);
|
|
517
|
+
this.selectedDate = null;
|
|
518
|
+
if (!this.showActions) {
|
|
519
|
+
this.singleValue = '';
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
else if (this.selectionType === 'range' && values.length >= 2) {
|
|
524
|
+
const startDate = parseDate(values[0], this.dateFormat);
|
|
525
|
+
const endDate = parseDate(values[1], this.dateFormat);
|
|
526
|
+
if (startDate && endDate) {
|
|
527
|
+
this.startDate = startDate;
|
|
528
|
+
this.endDate = endDate;
|
|
529
|
+
// Only sync with legacy prop if not using actions (immediate mode)
|
|
530
|
+
if (!this.showActions) {
|
|
531
|
+
this.rangeValue = {
|
|
532
|
+
start: values[0],
|
|
533
|
+
end: values[1],
|
|
534
|
+
};
|
|
535
|
+
}
|
|
536
|
+
// Navigate to start date if not prevented
|
|
537
|
+
const preventNavigation = this.el.getAttribute('data-prevent-navigation') === 'true';
|
|
538
|
+
if (!preventNavigation) {
|
|
539
|
+
this.currentDate = startDate;
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
else {
|
|
543
|
+
// Handle malformed dates gracefully - reset state
|
|
544
|
+
console.warn(`Invalid date range format: ${values[0]}, ${values[1]}`);
|
|
545
|
+
this.startDate = null;
|
|
546
|
+
this.endDate = null;
|
|
547
|
+
if (!this.showActions) {
|
|
548
|
+
this.rangeValue = { start: '', end: '' };
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
};
|
|
296
553
|
/**
|
|
297
554
|
* Change the displayed month
|
|
298
555
|
* @param {number} offset - Month offset (-1 for previous, 1 for next)
|
|
@@ -340,7 +597,14 @@ const NvCalendar = class {
|
|
|
340
597
|
return;
|
|
341
598
|
const formattedDate = formatDate(date, { dateFormat: this.dateFormat });
|
|
342
599
|
this.selectedDate = date;
|
|
343
|
-
|
|
600
|
+
// Update the unified value prop (like nv-fieldslider)
|
|
601
|
+
this.value = formattedDate;
|
|
602
|
+
this.valueChanged.emit(formattedDate);
|
|
603
|
+
// Legacy support (deprecated) - only sync props if not using actions
|
|
604
|
+
if (!this.showActions) {
|
|
605
|
+
this.singleValue = formattedDate;
|
|
606
|
+
this.singleDateChange.emit(formattedDate);
|
|
607
|
+
}
|
|
344
608
|
};
|
|
345
609
|
/**
|
|
346
610
|
* Handles range date selection
|
|
@@ -348,18 +612,32 @@ const NvCalendar = class {
|
|
|
348
612
|
*/
|
|
349
613
|
this.handleRangeSelection = (date) => {
|
|
350
614
|
if (!this.startDate || (this.startDate && this.endDate)) {
|
|
615
|
+
// Start new range selection
|
|
351
616
|
this.startDate = date;
|
|
352
617
|
this.endDate = null;
|
|
353
618
|
}
|
|
354
619
|
else {
|
|
620
|
+
// Complete range selection
|
|
355
621
|
this.endDate = date;
|
|
622
|
+
// Ensure correct order
|
|
356
623
|
if (this.startDate > this.endDate) {
|
|
357
624
|
[this.startDate, this.endDate] = [this.endDate, this.startDate];
|
|
358
625
|
}
|
|
359
|
-
this.
|
|
360
|
-
|
|
361
|
-
|
|
626
|
+
const startFormatted = formatDate(this.startDate, {
|
|
627
|
+
dateFormat: this.dateFormat,
|
|
628
|
+
});
|
|
629
|
+
const endFormatted = formatDate(this.endDate, {
|
|
630
|
+
dateFormat: this.dateFormat,
|
|
362
631
|
});
|
|
632
|
+
// Update the unified value prop (like nv-fieldslider)
|
|
633
|
+
this.value = `${startFormatted},${endFormatted}`;
|
|
634
|
+
this.valueChanged.emit(this.value);
|
|
635
|
+
// Legacy support (deprecated) - only sync props if not using actions
|
|
636
|
+
if (!this.showActions) {
|
|
637
|
+
const legacyRange = { start: startFormatted, end: endFormatted };
|
|
638
|
+
this.rangeDateChange.emit(legacyRange);
|
|
639
|
+
this.rangeValue = legacyRange;
|
|
640
|
+
}
|
|
363
641
|
}
|
|
364
642
|
};
|
|
365
643
|
/**
|
|
@@ -418,23 +696,35 @@ const NvCalendar = class {
|
|
|
418
696
|
* @returns {string[]} Array of short day names
|
|
419
697
|
*/
|
|
420
698
|
this.getDayNames = () => {
|
|
699
|
+
let days;
|
|
421
700
|
// If we have custom day names for this locale
|
|
422
701
|
if (constants.CUSTOM_DAY_NAMES[this.locale]) {
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
702
|
+
// Custom day names are expected to start with Monday (index 0 = Monday)
|
|
703
|
+
days = [...constants.CUSTOM_DAY_NAMES[this.locale]];
|
|
704
|
+
}
|
|
705
|
+
else {
|
|
706
|
+
// Generate days using Intl.DateTimeFormat, starting from Monday
|
|
707
|
+
const formatter = new Intl.DateTimeFormat(this.locale, {
|
|
708
|
+
weekday: 'short',
|
|
709
|
+
});
|
|
710
|
+
// Generate days starting from Monday (2023-01-02 was a Monday)
|
|
711
|
+
days = [...Array(7)].map((_, i) => formatter.format(new Date(2023, 0, i + 2)).toUpperCase());
|
|
712
|
+
}
|
|
713
|
+
// Now reorganize based on firstDayOfWeek
|
|
714
|
+
// 0 = Sunday, 1 = Monday (default), 2 = Tuesday, etc.
|
|
715
|
+
if (this.firstDayOfWeek === 0) {
|
|
716
|
+
// If Sunday is first day, move Sunday (last element) to the beginning
|
|
717
|
+
return [days[6], ...days.slice(0, 6)];
|
|
718
|
+
}
|
|
719
|
+
else if (this.firstDayOfWeek === 1) {
|
|
720
|
+
// If Monday is first day, return as-is (since our array starts with Monday)
|
|
721
|
+
return days;
|
|
722
|
+
}
|
|
723
|
+
else {
|
|
724
|
+
// For other first days (Tuesday=2, Wednesday=3, etc.)
|
|
725
|
+
const offset = this.firstDayOfWeek - 1; // Convert to 0-based offset from Monday
|
|
726
|
+
return [...days.slice(offset), ...days.slice(0, offset)];
|
|
428
727
|
}
|
|
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
728
|
};
|
|
439
729
|
/**
|
|
440
730
|
* Generates the days of the current month
|
|
@@ -615,8 +905,15 @@ const NvCalendar = class {
|
|
|
615
905
|
if (shortcut.singleValue) {
|
|
616
906
|
const newDate = parseDate(shortcut.singleValue, this.dateFormat);
|
|
617
907
|
this.selectedDate = newDate;
|
|
618
|
-
|
|
619
|
-
|
|
908
|
+
const formattedDate = formatDate(newDate, {
|
|
909
|
+
dateFormat: this.dateFormat,
|
|
910
|
+
});
|
|
911
|
+
// Update the unified value prop (like nv-fieldslider)
|
|
912
|
+
this.value = formattedDate;
|
|
913
|
+
this.valueChanged.emit(formattedDate);
|
|
914
|
+
// Legacy support (deprecated) - sync props
|
|
915
|
+
this.singleValue = formattedDate;
|
|
916
|
+
this.singleDateChange.emit(formattedDate);
|
|
620
917
|
if (!this.showActions) {
|
|
621
918
|
const event = new CustomEvent('closePopover', {
|
|
622
919
|
bubbles: true,
|
|
@@ -631,14 +928,18 @@ const NvCalendar = class {
|
|
|
631
928
|
const end = parseDate(shortcut.rangeValue.end, this.dateFormat);
|
|
632
929
|
this.startDate = start;
|
|
633
930
|
this.endDate = end;
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
end: formatDate(end, { dateFormat: this.dateFormat }),
|
|
931
|
+
const startFormatted = formatDate(start, {
|
|
932
|
+
dateFormat: this.dateFormat,
|
|
637
933
|
});
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
934
|
+
const endFormatted = formatDate(end, { dateFormat: this.dateFormat });
|
|
935
|
+
// Update the unified value prop (like nv-fieldslider)
|
|
936
|
+
this.value = `${startFormatted},${endFormatted}`;
|
|
937
|
+
this.valueChanged.emit(this.value);
|
|
938
|
+
// Legacy support (deprecated) - sync props
|
|
939
|
+
const legacyRange = { start: startFormatted, end: endFormatted };
|
|
940
|
+
this.rangeDateChange.emit(legacyRange);
|
|
941
|
+
// eslint-disable-next-line @stencil-community/strict-mutable
|
|
942
|
+
this.rangeValue = legacyRange;
|
|
642
943
|
if (!this.showActions) {
|
|
643
944
|
const event = new CustomEvent('closePopover', {
|
|
644
945
|
bubbles: true,
|
|
@@ -646,103 +947,15 @@ const NvCalendar = class {
|
|
|
646
947
|
});
|
|
647
948
|
this.el.dispatchEvent(event);
|
|
648
949
|
}
|
|
649
|
-
this.
|
|
950
|
+
this.currentDate = start;
|
|
650
951
|
}
|
|
651
952
|
};
|
|
652
953
|
/**
|
|
653
|
-
* Method to force the complete calendar update
|
|
954
|
+
* Method to force the complete calendar update
|
|
654
955
|
* @param {Date} newDate - Date to force
|
|
655
956
|
*/
|
|
656
957
|
this.forceCalendarUpdate = newDate => {
|
|
657
958
|
this.currentDate = new Date(newDate);
|
|
658
|
-
this.currentDate = new Date(this.currentDate); // Force a re-render
|
|
659
|
-
// Reset visually the hover/touch effect
|
|
660
|
-
requestAnimationFrame(() => {
|
|
661
|
-
const days = document.querySelectorAll('.day');
|
|
662
|
-
days.forEach(el => {
|
|
663
|
-
el.classList.remove('hover', 'active', 'touched');
|
|
664
|
-
el.style.pointerEvents = 'none';
|
|
665
|
-
});
|
|
666
|
-
// Add specific touch handling (for mobile)
|
|
667
|
-
document.body.addEventListener('touchstart', this.clearTouchState, {
|
|
668
|
-
passive: true,
|
|
669
|
-
});
|
|
670
|
-
// Reset the touch state after 50ms
|
|
671
|
-
setTimeout(() => {
|
|
672
|
-
days.forEach(el => {
|
|
673
|
-
el.style.pointerEvents = '';
|
|
674
|
-
});
|
|
675
|
-
}, 50);
|
|
676
|
-
});
|
|
677
|
-
};
|
|
678
|
-
/**
|
|
679
|
-
* Function to reset the touch effect (Mobile fix)
|
|
680
|
-
*/
|
|
681
|
-
this.clearTouchState = () => {
|
|
682
|
-
document.querySelectorAll('.day').forEach(el => {
|
|
683
|
-
el.classList.remove('touched');
|
|
684
|
-
});
|
|
685
|
-
// Remove the listener after the first interaction
|
|
686
|
-
document.body.removeEventListener('touchstart', this.clearTouchState);
|
|
687
|
-
};
|
|
688
|
-
/**
|
|
689
|
-
* Handles month change with an offset
|
|
690
|
-
* @param {number} direction - Direction (-1 for previous, 1 for next)
|
|
691
|
-
* @returns {Function} Change month handler
|
|
692
|
-
*/
|
|
693
|
-
this.getChangeMonthHandler = (direction) => {
|
|
694
|
-
return () => this.changeMonth(direction);
|
|
695
|
-
};
|
|
696
|
-
/**
|
|
697
|
-
* Handles month change from an event (ex: dropdown)
|
|
698
|
-
* @param {number} offset - Month offset (0 by default)
|
|
699
|
-
* @returns {Function} Change month handler
|
|
700
|
-
*/
|
|
701
|
-
this.getHandleMonthChange = (offset) => {
|
|
702
|
-
return (event) => this.handleMonthChange(event, offset);
|
|
703
|
-
};
|
|
704
|
-
/**
|
|
705
|
-
* Handles year change from an event (ex: dropdown)
|
|
706
|
-
* @param {number} offset - Year offset (0 by default)
|
|
707
|
-
* @returns {Function} Change year handler
|
|
708
|
-
*/
|
|
709
|
-
this.getHandleYearChange = (offset) => {
|
|
710
|
-
return (event) => this.handleYearChange(event, offset);
|
|
711
|
-
};
|
|
712
|
-
/**
|
|
713
|
-
* Handles day click
|
|
714
|
-
* @param {Date} date - Date to handle
|
|
715
|
-
* @param {boolean} isDisabled - Whether the date is disabled
|
|
716
|
-
* @returns {Function} Day click handler
|
|
717
|
-
*/
|
|
718
|
-
this.getDayClickHandler = (date, isDisabled) => {
|
|
719
|
-
return isDisabled ? undefined : () => this.handleDateSelection(date);
|
|
720
|
-
};
|
|
721
|
-
/**
|
|
722
|
-
* Handles shortcut selection
|
|
723
|
-
* @param {Object} shortcut - Shortcut to handle
|
|
724
|
-
* @param {string | Date} shortcut.singleValue - Selected date value
|
|
725
|
-
* @param {Object} shortcut.rangeValue - Start and end date values
|
|
726
|
-
* @param {string | Date} shortcut.rangeValue.start - Start date value
|
|
727
|
-
* @param {string | Date} shortcut.rangeValue.end - End date value
|
|
728
|
-
* @param {string} shortcut.label - Label
|
|
729
|
-
* @returns {Function} Shortcut selection handler
|
|
730
|
-
*/
|
|
731
|
-
this.getShortcutHandler = (shortcut) => {
|
|
732
|
-
return () => this.applyShortcut(shortcut);
|
|
733
|
-
};
|
|
734
|
-
/**
|
|
735
|
-
* Handles week selection
|
|
736
|
-
* @param {Date[]} dates - Dates to handle
|
|
737
|
-
* @param {number} index - Calendar index
|
|
738
|
-
* @returns {Function} Week selection handler
|
|
739
|
-
*/
|
|
740
|
-
this.getWeekSelectionHandler = (dates, index) => {
|
|
741
|
-
return () => {
|
|
742
|
-
if (this.selectionType === 'range') {
|
|
743
|
-
this.handleWeekSelection(dates, index);
|
|
744
|
-
}
|
|
745
|
-
};
|
|
746
959
|
};
|
|
747
960
|
/**
|
|
748
961
|
* Resets the current selection
|
|
@@ -750,14 +963,22 @@ const NvCalendar = class {
|
|
|
750
963
|
this.resetSelection = () => {
|
|
751
964
|
if (this.selectionType === 'single') {
|
|
752
965
|
this.selectedDate = null;
|
|
966
|
+
// eslint-disable-next-line @stencil-community/strict-mutable
|
|
753
967
|
this.singleValue = null;
|
|
968
|
+
// eslint-disable-next-line @stencil-community/strict-mutable
|
|
969
|
+
this.value = '';
|
|
754
970
|
this.singleDateChange.emit('');
|
|
971
|
+
this.valueChanged.emit('');
|
|
755
972
|
}
|
|
756
973
|
else {
|
|
757
974
|
this.startDate = null;
|
|
758
975
|
this.endDate = null;
|
|
976
|
+
// eslint-disable-next-line @stencil-community/strict-mutable
|
|
759
977
|
this.rangeValue = null;
|
|
978
|
+
// eslint-disable-next-line @stencil-community/strict-mutable
|
|
979
|
+
this.value = '';
|
|
760
980
|
this.rangeDateChange.emit({ start: '', end: '' });
|
|
981
|
+
this.valueChanged.emit('');
|
|
761
982
|
}
|
|
762
983
|
};
|
|
763
984
|
/**
|
|
@@ -769,6 +990,7 @@ const NvCalendar = class {
|
|
|
769
990
|
dateFormat: this.dateFormat,
|
|
770
991
|
});
|
|
771
992
|
this.singleDateChange.emit(dateStr);
|
|
993
|
+
// eslint-disable-next-line @stencil-community/strict-mutable
|
|
772
994
|
this.singleValue = dateStr;
|
|
773
995
|
const event = new CustomEvent('closePopover', {
|
|
774
996
|
bubbles: true,
|
|
@@ -783,6 +1005,7 @@ const NvCalendar = class {
|
|
|
783
1005
|
start: formatDate(this.startDate, { dateFormat: this.dateFormat }),
|
|
784
1006
|
end: formatDate(this.endDate, { dateFormat: this.dateFormat }),
|
|
785
1007
|
});
|
|
1008
|
+
// eslint-disable-next-line @stencil-community/strict-mutable
|
|
786
1009
|
this.rangeValue = {
|
|
787
1010
|
start: formatDate(this.startDate, { dateFormat: this.dateFormat }),
|
|
788
1011
|
end: formatDate(this.endDate, { dateFormat: this.dateFormat }),
|
|
@@ -805,8 +1028,7 @@ const NvCalendar = class {
|
|
|
805
1028
|
* @description Renders the header of the calendar
|
|
806
1029
|
*/
|
|
807
1030
|
this.renderHeader = (offset, index$1) => {
|
|
808
|
-
return (index.h(
|
|
809
|
-
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" }))));
|
|
1031
|
+
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 }));
|
|
810
1032
|
};
|
|
811
1033
|
/**
|
|
812
1034
|
* Renders the week numbers
|
|
@@ -820,42 +1042,7 @@ const NvCalendar = class {
|
|
|
820
1042
|
weeks,
|
|
821
1043
|
/** Calendar index */
|
|
822
1044
|
index$1) => {
|
|
823
|
-
return (index.h(
|
|
824
|
-
var _a;
|
|
825
|
-
const dates = week.map(d => d.date);
|
|
826
|
-
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())));
|
|
827
|
-
})));
|
|
828
|
-
};
|
|
829
|
-
this.renderDaysGrid = (
|
|
830
|
-
/** Days to render */
|
|
831
|
-
days) => {
|
|
832
|
-
return (index.h("div", { class: "days-grid" }, days.map(day => {
|
|
833
|
-
const date = day.date;
|
|
834
|
-
if (!date)
|
|
835
|
-
return null;
|
|
836
|
-
const isSelected = this.selectionType === 'single' &&
|
|
837
|
-
isSameDate(date, this.selectedDate, { isUTCMode: this.isUTCMode });
|
|
838
|
-
const isInRange = this.isDateInRange(date);
|
|
839
|
-
const isStart = isSameDate(date, this.startDate, {
|
|
840
|
-
isUTCMode: this.isUTCMode,
|
|
841
|
-
});
|
|
842
|
-
const isEnd = isSameDate(date, this.endDate, {
|
|
843
|
-
isUTCMode: this.isUTCMode,
|
|
844
|
-
});
|
|
845
|
-
const isToday = this.isToday(date);
|
|
846
|
-
const isOutsideMonth = !day.isCurrentMonth;
|
|
847
|
-
const dayClasses = [
|
|
848
|
-
'day',
|
|
849
|
-
isSelected ? 'selected' : '',
|
|
850
|
-
isStart ? 'range-start' : '',
|
|
851
|
-
isEnd ? 'range-end' : '',
|
|
852
|
-
isInRange ? 'in-range' : '',
|
|
853
|
-
day.isDisabled ? 'disabled' : '',
|
|
854
|
-
isOutsideMonth ? 'outside-month' : '',
|
|
855
|
-
isToday ? 'is-today' : '',
|
|
856
|
-
];
|
|
857
|
-
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));
|
|
858
|
-
})));
|
|
1045
|
+
return (index.h(WeekNumbers, { weeks: weeks, localizedWeekText: this.getLocalizedWeekText(), selectionType: this.selectionType, onWeekSelect: this.handleWeekSelection, calendarIndex: index$1 }));
|
|
859
1046
|
};
|
|
860
1047
|
/**
|
|
861
1048
|
* Renders the calendar
|
|
@@ -874,7 +1061,7 @@ const NvCalendar = class {
|
|
|
874
1061
|
for (let i = 0; i < days.length; i += 7) {
|
|
875
1062
|
weeks.push(days.slice(i, i + 7));
|
|
876
1063
|
}
|
|
877
|
-
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(
|
|
1064
|
+
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" }))));
|
|
878
1065
|
};
|
|
879
1066
|
/**
|
|
880
1067
|
* Renders the shortcuts
|
|
@@ -885,7 +1072,7 @@ const NvCalendar = class {
|
|
|
885
1072
|
if (!this.hasShortcuts) {
|
|
886
1073
|
return null;
|
|
887
1074
|
}
|
|
888
|
-
return (index.h(
|
|
1075
|
+
return (index.h(CalendarShortcuts, { shortcuts: this.shortcuts, placement: this.shortcutsPlacement, onShortcutClick: this.applyShortcut }));
|
|
889
1076
|
};
|
|
890
1077
|
/**
|
|
891
1078
|
* Renders the actions
|
|
@@ -894,7 +1081,7 @@ const NvCalendar = class {
|
|
|
894
1081
|
* @slot actions - Child content of the component.
|
|
895
1082
|
*/
|
|
896
1083
|
this.renderActions = () => {
|
|
897
|
-
return (index.h("div", { class: "datepicker-actions" }, index.h("slot", { name: "actions" }, index.h(
|
|
1084
|
+
return (index.h("div", { class: "datepicker-actions" }, index.h("slot", { name: "actions" }, index.h(CalendarActions, { onReset: this.resetSelection, onConfirm: this.confirmSelection, useSlot: false }))));
|
|
898
1085
|
};
|
|
899
1086
|
}
|
|
900
1087
|
//#endregion EVENTS
|
|
@@ -922,7 +1109,11 @@ const NvCalendar = class {
|
|
|
922
1109
|
const { startDate, endDate } = this.validateDateRange(newValue.start, newValue.end);
|
|
923
1110
|
this.startDate = startDate;
|
|
924
1111
|
this.endDate = endDate;
|
|
925
|
-
|
|
1112
|
+
// Do not navigate to the start date if data-prevent-navigation attribute is present
|
|
1113
|
+
const preventNavigation = this.el.getAttribute('data-prevent-navigation') === 'true';
|
|
1114
|
+
if (!preventNavigation) {
|
|
1115
|
+
this.currentDate = startDate;
|
|
1116
|
+
}
|
|
926
1117
|
}
|
|
927
1118
|
catch (error) {
|
|
928
1119
|
console.error('Invalid rangeValue:', error);
|
|
@@ -946,16 +1137,34 @@ const NvCalendar = class {
|
|
|
946
1137
|
const parsedDate = parseDate(newValue, this.dateFormat);
|
|
947
1138
|
if (parsedDate) {
|
|
948
1139
|
this.selectedDate = parsedDate;
|
|
949
|
-
|
|
1140
|
+
// Do not navigate to the selected date if data-prevent-navigation attribute is present
|
|
1141
|
+
const preventNavigation = this.el.getAttribute('data-prevent-navigation') === 'true';
|
|
1142
|
+
if (!preventNavigation) {
|
|
1143
|
+
this.currentDate = parsedDate;
|
|
1144
|
+
}
|
|
950
1145
|
}
|
|
951
1146
|
}
|
|
952
1147
|
}
|
|
1148
|
+
/**
|
|
1149
|
+
* Watches the changes of the unified value prop
|
|
1150
|
+
* @param {string} newValue - New value
|
|
1151
|
+
* @param {string} oldValue - Old value
|
|
1152
|
+
*/
|
|
1153
|
+
onValueChange(newValue, oldValue) {
|
|
1154
|
+
if (newValue !== oldValue) {
|
|
1155
|
+
this.parseUnifiedValue(newValue);
|
|
1156
|
+
}
|
|
1157
|
+
}
|
|
953
1158
|
//#endregion WATCHERS
|
|
954
1159
|
/****************************************************************************/
|
|
955
1160
|
//#region LIFECYCLE
|
|
956
1161
|
componentWillLoad() {
|
|
957
1162
|
this.parseDisabledDates();
|
|
958
|
-
|
|
1163
|
+
// Initialize from unified value prop if provided
|
|
1164
|
+
if (this.value) {
|
|
1165
|
+
this.parseUnifiedValue(this.value);
|
|
1166
|
+
}
|
|
1167
|
+
else if (this.selectionType === 'single' && this.singleValue) {
|
|
959
1168
|
this.selectedDate = parseDate(this.singleValue, this.dateFormat);
|
|
960
1169
|
this.currentDate = this.selectedDate;
|
|
961
1170
|
}
|
|
@@ -968,6 +1177,7 @@ const NvCalendar = class {
|
|
|
968
1177
|
this.currentDate = startDate;
|
|
969
1178
|
if (swapped) {
|
|
970
1179
|
// If dates were swapped, update the rangeValue property
|
|
1180
|
+
// eslint-disable-next-line @stencil-community/strict-mutable
|
|
971
1181
|
this.rangeValue = {
|
|
972
1182
|
start: formatDate(startDate, { dateFormat: this.dateFormat }),
|
|
973
1183
|
end: formatDate(endDate, { dateFormat: this.dateFormat }),
|
|
@@ -979,7 +1189,8 @@ const NvCalendar = class {
|
|
|
979
1189
|
console.error('Invalid rangeValue:', error);
|
|
980
1190
|
}
|
|
981
1191
|
}
|
|
982
|
-
|
|
1192
|
+
// Ensure currentDate is always initialized
|
|
1193
|
+
if (!this.currentDate) {
|
|
983
1194
|
this.currentDate = new Date();
|
|
984
1195
|
}
|
|
985
1196
|
this.initializeMonths();
|
|
@@ -1049,15 +1260,16 @@ const NvCalendar = class {
|
|
|
1049
1260
|
* @slot default - Child content of the component.
|
|
1050
1261
|
*/
|
|
1051
1262
|
render() {
|
|
1052
|
-
return (index.h(index.Host, { key: '
|
|
1053
|
-
this.hasActions) && (index.h("div", { key: '
|
|
1263
|
+
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') ||
|
|
1264
|
+
this.hasActions) && (index.h("div", { key: '1765334bf15564bc9886b210c54bddba64c7042e', class: "datepicker-controls" }, this.shortcutsPlacement === 'bottom' && this.renderShortcuts(), this.hasActions && this.renderActions())))), index.h("slot", { key: '0ac3446394b8c23b859e5f0065370b95b6fd05d2' })));
|
|
1054
1265
|
}
|
|
1055
1266
|
get el() { return index.getElement(this); }
|
|
1056
1267
|
static get watchers() { return {
|
|
1057
1268
|
"numberOfCalendars": ["validateNumberOfCalendars"],
|
|
1058
1269
|
"rangeValue": ["onRangeValueChange"],
|
|
1059
1270
|
"disabledDates": ["handleDisabledDatesChange"],
|
|
1060
|
-
"singleValue": ["onSingleValueChange"]
|
|
1271
|
+
"singleValue": ["onSingleValueChange"],
|
|
1272
|
+
"value": ["onValueChange"]
|
|
1061
1273
|
}; }
|
|
1062
1274
|
};
|
|
1063
1275
|
NvCalendar.style = NvCalendarStyle0;
|