@nova-design-system/nova-webcomponents 3.15.0 → 3.17.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-c56424e5.js → index-93d3b2f8.js} +9 -6
- package/dist/cjs/index-93d3b2f8.js.map +1 -0
- package/dist/cjs/index.cjs.js +6 -1
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/native.cjs.js +2 -2
- package/dist/cjs/nv-accordion-item.cjs.entry.js +2 -2
- package/dist/cjs/nv-accordion-item.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-accordion.cjs.entry.js +6 -6
- package/dist/cjs/nv-accordion.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 +2 -2
- package/dist/cjs/nv-avatar.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-badge_2.cjs.entry.js +1 -1
- package/dist/cjs/nv-breadcrumb.cjs.entry.js +2 -2
- package/dist/cjs/nv-breadcrumb.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-breadcrumbs.cjs.entry.js +1 -1
- package/dist/cjs/nv-button.cjs.entry.js +3 -9
- package/dist/cjs/nv-button.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-buttongroup.cjs.entry.js +1 -1
- package/dist/cjs/nv-calendar.cjs.entry.js +1 -1
- package/dist/cjs/nv-col.cjs.entry.js +1 -1
- package/dist/cjs/nv-datagrid.cjs.entry.js +177 -10
- 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 +32 -29
- package/dist/cjs/nv-dialog.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-dialogfooter_2.cjs.entry.js +2 -2
- package/dist/cjs/nv-dialogfooter_2.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-fieldcheckbox.cjs.entry.js +2 -2
- package/dist/cjs/nv-fieldcheckbox.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-fielddate.cjs.entry.js +51 -26
- package/dist/cjs/nv-fielddate.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-fielddaterange.cjs.entry.js +68 -42
- package/dist/cjs/nv-fielddaterange.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-fielddropdown.cjs.entry.js +33 -7
- 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 +187 -156
- 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 +2 -2
- package/dist/cjs/nv-fieldradio.cjs.entry.js.map +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 +2 -2
- package/dist/cjs/nv-fieldslider.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-fieldtext.cjs.entry.js +2 -2
- package/dist/cjs/nv-fieldtext.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-fieldtextarea.cjs.entry.js +2 -2
- package/dist/cjs/nv-fieldtextarea.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-fieldtime.cjs.entry.js +25 -12
- package/dist/cjs/nv-fieldtime.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-icon.cjs.entry.js +2 -2
- package/dist/cjs/nv-icon.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-iconbutton_2.cjs.entry.js +2 -2
- package/dist/cjs/nv-iconbutton_2.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-menu.cjs.entry.js +24 -9
- package/dist/cjs/nv-menu.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-menuitem.cjs.entry.js +1 -1
- package/dist/cjs/nv-notification.cjs.entry.js +2 -2
- package/dist/cjs/nv-notification.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-notificationcontainer.cjs.entry.js +1 -1
- package/dist/cjs/nv-popover.cjs.entry.js +67 -61
- package/dist/cjs/nv-popover.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-row.cjs.entry.js +1 -1
- package/dist/cjs/nv-split.cjs.entry.js +339 -0
- package/dist/cjs/nv-split.cjs.entry.js.map +1 -0
- package/dist/cjs/nv-stack.cjs.entry.js +2 -2
- package/dist/cjs/nv-table.cjs.entry.js +216 -310
- package/dist/cjs/nv-table.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-toggle.cjs.entry.js +2 -2
- package/dist/cjs/nv-toggle.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-togglebutton.cjs.entry.js +1 -1
- package/dist/cjs/nv-togglebuttongroup.cjs.entry.js +2 -2
- package/dist/cjs/nv-togglebuttongroup.cjs.entry.js.map +1 -1
- package/dist/cjs/nv-tooltip.cjs.entry.js +1 -1
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/nv-accordion/nv-accordion.js +12 -9
- package/dist/collection/components/nv-accordion/nv-accordion.js.map +1 -1
- package/dist/collection/components/nv-accordion-item/nv-accordion-item.js.map +1 -1
- package/dist/collection/components/nv-accordion-item/styles/nv-accordion-item.css +1 -1
- package/dist/collection/components/nv-alert/nv-alert.css +1 -1
- package/dist/collection/components/nv-avatar/nv-avatar.css +1 -1
- package/dist/collection/components/nv-breadcrumb/nv-breadcrumb.css +1 -1
- package/dist/collection/components/nv-button/nv-button.js +1 -13
- package/dist/collection/components/nv-button/nv-button.js.map +1 -1
- package/dist/collection/components/nv-button/styles/nv-button.css +1 -1
- package/dist/collection/components/nv-datagrid/nv-datagrid.css +2 -2
- package/dist/collection/components/nv-dialog/nv-dialog.css +2 -2
- package/dist/collection/components/nv-dialog/nv-dialog.docs.js +13 -0
- package/dist/collection/components/nv-dialog/nv-dialog.docs.js.map +1 -1
- package/dist/collection/components/nv-dialog/nv-dialog.js +30 -27
- package/dist/collection/components/nv-dialog/nv-dialog.js.map +1 -1
- package/dist/collection/components/nv-dialogheader/nv-dialogheader.css +4 -4
- package/dist/collection/components/nv-fieldcheckbox/nv-fieldcheckbox.css +3 -3
- package/dist/collection/components/nv-fielddate/nv-fielddate.js +49 -24
- package/dist/collection/components/nv-fielddate/nv-fielddate.js.map +1 -1
- package/dist/collection/components/nv-fielddate/styles/nv-fielddate.css +8 -8
- package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.js +66 -43
- package/dist/collection/components/nv-fielddaterange/nv-fielddaterange.js.map +1 -1
- package/dist/collection/components/nv-fielddaterange/styles/nv-fielddaterange.css +8 -8
- package/dist/collection/components/nv-fielddropdown/nv-fielddropdown.docs.js +26 -4
- package/dist/collection/components/nv-fielddropdown/nv-fielddropdown.docs.js.map +1 -1
- package/dist/collection/components/nv-fielddropdown/nv-fielddropdown.js +32 -4
- package/dist/collection/components/nv-fielddropdown/nv-fielddropdown.js.map +1 -1
- package/dist/collection/components/nv-fielddropdown/styles/nv-fielddropdown.css +9 -9
- package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.js +186 -153
- package/dist/collection/components/nv-fieldmultiselect/nv-fieldmultiselect.js.map +1 -1
- package/dist/collection/components/nv-fieldmultiselect/styles/nv-fieldmultiselect.css +9 -9
- package/dist/collection/components/nv-fieldnumber/nv-fieldnumber.css +8 -8
- package/dist/collection/components/nv-fieldpassword/nv-fieldpassword.css +8 -8
- package/dist/collection/components/nv-fieldradio/nv-fieldradio.css +3 -3
- package/dist/collection/components/nv-fieldselect/nv-fieldselect.css +12 -12
- package/dist/collection/components/nv-fieldslider/styles/nv-fieldslider.css +7 -7
- package/dist/collection/components/nv-fieldtext/nv-fieldtext.css +8 -8
- 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-fieldtextarea/nv-fieldtextarea.css +8 -8
- package/dist/collection/components/nv-fieldtime/nv-fieldtime.docs.js +22 -0
- package/dist/collection/components/nv-fieldtime/nv-fieldtime.docs.js.map +1 -1
- package/dist/collection/components/nv-fieldtime/nv-fieldtime.js +24 -9
- package/dist/collection/components/nv-fieldtime/nv-fieldtime.js.map +1 -1
- package/dist/collection/components/nv-fieldtime/styles/nv-fieldtime.css +8 -8
- package/dist/collection/components/nv-icon/nv-icons.js +6 -1
- package/dist/collection/components/nv-icon/nv-icons.js.map +1 -1
- package/dist/collection/components/nv-iconbutton/nv-iconbutton.css +2 -2
- package/dist/collection/components/nv-menu/nv-menu.docs.js +7 -0
- package/dist/collection/components/nv-menu/nv-menu.docs.js.map +1 -1
- package/dist/collection/components/nv-menu/nv-menu.js +26 -8
- package/dist/collection/components/nv-menu/nv-menu.js.map +1 -1
- package/dist/collection/components/nv-menuitem/nv-menuitem.js +1 -1
- package/dist/collection/components/nv-notification/styles/nv-notification.css +2 -2
- package/dist/collection/components/nv-popover/nv-popover.docs.js +11 -0
- package/dist/collection/components/nv-popover/nv-popover.docs.js.map +1 -1
- package/dist/collection/components/nv-popover/nv-popover.js +66 -60
- package/dist/collection/components/nv-popover/nv-popover.js.map +1 -1
- package/dist/collection/components/nv-split/nv-split.docs.js +41 -0
- package/dist/collection/components/nv-split/nv-split.docs.js.map +1 -0
- package/dist/collection/components/nv-split/nv-split.js +549 -0
- package/dist/collection/components/nv-split/nv-split.js.map +1 -0
- package/dist/collection/components/nv-split/styles/nv-split.css +96 -0
- package/dist/collection/components/nv-stack/nv-stack.js +1 -1
- package/dist/collection/components/nv-table/nv-table.docs.js +16 -155
- package/dist/collection/components/nv-table/nv-table.docs.js.map +1 -1
- package/dist/collection/components/nv-table/nv-table.js +68 -496
- package/dist/collection/components/nv-table/nv-table.js.map +1 -1
- package/dist/collection/components/nv-table/nv-table.utils.js +175 -0
- package/dist/collection/components/nv-table/nv-table.utils.js.map +1 -0
- package/dist/collection/components/nv-table/styles/nv-table.css +84 -0
- package/dist/collection/components/nv-table/test/nv-table.utils.test.js +604 -0
- package/dist/collection/components/nv-table/test/nv-table.utils.test.js.map +1 -0
- package/dist/collection/components/nv-toggle/nv-toggle.css +3 -3
- package/dist/collection/components/nv-togglebuttongroup/nv-togglebuttongroup.docs.js +1 -0
- package/dist/collection/components/nv-togglebuttongroup/nv-togglebuttongroup.docs.js.map +1 -1
- package/dist/collection/components/nv-togglebuttongroup/nv-togglebuttongroup.js +1 -3
- package/dist/collection/components/nv-togglebuttongroup/nv-togglebuttongroup.js.map +1 -1
- package/dist/components/index.js +7 -2
- package/dist/components/index.js.map +1 -1
- package/dist/components/nv-accordion-item.js +1 -1
- package/dist/components/nv-accordion.js +10 -10
- package/dist/components/nv-accordion.js.map +1 -1
- package/dist/components/nv-alert.js +3 -3
- package/dist/components/nv-alert.js.map +1 -1
- package/dist/components/nv-avatar.js +3 -3
- package/dist/components/nv-avatar.js.map +1 -1
- package/dist/components/nv-badge.js +1 -1
- package/dist/components/nv-breadcrumb.js +4 -4
- package/dist/components/nv-breadcrumb.js.map +1 -1
- package/dist/components/nv-breadcrumbs.js +1 -1
- package/dist/components/nv-button.js +1 -1
- package/dist/components/nv-buttongroup.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 +174 -7
- package/dist/components/nv-datagrid.js.map +1 -1
- package/dist/components/nv-datagridcolumn.js +1 -1
- package/dist/components/nv-dialog.js +37 -34
- package/dist/components/nv-dialog.js.map +1 -1
- 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 +57 -32
- package/dist/components/nv-fielddate.js.map +1 -1
- package/dist/components/nv-fielddaterange.js +74 -48
- package/dist/components/nv-fielddaterange.js.map +1 -1
- package/dist/components/nv-fielddropdown.js +40 -13
- 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 +196 -164
- package/dist/components/nv-fieldmultiselect.js.map +1 -1
- package/dist/components/nv-fieldnumber.js +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 +2 -2
- package/dist/components/nv-fieldradio.js.map +1 -1
- package/dist/components/nv-fieldselect.js +5 -5
- package/dist/components/nv-fieldselect.js.map +1 -1
- package/dist/components/nv-fieldslider.js +6 -6
- package/dist/components/nv-fieldslider.js.map +1 -1
- package/dist/components/nv-fieldtext.js +1 -1
- package/dist/components/nv-fieldtextarea.js +2 -2
- package/dist/components/nv-fieldtextarea.js.map +1 -1
- package/dist/components/nv-fieldtime.js +31 -17
- 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 +30 -13
- package/dist/components/nv-menu.js.map +1 -1
- package/dist/components/nv-menuitem.js +1 -1
- package/dist/components/nv-notification.js +3 -3
- package/dist/components/nv-notification.js.map +1 -1
- package/dist/components/nv-notificationcontainer.js +1 -1
- package/dist/components/nv-popover.js +1 -1
- package/dist/components/nv-row.js +1 -1
- package/dist/components/{nv-tablecolumn.d.ts → nv-split.d.ts} +4 -4
- package/dist/components/nv-split.js +366 -0
- package/dist/components/nv-split.js.map +1 -0
- package/dist/components/nv-stack.js +2 -2
- package/dist/components/nv-table.js +216 -328
- package/dist/components/nv-table.js.map +1 -1
- package/dist/components/nv-toggle.js +2 -2
- package/dist/components/nv-toggle.js.map +1 -1
- package/dist/components/nv-togglebutton.js +1 -1
- package/dist/components/nv-togglebuttongroup.js +2 -2
- package/dist/components/nv-togglebuttongroup.js.map +1 -1
- package/dist/components/nv-tooltip.js +1 -1
- package/dist/components/{p-00cbf2a1.js → p-0d5ed1d7.js} +3 -3
- package/dist/components/p-0d5ed1d7.js.map +1 -0
- package/dist/components/{p-54161bad.js → p-0e6f41c7.js} +2 -2
- package/dist/components/{p-54161bad.js.map → p-0e6f41c7.js.map} +1 -1
- package/dist/components/{p-0c42fafb.js → p-0fd23531.js} +6 -6
- package/dist/components/{p-0c42fafb.js.map → p-0fd23531.js.map} +1 -1
- package/dist/components/{p-a823b8e9.js → p-1639703f.js} +2 -2
- package/dist/components/{p-a823b8e9.js.map → p-1639703f.js.map} +1 -1
- package/dist/components/{p-e5c62ea8.js → p-2cc83e0c.js} +3 -3
- package/dist/components/{p-e5c62ea8.js.map → p-2cc83e0c.js.map} +1 -1
- package/dist/components/{p-3763c9c4.js → p-31478080.js} +3 -3
- package/dist/components/{p-3763c9c4.js.map → p-31478080.js.map} +1 -1
- package/dist/components/{p-178fa27e.js → p-378e3127.js} +6 -6
- package/dist/components/{p-178fa27e.js.map → p-378e3127.js.map} +1 -1
- package/dist/components/{p-51876ca1.js → p-429e01f3.js} +3 -3
- package/dist/components/p-429e01f3.js.map +1 -0
- package/dist/components/p-47d499b4.js +88 -0
- package/dist/components/p-47d499b4.js.map +1 -0
- package/dist/components/{p-aff3ed68.js → p-5829b9f7.js} +5 -2
- package/dist/components/p-5829b9f7.js.map +1 -0
- package/dist/components/{p-ee8944f3.js → p-63595ea1.js} +68 -62
- package/dist/components/p-63595ea1.js.map +1 -0
- package/dist/components/{p-1af3591a.js → p-6f2b257e.js} +3 -3
- package/dist/components/{p-1af3591a.js.map → p-6f2b257e.js.map} +1 -1
- package/dist/components/{p-4fc01a78.js → p-7112612c.js} +5 -5
- package/dist/components/p-7112612c.js.map +1 -0
- package/dist/components/{p-7426b20f.js → p-715e5235.js} +3 -3
- package/dist/components/{p-7426b20f.js.map → p-715e5235.js.map} +1 -1
- package/dist/components/{p-31e262bd.js → p-7b5102c8.js} +5 -5
- package/dist/components/{p-31e262bd.js.map → p-7b5102c8.js.map} +1 -1
- package/dist/components/{p-fda58a76.js → p-98429fd7.js} +2 -2
- package/dist/components/{p-fda58a76.js.map → p-98429fd7.js.map} +1 -1
- package/dist/components/p-9e7468e3.js +185 -0
- package/dist/components/p-9e7468e3.js.map +1 -0
- package/dist/components/{p-75200cc0.js → p-df5d76a5.js} +3 -3
- package/dist/components/{p-75200cc0.js.map → p-df5d76a5.js.map} +1 -1
- package/dist/components/{p-51459a44.js → p-f2bac2aa.js} +4 -4
- package/dist/components/{p-51459a44.js.map → p-f2bac2aa.js.map} +1 -1
- package/dist/esm/{index-a1936cd0.js → index-dc2723f3.js} +9 -6
- package/dist/esm/index-dc2723f3.js.map +1 -0
- package/dist/esm/index.js +6 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/loader.js +3 -3
- package/dist/esm/native.js +3 -3
- package/dist/esm/nv-accordion-item.entry.js +2 -2
- package/dist/esm/nv-accordion-item.entry.js.map +1 -1
- package/dist/esm/nv-accordion.entry.js +6 -6
- package/dist/esm/nv-accordion.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 +2 -2
- package/dist/esm/nv-avatar.entry.js.map +1 -1
- package/dist/esm/nv-badge_2.entry.js +1 -1
- package/dist/esm/nv-breadcrumb.entry.js +2 -2
- package/dist/esm/nv-breadcrumb.entry.js.map +1 -1
- package/dist/esm/nv-breadcrumbs.entry.js +1 -1
- package/dist/esm/nv-button.entry.js +3 -9
- package/dist/esm/nv-button.entry.js.map +1 -1
- package/dist/esm/nv-buttongroup.entry.js +1 -1
- package/dist/esm/nv-calendar.entry.js +1 -1
- package/dist/esm/nv-col.entry.js +1 -1
- package/dist/esm/nv-datagrid.entry.js +172 -5
- 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 +32 -29
- package/dist/esm/nv-dialog.entry.js.map +1 -1
- package/dist/esm/nv-dialogfooter_2.entry.js +2 -2
- package/dist/esm/nv-dialogfooter_2.entry.js.map +1 -1
- package/dist/esm/nv-fieldcheckbox.entry.js +2 -2
- package/dist/esm/nv-fieldcheckbox.entry.js.map +1 -1
- package/dist/esm/nv-fielddate.entry.js +51 -26
- package/dist/esm/nv-fielddate.entry.js.map +1 -1
- package/dist/esm/nv-fielddaterange.entry.js +68 -42
- package/dist/esm/nv-fielddaterange.entry.js.map +1 -1
- package/dist/esm/nv-fielddropdown.entry.js +33 -7
- 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 +187 -156
- 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 +2 -2
- package/dist/esm/nv-fieldradio.entry.js.map +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 +2 -2
- package/dist/esm/nv-fieldslider.entry.js.map +1 -1
- package/dist/esm/nv-fieldtext.entry.js +2 -2
- package/dist/esm/nv-fieldtext.entry.js.map +1 -1
- package/dist/esm/nv-fieldtextarea.entry.js +2 -2
- package/dist/esm/nv-fieldtextarea.entry.js.map +1 -1
- package/dist/esm/nv-fieldtime.entry.js +25 -12
- package/dist/esm/nv-fieldtime.entry.js.map +1 -1
- package/dist/esm/nv-icon.entry.js +2 -2
- package/dist/esm/nv-icon.entry.js.map +1 -1
- package/dist/esm/nv-iconbutton_2.entry.js +2 -2
- package/dist/esm/nv-iconbutton_2.entry.js.map +1 -1
- package/dist/esm/nv-menu.entry.js +24 -9
- package/dist/esm/nv-menu.entry.js.map +1 -1
- package/dist/esm/nv-menuitem.entry.js +1 -1
- package/dist/esm/nv-notification.entry.js +2 -2
- package/dist/esm/nv-notification.entry.js.map +1 -1
- package/dist/esm/nv-notificationcontainer.entry.js +1 -1
- package/dist/esm/nv-popover.entry.js +67 -61
- package/dist/esm/nv-popover.entry.js.map +1 -1
- package/dist/esm/nv-row.entry.js +1 -1
- package/dist/esm/nv-split.entry.js +335 -0
- package/dist/esm/nv-split.entry.js.map +1 -0
- package/dist/esm/nv-stack.entry.js +2 -2
- package/dist/esm/nv-table.entry.js +216 -310
- package/dist/esm/nv-table.entry.js.map +1 -1
- package/dist/esm/nv-toggle.entry.js +2 -2
- package/dist/esm/nv-toggle.entry.js.map +1 -1
- package/dist/esm/nv-togglebutton.entry.js +1 -1
- package/dist/esm/nv-togglebuttongroup.entry.js +2 -2
- package/dist/esm/nv-togglebuttongroup.entry.js.map +1 -1
- 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-107e80c6.entry.js +2 -0
- package/dist/native/p-107e80c6.entry.js.map +1 -0
- package/dist/native/{p-5c697133.entry.js → p-112d096c.entry.js} +2 -2
- package/dist/native/p-14e622e1.entry.js +2 -0
- package/dist/native/p-14e622e1.entry.js.map +1 -0
- package/dist/native/p-217de553.entry.js +2 -0
- package/dist/native/p-217de553.entry.js.map +1 -0
- package/dist/native/{p-85f8f11a.entry.js → p-230af58a.entry.js} +2 -2
- package/dist/native/p-2364aefa.entry.js +2 -0
- package/dist/native/p-2364aefa.entry.js.map +1 -0
- package/dist/native/p-23ee0384.entry.js +2 -0
- package/dist/native/{p-29f68e07.entry.js.map → p-23ee0384.entry.js.map} +1 -1
- package/dist/native/p-26513cbd.entry.js +2 -0
- package/dist/native/p-26513cbd.entry.js.map +1 -0
- package/dist/native/p-278613a3.entry.js +2 -0
- package/dist/native/{p-6cb6679b.entry.js.map → p-278613a3.entry.js.map} +1 -1
- package/dist/native/p-2dfd786f.entry.js +2 -0
- package/dist/native/{p-29df974e.entry.js.map → p-2dfd786f.entry.js.map} +1 -1
- package/dist/native/{p-d0a33e64.js → p-3060df80.js} +3 -3
- package/dist/native/p-3060df80.js.map +1 -0
- package/dist/native/p-4dc7483d.entry.js +2 -0
- package/dist/native/{p-c7b7ffaf.entry.js.map → p-4dc7483d.entry.js.map} +1 -1
- package/dist/native/p-4eaf417d.entry.js +13 -0
- package/dist/native/p-4eaf417d.entry.js.map +1 -0
- package/dist/native/p-5039ceb8.entry.js +2 -0
- package/dist/native/p-5039ceb8.entry.js.map +1 -0
- package/dist/native/{p-08322093.entry.js → p-52d2c0ae.entry.js} +2 -2
- package/dist/native/p-638967bf.entry.js +2 -0
- package/dist/native/p-638967bf.entry.js.map +1 -0
- package/dist/native/{p-19090193.entry.js → p-647a0765.entry.js} +2 -2
- package/dist/native/p-68dc02be.entry.js +2 -0
- package/dist/native/p-68dc02be.entry.js.map +1 -0
- package/dist/native/p-6d427897.entry.js +2 -0
- package/dist/native/{p-92931ab8.entry.js.map → p-6d427897.entry.js.map} +1 -1
- package/dist/native/{p-1504e28b.entry.js → p-701b48a4.entry.js} +2 -2
- package/dist/native/p-7c9bf981.entry.js +2 -0
- package/dist/native/p-835abdb9.entry.js +2 -0
- package/dist/native/{p-f5120223.entry.js.map → p-835abdb9.entry.js.map} +1 -1
- package/dist/native/{p-464bb197.entry.js → p-83765537.entry.js} +2 -2
- package/dist/native/p-88f9fca5.entry.js +2 -0
- package/dist/native/p-88f9fca5.entry.js.map +1 -0
- package/dist/native/{p-d2c9247b.entry.js → p-8e423742.entry.js} +3 -3
- package/dist/native/{p-d2c9247b.entry.js.map → p-8e423742.entry.js.map} +1 -1
- package/dist/native/{p-d882f417.entry.js → p-91fab6c2.entry.js} +2 -2
- package/dist/native/p-91fab6c2.entry.js.map +1 -0
- package/dist/native/p-95184ea2.entry.js +2 -0
- package/dist/native/p-95184ea2.entry.js.map +1 -0
- package/dist/native/p-9613087c.entry.js +2 -0
- package/dist/native/{p-2781637d.entry.js.map → p-9613087c.entry.js.map} +1 -1
- package/dist/native/{p-94dc9c41.entry.js → p-9d7e099f.entry.js} +2 -2
- package/dist/native/p-a6fc987a.entry.js +2 -0
- package/dist/native/p-a6fc987a.entry.js.map +1 -0
- package/dist/native/{p-1235c007.entry.js → p-acabac31.entry.js} +2 -2
- package/dist/native/p-acada158.entry.js +2 -0
- package/dist/native/p-acada158.entry.js.map +1 -0
- package/dist/native/p-b06f0e61.entry.js +2 -0
- package/dist/native/p-b06f0e61.entry.js.map +1 -0
- package/dist/native/p-b4c15f25.entry.js +2 -0
- package/dist/native/p-b4c15f25.entry.js.map +1 -0
- package/dist/native/{p-74b129e9.entry.js → p-bcf41cd0.entry.js} +2 -2
- package/dist/native/{p-c66565f8.entry.js → p-cb0293ec.entry.js} +2 -2
- package/dist/native/p-ce97ce24.entry.js +2 -0
- package/dist/native/p-ce97ce24.entry.js.map +1 -0
- package/dist/native/p-d0db5e72.entry.js +2 -0
- package/dist/native/p-d0db5e72.entry.js.map +1 -0
- package/dist/native/p-d7f444fb.entry.js +2 -0
- package/dist/native/p-d7f444fb.entry.js.map +1 -0
- package/dist/native/p-d878e90a.entry.js +2 -0
- package/dist/native/p-d878e90a.entry.js.map +1 -0
- package/dist/native/{p-e2c99ce2.entry.js → p-d94bf052.entry.js} +2 -2
- package/dist/native/p-ddc41f1f.entry.js +2 -0
- package/dist/native/p-ddc41f1f.entry.js.map +1 -0
- package/dist/native/p-f30e0be6.entry.js +2 -0
- package/dist/native/p-f30e0be6.entry.js.map +1 -0
- package/dist/native/p-f3c73492.entry.js +2 -0
- package/dist/native/{p-b32d0a5a.entry.js.map → p-f3c73492.entry.js.map} +1 -1
- package/dist/native/{p-9c5d6827.entry.js → p-fa78d8eb.entry.js} +2 -2
- package/dist/types/components/nv-accordion/nv-accordion.d.ts +2 -4
- package/dist/types/components/nv-button/nv-button.d.ts +0 -1
- package/dist/types/components/nv-dialog/nv-dialog.d.ts +9 -8
- package/dist/types/components/nv-fielddate/nv-fielddate.d.ts +6 -3
- package/dist/types/components/nv-fielddaterange/nv-fielddaterange.d.ts +5 -4
- package/dist/types/components/nv-fielddropdown/nv-fielddropdown.d.ts +3 -1
- package/dist/types/components/nv-fieldmultiselect/nv-fieldmultiselect.d.ts +12 -11
- package/dist/types/components/nv-fieldtime/nv-fieldtime.d.ts +1 -0
- package/dist/types/components/nv-icon/nv-icons.d.ts +1 -1
- package/dist/types/components/nv-menu/nv-menu.d.ts +4 -1
- package/dist/types/components/nv-popover/nv-popover.d.ts +10 -8
- package/dist/types/components/nv-split/nv-split.d.ts +128 -0
- package/dist/types/components/nv-split/nv-split.docs.d.ts +4 -0
- package/dist/types/components/nv-table/nv-table.d.ts +6 -87
- package/dist/types/components/nv-table/nv-table.utils.d.ts +129 -0
- package/dist/types/components/nv-table/test/nv-table.utils.test.d.ts +1 -0
- package/dist/types/components/nv-togglebuttongroup/nv-togglebuttongroup.d.ts +0 -2
- package/dist/types/components.d.ts +102 -200
- package/dist/vscode-data.json +43 -41
- package/hydrate/index.js +1148 -783
- package/hydrate/index.mjs +1148 -783
- package/package.json +10 -10
- package/dist/cjs/dom.utils-4d43f69a.js +0 -170
- package/dist/cjs/dom.utils-4d43f69a.js.map +0 -1
- package/dist/cjs/index-c56424e5.js.map +0 -1
- package/dist/cjs/nv-tablecolumn.cjs.entry.js +0 -21
- package/dist/cjs/nv-tablecolumn.cjs.entry.js.map +0 -1
- package/dist/collection/components/nv-table/nv-table.css +0 -35
- package/dist/collection/components/nv-tablecolumn/nv-tablecolumn.docs.js +0 -6
- package/dist/collection/components/nv-tablecolumn/nv-tablecolumn.docs.js.map +0 -1
- package/dist/collection/components/nv-tablecolumn/nv-tablecolumn.js +0 -52
- package/dist/collection/components/nv-tablecolumn/nv-tablecolumn.js.map +0 -1
- package/dist/components/nv-tablecolumn.js +0 -38
- package/dist/components/nv-tablecolumn.js.map +0 -1
- package/dist/components/p-00cbf2a1.js.map +0 -1
- package/dist/components/p-4fc01a78.js.map +0 -1
- package/dist/components/p-51876ca1.js.map +0 -1
- package/dist/components/p-5d14ba3f.js +0 -88
- package/dist/components/p-5d14ba3f.js.map +0 -1
- package/dist/components/p-95857e4f.js +0 -191
- package/dist/components/p-95857e4f.js.map +0 -1
- package/dist/components/p-aff3ed68.js.map +0 -1
- package/dist/components/p-cb34aa4f.js +0 -167
- package/dist/components/p-cb34aa4f.js.map +0 -1
- package/dist/components/p-ee8944f3.js.map +0 -1
- package/dist/esm/dom.utils-ac71e0ef.js +0 -167
- package/dist/esm/dom.utils-ac71e0ef.js.map +0 -1
- package/dist/esm/index-a1936cd0.js.map +0 -1
- package/dist/esm/nv-tablecolumn.entry.js +0 -17
- package/dist/esm/nv-tablecolumn.entry.js.map +0 -1
- package/dist/native/p-0a99c6fb.entry.js +0 -2
- package/dist/native/p-0a99c6fb.entry.js.map +0 -1
- package/dist/native/p-1ad1bff9.entry.js +0 -2
- package/dist/native/p-1ad1bff9.entry.js.map +0 -1
- package/dist/native/p-1c83f540.entry.js +0 -2
- package/dist/native/p-1c83f540.entry.js.map +0 -1
- package/dist/native/p-224b1a01.entry.js +0 -2
- package/dist/native/p-224b1a01.entry.js.map +0 -1
- package/dist/native/p-234cfa2e.entry.js +0 -2
- package/dist/native/p-2781637d.entry.js +0 -2
- package/dist/native/p-29df974e.entry.js +0 -2
- package/dist/native/p-29f68e07.entry.js +0 -2
- package/dist/native/p-45506c37.entry.js +0 -2
- package/dist/native/p-45506c37.entry.js.map +0 -1
- package/dist/native/p-48774d0c.entry.js +0 -13
- package/dist/native/p-48774d0c.entry.js.map +0 -1
- package/dist/native/p-4ec61dec.entry.js +0 -2
- package/dist/native/p-4ec61dec.entry.js.map +0 -1
- package/dist/native/p-5f0776cb.entry.js +0 -2
- package/dist/native/p-5f0776cb.entry.js.map +0 -1
- package/dist/native/p-6c7a9a21.entry.js +0 -2
- package/dist/native/p-6c7a9a21.entry.js.map +0 -1
- package/dist/native/p-6cb6679b.entry.js +0 -2
- package/dist/native/p-6d13a851.entry.js +0 -2
- package/dist/native/p-6d13a851.entry.js.map +0 -1
- package/dist/native/p-87784622.entry.js +0 -2
- package/dist/native/p-87784622.entry.js.map +0 -1
- package/dist/native/p-92931ab8.entry.js +0 -2
- package/dist/native/p-9a46baa9.entry.js +0 -2
- package/dist/native/p-9a46baa9.entry.js.map +0 -1
- package/dist/native/p-a34beedf.entry.js +0 -2
- package/dist/native/p-a34beedf.entry.js.map +0 -1
- package/dist/native/p-a69dbcef.entry.js +0 -2
- package/dist/native/p-a69dbcef.entry.js.map +0 -1
- package/dist/native/p-b32d0a5a.entry.js +0 -2
- package/dist/native/p-bc01787b.entry.js +0 -2
- package/dist/native/p-bc01787b.entry.js.map +0 -1
- package/dist/native/p-c7b7ffaf.entry.js +0 -2
- package/dist/native/p-cb34aa4f.js +0 -2
- package/dist/native/p-cb34aa4f.js.map +0 -1
- package/dist/native/p-cea942b9.entry.js +0 -2
- package/dist/native/p-cea942b9.entry.js.map +0 -1
- package/dist/native/p-d0a33e64.js.map +0 -1
- package/dist/native/p-d0ef1bbb.entry.js +0 -2
- package/dist/native/p-d0ef1bbb.entry.js.map +0 -1
- package/dist/native/p-d882f417.entry.js.map +0 -1
- package/dist/native/p-dd023fd6.entry.js +0 -2
- package/dist/native/p-dd023fd6.entry.js.map +0 -1
- package/dist/native/p-e765a624.entry.js +0 -2
- package/dist/native/p-e765a624.entry.js.map +0 -1
- package/dist/native/p-f0cbfb3d.entry.js +0 -2
- package/dist/native/p-f0cbfb3d.entry.js.map +0 -1
- package/dist/native/p-f5120223.entry.js +0 -2
- package/dist/native/p-fa177c39.entry.js +0 -2
- package/dist/native/p-fa177c39.entry.js.map +0 -1
- package/dist/types/components/nv-tablecolumn/nv-tablecolumn.d.ts +0 -13
- package/dist/types/components/nv-tablecolumn/nv-tablecolumn.docs.d.ts +0 -4
- /package/dist/native/{p-5c697133.entry.js.map → p-112d096c.entry.js.map} +0 -0
- /package/dist/native/{p-85f8f11a.entry.js.map → p-230af58a.entry.js.map} +0 -0
- /package/dist/native/{p-08322093.entry.js.map → p-52d2c0ae.entry.js.map} +0 -0
- /package/dist/native/{p-19090193.entry.js.map → p-647a0765.entry.js.map} +0 -0
- /package/dist/native/{p-1504e28b.entry.js.map → p-701b48a4.entry.js.map} +0 -0
- /package/dist/native/{p-234cfa2e.entry.js.map → p-7c9bf981.entry.js.map} +0 -0
- /package/dist/native/{p-464bb197.entry.js.map → p-83765537.entry.js.map} +0 -0
- /package/dist/native/{p-94dc9c41.entry.js.map → p-9d7e099f.entry.js.map} +0 -0
- /package/dist/native/{p-1235c007.entry.js.map → p-acabac31.entry.js.map} +0 -0
- /package/dist/native/{p-74b129e9.entry.js.map → p-bcf41cd0.entry.js.map} +0 -0
- /package/dist/native/{p-c66565f8.entry.js.map → p-cb0293ec.entry.js.map} +0 -0
- /package/dist/native/{p-e2c99ce2.entry.js.map → p-d94bf052.entry.js.map} +0 -0
- /package/dist/native/{p-9c5d6827.entry.js.map → p-fa78d8eb.entry.js.map} +0 -0
|
@@ -0,0 +1,604 @@
|
|
|
1
|
+
/* eslint-disable jsdoc/require-jsdoc */
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
4
|
+
import { TABLE_CONSTANTS, getHandleWidthForCurrentPointer, getPointerOffsetInCell, isInResizeHandle, calculateNewWidth, isValidTableCell, getClosestTableCell, setPointerCapture, releasePointerCapture, setUserSelectPrevention, getCellWidth, setCellWidth, calculatePointerDelta, createResizeState, isValidResizeState, updateCellWidthFromResize, } from "../nv-table.utils";
|
|
5
|
+
// Mock browser globals
|
|
6
|
+
const mockMatchMedia = vi.fn();
|
|
7
|
+
const mockDocumentBody = {
|
|
8
|
+
style: { userSelect: '' },
|
|
9
|
+
};
|
|
10
|
+
vi.stubGlobal('matchMedia', mockMatchMedia);
|
|
11
|
+
vi.stubGlobal('document', { body: mockDocumentBody });
|
|
12
|
+
vi.stubGlobal('HTMLElement', class MockHTMLElement {
|
|
13
|
+
});
|
|
14
|
+
/**
|
|
15
|
+
* Comprehensive tests for nv-table utilities
|
|
16
|
+
*
|
|
17
|
+
* These tests validate all utility functions:
|
|
18
|
+
* - Constants and configuration values
|
|
19
|
+
* - Pointer event calculations and handling
|
|
20
|
+
* - Column resize logic and constraints
|
|
21
|
+
* - DOM element validation and manipulation
|
|
22
|
+
* - Resize state management
|
|
23
|
+
* - Edge cases and error conditions
|
|
24
|
+
*/
|
|
25
|
+
describe('nv-table.utils - Comprehensive Tests', () => {
|
|
26
|
+
// Mock DOM elements and browser APIs
|
|
27
|
+
let mockCell;
|
|
28
|
+
let mockPointerEvent;
|
|
29
|
+
beforeEach(() => {
|
|
30
|
+
// Reset mocks
|
|
31
|
+
vi.clearAllMocks();
|
|
32
|
+
// Setup matchMedia mock for each test
|
|
33
|
+
mockMatchMedia.mockImplementation(query => ({
|
|
34
|
+
matches: query.includes('coarse') ? false : true,
|
|
35
|
+
media: query,
|
|
36
|
+
}));
|
|
37
|
+
// Reset document body style
|
|
38
|
+
mockDocumentBody.style.userSelect = '';
|
|
39
|
+
// Mock HTMLTableCellElement with mutable offsetWidth
|
|
40
|
+
const mockCellProps = {
|
|
41
|
+
tagName: 'TH',
|
|
42
|
+
offsetWidth: 100,
|
|
43
|
+
style: { width: '' },
|
|
44
|
+
getBoundingClientRect: vi.fn().mockReturnValue({
|
|
45
|
+
left: 10,
|
|
46
|
+
top: 10,
|
|
47
|
+
width: 100,
|
|
48
|
+
height: 30,
|
|
49
|
+
}),
|
|
50
|
+
closest: vi.fn().mockReturnValue(null),
|
|
51
|
+
setPointerCapture: vi.fn(),
|
|
52
|
+
releasePointerCapture: vi.fn(),
|
|
53
|
+
};
|
|
54
|
+
// Make offsetWidth mutable for testing
|
|
55
|
+
Object.defineProperty(mockCellProps, 'offsetWidth', {
|
|
56
|
+
writable: true,
|
|
57
|
+
value: 100,
|
|
58
|
+
});
|
|
59
|
+
mockCell = mockCellProps;
|
|
60
|
+
// Mock PointerEvent
|
|
61
|
+
mockPointerEvent = {
|
|
62
|
+
pointerId: 1,
|
|
63
|
+
clientX: 50,
|
|
64
|
+
clientY: 20,
|
|
65
|
+
target: mockCell,
|
|
66
|
+
};
|
|
67
|
+
});
|
|
68
|
+
afterEach(() => {
|
|
69
|
+
vi.clearAllMocks();
|
|
70
|
+
});
|
|
71
|
+
describe('TABLE_CONSTANTS', () => {
|
|
72
|
+
it('should have correct constant values', () => {
|
|
73
|
+
expect(TABLE_CONSTANTS.HANDLE_W).toBe(12);
|
|
74
|
+
expect(TABLE_CONSTANTS.HANDLE_W_TOUCH).toBe(24);
|
|
75
|
+
expect(TABLE_CONSTANTS.MIN_W).toBe(40);
|
|
76
|
+
});
|
|
77
|
+
it('should be immutable', () => {
|
|
78
|
+
// Object.freeze prevents modification in strict mode
|
|
79
|
+
const originalValue = TABLE_CONSTANTS.HANDLE_W;
|
|
80
|
+
try {
|
|
81
|
+
TABLE_CONSTANTS.HANDLE_W = 20;
|
|
82
|
+
}
|
|
83
|
+
catch (_a) {
|
|
84
|
+
// Ignored - assignment may or may not throw depending on strict mode
|
|
85
|
+
}
|
|
86
|
+
expect(TABLE_CONSTANTS.HANDLE_W).toBe(originalValue);
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
describe('getHandleWidthForCurrentPointer', () => {
|
|
90
|
+
it('should return fine pointer width for mouse input', () => {
|
|
91
|
+
mockMatchMedia.mockReturnValue({ matches: false });
|
|
92
|
+
const result = getHandleWidthForCurrentPointer();
|
|
93
|
+
expect(result).toBe(TABLE_CONSTANTS.HANDLE_W);
|
|
94
|
+
expect(mockMatchMedia).toHaveBeenCalledWith('(pointer: coarse)');
|
|
95
|
+
});
|
|
96
|
+
it('should return touch width for coarse pointer input', () => {
|
|
97
|
+
mockMatchMedia.mockReturnValue({ matches: true });
|
|
98
|
+
const result = getHandleWidthForCurrentPointer();
|
|
99
|
+
expect(result).toBe(TABLE_CONSTANTS.HANDLE_W_TOUCH);
|
|
100
|
+
expect(mockMatchMedia).toHaveBeenCalledWith('(pointer: coarse)');
|
|
101
|
+
});
|
|
102
|
+
it('should handle matchMedia errors gracefully', () => {
|
|
103
|
+
mockMatchMedia.mockImplementation(() => {
|
|
104
|
+
throw new Error('matchMedia not supported');
|
|
105
|
+
});
|
|
106
|
+
expect(() => getHandleWidthForCurrentPointer()).toThrow();
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
describe('getPointerOffsetInCell', () => {
|
|
110
|
+
it('should calculate correct offset within cell', () => {
|
|
111
|
+
const event = { clientX: 60 };
|
|
112
|
+
mockCell.getBoundingClientRect = vi.fn().mockReturnValue({ left: 10 });
|
|
113
|
+
const result = getPointerOffsetInCell(event, mockCell);
|
|
114
|
+
expect(result).toBe(50); // 60 - 10
|
|
115
|
+
expect(mockCell.getBoundingClientRect).toHaveBeenCalled();
|
|
116
|
+
});
|
|
117
|
+
it('should handle zero offset', () => {
|
|
118
|
+
const event = { clientX: 10 };
|
|
119
|
+
mockCell.getBoundingClientRect = vi.fn().mockReturnValue({ left: 10 });
|
|
120
|
+
const result = getPointerOffsetInCell(event, mockCell);
|
|
121
|
+
expect(result).toBe(0);
|
|
122
|
+
});
|
|
123
|
+
it('should handle negative offset', () => {
|
|
124
|
+
const event = { clientX: 5 };
|
|
125
|
+
mockCell.getBoundingClientRect = vi.fn().mockReturnValue({ left: 10 });
|
|
126
|
+
const result = getPointerOffsetInCell(event, mockCell);
|
|
127
|
+
expect(result).toBe(-5);
|
|
128
|
+
});
|
|
129
|
+
it('should handle fractional coordinates', () => {
|
|
130
|
+
const event = { clientX: 15.7 };
|
|
131
|
+
mockCell.getBoundingClientRect = vi.fn().mockReturnValue({ left: 10.3 });
|
|
132
|
+
const result = getPointerOffsetInCell(event, mockCell);
|
|
133
|
+
expect(result).toBeCloseTo(5.4, 1);
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
describe('isInResizeHandle', () => {
|
|
137
|
+
it('should return true when pointer is in handle area', () => {
|
|
138
|
+
const result = isInResizeHandle(95, 100, 10);
|
|
139
|
+
expect(result).toBe(true);
|
|
140
|
+
});
|
|
141
|
+
it('should return true when pointer is exactly at handle boundary', () => {
|
|
142
|
+
const result = isInResizeHandle(90, 100, 10);
|
|
143
|
+
expect(result).toBe(true);
|
|
144
|
+
});
|
|
145
|
+
it('should return false when pointer is outside handle area', () => {
|
|
146
|
+
const result = isInResizeHandle(89, 100, 10);
|
|
147
|
+
expect(result).toBe(false);
|
|
148
|
+
});
|
|
149
|
+
it('should handle edge cases with zero dimensions', () => {
|
|
150
|
+
expect(isInResizeHandle(0, 0, 10)).toBe(true); // 0 >= 0 - 10 = -10 (true)
|
|
151
|
+
expect(isInResizeHandle(0, 10, 0)).toBe(false); // 0 >= 10 - 0 = 10 (false)
|
|
152
|
+
});
|
|
153
|
+
it('should handle large handle areas', () => {
|
|
154
|
+
const result = isInResizeHandle(50, 100, 60);
|
|
155
|
+
expect(result).toBe(true); // 50 >= 100 - 60 = 40
|
|
156
|
+
});
|
|
157
|
+
it('should handle fractional values', () => {
|
|
158
|
+
const result = isInResizeHandle(85.5, 100.2, 10.7);
|
|
159
|
+
expect(result).toBe(false); // 85.5 < 100.2 - 10.7 = 89.5
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
describe('calculateNewWidth', () => {
|
|
163
|
+
it('should calculate width with positive delta', () => {
|
|
164
|
+
const result = calculateNewWidth(100, 20);
|
|
165
|
+
expect(result).toBe(120);
|
|
166
|
+
});
|
|
167
|
+
it('should calculate width with negative delta', () => {
|
|
168
|
+
const result = calculateNewWidth(100, -20);
|
|
169
|
+
expect(result).toBe(80);
|
|
170
|
+
});
|
|
171
|
+
it('should enforce minimum width constraint', () => {
|
|
172
|
+
const result = calculateNewWidth(50, -30, 40);
|
|
173
|
+
expect(result).toBe(40); // Math.max(40, 50 - 30 = 20)
|
|
174
|
+
});
|
|
175
|
+
it('should use default minimum width when not provided', () => {
|
|
176
|
+
const result = calculateNewWidth(50, -30);
|
|
177
|
+
expect(result).toBe(TABLE_CONSTANTS.MIN_W);
|
|
178
|
+
});
|
|
179
|
+
it('should handle zero delta', () => {
|
|
180
|
+
const result = calculateNewWidth(100, 0);
|
|
181
|
+
expect(result).toBe(100);
|
|
182
|
+
});
|
|
183
|
+
it('should handle fractional values', () => {
|
|
184
|
+
const result = calculateNewWidth(100.5, 20.3, 30.7);
|
|
185
|
+
expect(result).toBeCloseTo(120.8, 1);
|
|
186
|
+
});
|
|
187
|
+
it('should handle extreme negative delta', () => {
|
|
188
|
+
const result = calculateNewWidth(100, -200, 40);
|
|
189
|
+
expect(result).toBe(40);
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
describe('isValidTableCell', () => {
|
|
193
|
+
it('should return true for TH elements', () => {
|
|
194
|
+
const th = { tagName: 'TH' };
|
|
195
|
+
expect(isValidTableCell(th)).toBe(true);
|
|
196
|
+
});
|
|
197
|
+
it('should return true for TD elements', () => {
|
|
198
|
+
const td = { tagName: 'TD' };
|
|
199
|
+
expect(isValidTableCell(td)).toBe(true);
|
|
200
|
+
});
|
|
201
|
+
it('should return false for other elements', () => {
|
|
202
|
+
const div = { tagName: 'DIV' };
|
|
203
|
+
expect(isValidTableCell(div)).toBe(false);
|
|
204
|
+
});
|
|
205
|
+
it('should return false for null', () => {
|
|
206
|
+
expect(isValidTableCell(null)).toBe(false);
|
|
207
|
+
});
|
|
208
|
+
it('should return false for undefined', () => {
|
|
209
|
+
expect(isValidTableCell(undefined)).toBe(false);
|
|
210
|
+
});
|
|
211
|
+
it('should handle case sensitivity', () => {
|
|
212
|
+
const th = { tagName: 'th' };
|
|
213
|
+
expect(isValidTableCell(th)).toBe(false); // tagName is always uppercase in real DOM
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
describe('getClosestTableCell', () => {
|
|
217
|
+
it('should return closest table cell element', () => {
|
|
218
|
+
const mockElement = Object.create(HTMLElement.prototype);
|
|
219
|
+
mockElement.closest = vi.fn().mockReturnValue(mockCell);
|
|
220
|
+
const result = getClosestTableCell(mockElement);
|
|
221
|
+
expect(result).toBe(mockCell);
|
|
222
|
+
expect(mockElement.closest).toHaveBeenCalledWith('th, td');
|
|
223
|
+
});
|
|
224
|
+
it('should return null for non-HTMLElement targets', () => {
|
|
225
|
+
const result = getClosestTableCell('not an element');
|
|
226
|
+
expect(result).toBeNull();
|
|
227
|
+
});
|
|
228
|
+
it('should return null when closest returns null', () => {
|
|
229
|
+
const mockElement = {
|
|
230
|
+
closest: vi.fn().mockReturnValue(null),
|
|
231
|
+
};
|
|
232
|
+
const result = getClosestTableCell(mockElement);
|
|
233
|
+
expect(result).toBeNull();
|
|
234
|
+
});
|
|
235
|
+
it('should return null when closest returns invalid element', () => {
|
|
236
|
+
const invalidElement = { tagName: 'DIV' };
|
|
237
|
+
const mockElement = {
|
|
238
|
+
closest: vi.fn().mockReturnValue(invalidElement),
|
|
239
|
+
};
|
|
240
|
+
const result = getClosestTableCell(mockElement);
|
|
241
|
+
expect(result).toBeNull();
|
|
242
|
+
});
|
|
243
|
+
it('should handle null target', () => {
|
|
244
|
+
const result = getClosestTableCell(null);
|
|
245
|
+
expect(result).toBeNull();
|
|
246
|
+
});
|
|
247
|
+
});
|
|
248
|
+
describe('setPointerCapture', () => {
|
|
249
|
+
it('should successfully set pointer capture', () => {
|
|
250
|
+
mockCell.setPointerCapture = vi.fn();
|
|
251
|
+
const result = setPointerCapture(mockCell, 123);
|
|
252
|
+
expect(result).toBe(true);
|
|
253
|
+
expect(mockCell.setPointerCapture).toHaveBeenCalledWith(123);
|
|
254
|
+
});
|
|
255
|
+
it('should handle missing setPointerCapture method', () => {
|
|
256
|
+
const cellWithoutCapture = { setPointerCapture: undefined };
|
|
257
|
+
const result = setPointerCapture(cellWithoutCapture, 123);
|
|
258
|
+
expect(result).toBe(true); // Method doesn't exist but doesn't throw
|
|
259
|
+
});
|
|
260
|
+
it('should handle setPointerCapture exceptions', () => {
|
|
261
|
+
mockCell.setPointerCapture = vi.fn().mockImplementation(() => {
|
|
262
|
+
throw new Error('Capture failed');
|
|
263
|
+
});
|
|
264
|
+
const result = setPointerCapture(mockCell, 123);
|
|
265
|
+
expect(result).toBe(false);
|
|
266
|
+
});
|
|
267
|
+
it('should handle different pointer IDs', () => {
|
|
268
|
+
mockCell.setPointerCapture = vi.fn();
|
|
269
|
+
setPointerCapture(mockCell, 999);
|
|
270
|
+
expect(mockCell.setPointerCapture).toHaveBeenCalledWith(999);
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
describe('releasePointerCapture', () => {
|
|
274
|
+
it('should successfully release pointer capture', () => {
|
|
275
|
+
mockCell.releasePointerCapture = vi.fn();
|
|
276
|
+
const result = releasePointerCapture(mockCell, 123);
|
|
277
|
+
expect(result).toBe(true);
|
|
278
|
+
expect(mockCell.releasePointerCapture).toHaveBeenCalledWith(123);
|
|
279
|
+
});
|
|
280
|
+
it('should handle missing releasePointerCapture method', () => {
|
|
281
|
+
const cellWithoutRelease = { releasePointerCapture: undefined };
|
|
282
|
+
const result = releasePointerCapture(cellWithoutRelease, 123);
|
|
283
|
+
expect(result).toBe(true);
|
|
284
|
+
});
|
|
285
|
+
it('should handle releasePointerCapture exceptions', () => {
|
|
286
|
+
mockCell.releasePointerCapture = vi.fn().mockImplementation(() => {
|
|
287
|
+
throw new Error('Release failed');
|
|
288
|
+
});
|
|
289
|
+
const result = releasePointerCapture(mockCell, 123);
|
|
290
|
+
expect(result).toBe(false);
|
|
291
|
+
});
|
|
292
|
+
});
|
|
293
|
+
describe('setUserSelectPrevention', () => {
|
|
294
|
+
it('should prevent user selection', () => {
|
|
295
|
+
setUserSelectPrevention(true);
|
|
296
|
+
expect(document.body.style.userSelect).toBe('none');
|
|
297
|
+
});
|
|
298
|
+
it('should restore user selection', () => {
|
|
299
|
+
document.body.style.userSelect = 'none';
|
|
300
|
+
setUserSelectPrevention(false);
|
|
301
|
+
expect(document.body.style.userSelect).toBe('');
|
|
302
|
+
});
|
|
303
|
+
it('should handle multiple calls', () => {
|
|
304
|
+
setUserSelectPrevention(true);
|
|
305
|
+
setUserSelectPrevention(true);
|
|
306
|
+
expect(document.body.style.userSelect).toBe('none');
|
|
307
|
+
setUserSelectPrevention(false);
|
|
308
|
+
expect(document.body.style.userSelect).toBe('');
|
|
309
|
+
});
|
|
310
|
+
});
|
|
311
|
+
describe('getCellWidth', () => {
|
|
312
|
+
it('should return cell offset width', () => {
|
|
313
|
+
mockCell.offsetWidth = 150;
|
|
314
|
+
const result = getCellWidth(mockCell);
|
|
315
|
+
expect(result).toBe(150);
|
|
316
|
+
});
|
|
317
|
+
it('should handle zero width', () => {
|
|
318
|
+
mockCell.offsetWidth = 0;
|
|
319
|
+
const result = getCellWidth(mockCell);
|
|
320
|
+
expect(result).toBe(0);
|
|
321
|
+
});
|
|
322
|
+
it('should handle fractional width (rounded by browser)', () => {
|
|
323
|
+
mockCell.offsetWidth = 100; // Browser rounds fractional offset values
|
|
324
|
+
const result = getCellWidth(mockCell);
|
|
325
|
+
expect(result).toBe(100);
|
|
326
|
+
});
|
|
327
|
+
});
|
|
328
|
+
describe('setCellWidth', () => {
|
|
329
|
+
it('should set cell width in pixels', () => {
|
|
330
|
+
setCellWidth(mockCell, 150);
|
|
331
|
+
expect(mockCell.style.width).toBe('150px');
|
|
332
|
+
});
|
|
333
|
+
it('should handle zero width', () => {
|
|
334
|
+
setCellWidth(mockCell, 0);
|
|
335
|
+
expect(mockCell.style.width).toBe('0px');
|
|
336
|
+
});
|
|
337
|
+
it('should handle fractional width', () => {
|
|
338
|
+
setCellWidth(mockCell, 150.5);
|
|
339
|
+
expect(mockCell.style.width).toBe('150.5px');
|
|
340
|
+
});
|
|
341
|
+
it('should overwrite previous width', () => {
|
|
342
|
+
mockCell.style.width = '100px';
|
|
343
|
+
setCellWidth(mockCell, 200);
|
|
344
|
+
expect(mockCell.style.width).toBe('200px');
|
|
345
|
+
});
|
|
346
|
+
});
|
|
347
|
+
describe('calculatePointerDelta', () => {
|
|
348
|
+
it('should calculate positive delta', () => {
|
|
349
|
+
const result = calculatePointerDelta(150, 100);
|
|
350
|
+
expect(result).toBe(50);
|
|
351
|
+
});
|
|
352
|
+
it('should calculate negative delta', () => {
|
|
353
|
+
const result = calculatePointerDelta(80, 100);
|
|
354
|
+
expect(result).toBe(-20);
|
|
355
|
+
});
|
|
356
|
+
it('should calculate zero delta', () => {
|
|
357
|
+
const result = calculatePointerDelta(100, 100);
|
|
358
|
+
expect(result).toBe(0);
|
|
359
|
+
});
|
|
360
|
+
it('should handle fractional coordinates', () => {
|
|
361
|
+
const result = calculatePointerDelta(150.7, 100.3);
|
|
362
|
+
expect(result).toBeCloseTo(50.4, 1);
|
|
363
|
+
});
|
|
364
|
+
it('should handle large deltas', () => {
|
|
365
|
+
const result = calculatePointerDelta(1000, 100);
|
|
366
|
+
expect(result).toBe(900);
|
|
367
|
+
});
|
|
368
|
+
});
|
|
369
|
+
describe('createResizeState', () => {
|
|
370
|
+
it('should create valid resize state', () => {
|
|
371
|
+
const event = {
|
|
372
|
+
pointerId: 42,
|
|
373
|
+
clientX: 200,
|
|
374
|
+
};
|
|
375
|
+
mockCell.offsetWidth = 120;
|
|
376
|
+
const result = createResizeState(mockCell, event);
|
|
377
|
+
expect(result).toEqual({
|
|
378
|
+
resizingCell: mockCell,
|
|
379
|
+
pointerId: 42,
|
|
380
|
+
startX: 200,
|
|
381
|
+
startWidth: 120,
|
|
382
|
+
});
|
|
383
|
+
});
|
|
384
|
+
it('should handle different pointer IDs', () => {
|
|
385
|
+
const event = {
|
|
386
|
+
pointerId: 999,
|
|
387
|
+
clientX: 300,
|
|
388
|
+
};
|
|
389
|
+
const result = createResizeState(mockCell, event);
|
|
390
|
+
expect(result.pointerId).toBe(999);
|
|
391
|
+
});
|
|
392
|
+
it('should capture current cell width at time of creation', () => {
|
|
393
|
+
mockCell.offsetWidth = 75;
|
|
394
|
+
const event = {
|
|
395
|
+
pointerId: 1,
|
|
396
|
+
clientX: 100,
|
|
397
|
+
};
|
|
398
|
+
const result = createResizeState(mockCell, event);
|
|
399
|
+
expect(result.startWidth).toBe(75);
|
|
400
|
+
});
|
|
401
|
+
});
|
|
402
|
+
describe('isValidResizeState', () => {
|
|
403
|
+
const mockState = {
|
|
404
|
+
resizingCell: mockCell,
|
|
405
|
+
pointerId: 42,
|
|
406
|
+
startX: 100,
|
|
407
|
+
startWidth: 120,
|
|
408
|
+
};
|
|
409
|
+
it('should return true for matching pointer event', () => {
|
|
410
|
+
const event = { pointerId: 42 };
|
|
411
|
+
const result = isValidResizeState(mockState, event);
|
|
412
|
+
expect(result).toBe(true);
|
|
413
|
+
});
|
|
414
|
+
it('should return false for non-matching pointer ID', () => {
|
|
415
|
+
const event = { pointerId: 43 };
|
|
416
|
+
const result = isValidResizeState(mockState, event);
|
|
417
|
+
expect(result).toBe(false);
|
|
418
|
+
});
|
|
419
|
+
it('should return false for null state', () => {
|
|
420
|
+
const event = { pointerId: 42 };
|
|
421
|
+
const result = isValidResizeState(null, event);
|
|
422
|
+
expect(result).toBe(false);
|
|
423
|
+
});
|
|
424
|
+
it('should handle edge case pointer IDs', () => {
|
|
425
|
+
const zeroIdState = Object.assign(Object.assign({}, mockState), { pointerId: 0 });
|
|
426
|
+
const event = { pointerId: 0 };
|
|
427
|
+
const result = isValidResizeState(zeroIdState, event);
|
|
428
|
+
expect(result).toBe(true);
|
|
429
|
+
});
|
|
430
|
+
});
|
|
431
|
+
describe('updateCellWidthFromResize', () => {
|
|
432
|
+
it('should update cell width during resize', () => {
|
|
433
|
+
const state = {
|
|
434
|
+
resizingCell: mockCell,
|
|
435
|
+
pointerId: 1,
|
|
436
|
+
startX: 100,
|
|
437
|
+
startWidth: 120,
|
|
438
|
+
};
|
|
439
|
+
const event = { clientX: 130 };
|
|
440
|
+
updateCellWidthFromResize(state, event);
|
|
441
|
+
expect(mockCell.style.width).toBe('150px'); // 120 + (130 - 100) = 150
|
|
442
|
+
});
|
|
443
|
+
it('should enforce minimum width constraint', () => {
|
|
444
|
+
const state = {
|
|
445
|
+
resizingCell: mockCell,
|
|
446
|
+
pointerId: 1,
|
|
447
|
+
startX: 100,
|
|
448
|
+
startWidth: 60,
|
|
449
|
+
};
|
|
450
|
+
const event = { clientX: 50 };
|
|
451
|
+
updateCellWidthFromResize(state, event, 40);
|
|
452
|
+
expect(mockCell.style.width).toBe('40px'); // Constrained to minimum
|
|
453
|
+
});
|
|
454
|
+
it('should use default minimum width', () => {
|
|
455
|
+
const state = {
|
|
456
|
+
resizingCell: mockCell,
|
|
457
|
+
pointerId: 1,
|
|
458
|
+
startX: 100,
|
|
459
|
+
startWidth: 50,
|
|
460
|
+
};
|
|
461
|
+
const event = { clientX: 40 };
|
|
462
|
+
updateCellWidthFromResize(state, event);
|
|
463
|
+
expect(mockCell.style.width).toBe(`${TABLE_CONSTANTS.MIN_W}px`);
|
|
464
|
+
});
|
|
465
|
+
it('should handle negative deltas', () => {
|
|
466
|
+
const state = {
|
|
467
|
+
resizingCell: mockCell,
|
|
468
|
+
pointerId: 1,
|
|
469
|
+
startX: 100,
|
|
470
|
+
startWidth: 120,
|
|
471
|
+
};
|
|
472
|
+
const event = { clientX: 80 };
|
|
473
|
+
updateCellWidthFromResize(state, event);
|
|
474
|
+
expect(mockCell.style.width).toBe('100px'); // 120 + (80 - 100) = 100
|
|
475
|
+
});
|
|
476
|
+
});
|
|
477
|
+
describe('Integration Scenarios', () => {
|
|
478
|
+
it('should handle complete resize workflow', () => {
|
|
479
|
+
// Setup initial state
|
|
480
|
+
const initialEvent = {
|
|
481
|
+
pointerId: 1,
|
|
482
|
+
clientX: 100,
|
|
483
|
+
target: mockCell,
|
|
484
|
+
};
|
|
485
|
+
// Create resize state
|
|
486
|
+
const state = createResizeState(mockCell, initialEvent);
|
|
487
|
+
expect(isValidResizeState(state, initialEvent)).toBe(true);
|
|
488
|
+
// Simulate pointer move
|
|
489
|
+
const moveEvent = { pointerId: 1, clientX: 130 };
|
|
490
|
+
expect(isValidResizeState(state, moveEvent)).toBe(true);
|
|
491
|
+
updateCellWidthFromResize(state, moveEvent);
|
|
492
|
+
// Verify width was updated
|
|
493
|
+
expect(mockCell.style.width).toContain('px');
|
|
494
|
+
});
|
|
495
|
+
it('should handle pointer capture workflow', () => {
|
|
496
|
+
mockCell.setPointerCapture = vi.fn();
|
|
497
|
+
mockCell.releasePointerCapture = vi.fn();
|
|
498
|
+
// Set capture
|
|
499
|
+
const setCaptureResult = setPointerCapture(mockCell, 123);
|
|
500
|
+
expect(setCaptureResult).toBe(true);
|
|
501
|
+
// Release capture
|
|
502
|
+
const releaseCaptureResult = releasePointerCapture(mockCell, 123);
|
|
503
|
+
expect(releaseCaptureResult).toBe(true);
|
|
504
|
+
expect(mockCell.setPointerCapture).toHaveBeenCalledWith(123);
|
|
505
|
+
expect(mockCell.releasePointerCapture).toHaveBeenCalledWith(123);
|
|
506
|
+
});
|
|
507
|
+
it('should handle user selection prevention workflow', () => {
|
|
508
|
+
// Start resize - prevent selection
|
|
509
|
+
setUserSelectPrevention(true);
|
|
510
|
+
expect(document.body.style.userSelect).toBe('none');
|
|
511
|
+
// End resize - restore selection
|
|
512
|
+
setUserSelectPrevention(false);
|
|
513
|
+
expect(document.body.style.userSelect).toBe('');
|
|
514
|
+
});
|
|
515
|
+
it('should validate resize handle detection', () => {
|
|
516
|
+
const event = { clientX: 95 };
|
|
517
|
+
mockCell.getBoundingClientRect = vi.fn().mockReturnValue({ left: 0 });
|
|
518
|
+
mockCell.offsetWidth = 100;
|
|
519
|
+
const offsetX = getPointerOffsetInCell(event, mockCell);
|
|
520
|
+
const cellWidth = getCellWidth(mockCell);
|
|
521
|
+
const handleWidth = getHandleWidthForCurrentPointer();
|
|
522
|
+
const inHandle = isInResizeHandle(offsetX, cellWidth, handleWidth);
|
|
523
|
+
expect(offsetX).toBe(95);
|
|
524
|
+
expect(cellWidth).toBe(100);
|
|
525
|
+
expect(inHandle).toBe(true); // 95 >= 100 - handleWidth
|
|
526
|
+
});
|
|
527
|
+
});
|
|
528
|
+
describe('Edge Cases and Error Handling', () => {
|
|
529
|
+
it('should handle extreme coordinate values', () => {
|
|
530
|
+
const extremeEvent = { clientX: Number.MAX_SAFE_INTEGER };
|
|
531
|
+
mockCell.getBoundingClientRect = vi.fn().mockReturnValue({ left: 0 });
|
|
532
|
+
const offset = getPointerOffsetInCell(extremeEvent, mockCell);
|
|
533
|
+
expect(typeof offset).toBe('number');
|
|
534
|
+
expect(isFinite(offset)).toBe(true);
|
|
535
|
+
});
|
|
536
|
+
it('should handle zero-sized cells', () => {
|
|
537
|
+
mockCell.offsetWidth = 0;
|
|
538
|
+
const state = createResizeState(mockCell, mockPointerEvent);
|
|
539
|
+
expect(state.startWidth).toBe(0);
|
|
540
|
+
const moveEvent = { pointerId: 1, clientX: 50 };
|
|
541
|
+
updateCellWidthFromResize(state, moveEvent);
|
|
542
|
+
expect(mockCell.style.width).toBe(`${TABLE_CONSTANTS.MIN_W}px`);
|
|
543
|
+
});
|
|
544
|
+
it('should handle rapid pointer ID changes', () => {
|
|
545
|
+
const state1 = createResizeState(mockCell, {
|
|
546
|
+
pointerId: 1,
|
|
547
|
+
clientX: 100,
|
|
548
|
+
});
|
|
549
|
+
const state2 = createResizeState(mockCell, {
|
|
550
|
+
pointerId: 2,
|
|
551
|
+
clientX: 100,
|
|
552
|
+
});
|
|
553
|
+
const event1 = { pointerId: 1 };
|
|
554
|
+
const event2 = { pointerId: 2 };
|
|
555
|
+
expect(isValidResizeState(state1, event1)).toBe(true);
|
|
556
|
+
expect(isValidResizeState(state1, event2)).toBe(false);
|
|
557
|
+
expect(isValidResizeState(state2, event1)).toBe(false);
|
|
558
|
+
expect(isValidResizeState(state2, event2)).toBe(true);
|
|
559
|
+
});
|
|
560
|
+
it('should handle missing DOM methods gracefully', () => {
|
|
561
|
+
const incompleteCell = {
|
|
562
|
+
tagName: 'TH',
|
|
563
|
+
offsetWidth: 100,
|
|
564
|
+
style: { width: '' },
|
|
565
|
+
getBoundingClientRect: undefined,
|
|
566
|
+
};
|
|
567
|
+
expect(() => {
|
|
568
|
+
getPointerOffsetInCell(mockPointerEvent, incompleteCell);
|
|
569
|
+
}).toThrow();
|
|
570
|
+
});
|
|
571
|
+
});
|
|
572
|
+
describe('Performance and Memory', () => {
|
|
573
|
+
it('should not create unnecessary objects in hot paths', () => {
|
|
574
|
+
var _a, _b;
|
|
575
|
+
const startMemory = ((_a = performance.memory) === null || _a === void 0 ? void 0 : _a.usedJSHeapSize) || 0;
|
|
576
|
+
// Run calculations that should not allocate much memory
|
|
577
|
+
for (let i = 0; i < 1000; i++) {
|
|
578
|
+
calculateNewWidth(100 + i, (i % 20) - 10);
|
|
579
|
+
calculatePointerDelta(i + 50, i);
|
|
580
|
+
isInResizeHandle(i % 100, 100, 10);
|
|
581
|
+
}
|
|
582
|
+
const endMemory = ((_b = performance.memory) === null || _b === void 0 ? void 0 : _b.usedJSHeapSize) || 0;
|
|
583
|
+
const memoryIncrease = endMemory - startMemory;
|
|
584
|
+
// This is a loose check - mainly ensuring we don't have massive memory leaks
|
|
585
|
+
expect(memoryIncrease).toBeLessThan(1000000); // Less than 1MB increase
|
|
586
|
+
});
|
|
587
|
+
it('should handle high-frequency resize updates', () => {
|
|
588
|
+
const state = createResizeState(mockCell, mockPointerEvent);
|
|
589
|
+
const startTime = performance.now();
|
|
590
|
+
// Simulate high-frequency updates
|
|
591
|
+
for (let i = 0; i < 100; i++) {
|
|
592
|
+
const event = { pointerId: 1, clientX: 100 + i };
|
|
593
|
+
if (isValidResizeState(state, event)) {
|
|
594
|
+
updateCellWidthFromResize(state, event);
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
const endTime = performance.now();
|
|
598
|
+
const duration = endTime - startTime;
|
|
599
|
+
// Should complete quickly
|
|
600
|
+
expect(duration).toBeLessThan(100); // Less than 100ms for 100 updates
|
|
601
|
+
});
|
|
602
|
+
});
|
|
603
|
+
});
|
|
604
|
+
//# sourceMappingURL=nv-table.utils.test.js.map
|