@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p-CX0Csdth.system.js","sources":["src/components/pds-filters/pds-filter/pds-filter.scss?tag=pds-filter&encapsulation=shadow","src/components/pds-filters/pds-filter/pds-filter.tsx"],"sourcesContent":[":host {\n --box-shadow-focus: 0 0 0 1px var(--pine-color-background-container), 0 0 0 3px var(--pine-color-focus-ring);\n\n display: inline-block;\n position: relative;\n}\n\n.pds-filter__trigger {\n align-items: center;\n /* stylelint-disable-next-line property-no-unknown */\n anchor-name: --filter-trigger;\n background: var(--pine-color-background-container);\n border: var(--pine-border);\n border-radius: var(--pine-dimension-100);\n box-shadow: var(--pine-box-shadow-050);\n box-sizing: border-box;\n color: var(--pine-color-text-tertiary);\n cursor: pointer;\n display: inline-flex;\n font-family: var(--pine-font-family-inter);\n font-size: var(--pine-font-size-100);\n font-weight: var(--pine-font-weight-400);\n gap: var(--pine-dimension-050);\n letter-spacing: var(--pine-letter-spacing-114);\n line-height: var(--pine-line-height-150);\n padding: var(--pine-dimension-025) var(--pine-dimension-125);\n position: relative;\n transition: all 0.2s ease;\n\n pds-icon {\n block-size: var(--pine-font-size-100);\n color: var(--pine-color-text-secondary);\n flex-shrink: 0;\n inline-size: var(--pine-font-size-100);\n }\n\n &:hover,\n &.pds-filter__trigger--open {\n background-color: var(--pine-color-background-subtle);\n border-color: var(--pine-color-border-hover);\n color: var(--pine-color-text-hover);\n\n pds-icon {\n color: var(--pine-color-text-secondary);\n }\n }\n\n &:focus-visible {\n box-shadow: var(--box-shadow-focus);\n outline: none;\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n}\n\n.pds-filter__trigger--selected {\n background-color: var(--pine-color-purple-050);\n border-color: var(--pine-color-purple-500);\n color: var(--pine-color-purple-600);\n\n pds-icon {\n color: var(--pine-color-purple-600);\n }\n\n &:hover,\n &.pds-filter__trigger--open {\n background-color: var(--pine-color-purple-100);\n border-color: var(--pine-color-purple-500);\n color: var(--pine-color-purple-600);\n\n pds-icon {\n color: var(--pine-color-purple-600);\n }\n }\n\n &:focus-visible {\n box-shadow: var(--box-shadow-focus);\n outline: none;\n }\n}\n\n.pds-filter__trigger--more {\n background-color: var(--pine-color-background-container-hover);\n border: var(--pine-border-width-thin) dashed var(--pine-color-border);\n color: var(--pine-color-text-tertiary);\n\n pds-icon {\n color: var(--pine-color-text-secondary);\n }\n\n &:hover,\n &.pds-filter__trigger--open {\n background-color: var(--pine-color-background-subtle);\n border-color: var(--pine-color-border-hover);\n color: var(--pine-color-text-hover);\n\n pds-icon {\n color: var(--pine-color-text-secondary);\n }\n }\n\n &:focus-visible {\n box-shadow: var(--box-shadow-focus);\n outline: none;\n }\n}\n\n.pds-filter__trigger--clear {\n background: transparent;\n border: var(--pine-border-width-thin) solid transparent;\n border-radius: var(--pine-dimension-100);\n box-shadow: none;\n color: var(--pine-color-purple-600);\n\n pds-icon {\n color: var(--pine-color-purple-600);\n }\n\n &:hover {\n background-color: var(--pine-color-purple-100);\n border-color: var(--pine-color-purple-100);\n color: var(--pine-color-purple-600);\n\n pds-icon {\n color: var(--pine-color-purple-600);\n }\n }\n\n &:focus-visible {\n box-shadow: var(--box-shadow-focus);\n outline: none;\n }\n}\n\n.pds-filter__button-content {\n align-items: center;\n display: inline-flex;\n gap: var(--pine-dimension-050);\n max-inline-size: 148px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.pds-filter__button-text {\n line-height: var(--pine-line-height-150);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.pds-filter__dropdown-icon {\n block-size: var(--pine-dimension-200);\n flex-shrink: 0;\n inline-size: var(--pine-dimension-200);\n}\n\n\n.pds-filter__popover {\n background-color: var(--pine-color-background-container);\n border: 0;\n border-radius: var(--pine-dimension-100);\n box-shadow: var(--pine-box-shadow-100);\n display: none;\n inline-size: 228px;\n inset: unset;\n padding: var(--pine-dimension-100);\n z-index: var(--pine-z-index-overlay);\n\n /* stylelint-disable-next-line selector-pseudo-class-no-unknown */\n &:popover-open,\n &.is-open {\n display: block;\n }\n\n /* Modern browsers: CSS anchor positioning with JavaScript-controlled flipping */\n @supports (anchor-name: --test) {\n inset-block-start: calc(anchor(--filter-trigger bottom) + var(--pine-dimension-100));\n inset-inline-start: anchor(--filter-trigger start);\n position: fixed; /* Anchor positioning requires fixed positioning */\n /* stylelint-disable-next-line property-no-unknown */\n position-anchor: --filter-trigger;\n\n /* CSS position-try disabled for precise JavaScript-controlled flipping */\n\n /* Flipping classes applied by JavaScript for precise control */\n &.popover-flip-horizontal {\n inset-inline-end: anchor(--filter-trigger end);\n inset-inline-start: auto;\n }\n\n &.popover-flip-vertical {\n inset-block-start: anchor(--filter-trigger top);\n transform: translateY(calc(-100% - var(--pine-dimension-100)));\n }\n\n &.popover-flip-horizontal.popover-flip-vertical {\n inset-block-start: anchor(--filter-trigger top);\n inset-inline-end: anchor(--filter-trigger end);\n inset-inline-start: auto;\n transform: translateY(calc(-100% - var(--pine-dimension-100)));\n }\n\n /* Ensure fallback class works with flipping in modern browsers */\n &.is-open.popover-flip-horizontal {\n inset-inline-end: anchor(--filter-trigger end);\n inset-inline-start: auto;\n }\n\n &.is-open.popover-flip-vertical {\n inset-block-start: anchor(--filter-trigger top);\n transform: translateY(calc(-100% - var(--pine-dimension-100)));\n }\n\n &.is-open.popover-flip-horizontal.popover-flip-vertical {\n inset-block-start: anchor(--filter-trigger top);\n inset-inline-end: anchor(--filter-trigger end);\n inset-inline-start: auto;\n transform: translateY(calc(-100% - var(--pine-dimension-100)));\n }\n\n }\n}\n","import { Component, Element, Event, EventEmitter, Host, h, Prop, State, Method, Listen } from '@stencil/core';\nimport type { BasePdsProps } from '@utils/interfaces';\nimport { isRtlDirection } from '@utils/scroll';\nimport type { PdsFilterOpenEventDetail, PdsFilterCloseEventDetail, PdsFilterClearEventDetail, PdsFilterVariant } from './filter-interface';\n\nimport { enlarge, trash } from '@pine-ds/icons/icons';\n\n/**\n * Individual filter component with cross-browser popover positioning.\n *\n * Uses a hybrid approach for optimal cross-browser compatibility:\n * - Modern browsers: CSS anchor positioning + JavaScript flip classes\n * - Fallback browsers: JavaScript positioning with viewport boundary detection\n *\n * @part button - Exposes the trigger button element for styling.\n * @part button-content - Exposes the button content container for styling.\n * @part button-text - Exposes the button text for styling.\n * @part icon - Exposes the icon component for styling.\n * @part popover - Exposes the popover container for styling.\n * @slot (default) - Popover content that will be displayed when the filter is open.\n */\n\n@Component({\n tag: 'pds-filter',\n styleUrl: 'pds-filter.scss',\n shadow: true,\n})\nexport class PdsFilter implements BasePdsProps {\n @Element() el!: HTMLPdsFilterElement;\n\n private popoverEl: HTMLElement;\n private scrollRAF: number | null = null;\n private lastScrollTime = 0;\n\n /**\n * A unique identifier used for the underlying component `id` attribute.\n */\n @Prop() componentId!: string;\n\n /**\n * The variant style of the filter trigger.\n * @defaultValue 'default'\n */\n @Prop() variant: PdsFilterVariant = 'default';\n\n /**\n * The name of the icon to display in the trigger button.\n * For 'clear' variant, this is ignored as it always shows trash icon.\n */\n @Prop() icon?: string;\n\n /**\n * The text content displayed in the trigger button.\n */\n @Prop() text?: string;\n\n\n /**\n * State to track if the popover is open.\n */\n @State() isOpen = false;\n\n /**\n * Event emitted when the filter popover is opened.\n */\n @Event() pdsFilterOpen: EventEmitter<PdsFilterOpenEventDetail>;\n\n /**\n * Event emitted when the filter popover is closed.\n */\n @Event() pdsFilterClose: EventEmitter<PdsFilterCloseEventDetail>;\n\n /**\n * Event emitted when the clear variant is clicked.\n */\n @Event() pdsFilterClear: EventEmitter<PdsFilterClearEventDetail>;\n\n\n /**\n * Component lifecycle: Clean up when disconnected from DOM.\n * Prevents memory leaks by canceling pending operations and closing popovers.\n */\n disconnectedCallback() {\n // Cancel pending animation frames\n if (this.scrollRAF) {\n cancelAnimationFrame(this.scrollRAF);\n this.scrollRAF = null;\n }\n\n this.lastScrollTime = 0;\n\n // Clean up native popover event listeners\n if (this.popoverEl) {\n const supportsPopoverAPI = HTMLElement.prototype.showPopover && !navigator.userAgent.includes('Firefox');\n if (supportsPopoverAPI) {\n this.popoverEl.removeEventListener('toggle', this.handleNativePopoverToggle);\n }\n }\n\n // Ensure popover is closed\n if (this.isOpen && this.popoverEl) {\n try {\n this.popoverEl.hidePopover();\n } catch (error) {\n this.popoverEl.style.display = 'none';\n this.popoverEl.classList.remove('is-open');\n }\n }\n }\n\n\n componentDidRender() {\n // Note: popoverEl is set via ref callback in render method\n // For browsers with native popover API, we need direct element listeners\n // since the document listener may not capture native popover toggle events\n if (this.popoverEl) {\n const supportsPopoverAPI = HTMLElement.prototype.showPopover && !navigator.userAgent.includes('Firefox');\n\n if (supportsPopoverAPI) {\n // Remove any existing listeners to avoid duplicates\n this.popoverEl.removeEventListener('toggle', this.handleNativePopoverToggle);\n // Add direct listener for native popover events\n this.popoverEl.addEventListener('toggle', this.handleNativePopoverToggle);\n }\n }\n }\n\n /**\n * Handle native popover toggle events directly on the element\n * This is needed for browsers with native Popover API support\n */\n private handleNativePopoverToggle = (event: Event) => {\n const target = event.target as HTMLElement;\n\n if (target && target.id === `${this.componentId}-popover`) {\n // Check current popover state\n let isCurrentlyOpen = false;\n try {\n isCurrentlyOpen = target.matches(':popover-open');\n } catch (error) {\n // Fallback if :popover-open selector isn't supported\n isCurrentlyOpen = target.style.display === 'block';\n }\n\n // Update state\n this.isOpen = isCurrentlyOpen;\n\n if (this.isOpen) {\n setTimeout(() => this.adjustPopoverPosition(), 0);\n\n this.pdsFilterOpen.emit({\n componentId: this.componentId,\n variant: this.variant,\n text: this.text,\n });\n } else {\n this.pdsFilterClose.emit({\n componentId: this.componentId,\n variant: this.variant,\n text: this.text,\n });\n }\n }\n };\n\n /**\n * Reposition popovers on window resize.\n */\n @Listen('resize', { target: 'window' })\n handleWindowResize() {\n if (this.isOpen) {\n setTimeout(() => this.adjustPopoverPosition(), 16);\n }\n }\n\n /**\n * Reposition popovers on scroll with performance throttling.\n */\n @Listen('scroll', { target: 'window', passive: true })\n handleWindowScroll() {\n if (this.isOpen) {\n const supportsAnchorPositioning = \"anchorName\" in document.documentElement.style;\n const now = performance.now();\n\n const throttleMs = supportsAnchorPositioning ? 66 : 33;\n if (now - this.lastScrollTime < throttleMs) {\n return;\n }\n\n this.lastScrollTime = now;\n\n if (this.scrollRAF) {\n cancelAnimationFrame(this.scrollRAF);\n }\n\n this.scrollRAF = requestAnimationFrame(() => {\n if (this.isOpen && this.popoverEl && this.el.isConnected) {\n this.adjustPopoverPosition();\n }\n this.scrollRAF = null;\n });\n }\n }\n\n /**\n * Closes other open filter popovers to ensure only one is open at a time.\n */\n private closeOtherPopovers() {\n const allFilters = document.querySelectorAll('pds-filter');\n\n allFilters.forEach((filter) => {\n if (filter === this.el) return;\n\n const popover = filter.shadowRoot?.querySelector('.pds-filter__popover') as HTMLElement;\n\n if (popover) {\n // Check for popover API support to avoid crashes\n let isPopoverOpen = false;\n try {\n isPopoverOpen = popover.matches(':popover-open');\n } catch (error) {\n // Fallback if :popover-open selector isn't supported\n isPopoverOpen = popover.style.display === 'block';\n }\n\n if (isPopoverOpen) {\n try {\n popover.hidePopover();\n } catch (error) {\n popover.style.display = 'none';\n popover.classList.remove('is-open');\n }\n }\n }\n });\n }\n\n /**\n * Adjusts popover position to keep it within viewport bounds.\n * Uses CSS anchor positioning for modern browsers, JavaScript for fallback browsers.\n */\n private adjustPopoverPosition() {\n if (!this.popoverEl || this.variant === 'clear') return;\n\n const triggerEl = this.el.shadowRoot?.querySelector('.pds-filter__trigger') as HTMLElement;\n if (!triggerEl) return;\n\n const triggerRect = triggerEl.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n const supportsAnchorPositioning = \"anchorName\" in document.documentElement.style;\n\n // Get dimensions for boundary detection\n const popoverWidth = 228;\n const popoverHeight = this.popoverEl.getBoundingClientRect().height || 200;\n\n // Boundary detection for flipping (inline-end overflow respects document direction)\n const bufferSpace = 20;\n const isRtl = isRtlDirection(this.el);\n const wouldOverflowInlineEnd = isRtl\n ? (triggerRect.right - popoverWidth - bufferSpace) < 0\n : (triggerRect.left + popoverWidth + bufferSpace) > viewportWidth;\n const wouldOverflowBottom = (triggerRect.bottom + 8 + popoverHeight + bufferSpace) > viewportHeight;\n\n if (supportsAnchorPositioning) {\n // Modern browsers: CSS anchor positioning + JavaScript-controlled flipping\n this.popoverEl.classList.remove('popover-flip-horizontal', 'popover-flip-vertical');\n\n if (wouldOverflowInlineEnd) {\n this.popoverEl.classList.add('popover-flip-horizontal');\n }\n\n if (wouldOverflowBottom) {\n this.popoverEl.classList.add('popover-flip-vertical');\n }\n\n } else {\n // Fallback browsers: JavaScript positioning with boundary detection\n let left = isRtl ? triggerRect.right - popoverWidth : triggerRect.left;\n let top = triggerRect.bottom + 8;\n let transformOrigin = isRtl ? 'top right' : 'top left';\n\n // Apply horizontal flipping if needed\n if (wouldOverflowInlineEnd) {\n const actualPopoverWidth = this.popoverEl.getBoundingClientRect().width || popoverWidth;\n left = isRtl ? triggerRect.left : triggerRect.right - actualPopoverWidth;\n transformOrigin = isRtl ? 'top left' : 'top right';\n }\n\n // Apply vertical flipping if needed\n if (wouldOverflowBottom) {\n top = triggerRect.top - popoverHeight - 8;\n transformOrigin = transformOrigin.replace('top', 'bottom');\n }\n\n // Apply positioning in single DOM write for performance\n this.popoverEl.style.cssText = `\n position: fixed;\n left: ${left}px;\n top: ${top}px;\n z-index: var(--pine-z-index-overlay);\n transform-origin: ${transformOrigin};\n `;\n }\n }\n\n /**\n * Opens the filter popover programmatically.\n * Note: Clear variant does not support popover functionality.\n */\n @Method()\n async showFilter() {\n if (this.variant === 'clear') {\n console.warn('Clear variant does not support showFilter method');\n return;\n }\n\n if (this.popoverEl != null) {\n try {\n this.popoverEl.showPopover();\n } catch (error) {\n // Fallback for testing environment where showPopover is not available\n this.popoverEl.style.display = 'block';\n this.popoverEl.classList.add('is-open');\n }\n }\n }\n\n /**\n * Closes the filter popover programmatically.\n * Note: Clear variant does not support popover functionality.\n */\n @Method()\n async hideFilter() {\n if (this.variant === 'clear') {\n console.warn('Clear variant does not support hideFilter method');\n return;\n }\n\n if (this.popoverEl != null) {\n try {\n this.popoverEl.hidePopover();\n } catch (error) {\n // Fallback for testing environment where hidePopover is not available\n this.popoverEl.style.display = 'none';\n this.popoverEl.classList.remove('is-open');\n }\n }\n }\n\n /**\n * Listen for popover toggle events for browsers without native Popover API (fallback).\n * Native API browsers use direct element listeners to avoid conflicts.\n */\n @Listen('toggle', { target: 'document' })\n handlePopoverToggle(event: Event) {\n const target = event.target as HTMLElement;\n const supportsPopoverAPI = HTMLElement.prototype.showPopover && !navigator.userAgent.includes('Firefox');\n\n // Only handle events for fallback browsers (Firefox) to avoid duplicate handling\n if (!supportsPopoverAPI && target && target.id === `${this.componentId}-popover`) {\n // Check for popover API support to avoid crashes\n let isCurrentlyOpen = false;\n try {\n isCurrentlyOpen = target.matches(':popover-open');\n } catch (error) {\n // Fallback if :popover-open selector isn't supported\n isCurrentlyOpen = target.style.display === 'block';\n }\n\n // Update state\n this.isOpen = isCurrentlyOpen;\n\n if (this.isOpen) {\n setTimeout(() => this.adjustPopoverPosition(), 0);\n\n this.pdsFilterOpen.emit({\n componentId: this.componentId,\n variant: this.variant,\n text: this.text,\n });\n } else {\n this.pdsFilterClose.emit({\n componentId: this.componentId,\n variant: this.variant,\n text: this.text,\n });\n }\n }\n }\n\n /**\n * Listen for clicks to detect outside dismissal.\n */\n @Listen('click', { target: 'document' })\n handleDocumentClick(event: Event) {\n // Check if click is outside and popover gets closed\n if (!this.el.contains(event.target as Node) && this.isOpen && this.variant !== 'clear') {\n setTimeout(() => {\n if (this.popoverEl && this.isOpen) {\n // Check for popover API support to avoid crashes\n const supportsPopoverAPI = HTMLElement.prototype.showPopover && !navigator.userAgent.includes('Firefox');\n\n let popoverIsClosed = false;\n if (supportsPopoverAPI) {\n try {\n popoverIsClosed = !this.popoverEl.matches(':popover-open');\n } catch (error) {\n // Fallback if :popover-open selector isn't supported\n popoverIsClosed = this.popoverEl.style.display !== 'block';\n }\n } else {\n // Manual fallback - assume popover was closed by outside click\n popoverIsClosed = true;\n }\n\n if (popoverIsClosed) {\n this.isOpen = false;\n if (!supportsPopoverAPI) {\n this.popoverEl.style.display = 'none';\n this.popoverEl.classList.remove('is-open');\n }\n this.pdsFilterClose.emit({\n componentId: this.componentId,\n variant: this.variant,\n text: this.text,\n });\n }\n }\n }, 0);\n }\n }\n\n /**\n * Listen for Escape key to ensure close event fires.\n */\n @Listen('keydown', { target: 'document' })\n handleEscapeKey(event: KeyboardEvent) {\n if (event.key === 'Escape' && this.isOpen && this.variant !== 'clear') {\n // Check if popover was closed by Escape\n setTimeout(() => {\n if (this.popoverEl && this.isOpen) {\n // Check for popover API support to avoid crashes\n const supportsPopoverAPI = HTMLElement.prototype.showPopover && !navigator.userAgent.includes('Firefox');\n\n let popoverIsClosed = false;\n if (supportsPopoverAPI) {\n try {\n popoverIsClosed = !this.popoverEl.matches(':popover-open');\n } catch (error) {\n // Fallback if :popover-open selector isn't supported\n popoverIsClosed = this.popoverEl.style.display !== 'block';\n }\n } else {\n // Manual fallback - assume popover was closed by Escape\n popoverIsClosed = true;\n }\n\n if (popoverIsClosed) {\n this.isOpen = false;\n if (!supportsPopoverAPI) {\n this.popoverEl.style.display = 'none';\n this.popoverEl.classList.remove('is-open');\n }\n this.pdsFilterClose.emit({\n componentId: this.componentId,\n variant: this.variant,\n text: this.text,\n });\n }\n }\n }, 0);\n }\n }\n\n /**\n * Handle keyboard interactions for clear variant only.\n */\n private handleKeyDown = (event: KeyboardEvent) => {\n // Only handle clear variant manually, let native API handle everything else\n if (this.variant === 'clear' && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n this.handleClick();\n }\n };\n\n /**\n * Handle trigger button click. Clear variant emits event, others toggle popover.\n */\n private handleClick = (event?: Event) => {\n if (this.variant === 'clear') {\n this.pdsFilterClear.emit({\n componentId: this.componentId,\n text: this.text,\n });\n return;\n }\n\n this.closeOtherPopovers();\n\n // Check for popover API support\n const supportsPopoverAPI = HTMLElement.prototype.showPopover && !navigator.userAgent.includes('Firefox');\n\n if (!supportsPopoverAPI) {\n // Manual fallback for browsers without popover API support\n // Prevent default to avoid conflicts with any native behavior\n if (event) {\n event.preventDefault();\n }\n\n setTimeout(() => {\n if (this.popoverEl != null) {\n this.isOpen = !this.isOpen;\n if (this.isOpen) {\n this.popoverEl.style.display = 'block';\n this.popoverEl.classList.add('is-open');\n this.adjustPopoverPosition();\n this.pdsFilterOpen.emit({\n componentId: this.componentId,\n variant: this.variant,\n text: this.text,\n });\n } else {\n this.popoverEl.style.display = 'none';\n this.popoverEl.classList.remove('is-open');\n this.pdsFilterClose.emit({\n componentId: this.componentId,\n variant: this.variant,\n text: this.text,\n });\n }\n }\n }, 0);\n }\n // For browsers with native popover API, let the native behavior handle the toggle\n // The toggle event listener will capture the state change and emit events\n };\n\n /**\n * Get the appropriate icon for the variant.\n */\n private getIcon() {\n if (this.variant === 'clear') {\n return trash;\n }\n return this.icon;\n }\n\n /**\n * Get CSS classes for the trigger button.\n */\n private getTriggerClasses() {\n const classes = ['pds-filter__trigger'];\n classes.push(`pds-filter__trigger--${this.variant}`);\n\n if (this.isOpen && this.variant !== 'clear') {\n classes.push('pds-filter__trigger--open');\n }\n\n return classes.join(' ');\n }\n\n /**\n * Render the trigger icon.\n */\n private renderIcon() {\n const iconToRender = this.getIcon();\n if (iconToRender == null || iconToRender === '') return null;\n\n return (\n <pds-icon\n icon={iconToRender}\n size=\"var(--pine-font-size-100)\"\n aria-hidden=\"true\"\n part=\"icon\"\n />\n );\n }\n\n /**\n * Render the dropdown icon for selected variant.\n */\n private renderDropdownIcon() {\n if (this.variant === 'selected') {\n return (\n <pds-icon\n icon={enlarge}\n size=\"var(--pine-dimension-200)\"\n aria-hidden=\"true\"\n class=\"pds-filter__dropdown-icon\"\n part=\"icon\"\n />\n );\n }\n return null;\n }\n\n render() {\n return (\n <Host id={this.componentId}>\n <button\n class={this.getTriggerClasses()}\n type=\"button\"\n popoverTarget={this.variant !== 'clear' ? `${this.componentId}-popover` : undefined}\n popoverTargetAction={this.variant !== 'clear' ? 'toggle' : undefined}\n onKeyDown={this.variant === 'clear' ? this.handleKeyDown : undefined}\n onClick={(event) => this.handleClick(event)}\n part=\"button\"\n aria-expanded={this.isOpen ? 'true' : 'false'}\n aria-haspopup={this.variant !== 'clear' ? 'true' : undefined}\n aria-controls={this.variant !== 'clear' ? `${this.componentId}-popover` : undefined}\n >\n <span class=\"pds-filter__button-content\" part=\"button-content\">\n {this.renderIcon()}\n {this.text && (\n <span class=\"pds-filter__button-text\" part=\"button-text\">\n {this.text}\n </span>\n )}\n {this.renderDropdownIcon()}\n </span>\n </button>\n\n {this.variant !== 'clear' && (\n <div\n ref={el => this.popoverEl = el}\n id={`${this.componentId}-popover`}\n class=\"pds-filter__popover\"\n popover=\"auto\"\n part=\"popover\"\n >\n <slot />\n </div>\n )}\n </Host>\n );\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-BwqSEhik.system.js","sources":["src/components/pds-popover/pds-popover.scss?tag=pds-popover&encapsulation=shadow","src/components/pds-popover/pds-popover.tsx"],"sourcesContent":[":host {\n --sizing-max-width-default: 352px;\n\n display: inline-block;\n\n // Trigger wrapper for slotted content\n .pds-popover__trigger-wrapper {\n display: inline-block;\n }\n\n // Content slot wrapper is hidden (content is rendered in portal)\n .pds-popover__content-slot-wrapper {\n display: none;\n }\n}\n","import { Component, Element, Event, EventEmitter, Host, h, Method, Prop, State } from '@stencil/core';\nimport { PlacementType } from '@utils/types';\nimport { PdsPopoverEventDetail } from './popover-interface';\n\n/**\n * @slot trigger - The trigger element for the popover\n * @slot (default) - The content to display inside the popover\n */\n@Component({\n tag: 'pds-popover',\n styleUrl: 'pds-popover.scss',\n shadow: true,\n})\nexport class PdsPopover {\n /**\n * Reference to the Host element\n */\n @Element() el: HTMLPdsPopoverElement;\n\n /**\n * Determines when the popover is active\n * @defaultValue false\n */\n @State() active = false;\n\n /**\n * Tracks if the component is still mounted to prevent memory leaks\n */\n private isComponentMounted = true;\n\n /**\n * Reference to the trigger element\n */\n private triggerEl: HTMLElement | null = null;\n\n /**\n * Portal element rendered in document.body\n */\n private portalEl: HTMLElement | null = null;\n\n /**\n * Guard to prevent repositioning loops\n */\n private isRepositioning = false;\n\n /**\n * Debounce timers for performance optimization\n */\n private scrollDebounceTimer: ReturnType<typeof setTimeout> | null = null;\n private resizeDebounceTimer: ReturnType<typeof setTimeout> | null = null;\n\n /**\n * Track moved nodes and their placeholders for restoration\n */\n private movedNodes: Array<{ node: Node; placeholder: Comment }> = [];\n\n /**\n * Timestamp when popover was opened (for preventing immediate close)\n */\n private openTimestamp = 0;\n\n /**\n * Instance counter for unique IDs\n */\n private static instanceCounter = 0;\n\n /**\n * Bound handlers for cleanup\n */\n private boundClickOutsideHandler: (event: MouseEvent) => void;\n private boundEscapeKeyHandler: (event: KeyboardEvent) => void;\n private boundScrollHandler: () => void;\n private boundResizeHandler: () => void;\n\n /**\n * Emitted when the popover is opened\n */\n @Event() pdsPopoverOpen: EventEmitter<PdsPopoverEventDetail>;\n\n /**\n * Emitted when the popover is closed\n */\n @Event() pdsPopoverClose: EventEmitter<PdsPopoverEventDetail>;\n\n /**\n * Determines the action that triggers the popover. For manual popovers, the consumer is responsible for toggling this value.\n * @defaultValue \"show\"\n */\n @Prop() popoverTargetAction: 'show' | 'toggle' | 'hide' = 'show';\n\n /**\n * Determines the type of popover. Auto popovers can be \"light dismissed\" by clicking outside of the popover.\n * Manual popovers require the consumer to handle the visibility of the popover.\n */\n @Prop() popoverType: 'auto' | 'manual' = 'auto';\n\n /**\n * A unique identifier used for the underlying component `id` attribute.\n */\n @Prop() componentId: string;\n\n /**\n * Sets the maximum width of the popover content\n * @defaultValue 352\n */\n @Prop() maxWidth?: number = 352;\n\n /**\n * Determines the preferred position of the popover\n * @defaultValue \"right\"\n */\n @Prop({ reflect: true }) placement: PlacementType = 'right';\n\n componentDidLoad() {\n // Bind event handlers for cleanup\n this.boundClickOutsideHandler = this.handleClickOutside.bind(this);\n this.boundEscapeKeyHandler = this.handleEscapeKey.bind(this);\n this.boundScrollHandler = this.handleScroll.bind(this);\n this.boundResizeHandler = this.handleResize.bind(this);\n\n // Create portal element\n this.createPortal();\n\n // Initialize trigger element by calling slot change handler\n // This is a fallback for environments where slot change might not fire reliably\n const triggerSlot = this.el.shadowRoot?.querySelector('slot[name=\"trigger\"]') as HTMLSlotElement;\n if (triggerSlot && this.triggerEl == null) {\n const CustomEvent = (typeof window !== 'undefined' ? window.Event : global.Event) as any;\n const slotChangeEvent = new CustomEvent('slotchange');\n Object.defineProperty(slotChangeEvent, 'target', { value: triggerSlot, enumerable: true });\n this.handleTriggerSlotChange(slotChangeEvent);\n }\n }\n\n /**\n * Handles changes to the trigger slot\n */\n private handleTriggerSlotChange = (event: Event) => {\n const slot = event.target as HTMLSlotElement;\n const assignedElements = slot.assignedElements();\n\n // Clean up previous trigger's event listener if it exists\n if (this.triggerEl != null) {\n this.triggerEl.removeEventListener('click', this.handleTriggerClick);\n }\n\n if (assignedElements.length > 0) {\n // Use the first assigned element as the trigger\n this.triggerEl = assignedElements[0] as HTMLElement;\n\n // Set ARIA attributes to establish relationship between trigger and popover\n // This mirrors the native Popover API's accessibility behavior\n if (this.portalEl) {\n this.triggerEl.setAttribute('aria-expanded', String(this.active));\n this.triggerEl.setAttribute('aria-controls', this.portalEl.id);\n }\n\n // Attach click listener to handle popover visibility\n this.triggerEl.addEventListener('click', this.handleTriggerClick);\n } else {\n this.triggerEl = null;\n }\n };\n\n /**\n * Handles changes to the default slot (popover content)\n * When the popover is active, re-sync content with portal to handle dynamic updates\n */\n private handleContentSlotChange = () => {\n if (!this.active) return;\n this.updatePortalContent();\n };\n\n /**\n * Handles clicks on the trigger element\n */\n private handleTriggerClick = (event: Event) => {\n // Only prevent default if the trigger is not an anchor with href\n // This allows link navigation while still controlling popover visibility\n const composedPath = event.composedPath();\n const anchorWithHref = composedPath.find(\n (el) => el instanceof HTMLAnchorElement && (el as HTMLAnchorElement).href\n );\n\n if (!anchorWithHref) {\n event.preventDefault();\n }\n\n // Execute the appropriate action based on popoverTargetAction prop\n switch (this.popoverTargetAction) {\n case 'show':\n this.show();\n break;\n case 'hide':\n this.hide();\n break;\n case 'toggle':\n default:\n this.toggle();\n break;\n }\n };\n\n disconnectedCallback() {\n this.isComponentMounted = false;\n\n // Clean up trigger click event listener\n if (this.triggerEl != null) {\n this.triggerEl.removeEventListener('click', this.handleTriggerClick);\n }\n\n // Clean up all event listeners\n this.removeLightDismissListeners();\n this.removeScrollAndResizeListeners();\n\n // Clear any pending debounce timers\n this.clearDebounceTimers();\n\n // Remove portal from DOM\n this.removePortal();\n }\n\n /**\n * Clears any pending debounce timers\n */\n private clearDebounceTimers() {\n if (this.scrollDebounceTimer !== null) {\n clearTimeout(this.scrollDebounceTimer);\n this.scrollDebounceTimer = null;\n }\n if (this.resizeDebounceTimer !== null) {\n clearTimeout(this.resizeDebounceTimer);\n this.resizeDebounceTimer = null;\n }\n }\n\n private createPortal() {\n if (this.portalEl !== null) return;\n\n this.portalEl = document.createElement('div');\n this.portalEl.className = 'pds-popover';\n\n // Apply all styles inline since portal is outside shadow DOM\n this.portalEl.style.position = 'fixed';\n this.portalEl.style.zIndex = 'var(--pine-z-index-raised)';\n this.portalEl.style.maxWidth = `${this.maxWidth}px`;\n this.portalEl.style.display = 'none';\n this.portalEl.style.opacity = '0';\n this.portalEl.style.visibility = 'hidden';\n this.portalEl.style.backgroundColor = 'var(--pine-color-background-container)';\n this.portalEl.style.borderRadius = 'var(--pine-dimension-125)';\n this.portalEl.style.boxShadow = 'var(--pine-box-shadow-200)';\n this.portalEl.style.margin = 'var(--pine-dimension-none)';\n this.portalEl.style.padding = 'var(--pine-dimension-md)';\n\n // Generate unique ID\n if (!this.componentId) {\n const suffix = PdsPopover.instanceCounter++;\n this.portalEl.id = `pds-popover-portal-${suffix}`;\n } else {\n this.portalEl.id = `${this.componentId}-portal`;\n }\n\n // Add accessibility attributes for screen readers\n // Note: Native Popover API doesn't add a specific role, keeping semantic HTML\n this.portalEl.setAttribute('aria-modal', 'false'); // Not a modal, can interact with rest of page\n\n // Append to body\n document.body.appendChild(this.portalEl);\n\n // Add global focus styles to match Pine design system\n // This is done after appending to ensure it's part of the document and can access CSS variables\n this.addPortalFocusStyles();\n }\n\n /**\n * Adds Pine design system focus styles and dark mode border to the portal element\n * Uses CSS variables from Pine's design tokens\n */\n private addPortalFocusStyles() {\n if (!this.portalEl) return;\n\n const portalId = this.portalEl.id;\n\n // Check if style element already exists\n const existingStyle = document.querySelector(`style[data-pds-popover-focus=\"${portalId}\"]`);\n if (existingStyle) return;\n\n // Create style element with Pine's focus ring styles and dark mode border\n const styleEl = document.createElement('style');\n styleEl.setAttribute('data-pds-popover-focus', portalId);\n styleEl.textContent = `\n #${portalId}:focus {\n outline: var(--pine-outline-focus, 2px solid var(--pine-color-focus-ring, #6366f1)) !important;\n outline-offset: var(--pine-border-width, 1px);\n }\n #${portalId}:focus:not(:focus-visible) {\n outline: none;\n }\n [data-theme=\"dark\"] #${portalId} {\n border: var(--pine-border);\n }\n `;\n\n document.head.appendChild(styleEl);\n }\n\n /**\n * Moves slot content into portal (preserves event handlers and component instances)\n */\n private updatePortalContent() {\n if (!this.portalEl) return;\n\n const contentSlotWrapper = this.el.shadowRoot?.querySelector('.pds-popover__content-slot-wrapper');\n const defaultSlot = contentSlotWrapper?.querySelector('slot');\n\n if (defaultSlot) {\n const assignedNodes = defaultSlot.assignedNodes();\n\n // Move each node into portal and track with placeholder for restoration\n assignedNodes.forEach(node => {\n // Skip if node is already in the portal or already tracked\n const isAlreadyInPortal = node.parentNode === this.portalEl;\n const isAlreadyTracked = this.movedNodes.some(moved => moved.node === node);\n\n if (isAlreadyInPortal || isAlreadyTracked) {\n return;\n }\n\n // Create a placeholder comment to mark original position\n const placeholder = document.createComment('pds-popover-placeholder');\n\n // Insert placeholder before moving the node\n node.parentNode?.insertBefore(placeholder, node);\n\n // Move the actual node to portal (preserves all handlers and state)\n this.portalEl!.appendChild(node);\n\n // Track for restoration\n this.movedNodes.push({ node, placeholder });\n });\n }\n }\n\n /**\n * Restores moved nodes back to their original positions\n */\n private restorePortalContent() {\n // Restore each moved node to its original position\n this.movedNodes.forEach(({ node, placeholder }) => {\n if (placeholder.parentNode) {\n placeholder.parentNode.insertBefore(node, placeholder);\n placeholder.parentNode.removeChild(placeholder);\n }\n });\n\n // Clear tracking array\n this.movedNodes = [];\n }\n\n private removePortal() {\n if (this.portalEl) {\n // Remove the portal element from DOM\n if (this.portalEl.parentNode) {\n this.portalEl.parentNode.removeChild(this.portalEl);\n }\n\n // Remove the associated focus style element\n const portalId = this.portalEl.id;\n const styleEl = document.querySelector(`style[data-pds-popover-focus=\"${portalId}\"]`);\n if (styleEl && styleEl.parentNode) {\n styleEl.parentNode.removeChild(styleEl);\n }\n }\n this.portalEl = null;\n }\n\n /**\n * Opens the popover programmatically\n */\n @Method()\n async show() {\n if (this.active || !this.portalEl) return;\n\n this.active = true;\n\n // Record open timestamp to prevent immediate close from opening click\n this.openTimestamp = Date.now();\n\n // Update ARIA expanded state on trigger\n if (this.triggerEl) {\n this.triggerEl.setAttribute('aria-expanded', 'true');\n }\n\n // Update portal content with latest slot content\n this.updatePortalContent();\n\n // Show portal\n this.portalEl.style.display = 'block';\n this.portalEl.style.opacity = '1';\n this.portalEl.style.visibility = 'visible';\n\n // Position the popover\n requestAnimationFrame(() => {\n if (!this.isComponentMounted) return;\n this.handlePopoverPositioning();\n });\n\n // Add scroll and resize listeners for repositioning (always)\n this.addScrollAndResizeListeners();\n\n // Add document listeners for light dismiss and escape key (auto type only)\n if (this.popoverType === 'auto') {\n this.addLightDismissListeners();\n }\n\n // Emit open event\n this.pdsPopoverOpen.emit({\n componentId: this.componentId,\n popoverType: this.popoverType,\n });\n }\n\n /**\n * Closes the popover programmatically\n */\n @Method()\n async hide() {\n if (!this.active || !this.portalEl) return;\n\n this.active = false;\n\n // Update ARIA expanded state on trigger\n if (this.triggerEl) {\n this.triggerEl.setAttribute('aria-expanded', 'false');\n }\n\n // Restore content back to original slot positions\n this.restorePortalContent();\n\n // Hide portal\n this.portalEl.style.display = 'none';\n this.portalEl.style.opacity = '0';\n this.portalEl.style.visibility = 'hidden';\n\n // Return focus to trigger for keyboard accessibility\n // This mirrors native Popover API behavior on close\n this.returnFocusToTrigger();\n\n // Remove all listeners\n this.removeLightDismissListeners();\n this.removeScrollAndResizeListeners();\n\n // Clear any pending timers\n this.clearDebounceTimers();\n\n // Emit close event\n this.pdsPopoverClose.emit({\n componentId: this.componentId,\n popoverType: this.popoverType,\n });\n }\n\n /**\n * Toggles the popover open/closed state programmatically\n */\n @Method()\n async toggle() {\n if (this.active) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n /**\n * Adds light dismiss listeners (click outside and escape key)\n */\n private addLightDismissListeners() {\n // Add listeners immediately - handleClickOutside will check timestamp\n document.addEventListener('click', this.boundClickOutsideHandler, true);\n document.addEventListener('keydown', this.boundEscapeKeyHandler);\n }\n\n /**\n * Removes light dismiss listeners\n */\n private removeLightDismissListeners() {\n document.removeEventListener('click', this.boundClickOutsideHandler, true);\n document.removeEventListener('keydown', this.boundEscapeKeyHandler);\n }\n\n /**\n * Adds scroll and resize listeners for repositioning\n */\n private addScrollAndResizeListeners() {\n window.addEventListener('scroll', this.boundScrollHandler, true);\n window.addEventListener('resize', this.boundResizeHandler);\n }\n\n /**\n * Removes scroll and resize listeners\n */\n private removeScrollAndResizeListeners() {\n window.removeEventListener('scroll', this.boundScrollHandler, true);\n window.removeEventListener('resize', this.boundResizeHandler);\n }\n\n /**\n * Handles clicks outside the popover for light dismiss (auto type only)\n */\n private handleClickOutside(event: MouseEvent) {\n // Ignore events that occurred at or before the popover opened\n // This prevents the opening click from immediately closing the popover\n // Convert event.timeStamp (DOMHighResTimeStamp from performance.now()) to epoch time\n // by calculating: currentEpochTime - (currentPerfTime - eventPerfTime)\n const eventTime = event.timeStamp\n ? Date.now() - (performance.now() - event.timeStamp)\n : Date.now();\n\n if (eventTime <= this.openTimestamp) {\n return;\n }\n\n const target = event.target as Node;\n\n // Check if click is outside both the popover portal and the trigger\n const clickedInsidePopover = this.portalEl?.contains(target);\n const clickedInsideTrigger = this.triggerEl?.contains(target);\n\n if (!clickedInsidePopover && !clickedInsideTrigger) {\n this.hide();\n }\n }\n\n /**\n * Returns focus to the trigger element with visible focus indicator\n * This ensures focus rings/outlines are shown as they would be with keyboard navigation\n */\n private returnFocusToTrigger() {\n if (!this.triggerEl) return;\n\n // Focus immediately while still in keyboard event context\n // This ensures the browser treats it as keyboard-initiated and shows focus ring\n this.triggerEl.focus({ preventScroll: true });\n }\n\n /**\n * Handles escape key press to close the popover\n * Mirrors native Popover API: Escape closes and returns focus to trigger\n */\n private handleEscapeKey(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n // Prevent default Escape behavior and stop propagation\n // This mirrors native Popover API which handles Escape exclusively\n event.preventDefault();\n event.stopPropagation();\n\n // Close popover and return focus to trigger\n this.hide();\n }\n }\n\n /**\n * Handles scroll events to reposition the popover (debounced for performance)\n */\n private handleScroll() {\n if (!this.active) return;\n\n if (this.scrollDebounceTimer !== null) {\n clearTimeout(this.scrollDebounceTimer);\n }\n\n this.scrollDebounceTimer = setTimeout(() => {\n this.handlePopoverPositioning();\n this.scrollDebounceTimer = null;\n }, 10); // 10ms debounce for smooth repositioning\n }\n\n /**\n * Handles resize events to reposition the popover (debounced for performance)\n */\n private handleResize() {\n if (!this.active) return;\n\n if (this.resizeDebounceTimer !== null) {\n clearTimeout(this.resizeDebounceTimer);\n }\n\n this.resizeDebounceTimer = setTimeout(() => {\n this.handlePopoverPositioning();\n this.resizeDebounceTimer = null;\n }, 100); // 100ms debounce for resize\n }\n\n /**\n * Positions the popover relative to its trigger element\n */\n private handlePopoverPositioning() {\n // Prevent repositioning loops\n if (this.isRepositioning) {\n return;\n }\n\n this.isRepositioning = true;\n\n if (this.triggerEl == null || this.portalEl == null) {\n this.isRepositioning = false;\n return;\n }\n\n const triggerRect = this.triggerEl.getBoundingClientRect();\n const popoverRect = this.portalEl.getBoundingClientRect();\n\n // Safety check: ensure trigger has valid dimensions (is rendered and visible)\n if (triggerRect.width === 0 || triggerRect.height === 0) {\n this.isRepositioning = false;\n return;\n }\n\n let top = 0;\n let left = 0;\n const offset = 8;\n\n switch (this.placement) {\n case 'top':\n top = triggerRect.top - popoverRect.height - offset;\n left = triggerRect.left + (triggerRect.width - popoverRect.width) / 2;\n break;\n case 'top-start':\n top = triggerRect.top - popoverRect.height - offset;\n left = triggerRect.left;\n break;\n case 'top-end':\n top = triggerRect.top - popoverRect.height - offset;\n left = triggerRect.right - popoverRect.width;\n break;\n case 'right':\n top = triggerRect.top + (triggerRect.height - popoverRect.height) / 2;\n left = triggerRect.right + offset;\n break;\n case 'right-start':\n top = triggerRect.top;\n left = triggerRect.right + offset;\n break;\n case 'right-end':\n top = triggerRect.bottom - popoverRect.height;\n left = triggerRect.right + offset;\n break;\n case 'bottom':\n top = triggerRect.bottom + offset;\n left = triggerRect.left + (triggerRect.width - popoverRect.width) / 2;\n break;\n case 'bottom-start':\n top = triggerRect.bottom + offset;\n left = triggerRect.left;\n break;\n case 'bottom-end':\n top = triggerRect.bottom + offset;\n left = triggerRect.right - popoverRect.width;\n break;\n case 'left':\n top = triggerRect.top + (triggerRect.height - popoverRect.height) / 2;\n left = triggerRect.left - popoverRect.width - offset;\n break;\n case 'left-start':\n top = triggerRect.top;\n left = triggerRect.left - popoverRect.width - offset;\n break;\n case 'left-end':\n top = triggerRect.bottom - popoverRect.height;\n left = triggerRect.left - popoverRect.width - offset;\n break;\n }\n\n this.portalEl.style.top = `${top}px`;\n this.portalEl.style.left = `${left}px`;\n\n // Reset the repositioning guard after a short delay\n setTimeout(() => {\n this.isRepositioning = false;\n }, 16); // ~1 frame at 60fps\n }\n\n render() {\n return (\n <Host id={this.componentId}>\n <span class=\"pds-popover__trigger-wrapper\">\n <slot name=\"trigger\" onSlotchange={this.handleTriggerSlotChange}></slot>\n </span>\n\n <div class=\"pds-popover__content-slot-wrapper\">\n <slot onSlotchange={this.handleContentSlotChange}></slot>\n </div>\n </Host>\n );\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"p-CZSA3A1S.system.js","sources":["src/components/pds-popover/pds-popover.scss?tag=pds-popover&encapsulation=shadow","src/components/pds-popover/pds-popover.tsx"],"sourcesContent":[":host {\n --sizing-max-width-default: 352px;\n\n display: inline-block;\n\n // Trigger wrapper for slotted content\n .pds-popover__trigger-wrapper {\n display: inline-block;\n }\n\n // Content slot wrapper is hidden (content is rendered in portal)\n .pds-popover__content-slot-wrapper {\n display: none;\n }\n}\n","import { Component, Element, Event, EventEmitter, Host, h, Method, Prop, State } from '@stencil/core';\nimport { PlacementType } from '@utils/types';\nimport { PdsPopoverEventDetail } from './popover-interface';\n\n/**\n * @slot trigger - The trigger element for the popover\n * @slot (default) - The content to display inside the popover\n */\n@Component({\n tag: 'pds-popover',\n styleUrl: 'pds-popover.scss',\n shadow: true,\n})\nexport class PdsPopover {\n /**\n * Reference to the Host element\n */\n @Element() el: HTMLPdsPopoverElement;\n\n /**\n * Determines when the popover is active\n * @defaultValue false\n */\n @State() active = false;\n\n /**\n * Tracks if the component is still mounted to prevent memory leaks\n */\n private isComponentMounted = true;\n\n /**\n * Reference to the trigger element\n */\n private triggerEl: HTMLElement | null = null;\n\n /**\n * Portal element rendered in document.body\n */\n private portalEl: HTMLElement | null = null;\n\n /**\n * Guard to prevent repositioning loops\n */\n private isRepositioning = false;\n\n /**\n * Debounce timers for performance optimization\n */\n private scrollDebounceTimer: ReturnType<typeof setTimeout> | null = null;\n private resizeDebounceTimer: ReturnType<typeof setTimeout> | null = null;\n\n /**\n * Track moved nodes and their placeholders for restoration\n */\n private movedNodes: Array<{ node: Node; placeholder: Comment }> = [];\n\n /**\n * Timestamp when popover was opened (for preventing immediate close)\n */\n private openTimestamp = 0;\n\n /**\n * Instance counter for unique IDs\n */\n private static instanceCounter = 0;\n\n /**\n * Bound handlers for cleanup\n */\n private boundClickOutsideHandler: (event: MouseEvent) => void;\n private boundEscapeKeyHandler: (event: KeyboardEvent) => void;\n private boundScrollHandler: () => void;\n private boundResizeHandler: () => void;\n\n /**\n * Emitted when the popover is opened\n */\n @Event() pdsPopoverOpen: EventEmitter<PdsPopoverEventDetail>;\n\n /**\n * Emitted when the popover is closed\n */\n @Event() pdsPopoverClose: EventEmitter<PdsPopoverEventDetail>;\n\n /**\n * Determines the action that triggers the popover. For manual popovers, the consumer is responsible for toggling this value.\n * @defaultValue \"show\"\n */\n @Prop() popoverTargetAction: 'show' | 'toggle' | 'hide' = 'show';\n\n /**\n * Determines the type of popover. Auto popovers can be \"light dismissed\" by clicking outside of the popover.\n * Manual popovers require the consumer to handle the visibility of the popover.\n */\n @Prop() popoverType: 'auto' | 'manual' = 'auto';\n\n /**\n * A unique identifier used for the underlying component `id` attribute.\n */\n @Prop() componentId: string;\n\n /**\n * Sets the maximum width of the popover content\n * @defaultValue 352\n */\n @Prop() maxWidth?: number = 352;\n\n /**\n * Determines the preferred position of the popover\n * @defaultValue \"right\"\n */\n @Prop({ reflect: true }) placement: PlacementType = 'right';\n\n componentDidLoad() {\n // Bind event handlers for cleanup\n this.boundClickOutsideHandler = this.handleClickOutside.bind(this);\n this.boundEscapeKeyHandler = this.handleEscapeKey.bind(this);\n this.boundScrollHandler = this.handleScroll.bind(this);\n this.boundResizeHandler = this.handleResize.bind(this);\n\n // Create portal element\n this.createPortal();\n\n // Initialize trigger element by calling slot change handler\n // This is a fallback for environments where slot change might not fire reliably\n const triggerSlot = this.el.shadowRoot?.querySelector('slot[name=\"trigger\"]') as HTMLSlotElement;\n if (triggerSlot && this.triggerEl == null) {\n const CustomEvent = (typeof window !== 'undefined' ? window.Event : global.Event) as any;\n const slotChangeEvent = new CustomEvent('slotchange');\n Object.defineProperty(slotChangeEvent, 'target', { value: triggerSlot, enumerable: true });\n this.handleTriggerSlotChange(slotChangeEvent);\n }\n }\n\n /**\n * Handles changes to the trigger slot\n */\n private handleTriggerSlotChange = (event: Event) => {\n const slot = event.target as HTMLSlotElement;\n const assignedElements = slot.assignedElements();\n\n // Clean up previous trigger's event listener if it exists\n if (this.triggerEl != null) {\n this.triggerEl.removeEventListener('click', this.handleTriggerClick);\n }\n\n if (assignedElements.length > 0) {\n // Use the first assigned element as the trigger\n this.triggerEl = assignedElements[0] as HTMLElement;\n\n // Set ARIA attributes to establish relationship between trigger and popover\n // This mirrors the native Popover API's accessibility behavior\n if (this.portalEl) {\n this.triggerEl.setAttribute('aria-expanded', String(this.active));\n this.triggerEl.setAttribute('aria-controls', this.portalEl.id);\n }\n\n // Attach click listener to handle popover visibility\n this.triggerEl.addEventListener('click', this.handleTriggerClick);\n } else {\n this.triggerEl = null;\n }\n };\n\n /**\n * Handles changes to the default slot (popover content)\n * When the popover is active, re-sync content with portal to handle dynamic updates\n */\n private handleContentSlotChange = () => {\n if (!this.active) return;\n this.updatePortalContent();\n };\n\n /**\n * Handles clicks on the trigger element\n */\n private handleTriggerClick = (event: Event) => {\n // Only prevent default if the trigger is not an anchor with href\n // This allows link navigation while still controlling popover visibility\n const composedPath = event.composedPath();\n const anchorWithHref = composedPath.find(\n (el) => el instanceof HTMLAnchorElement && (el as HTMLAnchorElement).href\n );\n\n if (!anchorWithHref) {\n event.preventDefault();\n }\n\n // Execute the appropriate action based on popoverTargetAction prop\n switch (this.popoverTargetAction) {\n case 'show':\n this.show();\n break;\n case 'hide':\n this.hide();\n break;\n case 'toggle':\n default:\n this.toggle();\n break;\n }\n };\n\n disconnectedCallback() {\n this.isComponentMounted = false;\n\n // Clean up trigger click event listener\n if (this.triggerEl != null) {\n this.triggerEl.removeEventListener('click', this.handleTriggerClick);\n }\n\n // Clean up all event listeners\n this.removeLightDismissListeners();\n this.removeScrollAndResizeListeners();\n\n // Clear any pending debounce timers\n this.clearDebounceTimers();\n\n // Remove portal from DOM\n this.removePortal();\n }\n\n /**\n * Clears any pending debounce timers\n */\n private clearDebounceTimers() {\n if (this.scrollDebounceTimer !== null) {\n clearTimeout(this.scrollDebounceTimer);\n this.scrollDebounceTimer = null;\n }\n if (this.resizeDebounceTimer !== null) {\n clearTimeout(this.resizeDebounceTimer);\n this.resizeDebounceTimer = null;\n }\n }\n\n private createPortal() {\n if (this.portalEl !== null) return;\n\n this.portalEl = document.createElement('div');\n this.portalEl.className = 'pds-popover';\n\n // Apply all styles inline since portal is outside shadow DOM\n this.portalEl.style.position = 'fixed';\n this.portalEl.style.zIndex = 'var(--pine-z-index-raised)';\n this.portalEl.style.maxWidth = `${this.maxWidth}px`;\n this.portalEl.style.display = 'none';\n this.portalEl.style.opacity = '0';\n this.portalEl.style.visibility = 'hidden';\n this.portalEl.style.backgroundColor = 'var(--pine-color-background-container)';\n this.portalEl.style.borderRadius = 'var(--pine-dimension-125)';\n this.portalEl.style.boxShadow = 'var(--pine-box-shadow-200)';\n this.portalEl.style.margin = 'var(--pine-dimension-none)';\n this.portalEl.style.padding = 'var(--pine-dimension-md)';\n\n // Generate unique ID\n if (!this.componentId) {\n const suffix = PdsPopover.instanceCounter++;\n this.portalEl.id = `pds-popover-portal-${suffix}`;\n } else {\n this.portalEl.id = `${this.componentId}-portal`;\n }\n\n // Add accessibility attributes for screen readers\n // Note: Native Popover API doesn't add a specific role, keeping semantic HTML\n this.portalEl.setAttribute('aria-modal', 'false'); // Not a modal, can interact with rest of page\n\n // Append to body\n document.body.appendChild(this.portalEl);\n\n // Add global focus styles to match Pine design system\n // This is done after appending to ensure it's part of the document and can access CSS variables\n this.addPortalFocusStyles();\n }\n\n /**\n * Adds Pine design system focus styles and dark mode border to the portal element\n * Uses CSS variables from Pine's design tokens\n */\n private addPortalFocusStyles() {\n if (!this.portalEl) return;\n\n const portalId = this.portalEl.id;\n\n // Check if style element already exists\n const existingStyle = document.querySelector(`style[data-pds-popover-focus=\"${portalId}\"]`);\n if (existingStyle) return;\n\n // Create style element with Pine's focus ring styles and dark mode border\n const styleEl = document.createElement('style');\n styleEl.setAttribute('data-pds-popover-focus', portalId);\n styleEl.textContent = `\n #${portalId}:focus {\n outline: var(--pine-outline-focus, 2px solid var(--pine-color-focus-ring, #6366f1)) !important;\n outline-offset: var(--pine-border-width, 1px);\n }\n #${portalId}:focus:not(:focus-visible) {\n outline: none;\n }\n [data-theme=\"dark\"] #${portalId} {\n border: var(--pine-border);\n }\n `;\n\n document.head.appendChild(styleEl);\n }\n\n /**\n * Moves slot content into portal (preserves event handlers and component instances)\n */\n private updatePortalContent() {\n if (!this.portalEl) return;\n\n const contentSlotWrapper = this.el.shadowRoot?.querySelector('.pds-popover__content-slot-wrapper');\n const defaultSlot = contentSlotWrapper?.querySelector('slot');\n\n if (defaultSlot) {\n const assignedNodes = defaultSlot.assignedNodes();\n\n // Move each node into portal and track with placeholder for restoration\n assignedNodes.forEach(node => {\n // Skip if node is already in the portal or already tracked\n const isAlreadyInPortal = node.parentNode === this.portalEl;\n const isAlreadyTracked = this.movedNodes.some(moved => moved.node === node);\n\n if (isAlreadyInPortal || isAlreadyTracked) {\n return;\n }\n\n // Create a placeholder comment to mark original position\n const placeholder = document.createComment('pds-popover-placeholder');\n\n // Insert placeholder before moving the node\n node.parentNode?.insertBefore(placeholder, node);\n\n // Move the actual node to portal (preserves all handlers and state)\n this.portalEl!.appendChild(node);\n\n // Track for restoration\n this.movedNodes.push({ node, placeholder });\n });\n }\n }\n\n /**\n * Restores moved nodes back to their original positions\n */\n private restorePortalContent() {\n // Restore each moved node to its original position\n this.movedNodes.forEach(({ node, placeholder }) => {\n if (placeholder.parentNode) {\n placeholder.parentNode.insertBefore(node, placeholder);\n placeholder.parentNode.removeChild(placeholder);\n }\n });\n\n // Clear tracking array\n this.movedNodes = [];\n }\n\n private removePortal() {\n if (this.portalEl) {\n // Remove the portal element from DOM\n if (this.portalEl.parentNode) {\n this.portalEl.parentNode.removeChild(this.portalEl);\n }\n\n // Remove the associated focus style element\n const portalId = this.portalEl.id;\n const styleEl = document.querySelector(`style[data-pds-popover-focus=\"${portalId}\"]`);\n if (styleEl && styleEl.parentNode) {\n styleEl.parentNode.removeChild(styleEl);\n }\n }\n this.portalEl = null;\n }\n\n /**\n * Opens the popover programmatically\n */\n @Method()\n async show() {\n if (this.active || !this.portalEl) return;\n\n this.active = true;\n\n // Record open timestamp to prevent immediate close from opening click\n this.openTimestamp = Date.now();\n\n // Update ARIA expanded state on trigger\n if (this.triggerEl) {\n this.triggerEl.setAttribute('aria-expanded', 'true');\n }\n\n // Update portal content with latest slot content\n this.updatePortalContent();\n\n // Show portal\n this.portalEl.style.display = 'block';\n this.portalEl.style.opacity = '1';\n this.portalEl.style.visibility = 'visible';\n\n // Position the popover\n requestAnimationFrame(() => {\n if (!this.isComponentMounted) return;\n this.handlePopoverPositioning();\n });\n\n // Add scroll and resize listeners for repositioning (always)\n this.addScrollAndResizeListeners();\n\n // Add document listeners for light dismiss and escape key (auto type only)\n if (this.popoverType === 'auto') {\n this.addLightDismissListeners();\n }\n\n // Emit open event\n this.pdsPopoverOpen.emit({\n componentId: this.componentId,\n popoverType: this.popoverType,\n });\n }\n\n /**\n * Closes the popover programmatically\n */\n @Method()\n async hide() {\n if (!this.active || !this.portalEl) return;\n\n this.active = false;\n\n // Update ARIA expanded state on trigger\n if (this.triggerEl) {\n this.triggerEl.setAttribute('aria-expanded', 'false');\n }\n\n // Restore content back to original slot positions\n this.restorePortalContent();\n\n // Hide portal\n this.portalEl.style.display = 'none';\n this.portalEl.style.opacity = '0';\n this.portalEl.style.visibility = 'hidden';\n\n // Return focus to trigger for keyboard accessibility\n // This mirrors native Popover API behavior on close\n this.returnFocusToTrigger();\n\n // Remove all listeners\n this.removeLightDismissListeners();\n this.removeScrollAndResizeListeners();\n\n // Clear any pending timers\n this.clearDebounceTimers();\n\n // Emit close event\n this.pdsPopoverClose.emit({\n componentId: this.componentId,\n popoverType: this.popoverType,\n });\n }\n\n /**\n * Toggles the popover open/closed state programmatically\n */\n @Method()\n async toggle() {\n if (this.active) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n /**\n * Adds light dismiss listeners (click outside and escape key)\n */\n private addLightDismissListeners() {\n // Add listeners immediately - handleClickOutside will check timestamp\n document.addEventListener('click', this.boundClickOutsideHandler, true);\n document.addEventListener('keydown', this.boundEscapeKeyHandler);\n }\n\n /**\n * Removes light dismiss listeners\n */\n private removeLightDismissListeners() {\n document.removeEventListener('click', this.boundClickOutsideHandler, true);\n document.removeEventListener('keydown', this.boundEscapeKeyHandler);\n }\n\n /**\n * Adds scroll and resize listeners for repositioning\n */\n private addScrollAndResizeListeners() {\n window.addEventListener('scroll', this.boundScrollHandler, true);\n window.addEventListener('resize', this.boundResizeHandler);\n }\n\n /**\n * Removes scroll and resize listeners\n */\n private removeScrollAndResizeListeners() {\n window.removeEventListener('scroll', this.boundScrollHandler, true);\n window.removeEventListener('resize', this.boundResizeHandler);\n }\n\n /**\n * Handles clicks outside the popover for light dismiss (auto type only)\n */\n private handleClickOutside(event: MouseEvent) {\n // Ignore events that occurred at or before the popover opened\n // This prevents the opening click from immediately closing the popover\n // Convert event.timeStamp (DOMHighResTimeStamp from performance.now()) to epoch time\n // by calculating: currentEpochTime - (currentPerfTime - eventPerfTime)\n const eventTime = event.timeStamp\n ? Date.now() - (performance.now() - event.timeStamp)\n : Date.now();\n\n if (eventTime <= this.openTimestamp) {\n return;\n }\n\n const target = event.target as Node;\n\n // Check if click is outside both the popover portal and the trigger\n const clickedInsidePopover = this.portalEl?.contains(target);\n const clickedInsideTrigger = this.triggerEl?.contains(target);\n\n if (!clickedInsidePopover && !clickedInsideTrigger) {\n this.hide();\n }\n }\n\n /**\n * Returns focus to the trigger element with visible focus indicator\n * This ensures focus rings/outlines are shown as they would be with keyboard navigation\n */\n private returnFocusToTrigger() {\n if (!this.triggerEl) return;\n\n // Focus immediately while still in keyboard event context\n // This ensures the browser treats it as keyboard-initiated and shows focus ring\n this.triggerEl.focus({ preventScroll: true });\n }\n\n /**\n * Handles escape key press to close the popover\n * Mirrors native Popover API: Escape closes and returns focus to trigger\n */\n private handleEscapeKey(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n // Prevent default Escape behavior and stop propagation\n // This mirrors native Popover API which handles Escape exclusively\n event.preventDefault();\n event.stopPropagation();\n\n // Close popover and return focus to trigger\n this.hide();\n }\n }\n\n /**\n * Handles scroll events to reposition the popover (debounced for performance)\n */\n private handleScroll() {\n if (!this.active) return;\n\n if (this.scrollDebounceTimer !== null) {\n clearTimeout(this.scrollDebounceTimer);\n }\n\n this.scrollDebounceTimer = setTimeout(() => {\n this.handlePopoverPositioning();\n this.scrollDebounceTimer = null;\n }, 10); // 10ms debounce for smooth repositioning\n }\n\n /**\n * Handles resize events to reposition the popover (debounced for performance)\n */\n private handleResize() {\n if (!this.active) return;\n\n if (this.resizeDebounceTimer !== null) {\n clearTimeout(this.resizeDebounceTimer);\n }\n\n this.resizeDebounceTimer = setTimeout(() => {\n this.handlePopoverPositioning();\n this.resizeDebounceTimer = null;\n }, 100); // 100ms debounce for resize\n }\n\n /**\n * Positions the popover relative to its trigger element\n */\n private handlePopoverPositioning() {\n // Prevent repositioning loops\n if (this.isRepositioning) {\n return;\n }\n\n this.isRepositioning = true;\n\n if (this.triggerEl == null || this.portalEl == null) {\n this.isRepositioning = false;\n return;\n }\n\n const triggerRect = this.triggerEl.getBoundingClientRect();\n const popoverRect = this.portalEl.getBoundingClientRect();\n\n // Safety check: ensure trigger has valid dimensions (is rendered and visible)\n if (triggerRect.width === 0 || triggerRect.height === 0) {\n this.isRepositioning = false;\n return;\n }\n\n let top = 0;\n let left = 0;\n const offset = 8;\n\n switch (this.placement) {\n case 'top':\n top = triggerRect.top - popoverRect.height - offset;\n left = triggerRect.left + (triggerRect.width - popoverRect.width) / 2;\n break;\n case 'top-start':\n top = triggerRect.top - popoverRect.height - offset;\n left = triggerRect.left;\n break;\n case 'top-end':\n top = triggerRect.top - popoverRect.height - offset;\n left = triggerRect.right - popoverRect.width;\n break;\n case 'right':\n top = triggerRect.top + (triggerRect.height - popoverRect.height) / 2;\n left = triggerRect.right + offset;\n break;\n case 'right-start':\n top = triggerRect.top;\n left = triggerRect.right + offset;\n break;\n case 'right-end':\n top = triggerRect.bottom - popoverRect.height;\n left = triggerRect.right + offset;\n break;\n case 'bottom':\n top = triggerRect.bottom + offset;\n left = triggerRect.left + (triggerRect.width - popoverRect.width) / 2;\n break;\n case 'bottom-start':\n top = triggerRect.bottom + offset;\n left = triggerRect.left;\n break;\n case 'bottom-end':\n top = triggerRect.bottom + offset;\n left = triggerRect.right - popoverRect.width;\n break;\n case 'left':\n top = triggerRect.top + (triggerRect.height - popoverRect.height) / 2;\n left = triggerRect.left - popoverRect.width - offset;\n break;\n case 'left-start':\n top = triggerRect.top;\n left = triggerRect.left - popoverRect.width - offset;\n break;\n case 'left-end':\n top = triggerRect.bottom - popoverRect.height;\n left = triggerRect.left - popoverRect.width - offset;\n break;\n }\n\n this.portalEl.style.top = `${top}px`;\n this.portalEl.style.left = `${left}px`;\n\n // Reset the repositioning guard after a short delay\n setTimeout(() => {\n this.isRepositioning = false;\n }, 16); // ~1 frame at 60fps\n }\n\n render() {\n return (\n <Host id={this.componentId}>\n <span class=\"pds-popover__trigger-wrapper\">\n <slot name=\"trigger\" onSlotchange={this.handleTriggerSlotChange}></slot>\n </span>\n\n <div class=\"pds-popover__content-slot-wrapper\">\n <slot onSlotchange={this.handleContentSlotChange}></slot>\n </div>\n </Host>\n );\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-
|
|
1
|
+
{"version":3,"file":"p-CbRVp4gv.system.js","sources":["src/components/pds-container/pds-container.scss?tag=pds-container&encapsulation=shadow","src/components/pds-container/pds-container.tsx"],"sourcesContent":[":host {\n display: block;\n margin-inline: auto;\n max-width: var(--pine-container-max-width, none);\n width: 100%;\n}\n\n// Named size tokens — sm: 340px, md: 520px, lg: 700px, xl: 1064px, full: 1440px\n:host(.pds-container--sm) {\n --pine-container-max-width: 340px;\n}\n\n:host(.pds-container--md) {\n --pine-container-max-width: 520px;\n}\n\n:host(.pds-container--lg) {\n --pine-container-max-width: 700px;\n}\n\n:host(.pds-container--xl) {\n --pine-container-max-width: 1064px;\n}\n\n:host(.pds-container--full) {\n --pine-container-max-width: 1440px;\n}\n","import { Component, Host, h, Prop } from '@stencil/core';\n\nconst NAMED_SIZES = new Set(['sm', 'md', 'lg', 'xl', 'full']);\n\n/**\n * @part container - The inner semantic container element\n */\n@Component({\n tag: 'pds-container',\n styleUrl: 'pds-container.scss',\n shadow: true,\n})\nexport class PdsContainer {\n /**\n * Sets the maximum width of the container. Accepts a named size token\n * (`'sm'` | `'md'` | `'lg'` | `'xl'` | `'full'`) or any valid CSS length value (e.g. `'640px'`, `'50rem'`).\n * When omitted, no max-width is applied.\n */\n @Prop() size?: string;\n\n /**\n * Sets the semantic HTML tag rendered as the inner container element.\n * @default 'div'\n */\n @Prop() tag: 'div' | 'main' | 'section' | 'article' = 'div';\n\n /**\n * If `true`, the container is centered horizontally using `margin-inline: auto`.\n * @default true\n */\n @Prop() centered: boolean = true;\n\n render() {\n const Tag = this.tag;\n const isNamed = this.size !== undefined && NAMED_SIZES.has(this.size);\n const customSize = this.size !== undefined && !isNamed ? this.size : undefined;\n\n const hostStyle: Record<string, string> = {};\n if (customSize) hostStyle['--pine-container-max-width'] = customSize;\n if (!this.centered) hostStyle['margin-inline'] = '0';\n\n return (\n <Host\n class={{ [`pds-container--${this.size}`]: isNamed }}\n style={Object.keys(hostStyle).length ? (hostStyle as any) : undefined}\n >\n <Tag part=\"container\">\n <slot />\n </Tag>\n </Host>\n );\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;MAAA,MAAM,eAAe,GAAG,+YAA+Y;;MCEva,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAUhD,YAAY,4BAAA,MAAA;MALzB,IAAA,WAAA,CAAA,OAAA,EAAA;;MAaE;;;MAGG;MACK,QAAA,IAAG,CAAA,GAAA,GAA2C,KAAK;MAE3D;;;MAGG;MACK,QAAA,IAAQ,CAAA,QAAA,GAAY,IAAI;MAsBjC;UApBC,MAAM,GAAA;MACJ,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG;MACpB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;cACrE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,SAAS;cAE9E,MAAM,SAAS,GAA2B,EAAE;MAC5C,QAAA,IAAI,UAAU;MAAE,YAAA,SAAS,CAAC,4BAA4B,CAAC,GAAG,UAAU;cACpE,IAAI,CAAC,IAAI,CAAC,QAAQ;MAAE,YAAA,SAAS,CAAC,eAAe,CAAC,GAAG,GAAG;MAEpD,QAAA,QACE,CAAA,CAAC,IAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EACH,KAAK,EAAE,EAAE,CAAC,CAAkB,eAAA,EAAA,IAAI,CAAC,IAAI,CAAE,CAAA,GAAG,OAAO,EAAE,EACnD,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAI,SAAiB,GAAG,SAAS,EAAA,EAErE,CAAA,CAAC,GAAG,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAC,IAAI,EAAC,WAAW,EAAA,EACnB,CAAQ,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAA,CACJ,CACD;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-C08fY97u.system.js","sources":["src/components/pds-radio-group/pds-radio-group.scss?tag=pds-radio-group&encapsulation=scoped","src/components/pds-radio-group/pds-radio-group.tsx"],"sourcesContent":[":host {\n display: flex;\n flex-direction: column;\n gap: var(--pine-dimension-sm);\n}\n\n:host(.is-invalid) {\n .pds-radio-group__message--error {\n color: var(--pine-color-text-message-danger);\n }\n}\n\n.pds-radio-group__label {\n color: var(--pine-color-text-label);\n font: var(--pine-typography-heading-6);\n font-weight: var(--pine-font-weight-medium);\n letter-spacing: var(--pine-letter-spacing-heading-6);\n}\n\n.pds-radio-group__radios {\n display: flex;\n gap: var(--pds-radio-group-gap, var(--pine-dimension-xs));\n}\n\n.pds-radio-group__radios--row {\n align-items: flex-start; // Align radios to the left\n flex-direction: row;\n flex-wrap: wrap;\n}\n\n.pds-radio-group__radios--column {\n flex-direction: column;\n}\n\n.pds-radio-group__message {\n color: var(--pine-color-text-message);\n font: var(--pine-typography-body);\n width: 100%;\n}\n\n.pds-radio-group__message--error {\n display: flex;\n gap: var(--pine-dimension-2xs);\n\n pds-icon {\n margin-block-start: var(--pine-dimension-050);\n }\n}\n\n","import { Component, Host, h, Prop, Element, Watch, Event, EventEmitter, Listen } from '@stencil/core';\nimport { messageId } from '../../utils/form';\nimport { danger } from '@pine-ds/icons/icons';\nimport { RadioGroupChangeEventDetail } from './radio-group-interface';\n\n/**\n * @slot (default) - Child pds-radio components\n */\n@Component({\n tag: 'pds-radio-group',\n styleUrls: ['pds-radio-group.scss'],\n scoped: true,\n})\nexport class PdsRadioGroup {\n @Element() el: HTMLPdsRadioGroupElement;\n\n /**\n * A unique identifier used for the underlying component `id` attribute.\n */\n @Prop() componentId: string;\n\n /**\n * Stable group ID generated once during component initialization.\n * Used to maintain DOM stability and accessibility relationships across re-renders.\n */\n private _groupId: string;\n\n /**\n * Layout direction for the radio group.\n * @defaultValue column\n */\n @Prop() direction: 'row' | 'column' = 'column';\n\n /**\n * Displays error message text describing an invalid state for the entire group.\n */\n @Prop() errorMessage: string;\n\n /**\n * Displays helper message text below the radio group.\n */\n @Prop() helperMessage: string;\n\n /**\n * Spacing between radio items. Accepts t-shirt sizes (none, xxs, xs, sm, md, lg, xl, xxl) or core spacing tokens (025, 050, 100, etc.).\n * @defaultValue xs\n */\n @Prop() gap: string = 'xs';\n\n /**\n * Determines whether or not the radio group is disabled.\n * @defaultValue false\n */\n @Prop() disabled = false;\n\n /**\n * Determines whether or not the radio group is invalid.\n * @defaultValue false\n */\n @Prop() invalid = false;\n\n /**\n * String used for group label/heading.\n */\n @Prop() groupLabel: string;\n\n /**\n * String used for radio `name` attribute. Applied to all child radios.\n * Required for proper radio group behavior (mutual exclusivity and form submission).\n */\n @Prop() name: string;\n\n /**\n * Determines whether or not the radio group is required.\n * @defaultValue false\n */\n @Prop() required = false;\n\n /**\n * Emits when a radio in the group is selected, providing the selected value and component ID.\n */\n @Event() pdsRadioGroupChange: EventEmitter<RadioGroupChangeEventDetail>;\n\n @Watch('name')\n @Watch('disabled')\n @Watch('invalid')\n @Watch('required')\n handlePropsChange() {\n this.updateChildRadios();\n }\n\n @Listen('change')\n handleRadioChange(event: Event) {\n const target = event.target as HTMLInputElement;\n\n // Only handle events from radio inputs\n if (target.type !== 'radio') {\n return;\n }\n\n // Only emit if the radio is being checked (not unchecked)\n if (target.checked) {\n const radioElement = target.closest('pds-radio') as HTMLPdsRadioElement;\n if (radioElement) {\n this.pdsRadioGroupChange.emit({\n checked: true,\n value: radioElement.value,\n componentId: radioElement.componentId,\n });\n }\n }\n }\n\n private updateChildRadios() {\n const radios = this.el.querySelectorAll('pds-radio');\n radios.forEach((radio) => {\n if (this.name) {\n radio.setAttribute('name', this.name);\n } else {\n radio.removeAttribute('name');\n }\n if (this.disabled) {\n radio.setAttribute('disabled', 'true');\n } else {\n radio.removeAttribute('disabled');\n }\n if (this.invalid) {\n radio.setAttribute('invalid', 'true');\n } else {\n radio.removeAttribute('invalid');\n }\n if (this.required) {\n radio.setAttribute('required', 'true');\n } else {\n radio.removeAttribute('required');\n }\n });\n }\n\n componentWillLoad() {\n // Generate stable group ID once during initialization\n // This ensures DOM stability and accessibility relationships remain consistent across re-renders\n if (this.componentId) {\n this._groupId = this.componentId;\n } else {\n // Generate unique ID with fallback for test environments where crypto.randomUUID may not be available\n const uniqueId = typeof crypto !== 'undefined' && crypto.randomUUID\n ? crypto.randomUUID()\n : `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n this._groupId = `radio-group-${uniqueId}`;\n }\n }\n\n componentDidLoad() {\n if (!this.name) {\n console.warn('pds-radio-group: name prop is required for proper radio group functionality');\n }\n this.updateChildRadios();\n }\n\n private classNames() {\n const classNames = [];\n\n if (this.invalid) {\n classNames.push('is-invalid');\n }\n // The host always uses flex-direction: column, so the label stays above.\n // The direction prop now only affects the .pds-radio-group__radios container.\n // No class needed on host for direction.\n\n return classNames.join(' ');\n }\n\n private getGapValue(): string {\n // Map t-shirt sizes to dimension tokens\n const gapMap: Record<string, string> = {\n none: '0',\n xxs: 'var(--pine-dimension-xxs)',\n xs: 'var(--pine-dimension-xs)',\n sm: 'var(--pine-dimension-sm)',\n md: 'var(--pine-dimension-md)',\n lg: 'var(--pine-dimension-lg)',\n xl: 'var(--pine-dimension-xl)',\n xxl: 'var(--pine-dimension-xxl)',\n };\n\n // If it's a t-shirt size, use the mapped value\n if (gapMap[this.gap]) {\n return gapMap[this.gap];\n }\n\n // Otherwise, assume it's a dimension token like \"100\", \"200\", etc.\n return `var(--pine-dimension-${this.gap})`;\n }\n\n private getAriaDescribedBy(): string | undefined {\n const messageIds: string[] = [];\n\n if (this.errorMessage) {\n messageIds.push(messageId(this._groupId, 'error'));\n }\n\n if (this.helperMessage) {\n messageIds.push(messageId(this._groupId, 'helper'));\n }\n\n return messageIds.length > 0 ? messageIds.join(' ') : undefined;\n }\n\n render() {\n const gapValue = this.getGapValue();\n const ariaDescribedBy = this.getAriaDescribedBy();\n\n return (\n <Host\n class={this.classNames()}\n id={this._groupId}\n role=\"group\"\n aria-describedby={ariaDescribedBy}\n style={{\n '--pds-radio-group-gap': gapValue,\n }}\n >\n {this.groupLabel && (\n <div class=\"pds-radio-group__label\">\n {this.groupLabel}\n </div>\n )}\n <div class={{\n 'pds-radio-group__radios': true,\n 'pds-radio-group__radios--row': this.direction === 'row',\n 'pds-radio-group__radios--column': this.direction === 'column',\n }}>\n <slot onSlotchange={() => this.updateChildRadios()} />\n </div>\n {this.helperMessage && (\n <div\n class=\"pds-radio-group__message\"\n id={messageId(this._groupId, 'helper')}\n >\n {this.helperMessage}\n </div>\n )}\n {this.errorMessage && (\n <div\n class=\"pds-radio-group__message pds-radio-group__message--error\"\n id={messageId(this._groupId, 'error')}\n aria-live=\"assertive\"\n >\n <pds-icon icon={danger} size=\"small\" />\n {this.errorMessage}\n </div>\n )}\n </Host>\n );\n }\n}\n\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;MAAA,MAAM,gBAAgB,GAAG,2wCAA2wC;;YCavxC,aAAa,8BAAA,MAAA;MAL1B,IAAA,WAAA,CAAA,OAAA,EAAA;;;MAmBE;;;MAGG;MACK,QAAA,IAAS,CAAA,SAAA,GAAqB,QAAQ;MAY9C;;;MAGG;MACK,QAAA,IAAG,CAAA,GAAA,GAAW,IAAI;MAE1B;;;MAGG;MACK,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK;MAExB;;;MAGG;MACK,QAAA,IAAO,CAAA,OAAA,GAAG,KAAK;MAavB;;;MAGG;MACK,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK;MAoLzB;UAzKC,iBAAiB,GAAA;cACf,IAAI,CAAC,iBAAiB,EAAE;;MAI1B,IAAA,iBAAiB,CAAC,KAAY,EAAA;MAC5B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;;MAG/C,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;kBAC3B;;;MAIF,QAAA,IAAI,MAAM,CAAC,OAAO,EAAE;kBAClB,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAwB;kBACvE,IAAI,YAAY,EAAE;MAChB,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;MAC5B,oBAAA,OAAO,EAAE,IAAI;0BACb,KAAK,EAAE,YAAY,CAAC,KAAK;0BACzB,WAAW,EAAE,YAAY,CAAC,WAAW;MACtC,iBAAA,CAAC;;;;UAKA,iBAAiB,GAAA;cACvB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,WAAW,CAAC;MACpD,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;MACvB,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE;sBACb,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;;uBAChC;MACL,gBAAA,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC;;MAE/B,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;MACjB,gBAAA,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC;;uBACjC;MACL,gBAAA,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC;;MAEnC,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;MAChB,gBAAA,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC;;uBAChC;MACL,gBAAA,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC;;MAElC,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;MACjB,gBAAA,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC;;uBACjC;MACL,gBAAA,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC;;MAErC,SAAC,CAAC;;UAGJ,iBAAiB,GAAA;;;MAGf,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;MACpB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW;;mBAC3B;;kBAEL,MAAM,QAAQ,GAAG,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC;MACvD,kBAAE,MAAM,CAAC,UAAU;wBACjB,CAAG,EAAA,IAAI,CAAC,GAAG,EAAE,CAAI,CAAA,EAAA,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAE;MACjE,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAe,YAAA,EAAA,QAAQ,EAAE;;;UAI7C,gBAAgB,GAAA;MACd,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;MACd,YAAA,OAAO,CAAC,IAAI,CAAC,6EAA6E,CAAC;;cAE7F,IAAI,CAAC,iBAAiB,EAAE;;UAGlB,UAAU,GAAA;cAChB,MAAM,UAAU,GAAG,EAAE;MAErB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;MAChB,YAAA,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;;;;;MAM/B,QAAA,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;;UAGrB,WAAW,GAAA;;MAEjB,QAAA,MAAM,MAAM,GAA2B;MACrC,YAAA,IAAI,EAAE,GAAG;MACT,YAAA,GAAG,EAAE,2BAA2B;MAChC,YAAA,EAAE,EAAE,0BAA0B;MAC9B,YAAA,EAAE,EAAE,0BAA0B;MAC9B,YAAA,EAAE,EAAE,0BAA0B;MAC9B,YAAA,EAAE,EAAE,0BAA0B;MAC9B,YAAA,EAAE,EAAE,0BAA0B;MAC9B,YAAA,GAAG,EAAE,2BAA2B;eACjC;;MAGD,QAAA,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;MACpB,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;;;MAIzB,QAAA,OAAO,CAAwB,qBAAA,EAAA,IAAI,CAAC,GAAG,GAAG;;UAGpC,kBAAkB,GAAA;cACxB,MAAM,UAAU,GAAa,EAAE;MAE/B,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;MACrB,YAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;;MAGpD,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;MACtB,YAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;;MAGrD,QAAA,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS;;UAGjE,MAAM,GAAA;MACJ,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE;MACnC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE;MAEjD,QAAA,QACE,CAAC,CAAA,IAAI,EACH,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,EACxB,EAAE,EAAE,IAAI,CAAC,QAAQ,EACjB,IAAI,EAAC,OAAO,EACM,kBAAA,EAAA,eAAe,EACjC,KAAK,EAAE;MACL,gBAAA,uBAAuB,EAAE,QAAQ;MAClC,aAAA,EAAA,EAEA,IAAI,CAAC,UAAU,KACd,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,wBAAwB,EAChC,EAAA,IAAI,CAAC,UAAU,CACZ,CACP,EACD,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAE;MACV,gBAAA,yBAAyB,EAAE,IAAI;MAC/B,gBAAA,8BAA8B,EAAE,IAAI,CAAC,SAAS,KAAK,KAAK;MACxD,gBAAA,iCAAiC,EAAE,IAAI,CAAC,SAAS,KAAK,QAAQ;mBAC/D,EAAA,EACC,CAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,YAAY,EAAE,MAAM,IAAI,CAAC,iBAAiB,EAAE,EAAA,CAAI,CAClD,EACL,IAAI,CAAC,aAAa,KACjB,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACE,KAAK,EAAC,0BAA0B,EAChC,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAErC,IAAI,CAAC,aAAa,CACf,CACP,EACA,IAAI,CAAC,YAAY,KAChB,4DACE,KAAK,EAAC,0DAA0D,EAChE,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,eAC3B,WAAW,EAAA,EAErB,CAAA,CAAA,UAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAU,IAAI,EAAE,MAAM,EAAE,IAAI,EAAC,OAAO,EAAG,CAAA,EACtC,IAAI,CAAC,YAAY,CACd,CACP,CACI;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"p-CfyFDUw5.system.js","sources":["src/components/pds-radio-group/pds-radio-group.scss?tag=pds-radio-group&encapsulation=scoped","src/components/pds-radio-group/pds-radio-group.tsx"],"sourcesContent":[":host {\n display: flex;\n flex-direction: column;\n gap: var(--pine-dimension-sm);\n}\n\n:host(.is-invalid) {\n .pds-radio-group__message--error {\n color: var(--pine-color-text-message-danger);\n }\n}\n\n.pds-radio-group__label {\n color: var(--pine-color-text-label);\n font: var(--pine-typography-heading-6);\n font-weight: var(--pine-font-weight-medium);\n letter-spacing: var(--pine-letter-spacing-heading-6);\n}\n\n.pds-radio-group__radios {\n display: flex;\n gap: var(--pds-radio-group-gap, var(--pine-dimension-xs));\n}\n\n.pds-radio-group__radios--row {\n align-items: flex-start; // Align radios to the left\n flex-direction: row;\n flex-wrap: wrap;\n}\n\n.pds-radio-group__radios--column {\n flex-direction: column;\n}\n\n.pds-radio-group__message {\n color: var(--pine-color-text-message);\n font: var(--pine-typography-body);\n width: 100%;\n}\n\n.pds-radio-group__message--error {\n display: flex;\n gap: var(--pine-dimension-2xs);\n\n pds-icon {\n margin-block-start: var(--pine-dimension-050);\n }\n}\n\n","import { Component, Host, h, Prop, Element, Watch, Event, EventEmitter, Listen } from '@stencil/core';\nimport { messageId } from '../../utils/form';\nimport { danger } from '@pine-ds/icons/icons';\nimport { RadioGroupChangeEventDetail } from './radio-group-interface';\n\n/**\n * @slot (default) - Child pds-radio components\n */\n@Component({\n tag: 'pds-radio-group',\n styleUrls: ['pds-radio-group.scss'],\n scoped: true,\n})\nexport class PdsRadioGroup {\n @Element() el: HTMLPdsRadioGroupElement;\n\n /**\n * A unique identifier used for the underlying component `id` attribute.\n */\n @Prop() componentId: string;\n\n /**\n * Stable group ID generated once during component initialization.\n * Used to maintain DOM stability and accessibility relationships across re-renders.\n */\n private _groupId: string;\n\n /**\n * Layout direction for the radio group.\n * @defaultValue column\n */\n @Prop() direction: 'row' | 'column' = 'column';\n\n /**\n * Displays error message text describing an invalid state for the entire group.\n */\n @Prop() errorMessage: string;\n\n /**\n * Displays helper message text below the radio group.\n */\n @Prop() helperMessage: string;\n\n /**\n * Spacing between radio items. Accepts t-shirt sizes (none, xxs, xs, sm, md, lg, xl, xxl) or core spacing tokens (025, 050, 100, etc.).\n * @defaultValue xs\n */\n @Prop() gap: string = 'xs';\n\n /**\n * Determines whether or not the radio group is disabled.\n * @defaultValue false\n */\n @Prop() disabled = false;\n\n /**\n * Determines whether or not the radio group is invalid.\n * @defaultValue false\n */\n @Prop() invalid = false;\n\n /**\n * String used for group label/heading.\n */\n @Prop() groupLabel: string;\n\n /**\n * String used for radio `name` attribute. Applied to all child radios.\n * Required for proper radio group behavior (mutual exclusivity and form submission).\n */\n @Prop() name: string;\n\n /**\n * Determines whether or not the radio group is required.\n * @defaultValue false\n */\n @Prop() required = false;\n\n /**\n * Emits when a radio in the group is selected, providing the selected value and component ID.\n */\n @Event() pdsRadioGroupChange: EventEmitter<RadioGroupChangeEventDetail>;\n\n @Watch('name')\n @Watch('disabled')\n @Watch('invalid')\n @Watch('required')\n handlePropsChange() {\n this.updateChildRadios();\n }\n\n @Listen('change')\n handleRadioChange(event: Event) {\n const target = event.target as HTMLInputElement;\n\n // Only handle events from radio inputs\n if (target.type !== 'radio') {\n return;\n }\n\n // Only emit if the radio is being checked (not unchecked)\n if (target.checked) {\n const radioElement = target.closest('pds-radio') as HTMLPdsRadioElement;\n if (radioElement) {\n this.pdsRadioGroupChange.emit({\n checked: true,\n value: radioElement.value,\n componentId: radioElement.componentId,\n });\n }\n }\n }\n\n private updateChildRadios() {\n const radios = this.el.querySelectorAll('pds-radio');\n radios.forEach((radio) => {\n if (this.name) {\n radio.setAttribute('name', this.name);\n } else {\n radio.removeAttribute('name');\n }\n if (this.disabled) {\n radio.setAttribute('disabled', 'true');\n } else {\n radio.removeAttribute('disabled');\n }\n if (this.invalid) {\n radio.setAttribute('invalid', 'true');\n } else {\n radio.removeAttribute('invalid');\n }\n if (this.required) {\n radio.setAttribute('required', 'true');\n } else {\n radio.removeAttribute('required');\n }\n });\n }\n\n componentWillLoad() {\n // Generate stable group ID once during initialization\n // This ensures DOM stability and accessibility relationships remain consistent across re-renders\n if (this.componentId) {\n this._groupId = this.componentId;\n } else {\n // Generate unique ID with fallback for test environments where crypto.randomUUID may not be available\n const uniqueId = typeof crypto !== 'undefined' && crypto.randomUUID\n ? crypto.randomUUID()\n : `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n this._groupId = `radio-group-${uniqueId}`;\n }\n }\n\n componentDidLoad() {\n if (!this.name) {\n console.warn('pds-radio-group: name prop is required for proper radio group functionality');\n }\n this.updateChildRadios();\n }\n\n private classNames() {\n const classNames = [];\n\n if (this.invalid) {\n classNames.push('is-invalid');\n }\n // The host always uses flex-direction: column, so the label stays above.\n // The direction prop now only affects the .pds-radio-group__radios container.\n // No class needed on host for direction.\n\n return classNames.join(' ');\n }\n\n private getGapValue(): string {\n // Map t-shirt sizes to dimension tokens\n const gapMap: Record<string, string> = {\n none: '0',\n xxs: 'var(--pine-dimension-xxs)',\n xs: 'var(--pine-dimension-xs)',\n sm: 'var(--pine-dimension-sm)',\n md: 'var(--pine-dimension-md)',\n lg: 'var(--pine-dimension-lg)',\n xl: 'var(--pine-dimension-xl)',\n xxl: 'var(--pine-dimension-xxl)',\n };\n\n // If it's a t-shirt size, use the mapped value\n if (gapMap[this.gap]) {\n return gapMap[this.gap];\n }\n\n // Otherwise, assume it's a dimension token like \"100\", \"200\", etc.\n return `var(--pine-dimension-${this.gap})`;\n }\n\n private getAriaDescribedBy(): string | undefined {\n const messageIds: string[] = [];\n\n if (this.errorMessage) {\n messageIds.push(messageId(this._groupId, 'error'));\n }\n\n if (this.helperMessage) {\n messageIds.push(messageId(this._groupId, 'helper'));\n }\n\n return messageIds.length > 0 ? messageIds.join(' ') : undefined;\n }\n\n render() {\n const gapValue = this.getGapValue();\n const ariaDescribedBy = this.getAriaDescribedBy();\n\n return (\n <Host\n class={this.classNames()}\n id={this._groupId}\n role=\"group\"\n aria-describedby={ariaDescribedBy}\n style={{\n '--pds-radio-group-gap': gapValue,\n }}\n >\n {this.groupLabel && (\n <div class=\"pds-radio-group__label\">\n {this.groupLabel}\n </div>\n )}\n <div class={{\n 'pds-radio-group__radios': true,\n 'pds-radio-group__radios--row': this.direction === 'row',\n 'pds-radio-group__radios--column': this.direction === 'column',\n }}>\n <slot onSlotchange={() => this.updateChildRadios()} />\n </div>\n {this.helperMessage && (\n <div\n class=\"pds-radio-group__message\"\n id={messageId(this._groupId, 'helper')}\n >\n {this.helperMessage}\n </div>\n )}\n {this.errorMessage && (\n <div\n class=\"pds-radio-group__message pds-radio-group__message--error\"\n id={messageId(this._groupId, 'error')}\n aria-live=\"assertive\"\n >\n <pds-icon icon={danger} size=\"small\" />\n {this.errorMessage}\n </div>\n )}\n </Host>\n );\n }\n}\n\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-
|
|
1
|
+
{"version":3,"file":"p-CgPvrU-c.system.js","sources":["@lazy-external-entrypoint?app-data=conditional"],"sourcesContent":["export { setNonce } from '@stencil/core';\nimport { bootstrapLazy } from '@stencil/core';\nimport { globalScripts } from '@stencil/core/internal/app-globals';\nexport const defineCustomElements = async (win, options) => {\n if (typeof window === 'undefined') return undefined;\n await globalScripts();\n return bootstrapLazy([/*!__STENCIL_LAZY_DATA__*/], options);\n};\n"],"names":[],"mappings":";;;;;;;;;;;AAGY,YAAC,oBAAoB,mCAAG,OAAO,GAAG,EAAE,OAAO,KAAK;MAC5D,EAAE,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,OAAO,SAAS;MACrD,EAAE,MAAM,aAAa,EAAE;MACvB,EAAE,OAAO,aAAa,CAAC,4BAA4B,EAAE,OAAO,CAAC;MAC7D;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-
|
|
1
|
+
{"version":3,"file":"p-CjuuQ5fk.system.js","sources":["src/components/pds-link/pds-link.scss?tag=pds-link&encapsulation=shadow","src/components/pds-link/pds-link.tsx"],"sourcesContent":[":host {\n display: inline;\n\n pds-icon {\n margin-inline-start: var(--pine-dimension-2xs);\n }\n}\n\n.pds-link {\n align-items: center;\n // Priority: 1) explicit --color prop, 2) context variable, 3) default\n color: var(--color, var(--pds-context-link-color, var(--pine-color-text)));\n display: inline-flex;\n font-weight: var(--pine-font-weight-medium);\n\n &:focus-visible {\n border-radius: var(--pine-dimension-2xs);\n outline: var(--pine-outline-focus);\n outline-offset: var(--pine-border-width-thick);\n position: relative;\n }\n\n &:hover {\n color: var(--color, var(--pds-context-link-color-hover, var(--pine-color-text-hover)));\n text-decoration: none;\n }\n\n :host([color=\"secondary\"]) & {\n color: var(--pine-color-text-primary);\n\n &:hover {\n color: var(--pine-color-text-inverse-secondary);\n }\n }\n\n :host([color=\"accent\"]) & {\n color: var(--pine-color-accent);\n\n &:hover {\n color: var(--pine-color-accent-hover);\n }\n }\n\n :host([color=\"danger\"]) & {\n color: var(--pine-color-danger);\n\n &:hover {\n color: var(--pine-color-danger-hover);\n }\n }\n}\n\n// We have a small consensus stating that\n// fonts will be REMs, box-model will be\n// discussed later px or (r)em's\n.pds-link--sm {\n font-size: var(--pine-font-size-body-xs);\n\n pds-icon {\n height: var(--pine-dimension-xs);\n width: var(--pine-dimension-xs);\n }\n}\n\n.pds-link--md {\n font-size: var(--pine-font-size-body-sm);\n\n pds-icon {\n height: var(--pine-dimension-xs);\n width: var(--pine-dimension-xs);\n }\n}\n\n.pds-link--lg {\n font-size: var(--pine-font-size-body-md);\n\n pds-icon {\n height: var(--pine-dimension-sm);\n width: var(--pine-dimension-sm);\n }\n}\n\n.pds-link--plain {\n text-decoration: none;\n\n &:hover {\n color: var(--color, var(--pds-context-link-color-hover, var(--pine-color-text-hover)));\n text-decoration: underline;\n }\n}\n","import { Component, h, Prop } from '@stencil/core';\nimport { setColor } from '../../utils/utils';\n\nimport { launch } from '@pine-ds/icons/icons';\n\n/**\n * @part link - Link element styles.\n * @slot (default) - Text content placed between the opening and closing tags. If no text is provided, the **href** will be used as a fallback.\n */\n@Component({\n tag: 'pds-link',\n styleUrls: ['pds-link.scss'],\n shadow: true,\n})\nexport class PdsLink {\n /**\n * Sets the link color.\n */\n @Prop() color?: string;\n\n /**\n * Prompts the user to save the linked URL instead of navigating to it.\n * It can be used without a value to download with the default filename,\n * or with a string value to suggest a specific filename for the download.\n */\n @Prop() download?: string;\n\n /**\n * A unique identifier used for the underlying component `id` attribute.\n */\n @Prop() componentId: string;\n\n /**\n * Determines whether the link should open in a new tab.\n * @defaultValue false\n * @deprecated Consider using the `target` prop for more control. This prop will be maintained for backward compatibility.\n */\n @Prop() external = false;\n\n /**\n * Specifies where to open the linked document.\n * @defaultValue undefined\n * @example\n * <pds-link href=\"https://example.com\" target=\"_blank\">Opens in new tab</pds-link>\n */\n @Prop() target?: '_blank' | '_self' | '_parent' | '_top';\n\n /**\n * Sets the link variant styles.\n * @defaultValue inline\n */\n @Prop() variant: 'inline' | 'plain' = 'inline';\n\n /**\n * The font size of the link's text.\n * @defaultValue lg\n */\n @Prop() fontSize: 'sm' | 'md' | 'lg' = 'lg';\n\n /**\n * The hyperlink's destination URL. If no text is provided in the custom slot, the href will be used.\n */\n @Prop() href!: string;\n\n private classNames() {\n const classNames = ['pds-link'];\n\n if (this.fontSize) {\n classNames.push('pds-link--' + this.fontSize);\n }\n\n if (this.variant) {\n classNames.push('pds-link--' + this.variant);\n }\n\n return classNames.join(' ');\n }\n\n private setLinkStyles() {\n if (!this.color) return;\n\n const linkColors = {\n secondary: 'var(--pine-color-text-primary)',\n accent: 'var(--pine-color-accent)',\n danger: 'var(--pine-color-danger)',\n }\n\n const linkStyles = setColor(this.color, linkColors);\n\n return linkStyles;\n }\n\n render() {\n const targetValue = this.target || (this.external ? '_blank' : undefined);\n const showExternalIcon = this.external;\n const relValue = targetValue === '_blank' ? 'noopener noreferrer' : undefined;\n\n return (\n <a\n class={this.classNames()}\n download={this.download}\n href={this.href}\n id={this.componentId}\n part=\"link\"\n target={targetValue}\n rel={relValue}\n style={this.setLinkStyles()}\n >\n <slot>{this.href}</slot>\n {showExternalIcon &&\n <pds-icon icon={launch} size={this.fontSize}></pds-icon>\n }\n </a>\n );\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;MAAA,MAAM,UAAU,GAAG,4nDAA4nD;;YCcloD,OAAO,uBAAA,MAAA;MALpB,IAAA,WAAA,CAAA,OAAA,EAAA;;MAuBE;;;;MAIG;MACK,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK;MAUxB;;;MAGG;MACK,QAAA,IAAO,CAAA,OAAA,GAAuB,QAAQ;MAE9C;;;MAGG;MACK,QAAA,IAAQ,CAAA,QAAA,GAAuB,IAAI;MA0D5C;UAnDS,UAAU,GAAA;MAChB,QAAA,MAAM,UAAU,GAAG,CAAC,UAAU,CAAC;MAE/B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;kBACjB,UAAU,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;;MAG/C,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;kBAChB,UAAU,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC;;MAG9C,QAAA,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;;UAGrB,aAAa,GAAA;cACnB,IAAI,CAAC,IAAI,CAAC,KAAK;kBAAE;MAEjB,QAAA,MAAM,UAAU,GAAG;MACjB,YAAA,SAAS,EAAE,gCAAgC;MAC3C,YAAA,MAAM,EAAE,0BAA0B;MAClC,YAAA,MAAM,EAAE,0BAA0B;eACnC;cAED,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC;MAEnD,QAAA,OAAO,UAAU;;UAGnB,MAAM,GAAA;MACJ,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;MACzE,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ;MACtC,QAAA,MAAM,QAAQ,GAAG,WAAW,KAAK,QAAQ,GAAG,qBAAqB,GAAG,SAAS;MAE7E,QAAA,QACE,0DACE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,EACxB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,EAAE,EAAE,IAAI,CAAC,WAAW,EACpB,IAAI,EAAC,MAAM,EACX,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,EAAA,EAE3B,CAAO,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EAAA,IAAI,CAAC,IAAI,CAAQ,EACvB,gBAAgB;kBACf,CAAA,CAAA,UAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAU,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAA,CAAa,CAExD;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-
|
|
1
|
+
{"version":3,"file":"p-Ck9i0WVa.system.js","sources":["src/components/pds-copytext/pds-copytext.scss?tag=pds-copytext&encapsulation=shadow","src/components/pds-copytext/pds-copytext.tsx"],"sourcesContent":[":host(.pds-copytext) {\n // Update custom prop usage in Button before changing\n --copytext-color-background-hover: var(--pine-color-background-inset);\n\n\n pds-button {\n align-items: center;\n border-radius: var(--pine-border-radius-full);\n border-width: var(--pine-dimension-none);\n display: inline-flex;\n font-family: var(--pine-font-family-heading);\n font-size: var(--pine-font-size-body-md);\n font-weight: var(--pine-font-weight-body-medium);\n letter-spacing: var(--pine-letter-spacing);\n line-height: var(--pine-line-height-body);\n max-width: 100%;\n\n &::part(button) {\n padding-block: var(--pine-dimension-2xs);\n padding-inline: var(--pine-dimension-xs);\n }\n\n &::part(button):hover {\n // Update custom prop usage in Button before changing\n background-color: var(--copytext-color-background-hover);\n color: var(--pine-color-text-secondary-hover);\n }\n\n span {\n font-weight: var(--pine-font-weight-medium);\n margin-inline-end: var(--pine-dimension-xs);\n white-space: nowrap;\n }\n\n :nth-child(2) {\n flex-shrink: 0;\n }\n }\n\n // bordered\n\n &:host(.pds-copytext--bordered) {\n border-width: var(--pine-dimension-none);\n padding: var(--pine-dimension-none);\n\n pds-button {\n padding: var(--pine-dimension-none);\n\n &::part(button) {\n padding: var(--pine-dimension-none);\n }\n\n &::part(button):hover {\n background-color: transparent;\n }\n }\n\n span {\n background: var(--pine-color-secondary);\n border: var(--pine-border);\n border-radius: var(--pine-border-radius-full);\n margin-inline-end: var(--pine-dimension-sm);\n padding-block: var(--pine-dimension-xs);\n padding-inline: var(--pine-dimension-sm);\n }\n\n :hover {\n span {\n border: var(--pine-border-hover);\n }\n }\n }\n\n // full width and truncated\n &:host(.pds-copytext--full-width),\n &:host(.pds-copytext--truncated) {\n pds-button {\n display: inline-flex;\n min-width: auto;\n width: 100%;\n\n &::part(button-content),\n &::part(button-text) {\n flex-shrink: 1;\n width: 100%;\n }\n\n span {\n text-align: start;\n width: 100%;\n }\n }\n }\n\n // full width\n &:host(.pds-copytext--full-width) {\n pds-button {\n justify-content: space-between;\n }\n }\n\n // truncated\n &:host(.pds-copytext--truncated) {\n pds-button span {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n}\n","import { Component, Element, Event, EventEmitter, Host, h, Prop, Watch } from '@stencil/core';\n\nimport { copy as copyIcon } from '@pine-ds/icons/icons';\nimport { setupTruncationTooltip } from '../../utils/truncation-tooltip';\n\n@Component({\n tag: 'pds-copytext',\n styleUrls: ['pds-copytext.scss'],\n shadow: true,\n})\nexport class PdsCopytext {\n @Element() el: HTMLPdsCopytextElement;\n private truncationCleanup: (() => void) | null = null;\n private valueSpanEl: HTMLSpanElement;\n\n /**\n * Determines whether `copytext` should have a visible border.\n * @defaultValue true\n */\n @Prop({ reflect: true }) border = true;\n\n /**\n * A unique identifier used for the underlying component `id` attribute.\n */\n @Prop() componentId: string;\n\n /**\n * Determines whether `copytext` should expand to the full width of its container.\n * @defaultValue false\n */\n @Prop() fullWidth = false;\n\n /**\n * Determines whether the `value` should truncate and display with an ellipsis.\n * When text overflows, a tooltip showing the full value will appear on hover/focus.\n * @defaultValue false\n */\n @Prop() truncate = false;\n\n /**\n * The string displayed that is also copied to the clipboard upon interaction.\n */\n @Prop() value!: string;\n\n @Watch('truncate')\n handleTruncateChange(newValue: boolean) {\n if (newValue) {\n this.initTruncationTooltip();\n } else {\n this.destroyTruncationTooltip();\n }\n }\n\n @Watch('value')\n handleValueChange() {\n if (this.truncate) {\n this.initTruncationTooltip();\n }\n }\n\n componentDidLoad() {\n if (this.truncate) {\n this.initTruncationTooltip();\n }\n }\n\n disconnectedCallback() {\n this.destroyTruncationTooltip();\n }\n\n private initTruncationTooltip() {\n this.destroyTruncationTooltip();\n\n if (this.valueSpanEl) {\n this.truncationCleanup = setupTruncationTooltip({\n hostEl: this.el,\n contentEl: this.valueSpanEl,\n getTooltipText: () => this.value || '',\n });\n }\n }\n\n private destroyTruncationTooltip() {\n if (this.truncationCleanup) {\n this.truncationCleanup();\n this.truncationCleanup = null;\n }\n }\n\n /**\n * Event fired when copyText button is clicked.\n */\n @Event() pdsCopyTextClick: EventEmitter<string>;\n\n private copyToClipboard = async (value: string) => {\n try {\n if (typeof navigator.clipboard !== 'undefined') {\n await navigator.clipboard.writeText(value);\n this.pdsCopyTextClick.emit('Copied to clipboard');\n }\n } catch (err) {\n this.pdsCopyTextClick.emit(`Error writing text to clipboard: ${err}`);\n }\n };\n\n private handleClick = () => {\n this.copyToClipboard(this.value);\n };\n\n private classNames() {\n const classNames = ['pds-copytext'];\n\n if (this.border) {\n classNames.push('pds-copytext--bordered');\n }\n\n if (this.fullWidth) {\n classNames.push('pds-copytext--full-width');\n }\n\n if (this.truncate) {\n classNames.push('pds-copytext--truncated');\n }\n\n return classNames.join(' ');\n }\n\n render() {\n return (\n <Host class={this.classNames()} id={this.componentId}>\n <pds-button type=\"button\" variant=\"unstyled\" onClick={this.handleClick}>\n <span ref={(el) => this.valueSpanEl = el}>{this.value}</span>\n <pds-icon icon={copyIcon} size=\"16px\"></pds-icon>\n </pds-button>\n </Host>\n );\n }\n}\n"],"names":["copyIcon"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-
|
|
1
|
+
{"version":3,"file":"p-Cm5r7dPz.system.js","sources":["src/components/pds-dropdown-menu/pds-dropdown-menu-separator/pds-dropdown-menu-separator.scss?tag=pds-dropdown-menu-separator&encapsulation=shadow","src/components/pds-dropdown-menu/pds-dropdown-menu-separator/pds-dropdown-menu-separator.tsx"],"sourcesContent":[":host {\n hr {\n border: 0;\n border-top: var(--pine-border-width-thin) solid var(--pine-color-border);\n height: 0;\n margin-block: var(--pine-dimension-xs);\n margin-inline: calc(var(--pine-dimension-xs) * -1);\n }\n}\n","import { Component, Host, h, Prop } from '@stencil/core';\nimport type { BasePdsProps } from '@utils/interfaces';\n\n@Component({\n tag: 'pds-dropdown-menu-separator',\n styleUrl: 'pds-dropdown-menu-separator.scss',\n shadow: true,\n})\nexport class PdsDropdownMenuSeparator implements BasePdsProps {\n /**\n * A unique identifier used for the underlying component `id` attribute.\n */\n @Prop() componentId: string;\n\n /**\n * It determines whether or not the dropdown-item is disabled.\n * @defaultValue false\n */\n @Prop() disabled: boolean = false;\n\n\n render() {\n return (\n <Host id={this.componentId}>\n <hr/>\n </Host>\n );\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;MAAA,MAAM,2BAA2B,GAAG,6LAA6L;;YCQpN,wBAAwB,0CAAA,MAAA;MALrC,IAAA,WAAA,CAAA,OAAA,EAAA;;MAWE;;;MAGG;MACK,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK;MAUlC;UAPC,MAAM,GAAA;MACJ,QAAA,QACE,EAAC,IAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAC,EAAE,EAAE,IAAI,CAAC,WAAW,EAAA,EACxB,CAAK,CAAA,IAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAA,CACA;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-
|
|
1
|
+
{"version":3,"file":"p-CtZbV7sl.system.js","sources":["src/components/pds-modal/pds-modal-footer/pds-modal-footer.scss?tag=pds-modal-footer","src/components/pds-modal/pds-modal-footer/pds-modal-footer.tsx"],"sourcesContent":["pds-modal-footer {\n display: block;\n width: 100%;\n}\n\n.pds-modal__footer {\n width: 100%;\n}\n","import { Component, h } from '@stencil/core';\n\n@Component({\n tag: 'pds-modal-footer',\n styleUrl: 'pds-modal-footer.scss',\n shadow: false,\n})\nexport class PdsModalFooter {\n render() {\n return (\n <footer class=\"pds-modal__footer\">\n <slot></slot>\n </footer>\n );\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;MAAA,MAAM,iBAAiB,GAAG,0EAA0E;;YCOvF,cAAc,+BAAA,MAAA;;;;UACzB,MAAM,GAAA;cACJ,QACE,CAAA,CAAA,QAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAQ,KAAK,EAAC,mBAAmB,EAAA,EAC/B,CAAa,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAA,CACN;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-DDgPxucg.system.js","sources":["src/global/styles/utils/label.scss?tag=pds-radio&encapsulation=scoped","src/components/pds-radio/pds-radio.scss?tag=pds-radio&encapsulation=scoped","src/components/pds-radio/pds-radio.tsx"],"sourcesContent":[":host {\n display: inline-block;\n}\n\n:host([aria-disabled=\"true\"]) label {\n color: var(--pine-color-text-label-disabled);\n}\n\n:host([aria-readonly=\"true\"]) {\n label {\n color: var(--pine-color-text-label-readonly);\n }\n}\n\nlabel {\n color: var(--pine-color-text-label);\n font: var(--pine-typography-body-medium);\n letter-spacing: var(--pine-letter-spacing);\n}\n",":host {\n --sizing-check-size: 6px;\n --sizing-input-size: var(--pine-dimension-sm);\n --sizing-margin-block-start: 6px;\n\n align-items: center;\n display: flex;\n flex-flow: row wrap;\n position: relative;\n}\n\n:host(.is-invalid) {\n // Invalid state only affects error message styling, not the radio itself\n // This allows radio-group to handle error display without red radios\n .pds-radio__message--error {\n color: var(--pine-color-text-message-danger);\n }\n}\n\n:host(.has-border) {\n align-items: flex-start;\n border: var(--pine-border);\n border-radius: var(--pine-dimension-125);\n column-gap: var(--pine-dimension-xs);\n display: flex;\n flex: 1;\n flex-direction: column;\n padding: var(--pine-dimension-md);\n\n // On small screens, ensure full width when in a row layout\n @media (max-width: 767px) {\n box-sizing: border-box;\n flex: 1 1 100%;\n max-width: 100%;\n min-width: 0;\n }\n\n &:hover {\n border: var(--pine-border-hover);\n }\n\n &:has(input:checked) {\n box-shadow: 0 0 0 2px var(--pine-color-primary-hover);\n }\n\n label {\n color: var(--pine-color-text);\n font-weight: var(--pine-font-weight-semi-bold);\n\n &::after {\n content: \"\";\n cursor: pointer;\n height: 100%;\n left: 0;\n position: absolute;\n top: 0;\n width: 100%;\n z-index: 1;\n }\n }\n\n // Disabled state for bordered radios\n &:has(input:disabled) {\n background: var(--pine-color-background-container-disabled);\n border-color: var(--pine-color-border-disabled);\n cursor: not-allowed;\n\n label {\n color: var(--pine-color-text-label-disabled);\n cursor: not-allowed;\n }\n }\n\n // Invalid state for bordered radios - no red styling, only error message\n &.is-invalid {\n .pds-radio__message--error {\n color: var(--pine-color-text-message-danger);\n }\n }\n}\n\ninput {\n appearance: none;\n background: var(--pine-color-background-container);\n border: var(--pine-border);\n border-radius: var(--pine-border-radius-full);\n flex: none;\n height: var(--sizing-input-size);\n margin: 0;\n margin-block-start: var(--pine-dimension-025);\n position: relative;\n width: var(--sizing-input-size);\n\n /* stylelint-disable-next-line selector-no-qualifying-type */\n &.visually-hidden {\n border: 0;\n clip: rect(0 0 0 0);\n clip-path: polygon(0 0, 0 0, 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n width: 1px;\n }\n\n &:hover {\n background: var(--pine-color-background-container-hover);\n border: var(--pine-border-hover);\n }\n\n &:checked {\n background: var(--pine-color-accent);\n border-color: var(--pine-color-accent);\n\n &:hover {\n background: var(--pine-color-accent-hover);\n border-color: var(--pine-color-accent-hover);\n }\n\n &::after {\n /* stylelint-disable-next-line pine-design-system/prefer-semantic-tokens */\n background: var(--pine-color-white);\n border-radius: var(--pine-border-radius-full);\n content: \"\";\n display: block;\n height: var(--sizing-check-size);\n left: 50%;\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n width: var(--sizing-check-size);\n }\n }\n\n &:disabled {\n background: var(--pine-color-background-container-disabled);\n border-color: var(--pine-color-border-disabled);\n cursor: not-allowed;\n\n &:checked {\n background-color: var(--pine-color-accent-disabled);\n border-color: var(--pine-color-border-disabled);\n\n &::after {\n border-color: var(--pine-color-border-disabled);\n }\n }\n\n\n }\n\n &:focus-visible {\n outline: var(--pine-outline-focus);\n }\n\n}\n\nlabel {\n display: flex;\n gap: var(--pine-dimension-xs);\n}\n\n// Disabled label styling\nlabel:has(input:disabled) {\n color: var(--pine-color-text-label-disabled);\n cursor: not-allowed;\n}\n\n// Disabled message styling\n:host:has(input:disabled) .pds-radio__message {\n color: var(--pine-color-text-label-disabled);\n}\n\n.visually-hidden {\n border: 0;\n clip: rect(0 0 0 0);\n clip-path: polygon(0 0, 0 0, 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n width: 1px;\n}\n\n.pds-radio__message {\n color: var(--pine-color-text-message);\n flex-basis: 100%; // Ensure message wraps to new line in flex container\n font: var(--pine-typography-body);\n margin-inline-start: var(--pine-dimension-md);\n width: 100%;\n}\n\n.pds-radio__message--error {\n display: flex;\n gap: var(--pine-dimension-2xs);\n\n pds-icon {\n margin-block-start: var(--pine-dimension-025);\n }\n}\n\n// Image-based radio styles - matches bordered layout\n:host(.has-image) {\n align-items: center;\n border: var(--pine-border);\n border-radius: var(--pine-dimension-125);\n column-gap: var(--pine-dimension-xs);\n display: flex;\n flex: 1;\n padding: var(--pine-dimension-md);\n\n // On small screens, ensure full width when in a row layout\n @media (max-width: 767px) {\n box-sizing: border-box;\n flex: 1 1 100%;\n max-width: 100%;\n min-width: 0;\n }\n\n &:hover {\n border: var(--pine-border-hover);\n }\n\n &:has(input:checked) {\n box-shadow: 0 0 0 2px var(--pine-color-primary-hover);\n }\n\n label {\n color: var(--pine-color-text);\n display: flex;\n font-weight: var(--pine-font-weight-semi-bold);\n gap: var(--pine-dimension-xs);\n\n &::after {\n content: \"\";\n cursor: pointer;\n height: 100%;\n left: 0;\n position: absolute;\n top: 0;\n width: 100%;\n z-index: 1;\n }\n }\n\n .pds-radio__image-container {\n align-items: center;\n align-self: center;\n border: var(--pine-border);\n border-radius: var(--pine-border-radius-full);\n cursor: pointer;\n display: flex;\n flex: none;\n grid-area: image;\n justify-content: center;\n overflow: hidden;\n position: relative;\n transition: all 0.2s ease;\n\n &:hover {\n border-color: var(--pine-color-border-hover);\n }\n\n .pds-radio__image {\n height: 100%;\n object-fit: cover;\n width: 100%;\n }\n }\n\n .pds-radio__message {\n grid-area: message;\n margin-block-start: 0;\n margin-inline-start: 0;\n }\n\n // Disabled state\n &.is-disabled {\n background: var(--pine-color-background-container-disabled);\n border-color: var(--pine-color-border-disabled);\n cursor: not-allowed;\n\n .pds-radio__image-container {\n border-color: var(--pine-color-border-disabled);\n cursor: not-allowed;\n opacity: 0.5;\n\n &:hover {\n border-color: var(--pine-color-border-disabled);\n }\n }\n\n label {\n color: var(--pine-color-text-label-disabled);\n cursor: not-allowed;\n }\n\n .pds-radio__message {\n color: var(--pine-color-text-label-disabled);\n }\n }\n\n // Invalid state - no red styling, only error message\n &.is-invalid {\n .pds-radio__message--error {\n color: var(--pine-color-text-message-danger);\n }\n }\n}\n","import { Component, Host, h, Prop, Event, EventEmitter, Element, State } from '@stencil/core';\nimport { assignDescription, messageId, exposeTypeProperty } from '../../utils/form';\nimport { danger } from '@pine-ds/icons/icons';\n\n/**\n * @slot image - Custom image content to display instead of the default radio input\n * @part image-container - The container for the image\n */\n@Component({\n tag: 'pds-radio',\n styleUrls: ['../../global/styles/utils/label.scss', 'pds-radio.scss'],\n scoped: true,\n})\nexport class PdsRadio {\n private readonly _type = 'radio' as const;\n\n @Element() el: HTMLPdsRadioElement;\n\n @State() private _hasImage = false;\n\n /**\n * Determines whether or not the radio is checked.\n * @defaultValue false\n */\n @Prop() checked = false;\n\n /**\n * A unique identifier used for the underlying component `id` attribute and the label `for` attribute.\n */\n @Prop() componentId!: string;\n\n /**\n * Determines whether or not the radio is disabled.\n * @defaultValue false\n */\n @Prop() disabled = false;\n\n /**\n * Displays error message text describing an invalid state.\n */\n @Prop() errorMessage: string;\n\n /**\n * Displays helper message text below radio.\n */\n @Prop() helperMessage: string;\n\n /**\n * Adds a border around the radio component for better visual separation.\n * @defaultValue false\n */\n @Prop() hasBorder = false;\n\n /**\n * Determines whether or not the radio is invalid.\n * @defaultValue false\n */\n @Prop() invalid = false;\n\n /**\n * String used for label text next to radio.\n */\n @Prop() label: string;\n\n /**\n * Visually hides the label text for instances where only the radio should be displayed. Label remains accessible to assistive technology such as screen readers.\n */\n @Prop() hideLabel: boolean;\n\n /**\n * String used for radio `name` attribute.\n */\n @Prop() name: string;\n\n /**\n * Determines whether or not the radio is required.\n * @defaultValue false\n */\n @Prop() required = false;\n\n /**\n * The value of the radio that is submitted with a form.\n */\n @Prop() value: string;\n\n\n /**\n * Emits a boolean indicating whether the radio is currently checked or unchecked.\n */\n @Event() pdsRadioChange: EventEmitter<boolean>;\n\n private handleRadioChange = (e: Event) => {\n if (this.disabled) {\n return;\n }\n\n const target = e.target as HTMLInputElement;\n const isChecked = target.checked;\n\n // If this radio is inside a pds-radio-group, don't emit the individual event\n // The group will handle emitting its own event\n if (this.el.closest('pds-radio-group')) {\n return;\n }\n\n this.pdsRadioChange.emit(isChecked);\n }\n\n private hasImageSlot(): boolean {\n const imageSlot = this.el.querySelector('[slot=\"image\"]');\n return !!imageSlot;\n }\n\n private hasImage(): boolean {\n return this._hasImage;\n }\n\n private classNames() {\n const classNames = [];\n\n if (this.invalid) {\n classNames.push('is-invalid');\n }\n if (this.disabled) {\n classNames.push('is-disabled');\n }\n if (this.hasBorder) {\n classNames.push('has-border');\n }\n if (this.hasImage()) {\n classNames.push('has-image');\n }\n\n return classNames.join(' ');\n }\n\n componentWillLoad() {\n this._hasImage = this.hasImageSlot();\n }\n\n connectedCallback() {\n // Expose type property on the element instance to match native form element behavior\n exposeTypeProperty(this.el, () => this._type);\n }\n\n render() {\n const renderLabelAndMessages = () => [\n <label htmlFor={this.componentId} key={`${this.componentId}-label`}>\n <input\n aria-describedby={assignDescription(this.componentId, this.invalid, this.helperMessage)}\n aria-invalid={this.invalid ? \"true\" : undefined}\n type=\"radio\"\n id={this.componentId}\n name={this.name}\n value={this.value}\n checked={this.checked}\n required={this.required}\n disabled={this.disabled}\n onChange={this.handleRadioChange}\n class={this.hasImage() ? 'visually-hidden' : ''}\n />\n <span class={this.hideLabel ? 'visually-hidden' : ''}>\n {this.label}\n </span>\n </label>,\n this.helperMessage && (\n <div\n key={`${this.componentId}-helper`}\n class={'pds-radio__message'}\n id={messageId(this.componentId, 'helper')}\n >\n {this.helperMessage}\n </div>\n ),\n this.errorMessage && (\n <div\n key={`${this.componentId}-error`}\n class={`pds-radio__message pds-radio__message--error`}\n id={messageId(this.componentId, 'error')}\n aria-live=\"assertive\"\n >\n <pds-icon icon={danger} size=\"small\" />\n {this.errorMessage}\n </div>\n )\n ];\n\n return (\n <Host class={this.classNames()}>\n {this.hasImage() && (\n <div class=\"pds-radio__image-container\" part=\"image-container\">\n <slot name=\"image\" onSlotchange={() => (this._hasImage = this.hasImageSlot())} />\n </div>\n )}\n {this.hasImage() ? (\n <div class=\"pds-radio__content-wrapper\">\n {renderLabelAndMessages()}\n </div>\n ) : (\n renderLabelAndMessages()\n )}\n </Host>\n );\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"p-CwlStDlm.system.js","sources":["src/global/styles/utils/label.scss?tag=pds-radio&encapsulation=scoped","src/components/pds-radio/pds-radio.scss?tag=pds-radio&encapsulation=scoped","src/components/pds-radio/pds-radio.tsx"],"sourcesContent":[":host {\n display: inline-block;\n}\n\n:host([aria-disabled=\"true\"]) label {\n color: var(--pine-color-text-label-disabled);\n}\n\n:host([aria-readonly=\"true\"]) {\n label {\n color: var(--pine-color-text-label-readonly);\n }\n}\n\nlabel {\n color: var(--pine-color-text-label);\n font: var(--pine-typography-body-medium);\n letter-spacing: var(--pine-letter-spacing);\n}\n",":host {\n --sizing-check-size: 6px;\n --sizing-input-size: var(--pine-dimension-sm);\n --sizing-margin-block-start: 6px;\n\n align-items: center;\n display: flex;\n flex-flow: row wrap;\n position: relative;\n}\n\n:host(.is-invalid) {\n // Invalid state only affects error message styling, not the radio itself\n // This allows radio-group to handle error display without red radios\n .pds-radio__message--error {\n color: var(--pine-color-text-message-danger);\n }\n}\n\n:host(.has-border) {\n align-items: flex-start;\n border: var(--pine-border);\n border-radius: var(--pine-dimension-125);\n column-gap: var(--pine-dimension-xs);\n display: flex;\n flex: 1;\n flex-direction: column;\n padding: var(--pine-dimension-md);\n\n // On small screens, ensure full width when in a row layout\n @media (max-width: 767px) {\n box-sizing: border-box;\n flex: 1 1 100%;\n max-width: 100%;\n min-width: 0;\n }\n\n &:hover {\n border: var(--pine-border-hover);\n }\n\n &:has(input:checked) {\n box-shadow: 0 0 0 2px var(--pine-color-primary-hover);\n }\n\n label {\n color: var(--pine-color-text);\n font-weight: var(--pine-font-weight-semi-bold);\n\n &::after {\n content: \"\";\n cursor: pointer;\n height: 100%;\n left: 0;\n position: absolute;\n top: 0;\n width: 100%;\n z-index: 1;\n }\n }\n\n // Disabled state for bordered radios\n &:has(input:disabled) {\n background: var(--pine-color-background-container-disabled);\n border-color: var(--pine-color-border-disabled);\n cursor: not-allowed;\n\n label {\n color: var(--pine-color-text-label-disabled);\n cursor: not-allowed;\n }\n }\n\n // Invalid state for bordered radios - no red styling, only error message\n &.is-invalid {\n .pds-radio__message--error {\n color: var(--pine-color-text-message-danger);\n }\n }\n}\n\ninput {\n appearance: none;\n background: var(--pine-color-background-container);\n border: var(--pine-border);\n border-radius: var(--pine-border-radius-full);\n flex: none;\n height: var(--sizing-input-size);\n margin: 0;\n margin-block-start: var(--pine-dimension-025);\n position: relative;\n width: var(--sizing-input-size);\n\n /* stylelint-disable-next-line selector-no-qualifying-type */\n &.visually-hidden {\n border: 0;\n clip: rect(0 0 0 0);\n clip-path: polygon(0 0, 0 0, 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n width: 1px;\n }\n\n &:hover {\n background: var(--pine-color-background-container-hover);\n border: var(--pine-border-hover);\n }\n\n &:checked {\n background: var(--pine-color-accent);\n border-color: var(--pine-color-accent);\n\n &:hover {\n background: var(--pine-color-accent-hover);\n border-color: var(--pine-color-accent-hover);\n }\n\n &::after {\n /* stylelint-disable-next-line pine-design-system/prefer-semantic-tokens */\n background: var(--pine-color-white);\n border-radius: var(--pine-border-radius-full);\n content: \"\";\n display: block;\n height: var(--sizing-check-size);\n left: 50%;\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n width: var(--sizing-check-size);\n }\n }\n\n &:disabled {\n background: var(--pine-color-background-container-disabled);\n border-color: var(--pine-color-border-disabled);\n cursor: not-allowed;\n\n &:checked {\n background-color: var(--pine-color-accent-disabled);\n border-color: var(--pine-color-border-disabled);\n\n &::after {\n border-color: var(--pine-color-border-disabled);\n }\n }\n\n\n }\n\n &:focus-visible {\n outline: var(--pine-outline-focus);\n }\n\n}\n\nlabel {\n display: flex;\n gap: var(--pine-dimension-xs);\n}\n\n// Disabled label styling\nlabel:has(input:disabled) {\n color: var(--pine-color-text-label-disabled);\n cursor: not-allowed;\n}\n\n// Disabled message styling\n:host:has(input:disabled) .pds-radio__message {\n color: var(--pine-color-text-label-disabled);\n}\n\n.visually-hidden {\n border: 0;\n clip: rect(0 0 0 0);\n clip-path: polygon(0 0, 0 0, 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n width: 1px;\n}\n\n.pds-radio__message {\n color: var(--pine-color-text-message);\n flex-basis: 100%; // Ensure message wraps to new line in flex container\n font: var(--pine-typography-body);\n margin-inline-start: var(--pine-dimension-md);\n width: 100%;\n}\n\n.pds-radio__message--error {\n display: flex;\n gap: var(--pine-dimension-2xs);\n\n pds-icon {\n margin-block-start: var(--pine-dimension-025);\n }\n}\n\n// Image-based radio styles - matches bordered layout\n:host(.has-image) {\n align-items: center;\n border: var(--pine-border);\n border-radius: var(--pine-dimension-125);\n column-gap: var(--pine-dimension-xs);\n display: flex;\n flex: 1;\n padding: var(--pine-dimension-md);\n\n // On small screens, ensure full width when in a row layout\n @media (max-width: 767px) {\n box-sizing: border-box;\n flex: 1 1 100%;\n max-width: 100%;\n min-width: 0;\n }\n\n &:hover {\n border: var(--pine-border-hover);\n }\n\n &:has(input:checked) {\n box-shadow: 0 0 0 2px var(--pine-color-primary-hover);\n }\n\n label {\n color: var(--pine-color-text);\n display: flex;\n font-weight: var(--pine-font-weight-semi-bold);\n gap: var(--pine-dimension-xs);\n\n &::after {\n content: \"\";\n cursor: pointer;\n height: 100%;\n left: 0;\n position: absolute;\n top: 0;\n width: 100%;\n z-index: 1;\n }\n }\n\n .pds-radio__image-container {\n align-items: center;\n align-self: center;\n border: var(--pine-border);\n border-radius: var(--pine-border-radius-full);\n cursor: pointer;\n display: flex;\n flex: none;\n grid-area: image;\n justify-content: center;\n overflow: hidden;\n position: relative;\n transition: all 0.2s ease;\n\n &:hover {\n border-color: var(--pine-color-border-hover);\n }\n\n .pds-radio__image {\n height: 100%;\n object-fit: cover;\n width: 100%;\n }\n }\n\n .pds-radio__message {\n grid-area: message;\n margin-block-start: 0;\n margin-inline-start: 0;\n }\n\n // Disabled state\n &.is-disabled {\n background: var(--pine-color-background-container-disabled);\n border-color: var(--pine-color-border-disabled);\n cursor: not-allowed;\n\n .pds-radio__image-container {\n border-color: var(--pine-color-border-disabled);\n cursor: not-allowed;\n opacity: 0.5;\n\n &:hover {\n border-color: var(--pine-color-border-disabled);\n }\n }\n\n label {\n color: var(--pine-color-text-label-disabled);\n cursor: not-allowed;\n }\n\n .pds-radio__message {\n color: var(--pine-color-text-label-disabled);\n }\n }\n\n // Invalid state - no red styling, only error message\n &.is-invalid {\n .pds-radio__message--error {\n color: var(--pine-color-text-message-danger);\n }\n }\n}\n","import { Component, Host, h, Prop, Event, EventEmitter, Element, State } from '@stencil/core';\nimport { assignDescription, messageId, exposeTypeProperty } from '../../utils/form';\nimport { danger } from '@pine-ds/icons/icons';\n\n/**\n * @slot image - Custom image content to display instead of the default radio input\n * @part image-container - The container for the image\n */\n@Component({\n tag: 'pds-radio',\n styleUrls: ['../../global/styles/utils/label.scss', 'pds-radio.scss'],\n scoped: true,\n})\nexport class PdsRadio {\n private readonly _type = 'radio' as const;\n\n @Element() el: HTMLPdsRadioElement;\n\n @State() private _hasImage = false;\n\n /**\n * Determines whether or not the radio is checked.\n * @defaultValue false\n */\n @Prop() checked = false;\n\n /**\n * A unique identifier used for the underlying component `id` attribute and the label `for` attribute.\n */\n @Prop() componentId!: string;\n\n /**\n * Determines whether or not the radio is disabled.\n * @defaultValue false\n */\n @Prop() disabled = false;\n\n /**\n * Displays error message text describing an invalid state.\n */\n @Prop() errorMessage: string;\n\n /**\n * Displays helper message text below radio.\n */\n @Prop() helperMessage: string;\n\n /**\n * Adds a border around the radio component for better visual separation.\n * @defaultValue false\n */\n @Prop() hasBorder = false;\n\n /**\n * Determines whether or not the radio is invalid.\n * @defaultValue false\n */\n @Prop() invalid = false;\n\n /**\n * String used for label text next to radio.\n */\n @Prop() label: string;\n\n /**\n * Visually hides the label text for instances where only the radio should be displayed. Label remains accessible to assistive technology such as screen readers.\n */\n @Prop() hideLabel: boolean;\n\n /**\n * String used for radio `name` attribute.\n */\n @Prop() name: string;\n\n /**\n * Determines whether or not the radio is required.\n * @defaultValue false\n */\n @Prop() required = false;\n\n /**\n * The value of the radio that is submitted with a form.\n */\n @Prop() value: string;\n\n\n /**\n * Emits a boolean indicating whether the radio is currently checked or unchecked.\n */\n @Event() pdsRadioChange: EventEmitter<boolean>;\n\n private handleRadioChange = (e: Event) => {\n if (this.disabled) {\n return;\n }\n\n const target = e.target as HTMLInputElement;\n const isChecked = target.checked;\n\n // If this radio is inside a pds-radio-group, don't emit the individual event\n // The group will handle emitting its own event\n if (this.el.closest('pds-radio-group')) {\n return;\n }\n\n this.pdsRadioChange.emit(isChecked);\n }\n\n private hasImageSlot(): boolean {\n const imageSlot = this.el.querySelector('[slot=\"image\"]');\n return !!imageSlot;\n }\n\n private hasImage(): boolean {\n return this._hasImage;\n }\n\n private classNames() {\n const classNames = [];\n\n if (this.invalid) {\n classNames.push('is-invalid');\n }\n if (this.disabled) {\n classNames.push('is-disabled');\n }\n if (this.hasBorder) {\n classNames.push('has-border');\n }\n if (this.hasImage()) {\n classNames.push('has-image');\n }\n\n return classNames.join(' ');\n }\n\n componentWillLoad() {\n this._hasImage = this.hasImageSlot();\n }\n\n connectedCallback() {\n // Expose type property on the element instance to match native form element behavior\n exposeTypeProperty(this.el, () => this._type);\n }\n\n render() {\n const renderLabelAndMessages = () => [\n <label htmlFor={this.componentId} key={`${this.componentId}-label`}>\n <input\n aria-describedby={assignDescription(this.componentId, this.invalid, this.helperMessage)}\n aria-invalid={this.invalid ? \"true\" : undefined}\n type=\"radio\"\n id={this.componentId}\n name={this.name}\n value={this.value}\n checked={this.checked}\n required={this.required}\n disabled={this.disabled}\n onChange={this.handleRadioChange}\n class={this.hasImage() ? 'visually-hidden' : ''}\n />\n <span class={this.hideLabel ? 'visually-hidden' : ''}>\n {this.label}\n </span>\n </label>,\n this.helperMessage && (\n <div\n key={`${this.componentId}-helper`}\n class={'pds-radio__message'}\n id={messageId(this.componentId, 'helper')}\n >\n {this.helperMessage}\n </div>\n ),\n this.errorMessage && (\n <div\n key={`${this.componentId}-error`}\n class={`pds-radio__message pds-radio__message--error`}\n id={messageId(this.componentId, 'error')}\n aria-live=\"assertive\"\n >\n <pds-icon icon={danger} size=\"small\" />\n {this.errorMessage}\n </div>\n )\n ];\n\n return (\n <Host class={this.classNames()}>\n {this.hasImage() && (\n <div class=\"pds-radio__image-container\" part=\"image-container\">\n <slot name=\"image\" onSlotchange={() => (this._hasImage = this.hasImageSlot())} />\n </div>\n )}\n {this.hasImage() ? (\n <div class=\"pds-radio__content-wrapper\">\n {renderLabelAndMessages()}\n </div>\n ) : (\n renderLabelAndMessages()\n )}\n </Host>\n );\n }\n}\n"],"names":[],"mappings":"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"}
|