@pine-ds/core 3.26.1 → 3.26.3
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/components/mock-pds-modal.js +1 -1
- package/components/mock-pds-modal.js.map +1 -1
- package/components/pds-button2.js +1 -1
- package/components/pds-button2.js.map +1 -1
- package/components/pds-checkbox2.js +1 -1
- package/components/pds-checkbox2.js.map +1 -1
- package/components/pds-combobox.js +3 -3
- package/components/pds-combobox.js.map +1 -1
- package/components/pds-filter.js +14 -10
- package/components/pds-filter.js.map +1 -1
- package/components/pds-input.js +5 -2
- package/components/pds-input.js.map +1 -1
- package/components/pds-modal.js +1 -1
- package/components/pds-modal.js.map +1 -1
- package/components/pds-select.js +1 -1
- package/components/pds-select.js.map +1 -1
- package/components/pds-switch.js +1 -1
- package/components/pds-switch.js.map +1 -1
- package/components/pds-table-cell2.js +5 -4
- package/components/pds-table-cell2.js.map +1 -1
- package/components/pds-table-head-cell2.js +5 -4
- package/components/pds-table-head-cell2.js.map +1 -1
- package/components/pds-table.js +12 -10
- package/components/pds-table.js.map +1 -1
- package/components/pds-tooltip.js +1 -1
- package/components/pds-tooltip.js.map +1 -1
- package/components/scroll.js +78 -0
- package/components/scroll.js.map +1 -0
- package/dist/cjs/{index-Dlc5O3n_.js → index-BYnQkA7p.js} +3 -3
- package/dist/cjs/index-BYnQkA7p.js.map +1 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/mock-pds-modal.cjs.entry.js +2 -2
- package/dist/cjs/mock-pds-modal.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-accordion.cjs.entry.js +1 -1
- package/dist/cjs/pds-alert.cjs.entry.js +1 -1
- package/dist/cjs/pds-avatar.cjs.entry.js +1 -1
- package/dist/cjs/pds-box.cjs.entry.js +1 -1
- package/dist/cjs/pds-button.cjs.entry.js +2 -2
- package/dist/cjs/pds-button.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-checkbox.cjs.entry.js +2 -2
- package/dist/cjs/pds-checkbox.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-chip.cjs.entry.js +1 -1
- package/dist/cjs/pds-combobox.cjs.entry.js +4 -4
- package/dist/cjs/pds-combobox.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-container.cjs.entry.js +1 -1
- package/dist/cjs/pds-copytext.cjs.entry.js +1 -1
- package/dist/cjs/pds-divider.cjs.entry.js +1 -1
- package/dist/cjs/pds-dropdown-menu-item.cjs.entry.js +1 -1
- package/dist/cjs/pds-dropdown-menu-separator.cjs.entry.js +1 -1
- package/dist/cjs/pds-dropdown-menu.cjs.entry.js +1 -1
- package/dist/cjs/pds-filter.cjs.entry.js +15 -11
- package/dist/cjs/pds-filter.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-filters.cjs.entry.js +1 -1
- package/dist/cjs/pds-icon.cjs.entry.js +1 -1
- package/dist/cjs/pds-image.cjs.entry.js +1 -1
- package/dist/cjs/pds-input.cjs.entry.js +6 -3
- package/dist/cjs/pds-input.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-link.cjs.entry.js +1 -1
- package/dist/cjs/pds-loader.cjs.entry.js +1 -1
- package/dist/cjs/pds-modal-content.cjs.entry.js +1 -1
- package/dist/cjs/pds-modal-footer.cjs.entry.js +1 -1
- package/dist/cjs/pds-modal-header.cjs.entry.js +1 -1
- package/dist/cjs/pds-modal.cjs.entry.js +2 -2
- package/dist/cjs/pds-modal.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-multiselect.cjs.entry.js +1 -1
- package/dist/cjs/pds-popover.cjs.entry.js +1 -1
- package/dist/cjs/pds-progress.cjs.entry.js +1 -1
- package/dist/cjs/pds-property.cjs.entry.js +1 -1
- package/dist/cjs/pds-radio-group.cjs.entry.js +1 -1
- package/dist/cjs/pds-radio.cjs.entry.js +1 -1
- package/dist/cjs/pds-row.cjs.entry.js +1 -1
- package/dist/cjs/pds-select.cjs.entry.js +2 -2
- package/dist/cjs/pds-select.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-sortable-item.cjs.entry.js +1 -1
- package/dist/cjs/pds-sortable.cjs.entry.js +1 -1
- package/dist/cjs/pds-switch.cjs.entry.js +2 -2
- package/dist/cjs/pds-switch.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-tab.cjs.entry.js +1 -1
- package/dist/cjs/pds-table-body.cjs.entry.js +1 -1
- package/dist/cjs/pds-table-cell.cjs.entry.js +6 -5
- package/dist/cjs/pds-table-cell.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-table-head-cell.cjs.entry.js +6 -5
- package/dist/cjs/pds-table-head-cell.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-table-head.cjs.entry.js +1 -1
- package/dist/cjs/pds-table-row.cjs.entry.js +1 -1
- package/dist/cjs/pds-table.cjs.entry.js +13 -11
- package/dist/cjs/pds-table.entry.cjs.js.map +1 -1
- package/dist/cjs/pds-tabpanel.cjs.entry.js +1 -1
- package/dist/cjs/pds-tabs.cjs.entry.js +1 -1
- package/dist/cjs/pds-text.cjs.entry.js +1 -1
- package/dist/cjs/pds-textarea.cjs.entry.js +1 -1
- package/dist/cjs/pds-toast.cjs.entry.js +1 -1
- package/dist/cjs/pds-tooltip.cjs.entry.js +2 -2
- package/dist/cjs/pds-tooltip.entry.cjs.js.map +1 -1
- package/dist/cjs/pine-core.cjs.js +1 -1
- package/dist/cjs/scroll-2XcoE_6Q.js +82 -0
- package/dist/cjs/scroll-2XcoE_6Q.js.map +1 -0
- package/dist/collection/components/pds-button/pds-button.css +1 -1
- package/dist/collection/components/pds-checkbox/pds-checkbox.css +10 -6
- package/dist/collection/components/pds-combobox/pds-combobox.css +2 -2
- package/dist/collection/components/pds-combobox/pds-combobox.js +2 -2
- package/dist/collection/components/pds-combobox/pds-combobox.js.map +1 -1
- package/dist/collection/components/pds-filters/pds-filter/pds-filter.css +11 -9
- package/dist/collection/components/pds-filters/pds-filter/pds-filter.js +13 -9
- package/dist/collection/components/pds-filters/pds-filter/pds-filter.js.map +1 -1
- package/dist/collection/components/pds-input/pds-input.css +7 -3
- package/dist/collection/components/pds-input/pds-input.js +4 -1
- package/dist/collection/components/pds-input/pds-input.js.map +1 -1
- package/dist/collection/components/pds-modal/pds-modal.css +2 -1
- package/dist/collection/components/pds-select/pds-select.css +8 -5
- package/dist/collection/components/pds-switch/pds-switch.css +4 -4
- package/dist/collection/components/pds-table/pds-table-cell/pds-table-cell.css +6 -1
- package/dist/collection/components/pds-table/pds-table-cell/pds-table-cell.js +4 -3
- package/dist/collection/components/pds-table/pds-table-cell/pds-table-cell.js.map +1 -1
- package/dist/collection/components/pds-table/pds-table-head-cell/pds-table-head-cell.css +6 -1
- package/dist/collection/components/pds-table/pds-table-head-cell/pds-table-head-cell.js +4 -3
- package/dist/collection/components/pds-table/pds-table-head-cell/pds-table-head-cell.js.map +1 -1
- package/dist/collection/components/pds-table/pds-table.css +16 -6
- package/dist/collection/components/pds-table/pds-table.js +11 -9
- package/dist/collection/components/pds-table/pds-table.js.map +1 -1
- package/dist/collection/components/pds-tooltip/pds-tooltip.css +2 -1
- package/dist/collection/utils/scroll.js +78 -0
- package/dist/collection/utils/scroll.js.map +1 -0
- package/dist/collection/utils/test/axe.js +101 -0
- package/dist/collection/utils/test/axe.js.map +1 -0
- package/dist/docs.json +1 -1
- package/dist/esm/{index-CO9kz-Pi.js → index-QYCDCKN2.js} +3 -3
- package/dist/esm/index-QYCDCKN2.js.map +1 -0
- package/dist/esm/loader.js +2 -2
- package/dist/esm/mock-pds-modal.entry.js +2 -2
- package/dist/esm/mock-pds-modal.entry.js.map +1 -1
- package/dist/esm/pds-accordion.entry.js +1 -1
- package/dist/esm/pds-alert.entry.js +1 -1
- package/dist/esm/pds-avatar.entry.js +1 -1
- package/dist/esm/pds-box.entry.js +1 -1
- package/dist/esm/pds-button.entry.js +2 -2
- package/dist/esm/pds-button.entry.js.map +1 -1
- package/dist/esm/pds-checkbox.entry.js +2 -2
- package/dist/esm/pds-checkbox.entry.js.map +1 -1
- package/dist/esm/pds-chip.entry.js +1 -1
- package/dist/esm/pds-combobox.entry.js +4 -4
- package/dist/esm/pds-combobox.entry.js.map +1 -1
- package/dist/esm/pds-container.entry.js +1 -1
- package/dist/esm/pds-copytext.entry.js +1 -1
- package/dist/esm/pds-divider.entry.js +1 -1
- package/dist/esm/pds-dropdown-menu-item.entry.js +1 -1
- package/dist/esm/pds-dropdown-menu-separator.entry.js +1 -1
- package/dist/esm/pds-dropdown-menu.entry.js +1 -1
- package/dist/esm/pds-filter.entry.js +15 -11
- package/dist/esm/pds-filter.entry.js.map +1 -1
- package/dist/esm/pds-filters.entry.js +1 -1
- package/dist/esm/pds-icon.entry.js +1 -1
- package/dist/esm/pds-image.entry.js +1 -1
- package/dist/esm/pds-input.entry.js +6 -3
- package/dist/esm/pds-input.entry.js.map +1 -1
- package/dist/esm/pds-link.entry.js +1 -1
- package/dist/esm/pds-loader.entry.js +1 -1
- package/dist/esm/pds-modal-content.entry.js +1 -1
- package/dist/esm/pds-modal-footer.entry.js +1 -1
- package/dist/esm/pds-modal-header.entry.js +1 -1
- package/dist/esm/pds-modal.entry.js +2 -2
- package/dist/esm/pds-modal.entry.js.map +1 -1
- package/dist/esm/pds-multiselect.entry.js +1 -1
- package/dist/esm/pds-popover.entry.js +1 -1
- package/dist/esm/pds-progress.entry.js +1 -1
- package/dist/esm/pds-property.entry.js +1 -1
- package/dist/esm/pds-radio-group.entry.js +1 -1
- package/dist/esm/pds-radio.entry.js +1 -1
- package/dist/esm/pds-row.entry.js +1 -1
- package/dist/esm/pds-select.entry.js +2 -2
- package/dist/esm/pds-select.entry.js.map +1 -1
- package/dist/esm/pds-sortable-item.entry.js +1 -1
- package/dist/esm/pds-sortable.entry.js +1 -1
- package/dist/esm/pds-switch.entry.js +2 -2
- package/dist/esm/pds-switch.entry.js.map +1 -1
- package/dist/esm/pds-tab.entry.js +1 -1
- package/dist/esm/pds-table-body.entry.js +1 -1
- package/dist/esm/pds-table-cell.entry.js +6 -5
- package/dist/esm/pds-table-cell.entry.js.map +1 -1
- package/dist/esm/pds-table-head-cell.entry.js +6 -5
- package/dist/esm/pds-table-head-cell.entry.js.map +1 -1
- package/dist/esm/pds-table-head.entry.js +1 -1
- package/dist/esm/pds-table-row.entry.js +1 -1
- package/dist/esm/pds-table.entry.js +13 -11
- package/dist/esm/pds-table.entry.js.map +1 -1
- package/dist/esm/pds-tabpanel.entry.js +1 -1
- package/dist/esm/pds-tabs.entry.js +1 -1
- package/dist/esm/pds-text.entry.js +1 -1
- package/dist/esm/pds-textarea.entry.js +1 -1
- package/dist/esm/pds-toast.entry.js +1 -1
- package/dist/esm/pds-tooltip.entry.js +2 -2
- package/dist/esm/pds-tooltip.entry.js.map +1 -1
- package/dist/esm/pine-core.js +2 -2
- package/dist/esm/scroll-DtgUQhjl.js +78 -0
- package/dist/esm/scroll-DtgUQhjl.js.map +1 -0
- package/dist/esm-es5/{index-CO9kz-Pi.js → index-QYCDCKN2.js} +3 -3
- package/dist/esm-es5/index-QYCDCKN2.js.map +1 -0
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/mock-pds-modal.entry.js +1 -1
- package/dist/esm-es5/mock-pds-modal.entry.js.map +1 -1
- package/dist/esm-es5/pds-accordion.entry.js +1 -1
- package/dist/esm-es5/pds-alert.entry.js +1 -1
- package/dist/esm-es5/pds-avatar.entry.js +1 -1
- package/dist/esm-es5/pds-box.entry.js +1 -1
- package/dist/esm-es5/pds-button.entry.js +1 -1
- package/dist/esm-es5/pds-button.entry.js.map +1 -1
- package/dist/esm-es5/pds-checkbox.entry.js +1 -1
- package/dist/esm-es5/pds-checkbox.entry.js.map +1 -1
- package/dist/esm-es5/pds-chip.entry.js +1 -1
- package/dist/esm-es5/pds-combobox.entry.js +2 -2
- package/dist/esm-es5/pds-combobox.entry.js.map +1 -1
- package/dist/esm-es5/pds-container.entry.js +1 -1
- package/dist/esm-es5/pds-copytext.entry.js +1 -1
- package/dist/esm-es5/pds-divider.entry.js +1 -1
- package/dist/esm-es5/pds-dropdown-menu-item.entry.js +1 -1
- package/dist/esm-es5/pds-dropdown-menu-separator.entry.js +1 -1
- package/dist/esm-es5/pds-dropdown-menu.entry.js +1 -1
- package/dist/esm-es5/pds-filter.entry.js +1 -1
- package/dist/esm-es5/pds-filter.entry.js.map +1 -1
- package/dist/esm-es5/pds-filters.entry.js +1 -1
- package/dist/esm-es5/pds-icon.entry.js +1 -1
- package/dist/esm-es5/pds-image.entry.js +1 -1
- package/dist/esm-es5/pds-input.entry.js +1 -1
- package/dist/esm-es5/pds-input.entry.js.map +1 -1
- package/dist/esm-es5/pds-link.entry.js +1 -1
- package/dist/esm-es5/pds-loader.entry.js +1 -1
- package/dist/esm-es5/pds-modal-content.entry.js +1 -1
- package/dist/esm-es5/pds-modal-footer.entry.js +1 -1
- package/dist/esm-es5/pds-modal-header.entry.js +1 -1
- package/dist/esm-es5/pds-modal.entry.js +1 -1
- package/dist/esm-es5/pds-modal.entry.js.map +1 -1
- package/dist/esm-es5/pds-multiselect.entry.js +1 -1
- package/dist/esm-es5/pds-popover.entry.js +1 -1
- package/dist/esm-es5/pds-progress.entry.js +1 -1
- package/dist/esm-es5/pds-property.entry.js +1 -1
- package/dist/esm-es5/pds-radio-group.entry.js +1 -1
- package/dist/esm-es5/pds-radio.entry.js +1 -1
- package/dist/esm-es5/pds-row.entry.js +1 -1
- package/dist/esm-es5/pds-select.entry.js +1 -1
- package/dist/esm-es5/pds-select.entry.js.map +1 -1
- package/dist/esm-es5/pds-sortable-item.entry.js +1 -1
- package/dist/esm-es5/pds-sortable.entry.js +1 -1
- package/dist/esm-es5/pds-switch.entry.js +1 -1
- package/dist/esm-es5/pds-switch.entry.js.map +1 -1
- package/dist/esm-es5/pds-tab.entry.js +1 -1
- package/dist/esm-es5/pds-table-body.entry.js +1 -1
- package/dist/esm-es5/pds-table-cell.entry.js +1 -1
- package/dist/esm-es5/pds-table-cell.entry.js.map +1 -1
- package/dist/esm-es5/pds-table-head-cell.entry.js +1 -1
- package/dist/esm-es5/pds-table-head-cell.entry.js.map +1 -1
- package/dist/esm-es5/pds-table-head.entry.js +1 -1
- package/dist/esm-es5/pds-table-row.entry.js +1 -1
- package/dist/esm-es5/pds-table.entry.js +1 -1
- package/dist/esm-es5/pds-table.entry.js.map +1 -1
- package/dist/esm-es5/pds-tabpanel.entry.js +1 -1
- package/dist/esm-es5/pds-tabs.entry.js +1 -1
- package/dist/esm-es5/pds-text.entry.js +1 -1
- package/dist/esm-es5/pds-textarea.entry.js +1 -1
- package/dist/esm-es5/pds-toast.entry.js +1 -1
- package/dist/esm-es5/pds-tooltip.entry.js +1 -1
- package/dist/esm-es5/pds-tooltip.entry.js.map +1 -1
- package/dist/esm-es5/pine-core.js +1 -1
- package/dist/esm-es5/scroll-DtgUQhjl.js +2 -0
- package/dist/esm-es5/scroll-DtgUQhjl.js.map +1 -0
- package/dist/pine-core/mock-pds-modal.entry.esm.js.map +1 -1
- package/dist/pine-core/p-043395a8.entry.js +2 -0
- package/dist/pine-core/{p-8d0c1f6d.entry.js.map → p-043395a8.entry.js.map} +1 -1
- package/dist/pine-core/{p-932f4860.entry.js → p-07a19657.entry.js} +2 -2
- package/dist/pine-core/p-08267d86.system.entry.js +2 -0
- package/dist/pine-core/{p-93b379c2.system.entry.js.map → p-08267d86.system.entry.js.map} +1 -1
- package/dist/pine-core/{p-ed781905.system.entry.js → p-0bc89023.system.entry.js} +2 -2
- package/dist/pine-core/p-0ca1dada.entry.js +2 -0
- package/dist/pine-core/{p-b63c7247.entry.js.map → p-0ca1dada.entry.js.map} +1 -1
- package/dist/pine-core/{p-26aa3195.entry.js → p-0d3a6abc.entry.js} +2 -2
- package/dist/pine-core/p-0jF8lVUy.system.js.map +1 -0
- package/dist/pine-core/{p-e7e166f2.entry.js → p-1256b83e.entry.js} +2 -2
- package/dist/pine-core/p-1700705c.entry.js +2 -0
- package/dist/pine-core/{p-952b41e5.system.entry.js → p-1d7cbf49.system.entry.js} +2 -2
- package/dist/pine-core/p-1eJB2hvd.system.js.map +1 -0
- package/dist/pine-core/{p-DkENjswB.system.js.map → p-1hZDd74J.system.js.map} +1 -1
- package/dist/pine-core/{p-205d8c56.entry.js → p-21a858a0.entry.js} +2 -2
- package/dist/pine-core/{p-3c864e3d.entry.js → p-2335222d.entry.js} +2 -2
- package/dist/pine-core/p-24656fd4.entry.js +2 -0
- package/dist/pine-core/p-24656fd4.entry.js.map +1 -0
- package/dist/pine-core/p-2549e386.system.entry.js +2 -0
- package/dist/pine-core/{p-7bc34bce.system.entry.js.map → p-2549e386.system.entry.js.map} +1 -1
- package/dist/pine-core/{p-24f9a03b.system.entry.js → p-2728bb30.system.entry.js} +2 -2
- package/dist/pine-core/p-2a4be282.entry.js +3 -0
- package/dist/pine-core/{p-127a84bf.entry.js.map → p-2a4be282.entry.js.map} +1 -1
- package/dist/pine-core/{p-9e073662.entry.js → p-2c88b85e.entry.js} +2 -2
- package/dist/pine-core/{p-bd277581.entry.js → p-2dcd369d.entry.js} +2 -2
- package/dist/pine-core/{p-9d7f17a4.system.entry.js → p-30302dbb.system.entry.js} +2 -2
- package/dist/pine-core/{p-5552ca6b.system.entry.js → p-33fd214a.system.entry.js} +2 -2
- package/dist/pine-core/{p-8b997cb3.entry.js → p-360130c2.entry.js} +2 -2
- package/dist/pine-core/{p-0f037132.system.entry.js → p-3824d80d.system.entry.js} +2 -2
- package/dist/pine-core/{p-94fde072.system.entry.js → p-3c89502e.system.entry.js} +2 -2
- package/dist/pine-core/{p-1fd52c1b.system.entry.js → p-3d0f3dcb.system.entry.js} +2 -2
- package/dist/pine-core/p-3eae6f9f.system.entry.js +2 -0
- package/dist/pine-core/{p-617dc902.system.entry.js.map → p-3eae6f9f.system.entry.js.map} +1 -1
- package/dist/pine-core/{p-69221099.system.entry.js → p-3f4435b8.system.entry.js} +2 -2
- package/dist/pine-core/{p-13821696.entry.js → p-43565cf5.entry.js} +2 -2
- package/dist/pine-core/{p-d90f7fe4.entry.js → p-44318b5c.entry.js} +2 -2
- package/dist/pine-core/{p-e0862ab5.entry.js → p-4728c80a.entry.js} +2 -2
- package/dist/pine-core/{p-dd9888e9.entry.js → p-4a4048f3.entry.js} +2 -2
- package/dist/pine-core/p-4e79023c.system.entry.js +2 -0
- package/dist/pine-core/p-4e79023c.system.entry.js.map +1 -0
- package/dist/pine-core/{p-dc724dee.entry.js → p-4fc48330.entry.js} +2 -2
- package/dist/pine-core/{p-0561744f.entry.js → p-500ef8ee.entry.js} +2 -2
- package/dist/pine-core/{p-a76a454f.system.entry.js → p-528d50eb.system.entry.js} +2 -2
- package/dist/pine-core/p-56aedf71.entry.js +2 -0
- package/dist/pine-core/{p-61674647.entry.js.map → p-56aedf71.entry.js.map} +1 -1
- package/dist/pine-core/{p-128a483e.system.entry.js → p-58bd1590.system.entry.js} +2 -2
- package/dist/pine-core/p-5b521b20.entry.js +2 -0
- package/dist/pine-core/p-5c259f42.system.entry.js +4 -0
- package/dist/pine-core/{p-ea94b002.system.entry.js.map → p-5c259f42.system.entry.js.map} +1 -1
- package/dist/pine-core/{p-519d44b8.entry.js → p-5f9a6f53.entry.js} +2 -2
- package/dist/pine-core/{p-7d9f7018.entry.js → p-61bcaaee.entry.js} +2 -2
- package/dist/pine-core/p-621405fc.entry.js +2 -0
- package/dist/pine-core/{p-4beb8ae5.entry.js.map → p-621405fc.entry.js.map} +1 -1
- package/dist/pine-core/p-65224129.system.entry.js +2 -0
- package/dist/pine-core/{p-c746c9ad.system.entry.js.map → p-65224129.system.entry.js.map} +1 -1
- package/dist/pine-core/{p-0bf1fee1.entry.js → p-67a81e55.entry.js} +2 -2
- package/dist/pine-core/{p-c5dc1e2d.system.entry.js → p-6a20ba14.system.entry.js} +2 -2
- package/dist/pine-core/p-6af000e5.entry.js +2 -0
- package/dist/pine-core/{p-54e967ca.entry.js.map → p-6af000e5.entry.js.map} +1 -1
- package/dist/pine-core/{p-8731836c.entry.js → p-6c836757.entry.js} +2 -2
- package/dist/pine-core/p-6c9bb2a5.entry.js +2 -0
- package/dist/pine-core/{p-61c885c7.entry.js.map → p-6c9bb2a5.entry.js.map} +1 -1
- package/dist/pine-core/{p-42d83b1f.entry.js → p-6ca31ddd.entry.js} +2 -2
- package/dist/pine-core/p-6f4f62ff.system.entry.js +2 -0
- package/dist/pine-core/p-6f4f62ff.system.entry.js.map +1 -0
- package/dist/pine-core/{p-c299c019.system.entry.js → p-74486022.system.entry.js} +2 -2
- package/dist/pine-core/p-7456ae7a.system.entry.js +2 -0
- package/dist/pine-core/{p-00e487c4.system.entry.js.map → p-7456ae7a.system.entry.js.map} +1 -1
- package/dist/pine-core/{p-6ff1d23e.entry.js → p-77807b63.entry.js} +2 -2
- package/dist/pine-core/p-78184199.entry.js +2 -0
- package/dist/pine-core/p-78184199.entry.js.map +1 -0
- package/dist/pine-core/{p-5df670e9.entry.js → p-7ba75e19.entry.js} +3 -3
- package/dist/pine-core/p-7u7MeeeZ.system.js.map +1 -0
- package/dist/pine-core/{p-fd6e7155.entry.js → p-847ca369.entry.js} +2 -2
- package/dist/pine-core/p-859aa3b0.entry.js +2 -0
- package/dist/pine-core/{p-ec974e1d.entry.js.map → p-859aa3b0.entry.js.map} +1 -1
- package/dist/pine-core/{p-2c48e33c.entry.js → p-8c8048df.entry.js} +2 -2
- package/dist/pine-core/{p-6acc2e5b.system.entry.js → p-8dea1946.system.entry.js} +2 -2
- package/dist/pine-core/{p-Cng7Mtub.system.js.map → p-8nqjUIna.system.js.map} +1 -1
- package/dist/pine-core/{p-0d4b2bbc.system.entry.js → p-9120a7fa.system.entry.js} +2 -2
- package/dist/pine-core/{p-35d9e3c8.system.entry.js → p-97d5a937.system.entry.js} +2 -2
- package/dist/pine-core/{p-4993f30e.system.entry.js → p-97e0b205.system.entry.js} +2 -2
- package/dist/pine-core/{p-a713fedd.system.entry.js → p-98332835.system.entry.js} +2 -2
- package/dist/pine-core/{p-939ae09f.entry.js → p-99739465.entry.js} +2 -2
- package/dist/pine-core/{p-Djhe2zUv.system.js → p-9X_erY0S.system.js} +2 -2
- package/dist/pine-core/{p-Djhe2zUv.system.js.map → p-9X_erY0S.system.js.map} +1 -1
- package/dist/pine-core/{p-3524e30c.system.entry.js → p-9a2dc18d.system.entry.js} +2 -2
- package/dist/pine-core/{p-06fbdc35.entry.js → p-9e62532d.entry.js} +2 -2
- package/dist/pine-core/{p-1768ad5e.entry.js → p-9e98793e.entry.js} +2 -2
- package/dist/pine-core/{p-BMWZMLrp.system.js.map → p-B5hxTy5U.system.js.map} +1 -1
- package/dist/pine-core/p-B8wXrRCn.system.js.map +1 -0
- package/dist/pine-core/p-BEk_6bpE.system.js.map +1 -0
- package/dist/pine-core/{p-CIRw0SFV.system.js.map → p-BHr70Hts.system.js.map} +1 -1
- package/dist/pine-core/{p-iOyU21aP.system.js.map → p-BILA6IDX.system.js.map} +1 -1
- package/dist/pine-core/{p-D504xCQQ.system.js.map → p-BR3EzrR2.system.js.map} +1 -1
- package/dist/pine-core/{p-VWcPIY1a.system.js.map → p-BWYstZfx.system.js.map} +1 -1
- package/dist/pine-core/{p-DWrLi0lj.system.js.map → p-B_ue56xA.system.js.map} +1 -1
- package/dist/pine-core/{p-xKyEDmi0.system.js.map → p-Bdrd1hDP.system.js.map} +1 -1
- package/dist/pine-core/{p-DUvF_h4G.system.js.map → p-BfwVCQ2C.system.js.map} +1 -1
- package/dist/pine-core/{p-BYHypIS4.system.js.map → p-BhXECqd_.system.js.map} +1 -1
- package/dist/pine-core/{p-CNgeZOJ8.system.js.map → p-Bq2VWG-F.system.js.map} +1 -1
- package/dist/pine-core/{p-B7_7oNQG.system.js.map → p-BtZYIh3H.system.js.map} +1 -1
- package/dist/pine-core/p-BzszOvm1.system.js.map +1 -0
- package/dist/pine-core/p-C0XRql_j.system.js.map +1 -0
- package/dist/pine-core/{p-M5aqIQje.system.js.map → p-C0r-Omcz.system.js.map} +1 -1
- package/dist/pine-core/p-C2Pw0xAP.system.js.map +1 -0
- package/dist/pine-core/p-C6LTEDPh.system.js.map +1 -0
- package/dist/pine-core/{p-BjaDq65J.system.js.map → p-C8wBjwhX.system.js.map} +1 -1
- package/dist/pine-core/{p-CeUxuw8r.system.js.map → p-CG-Uj3mN.system.js.map} +1 -1
- package/dist/pine-core/{p-D2CTdoEq.system.js.map → p-CIRsbQAW.system.js.map} +1 -1
- package/dist/pine-core/{p-B2EsHCoA.system.js.map → p-CKshb3YH.system.js.map} +1 -1
- package/dist/pine-core/{p-D4yK_qVB.system.js.map → p-CMbqUapr.system.js.map} +1 -1
- package/dist/pine-core/{p-BD9ysh2r.system.js.map → p-CQS3Y0nn.system.js.map} +1 -1
- package/dist/pine-core/p-CX0Csdth.system.js.map +1 -0
- package/dist/pine-core/{p-BwqSEhik.system.js.map → p-CZSA3A1S.system.js.map} +1 -1
- package/dist/pine-core/{p-BuXqrZlE.system.js.map → p-CbRVp4gv.system.js.map} +1 -1
- package/dist/pine-core/{p-C08fY97u.system.js.map → p-CfyFDUw5.system.js.map} +1 -1
- package/dist/pine-core/{p-BLil033h.system.js.map → p-CgPvrU-c.system.js.map} +1 -1
- package/dist/pine-core/{p-DFd5KJNr.system.js.map → p-CjuuQ5fk.system.js.map} +1 -1
- package/dist/pine-core/{p-Bm0i20zh.system.js.map → p-Ck9i0WVa.system.js.map} +1 -1
- package/dist/pine-core/{p-0mArGKTT.system.js.map → p-Cm5r7dPz.system.js.map} +1 -1
- package/dist/pine-core/{p-DxU4fApL.system.js.map → p-CtZbV7sl.system.js.map} +1 -1
- package/dist/pine-core/{p-DDgPxucg.system.js.map → p-CwlStDlm.system.js.map} +1 -1
- package/dist/pine-core/{p-B1bh2Wvv.system.js → p-CyJVqIlm.system.js} +3 -3
- package/dist/pine-core/p-CyJVqIlm.system.js.map +1 -0
- package/dist/pine-core/p-D2ZsBdFi.system.js.map +1 -0
- package/dist/pine-core/{p-1S7sNRrT.system.js.map → p-DSfc0hSW.system.js.map} +1 -1
- package/dist/pine-core/p-DUOWHRqL.system.js.map +1 -0
- package/dist/pine-core/{p-sB8ZB68H.system.js.map → p-DUaDwLU_.system.js.map} +1 -1
- package/dist/pine-core/p-DVra397g.system.js +2 -0
- package/dist/pine-core/p-DVra397g.system.js.map +1 -0
- package/dist/pine-core/p-D_X9pwRF.system.js.map +1 -0
- package/dist/pine-core/{p-CoxD4Fzc.system.js.map → p-Dn6xWpZX.system.js.map} +1 -1
- package/dist/pine-core/{p-4d6YziBa.system.js.map → p-Dt4eN_hu.system.js.map} +1 -1
- package/dist/pine-core/{p-MtzjfzAh.system.js.map → p-DtKEcQXo.system.js.map} +1 -1
- package/dist/pine-core/p-DtgUQhjl.js +2 -0
- package/dist/pine-core/p-DtgUQhjl.js.map +1 -0
- package/dist/pine-core/{p-IrhpBtZN.system.js.map → p-DuIwxDGo.system.js.map} +1 -1
- package/dist/pine-core/{p-5MZ-y5Ap.system.js.map → p-KgPSFwRc.system.js.map} +1 -1
- package/dist/pine-core/{p-CO9kz-Pi.js → p-QYCDCKN2.js} +3 -3
- package/dist/pine-core/{p-B1bh2Wvv.system.js.map → p-QYCDCKN2.js.map} +1 -1
- package/dist/pine-core/{p-05771ef2.system.entry.js → p-a6ab979f.system.entry.js} +2 -2
- package/dist/pine-core/p-a80f68ce.entry.js +2 -0
- package/dist/pine-core/p-a80f68ce.entry.js.map +1 -0
- package/dist/pine-core/{p-b272656d.system.entry.js → p-a81aa273.system.entry.js} +2 -2
- package/dist/pine-core/{p-63fd14b1.system.entry.js → p-a896db32.system.entry.js} +2 -2
- package/dist/pine-core/{p-779c4bd5.system.entry.js → p-ac2900e1.system.entry.js} +2 -2
- package/dist/pine-core/p-acf6592f.system.entry.js +2 -0
- package/dist/pine-core/p-acf6592f.system.entry.js.map +1 -0
- package/dist/pine-core/p-ad2bb5e4.entry.js +2 -0
- package/dist/pine-core/p-ad2bb5e4.entry.js.map +1 -0
- package/dist/pine-core/p-ae80a5cc.system.entry.js +2 -0
- package/dist/pine-core/{p-c7246fe4.system.entry.js.map → p-ae80a5cc.system.entry.js.map} +1 -1
- package/dist/pine-core/{p-fbd8a4ac.entry.js → p-b294a16b.entry.js} +2 -2
- package/dist/pine-core/{p-bb4bb3a7.entry.js → p-b37b3ad2.entry.js} +2 -2
- package/dist/pine-core/{p-8b8d1b07.entry.js → p-b42320fe.entry.js} +2 -2
- package/dist/pine-core/p-b4c51353.system.entry.js +2 -0
- package/dist/pine-core/{p-cb733c9c.system.entry.js.map → p-b4c51353.system.entry.js.map} +1 -1
- package/dist/pine-core/{p-253e2bfd.system.entry.js → p-b611b9ab.system.entry.js} +2 -2
- package/dist/pine-core/{p-4cf4558e.entry.js → p-b7342b09.entry.js} +2 -2
- package/dist/pine-core/p-c53bfe6e.entry.js +2 -0
- package/dist/pine-core/{p-be76de9e.entry.js.map → p-c53bfe6e.entry.js.map} +1 -1
- package/dist/pine-core/{p-90126a46.system.entry.js → p-c7259d80.system.entry.js} +3 -3
- package/dist/pine-core/p-cb9b6ccc.system.entry.js +2 -0
- package/dist/pine-core/p-cb9b6ccc.system.entry.js.map +1 -0
- package/dist/pine-core/{p-4710c59d.entry.js → p-cc7e0da3.entry.js} +2 -2
- package/dist/pine-core/p-cd6b266c.system.entry.js +2 -0
- package/dist/pine-core/{p-a12e38aa.system.entry.js.map → p-cd6b266c.system.entry.js.map} +1 -1
- package/dist/pine-core/{p-bf1ab568.system.entry.js → p-ce4de7f0.system.entry.js} +2 -2
- package/dist/pine-core/{p-1c26a838.system.entry.js → p-cfebee75.system.entry.js} +2 -2
- package/dist/pine-core/{p-c424a27a.system.entry.js → p-d5ba377c.system.entry.js} +2 -2
- package/dist/pine-core/{p-f924994c.entry.js → p-d83e411d.entry.js} +2 -2
- package/dist/pine-core/{p-c7cab4ca.entry.js → p-d96c3850.entry.js} +2 -2
- package/dist/pine-core/{p-b117b00a.system.entry.js → p-e2c42a2e.system.entry.js} +2 -2
- package/dist/pine-core/{p-f4662c9d.system.entry.js → p-e4f66d23.system.entry.js} +2 -2
- package/dist/pine-core/{p-2c2d2080.system.entry.js → p-e626cbd5.system.entry.js} +2 -2
- package/dist/pine-core/{p-2c7f3d5e.system.entry.js → p-e65b1e5f.system.entry.js} +2 -2
- package/dist/pine-core/{p-cea4bfaa.system.entry.js → p-e9e4e7f9.system.entry.js} +2 -2
- package/dist/pine-core/{p-5eb9a3e2.entry.js → p-ec7f210f.entry.js} +2 -2
- package/dist/pine-core/{p-13a814c0.system.entry.js → p-ef155f8e.system.entry.js} +2 -2
- package/dist/pine-core/{p-2ca648d8.system.entry.js → p-f9a46770.system.entry.js} +2 -2
- package/dist/pine-core/{p-b8ca7bca.entry.js → p-fa68509f.entry.js} +2 -2
- package/dist/pine-core/{p-f30bde36.system.entry.js → p-fc2789df.system.entry.js} +2 -2
- package/dist/pine-core/{p-9e8b71ed.system.entry.js → p-fcea314c.system.entry.js} +2 -2
- package/dist/pine-core/{p-A6hgZgB9.system.js.map → p-lXz5a0gw.system.js.map} +1 -1
- package/dist/pine-core/{p-BtXGBfVh.system.js.map → p-yb-SBJqk.system.js.map} +1 -1
- package/dist/pine-core/pds-button.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-checkbox.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-combobox.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-filter.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-input.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-modal.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-select.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-switch.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-table-cell.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-table-head-cell.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-table.entry.esm.js.map +1 -1
- package/dist/pine-core/pds-tooltip.entry.esm.js.map +1 -1
- package/dist/pine-core/pine-core.css +1 -1
- package/dist/pine-core/pine-core.esm.js +1 -1
- package/dist/pine-core/pine-core.js +1 -1
- package/dist/types/components/pds-table/pds-table.d.ts +1 -1
- package/dist/types/utils/scroll.d.ts +21 -0
- package/dist/types/utils/test/axe.d.ts +80 -0
- package/hydrate/index.js +121 -40
- package/hydrate/index.mjs +121 -40
- package/package.json +3 -2
- package/dist/cjs/index-Dlc5O3n_.js.map +0 -1
- package/dist/esm/index-CO9kz-Pi.js.map +0 -1
- package/dist/esm-es5/index-CO9kz-Pi.js.map +0 -1
- package/dist/pine-core/p--fC0IwVR.system.js.map +0 -1
- package/dist/pine-core/p-00e487c4.system.entry.js +0 -2
- package/dist/pine-core/p-0fefe6ef.entry.js +0 -2
- package/dist/pine-core/p-127a84bf.entry.js +0 -3
- package/dist/pine-core/p-31b51eae.entry.js +0 -2
- package/dist/pine-core/p-31b51eae.entry.js.map +0 -1
- package/dist/pine-core/p-4768b52b.system.entry.js +0 -2
- package/dist/pine-core/p-4768b52b.system.entry.js.map +0 -1
- package/dist/pine-core/p-4beb8ae5.entry.js +0 -2
- package/dist/pine-core/p-4d3122ff.system.entry.js +0 -2
- package/dist/pine-core/p-4d3122ff.system.entry.js.map +0 -1
- package/dist/pine-core/p-54e967ca.entry.js +0 -2
- package/dist/pine-core/p-61674647.entry.js +0 -2
- package/dist/pine-core/p-617dc902.system.entry.js +0 -2
- package/dist/pine-core/p-61c885c7.entry.js +0 -2
- package/dist/pine-core/p-673dd006.system.entry.js +0 -2
- package/dist/pine-core/p-673dd006.system.entry.js.map +0 -1
- package/dist/pine-core/p-7bc34bce.system.entry.js +0 -2
- package/dist/pine-core/p-88c2001b.entry.js +0 -2
- package/dist/pine-core/p-8a2433ba.entry.js +0 -2
- package/dist/pine-core/p-8a2433ba.entry.js.map +0 -1
- package/dist/pine-core/p-8d0c1f6d.entry.js +0 -2
- package/dist/pine-core/p-93b379c2.system.entry.js +0 -2
- package/dist/pine-core/p-AcWjVzMO.system.js.map +0 -1
- package/dist/pine-core/p-B8BcpYlQ.system.js.map +0 -1
- package/dist/pine-core/p-BFO0Qv1J.system.js.map +0 -1
- package/dist/pine-core/p-BHXH-Irt.system.js.map +0 -1
- package/dist/pine-core/p-BvEsTKJw.system.js.map +0 -1
- package/dist/pine-core/p-BvlpNhcl.system.js.map +0 -1
- package/dist/pine-core/p-C7zvuvWK.system.js.map +0 -1
- package/dist/pine-core/p-CHUAwdle.system.js.map +0 -1
- package/dist/pine-core/p-CO9kz-Pi.js.map +0 -1
- package/dist/pine-core/p-D0Q8TzYd.system.js.map +0 -1
- package/dist/pine-core/p-DMxjKSUq.system.js.map +0 -1
- package/dist/pine-core/p-NzmeWArw.system.js.map +0 -1
- package/dist/pine-core/p-UYm57tw3.system.js.map +0 -1
- package/dist/pine-core/p-a12e38aa.system.entry.js +0 -2
- package/dist/pine-core/p-b63c7247.entry.js +0 -2
- package/dist/pine-core/p-be76de9e.entry.js +0 -2
- package/dist/pine-core/p-c5f4d4c0.entry.js +0 -2
- package/dist/pine-core/p-c5f4d4c0.entry.js.map +0 -1
- package/dist/pine-core/p-c7246fe4.system.entry.js +0 -2
- package/dist/pine-core/p-c746c9ad.system.entry.js +0 -2
- package/dist/pine-core/p-cb733c9c.system.entry.js +0 -2
- package/dist/pine-core/p-da50a223.entry.js +0 -2
- package/dist/pine-core/p-da50a223.entry.js.map +0 -1
- package/dist/pine-core/p-ea94b002.system.entry.js +0 -4
- package/dist/pine-core/p-ebf96abc.system.entry.js +0 -2
- package/dist/pine-core/p-ebf96abc.system.entry.js.map +0 -1
- package/dist/pine-core/p-ec974e1d.entry.js +0 -2
- /package/dist/pine-core/{p-932f4860.entry.js.map → p-07a19657.entry.js.map} +0 -0
- /package/dist/pine-core/{p-ed781905.system.entry.js.map → p-0bc89023.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-26aa3195.entry.js.map → p-0d3a6abc.entry.js.map} +0 -0
- /package/dist/pine-core/{p-e7e166f2.entry.js.map → p-1256b83e.entry.js.map} +0 -0
- /package/dist/pine-core/{p-88c2001b.entry.js.map → p-1700705c.entry.js.map} +0 -0
- /package/dist/pine-core/{p-952b41e5.system.entry.js.map → p-1d7cbf49.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-205d8c56.entry.js.map → p-21a858a0.entry.js.map} +0 -0
- /package/dist/pine-core/{p-3c864e3d.entry.js.map → p-2335222d.entry.js.map} +0 -0
- /package/dist/pine-core/{p-24f9a03b.system.entry.js.map → p-2728bb30.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-9e073662.entry.js.map → p-2c88b85e.entry.js.map} +0 -0
- /package/dist/pine-core/{p-bd277581.entry.js.map → p-2dcd369d.entry.js.map} +0 -0
- /package/dist/pine-core/{p-9d7f17a4.system.entry.js.map → p-30302dbb.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-5552ca6b.system.entry.js.map → p-33fd214a.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-8b997cb3.entry.js.map → p-360130c2.entry.js.map} +0 -0
- /package/dist/pine-core/{p-0f037132.system.entry.js.map → p-3824d80d.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-94fde072.system.entry.js.map → p-3c89502e.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-1fd52c1b.system.entry.js.map → p-3d0f3dcb.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-69221099.system.entry.js.map → p-3f4435b8.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-13821696.entry.js.map → p-43565cf5.entry.js.map} +0 -0
- /package/dist/pine-core/{p-d90f7fe4.entry.js.map → p-44318b5c.entry.js.map} +0 -0
- /package/dist/pine-core/{p-e0862ab5.entry.js.map → p-4728c80a.entry.js.map} +0 -0
- /package/dist/pine-core/{p-dd9888e9.entry.js.map → p-4a4048f3.entry.js.map} +0 -0
- /package/dist/pine-core/{p-dc724dee.entry.js.map → p-4fc48330.entry.js.map} +0 -0
- /package/dist/pine-core/{p-0561744f.entry.js.map → p-500ef8ee.entry.js.map} +0 -0
- /package/dist/pine-core/{p-a76a454f.system.entry.js.map → p-528d50eb.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-128a483e.system.entry.js.map → p-58bd1590.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-0fefe6ef.entry.js.map → p-5b521b20.entry.js.map} +0 -0
- /package/dist/pine-core/{p-519d44b8.entry.js.map → p-5f9a6f53.entry.js.map} +0 -0
- /package/dist/pine-core/{p-7d9f7018.entry.js.map → p-61bcaaee.entry.js.map} +0 -0
- /package/dist/pine-core/{p-0bf1fee1.entry.js.map → p-67a81e55.entry.js.map} +0 -0
- /package/dist/pine-core/{p-c5dc1e2d.system.entry.js.map → p-6a20ba14.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-8731836c.entry.js.map → p-6c836757.entry.js.map} +0 -0
- /package/dist/pine-core/{p-42d83b1f.entry.js.map → p-6ca31ddd.entry.js.map} +0 -0
- /package/dist/pine-core/{p-c299c019.system.entry.js.map → p-74486022.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-6ff1d23e.entry.js.map → p-77807b63.entry.js.map} +0 -0
- /package/dist/pine-core/{p-5df670e9.entry.js.map → p-7ba75e19.entry.js.map} +0 -0
- /package/dist/pine-core/{p-fd6e7155.entry.js.map → p-847ca369.entry.js.map} +0 -0
- /package/dist/pine-core/{p-2c48e33c.entry.js.map → p-8c8048df.entry.js.map} +0 -0
- /package/dist/pine-core/{p-6acc2e5b.system.entry.js.map → p-8dea1946.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-0d4b2bbc.system.entry.js.map → p-9120a7fa.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-35d9e3c8.system.entry.js.map → p-97d5a937.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-4993f30e.system.entry.js.map → p-97e0b205.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-a713fedd.system.entry.js.map → p-98332835.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-939ae09f.entry.js.map → p-99739465.entry.js.map} +0 -0
- /package/dist/pine-core/{p-3524e30c.system.entry.js.map → p-9a2dc18d.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-06fbdc35.entry.js.map → p-9e62532d.entry.js.map} +0 -0
- /package/dist/pine-core/{p-1768ad5e.entry.js.map → p-9e98793e.entry.js.map} +0 -0
- /package/dist/pine-core/{p-05771ef2.system.entry.js.map → p-a6ab979f.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-b272656d.system.entry.js.map → p-a81aa273.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-63fd14b1.system.entry.js.map → p-a896db32.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-779c4bd5.system.entry.js.map → p-ac2900e1.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-fbd8a4ac.entry.js.map → p-b294a16b.entry.js.map} +0 -0
- /package/dist/pine-core/{p-bb4bb3a7.entry.js.map → p-b37b3ad2.entry.js.map} +0 -0
- /package/dist/pine-core/{p-8b8d1b07.entry.js.map → p-b42320fe.entry.js.map} +0 -0
- /package/dist/pine-core/{p-253e2bfd.system.entry.js.map → p-b611b9ab.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-4cf4558e.entry.js.map → p-b7342b09.entry.js.map} +0 -0
- /package/dist/pine-core/{p-90126a46.system.entry.js.map → p-c7259d80.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-4710c59d.entry.js.map → p-cc7e0da3.entry.js.map} +0 -0
- /package/dist/pine-core/{p-bf1ab568.system.entry.js.map → p-ce4de7f0.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-1c26a838.system.entry.js.map → p-cfebee75.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-c424a27a.system.entry.js.map → p-d5ba377c.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-f924994c.entry.js.map → p-d83e411d.entry.js.map} +0 -0
- /package/dist/pine-core/{p-c7cab4ca.entry.js.map → p-d96c3850.entry.js.map} +0 -0
- /package/dist/pine-core/{p-b117b00a.system.entry.js.map → p-e2c42a2e.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-f4662c9d.system.entry.js.map → p-e4f66d23.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-2c2d2080.system.entry.js.map → p-e626cbd5.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-2c7f3d5e.system.entry.js.map → p-e65b1e5f.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-cea4bfaa.system.entry.js.map → p-e9e4e7f9.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-5eb9a3e2.entry.js.map → p-ec7f210f.entry.js.map} +0 -0
- /package/dist/pine-core/{p-13a814c0.system.entry.js.map → p-ef155f8e.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-2ca648d8.system.entry.js.map → p-f9a46770.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-b8ca7bca.entry.js.map → p-fa68509f.entry.js.map} +0 -0
- /package/dist/pine-core/{p-f30bde36.system.entry.js.map → p-fc2789df.system.entry.js.map} +0 -0
- /package/dist/pine-core/{p-9e8b71ed.system.entry.js.map → p-fcea314c.system.entry.js.map} +0 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Host, h } from "@stencil/core";
|
|
2
|
+
import { isScrolledFromInlineStart } from "../../../utils/scroll";
|
|
2
3
|
import { setupTruncationTooltip } from "../../../utils/truncation-tooltip";
|
|
3
4
|
export class PdsTableCell {
|
|
4
5
|
constructor() {
|
|
@@ -20,7 +21,7 @@ export class PdsTableCell {
|
|
|
20
21
|
return;
|
|
21
22
|
}
|
|
22
23
|
try {
|
|
23
|
-
this.tableScrolling = this.scrollContainer
|
|
24
|
+
this.tableScrolling = isScrolledFromInlineStart(this.scrollContainer);
|
|
24
25
|
}
|
|
25
26
|
catch (error) {
|
|
26
27
|
console.warn('Scroll handler error:', error);
|
|
@@ -122,11 +123,11 @@ export class PdsTableCell {
|
|
|
122
123
|
return classNames.join(' ');
|
|
123
124
|
}
|
|
124
125
|
render() {
|
|
125
|
-
return (h(Host, { key: '
|
|
126
|
+
return (h(Host, { key: 'b108b0fce3ff0d5c503922a6c936ffd6ca52523f', class: this.classNames(), role: "gridcell", part: "cell", tabIndex: this.truncate ? 0 : undefined, style: this.tableRef &&
|
|
126
127
|
this.tableRef.fixedColumn &&
|
|
127
128
|
this.tableRef.selectable
|
|
128
129
|
? { '--fixed-cell-position': '40px' }
|
|
129
|
-
: {} }, h("slot", { key: '
|
|
130
|
+
: {} }, h("slot", { key: 'ebc1709ef52029bc6afec2fa89a90d47620892cb' })));
|
|
130
131
|
}
|
|
131
132
|
static get is() { return "pds-table-cell"; }
|
|
132
133
|
static get encapsulation() { return "shadow"; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pds-table-cell.js","sourceRoot":"","sources":["../../../../../src/components/pds-table/pds-table-cell/pds-table-cell.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAO3E,MAAM,OAAO,YAAY;IALzB;QAQU,oBAAe,GAAuB,IAAI,CAAC;QAE3C,iBAAY,GAAW,CAAC,CAAC;QACzB,sBAAiB,GAAwB,IAAI,CAAC;QAoFtD;;;WAGG;QACc,mBAAc,GAAY,KAAK,CAAC;QAyCjD;;;;WAIG;QACK,iBAAY,GAAG,GAAG,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC1B,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,IAAI,CAAC,cAAc,GAAG,
|
|
1
|
+
{"version":3,"file":"pds-table-cell.js","sourceRoot":"","sources":["../../../../../src/components/pds-table/pds-table-cell/pds-table-cell.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAO3E,MAAM,OAAO,YAAY;IALzB;QAQU,oBAAe,GAAuB,IAAI,CAAC;QAE3C,iBAAY,GAAW,CAAC,CAAC;QACzB,sBAAiB,GAAwB,IAAI,CAAC;QAoFtD;;;WAGG;QACc,mBAAc,GAAY,KAAK,CAAC;QAyCjD;;;;WAIG;QACK,iBAAY,GAAG,GAAG,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC1B,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,IAAI,CAAC,cAAc,GAAG,yBAAyB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACxE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC,CAAC;KAqBH;IAnKC,mBAAmB;QACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAwB,CAAC;IAC/E,CAAC;IAED,gBAAgB;QACd,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC3E,oEAAoE;YACpE,yFAAyF;YACzF,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,oBAAoB;QAClB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,wBAAwB,EAAE,CAAC;IAClC,CAAC;IAEO,mBAAmB;;QACzB,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE3B,gDAAgD;QAChD,MAAM,SAAS,GAAG,MAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,0CAAE,aAAa,CAAC,iCAAiC,CAAgB,CAAC;QAE5G,IAAI,SAAS,EAAE,CAAC;YACd,kCAAkC;YAClC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;YACjC,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACtF,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,gBAAgB;YACrC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,2BAA2B;QACpD,CAAC;aAAM,CAAC;YACN,0DAA0D;YAC1D,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;gBACvC,IAAI,IAAI,CAAC,eAAe;oBAAE,OAAO,CAAC,gBAAgB;gBAClD,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACjD,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;oBAC5B,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;gBACxE,CAAC;YACH,CAAC,EAAE,GAAG,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IAEO,qBAAqB;QAC3B,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACtE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAClC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACrC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,sBAAsB;IAC/C,CAAC;IAeD,oBAAoB,CAAC,QAAiB;QACpC,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;IAQO,qBAAqB;QAC3B,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAEhC,IAAI,CAAC,iBAAiB,GAAG,sBAAsB,CAAC;YAC9C,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,SAAS,EAAE,IAAI,CAAC,WAAW;YAC3B,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,IAAI,EAAE;SACzD,CAAC,CAAC;IACL,CAAC;IAEO,wBAAwB;QAC9B,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAChC,CAAC;IACH,CAAC;IAEO,UAAU;QAChB,MAAM,UAAU,GAAG,EAAE,CAAC;QAEtB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC3C,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,UAAU,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtE,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAmBD,MAAM;QACJ,OAAO,CACL,EAAC,IAAI,qDACH,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,EACxB,IAAI,EAAC,UAAU,EACf,IAAI,EAAC,MAAM,EACX,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EACvC,KAAK,EACH,IAAI,CAAC,QAAQ;gBACb,IAAI,CAAC,QAAQ,CAAC,WAAW;gBACzB,IAAI,CAAC,QAAQ,CAAC,UAAU;gBACtB,CAAC,CAAC,EAAE,uBAAuB,EAAE,MAAM,EAAE;gBACrC,CAAC,CAAC,EAAE;YAGR,8DAAa,CACR,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Element, Host, Prop, State, Watch, h } from '@stencil/core';\nimport { isScrolledFromInlineStart } from '../../../utils/scroll';\nimport { setupTruncationTooltip } from '../../../utils/truncation-tooltip';\n\n@Component({\n tag: 'pds-table-cell',\n styleUrls: ['pds-table-cell.scss'],\n shadow: true,\n})\nexport class PdsTableCell {\n @Element() hostElement: HTMLPdsTableCellElement;\n private tableRef: HTMLPdsTableElement;\n private scrollContainer: HTMLElement | null = null;\n private setupTimer: number | undefined;\n private setupRetries: number = 0;\n private truncationCleanup: (() => void) | null = null;\n\n componentWillRender() {\n this.tableRef = this.hostElement.closest('pds-table') as HTMLPdsTableElement;\n }\n\n componentDidLoad() {\n if (this.tableRef && this.tableRef.responsive && this.tableRef.fixedColumn) {\n // For responsive tables with fixed columns, set up scroll detection\n // This enables the first column to show a shadow when the table is scrolled horizontally\n this.setupScrollListener();\n }\n\n if (this.truncate) {\n this.initTruncationTooltip();\n }\n }\n\n disconnectedCallback() {\n this.cleanupScrollListener();\n this.destroyTruncationTooltip();\n }\n\n private setupScrollListener() {\n if (!this.tableRef) return;\n\n // Query shadowRoot once and cache the container\n const container = this.tableRef.shadowRoot?.querySelector('.pds-table-responsive-container') as HTMLElement;\n\n if (container) {\n // Container available immediately\n this.scrollContainer = container;\n this.scrollContainer.addEventListener('scroll', this.handleScroll, { passive: true });\n this.handleScroll(); // Initial check\n this.setupRetries = 0; // Reset counter on success\n } else {\n // Container not ready, set up timer for retry with bounds\n this.setupTimer = window.setTimeout(() => {\n if (this.scrollContainer) return; // Already found\n this.setupRetries = (this.setupRetries || 0) + 1;\n if (this.setupRetries <= 50) {\n this.setupScrollListener();\n } else {\n console.warn('Failed to find responsive container after 50 attempts');\n }\n }, 100);\n }\n }\n\n private cleanupScrollListener() {\n if (this.scrollContainer) {\n this.scrollContainer.removeEventListener('scroll', this.handleScroll);\n this.scrollContainer = null;\n }\n\n if (this.setupTimer !== undefined) {\n window.clearTimeout(this.setupTimer);\n this.setupTimer = undefined;\n }\n\n this.setupRetries = 0; // Reset retry counter\n }\n\n /**\n * Sets the text alignment within the cell.\n */\n @Prop() cellAlign?: 'start' | 'center' | 'end' | 'justify';\n\n /**\n * Truncates content to a max width and adds an ellipsis.\n * When text overflows, a tooltip showing the full text will appear on hover/focus.\n * Note: When truncate is enabled, the element automatically receives tabindex=\"0\" for keyboard accessibility.\n */\n @Prop() truncate: boolean;\n\n @Watch('truncate')\n handleTruncateChange(newValue: boolean) {\n if (newValue) {\n this.initTruncationTooltip();\n } else {\n this.destroyTruncationTooltip();\n }\n }\n\n /**\n * Determines if the table is currently scrolling.\n * @defaultValue false\n */\n @State() private tableScrolling: boolean = false;\n\n private initTruncationTooltip() {\n this.destroyTruncationTooltip();\n\n this.truncationCleanup = setupTruncationTooltip({\n hostEl: this.hostElement,\n contentEl: this.hostElement,\n getTooltipText: () => this.hostElement.textContent || '',\n });\n }\n\n private destroyTruncationTooltip() {\n if (this.truncationCleanup) {\n this.truncationCleanup();\n this.truncationCleanup = null;\n }\n }\n\n private classNames() {\n const classNames = [];\n\n if (this.tableRef && this.tableRef.compact) {\n classNames.push('is-compact');\n }\n\n if (this.cellAlign) {\n classNames.push(`pds-table-cell--align-${this.cellAlign}`);\n }\n\n if (this.truncate) {\n classNames.push('is-truncated');\n }\n\n if (this.tableRef && this.tableRef.fixedColumn && this.tableScrolling) {\n classNames.push('has-scrolled');\n }\n\n return classNames.join(' ');\n }\n\n /**\n * Handles scroll events to update fixed column shadow state.\n * Updates the tableScrolling state to control CSS classes for fixed column shadows.\n * @private\n */\n private handleScroll = () => {\n if (!this.scrollContainer) {\n return;\n }\n\n try {\n this.tableScrolling = isScrolledFromInlineStart(this.scrollContainer);\n } catch (error) {\n console.warn('Scroll handler error:', error);\n }\n };\n\n render() {\n return (\n <Host\n class={this.classNames()}\n role=\"gridcell\"\n part=\"cell\"\n tabIndex={this.truncate ? 0 : undefined}\n style={\n this.tableRef &&\n this.tableRef.fixedColumn &&\n this.tableRef.selectable\n ? { '--fixed-cell-position': '40px' }\n : {}\n }\n >\n <slot></slot>\n </Host>\n );\n }\n}\n"]}
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
|
|
23
23
|
:host(.is-fixed) {
|
|
24
24
|
background: var(--pine-color-background-container);
|
|
25
|
-
|
|
25
|
+
inset-inline-start: var(--pine-dimension-none);
|
|
26
26
|
position: sticky;
|
|
27
27
|
z-index: var(--pine-z-index-raised);
|
|
28
28
|
}
|
|
@@ -35,6 +35,11 @@
|
|
|
35
35
|
border-block-start: var(--border-head-cell-default);
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
+
:host-context([dir=rtl]) {
|
|
39
|
+
/* stylelint-disable-next-line pine-design-system/no-hardcoded-colors */
|
|
40
|
+
--box-shadow-default: -3px 3px 6px -2px rgba(0, 0, 0, 0.1);
|
|
41
|
+
}
|
|
42
|
+
|
|
38
43
|
:host(.has-scrolled.is-fixed) {
|
|
39
44
|
box-shadow: var(--box-shadow-default);
|
|
40
45
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Host, h } from "@stencil/core";
|
|
2
2
|
import { downSmall, upSmall } from "@pine-ds/icons/icons";
|
|
3
|
+
import { isScrolledFromInlineStart } from "../../../utils/scroll";
|
|
3
4
|
export class PdsTableHeadCell {
|
|
4
5
|
constructor() {
|
|
5
6
|
this.scrollContainer = null;
|
|
@@ -43,7 +44,7 @@ export class PdsTableHeadCell {
|
|
|
43
44
|
return;
|
|
44
45
|
}
|
|
45
46
|
try {
|
|
46
|
-
this.tableScrolling = this.scrollContainer
|
|
47
|
+
this.tableScrolling = isScrolledFromInlineStart(this.scrollContainer);
|
|
47
48
|
}
|
|
48
49
|
catch (error) {
|
|
49
50
|
console.warn('Scroll handler error:', error);
|
|
@@ -198,11 +199,11 @@ export class PdsTableHeadCell {
|
|
|
198
199
|
return classNames.join(' ');
|
|
199
200
|
}
|
|
200
201
|
render() {
|
|
201
|
-
return (h(Host, { key: '
|
|
202
|
+
return (h(Host, { key: 'e0a30c326b81e0cc3fa8c0392b61f2a6625aad71', class: this.classNames(), role: "columnheader", onClick: this.toggleSort, part: "head-cell", style: this.tableRef &&
|
|
202
203
|
this.tableRef.fixedColumn &&
|
|
203
204
|
this.tableRef.selectable
|
|
204
205
|
? { '--fixed-cell-position': '40px' }
|
|
205
|
-
: {} }, h("slot", { key: '
|
|
206
|
+
: {} }, h("slot", { key: '3d0012983b2b552e4e61a3d84717afb9de8e572f' }), this.sortable && this.isActive && (h("pds-icon", { key: '326607f90b12ecc26a731dc696d0a3b8ebb0960c', icon: this.sortingDirection === 'asc' ? upSmall : downSmall, part: "sort-icon" }))));
|
|
206
207
|
}
|
|
207
208
|
static get is() { return "pds-table-head-cell"; }
|
|
208
209
|
static get encapsulation() { return "shadow"; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pds-table-head-cell.js","sourceRoot":"","sources":["../../../../../src/components/pds-table/pds-table-head-cell/pds-table-head-cell.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Host, Prop, h, Event, EventEmitter, State, Method } from '@stencil/core';\n\nimport { downSmall, upSmall } from '@pine-ds/icons/icons';\n\n@Component({\n tag: 'pds-table-head-cell',\n styleUrls: ['pds-table-head-cell.scss'],\n shadow: true,\n})\nexport class PdsTableHeadCell {\n @Element() hostElement: HTMLPdsTableHeadCellElement;\n private tableRef: HTMLPdsTableElement;\n private scrollContainer: HTMLElement | null = null;\n private setupTimer: number | undefined;\n private setupRetries: number = 0;\n private headObserver?: MutationObserver;\n\n /**\n * Sets the text alignment within the head cell.\n */\n @Prop() cellAlign?: 'start' | 'center' | 'end' | 'justify';\n\n /**\n * Determines whether the table column is sortable when set to `true`.\n */\n @Prop() sortable: boolean;\n\n /**\n * Event emitted to signal that a table column header has been sorted, providing information about the sorted column's name and sorting direction.\n */\n @Event() pdsTableSort: EventEmitter<{ column: string; direction: string }>;\n\n /**\n * The direction of sorting.\n */\n @State() private sortingDirection: 'asc' | 'desc' = 'asc';\n\n /**\n * Determines if the table is currently scrolling.\n * @defaultValue false\n */\n @State() private tableScrolling: boolean = false;\n\n /**\n * Determines if the table row is currently selected.\n * @defaultValue false\n */\n @State() isSelected: boolean = false;\n\n /**\n * Determines if the parent table-head has the border attribute.\n * @defaultValue false\n */\n @State() private hasHeadBorder: boolean = false;\n\n /**\n * Determines if the parent table-head has the background attribute.\n * @defaultValue false\n */\n @State() private hasHeadBackground: boolean = false;\n\n /**\n * Determines if this column is the currently active sorted column.\n * @defaultValue false\n */\n @State() private isActive: boolean = false;\n\n /**\n * Programmatically sets this column as the active sort column with the specified direction.\n * Used by pds-table to apply a default sort on initial load.\n * @param direction - The sort direction to apply ('asc' or 'desc')\n */\n @Method()\n async setActiveSort(direction: 'asc' | 'desc') {\n if (!this.sortable) return;\n\n this.sortingDirection = direction;\n this.isActive = true;\n this.hostElement.classList.add('is-active');\n }\n\n /**\n * Clears the active sort state from this column.\n * Used internally when another column becomes active.\n */\n @Method()\n async clearActiveSort() {\n this.isActive = false;\n this.hostElement.classList.remove('is-active');\n }\n\n componentWillLoad() {\n // Set initial references and state before first render\n this.tableRef = this.hostElement.closest('pds-table') as HTMLPdsTableElement;\n\n const tableHead = this.hostElement.closest('pds-table-head') as HTMLElement;\n if (tableHead) {\n this.hasHeadBorder = tableHead.hasAttribute('border');\n this.hasHeadBackground = tableHead.hasAttribute('background');\n }\n }\n\n componentDidLoad() {\n if (this.tableRef && this.tableRef.responsive && this.tableRef.fixedColumn) {\n // For responsive tables with fixed columns, set up scroll detection\n // This enables the first column header to show a shadow when the table is scrolled horizontally\n this.setupScrollListener();\n }\n\n // Watch for changes to the parent table-head's border and background attributes\n const tableHead = this.hostElement.closest('pds-table-head') as HTMLElement;\n if (tableHead && typeof MutationObserver !== 'undefined') {\n // Defensive guard: disconnect existing observer before creating a new one\n if (this.headObserver) {\n this.headObserver.disconnect();\n }\n\n this.headObserver = new MutationObserver(() => {\n // Update state when border or background attributes change\n this.hasHeadBorder = tableHead.hasAttribute('border');\n this.hasHeadBackground = tableHead.hasAttribute('background');\n });\n\n this.headObserver.observe(tableHead, {\n attributes: true,\n attributeFilter: ['border', 'background']\n });\n }\n }\n\n disconnectedCallback() {\n this.cleanupScrollListener();\n\n if (this.headObserver) {\n this.headObserver.disconnect();\n }\n }\n\n\n private setupScrollListener() {\n if (!this.tableRef) return;\n\n // Query shadowRoot once and cache the container\n const container = this.tableRef.shadowRoot?.querySelector('.pds-table-responsive-container') as HTMLElement;\n\n if (container) {\n // Container available immediately\n this.scrollContainer = container;\n this.scrollContainer.addEventListener('scroll', this.handleScroll, { passive: true });\n this.handleScroll(); // Initial check\n this.setupRetries = 0; // Reset counter on success\n } else {\n // Container not ready, set up timer for retry with bounds\n this.setupTimer = window.setTimeout(() => {\n if (this.scrollContainer) return; // Already found\n this.setupRetries = (this.setupRetries || 0) + 1;\n if (this.setupRetries <= 50) {\n this.setupScrollListener();\n } else {\n console.warn('Failed to find responsive container after 50 attempts');\n }\n }, 100);\n }\n }\n\n private cleanupScrollListener() {\n if (this.scrollContainer) {\n this.scrollContainer.removeEventListener('scroll', this.handleScroll);\n this.scrollContainer = null;\n }\n\n if (this.setupTimer !== undefined) {\n window.clearTimeout(this.setupTimer);\n this.setupTimer = undefined;\n }\n\n this.setupRetries = 0; // Reset retry counter\n }\n\n /**\n * Handles scroll events to update fixed column shadow state.\n * Updates the tableScrolling state to control CSS classes for fixed column shadows.\n * @private\n */\n private handleScroll = () => {\n if (!this.scrollContainer) {\n return;\n }\n\n try {\n this.tableScrolling = this.scrollContainer.scrollLeft > 0;\n } catch (error) {\n console.warn('Scroll handler error:', error);\n }\n };\n\n private toggleSort = () => {\n if (this.sortable) {\n // Guard: return early if tableRef is not available\n if (!this.tableRef) {\n return;\n }\n\n const column = this.hostElement.innerText.trim();\n \n // Always toggle the direction (preserves original behavior)\n this.sortingDirection = this.sortingDirection === 'asc' ? 'desc' : 'asc';\n \n // Reset all OTHER head cells to inactive state (skip the current one)\n this.tableRef.querySelectorAll('pds-table-head-cell').forEach(async (headCell) => {\n // Skip clearing the current cell\n if (headCell !== this.hostElement) {\n const headCellComponent = headCell as HTMLPdsTableHeadCellElement;\n await headCellComponent.clearActiveSort();\n }\n });\n \n // Mark this column as active\n this.isActive = true;\n this.hostElement.classList.add('is-active');\n\n // Emit the sort event with the current direction\n this.pdsTableSort.emit({ column, direction: this.sortingDirection });\n }\n }\n\n private classNames() {\n const classNames = [];\n\n if (this.tableRef && this.tableRef.compact) {\n classNames.push('is-compact');\n }\n\n if (this.cellAlign) {\n classNames.push(`pds-table-head-cell--align-${this.cellAlign}`);\n }\n\n if (this.sortable) {\n classNames.push('is-sortable');\n }\n\n if (this.sortable && this.sortingDirection !== null) {\n classNames.push('sort-' + this.sortingDirection);\n }\n\n if (this.tableRef && this.tableRef.fixedColumn && this.tableScrolling) {\n classNames.push('has-scrolled');\n }\n\n if (this.hasHeadBackground) {\n classNames.push('has-head-background');\n }\n\n if (this.hasHeadBorder) {\n classNames.push('has-head-border');\n }\n\n return classNames.join(' ');\n }\n\n render() {\n return (\n <Host\n class={this.classNames()}\n role=\"columnheader\"\n onClick={this.toggleSort}\n part=\"head-cell\"\n style={\n this.tableRef &&\n this.tableRef.fixedColumn &&\n this.tableRef.selectable\n ? { '--fixed-cell-position': '40px' }\n : {}\n }\n >\n <slot></slot>\n {this.sortable && this.isActive && (\n <pds-icon icon={this.sortingDirection === 'asc' ? upSmall : downSmall} part=\"sort-icon\" />\n )}\n </Host>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"pds-table-head-cell.js","sourceRoot":"","sources":["../../../../../src/components/pds-table/pds-table-head-cell/pds-table-head-cell.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAgB,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEtG,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAOlE,MAAM,OAAO,gBAAgB;IAL7B;QAQU,oBAAe,GAAuB,IAAI,CAAC;QAE3C,iBAAY,GAAW,CAAC,CAAC;QAkBjC;;WAEG;QACc,qBAAgB,GAAmB,KAAK,CAAC;QAE1D;;;WAGG;QACc,mBAAc,GAAY,KAAK,CAAC;QAEjD;;;WAGG;QACM,eAAU,GAAY,KAAK,CAAC;QAErC;;;WAGG;QACc,kBAAa,GAAY,KAAK,CAAC;QAEhD;;;WAGG;QACc,sBAAiB,GAAY,KAAK,CAAC;QAEpD;;;WAGG;QACc,aAAQ,GAAY,KAAK,CAAC;QAkH3C;;;;WAIG;QACK,iBAAY,GAAG,GAAG,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC1B,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,IAAI,CAAC,cAAc,GAAG,yBAAyB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACxE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC,CAAC;QAEM,eAAU,GAAG,GAAG,EAAE;YACxB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,mDAAmD;gBACnD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACnB,OAAO;gBACT,CAAC;gBAED,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;gBAEjD,4DAA4D;gBAC5D,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;gBAEzE,sEAAsE;gBACtE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;oBAC/E,iCAAiC;oBACjC,IAAI,QAAQ,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;wBAClC,MAAM,iBAAiB,GAAG,QAAuC,CAAC;wBAClE,MAAM,iBAAiB,CAAC,eAAe,EAAE,CAAC;oBAC5C,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,6BAA6B;gBAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACrB,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBAE5C,iDAAiD;gBACjD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;YACvE,CAAC;QACH,CAAC,CAAA;KA0DF;IAvNC;;;;OAIG;IAEH,KAAK,CAAC,aAAa,CAAC,SAAyB;QAC3C,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE3B,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC9C,CAAC;IAED;;;OAGG;IAEH,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC;IAED,iBAAiB;QACf,uDAAuD;QACvD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAwB,CAAC;QAE7E,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAgB,CAAC;QAC5E,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YACtD,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,gBAAgB;QACd,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC3E,oEAAoE;YACpE,gGAAgG;YAChG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,CAAC;QAED,gFAAgF;QAChF,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAgB,CAAC;QAC5E,IAAI,SAAS,IAAI,OAAO,gBAAgB,KAAK,WAAW,EAAE,CAAC;YACzD,0EAA0E;YAC1E,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;YACjC,CAAC;YAED,IAAI,CAAC,YAAY,GAAG,IAAI,gBAAgB,CAAC,GAAG,EAAE;gBAC5C,2DAA2D;gBAC3D,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACtD,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE;gBACnC,UAAU,EAAE,IAAI;gBAChB,eAAe,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC;aAC1C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,oBAAoB;QAClB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE7B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;IAGO,mBAAmB;;QACzB,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE3B,gDAAgD;QAChD,MAAM,SAAS,GAAG,MAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,0CAAE,aAAa,CAAC,iCAAiC,CAAgB,CAAC;QAE5G,IAAI,SAAS,EAAE,CAAC;YACd,kCAAkC;YAClC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;YACjC,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACtF,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,gBAAgB;YACrC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,2BAA2B;QACpD,CAAC;aAAM,CAAC;YACN,0DAA0D;YAC1D,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;gBACvC,IAAI,IAAI,CAAC,eAAe;oBAAE,OAAO,CAAC,gBAAgB;gBAClD,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACjD,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;oBAC5B,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;gBACxE,CAAC;YACH,CAAC,EAAE,GAAG,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IAEO,qBAAqB;QAC3B,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACtE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAClC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACrC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,sBAAsB;IAC/C,CAAC;IAiDO,UAAU;QAChB,MAAM,UAAU,GAAG,EAAE,CAAC;QAEtB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC3C,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,UAAU,CAAC,IAAI,CAAC,8BAA8B,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,EAAE,CAAC;YACpD,UAAU,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtE,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACrC,CAAC;QAED,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM;QACJ,OAAO,CACL,EAAC,IAAI,qDACH,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,EACxB,IAAI,EAAC,cAAc,EACnB,OAAO,EAAE,IAAI,CAAC,UAAU,EACxB,IAAI,EAAC,WAAW,EAChB,KAAK,EACH,IAAI,CAAC,QAAQ;gBACb,IAAI,CAAC,QAAQ,CAAC,WAAW;gBACzB,IAAI,CAAC,QAAQ,CAAC,UAAU;gBACtB,CAAC,CAAC,EAAE,uBAAuB,EAAE,MAAM,EAAE;gBACrC,CAAC,CAAC,EAAE;YAGR,8DAAa;YACZ,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,CACjC,iEAAU,IAAI,EAAE,IAAI,CAAC,gBAAgB,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAC,WAAW,GAAG,CAC3F,CACI,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Element, Host, Prop, h, Event, EventEmitter, State, Method } from '@stencil/core';\n\nimport { downSmall, upSmall } from '@pine-ds/icons/icons';\nimport { isScrolledFromInlineStart } from '../../../utils/scroll';\n\n@Component({\n tag: 'pds-table-head-cell',\n styleUrls: ['pds-table-head-cell.scss'],\n shadow: true,\n})\nexport class PdsTableHeadCell {\n @Element() hostElement: HTMLPdsTableHeadCellElement;\n private tableRef: HTMLPdsTableElement;\n private scrollContainer: HTMLElement | null = null;\n private setupTimer: number | undefined;\n private setupRetries: number = 0;\n private headObserver?: MutationObserver;\n\n /**\n * Sets the text alignment within the head cell.\n */\n @Prop() cellAlign?: 'start' | 'center' | 'end' | 'justify';\n\n /**\n * Determines whether the table column is sortable when set to `true`.\n */\n @Prop() sortable: boolean;\n\n /**\n * Event emitted to signal that a table column header has been sorted, providing information about the sorted column's name and sorting direction.\n */\n @Event() pdsTableSort: EventEmitter<{ column: string; direction: string }>;\n\n /**\n * The direction of sorting.\n */\n @State() private sortingDirection: 'asc' | 'desc' = 'asc';\n\n /**\n * Determines if the table is currently scrolling.\n * @defaultValue false\n */\n @State() private tableScrolling: boolean = false;\n\n /**\n * Determines if the table row is currently selected.\n * @defaultValue false\n */\n @State() isSelected: boolean = false;\n\n /**\n * Determines if the parent table-head has the border attribute.\n * @defaultValue false\n */\n @State() private hasHeadBorder: boolean = false;\n\n /**\n * Determines if the parent table-head has the background attribute.\n * @defaultValue false\n */\n @State() private hasHeadBackground: boolean = false;\n\n /**\n * Determines if this column is the currently active sorted column.\n * @defaultValue false\n */\n @State() private isActive: boolean = false;\n\n /**\n * Programmatically sets this column as the active sort column with the specified direction.\n * Used by pds-table to apply a default sort on initial load.\n * @param direction - The sort direction to apply ('asc' or 'desc')\n */\n @Method()\n async setActiveSort(direction: 'asc' | 'desc') {\n if (!this.sortable) return;\n\n this.sortingDirection = direction;\n this.isActive = true;\n this.hostElement.classList.add('is-active');\n }\n\n /**\n * Clears the active sort state from this column.\n * Used internally when another column becomes active.\n */\n @Method()\n async clearActiveSort() {\n this.isActive = false;\n this.hostElement.classList.remove('is-active');\n }\n\n componentWillLoad() {\n // Set initial references and state before first render\n this.tableRef = this.hostElement.closest('pds-table') as HTMLPdsTableElement;\n\n const tableHead = this.hostElement.closest('pds-table-head') as HTMLElement;\n if (tableHead) {\n this.hasHeadBorder = tableHead.hasAttribute('border');\n this.hasHeadBackground = tableHead.hasAttribute('background');\n }\n }\n\n componentDidLoad() {\n if (this.tableRef && this.tableRef.responsive && this.tableRef.fixedColumn) {\n // For responsive tables with fixed columns, set up scroll detection\n // This enables the first column header to show a shadow when the table is scrolled horizontally\n this.setupScrollListener();\n }\n\n // Watch for changes to the parent table-head's border and background attributes\n const tableHead = this.hostElement.closest('pds-table-head') as HTMLElement;\n if (tableHead && typeof MutationObserver !== 'undefined') {\n // Defensive guard: disconnect existing observer before creating a new one\n if (this.headObserver) {\n this.headObserver.disconnect();\n }\n\n this.headObserver = new MutationObserver(() => {\n // Update state when border or background attributes change\n this.hasHeadBorder = tableHead.hasAttribute('border');\n this.hasHeadBackground = tableHead.hasAttribute('background');\n });\n\n this.headObserver.observe(tableHead, {\n attributes: true,\n attributeFilter: ['border', 'background']\n });\n }\n }\n\n disconnectedCallback() {\n this.cleanupScrollListener();\n\n if (this.headObserver) {\n this.headObserver.disconnect();\n }\n }\n\n\n private setupScrollListener() {\n if (!this.tableRef) return;\n\n // Query shadowRoot once and cache the container\n const container = this.tableRef.shadowRoot?.querySelector('.pds-table-responsive-container') as HTMLElement;\n\n if (container) {\n // Container available immediately\n this.scrollContainer = container;\n this.scrollContainer.addEventListener('scroll', this.handleScroll, { passive: true });\n this.handleScroll(); // Initial check\n this.setupRetries = 0; // Reset counter on success\n } else {\n // Container not ready, set up timer for retry with bounds\n this.setupTimer = window.setTimeout(() => {\n if (this.scrollContainer) return; // Already found\n this.setupRetries = (this.setupRetries || 0) + 1;\n if (this.setupRetries <= 50) {\n this.setupScrollListener();\n } else {\n console.warn('Failed to find responsive container after 50 attempts');\n }\n }, 100);\n }\n }\n\n private cleanupScrollListener() {\n if (this.scrollContainer) {\n this.scrollContainer.removeEventListener('scroll', this.handleScroll);\n this.scrollContainer = null;\n }\n\n if (this.setupTimer !== undefined) {\n window.clearTimeout(this.setupTimer);\n this.setupTimer = undefined;\n }\n\n this.setupRetries = 0; // Reset retry counter\n }\n\n /**\n * Handles scroll events to update fixed column shadow state.\n * Updates the tableScrolling state to control CSS classes for fixed column shadows.\n * @private\n */\n private handleScroll = () => {\n if (!this.scrollContainer) {\n return;\n }\n\n try {\n this.tableScrolling = isScrolledFromInlineStart(this.scrollContainer);\n } catch (error) {\n console.warn('Scroll handler error:', error);\n }\n };\n\n private toggleSort = () => {\n if (this.sortable) {\n // Guard: return early if tableRef is not available\n if (!this.tableRef) {\n return;\n }\n\n const column = this.hostElement.innerText.trim();\n \n // Always toggle the direction (preserves original behavior)\n this.sortingDirection = this.sortingDirection === 'asc' ? 'desc' : 'asc';\n \n // Reset all OTHER head cells to inactive state (skip the current one)\n this.tableRef.querySelectorAll('pds-table-head-cell').forEach(async (headCell) => {\n // Skip clearing the current cell\n if (headCell !== this.hostElement) {\n const headCellComponent = headCell as HTMLPdsTableHeadCellElement;\n await headCellComponent.clearActiveSort();\n }\n });\n \n // Mark this column as active\n this.isActive = true;\n this.hostElement.classList.add('is-active');\n\n // Emit the sort event with the current direction\n this.pdsTableSort.emit({ column, direction: this.sortingDirection });\n }\n }\n\n private classNames() {\n const classNames = [];\n\n if (this.tableRef && this.tableRef.compact) {\n classNames.push('is-compact');\n }\n\n if (this.cellAlign) {\n classNames.push(`pds-table-head-cell--align-${this.cellAlign}`);\n }\n\n if (this.sortable) {\n classNames.push('is-sortable');\n }\n\n if (this.sortable && this.sortingDirection !== null) {\n classNames.push('sort-' + this.sortingDirection);\n }\n\n if (this.tableRef && this.tableRef.fixedColumn && this.tableScrolling) {\n classNames.push('has-scrolled');\n }\n\n if (this.hasHeadBackground) {\n classNames.push('has-head-background');\n }\n\n if (this.hasHeadBorder) {\n classNames.push('has-head-border');\n }\n\n return classNames.join(' ');\n }\n\n render() {\n return (\n <Host\n class={this.classNames()}\n role=\"columnheader\"\n onClick={this.toggleSort}\n part=\"head-cell\"\n style={\n this.tableRef &&\n this.tableRef.fixedColumn &&\n this.tableRef.selectable\n ? { '--fixed-cell-position': '40px' }\n : {}\n }\n >\n <slot></slot>\n {this.sortable && this.isActive && (\n <pds-icon icon={this.sortingDirection === 'asc' ? upSmall : downSmall} part=\"sort-icon\" />\n )}\n </Host>\n );\n }\n}\n"]}
|
|
@@ -83,15 +83,25 @@
|
|
|
83
83
|
.scroll-shadow-left {
|
|
84
84
|
/* stylelint-disable-next-line pine-design-system/no-hardcoded-colors */
|
|
85
85
|
background: linear-gradient(to right, rgba(0, 0, 0, 0.1), transparent);
|
|
86
|
-
border-
|
|
87
|
-
border-
|
|
88
|
-
|
|
86
|
+
border-end-start-radius: inherit;
|
|
87
|
+
border-start-start-radius: inherit;
|
|
88
|
+
inset-inline-start: 0;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
:host-context([dir=rtl]) .scroll-shadow-left {
|
|
92
|
+
/* stylelint-disable-next-line pine-design-system/no-hardcoded-colors */
|
|
93
|
+
background: linear-gradient(to left, rgba(0, 0, 0, 0.1), transparent);
|
|
89
94
|
}
|
|
90
95
|
|
|
91
96
|
.scroll-shadow-right {
|
|
92
97
|
/* stylelint-disable-next-line pine-design-system/no-hardcoded-colors */
|
|
93
98
|
background: linear-gradient(to left, rgba(0, 0, 0, 0.1), transparent);
|
|
94
|
-
border-
|
|
95
|
-
border-
|
|
96
|
-
|
|
99
|
+
border-end-end-radius: inherit;
|
|
100
|
+
border-start-end-radius: inherit;
|
|
101
|
+
inset-inline-end: 0;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
:host-context([dir=rtl]) .scroll-shadow-right {
|
|
105
|
+
/* stylelint-disable-next-line pine-design-system/no-hardcoded-colors */
|
|
106
|
+
background: linear-gradient(to right, rgba(0, 0, 0, 0.1), transparent);
|
|
97
107
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Host, h } from "@stencil/core";
|
|
2
|
+
import { getScrollOffsetFromStart } from "../../utils/scroll";
|
|
2
3
|
export class PdsTable {
|
|
3
4
|
constructor() {
|
|
4
5
|
this.scrollContainer = null;
|
|
@@ -84,7 +85,7 @@ export class PdsTable {
|
|
|
84
85
|
*
|
|
85
86
|
* This method creates a horizontal scrolling system where:
|
|
86
87
|
* - The table content can scroll horizontally when it exceeds the container width
|
|
87
|
-
* - Scroll shadows appear at the
|
|
88
|
+
* - Scroll shadows appear at the inline-start/end edges to indicate scrollable content
|
|
88
89
|
* - Fixed columns remain sticky during horizontal scrolling
|
|
89
90
|
* - Shadows respect border-radius and don't appear when there's nothing to scroll
|
|
90
91
|
*
|
|
@@ -106,18 +107,19 @@ export class PdsTable {
|
|
|
106
107
|
this.scrollContainer = container;
|
|
107
108
|
/**
|
|
108
109
|
* Updates the visibility of scroll shadows based on current scroll position.
|
|
109
|
-
*
|
|
110
|
-
*
|
|
110
|
+
* Inline-start shadow: shows when scrolled away from start (hidden if fixedColumn is enabled)
|
|
111
|
+
* Inline-end shadow: shows when there is content to scroll and not at the end
|
|
111
112
|
*/
|
|
112
113
|
this._responsiveHandleScroll = () => {
|
|
113
114
|
if (!this.scrollContainer)
|
|
114
115
|
return;
|
|
115
|
-
const
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
116
|
+
const { scrollWidth, clientWidth } = this.scrollContainer;
|
|
117
|
+
const maxScroll = scrollWidth - clientWidth;
|
|
118
|
+
const scrollOffset = getScrollOffsetFromStart(this.scrollContainer);
|
|
119
|
+
// Inline-start shadow when scrolled away from start, but not if there's a fixed column
|
|
120
|
+
leftShadow.style.opacity = (scrollOffset > 0 && !this.fixedColumn) ? '1' : '0';
|
|
121
|
+
// Inline-end shadow when there is content to scroll and not at the end
|
|
122
|
+
rightShadow.style.opacity = (maxScroll > 0 && scrollOffset < maxScroll - 1) ? '1' : '0';
|
|
121
123
|
};
|
|
122
124
|
// Add scroll event listener to container element
|
|
123
125
|
this.scrollContainer.addEventListener('scroll', this._responsiveHandleScroll, { passive: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pds-table.js","sourceRoot":"","sources":["../../../../src/components/pds-table/pds-table.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Event, EventEmitter, Host, h, Prop, State, Listen } from '@stencil/core';\n\n@Component({\n tag: 'pds-table',\n styleUrls: ['pds-table.scss'],\n shadow: true,\n})\nexport class PdsTable {\n @Element() el: HTMLPdsTableElement;\n private scrollContainer: HTMLElement | null = null;\n private _responsiveHandleScroll: (() => void) | null = null;\n private _responsiveHandleResize: (() => void) | null = null;\n private _responsiveResizeObserver: ResizeObserver | null = null;\n private _teardownResponsive: (() => void) | null = null;\n\n /**\n * Determines if the table displays with reduced table cell padding.\n */\n @Prop() compact: boolean;\n\n /**\n * A unique identifier used for the table `id` attribute.\n */\n @Prop() componentId!: string;\n\n /**\n * Enables the table to be responsive by horizontally scrolling on smaller screens.\n */\n @Prop() responsive: boolean;\n\n /**\n * Determines if the should display a fixed first column.\n */\n @Prop() fixedColumn: boolean;\n\n /**\n * Determines if the table displays checkboxes for selectable rows.\n */\n @Prop() selectable: boolean;\n\n /**\n * Hides the select-all checkbox in the table header while keeping individual row checkboxes functional.\n * Only applies when `selectable` is true.\n * @defaultValue false\n */\n @Prop() disableSelectAll: boolean = false;\n\n /**\n * Adds divider borders between table rows. The last row will not have a bottom border.\n * @defaultValue false\n */\n @Prop({ reflect: true }) rowDividers: boolean = false;\n\n /**\n * The name of the column to sort by on initial load.\n * Must match the text content of a sortable column header.\n */\n @Prop() defaultSortColumn?: string;\n\n /**\n * The direction to sort the default column on initial load.\n * Only applies if `defaultSortColumn` is set.\n * @defaultValue 'asc'\n */\n @Prop() defaultSortDirection?: 'asc' | 'desc' = 'asc';\n\n /**\n * The name of the column being sorted.\n * @defaultValue null\n */\n @State() sortingColumn: string | null = null;\n\n /**\n * The direction of sorting.\n * @defaultValue 'asc'\n */\n @State() sortingDirection: 'asc' | 'desc' = 'asc';\n\n\n /**\n * Event that is emitted when the select all checkbox is clicked, carrying the selected value.\n */\n @Event() pdsTableSelectAll: EventEmitter<{ isSelected: boolean }>;\n\n componentDidLoad() {\n if (this.responsive) {\n this.setupResponsiveScrolling();\n }\n\n // Apply default sort if specified\n // Use requestAnimationFrame to defer until child components are fully initialized\n if (this.defaultSortColumn) {\n requestAnimationFrame(() => {\n void this.applyDefaultSort().catch((err) => {\n console.warn('Failed to apply default sort.', err);\n });\n });\n }\n }\n\n /**\n * Applies the default sort configuration on initial load.\n * Finds the matching column header and activates its sort state.\n * @private\n */\n private async applyDefaultSort() {\n // Normalize direction to handle invalid HTML attribute values\n const direction: 'asc' | 'desc' = this.defaultSortDirection === 'desc' ? 'desc' : 'asc';\n\n // Find the matching sortable header cell\n const columnHeaderCells = Array.from(\n this.el.querySelectorAll('pds-table-head-cell[sortable]')\n ) as HTMLPdsTableHeadCellElement[];\n\n const matchingCell = columnHeaderCells.find(\n (cell) => (cell.textContent ?? '').trim() === this.defaultSortColumn\n );\n\n if (matchingCell) {\n const columnName = (matchingCell.textContent ?? '').trim();\n // Sort the table data\n this.sortTable(columnName, direction);\n this.sortingColumn = columnName;\n this.sortingDirection = direction;\n\n // Activate the visual state on the header cell\n await matchingCell.setActiveSort(direction);\n } else {\n console.warn(`Default sort column \"${this.defaultSortColumn}\" not found.`);\n }\n }\n\n disconnectedCallback() {\n if (this._teardownResponsive) {\n this._teardownResponsive();\n this._teardownResponsive = null;\n }\n }\n\n /**\n * Sets up responsive scrolling behavior for the table.\n *\n * This method creates a horizontal scrolling system where:\n * - The table content can scroll horizontally when it exceeds the container width\n * - Scroll shadows appear at the left/right edges to indicate scrollable content\n * - Fixed columns remain sticky during horizontal scrolling\n * - Shadows respect border-radius and don't appear when there's nothing to scroll\n *\n * Architecture:\n * - Host element: Contains everything, respects parent constraints\n * - Container element: Handles horizontal scrolling (overflow-x: auto)\n * - Shadow elements: Positioned fixed relative to host, show scroll indicators\n *\n * @private\n */\n private setupResponsiveScrolling() {\n const container = this.el.shadowRoot?.querySelector('.pds-table-responsive-container') as HTMLElement;\n const leftShadow = this.el.shadowRoot?.querySelector('.scroll-shadow-left') as HTMLElement;\n const rightShadow = this.el.shadowRoot?.querySelector('.scroll-shadow-right') as HTMLElement;\n\n if (!container || !leftShadow || !rightShadow) return;\n\n // Store container reference for cleanup\n this.scrollContainer = container;\n\n /**\n * Updates the visibility of scroll shadows based on current scroll position.\n * Left shadow: Shows when scrolled away from start (hidden if fixedColumn is enabled)\n * Right shadow: Shows when there's content to scroll and not at the end\n */\n this._responsiveHandleScroll = () => {\n if (!this.scrollContainer) return;\n\n const scrollLeft = this.scrollContainer.scrollLeft;\n const maxScrollLeft = this.scrollContainer.scrollWidth - this.scrollContainer.clientWidth;\n\n // Show left shadow when scrolled away from start, but not if there's a fixed column\n leftShadow.style.opacity = (scrollLeft > 0 && !this.fixedColumn) ? '1' : '0';\n\n // Show right shadow only if there's content to scroll AND not at end\n rightShadow.style.opacity = (maxScrollLeft > 0 && scrollLeft < maxScrollLeft - 1) ? '1' : '0';\n };\n\n // Add scroll event listener to container element\n this.scrollContainer.addEventListener('scroll', this._responsiveHandleScroll, { passive: true });\n\n // Add resize observer to update shadows when container size changes\n if (typeof window !== 'undefined' && window.ResizeObserver) {\n try {\n this._responsiveResizeObserver = new ResizeObserver(() => {\n this._responsiveHandleScroll?.();\n });\n this._responsiveResizeObserver.observe(this.scrollContainer);\n } catch (error) {\n // ResizeObserver not available in some environments (e.g., tests)\n // Fall back to window resize listener only\n }\n }\n\n // Listen for window resize as fallback\n if (typeof window !== 'undefined') {\n this._responsiveHandleResize = () => {\n this._responsiveHandleScroll?.();\n };\n window.addEventListener('resize', this._responsiveHandleResize);\n }\n\n // Create teardown function for cleanup\n this._teardownResponsive = () => {\n if (this.scrollContainer && this._responsiveHandleScroll) {\n this.scrollContainer.removeEventListener('scroll', this._responsiveHandleScroll);\n this.scrollContainer = null;\n }\n\n if (this._responsiveResizeObserver) {\n this._responsiveResizeObserver.disconnect();\n this._responsiveResizeObserver = null;\n }\n\n if (typeof window !== 'undefined' && this._responsiveHandleResize) {\n window.removeEventListener('resize', this._responsiveHandleResize);\n this._responsiveHandleResize = null;\n }\n\n this._responsiveHandleScroll = null;\n };\n\n // Initial check after setup\n this._responsiveHandleScroll();\n }\n\n\n private classNames() {\n const classNames = ['pds-table'];\n\n if (this.compact) {\n classNames.push('is-compact');\n }\n\n if (this.responsive) {\n classNames.push('is-responsive');\n }\n\n return classNames.join(' ');\n }\n\n private sortTable(column: string, direction: 'asc' | 'desc') {\n const tableBody = this.el.querySelector('pds-table-body');\n\n // Return early if no table body exists\n if (!tableBody) return;\n\n // Get the rows in the table body\n const tableRows = Array.from(tableBody.querySelectorAll('pds-table-row'));\n\n // Find the column index based on the column name\n const columnHeaderCells: HTMLElement[] = Array.from(\n this.el.querySelectorAll('pds-table-head-cell[sortable]')\n );\n\n const columnHeaderCell = columnHeaderCells.find(\n (cell) => cell.innerText.trim() === column\n );\n\n if (!columnHeaderCell) {\n console.warn(`Column \"${column}\" not found.`);\n return;\n }\n\n const columnIndex = columnHeaderCells.indexOf(columnHeaderCell);\n\n // Sort the rows based on the content of the specified column\n tableRows.sort((a, b) => {\n const valueA = a.querySelector(`pds-table-cell:nth-child(${columnIndex + 1})`).textContent.trim();\n const valueB = b.querySelector(`pds-table-cell:nth-child(${columnIndex + 1})`).textContent.trim();\n\n if (direction === 'asc') {\n return valueA.localeCompare(valueB, undefined, { sensitivity: 'base' });\n } else {\n return valueB.localeCompare(valueA, undefined, { sensitivity: 'base' });\n }\n });\n\n // Clear and append the sorted rows back to the table body\n tableBody.innerHTML = '';\n tableRows.forEach((row) => {\n tableBody.appendChild(row);\n });\n }\n\n @Listen('pdsTableSort')\n handleTableSort(event: CustomEvent<{ column: string; direction: 'asc' | 'desc' }>) {\n if (event.defaultPrevented) return;\n\n const { direction } = event.detail;\n this.sortTable(event.detail.column, direction);\n this.sortingColumn = event.detail.column;\n this.sortingDirection = direction;\n }\n\n @Listen('pdsTableSelectAll')\n handleTableSelectAll(event: CustomEvent<{ isSelected: boolean }>) {\n if (event.defaultPrevented) return;\n\n const pdsTableBody = this.el.querySelector('pds-table-body');\n const tableRows = Array.from(pdsTableBody.querySelectorAll('pds-table-row'));\n\n tableRows.forEach((row) => {\n row.isSelected = event.detail.isSelected;\n });\n }\n\n @Listen('pdsTableRowSelected')\n async handleTableSelect(event: CustomEvent<{ rowIndex: number; isSelected: boolean }>) {\n if (event.defaultPrevented) return;\n\n const allTableRows = this.el.querySelectorAll('pds-table-row');\n const allSelectedRows = Array.from(allTableRows).every((row) => row.isSelected);\n const noneSelectedRows = Array.from(allTableRows).every((row) => !row.isSelected);\n const pdsTableHead = this.el.querySelector('pds-table-head');\n if (!pdsTableHead) return;\n\n const headerCheckbox = pdsTableHead.shadowRoot.querySelector('pds-checkbox');\n if (headerCheckbox) {\n headerCheckbox.checked = allSelectedRows;\n headerCheckbox.indeterminate = !allSelectedRows && !noneSelectedRows;\n }\n }\n\n render() {\n if (this.responsive) {\n return (\n <Host\n class=\"pds-table is-responsive pds-table-responsive-host\"\n id={this.componentId}\n role=\"grid\"\n selectable={this.selectable}\n tabindex=\"0\"\n part=\"table responsive-table\"\n >\n <div class=\"scroll-shadow-left\" part=\"scroll-shadow-left\"></div>\n <div class=\"scroll-shadow-right\" part=\"scroll-shadow-right\"></div>\n <div class=\"pds-table-responsive-container\" part=\"responsive-container\">\n <div class=\"pds-table-responsive-wrapper\" part=\"responsive-wrapper\">\n <div class={this.classNames()} part=\"table-inner\">\n <slot></slot>\n </div>\n </div>\n </div>\n </Host>\n );\n }\n\n return (\n <Host\n class={this.classNames()}\n id={this.componentId}\n role=\"grid\"\n selectable={this.selectable}\n tabindex=\"0\"\n part=\"table\"\n >\n <slot></slot>\n </Host>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"pds-table.js","sourceRoot":"","sources":["../../../../src/components/pds-table/pds-table.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Event, EventEmitter, Host, h, Prop, State, Listen } from '@stencil/core';\nimport { getScrollOffsetFromStart } from '../../utils/scroll';\n\n@Component({\n tag: 'pds-table',\n styleUrls: ['pds-table.scss'],\n shadow: true,\n})\nexport class PdsTable {\n @Element() el: HTMLPdsTableElement;\n private scrollContainer: HTMLElement | null = null;\n private _responsiveHandleScroll: (() => void) | null = null;\n private _responsiveHandleResize: (() => void) | null = null;\n private _responsiveResizeObserver: ResizeObserver | null = null;\n private _teardownResponsive: (() => void) | null = null;\n\n /**\n * Determines if the table displays with reduced table cell padding.\n */\n @Prop() compact: boolean;\n\n /**\n * A unique identifier used for the table `id` attribute.\n */\n @Prop() componentId!: string;\n\n /**\n * Enables the table to be responsive by horizontally scrolling on smaller screens.\n */\n @Prop() responsive: boolean;\n\n /**\n * Determines if the should display a fixed first column.\n */\n @Prop() fixedColumn: boolean;\n\n /**\n * Determines if the table displays checkboxes for selectable rows.\n */\n @Prop() selectable: boolean;\n\n /**\n * Hides the select-all checkbox in the table header while keeping individual row checkboxes functional.\n * Only applies when `selectable` is true.\n * @defaultValue false\n */\n @Prop() disableSelectAll: boolean = false;\n\n /**\n * Adds divider borders between table rows. The last row will not have a bottom border.\n * @defaultValue false\n */\n @Prop({ reflect: true }) rowDividers: boolean = false;\n\n /**\n * The name of the column to sort by on initial load.\n * Must match the text content of a sortable column header.\n */\n @Prop() defaultSortColumn?: string;\n\n /**\n * The direction to sort the default column on initial load.\n * Only applies if `defaultSortColumn` is set.\n * @defaultValue 'asc'\n */\n @Prop() defaultSortDirection?: 'asc' | 'desc' = 'asc';\n\n /**\n * The name of the column being sorted.\n * @defaultValue null\n */\n @State() sortingColumn: string | null = null;\n\n /**\n * The direction of sorting.\n * @defaultValue 'asc'\n */\n @State() sortingDirection: 'asc' | 'desc' = 'asc';\n\n\n /**\n * Event that is emitted when the select all checkbox is clicked, carrying the selected value.\n */\n @Event() pdsTableSelectAll: EventEmitter<{ isSelected: boolean }>;\n\n componentDidLoad() {\n if (this.responsive) {\n this.setupResponsiveScrolling();\n }\n\n // Apply default sort if specified\n // Use requestAnimationFrame to defer until child components are fully initialized\n if (this.defaultSortColumn) {\n requestAnimationFrame(() => {\n void this.applyDefaultSort().catch((err) => {\n console.warn('Failed to apply default sort.', err);\n });\n });\n }\n }\n\n /**\n * Applies the default sort configuration on initial load.\n * Finds the matching column header and activates its sort state.\n * @private\n */\n private async applyDefaultSort() {\n // Normalize direction to handle invalid HTML attribute values\n const direction: 'asc' | 'desc' = this.defaultSortDirection === 'desc' ? 'desc' : 'asc';\n\n // Find the matching sortable header cell\n const columnHeaderCells = Array.from(\n this.el.querySelectorAll('pds-table-head-cell[sortable]')\n ) as HTMLPdsTableHeadCellElement[];\n\n const matchingCell = columnHeaderCells.find(\n (cell) => (cell.textContent ?? '').trim() === this.defaultSortColumn\n );\n\n if (matchingCell) {\n const columnName = (matchingCell.textContent ?? '').trim();\n // Sort the table data\n this.sortTable(columnName, direction);\n this.sortingColumn = columnName;\n this.sortingDirection = direction;\n\n // Activate the visual state on the header cell\n await matchingCell.setActiveSort(direction);\n } else {\n console.warn(`Default sort column \"${this.defaultSortColumn}\" not found.`);\n }\n }\n\n disconnectedCallback() {\n if (this._teardownResponsive) {\n this._teardownResponsive();\n this._teardownResponsive = null;\n }\n }\n\n /**\n * Sets up responsive scrolling behavior for the table.\n *\n * This method creates a horizontal scrolling system where:\n * - The table content can scroll horizontally when it exceeds the container width\n * - Scroll shadows appear at the inline-start/end edges to indicate scrollable content\n * - Fixed columns remain sticky during horizontal scrolling\n * - Shadows respect border-radius and don't appear when there's nothing to scroll\n *\n * Architecture:\n * - Host element: Contains everything, respects parent constraints\n * - Container element: Handles horizontal scrolling (overflow-x: auto)\n * - Shadow elements: Positioned fixed relative to host, show scroll indicators\n *\n * @private\n */\n private setupResponsiveScrolling() {\n const container = this.el.shadowRoot?.querySelector('.pds-table-responsive-container') as HTMLElement;\n const leftShadow = this.el.shadowRoot?.querySelector('.scroll-shadow-left') as HTMLElement;\n const rightShadow = this.el.shadowRoot?.querySelector('.scroll-shadow-right') as HTMLElement;\n\n if (!container || !leftShadow || !rightShadow) return;\n\n // Store container reference for cleanup\n this.scrollContainer = container;\n\n /**\n * Updates the visibility of scroll shadows based on current scroll position.\n * Inline-start shadow: shows when scrolled away from start (hidden if fixedColumn is enabled)\n * Inline-end shadow: shows when there is content to scroll and not at the end\n */\n this._responsiveHandleScroll = () => {\n if (!this.scrollContainer) return;\n\n const { scrollWidth, clientWidth } = this.scrollContainer;\n const maxScroll = scrollWidth - clientWidth;\n const scrollOffset = getScrollOffsetFromStart(this.scrollContainer);\n\n // Inline-start shadow when scrolled away from start, but not if there's a fixed column\n leftShadow.style.opacity = (scrollOffset > 0 && !this.fixedColumn) ? '1' : '0';\n\n // Inline-end shadow when there is content to scroll and not at the end\n rightShadow.style.opacity = (maxScroll > 0 && scrollOffset < maxScroll - 1) ? '1' : '0';\n };\n\n // Add scroll event listener to container element\n this.scrollContainer.addEventListener('scroll', this._responsiveHandleScroll, { passive: true });\n\n // Add resize observer to update shadows when container size changes\n if (typeof window !== 'undefined' && window.ResizeObserver) {\n try {\n this._responsiveResizeObserver = new ResizeObserver(() => {\n this._responsiveHandleScroll?.();\n });\n this._responsiveResizeObserver.observe(this.scrollContainer);\n } catch (error) {\n // ResizeObserver not available in some environments (e.g., tests)\n // Fall back to window resize listener only\n }\n }\n\n // Listen for window resize as fallback\n if (typeof window !== 'undefined') {\n this._responsiveHandleResize = () => {\n this._responsiveHandleScroll?.();\n };\n window.addEventListener('resize', this._responsiveHandleResize);\n }\n\n // Create teardown function for cleanup\n this._teardownResponsive = () => {\n if (this.scrollContainer && this._responsiveHandleScroll) {\n this.scrollContainer.removeEventListener('scroll', this._responsiveHandleScroll);\n this.scrollContainer = null;\n }\n\n if (this._responsiveResizeObserver) {\n this._responsiveResizeObserver.disconnect();\n this._responsiveResizeObserver = null;\n }\n\n if (typeof window !== 'undefined' && this._responsiveHandleResize) {\n window.removeEventListener('resize', this._responsiveHandleResize);\n this._responsiveHandleResize = null;\n }\n\n this._responsiveHandleScroll = null;\n };\n\n // Initial check after setup\n this._responsiveHandleScroll();\n }\n\n\n private classNames() {\n const classNames = ['pds-table'];\n\n if (this.compact) {\n classNames.push('is-compact');\n }\n\n if (this.responsive) {\n classNames.push('is-responsive');\n }\n\n return classNames.join(' ');\n }\n\n private sortTable(column: string, direction: 'asc' | 'desc') {\n const tableBody = this.el.querySelector('pds-table-body');\n\n // Return early if no table body exists\n if (!tableBody) return;\n\n // Get the rows in the table body\n const tableRows = Array.from(tableBody.querySelectorAll('pds-table-row'));\n\n // Find the column index based on the column name\n const columnHeaderCells: HTMLElement[] = Array.from(\n this.el.querySelectorAll('pds-table-head-cell[sortable]')\n );\n\n const columnHeaderCell = columnHeaderCells.find(\n (cell) => cell.innerText.trim() === column\n );\n\n if (!columnHeaderCell) {\n console.warn(`Column \"${column}\" not found.`);\n return;\n }\n\n const columnIndex = columnHeaderCells.indexOf(columnHeaderCell);\n\n // Sort the rows based on the content of the specified column\n tableRows.sort((a, b) => {\n const valueA = a.querySelector(`pds-table-cell:nth-child(${columnIndex + 1})`).textContent.trim();\n const valueB = b.querySelector(`pds-table-cell:nth-child(${columnIndex + 1})`).textContent.trim();\n\n if (direction === 'asc') {\n return valueA.localeCompare(valueB, undefined, { sensitivity: 'base' });\n } else {\n return valueB.localeCompare(valueA, undefined, { sensitivity: 'base' });\n }\n });\n\n // Clear and append the sorted rows back to the table body\n tableBody.innerHTML = '';\n tableRows.forEach((row) => {\n tableBody.appendChild(row);\n });\n }\n\n @Listen('pdsTableSort')\n handleTableSort(event: CustomEvent<{ column: string; direction: 'asc' | 'desc' }>) {\n if (event.defaultPrevented) return;\n\n const { direction } = event.detail;\n this.sortTable(event.detail.column, direction);\n this.sortingColumn = event.detail.column;\n this.sortingDirection = direction;\n }\n\n @Listen('pdsTableSelectAll')\n handleTableSelectAll(event: CustomEvent<{ isSelected: boolean }>) {\n if (event.defaultPrevented) return;\n\n const pdsTableBody = this.el.querySelector('pds-table-body');\n const tableRows = Array.from(pdsTableBody.querySelectorAll('pds-table-row'));\n\n tableRows.forEach((row) => {\n row.isSelected = event.detail.isSelected;\n });\n }\n\n @Listen('pdsTableRowSelected')\n async handleTableSelect(event: CustomEvent<{ rowIndex: number; isSelected: boolean }>) {\n if (event.defaultPrevented) return;\n\n const allTableRows = this.el.querySelectorAll('pds-table-row');\n const allSelectedRows = Array.from(allTableRows).every((row) => row.isSelected);\n const noneSelectedRows = Array.from(allTableRows).every((row) => !row.isSelected);\n const pdsTableHead = this.el.querySelector('pds-table-head');\n if (!pdsTableHead) return;\n\n const headerCheckbox = pdsTableHead.shadowRoot.querySelector('pds-checkbox');\n if (headerCheckbox) {\n headerCheckbox.checked = allSelectedRows;\n headerCheckbox.indeterminate = !allSelectedRows && !noneSelectedRows;\n }\n }\n\n render() {\n if (this.responsive) {\n return (\n <Host\n class=\"pds-table is-responsive pds-table-responsive-host\"\n id={this.componentId}\n role=\"grid\"\n selectable={this.selectable}\n tabindex=\"0\"\n part=\"table responsive-table\"\n >\n <div class=\"scroll-shadow-left\" part=\"scroll-shadow-left\"></div>\n <div class=\"scroll-shadow-right\" part=\"scroll-shadow-right\"></div>\n <div class=\"pds-table-responsive-container\" part=\"responsive-container\">\n <div class=\"pds-table-responsive-wrapper\" part=\"responsive-wrapper\">\n <div class={this.classNames()} part=\"table-inner\">\n <slot></slot>\n </div>\n </div>\n </div>\n </Host>\n );\n }\n\n return (\n <Host\n class={this.classNames()}\n id={this.componentId}\n role=\"grid\"\n selectable={this.selectable}\n tabindex=\"0\"\n part=\"table\"\n >\n <slot></slot>\n </Host>\n );\n }\n}\n"]}
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
max-width: var(--tooltip-dimension-max-width);
|
|
17
17
|
opacity: 0;
|
|
18
18
|
padding: var(--pine-dimension-xs) calc(var(--pine-dimension-md) / 2);
|
|
19
|
+
position: relative;
|
|
19
20
|
visibility: hidden;
|
|
20
21
|
width: max-content;
|
|
21
22
|
}
|
|
@@ -25,7 +26,7 @@
|
|
|
25
26
|
z-index: var(--pine-z-index-raised);
|
|
26
27
|
}
|
|
27
28
|
.pds-tooltip.pds-tooltip--has-html-content .pds-tooltip__content {
|
|
28
|
-
width:
|
|
29
|
+
width: fit-content;
|
|
29
30
|
}
|
|
30
31
|
.pds-tooltip__content::after {
|
|
31
32
|
border-color: transparent;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
let cachedRtlScrollType = null;
|
|
2
|
+
/**
|
|
3
|
+
* Detects how this browser reports scrollLeft for RTL overflow containers.
|
|
4
|
+
* @see https://github.com/othree/jquery.rtl-scroll-type
|
|
5
|
+
*/
|
|
6
|
+
export function getRtlScrollType() {
|
|
7
|
+
if (cachedRtlScrollType) {
|
|
8
|
+
return cachedRtlScrollType;
|
|
9
|
+
}
|
|
10
|
+
if (typeof document === 'undefined') {
|
|
11
|
+
cachedRtlScrollType = 'default';
|
|
12
|
+
return cachedRtlScrollType;
|
|
13
|
+
}
|
|
14
|
+
const probe = document.createElement('div');
|
|
15
|
+
probe.style.width = '100px';
|
|
16
|
+
probe.style.height = '100px';
|
|
17
|
+
probe.style.position = 'absolute';
|
|
18
|
+
probe.style.top = '-1000px';
|
|
19
|
+
probe.style.overflow = 'scroll';
|
|
20
|
+
probe.style.direction = 'rtl';
|
|
21
|
+
const inner = document.createElement('div');
|
|
22
|
+
inner.style.width = '200px';
|
|
23
|
+
inner.style.height = '100px';
|
|
24
|
+
probe.appendChild(inner);
|
|
25
|
+
document.body.appendChild(probe);
|
|
26
|
+
if (probe.scrollLeft > 0) {
|
|
27
|
+
cachedRtlScrollType = 'reverse';
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
probe.scrollLeft = 1;
|
|
31
|
+
cachedRtlScrollType = probe.scrollLeft === 0 ? 'negative' : 'default';
|
|
32
|
+
}
|
|
33
|
+
document.body.removeChild(probe);
|
|
34
|
+
return cachedRtlScrollType;
|
|
35
|
+
}
|
|
36
|
+
/** Reset cached RTL scroll type (for tests). */
|
|
37
|
+
export function resetRtlScrollTypeCache() {
|
|
38
|
+
cachedRtlScrollType = null;
|
|
39
|
+
}
|
|
40
|
+
/** True when the element's used text direction is RTL (inherits from ancestors). */
|
|
41
|
+
export function isRtlDirection(element) {
|
|
42
|
+
return getComputedStyle(element).direction === 'rtl';
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* RTL scroll offset from inline-start for a known browser scrollLeft model.
|
|
46
|
+
* @see https://github.com/othree/jquery.rtl-scroll-type#3-types-of-scrollleft-scrollwidth--100
|
|
47
|
+
*/
|
|
48
|
+
export function getRtlScrollOffsetFromStart(scrollLeft, maxScroll, rtlType) {
|
|
49
|
+
switch (rtlType) {
|
|
50
|
+
case 'negative':
|
|
51
|
+
return Math.max(0, -scrollLeft);
|
|
52
|
+
case 'reverse':
|
|
53
|
+
return Math.max(0, scrollLeft);
|
|
54
|
+
case 'default':
|
|
55
|
+
default:
|
|
56
|
+
return Math.max(0, maxScroll - scrollLeft);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Distance scrolled from the inline-start edge (LTR: left, RTL: right).
|
|
61
|
+
*/
|
|
62
|
+
export function getScrollOffsetFromStart(container) {
|
|
63
|
+
const { scrollLeft, scrollWidth, clientWidth } = container;
|
|
64
|
+
const maxScroll = Math.max(0, scrollWidth - clientWidth);
|
|
65
|
+
if (maxScroll <= 0) {
|
|
66
|
+
return 0;
|
|
67
|
+
}
|
|
68
|
+
const isRtl = isRtlDirection(container);
|
|
69
|
+
if (!isRtl) {
|
|
70
|
+
return scrollLeft;
|
|
71
|
+
}
|
|
72
|
+
return getRtlScrollOffsetFromStart(scrollLeft, maxScroll, getRtlScrollType());
|
|
73
|
+
}
|
|
74
|
+
/** True when the container is scrolled away from its inline-start edge. */
|
|
75
|
+
export function isScrolledFromInlineStart(container) {
|
|
76
|
+
return getScrollOffsetFromStart(container) > 0;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=scroll.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../../src/utils/scroll.ts"],"names":[],"mappings":"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","sourcesContent":["export type RtlScrollType = 'negative' | 'reverse' | 'default';\n\nlet cachedRtlScrollType: RtlScrollType | null = null;\n\n/**\n * Detects how this browser reports scrollLeft for RTL overflow containers.\n * @see https://github.com/othree/jquery.rtl-scroll-type\n */\nexport function getRtlScrollType(): RtlScrollType {\n if (cachedRtlScrollType) {\n return cachedRtlScrollType;\n }\n\n if (typeof document === 'undefined') {\n cachedRtlScrollType = 'default';\n return cachedRtlScrollType;\n }\n\n const probe = document.createElement('div');\n probe.style.width = '100px';\n probe.style.height = '100px';\n probe.style.position = 'absolute';\n probe.style.top = '-1000px';\n probe.style.overflow = 'scroll';\n probe.style.direction = 'rtl';\n\n const inner = document.createElement('div');\n inner.style.width = '200px';\n inner.style.height = '100px';\n probe.appendChild(inner);\n\n document.body.appendChild(probe);\n\n if (probe.scrollLeft > 0) {\n cachedRtlScrollType = 'reverse';\n } else {\n probe.scrollLeft = 1;\n cachedRtlScrollType = probe.scrollLeft === 0 ? 'negative' : 'default';\n }\n\n document.body.removeChild(probe);\n return cachedRtlScrollType;\n}\n\n/** Reset cached RTL scroll type (for tests). */\nexport function resetRtlScrollTypeCache(): void {\n cachedRtlScrollType = null;\n}\n\n/** True when the element's used text direction is RTL (inherits from ancestors). */\nexport function isRtlDirection(element: Element): boolean {\n return getComputedStyle(element).direction === 'rtl';\n}\n\n/**\n * RTL scroll offset from inline-start for a known browser scrollLeft model.\n * @see https://github.com/othree/jquery.rtl-scroll-type#3-types-of-scrollleft-scrollwidth--100\n */\nexport function getRtlScrollOffsetFromStart(\n scrollLeft: number,\n maxScroll: number,\n rtlType: RtlScrollType,\n): number {\n switch (rtlType) {\n case 'negative':\n return Math.max(0, -scrollLeft);\n case 'reverse':\n return Math.max(0, scrollLeft);\n case 'default':\n default:\n return Math.max(0, maxScroll - scrollLeft);\n }\n}\n\n/**\n * Distance scrolled from the inline-start edge (LTR: left, RTL: right).\n */\nexport function getScrollOffsetFromStart(container: HTMLElement): number {\n const { scrollLeft, scrollWidth, clientWidth } = container;\n const maxScroll = Math.max(0, scrollWidth - clientWidth);\n\n if (maxScroll <= 0) {\n return 0;\n }\n\n const isRtl = isRtlDirection(container);\n if (!isRtl) {\n return scrollLeft;\n }\n\n return getRtlScrollOffsetFromStart(scrollLeft, maxScroll, getRtlScrollType());\n}\n\n/** True when the container is scrolled away from its inline-start edge. */\nexport function isScrolledFromInlineStart(container: HTMLElement): boolean {\n return getScrollOffsetFromStart(container) > 0;\n}\n"]}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default tag filter applied by `runAxe`. Mirrors WCAG 2.0 + 2.1 levels A
|
|
3
|
+
* and AA. Override with `{ tags: [...] }` to widen or narrow the scope.
|
|
4
|
+
*/
|
|
5
|
+
export const DEFAULT_AXE_TAGS = ['wcag2a', 'wcag2aa', 'wcag21a', 'wcag21aa'];
|
|
6
|
+
/**
|
|
7
|
+
* Page-level axe rules that fire on the bare HTML harness Stencil's E2E
|
|
8
|
+
* provides (no `<title>`, no `<html lang>`, no landmarks, no `<h1>`).
|
|
9
|
+
* They are disabled by default because they describe document chrome,
|
|
10
|
+
* not component behavior — flagging them at component scope yields noise.
|
|
11
|
+
*
|
|
12
|
+
* Tests can opt back in for a specific case:
|
|
13
|
+
*
|
|
14
|
+
* ```ts
|
|
15
|
+
* await runAxe(page, { rules: { 'document-title': { enabled: true } } });
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export const DEFAULT_DISABLED_RULES = [
|
|
19
|
+
'document-title',
|
|
20
|
+
'html-has-lang',
|
|
21
|
+
'landmark-one-main',
|
|
22
|
+
'page-has-heading-one',
|
|
23
|
+
'region',
|
|
24
|
+
];
|
|
25
|
+
/**
|
|
26
|
+
* Injects axe-core into an active Stencil E2EPage and returns any
|
|
27
|
+
* accessibility violations found in the current document.
|
|
28
|
+
*
|
|
29
|
+
* Usage:
|
|
30
|
+
*
|
|
31
|
+
* ```ts
|
|
32
|
+
* const page = await newE2EPage();
|
|
33
|
+
* await page.setContent('<pds-button>Click me</pds-button>');
|
|
34
|
+
* const violations = await runAxe(page);
|
|
35
|
+
* expect(violations).toEqual([]);
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* Component tests should assert against the returned array directly so
|
|
39
|
+
* each component can document its own baseline (zero violations is the
|
|
40
|
+
* goal; suppressions should be deliberate and commented).
|
|
41
|
+
*/
|
|
42
|
+
export async function runAxe(page, options = {}) {
|
|
43
|
+
var _a, _b;
|
|
44
|
+
// Resolve axe-core's UMD bundle from node_modules at test time so we
|
|
45
|
+
// do not depend on a build step injecting it.
|
|
46
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
47
|
+
const axePath = require.resolve('axe-core/axe.min.js');
|
|
48
|
+
await page.addScriptTag({ path: axePath });
|
|
49
|
+
const defaultRules = DEFAULT_DISABLED_RULES.reduce((acc, rule) => {
|
|
50
|
+
acc[rule] = { enabled: false };
|
|
51
|
+
return acc;
|
|
52
|
+
}, {});
|
|
53
|
+
const runOptions = {
|
|
54
|
+
runOnly: {
|
|
55
|
+
type: 'tag',
|
|
56
|
+
values: (_a = options.tags) !== null && _a !== void 0 ? _a : [...DEFAULT_AXE_TAGS],
|
|
57
|
+
},
|
|
58
|
+
rules: Object.assign(Object.assign({}, defaultRules), ((_b = options.rules) !== null && _b !== void 0 ? _b : {})),
|
|
59
|
+
};
|
|
60
|
+
// Embed options in a string-evaluated IIFE so Istanbul does not instrument
|
|
61
|
+
// the browser-side function (cov_* globals are undefined in Puppeteer).
|
|
62
|
+
const optsJson = JSON.stringify(runOptions);
|
|
63
|
+
const violations = await page.evaluate(`
|
|
64
|
+
(async () => {
|
|
65
|
+
const opts = ${optsJson};
|
|
66
|
+
const axe = window.axe;
|
|
67
|
+
if (!axe) {
|
|
68
|
+
throw new Error('axe-core failed to load on the page.');
|
|
69
|
+
}
|
|
70
|
+
const results = await axe.run(document, opts);
|
|
71
|
+
return results.violations;
|
|
72
|
+
})()
|
|
73
|
+
`);
|
|
74
|
+
return violations;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Formats an axe target selector, including nested arrays for shadow DOM
|
|
78
|
+
* and iframe boundaries (axe's `UnlabelledFrameSelector` shape).
|
|
79
|
+
*/
|
|
80
|
+
export function formatAxeTarget(target) {
|
|
81
|
+
return target
|
|
82
|
+
.map((segment) => (Array.isArray(segment) ? segment.join(' ') : segment))
|
|
83
|
+
.join(' >> ');
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Formats an array of axe violations into a readable failure message for
|
|
87
|
+
* use in test output. Returns an empty string when there are no
|
|
88
|
+
* violations, so it can be passed directly into `expect(...).toBe('')`.
|
|
89
|
+
*/
|
|
90
|
+
export function formatViolations(violations) {
|
|
91
|
+
if (violations.length === 0)
|
|
92
|
+
return '';
|
|
93
|
+
return violations
|
|
94
|
+
.map((v) => {
|
|
95
|
+
var _a;
|
|
96
|
+
const targets = v.nodes.map((n) => formatAxeTarget(n.target)).join(', ');
|
|
97
|
+
return `• [${(_a = v.impact) !== null && _a !== void 0 ? _a : 'unknown'}] ${v.id} — ${v.help}\n ${targets}\n ${v.helpUrl}`;
|
|
98
|
+
})
|
|
99
|
+
.join('\n\n');
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=axe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"axe.js","sourceRoot":"","sources":["../../../../src/utils/test/axe.ts"],"names":[],"mappings":"AAqCA;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAU,CAAC;AAEtF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,gBAAgB;IAChB,eAAe;IACf,mBAAmB;IACnB,sBAAsB;IACtB,QAAQ;CACA,CAAC;AAEX;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAa,EAAE,UAAyB,EAAE;;IACrE,qEAAqE;IACrE,8CAA8C;IAC9C,8DAA8D;IAC9D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAEvD,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAE3C,MAAM,YAAY,GAAG,sBAAsB,CAAC,MAAM,CAChD,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QACZ,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC/B,OAAO,GAAG,CAAC;IACb,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,UAAU,GAAG;QACjB,OAAO,EAAE;YACP,IAAI,EAAE,KAAc;YACpB,MAAM,EAAE,MAAA,OAAO,CAAC,IAAI,mCAAI,CAAC,GAAG,gBAAgB,CAAC;SAC9C;QACD,KAAK,kCAAO,YAAY,GAAK,CAAC,MAAA,OAAO,CAAC,KAAK,mCAAI,EAAE,CAAC,CAAE;KACrD,CAAC;IAEF,2EAA2E;IAC3E,wEAAwE;IACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC;;qBAEpB,QAAQ;;;;;;;;GAQ1B,CAAC,CAAC;IAEH,OAAO,UAA4B,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC/C,OAAO,MAAM;SACV,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;SACxE,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAA0B;IACzD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,OAAO,UAAU;SACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;;QACT,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzE,OAAO,MAAM,MAAA,CAAC,CAAC,MAAM,mCAAI,SAAS,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,SAAS,OAAO,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;IAC9F,CAAC,CAAC;SACD,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC","sourcesContent":["/* istanbul ignore file -- page.evaluate runs in the browser; coverage globals are unavailable there */\nimport type { E2EPage } from '@stencil/core/testing';\n\n/** axe-core selector path; nested arrays represent iframe/shadow boundaries. */\nexport type AxeTarget = (string | string[])[];\n\n/**\n * Subset of an axe-core violation surfaced for test assertions. The shape\n * mirrors `axe.AxeResults['violations'][number]` without pulling axe-core's\n * full types into the component test surface.\n */\nexport interface AxeViolation {\n id: string;\n impact: 'minor' | 'moderate' | 'serious' | 'critical' | null;\n description: string;\n help: string;\n helpUrl: string;\n nodes: Array<{\n target: AxeTarget;\n html: string;\n failureSummary?: string;\n }>;\n}\n\nexport interface RunAxeOptions {\n /**\n * Limits the run to rules tagged with one or more of these values.\n * Defaults to WCAG 2.0 + 2.1 levels A and AA.\n */\n tags?: string[];\n\n /**\n * Per-rule overrides (e.g. `{ 'color-contrast': { enabled: false } }`).\n */\n rules?: Record<string, { enabled: boolean }>;\n}\n\n/**\n * Default tag filter applied by `runAxe`. Mirrors WCAG 2.0 + 2.1 levels A\n * and AA. Override with `{ tags: [...] }` to widen or narrow the scope.\n */\nexport const DEFAULT_AXE_TAGS = ['wcag2a', 'wcag2aa', 'wcag21a', 'wcag21aa'] as const;\n\n/**\n * Page-level axe rules that fire on the bare HTML harness Stencil's E2E\n * provides (no `<title>`, no `<html lang>`, no landmarks, no `<h1>`).\n * They are disabled by default because they describe document chrome,\n * not component behavior — flagging them at component scope yields noise.\n *\n * Tests can opt back in for a specific case:\n *\n * ```ts\n * await runAxe(page, { rules: { 'document-title': { enabled: true } } });\n * ```\n */\nexport const DEFAULT_DISABLED_RULES = [\n 'document-title',\n 'html-has-lang',\n 'landmark-one-main',\n 'page-has-heading-one',\n 'region',\n] as const;\n\n/**\n * Injects axe-core into an active Stencil E2EPage and returns any\n * accessibility violations found in the current document.\n *\n * Usage:\n *\n * ```ts\n * const page = await newE2EPage();\n * await page.setContent('<pds-button>Click me</pds-button>');\n * const violations = await runAxe(page);\n * expect(violations).toEqual([]);\n * ```\n *\n * Component tests should assert against the returned array directly so\n * each component can document its own baseline (zero violations is the\n * goal; suppressions should be deliberate and commented).\n */\nexport async function runAxe(page: E2EPage, options: RunAxeOptions = {}): Promise<AxeViolation[]> {\n // Resolve axe-core's UMD bundle from node_modules at test time so we\n // do not depend on a build step injecting it.\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const axePath = require.resolve('axe-core/axe.min.js');\n\n await page.addScriptTag({ path: axePath });\n\n const defaultRules = DEFAULT_DISABLED_RULES.reduce<Record<string, { enabled: boolean }>>(\n (acc, rule) => {\n acc[rule] = { enabled: false };\n return acc;\n },\n {},\n );\n\n const runOptions = {\n runOnly: {\n type: 'tag' as const,\n values: options.tags ?? [...DEFAULT_AXE_TAGS],\n },\n rules: { ...defaultRules, ...(options.rules ?? {}) },\n };\n\n // Embed options in a string-evaluated IIFE so Istanbul does not instrument\n // the browser-side function (cov_* globals are undefined in Puppeteer).\n const optsJson = JSON.stringify(runOptions);\n const violations = await page.evaluate(`\n (async () => {\n const opts = ${optsJson};\n const axe = window.axe;\n if (!axe) {\n throw new Error('axe-core failed to load on the page.');\n }\n const results = await axe.run(document, opts);\n return results.violations;\n })()\n `);\n\n return violations as AxeViolation[];\n}\n\n/**\n * Formats an axe target selector, including nested arrays for shadow DOM\n * and iframe boundaries (axe's `UnlabelledFrameSelector` shape).\n */\nexport function formatAxeTarget(target: AxeTarget): string {\n return target\n .map((segment) => (Array.isArray(segment) ? segment.join(' ') : segment))\n .join(' >> ');\n}\n\n/**\n * Formats an array of axe violations into a readable failure message for\n * use in test output. Returns an empty string when there are no\n * violations, so it can be passed directly into `expect(...).toBe('')`.\n */\nexport function formatViolations(violations: AxeViolation[]): string {\n if (violations.length === 0) return '';\n return violations\n .map((v) => {\n const targets = v.nodes.map((n) => formatAxeTarget(n.target)).join(', ');\n return `• [${v.impact ?? 'unknown'}] ${v.id} — ${v.help}\\n ${targets}\\n ${v.helpUrl}`;\n })\n .join('\\n\\n');\n}\n"]}
|