@nova-design-system/nova-webcomponents 3.9.0 → 3.10.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/{constants-8fb8ccc0.js → constants-3b6beb66.js} +15 -1
- package/dist/cjs/constants-3b6beb66.js.map +1 -0
- package/dist/cjs/index-c56424e5.js +12 -0
- package/dist/cjs/index.cjs.js +7 -1
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/native.cjs.js +1 -1
- package/dist/cjs/nv-accordion-item.cjs.entry.js +1 -1
- package/dist/cjs/nv-accordion-item.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-alert.cjs.entry.js +2 -2
- package/dist/cjs/nv-alert.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-avatar.cjs.entry.js +1 -1
- package/dist/cjs/nv-badge_2.cjs.entry.js +2 -2
- package/dist/cjs/nv-badge_2.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-breadcrumb.cjs.entry.js +1 -1
- package/dist/cjs/nv-breadcrumb.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-button.cjs.entry.js +2 -2
- package/dist/cjs/nv-button.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-buttongroup.cjs.entry.js +198 -0
- package/dist/cjs/nv-buttongroup.cjs.entry.js.map +1 -0
- package/dist/cjs/nv-calendar.cjs.entry.js +121 -38
- 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 +4 -4
- 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 +2 -2
- package/dist/cjs/nv-dialogfooter_2.cjs.entry.js +3 -3
- package/dist/cjs/nv-fieldcheckbox.cjs.entry.js +5 -5
- package/dist/cjs/nv-fieldcheckbox.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-fielddate.cjs.entry.js +62 -94
- package/dist/cjs/nv-fielddate.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-fielddaterange.cjs.entry.js +52 -33
- package/dist/cjs/nv-fielddaterange.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-fielddropdown.cjs.entry.js +3 -3
- package/dist/cjs/nv-fielddropdownitem.cjs.entry.js +1 -1
- package/dist/cjs/nv-fieldmultiselect.cjs.entry.js +377 -27
- package/dist/cjs/nv-fieldmultiselect.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-fieldnumber.cjs.entry.js +3 -3
- package/dist/cjs/nv-fieldpassword.cjs.entry.js +3 -3
- package/dist/cjs/nv-fieldradio.cjs.entry.js +4 -4
- package/dist/cjs/nv-fieldradio.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-fieldselect.cjs.entry.js +5 -5
- package/dist/cjs/nv-fieldslider.cjs.entry.js +3 -3
- package/dist/cjs/nv-fieldtext.cjs.entry.js +3 -3
- package/dist/cjs/nv-fieldtextarea.cjs.entry.js +3 -3
- package/dist/cjs/nv-fieldtime.cjs.entry.js +10 -10
- 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-iconbutton_2.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-menu.cjs.entry.js +1 -1
- package/dist/cjs/nv-menuitem.cjs.entry.js +1 -1
- package/dist/cjs/nv-popover.cjs.entry.js +1 -1
- package/dist/cjs/nv-row.cjs.entry.js +1 -1
- package/dist/cjs/nv-stack.cjs.entry.js +1 -1
- package/dist/cjs/nv-table.cjs.entry.js +2 -2
- package/dist/cjs/nv-toggle.cjs.entry.js +3 -3
- package/dist/cjs/nv-toggle.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-togglebutton.cjs.entry.js +58 -0
- package/dist/cjs/nv-togglebutton.cjs.entry.js.map +1 -0
- package/dist/cjs/nv-togglebuttongroup.cjs.entry.js +172 -0
- package/dist/cjs/nv-togglebuttongroup.cjs.entry.js.map +1 -0
- package/dist/cjs/nv-tooltip.cjs.entry.js +1 -1
- package/dist/collection/collection-manifest.json +3 -0
- package/dist/collection/components/nv-accordion-item/nv-accordion-item.js +1 -1
- package/dist/collection/components/nv-accordion-item/nv-accordion-item.js.map +1 -1
- package/dist/collection/components/nv-alert/nv-alert.css +5 -0
- package/dist/collection/components/nv-badge/nv-badge.css +21 -0
- package/dist/collection/components/nv-breadcrumb/nv-breadcrumb.css +2 -0
- package/dist/collection/components/nv-button/styles/nv-button.css +8 -0
- package/dist/collection/components/nv-buttongroup/nv-buttongroup.docs.js +43 -0
- package/dist/collection/components/nv-buttongroup/nv-buttongroup.docs.js.map +1 -0
- package/dist/collection/components/nv-buttongroup/nv-buttongroup.js +217 -0
- package/dist/collection/components/nv-buttongroup/nv-buttongroup.js.map +1 -0
- package/dist/collection/components/nv-buttongroup/nv-buttongroup.utils.js +86 -0
- package/dist/collection/components/nv-buttongroup/nv-buttongroup.utils.js.map +1 -0
- package/dist/collection/components/nv-buttongroup/styles/nv-buttongroup.css +73 -0
- package/dist/collection/components/nv-buttongroup/test/nv-buttongroup.utils.test.js +312 -0
- package/dist/collection/components/nv-buttongroup/test/nv-buttongroup.utils.test.js.map +1 -0
- package/dist/collection/components/nv-calendar/nv-calendar.css +9 -0
- package/dist/collection/components/nv-calendar/nv-calendar.js +44 -25
- package/dist/collection/components/nv-calendar/nv-calendar.js.map +1 -1
- package/dist/collection/components/nv-calendar/nv-calendar.utils.js +68 -0
- package/dist/collection/components/nv-calendar/nv-calendar.utils.js.map +1 -1
- package/dist/collection/components/nv-calendar/partials/calendar-grid.js +5 -3
- package/dist/collection/components/nv-calendar/partials/calendar-grid.js.map +1 -1
- package/dist/collection/components/nv-calendar/partials/day-cell.js +4 -9
- package/dist/collection/components/nv-calendar/partials/day-cell.js.map +1 -1
- package/dist/collection/components/nv-col/nv-col.js +1 -1
- package/dist/collection/components/nv-datagrid/nv-datagrid.css +1 -0
- package/dist/collection/components/nv-datagrid/nv-datagrid.js +2 -2
- package/dist/collection/components/nv-datagridcolumn/nv-datagridcolumn.js +1 -1
- package/dist/collection/components/nv-dialog/nv-dialog.js +1 -1
- package/dist/collection/components/nv-dialogfooter/nv-dialogfooter.js +1 -1
- package/dist/collection/components/nv-dialogheader/nv-dialogheader.js +1 -1
- package/dist/collection/components/nv-fieldcheckbox/nv-fieldcheckbox.css +1 -0
- package/dist/collection/components/nv-fieldcheckbox/nv-fieldcheckbox.js +4 -4
- package/dist/collection/components/nv-fielddate/nv-fielddate.js +63 -94
- package/dist/collection/components/nv-fielddate/nv-fielddate.js.map +1 -1
- package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.js +52 -33
- package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.js.map +1 -1
- package/dist/collection/components/nv-fielddropdown/nv-fielddropdown.js +3 -3
- package/dist/collection/components/nv-fielddropdownitem/nv-fielddropdownitem.js +1 -1
- package/dist/collection/components/nv-fielddropdownitemcheck/nv-fielddropdownitemcheck.js +1 -1
- package/dist/collection/components/nv-fielddropdownitemcheck/nv-fielddropdownitemcheck.js.map +1 -1
- package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.docs.js +885 -122
- package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.docs.js.map +1 -1
- package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.js +561 -89
- package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.js.map +1 -1
- package/dist/collection/components/nv-fieldmultiselect/styles/nv-fieldmultiselect.css +70 -16
- package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.js +3 -3
- package/dist/collection/components/nv-fieldpassword/nv-fieldpassword.js +3 -3
- package/dist/collection/components/nv-fieldradio/nv-fieldradio.css +1 -0
- package/dist/collection/components/nv-fieldradio/nv-fieldradio.js +3 -3
- package/dist/collection/components/nv-fieldselect/nv-fieldselect.js +5 -5
- package/dist/collection/components/nv-fieldslider/nv-fieldslider.js +3 -3
- package/dist/collection/components/nv-fieldtext/nv-fieldtext.js +3 -3
- 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-icon/nv-icon.js +1 -1
- package/dist/collection/components/nv-icon/nv-icons.js +6 -0
- package/dist/collection/components/nv-icon/nv-icons.js.map +1 -1
- package/dist/collection/components/nv-iconbutton/nv-iconbutton.css +4 -0
- 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.css +1 -0
- package/dist/collection/components/nv-toggle/nv-toggle.js +2 -2
- package/dist/collection/components/nv-togglebutton/nv-togglebutton.docs.js +6 -0
- package/dist/collection/components/nv-togglebutton/nv-togglebutton.docs.js.map +1 -0
- package/dist/collection/components/nv-togglebutton/nv-togglebutton.js +191 -0
- package/dist/collection/components/nv-togglebutton/nv-togglebutton.js.map +1 -0
- package/dist/collection/components/nv-togglebutton/styles/nv-togglebutton.css +135 -0
- package/dist/collection/components/nv-togglebuttongroup/nv-togglebuttongroup.docs.js +56 -0
- package/dist/collection/components/nv-togglebuttongroup/nv-togglebuttongroup.docs.js.map +1 -0
- package/dist/collection/components/nv-togglebuttongroup/nv-togglebuttongroup.js +324 -0
- package/dist/collection/components/nv-togglebuttongroup/nv-togglebuttongroup.js.map +1 -0
- package/dist/collection/components/nv-togglebuttongroup/styles/nv-togglebuttongroup.css +45 -0
- package/dist/collection/components/nv-tooltip/nv-tooltip.js +1 -1
- package/dist/collection/utils/constants.js +12 -0
- package/dist/collection/utils/constants.js.map +1 -1
- package/dist/components/index.js +7 -1
- package/dist/components/index.js.map +1 -1
- package/dist/components/nv-accordion-item.js +1 -1
- package/dist/components/nv-accordion.js +4 -4
- package/dist/components/nv-alert.js +3 -3
- package/dist/components/nv-alert.js.map +1 -1
- 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-breadcrumb.js.map +1 -1
- package/dist/components/nv-button.js +1 -1
- package/dist/components/nv-buttongroup.d.ts +11 -0
- package/dist/components/nv-buttongroup.js +221 -0
- package/dist/components/nv-buttongroup.js.map +1 -0
- package/dist/components/nv-calendar.js +1 -1
- package/dist/components/nv-col.js +1 -1
- package/dist/components/nv-datagrid.js +6 -6
- package/dist/components/nv-datagrid.js.map +1 -1
- package/dist/components/nv-datagridcolumn.js +1 -1
- package/dist/components/nv-dialog.js +7 -7
- 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 +70 -102
- package/dist/components/nv-fielddate.js.map +1 -1
- package/dist/components/nv-fielddaterange.js +58 -39
- package/dist/components/nv-fielddaterange.js.map +1 -1
- package/dist/components/nv-fielddropdown.js +8 -8
- package/dist/components/nv-fielddropdownitem.js +1 -1
- package/dist/components/nv-fielddropdownitemcheck.js +1 -1
- package/dist/components/nv-fieldmultiselect.js +399 -41
- package/dist/components/nv-fieldmultiselect.js.map +1 -1
- package/dist/components/nv-fieldnumber.js +1 -1
- package/dist/components/nv-fieldpassword.js +6 -6
- package/dist/components/nv-fieldradio.js +4 -4
- package/dist/components/nv-fieldradio.js.map +1 -1
- package/dist/components/nv-fieldselect.js +8 -8
- package/dist/components/nv-fieldslider.js +7 -7
- package/dist/components/nv-fieldtext.js +1 -1
- package/dist/components/nv-fieldtextarea.js +3 -3
- package/dist/components/nv-fieldtime.js +14 -14
- 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 +4 -4
- package/dist/components/nv-menuitem.js +1 -1
- package/dist/components/nv-popover.js +1 -1
- package/dist/components/nv-row.js +1 -1
- package/dist/components/nv-stack.js +1 -1
- package/dist/components/nv-table.js +2 -2
- package/dist/components/nv-toggle.js +3 -3
- package/dist/components/nv-toggle.js.map +1 -1
- package/dist/components/nv-togglebutton.d.ts +11 -0
- package/dist/components/nv-togglebutton.js +78 -0
- package/dist/components/nv-togglebutton.js.map +1 -0
- package/dist/components/nv-togglebuttongroup.d.ts +11 -0
- package/dist/components/nv-togglebuttongroup.js +196 -0
- package/dist/components/nv-togglebuttongroup.js.map +1 -0
- package/dist/components/nv-tooltip.js +1 -1
- package/dist/components/{p-68ff562f.js → p-0ffb4785.js} +5 -5
- package/dist/components/{p-68ff562f.js.map → p-0ffb4785.js.map} +1 -1
- package/dist/components/{p-8067d283.js → p-195f46f3.js} +2 -2
- package/dist/components/{p-8067d283.js.map → p-195f46f3.js.map} +1 -1
- package/dist/components/{p-e4e1a926.js → p-1bb737fa.js} +3 -3
- package/dist/components/{p-e4e1a926.js.map → p-1bb737fa.js.map} +1 -1
- package/dist/components/{p-db4ba1d9.js → p-2db5d1ab.js} +7 -7
- package/dist/components/{p-db4ba1d9.js.map → p-2db5d1ab.js.map} +1 -1
- package/dist/components/{p-ba87d9d5.js → p-2ef4fb88.js} +3 -3
- package/dist/components/{p-ba87d9d5.js.map → p-2ef4fb88.js.map} +1 -1
- package/dist/components/{p-91a558eb.js → p-32e8e42e.js} +2 -2
- package/dist/components/{p-91a558eb.js.map → p-32e8e42e.js.map} +1 -1
- package/dist/components/{p-6de6866c.js → p-45a625fb.js} +6 -6
- package/dist/components/{p-6de6866c.js.map → p-45a625fb.js.map} +1 -1
- package/dist/components/{p-025b8a78.js → p-50d0db7b.js} +5 -5
- package/dist/components/{p-025b8a78.js.map → p-50d0db7b.js.map} +1 -1
- package/dist/components/{p-ed6686a1.js → p-51876ca1.js} +2 -2
- package/dist/components/{p-ed6686a1.js.map → p-51876ca1.js.map} +1 -1
- package/dist/components/{p-e104c58a.js → p-51a156ff.js} +3 -3
- package/dist/components/p-51a156ff.js.map +1 -0
- package/dist/components/p-8011513c.js +189 -0
- package/dist/components/{p-60064345.js.map → p-8011513c.js.map} +1 -1
- package/dist/components/{p-d32b75ac.js → p-8aee1010.js} +123 -39
- package/dist/components/p-8aee1010.js.map +1 -0
- package/dist/components/{p-79e6b6a2.js → p-9fdaea9a.js} +5 -5
- package/dist/components/p-9fdaea9a.js.map +1 -0
- package/dist/components/{p-6460318d.js → p-a1fe0a5d.js} +4 -4
- package/dist/components/p-a1fe0a5d.js.map +1 -0
- package/dist/components/{p-1f505531.js → p-a3ddec4c.js} +15 -1
- package/dist/components/p-a3ddec4c.js.map +1 -0
- package/dist/components/{p-0143cee0.js → p-a5002d14.js} +6 -6
- package/dist/components/{p-0143cee0.js.map → p-a5002d14.js.map} +1 -1
- package/dist/components/{p-30f970c3.js → p-b659b999.js} +3 -3
- package/dist/components/{p-30f970c3.js.map → p-b659b999.js.map} +1 -1
- package/dist/components/{p-5d5668f0.js → p-cf06032d.js} +4 -4
- package/dist/components/{p-5d5668f0.js.map → p-cf06032d.js.map} +1 -1
- package/dist/components/{p-dfd2d4f0.js → p-fda58a76.js} +2 -2
- package/dist/components/{p-dfd2d4f0.js.map → p-fda58a76.js.map} +1 -1
- package/dist/esm/{constants-4faa1fae.js → constants-23aaef7b.js} +15 -1
- package/dist/esm/constants-23aaef7b.js.map +1 -0
- package/dist/esm/index-a1936cd0.js +12 -0
- package/dist/esm/index.js +7 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/native.js +1 -1
- package/dist/esm/nv-accordion-item.entry.js +1 -1
- package/dist/esm/nv-accordion-item.entry.js.map +1 -1
- package/dist/esm/nv-alert.entry.js +2 -2
- package/dist/esm/nv-alert.entry.js.map +1 -1
- package/dist/esm/nv-avatar.entry.js +1 -1
- package/dist/esm/nv-badge_2.entry.js +2 -2
- package/dist/esm/nv-badge_2.entry.js.map +1 -1
- package/dist/esm/nv-breadcrumb.entry.js +1 -1
- package/dist/esm/nv-breadcrumb.entry.js.map +1 -1
- package/dist/esm/nv-button.entry.js +2 -2
- package/dist/esm/nv-button.entry.js.map +1 -1
- package/dist/esm/nv-buttongroup.entry.js +194 -0
- package/dist/esm/nv-buttongroup.entry.js.map +1 -0
- package/dist/esm/nv-calendar.entry.js +121 -38
- 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 +4 -4
- 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 +3 -3
- package/dist/esm/nv-fieldcheckbox.entry.js +5 -5
- package/dist/esm/nv-fieldcheckbox.entry.js.map +1 -1
- package/dist/esm/nv-fielddate.entry.js +62 -94
- package/dist/esm/nv-fielddate.entry.js.map +1 -1
- package/dist/esm/nv-fielddaterange.entry.js +52 -33
- package/dist/esm/nv-fielddaterange.entry.js.map +1 -1
- package/dist/esm/nv-fielddropdown.entry.js +3 -3
- package/dist/esm/nv-fielddropdownitem.entry.js +1 -1
- package/dist/esm/nv-fieldmultiselect.entry.js +378 -28
- package/dist/esm/nv-fieldmultiselect.entry.js.map +1 -1
- package/dist/esm/nv-fieldnumber.entry.js +3 -3
- package/dist/esm/nv-fieldpassword.entry.js +3 -3
- package/dist/esm/nv-fieldradio.entry.js +4 -4
- package/dist/esm/nv-fieldradio.entry.js.map +1 -1
- package/dist/esm/nv-fieldselect.entry.js +5 -5
- package/dist/esm/nv-fieldslider.entry.js +3 -3
- package/dist/esm/nv-fieldtext.entry.js +3 -3
- package/dist/esm/nv-fieldtextarea.entry.js +3 -3
- package/dist/esm/nv-fieldtime.entry.js +10 -10
- package/dist/esm/nv-icon.entry.js +3 -3
- package/dist/esm/nv-icon.entry.js.map +1 -1
- package/dist/esm/nv-iconbutton_2.entry.js +3 -3
- package/dist/esm/nv-iconbutton_2.entry.js.map +1 -1
- package/dist/esm/nv-menu.entry.js +1 -1
- package/dist/esm/nv-menuitem.entry.js +1 -1
- package/dist/esm/nv-popover.entry.js +1 -1
- package/dist/esm/nv-row.entry.js +1 -1
- package/dist/esm/nv-stack.entry.js +1 -1
- package/dist/esm/nv-table.entry.js +2 -2
- package/dist/esm/nv-toggle.entry.js +3 -3
- package/dist/esm/nv-toggle.entry.js.map +1 -1
- package/dist/esm/nv-togglebutton.entry.js +54 -0
- package/dist/esm/nv-togglebutton.entry.js.map +1 -0
- package/dist/esm/nv-togglebuttongroup.entry.js +168 -0
- package/dist/esm/nv-togglebuttongroup.entry.js.map +1 -0
- package/dist/esm/nv-tooltip.entry.js +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-2a6783ca.entry.js → p-0da8f0d1.entry.js} +2 -2
- package/dist/native/{p-2a6783ca.entry.js.map → p-0da8f0d1.entry.js.map} +1 -1
- package/dist/native/p-0ef94dae.entry.js +2 -0
- package/dist/native/{p-1ad1bff9.entry.js.map → p-0ef94dae.entry.js.map} +1 -1
- package/dist/native/p-13032ec1.entry.js +2 -0
- package/dist/native/p-13032ec1.entry.js.map +1 -0
- package/dist/native/p-184032cb.entry.js +2 -0
- package/dist/native/{p-a73fa60a.entry.js.map → p-184032cb.entry.js.map} +1 -1
- package/dist/native/p-2197ffdf.entry.js +2 -0
- package/dist/native/{p-fa81b77f.entry.js.map → p-2197ffdf.entry.js.map} +1 -1
- package/dist/native/p-234cfa2e.entry.js +2 -0
- package/dist/native/p-2a3325fb.entry.js +2 -0
- package/dist/native/p-2a3325fb.entry.js.map +1 -0
- package/dist/native/{p-3f139780.entry.js → p-2d647761.entry.js} +2 -2
- package/dist/native/{p-ff248eb8.entry.js → p-348c6bb4.entry.js} +2 -2
- package/dist/native/p-397c0fca.entry.js +2 -0
- package/dist/native/{p-51a57a3a.entry.js.map → p-397c0fca.entry.js.map} +1 -1
- package/dist/native/{p-f687e05c.entry.js → p-3da64006.entry.js} +2 -2
- package/dist/native/p-3da64006.entry.js.map +1 -0
- package/dist/native/p-3ed84cd9.entry.js +2 -0
- package/dist/native/{p-fcd52432.entry.js.map → p-3ed84cd9.entry.js.map} +1 -1
- package/dist/native/{p-3ff7a912.entry.js → p-3fcaac6d.entry.js} +2 -2
- package/dist/native/{p-b7ec9a1b.entry.js → p-4302824a.entry.js} +2 -2
- package/dist/native/p-43071c3b.entry.js +2 -0
- package/dist/native/p-44dd9a4c.entry.js +2 -0
- package/dist/native/p-44dd9a4c.entry.js.map +1 -0
- package/dist/native/p-464bb197.entry.js +2 -0
- package/dist/native/p-464bb197.entry.js.map +1 -0
- package/dist/native/{p-916acbd3.entry.js → p-49504fd6.entry.js} +2 -2
- package/dist/native/{p-bc77cac1.entry.js → p-553778e6.entry.js} +2 -2
- package/dist/native/p-553778e6.entry.js.map +1 -0
- package/dist/native/{p-bee62b2b.entry.js → p-5f0776cb.entry.js} +2 -2
- package/dist/native/p-62032cd9.entry.js +2 -0
- package/dist/native/p-62032cd9.entry.js.map +1 -0
- package/dist/native/{p-11012998.entry.js → p-676447d7.entry.js} +3 -3
- package/dist/native/{p-16ef7dd4.entry.js → p-681f2bac.entry.js} +2 -2
- package/dist/native/{p-4b15cff3.entry.js → p-7f0d576b.entry.js} +2 -2
- package/dist/native/{p-68edb2e8.entry.js → p-85f8f11a.entry.js} +2 -2
- package/dist/native/{p-0e005d95.entry.js → p-888ad58e.entry.js} +2 -2
- package/dist/native/{p-34bf336f.entry.js → p-92931ab8.entry.js} +2 -2
- package/dist/native/{p-f00a4552.entry.js → p-94dc9c41.entry.js} +2 -2
- package/dist/native/{p-85a54ef2.entry.js → p-9c5d6827.entry.js} +2 -2
- package/dist/native/{p-08452012.entry.js → p-9f451b8a.entry.js} +3 -3
- package/dist/native/{p-08452012.entry.js.map → p-9f451b8a.entry.js.map} +1 -1
- package/dist/native/{p-1f932a4b.entry.js → p-aacd8789.entry.js} +2 -2
- package/dist/native/p-ac5496e7.entry.js +2 -0
- package/dist/native/{p-516da423.entry.js → p-ad2cc829.entry.js} +2 -2
- package/dist/native/p-ad2cc829.entry.js.map +1 -0
- package/dist/native/p-b2442d4b.entry.js +2 -0
- package/dist/native/{p-a36dc25a.entry.js.map → p-b2442d4b.entry.js.map} +1 -1
- package/dist/native/{p-67c34b8c.entry.js → p-b58fb522.entry.js} +2 -2
- package/dist/native/p-ba9906b7.entry.js +2 -0
- package/dist/native/{p-64cb38e6.entry.js.map → p-ba9906b7.entry.js.map} +1 -1
- package/dist/native/{p-f540db71.entry.js → p-dd023fd6.entry.js} +2 -2
- package/dist/native/p-f033c4ce.entry.js +2 -0
- package/dist/native/p-f033c4ce.entry.js.map +1 -0
- package/dist/native/{p-051db87c.entry.js → p-fb672f90.entry.js} +2 -2
- package/dist/native/p-fc9564b3.js +2 -0
- package/dist/native/p-fc9564b3.js.map +1 -0
- package/dist/types/components/nv-buttongroup/nv-buttongroup.d.ts +50 -0
- package/dist/types/components/nv-buttongroup/nv-buttongroup.docs.d.ts +4 -0
- package/dist/types/components/nv-buttongroup/nv-buttongroup.utils.d.ts +25 -0
- package/dist/types/components/nv-buttongroup/test/nv-buttongroup.utils.test.d.ts +1 -0
- package/dist/types/components/nv-calendar/nv-calendar.d.ts +11 -1
- package/dist/types/components/nv-calendar/nv-calendar.utils.d.ts +31 -0
- package/dist/types/components/nv-calendar/partials/calendar-grid.d.ts +11 -1
- package/dist/types/components/nv-calendar/partials/day-cell.d.ts +7 -1
- package/dist/types/components/nv-fielddate/nv-fielddate.d.ts +4 -19
- package/dist/types/components/nv-fielddaterange/nv-fielddaterange.d.ts +1 -0
- package/dist/types/components/nv-fieldmultiselect/nv-fieldmultiselect.d.ts +116 -23
- package/dist/types/components/nv-icon/nv-icons.d.ts +1 -1
- package/dist/types/components/nv-togglebutton/nv-togglebutton.d.ts +46 -0
- package/dist/types/components/nv-togglebutton/nv-togglebutton.docs.d.ts +4 -0
- package/dist/types/components/nv-togglebuttongroup/nv-togglebuttongroup.d.ts +80 -0
- package/dist/types/components/nv-togglebuttongroup/nv-togglebuttongroup.docs.d.ts +4 -0
- package/dist/types/components.d.ts +289 -2
- package/dist/types/utils/constants.d.ts +10 -0
- package/dist/vscode-data.json +189 -0
- package/hydrate/index.js +1167 -271
- package/hydrate/index.mjs +1167 -271
- package/package.json +14 -2
- package/dist/cjs/constants-8fb8ccc0.js.map +0 -1
- package/dist/components/p-1f505531.js.map +0 -1
- package/dist/components/p-60064345.js +0 -189
- package/dist/components/p-6460318d.js.map +0 -1
- package/dist/components/p-79e6b6a2.js.map +0 -1
- package/dist/components/p-d32b75ac.js.map +0 -1
- package/dist/components/p-e104c58a.js.map +0 -1
- package/dist/esm/constants-4faa1fae.js.map +0 -1
- package/dist/native/p-10ce53ea.entry.js +0 -2
- package/dist/native/p-1ad1bff9.entry.js +0 -2
- package/dist/native/p-516da423.entry.js.map +0 -1
- package/dist/native/p-51a57a3a.entry.js +0 -2
- package/dist/native/p-64cb38e6.entry.js +0 -2
- package/dist/native/p-73c08f3b.entry.js +0 -2
- package/dist/native/p-73c08f3b.entry.js.map +0 -1
- package/dist/native/p-a36dc25a.entry.js +0 -2
- package/dist/native/p-a50f3850.entry.js +0 -2
- package/dist/native/p-a73fa60a.entry.js +0 -2
- package/dist/native/p-b3f9db23.entry.js +0 -2
- package/dist/native/p-b3f9db23.entry.js.map +0 -1
- package/dist/native/p-bc77cac1.entry.js.map +0 -1
- package/dist/native/p-dc34da69.entry.js +0 -2
- package/dist/native/p-dc34da69.entry.js.map +0 -1
- package/dist/native/p-e2d0a77d.js +0 -2
- package/dist/native/p-e2d0a77d.js.map +0 -1
- package/dist/native/p-ec92ee7a.entry.js +0 -2
- package/dist/native/p-f687e05c.entry.js.map +0 -1
- package/dist/native/p-fa81b77f.entry.js +0 -2
- package/dist/native/p-fcd52432.entry.js +0 -2
- /package/dist/native/{p-ec92ee7a.entry.js.map → p-234cfa2e.entry.js.map} +0 -0
- /package/dist/native/{p-3f139780.entry.js.map → p-2d647761.entry.js.map} +0 -0
- /package/dist/native/{p-ff248eb8.entry.js.map → p-348c6bb4.entry.js.map} +0 -0
- /package/dist/native/{p-3ff7a912.entry.js.map → p-3fcaac6d.entry.js.map} +0 -0
- /package/dist/native/{p-b7ec9a1b.entry.js.map → p-4302824a.entry.js.map} +0 -0
- /package/dist/native/{p-10ce53ea.entry.js.map → p-43071c3b.entry.js.map} +0 -0
- /package/dist/native/{p-916acbd3.entry.js.map → p-49504fd6.entry.js.map} +0 -0
- /package/dist/native/{p-bee62b2b.entry.js.map → p-5f0776cb.entry.js.map} +0 -0
- /package/dist/native/{p-11012998.entry.js.map → p-676447d7.entry.js.map} +0 -0
- /package/dist/native/{p-16ef7dd4.entry.js.map → p-681f2bac.entry.js.map} +0 -0
- /package/dist/native/{p-4b15cff3.entry.js.map → p-7f0d576b.entry.js.map} +0 -0
- /package/dist/native/{p-68edb2e8.entry.js.map → p-85f8f11a.entry.js.map} +0 -0
- /package/dist/native/{p-0e005d95.entry.js.map → p-888ad58e.entry.js.map} +0 -0
- /package/dist/native/{p-34bf336f.entry.js.map → p-92931ab8.entry.js.map} +0 -0
- /package/dist/native/{p-f00a4552.entry.js.map → p-94dc9c41.entry.js.map} +0 -0
- /package/dist/native/{p-85a54ef2.entry.js.map → p-9c5d6827.entry.js.map} +0 -0
- /package/dist/native/{p-1f932a4b.entry.js.map → p-aacd8789.entry.js.map} +0 -0
- /package/dist/native/{p-a50f3850.entry.js.map → p-ac5496e7.entry.js.map} +0 -0
- /package/dist/native/{p-67c34b8c.entry.js.map → p-b58fb522.entry.js.map} +0 -0
- /package/dist/native/{p-f540db71.entry.js.map → p-dd023fd6.entry.js.map} +0 -0
- /package/dist/native/{p-051db87c.entry.js.map → p-fb672f90.entry.js.map} +0 -0
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
// @vitest-environment happy-dom
|
|
2
|
+
/* eslint-disable jsdoc/require-jsdoc */
|
|
3
|
+
import { describe, it, expect, beforeEach } from "vitest";
|
|
4
|
+
import { findFirstButtonOrLink, forwardPropsToChildren, } from "../nv-buttongroup.utils";
|
|
5
|
+
describe('nv-buttongroup -> utils', () => {
|
|
6
|
+
describe('findFirstButtonOrLink', () => {
|
|
7
|
+
it('should return the element itself if it is an nv-button', () => {
|
|
8
|
+
const button = document.createElement('nv-button');
|
|
9
|
+
const result = findFirstButtonOrLink(button);
|
|
10
|
+
expect(result).toBe(button);
|
|
11
|
+
});
|
|
12
|
+
it('should return the element itself if it is an nv-iconbutton', () => {
|
|
13
|
+
const iconButton = document.createElement('nv-iconbutton');
|
|
14
|
+
const result = findFirstButtonOrLink(iconButton);
|
|
15
|
+
expect(result).toBe(iconButton);
|
|
16
|
+
});
|
|
17
|
+
it('should return the element itself if it is an anchor tag', () => {
|
|
18
|
+
const anchor = document.createElement('a');
|
|
19
|
+
const result = findFirstButtonOrLink(anchor);
|
|
20
|
+
expect(result).toBe(anchor);
|
|
21
|
+
});
|
|
22
|
+
it('should return null for non-matching elements', () => {
|
|
23
|
+
const div = document.createElement('div');
|
|
24
|
+
const result = findFirstButtonOrLink(div);
|
|
25
|
+
expect(result).toBe(null);
|
|
26
|
+
});
|
|
27
|
+
it('should find nested nv-button within multiple div layers', () => {
|
|
28
|
+
const container = document.createElement('div');
|
|
29
|
+
const wrapper = document.createElement('div');
|
|
30
|
+
const innerWrapper = document.createElement('div');
|
|
31
|
+
const button = document.createElement('nv-button');
|
|
32
|
+
container.appendChild(wrapper);
|
|
33
|
+
wrapper.appendChild(innerWrapper);
|
|
34
|
+
innerWrapper.appendChild(button);
|
|
35
|
+
const result = findFirstButtonOrLink(container);
|
|
36
|
+
expect(result).toBe(button);
|
|
37
|
+
});
|
|
38
|
+
it('should find nested nv-iconbutton within complex structure', () => {
|
|
39
|
+
const container = document.createElement('div');
|
|
40
|
+
const span = document.createElement('span');
|
|
41
|
+
const iconButton = document.createElement('nv-iconbutton');
|
|
42
|
+
container.appendChild(span);
|
|
43
|
+
span.appendChild(iconButton);
|
|
44
|
+
const result = findFirstButtonOrLink(container);
|
|
45
|
+
expect(result).toBe(iconButton);
|
|
46
|
+
});
|
|
47
|
+
it('should find nested anchor tag within container elements', () => {
|
|
48
|
+
const container = document.createElement('div');
|
|
49
|
+
const listItem = document.createElement('li');
|
|
50
|
+
const anchor = document.createElement('a');
|
|
51
|
+
container.appendChild(listItem);
|
|
52
|
+
listItem.appendChild(anchor);
|
|
53
|
+
const result = findFirstButtonOrLink(container);
|
|
54
|
+
expect(result).toBe(anchor);
|
|
55
|
+
});
|
|
56
|
+
it('should return the first found element when multiple exist', () => {
|
|
57
|
+
const container = document.createElement('div');
|
|
58
|
+
const firstButton = document.createElement('nv-button');
|
|
59
|
+
const secondButton = document.createElement('nv-iconbutton');
|
|
60
|
+
const anchor = document.createElement('a');
|
|
61
|
+
container.appendChild(firstButton);
|
|
62
|
+
container.appendChild(secondButton);
|
|
63
|
+
container.appendChild(anchor);
|
|
64
|
+
const result = findFirstButtonOrLink(container);
|
|
65
|
+
expect(result).toBe(firstButton);
|
|
66
|
+
});
|
|
67
|
+
it('should return null when no matching elements exist in deep structure', () => {
|
|
68
|
+
const container = document.createElement('div');
|
|
69
|
+
const wrapper = document.createElement('div');
|
|
70
|
+
const span = document.createElement('span');
|
|
71
|
+
const paragraph = document.createElement('p');
|
|
72
|
+
container.appendChild(wrapper);
|
|
73
|
+
wrapper.appendChild(span);
|
|
74
|
+
span.appendChild(paragraph);
|
|
75
|
+
const result = findFirstButtonOrLink(container);
|
|
76
|
+
expect(result).toBe(null);
|
|
77
|
+
});
|
|
78
|
+
it('should handle empty containers', () => {
|
|
79
|
+
const container = document.createElement('div');
|
|
80
|
+
const result = findFirstButtonOrLink(container);
|
|
81
|
+
expect(result).toBe(null);
|
|
82
|
+
});
|
|
83
|
+
it('should prioritize first occurrence in document order', () => {
|
|
84
|
+
const container = document.createElement('div');
|
|
85
|
+
const firstDiv = document.createElement('div');
|
|
86
|
+
const secondDiv = document.createElement('div');
|
|
87
|
+
const firstButton = document.createElement('nv-button');
|
|
88
|
+
const secondButton = document.createElement('nv-iconbutton');
|
|
89
|
+
// Add buttons to different branches
|
|
90
|
+
firstDiv.appendChild(firstButton);
|
|
91
|
+
secondDiv.appendChild(secondButton);
|
|
92
|
+
container.appendChild(firstDiv);
|
|
93
|
+
container.appendChild(secondDiv);
|
|
94
|
+
const result = findFirstButtonOrLink(container);
|
|
95
|
+
expect(result).toBe(firstButton);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
describe('forwardPropsToChildren', () => {
|
|
99
|
+
let container;
|
|
100
|
+
let props;
|
|
101
|
+
beforeEach(() => {
|
|
102
|
+
container = document.createElement('div');
|
|
103
|
+
props = {
|
|
104
|
+
size: 'medium',
|
|
105
|
+
emphasis: 'high',
|
|
106
|
+
fluid: false,
|
|
107
|
+
};
|
|
108
|
+
});
|
|
109
|
+
it('should set size and emphasis attributes on nv-button elements', () => {
|
|
110
|
+
const button = document.createElement('nv-button');
|
|
111
|
+
container.appendChild(button);
|
|
112
|
+
forwardPropsToChildren(container, props);
|
|
113
|
+
expect(button.getAttribute('size')).toBe('medium');
|
|
114
|
+
expect(button.getAttribute('emphasis')).toBe('high');
|
|
115
|
+
});
|
|
116
|
+
it('should set size and emphasis attributes on nv-iconbutton elements', () => {
|
|
117
|
+
const iconButton = document.createElement('nv-iconbutton');
|
|
118
|
+
container.appendChild(iconButton);
|
|
119
|
+
forwardPropsToChildren(container, props);
|
|
120
|
+
expect(iconButton.getAttribute('size')).toBe('medium');
|
|
121
|
+
expect(iconButton.getAttribute('emphasis')).toBe('high');
|
|
122
|
+
});
|
|
123
|
+
it('should add CSS classes to anchor elements instead of attributes', () => {
|
|
124
|
+
const anchor = document.createElement('a');
|
|
125
|
+
container.appendChild(anchor);
|
|
126
|
+
forwardPropsToChildren(container, props);
|
|
127
|
+
expect(anchor.classList.contains('nv-button')).toBe(true);
|
|
128
|
+
expect(anchor.classList.contains('size-medium')).toBe(true);
|
|
129
|
+
expect(anchor.classList.contains('emphasis-high')).toBe(true);
|
|
130
|
+
expect(anchor.getAttribute('size')).toBe(null);
|
|
131
|
+
expect(anchor.getAttribute('emphasis')).toBe(null);
|
|
132
|
+
});
|
|
133
|
+
it('should handle fluid prop by adding fluid attribute to nv-button', () => {
|
|
134
|
+
const button = document.createElement('nv-button');
|
|
135
|
+
container.appendChild(button);
|
|
136
|
+
props.fluid = true;
|
|
137
|
+
forwardPropsToChildren(container, props);
|
|
138
|
+
expect(button.hasAttribute('fluid')).toBe(true);
|
|
139
|
+
});
|
|
140
|
+
it('should handle fluid prop by removing fluid attribute when false', () => {
|
|
141
|
+
const button = document.createElement('nv-button');
|
|
142
|
+
button.setAttribute('fluid', '');
|
|
143
|
+
container.appendChild(button);
|
|
144
|
+
props.fluid = false;
|
|
145
|
+
forwardPropsToChildren(container, props);
|
|
146
|
+
expect(button.hasAttribute('fluid')).toBe(false);
|
|
147
|
+
});
|
|
148
|
+
it('should add fluid CSS class to anchor elements when fluid is true', () => {
|
|
149
|
+
const anchor = document.createElement('a');
|
|
150
|
+
container.appendChild(anchor);
|
|
151
|
+
props.fluid = true;
|
|
152
|
+
forwardPropsToChildren(container, props);
|
|
153
|
+
expect(anchor.classList.contains('fluid')).toBe(true);
|
|
154
|
+
});
|
|
155
|
+
it('should remove fluid CSS class from anchor elements when fluid is false', () => {
|
|
156
|
+
const anchor = document.createElement('a');
|
|
157
|
+
anchor.classList.add('fluid');
|
|
158
|
+
container.appendChild(anchor);
|
|
159
|
+
props.fluid = false;
|
|
160
|
+
forwardPropsToChildren(container, props);
|
|
161
|
+
expect(anchor.classList.contains('fluid')).toBe(false);
|
|
162
|
+
});
|
|
163
|
+
it('should add first class to first button', () => {
|
|
164
|
+
const firstButton = document.createElement('nv-button');
|
|
165
|
+
const secondButton = document.createElement('nv-button');
|
|
166
|
+
container.appendChild(firstButton);
|
|
167
|
+
container.appendChild(secondButton);
|
|
168
|
+
forwardPropsToChildren(container, props);
|
|
169
|
+
expect(firstButton.classList.contains('first')).toBe(true);
|
|
170
|
+
expect(secondButton.classList.contains('first')).toBe(false);
|
|
171
|
+
});
|
|
172
|
+
it('should add last class to last button', () => {
|
|
173
|
+
const firstButton = document.createElement('nv-button');
|
|
174
|
+
const secondButton = document.createElement('nv-button');
|
|
175
|
+
container.appendChild(firstButton);
|
|
176
|
+
container.appendChild(secondButton);
|
|
177
|
+
forwardPropsToChildren(container, props);
|
|
178
|
+
expect(firstButton.classList.contains('last')).toBe(false);
|
|
179
|
+
expect(secondButton.classList.contains('last')).toBe(true);
|
|
180
|
+
});
|
|
181
|
+
it('should add group-item class to all buttons', () => {
|
|
182
|
+
const firstButton = document.createElement('nv-button');
|
|
183
|
+
const secondButton = document.createElement('nv-iconbutton');
|
|
184
|
+
const anchor = document.createElement('a');
|
|
185
|
+
container.appendChild(firstButton);
|
|
186
|
+
container.appendChild(secondButton);
|
|
187
|
+
container.appendChild(anchor);
|
|
188
|
+
forwardPropsToChildren(container, props);
|
|
189
|
+
expect(firstButton.classList.contains('group-item')).toBe(true);
|
|
190
|
+
expect(secondButton.classList.contains('group-item')).toBe(true);
|
|
191
|
+
expect(anchor.classList.contains('group-item')).toBe(true);
|
|
192
|
+
});
|
|
193
|
+
it('should remove existing positional classes before applying new ones', () => {
|
|
194
|
+
const button = document.createElement('nv-button');
|
|
195
|
+
button.classList.add('first', 'last', 'group-item');
|
|
196
|
+
container.appendChild(button);
|
|
197
|
+
forwardPropsToChildren(container, props);
|
|
198
|
+
// Should have been removed and re-added based on actual position
|
|
199
|
+
expect(button.classList.contains('first')).toBe(true);
|
|
200
|
+
expect(button.classList.contains('last')).toBe(true);
|
|
201
|
+
expect(button.classList.contains('group-item')).toBe(true);
|
|
202
|
+
});
|
|
203
|
+
it('should handle single button (both first and last)', () => {
|
|
204
|
+
const button = document.createElement('nv-button');
|
|
205
|
+
container.appendChild(button);
|
|
206
|
+
forwardPropsToChildren(container, props);
|
|
207
|
+
expect(button.classList.contains('first')).toBe(true);
|
|
208
|
+
expect(button.classList.contains('last')).toBe(true);
|
|
209
|
+
expect(button.classList.contains('group-item')).toBe(true);
|
|
210
|
+
});
|
|
211
|
+
it('should work with nested button elements', () => {
|
|
212
|
+
const wrapper = document.createElement('div');
|
|
213
|
+
const button = document.createElement('nv-button');
|
|
214
|
+
wrapper.appendChild(button);
|
|
215
|
+
container.appendChild(wrapper);
|
|
216
|
+
forwardPropsToChildren(container, props);
|
|
217
|
+
expect(button.getAttribute('size')).toBe('medium');
|
|
218
|
+
expect(button.getAttribute('emphasis')).toBe('high');
|
|
219
|
+
expect(button.classList.contains('first')).toBe(true);
|
|
220
|
+
expect(button.classList.contains('last')).toBe(true);
|
|
221
|
+
expect(button.classList.contains('group-item')).toBe(true);
|
|
222
|
+
});
|
|
223
|
+
it('should work with mixed element types (buttons + links)', () => {
|
|
224
|
+
const button = document.createElement('nv-button');
|
|
225
|
+
const iconButton = document.createElement('nv-iconbutton');
|
|
226
|
+
const anchor = document.createElement('a');
|
|
227
|
+
container.appendChild(button);
|
|
228
|
+
container.appendChild(iconButton);
|
|
229
|
+
container.appendChild(anchor);
|
|
230
|
+
forwardPropsToChildren(container, props);
|
|
231
|
+
// Check button attributes
|
|
232
|
+
expect(button.getAttribute('size')).toBe('medium');
|
|
233
|
+
expect(button.getAttribute('emphasis')).toBe('high');
|
|
234
|
+
expect(button.classList.contains('first')).toBe(true);
|
|
235
|
+
expect(button.classList.contains('group-item')).toBe(true);
|
|
236
|
+
// Check iconbutton attributes
|
|
237
|
+
expect(iconButton.getAttribute('size')).toBe('medium');
|
|
238
|
+
expect(iconButton.getAttribute('emphasis')).toBe('high');
|
|
239
|
+
expect(iconButton.classList.contains('group-item')).toBe(true);
|
|
240
|
+
// Check anchor classes
|
|
241
|
+
expect(anchor.classList.contains('nv-button')).toBe(true);
|
|
242
|
+
expect(anchor.classList.contains('size-medium')).toBe(true);
|
|
243
|
+
expect(anchor.classList.contains('emphasis-high')).toBe(true);
|
|
244
|
+
expect(anchor.classList.contains('last')).toBe(true);
|
|
245
|
+
expect(anchor.classList.contains('group-item')).toBe(true);
|
|
246
|
+
});
|
|
247
|
+
it('should work with empty containers', () => {
|
|
248
|
+
// Should not throw any errors
|
|
249
|
+
expect(() => forwardPropsToChildren(container, props)).not.toThrow();
|
|
250
|
+
});
|
|
251
|
+
it('should handle containers with no valid button/link children', () => {
|
|
252
|
+
const div = document.createElement('div');
|
|
253
|
+
const span = document.createElement('span');
|
|
254
|
+
container.appendChild(div);
|
|
255
|
+
container.appendChild(span);
|
|
256
|
+
// Should not throw any errors
|
|
257
|
+
expect(() => forwardPropsToChildren(container, props)).not.toThrow();
|
|
258
|
+
});
|
|
259
|
+
it('should handle all size values', () => {
|
|
260
|
+
const button = document.createElement('nv-button');
|
|
261
|
+
container.appendChild(button);
|
|
262
|
+
const sizeValues = ['small', 'medium', 'large'];
|
|
263
|
+
sizeValues.forEach(size => {
|
|
264
|
+
props.size = size;
|
|
265
|
+
forwardPropsToChildren(container, props);
|
|
266
|
+
expect(button.getAttribute('size')).toBe(size);
|
|
267
|
+
});
|
|
268
|
+
});
|
|
269
|
+
it('should handle all emphasis values', () => {
|
|
270
|
+
const button = document.createElement('nv-button');
|
|
271
|
+
container.appendChild(button);
|
|
272
|
+
const emphasisValues = ['low', 'medium', 'high'];
|
|
273
|
+
emphasisValues.forEach(emphasis => {
|
|
274
|
+
props.emphasis = emphasis;
|
|
275
|
+
forwardPropsToChildren(container, props);
|
|
276
|
+
expect(button.getAttribute('emphasis')).toBe(emphasis);
|
|
277
|
+
});
|
|
278
|
+
});
|
|
279
|
+
it('should apply different logic for nv-button vs anchor elements', () => {
|
|
280
|
+
const button = document.createElement('nv-button');
|
|
281
|
+
const anchor = document.createElement('a');
|
|
282
|
+
container.appendChild(button);
|
|
283
|
+
container.appendChild(anchor);
|
|
284
|
+
forwardPropsToChildren(container, props);
|
|
285
|
+
// Button should have attributes
|
|
286
|
+
expect(button.getAttribute('size')).toBe('medium');
|
|
287
|
+
expect(button.getAttribute('emphasis')).toBe('high');
|
|
288
|
+
expect(button.hasAttribute('fluid')).toBe(false);
|
|
289
|
+
// Anchor should have classes
|
|
290
|
+
expect(anchor.getAttribute('size')).toBe(null);
|
|
291
|
+
expect(anchor.getAttribute('emphasis')).toBe(null);
|
|
292
|
+
expect(anchor.classList.contains('size-medium')).toBe(true);
|
|
293
|
+
expect(anchor.classList.contains('emphasis-high')).toBe(true);
|
|
294
|
+
expect(anchor.classList.contains('fluid')).toBe(false);
|
|
295
|
+
});
|
|
296
|
+
it('should handle complex nested structures with multiple levels', () => {
|
|
297
|
+
const outerDiv = document.createElement('div');
|
|
298
|
+
const innerDiv = document.createElement('div');
|
|
299
|
+
const button = document.createElement('nv-button');
|
|
300
|
+
outerDiv.appendChild(innerDiv);
|
|
301
|
+
innerDiv.appendChild(button);
|
|
302
|
+
container.appendChild(outerDiv);
|
|
303
|
+
forwardPropsToChildren(container, props);
|
|
304
|
+
expect(button.getAttribute('size')).toBe('medium');
|
|
305
|
+
expect(button.getAttribute('emphasis')).toBe('high');
|
|
306
|
+
expect(button.classList.contains('first')).toBe(true);
|
|
307
|
+
expect(button.classList.contains('last')).toBe(true);
|
|
308
|
+
expect(button.classList.contains('group-item')).toBe(true);
|
|
309
|
+
});
|
|
310
|
+
});
|
|
311
|
+
});
|
|
312
|
+
//# sourceMappingURL=nv-buttongroup.utils.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nv-buttongroup.utils.test.js","sourceRoot":"","sources":["../../../../src/components/nv-buttongroup/test/nv-buttongroup.utils.test.ts"],"names":[],"mappings":"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","sourcesContent":["// @vitest-environment happy-dom\n/* eslint-disable jsdoc/require-jsdoc */\n\nimport { describe, it, expect, beforeEach } from 'vitest';\nimport {\n findFirstButtonOrLink,\n forwardPropsToChildren,\n} from '../nv-buttongroup.utils';\n\ndescribe('nv-buttongroup -> utils', () => {\n describe('findFirstButtonOrLink', () => {\n it('should return the element itself if it is an nv-button', () => {\n const button = document.createElement('nv-button');\n const result = findFirstButtonOrLink(button as HTMLElement);\n expect(result).toBe(button);\n });\n\n it('should return the element itself if it is an nv-iconbutton', () => {\n const iconButton = document.createElement('nv-iconbutton');\n const result = findFirstButtonOrLink(iconButton as HTMLElement);\n expect(result).toBe(iconButton);\n });\n\n it('should return the element itself if it is an anchor tag', () => {\n const anchor = document.createElement('a');\n const result = findFirstButtonOrLink(anchor as HTMLElement);\n expect(result).toBe(anchor);\n });\n\n it('should return null for non-matching elements', () => {\n const div = document.createElement('div');\n const result = findFirstButtonOrLink(div as HTMLElement);\n expect(result).toBe(null);\n });\n\n it('should find nested nv-button within multiple div layers', () => {\n const container = document.createElement('div');\n const wrapper = document.createElement('div');\n const innerWrapper = document.createElement('div');\n const button = document.createElement('nv-button');\n\n container.appendChild(wrapper);\n wrapper.appendChild(innerWrapper);\n innerWrapper.appendChild(button);\n\n const result = findFirstButtonOrLink(container as HTMLElement);\n expect(result).toBe(button);\n });\n\n it('should find nested nv-iconbutton within complex structure', () => {\n const container = document.createElement('div');\n const span = document.createElement('span');\n const iconButton = document.createElement('nv-iconbutton');\n\n container.appendChild(span);\n span.appendChild(iconButton);\n\n const result = findFirstButtonOrLink(container as HTMLElement);\n expect(result).toBe(iconButton);\n });\n\n it('should find nested anchor tag within container elements', () => {\n const container = document.createElement('div');\n const listItem = document.createElement('li');\n const anchor = document.createElement('a');\n\n container.appendChild(listItem);\n listItem.appendChild(anchor);\n\n const result = findFirstButtonOrLink(container as HTMLElement);\n expect(result).toBe(anchor);\n });\n\n it('should return the first found element when multiple exist', () => {\n const container = document.createElement('div');\n const firstButton = document.createElement('nv-button');\n const secondButton = document.createElement('nv-iconbutton');\n const anchor = document.createElement('a');\n\n container.appendChild(firstButton);\n container.appendChild(secondButton);\n container.appendChild(anchor);\n\n const result = findFirstButtonOrLink(container as HTMLElement);\n expect(result).toBe(firstButton);\n });\n\n it('should return null when no matching elements exist in deep structure', () => {\n const container = document.createElement('div');\n const wrapper = document.createElement('div');\n const span = document.createElement('span');\n const paragraph = document.createElement('p');\n\n container.appendChild(wrapper);\n wrapper.appendChild(span);\n span.appendChild(paragraph);\n\n const result = findFirstButtonOrLink(container as HTMLElement);\n expect(result).toBe(null);\n });\n\n it('should handle empty containers', () => {\n const container = document.createElement('div');\n const result = findFirstButtonOrLink(container as HTMLElement);\n expect(result).toBe(null);\n });\n\n it('should prioritize first occurrence in document order', () => {\n const container = document.createElement('div');\n const firstDiv = document.createElement('div');\n const secondDiv = document.createElement('div');\n const firstButton = document.createElement('nv-button');\n const secondButton = document.createElement('nv-iconbutton');\n\n // Add buttons to different branches\n firstDiv.appendChild(firstButton);\n secondDiv.appendChild(secondButton);\n container.appendChild(firstDiv);\n container.appendChild(secondDiv);\n\n const result = findFirstButtonOrLink(container as HTMLElement);\n expect(result).toBe(firstButton);\n });\n });\n\n describe('forwardPropsToChildren', () => {\n let container: HTMLElement;\n let props: { size: string; emphasis: string; fluid: boolean };\n\n beforeEach(() => {\n container = document.createElement('div') as HTMLElement;\n props = {\n size: 'medium',\n emphasis: 'high',\n fluid: false,\n };\n });\n\n it('should set size and emphasis attributes on nv-button elements', () => {\n const button = document.createElement('nv-button');\n container.appendChild(button);\n\n forwardPropsToChildren(container, props);\n\n expect(button.getAttribute('size')).toBe('medium');\n expect(button.getAttribute('emphasis')).toBe('high');\n });\n\n it('should set size and emphasis attributes on nv-iconbutton elements', () => {\n const iconButton = document.createElement('nv-iconbutton');\n container.appendChild(iconButton);\n\n forwardPropsToChildren(container, props);\n\n expect(iconButton.getAttribute('size')).toBe('medium');\n expect(iconButton.getAttribute('emphasis')).toBe('high');\n });\n\n it('should add CSS classes to anchor elements instead of attributes', () => {\n const anchor = document.createElement('a');\n container.appendChild(anchor);\n\n forwardPropsToChildren(container, props);\n\n expect(anchor.classList.contains('nv-button')).toBe(true);\n expect(anchor.classList.contains('size-medium')).toBe(true);\n expect(anchor.classList.contains('emphasis-high')).toBe(true);\n expect(anchor.getAttribute('size')).toBe(null);\n expect(anchor.getAttribute('emphasis')).toBe(null);\n });\n\n it('should handle fluid prop by adding fluid attribute to nv-button', () => {\n const button = document.createElement('nv-button');\n container.appendChild(button);\n\n props.fluid = true;\n forwardPropsToChildren(container, props);\n\n expect(button.hasAttribute('fluid')).toBe(true);\n });\n\n it('should handle fluid prop by removing fluid attribute when false', () => {\n const button = document.createElement('nv-button');\n button.setAttribute('fluid', '');\n container.appendChild(button);\n\n props.fluid = false;\n forwardPropsToChildren(container, props);\n\n expect(button.hasAttribute('fluid')).toBe(false);\n });\n\n it('should add fluid CSS class to anchor elements when fluid is true', () => {\n const anchor = document.createElement('a');\n container.appendChild(anchor);\n\n props.fluid = true;\n forwardPropsToChildren(container, props);\n\n expect(anchor.classList.contains('fluid')).toBe(true);\n });\n\n it('should remove fluid CSS class from anchor elements when fluid is false', () => {\n const anchor = document.createElement('a');\n anchor.classList.add('fluid');\n container.appendChild(anchor);\n\n props.fluid = false;\n forwardPropsToChildren(container, props);\n\n expect(anchor.classList.contains('fluid')).toBe(false);\n });\n\n it('should add first class to first button', () => {\n const firstButton = document.createElement('nv-button');\n const secondButton = document.createElement('nv-button');\n container.appendChild(firstButton);\n container.appendChild(secondButton);\n\n forwardPropsToChildren(container, props);\n\n expect(firstButton.classList.contains('first')).toBe(true);\n expect(secondButton.classList.contains('first')).toBe(false);\n });\n\n it('should add last class to last button', () => {\n const firstButton = document.createElement('nv-button');\n const secondButton = document.createElement('nv-button');\n container.appendChild(firstButton);\n container.appendChild(secondButton);\n\n forwardPropsToChildren(container, props);\n\n expect(firstButton.classList.contains('last')).toBe(false);\n expect(secondButton.classList.contains('last')).toBe(true);\n });\n\n it('should add group-item class to all buttons', () => {\n const firstButton = document.createElement('nv-button');\n const secondButton = document.createElement('nv-iconbutton');\n const anchor = document.createElement('a');\n container.appendChild(firstButton);\n container.appendChild(secondButton);\n container.appendChild(anchor);\n\n forwardPropsToChildren(container, props);\n\n expect(firstButton.classList.contains('group-item')).toBe(true);\n expect(secondButton.classList.contains('group-item')).toBe(true);\n expect(anchor.classList.contains('group-item')).toBe(true);\n });\n\n it('should remove existing positional classes before applying new ones', () => {\n const button = document.createElement('nv-button');\n button.classList.add('first', 'last', 'group-item');\n container.appendChild(button);\n\n forwardPropsToChildren(container, props);\n\n // Should have been removed and re-added based on actual position\n expect(button.classList.contains('first')).toBe(true);\n expect(button.classList.contains('last')).toBe(true);\n expect(button.classList.contains('group-item')).toBe(true);\n });\n\n it('should handle single button (both first and last)', () => {\n const button = document.createElement('nv-button');\n container.appendChild(button);\n\n forwardPropsToChildren(container, props);\n\n expect(button.classList.contains('first')).toBe(true);\n expect(button.classList.contains('last')).toBe(true);\n expect(button.classList.contains('group-item')).toBe(true);\n });\n\n it('should work with nested button elements', () => {\n const wrapper = document.createElement('div');\n const button = document.createElement('nv-button');\n wrapper.appendChild(button);\n container.appendChild(wrapper);\n\n forwardPropsToChildren(container, props);\n\n expect(button.getAttribute('size')).toBe('medium');\n expect(button.getAttribute('emphasis')).toBe('high');\n expect(button.classList.contains('first')).toBe(true);\n expect(button.classList.contains('last')).toBe(true);\n expect(button.classList.contains('group-item')).toBe(true);\n });\n\n it('should work with mixed element types (buttons + links)', () => {\n const button = document.createElement('nv-button');\n const iconButton = document.createElement('nv-iconbutton');\n const anchor = document.createElement('a');\n\n container.appendChild(button);\n container.appendChild(iconButton);\n container.appendChild(anchor);\n\n forwardPropsToChildren(container, props);\n\n // Check button attributes\n expect(button.getAttribute('size')).toBe('medium');\n expect(button.getAttribute('emphasis')).toBe('high');\n expect(button.classList.contains('first')).toBe(true);\n expect(button.classList.contains('group-item')).toBe(true);\n\n // Check iconbutton attributes\n expect(iconButton.getAttribute('size')).toBe('medium');\n expect(iconButton.getAttribute('emphasis')).toBe('high');\n expect(iconButton.classList.contains('group-item')).toBe(true);\n\n // Check anchor classes\n expect(anchor.classList.contains('nv-button')).toBe(true);\n expect(anchor.classList.contains('size-medium')).toBe(true);\n expect(anchor.classList.contains('emphasis-high')).toBe(true);\n expect(anchor.classList.contains('last')).toBe(true);\n expect(anchor.classList.contains('group-item')).toBe(true);\n });\n\n it('should work with empty containers', () => {\n // Should not throw any errors\n expect(() => forwardPropsToChildren(container, props)).not.toThrow();\n });\n\n it('should handle containers with no valid button/link children', () => {\n const div = document.createElement('div');\n const span = document.createElement('span');\n container.appendChild(div);\n container.appendChild(span);\n\n // Should not throw any errors\n expect(() => forwardPropsToChildren(container, props)).not.toThrow();\n });\n\n it('should handle all size values', () => {\n const button = document.createElement('nv-button');\n container.appendChild(button);\n\n const sizeValues = ['small', 'medium', 'large'];\n\n sizeValues.forEach(size => {\n props.size = size;\n forwardPropsToChildren(container, props);\n expect(button.getAttribute('size')).toBe(size);\n });\n });\n\n it('should handle all emphasis values', () => {\n const button = document.createElement('nv-button');\n container.appendChild(button);\n\n const emphasisValues = ['low', 'medium', 'high'];\n\n emphasisValues.forEach(emphasis => {\n props.emphasis = emphasis;\n forwardPropsToChildren(container, props);\n expect(button.getAttribute('emphasis')).toBe(emphasis);\n });\n });\n\n it('should apply different logic for nv-button vs anchor elements', () => {\n const button = document.createElement('nv-button');\n const anchor = document.createElement('a');\n container.appendChild(button);\n container.appendChild(anchor);\n\n forwardPropsToChildren(container, props);\n\n // Button should have attributes\n expect(button.getAttribute('size')).toBe('medium');\n expect(button.getAttribute('emphasis')).toBe('high');\n expect(button.hasAttribute('fluid')).toBe(false);\n\n // Anchor should have classes\n expect(anchor.getAttribute('size')).toBe(null);\n expect(anchor.getAttribute('emphasis')).toBe(null);\n expect(anchor.classList.contains('size-medium')).toBe(true);\n expect(anchor.classList.contains('emphasis-high')).toBe(true);\n expect(anchor.classList.contains('fluid')).toBe(false);\n });\n\n it('should handle complex nested structures with multiple levels', () => {\n const outerDiv = document.createElement('div');\n const innerDiv = document.createElement('div');\n const button = document.createElement('nv-button');\n\n outerDiv.appendChild(innerDiv);\n innerDiv.appendChild(button);\n container.appendChild(outerDiv);\n\n forwardPropsToChildren(container, props);\n\n expect(button.getAttribute('size')).toBe('medium');\n expect(button.getAttribute('emphasis')).toBe('high');\n expect(button.classList.contains('first')).toBe(true);\n expect(button.classList.contains('last')).toBe(true);\n expect(button.classList.contains('group-item')).toBe(true);\n });\n });\n});\n"]}
|
|
@@ -329,6 +329,15 @@ nv-calendar {
|
|
|
329
329
|
.day.is-today.selected::after::after {
|
|
330
330
|
background-color: var(--components-calendar-cell-dot-selected);
|
|
331
331
|
}
|
|
332
|
+
.day.hover-range {
|
|
333
|
+
background-color: var(--components-calendar-cell-background-hover);
|
|
334
|
+
}
|
|
335
|
+
.day.hover-blocked {
|
|
336
|
+
background-color: var(--components-calendar-cell-background-hover);
|
|
337
|
+
}
|
|
338
|
+
.day.disabled.hover-blocked {
|
|
339
|
+
background-color: transparent;
|
|
340
|
+
}
|
|
332
341
|
|
|
333
342
|
.calendar-footer {
|
|
334
343
|
display: flex;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Host, h, } from "@stencil/core";
|
|
2
2
|
import { WEEK_ABBREVIATIONS, CUSTOM_DAY_NAMES, CUSTOM_MONTH_NAMES, } from "../../utils/constants";
|
|
3
|
-
import { parseDate,
|
|
3
|
+
import { parseDate, formatDate, isSameOrAfter, isSameOrBefore, isInHoverRange, isHoverRangeValid, isDateDisabledUtil, } from "./nv-calendar.utils";
|
|
4
4
|
// Import partials
|
|
5
5
|
import { CalendarHeader, CalendarGrid, WeekNumbers, CalendarShortcuts, CalendarActions, } from "./partials";
|
|
6
6
|
/**
|
|
@@ -67,6 +67,7 @@ export class NvCalendar {
|
|
|
67
67
|
this.selectedDate = null;
|
|
68
68
|
this.startDate = null;
|
|
69
69
|
this.endDate = null;
|
|
70
|
+
this.hoverDate = null;
|
|
70
71
|
/** List of formatted months for the selector */
|
|
71
72
|
this.months = [];
|
|
72
73
|
/**
|
|
@@ -85,6 +86,12 @@ export class NvCalendar {
|
|
|
85
86
|
.split(',')
|
|
86
87
|
.map(v => v.trim())
|
|
87
88
|
.filter(Boolean);
|
|
89
|
+
if (this.selectionType === 'range' && values.length < 2) {
|
|
90
|
+
console.warn(`Invalid date range format: ${value}`);
|
|
91
|
+
this.startDate = null;
|
|
92
|
+
this.endDate = null;
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
88
95
|
if (this.selectionType === 'single' && values.length >= 1) {
|
|
89
96
|
const parsedDate = parseDate(values[0], this.dateFormat);
|
|
90
97
|
if (parsedDate) {
|
|
@@ -129,7 +136,7 @@ export class NvCalendar {
|
|
|
129
136
|
}
|
|
130
137
|
else {
|
|
131
138
|
// Handle malformed dates gracefully - reset state
|
|
132
|
-
console.warn(`Invalid date range format: ${values[0]}, ${values[1]}`);
|
|
139
|
+
console.warn(`Invalid date range format: ${values === null || values === void 0 ? void 0 : values[0]}, ${values === null || values === void 0 ? void 0 : values[1]}`);
|
|
133
140
|
this.startDate = null;
|
|
134
141
|
this.endDate = null;
|
|
135
142
|
if (!this.showActions) {
|
|
@@ -155,11 +162,29 @@ export class NvCalendar {
|
|
|
155
162
|
});
|
|
156
163
|
this.currentDate = newDate;
|
|
157
164
|
};
|
|
165
|
+
this.handleMouseLeave = () => {
|
|
166
|
+
this.hoverDate = null;
|
|
167
|
+
};
|
|
168
|
+
this.handleDayHover = (event) => {
|
|
169
|
+
const target = event.target;
|
|
170
|
+
const dateStr = target.getAttribute('data-date');
|
|
171
|
+
if (dateStr &&
|
|
172
|
+
this.selectionType === 'range' &&
|
|
173
|
+
this.startDate &&
|
|
174
|
+
!this.endDate) {
|
|
175
|
+
this.hoverDate = new Date(dateStr);
|
|
176
|
+
}
|
|
177
|
+
};
|
|
158
178
|
/**
|
|
159
179
|
* Handles date selection based on the mode
|
|
160
|
-
* @param {
|
|
180
|
+
* @param {MouseEvent} event - The mouse event from the click.
|
|
161
181
|
*/
|
|
162
|
-
this.handleDateSelection = (
|
|
182
|
+
this.handleDateSelection = (event) => {
|
|
183
|
+
const target = event.target;
|
|
184
|
+
const dateStr = target.getAttribute('data-date');
|
|
185
|
+
if (!dateStr)
|
|
186
|
+
return;
|
|
187
|
+
const date = new Date(dateStr);
|
|
163
188
|
if (this.isDateDisabled(date)) {
|
|
164
189
|
return;
|
|
165
190
|
}
|
|
@@ -205,6 +230,7 @@ export class NvCalendar {
|
|
|
205
230
|
else {
|
|
206
231
|
// Complete range selection
|
|
207
232
|
this.endDate = date;
|
|
233
|
+
this.hoverDate = null;
|
|
208
234
|
// Ensure correct order
|
|
209
235
|
if (this.startDate > this.endDate) {
|
|
210
236
|
[this.startDate, this.endDate] = [this.endDate, this.startDate];
|
|
@@ -236,24 +262,7 @@ export class NvCalendar {
|
|
|
236
262
|
* @returns {boolean} true if the date is disabled
|
|
237
263
|
*/
|
|
238
264
|
this.isDateDisabled = (date) => {
|
|
239
|
-
|
|
240
|
-
return true;
|
|
241
|
-
// Minimum bound check
|
|
242
|
-
if (this.min) {
|
|
243
|
-
const minDate = parseDate(this.min, this.dateFormat);
|
|
244
|
-
if (minDate && date < minDate) {
|
|
245
|
-
return true;
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
// Maximum bound check
|
|
249
|
-
if (this.max) {
|
|
250
|
-
const maxDate = parseDate(this.max, this.dateFormat);
|
|
251
|
-
if (maxDate && date > maxDate) {
|
|
252
|
-
return true;
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
// Check disabled dates
|
|
256
|
-
return this.parsedDisabledDates.some(disabledDate => isSameDate(date, disabledDate, { isUTCMode: this.isUTCMode }));
|
|
265
|
+
return isDateDisabledUtil(date, this.min, this.max, this.parsedDisabledDates, this.dateFormat, this.isUTCMode);
|
|
257
266
|
};
|
|
258
267
|
/**
|
|
259
268
|
* Checks if a date is in the selected range
|
|
@@ -650,6 +659,15 @@ export class NvCalendar {
|
|
|
650
659
|
index) => {
|
|
651
660
|
return (h(WeekNumbers, { weeks: weeks, localizedWeekText: this.getLocalizedWeekText(), selectionType: this.selectionType, onWeekSelect: this.handleWeekSelection, calendarIndex: index }));
|
|
652
661
|
};
|
|
662
|
+
/**
|
|
663
|
+
* Checks if the hover range is valid
|
|
664
|
+
* @param {Date} startDate - Start date
|
|
665
|
+
* @param {Date | null} hoverDate - Hovered date
|
|
666
|
+
* @returns {boolean} true if the hover range is valid
|
|
667
|
+
*/
|
|
668
|
+
this.isHoverRangeValidFn = (startDate, hoverDate) => {
|
|
669
|
+
return isHoverRangeValid(startDate, hoverDate, this.min, this.max, this.parsedDisabledDates, this.dateFormat, this.isUTCMode);
|
|
670
|
+
};
|
|
653
671
|
/**
|
|
654
672
|
* Renders the calendar
|
|
655
673
|
* @param {number} index - Calendar index
|
|
@@ -672,7 +690,7 @@ export class NvCalendar {
|
|
|
672
690
|
targetDate.setUTCMonth(targetDate.getUTCMonth() + offset);
|
|
673
691
|
const year = targetDate.getUTCFullYear();
|
|
674
692
|
const month = targetDate.getUTCMonth();
|
|
675
|
-
return (h("div", { class: "calendar-wrapper" }, h("div", { class: "calendar-container", key: `calendar-${index}-${year}-${month}` }, 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" }))));
|
|
693
|
+
return (h("div", { class: "calendar-wrapper" }, h("div", { class: "calendar-container", key: `calendar-${index}-${year}-${month}` }, 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, onDayHover: this.handleDayHover, onMouseLeave: this.handleMouseLeave, hoverDate: this.hoverDate, isInHoverRange: isInHoverRange, isHoverRangeValid: this.isHoverRangeValidFn }))), index < this.numberOfCalendars - 1 && (h("div", { class: "calendar-separator" }))));
|
|
676
694
|
};
|
|
677
695
|
/**
|
|
678
696
|
* Renders the shortcuts
|
|
@@ -892,8 +910,8 @@ export class NvCalendar {
|
|
|
892
910
|
* @slot default - Child content of the component.
|
|
893
911
|
*/
|
|
894
912
|
render() {
|
|
895
|
-
return (h(Host, { key: '
|
|
896
|
-
this.hasActions) && (h("div", { key: '
|
|
913
|
+
return (h(Host, { key: '15aa3c2afb51ea1fbd16de597889d687fb8d1982' }, h("div", { key: '6492b58cb2b5c9bb7fd6c40e8f37e9c2142b5827', class: "datepicker-root" }, h("div", { key: '3cb216c3af4900b48c2dcd09a0a0034c7ebf622d', class: `datepicker-container ${this.numberOfCalendars === 1 ? 'datepicker-container-single' : ''}` }, h("div", { key: '0663841721d5db871e7ede0ec396affa560ea99d', 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') ||
|
|
914
|
+
this.hasActions) && (h("div", { key: '0a17a627cb1e4a4cb2b91aa104403b00d055bce5', class: "datepicker-controls" }, this.shortcutsPlacement === 'bottom' && this.renderShortcuts(), this.hasActions && this.renderActions())))), h("slot", { key: '3104795c8cc9c81a6aca7e426a145e3966a4361e' })));
|
|
897
915
|
}
|
|
898
916
|
static get is() { return "nv-calendar"; }
|
|
899
917
|
static get originalStyleUrls() {
|
|
@@ -1240,6 +1258,7 @@ export class NvCalendar {
|
|
|
1240
1258
|
"selectedDate": {},
|
|
1241
1259
|
"startDate": {},
|
|
1242
1260
|
"endDate": {},
|
|
1261
|
+
"hoverDate": {},
|
|
1243
1262
|
"months": {}
|
|
1244
1263
|
};
|
|
1245
1264
|
}
|